diff --git a/.eslintignore b/.eslintignore
index 88264c9..0c0c585 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1 +1,3 @@
-/test/fixtures
\ No newline at end of file
+/test/fixtures
+dist/
+example/
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
index 1ff97d2..043b9a9 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,10 +1,13 @@
{
- "extends": ["kaisermann"],
+ "extends": ["kaisermann/typescript"],
"env": {
"browser": true,
"jest": true
},
"parserOptions": {
"sourceType": "module"
+ },
+ "rules": {
+ "@typescript-eslint/camelcase": "off"
}
}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1bb5a01..802278d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -15,7 +15,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- node-version: [8, 10, 12]
+ node-version: [13.2.0]
os: [ubuntu-latest, windows-latest, macOS-latest]
steps:
diff --git a/.gitignore b/.gitignore
index ee1bb96..191e7e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
node_modules
*.log
dist/
-coverage/
\ No newline at end of file
+coverage/
+docs/
\ No newline at end of file
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..5b8f80f
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+13.2.0
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
index 7bd2824..9b4e1ca 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,7 +1,7 @@
{
"semi": false,
"printWidth": 80,
- "trailingComma": "all",
+ "trailingComma": "es5",
"bracketSpacing": true,
"jsxBracketSameLine": false,
"singleQuote": true
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..9daf8f5
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,71 @@
+# [2.1.0](https://github.com/kaisermann/svelte-i18n/compare/v2.1.0-alpha.2...v2.1.0) (2019-11-30)
+
+
+
+# [2.1.0-alpha.2](https://github.com/kaisermann/svelte-i18n/compare/v2.0.2...v2.1.0-alpha.2) (2019-11-29)
+
+
+### Bug Fixes
+
+* đ allow to wait for initial locale load ([0b7f61c](https://github.com/kaisermann/svelte-i18n/commit/0b7f61c49a1c3206bbb5d9c77dfb5819a85d4bb5))
+
+
+### Features
+
+* đž add warnOnMissingMessages ([efbe793](https://github.com/kaisermann/svelte-i18n/commit/efbe793a0f3656b27d050886d85e06e9327ea681))
+
+
+
+## [2.0.2](https://github.com/kaisermann/svelte-i18n/compare/v2.0.0...v2.0.2) (2019-11-24)
+
+
+### Bug Fixes
+
+* đ fallback behaviour and simplify API contact points ([6e0df2f](https://github.com/kaisermann/svelte-i18n/commit/6e0df2fb25e1bf9038eb4252ba993541a7fa2b4a))
+* đ fallback locale being looked twice ([9260b83](https://github.com/kaisermann/svelte-i18n/commit/9260b83756b9bb2811be48817190510fa24cb2ff))
+
+
+
+## [2.0.1](https://github.com/kaisermann/svelte-i18n/compare/v2.0.0...v2.0.1) (2019-11-24)
+
+
+### Bug Fixes
+
+* đ fallback behaviour and simplify API contact points ([64e69eb](https://github.com/kaisermann/svelte-i18n/commit/64e69eb3c0f62754570429a87450ff53eb29973a))
+
+
+
+# [2.0.0](https://github.com/kaisermann/svelte-i18n/compare/v1.1.2-beta...v2.0.0) (2019-11-22)
+
+
+### Bug Fixes
+
+* đ consider generic locales when registering loaders ([1b0138c](https://github.com/kaisermann/svelte-i18n/commit/1b0138c3f3458c4d8f0b30b4550652e8e0317fc7))
+* đ flush use the same promise if it wasn't resolved yet ([66972d4](https://github.com/kaisermann/svelte-i18n/commit/66972d4b1536b53d33c7974eb0fc059c0d0cc46c))
+* client locale parameters typo ([#11](https://github.com/kaisermann/svelte-i18n/issues/11)) ([d1adf4c](https://github.com/kaisermann/svelte-i18n/commit/d1adf4c00a48ed679ae34a2bffc8ca9d709a2d5c))
+
+
+### Features
+
+* đž `addMessagesTo` method ([d6b8664](https://github.com/kaisermann/svelte-i18n/commit/d6b8664009d738870aa3f0a4bd80e96abf6e6e59))
+* đž add $loading indicator store ([bd2b350](https://github.com/kaisermann/svelte-i18n/commit/bd2b3501e9caa2e73f64835fedf93dc8939d41de))
+* đž add custom formats support ([d483244](https://github.com/kaisermann/svelte-i18n/commit/d483244a9f2bb5ba63ef8be95f0e87030b5cbc7e))
+* đž add pathname and hostname pattern matching ([b19b690](https://github.com/kaisermann/svelte-i18n/commit/b19b69050e252120016d47540e108f6eea193c37))
+* đž add preloadLocale method ([0a0e4b3](https://github.com/kaisermann/svelte-i18n/commit/0a0e4b3bab74499d684c86e17c949160762ae19b))
+* đž add waitInitialLocale helper ([6ee28e7](https://github.com/kaisermann/svelte-i18n/commit/6ee28e7d279c62060e834699714685567b6ab67c))
+* đž also look for message in generic locale ([e5d7b84](https://github.com/kaisermann/svelte-i18n/commit/e5d7b84241bd7e3fdd833e82dd8a9a8f251f023c)), closes [#19](https://github.com/kaisermann/svelte-i18n/issues/19)
+* đž export a store listing all locales available ([f58a20b](https://github.com/kaisermann/svelte-i18n/commit/f58a20b21eb58f891b3f9912cb6fff11eb329083))
+* đž locale change automatically updates the document lang ([64c8e55](https://github.com/kaisermann/svelte-i18n/commit/64c8e55f80636a1185a1797fe486b4189ff56944))
+
+
+### Performance Improvements
+
+* âĄïž delay the $loading state change for quick loadings ([6573f51](https://github.com/kaisermann/svelte-i18n/commit/6573f51e9b817db0c77f158945572f4ba14c71fc))
+
+
+### BREAKING CHANGES
+
+* This PR modifies the formatter method arguments.
+
+
+
diff --git a/README.md b/README.md
index 6d22f77..801805e 100644
--- a/README.md
+++ b/README.md
@@ -1,247 +1,48 @@
+[![npm version](https://badge.fury.io/js/svelte-i18n.svg)](https://badge.fury.io/js/svelte-i18n) ![](https://github.com/kaisermann/svelte-i18n/workflows/CI/badge.svg)
+
# svelte-i18n
> Internationalization for Svelte.
-**Note:** the `v2` version was unpublished and will be released again in the following week after I rewrite all of its tests. For now, use the `v1.1.2`.
+`svelte-i18n` helps you localize your app using the reactive tools Svelte provides. By using [stores](https://svelte.dev/docs#svelte_store) to keep track of the current `locale`, `dictionary` of messages and to `format` messages, we keep everything neat, in sync and easy to use on your svelte files.
-## Usage
+**Requirements**
-`svelte-i18n` utilizes svelte `stores` for keeping track of the current locale, dictionary of messages and the main format function. This way, we keep everything neat, in sync and easy to use on your svelte files.
+- Node: `>= 11.15.0`
+- Browsers: `Chrome 38+`, `Edge 12+`, `Firefox 13+`, `Opera 25+`, `Safari 8+`.
----
-
-### Locale
-
-The `locale` store defines what is the current locale.
-
-```js
-import { locale, dictionary, getClientLocale } from 'svelte-i18n'
-
-// Set the current locale to en-US
-locale.set('en-US')
-
-// This is a store, so we can subscribe to its changes
-locale.subscribe(() => {
- console.log('locale change')
-})
-
-// svelte-i18n exports a method to help getting the current client locale
-locale.set(
- getClientLocale({
- // the fallback locale, if didn't find any
- fallback: 'en-US',
- // set to 'true' to check the 'window.navigator.language'
- navigator: true,
- // set the key name to look for a locale on 'window.location.search'
- // 'example.com?locale=en-US'
- search: 'lang',
- // set the key name to look for a locale on 'window.location.hash'
- // 'example.com#locale=en-US'
- hash: 'locale',
- }),
-)
-```
-
-If a locale with the format `xx-YY` is not found, `svelte-i18n` looks for the locale `xx` as well.
-
----
-
-### The dictionary
-
-The `dictionary` store defines the dictionary of messages of all locales.
-
-```js
-import { locale, dictionary } from 'svelte-i18n'
-
-// Define a locale dictionary
-dictionary.set({
- pt: {
- message: 'Mensagem',
- 'switch.lang': 'Trocar idioma',
- greeting: {
- ask: 'Por favor, digite seu nome',
- message: 'OlĂĄ {name}, como vai?',
- },
- photos:
- 'VocĂȘ {n, plural, =0 {nĂŁo tem fotos.} =1 {tem uma foto.} other {tem # fotos.}}',
- cats: 'Tenho {n, number} {n,plural,=0{gatos}one{gato}other{gatos}}',
- },
- en: {
- message: 'Message',
- 'switch.lang': 'Switch language',
- greeting: {
- ask: 'Please type your name',
- message: 'Hello {name}, how are you?',
- },
- photos:
- 'You have {n, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}',
- cats: 'I have {n, number} {n,plural,one{cat}other{cats}}',
- },
-})
-
-// It's also possible to merge the current dictionary
-// with other objets
-dictionary.update(dict => {
- dict.fr = {
- // ...french messages
- }
- return dict
-})
-```
-
-Each language message dictionary can be as deep as you want. Messages can also be looked up by a string represetation of it's path on the dictionary (i.e `greeting.message`).
-
----
-
-### Formatting
-
-The `_`/`format` store is the actual formatter method. To use it, it's simple as any other svelte store.
-
-```html
-
-
-
-```
-
-`svelte-i18n` uses `formatjs` behind the scenes, which means it supports the [ICU message format](http://userguide.icu-project.org/formatparse/messages) for interpolation, pluralization and much more.
-
-```html
-
- {$_('greeting.message', { name: 'John' })}
-
-
- {$_('photos', { n: 0 })}
-
-
- {$_('photos', { n: 12 })}
-
-
-```
-
-### Formatting methods
-
-#### `_` / `format`
-
-`function(messageId: string, locale:? string): string`
-
-`function(messageId: string, interpolations?: object, locale:? string): string`
-
-Main formatting method that formats a localized message by its id.
-
-```html
+```svelte
-{$_('greeting.ask')}
-
+{$_('page.home.title')}
+
+
+ {$_('page.home.nav', { default: 'Home' })}
+ {$_('page.about.nav', { default: 'About' })}
+ {$_('page.contact.nav', { default: 'Contact' })}
+
```
-#### `_.upper`
-
-Transforms a localized message into uppercase.
-
-```html
-
-
-{$_.upper('greeting.ask')}
-
+```jsonc
+// en.json
+{
+ "page": {
+ "home": {
+ "title": "Homepage",
+ "nav": "Home"
+ },
+ "about": {
+ "title": "About",
+ "nav": "About"
+ },
+ "contact": {
+ "title": "Contact",
+ "nav": "Contact Us"
+ }
+ }
+}
```
-#### `_.lower`
-
-Transforms a localized message into lowercase.
-
-```html
-
-
-{$_.lower('greeting.ask')}
-
-```
-
-#### `_.capital`
-
-Capitalize a localized message.
-
-```html
-
-
-{$_.capital('greeting.ask')}
-
-```
-
-#### `_.title`
-
-Transform the message into title case.
-
-```html
-
-
-{$_.capital('greeting.ask')}
-
-```
-
-#### `_.time`
-
-`function(time: Date, format?: string, locale?: string)`
-
-Formats a date object into a time string with the specified format (`short`, `medium`, `long`, `full`). Please refer to the [ICU message format](http://userguide.icu-project.org/formatparse/messages) documentation for all available. formats
-
-```html
-
-
-{$_.time(new Date(2019, 3, 24, 23, 45))}
-
-
-{$_.time(new Date(2019, 3, 24, 23, 45), 'medium')}
-
-```
-
-#### `_.date`
-
-`function(date: Date, format?: string, locale?: string)`
-
-Formats a date object into a string with the specified format (`short`, `medium`, `long`, `full`). Please refer to the [ICU message format](http://userguide.icu-project.org/formatparse/messages) documentation for all available. formats
-
-```html
-
-
-{$_.date(new Date(2019, 3, 24, 23, 45))}
-
-
-{$_.date(new Date(2019, 3, 24, 23, 45), 'medium')}
-
-```
-
-#### `_.number`
-
-`function(number: Number, locale?: string)`
-
-Formats a number with the specified locale
-
-```html
-
-
-{$_.number(100000000)}
-
-
-{$_.number(100000000, 'pt')}
-
-```
+### [Go to documentation](https://github.com/kaisermann/svelte-i18n/wiki)
diff --git a/example/.gitignore b/example/.gitignore
index 849d10a..5aea041 100644
--- a/example/.gitignore
+++ b/example/.gitignore
@@ -1,3 +1,6 @@
.DS_Store
-node_modules
-public/bundle.*
+/node_modules/
+/src/node_modules/@sapper/
+yarn-error.log
+/cypress/screenshots/
+/__sapper__/
diff --git a/example/README.md b/example/README.md
index d1d1702..fecc155 100644
--- a/example/README.md
+++ b/example/README.md
@@ -1,68 +1,109 @@
-*Psst â looking for a shareable component template? Go here --> [sveltejs/component-template](https://github.com/sveltejs/component-template)*
+# sapper-template
----
+The default [Sapper](https://github.com/sveltejs/sapper) template, available for Rollup and webpack.
-# svelte app
-This is a project template for [Svelte](https://svelte.dev) apps. It lives at https://github.com/sveltejs/template.
+## Getting started
-To create a new project based on this template using [degit](https://github.com/Rich-Harris/degit):
+
+### Using `degit`
+
+[`degit`](https://github.com/Rich-Harris/degit) is a scaffolding tool that lets you create a directory from a branch in a repository. Use either the `rollup` or `webpack` branch in `sapper-template`:
```bash
-npx degit sveltejs/template svelte-app
-cd svelte-app
+# for Rollup
+npx degit "sveltejs/sapper-template#rollup" my-app
+# for webpack
+npx degit "sveltejs/sapper-template#webpack" my-app
```
-*Note that you will need to have [Node.js](https://nodejs.org) installed.*
+
+### Using GitHub templates
+
+Alternatively, you can use GitHub's template feature with the [sapper-template-rollup](https://github.com/sveltejs/sapper-template-rollup) or [sapper-template-webpack](https://github.com/sveltejs/sapper-template-webpack) repositories.
-## Get started
+### Running the project
-Install the dependencies...
-
-```bash
-cd svelte-app
-npm install
-```
-
-...then start [Rollup](https://rollupjs.org):
+However you get the code, you can install dependencies and run the project in development mode with:
```bash
+cd my-app
+npm install # or yarn
npm run dev
```
-Navigate to [localhost:5000](http://localhost:5000). You should see your app running. Edit a component file in `src`, save it, and reload the page to see your changes.
+Open up [localhost:3000](http://localhost:3000) and start clicking around.
+
+Consult [sapper.svelte.dev](https://sapper.svelte.dev) for help getting started.
-## Deploying to the web
+## Structure
-### With [now](https://zeit.co/now)
+Sapper expects to find two directories in the root of your project â `src` and `static`.
-Install `now` if you haven't already:
+
+### src
+
+The [src](src) directory contains the entry points for your app â `client.js`, `server.js` and (optionally) a `service-worker.js` â along with a `template.html` file and a `routes` directory.
+
+
+#### src/routes
+
+This is the heart of your Sapper app. There are two kinds of routes â *pages*, and *server routes*.
+
+**Pages** are Svelte components written in `.svelte` files. When a user first visits the application, they will be served a server-rendered version of the route in question, plus some JavaScript that 'hydrates' the page and initialises a client-side router. From that point forward, navigating to other pages is handled entirely on the client for a fast, app-like feel. (Sapper will preload and cache the code for these subsequent pages, so that navigation is instantaneous.)
+
+**Server routes** are modules written in `.js` files, that export functions corresponding to HTTP methods. Each function receives Express `request` and `response` objects as arguments, plus a `next` function. This is useful for creating a JSON API, for example.
+
+There are three simple rules for naming the files that define your routes:
+
+* A file called `src/routes/about.svelte` corresponds to the `/about` route. A file called `src/routes/blog/[slug].svelte` corresponds to the `/blog/:slug` route, in which case `params.slug` is available to the route
+* The file `src/routes/index.svelte` (or `src/routes/index.js`) corresponds to the root of your app. `src/routes/about/index.svelte` is treated the same as `src/routes/about.svelte`.
+* Files and directories with a leading underscore do *not* create routes. This allows you to colocate helper modules and components with the routes that depend on them â for example you could have a file called `src/routes/_helpers/datetime.js` and it would *not* create a `/_helpers/datetime` route
+
+
+### static
+
+The [static](static) directory contains any static assets that should be available. These are served using [sirv](https://github.com/lukeed/sirv).
+
+In your [service-worker.js](src/service-worker.js) file, you can import these as `files` from the generated manifest...
+
+```js
+import { files } from '@sapper/service-worker';
+```
+
+...so that you can cache them (though you can choose not to, for example if you don't want to cache very large files).
+
+
+## Bundler config
+
+Sapper uses Rollup or webpack to provide code-splitting and dynamic imports, as well as compiling your Svelte components. With webpack, it also provides hot module reloading. As long as you don't do anything daft, you can edit the configuration files to add whatever plugins you'd like.
+
+
+## Production mode and deployment
+
+To start a production version of your app, run `npm run build && npm start`. This will disable live reloading, and activate the appropriate bundler plugins.
+
+You can deploy your application to any environment that supports Node 8 or above. As an example, to deploy to [Now](https://zeit.co/now), run these commands:
```bash
npm install -g now
-```
-
-Then, from within your project folder:
-
-```bash
now
```
-As an alternative, use the [Now desktop client](https://zeit.co/download) and simply drag the unzipped project folder to the taskbar icon.
-### With [surge](https://surge.sh/)
+## Using external components
-Install `surge` if you haven't already:
+When using Svelte components installed from npm, such as [@sveltejs/svelte-virtual-list](https://github.com/sveltejs/svelte-virtual-list), Svelte needs the original component source (rather than any precompiled JavaScript that ships with the component). This allows the component to be rendered server-side, and also keeps your client-side app smaller.
+
+Because of that, it's essential that the bundler doesn't treat the package as an *external dependency*. You can either modify the `external` option under `server` in [rollup.config.js](rollup.config.js) or the `externals` option in [webpack.config.js](webpack.config.js), or simply install the package to `devDependencies` rather than `dependencies`, which will cause it to get bundled (and therefore compiled) with your app:
```bash
-npm install -g surge
+npm install -D @sveltejs/svelte-virtual-list
```
-Then, from within your project folder:
-```bash
-npm run build
-surge public
-```
+## Bugs and feedback
+
+Sapper is in early development, and may have the odd rough edge here and there. Please be vocal over on the [Sapper issue tracker](https://github.com/sveltejs/sapper/issues).
diff --git a/example/messages/en.json b/example/messages/en.json
new file mode 100644
index 0000000..ac0c5e2
--- /dev/null
+++ b/example/messages/en.json
@@ -0,0 +1,20 @@
+{
+ "title": {
+ "index": "Sapper project template!"
+ },
+ "nav": {
+ "home": "Home",
+ "about": "About",
+ "blog": "Blog"
+ },
+ "messages": {
+ "success": "Great success!",
+ "high_five": "High five",
+ "try_editing": "Try editing this file (src/routes/index.svelte) to test live reloading."
+ },
+ "languages": {
+ "pt_BR": "Portugues",
+ "en": "English",
+ "es_ES": "Spanish"
+ }
+}
diff --git a/example/messages/es-ES.json b/example/messages/es-ES.json
new file mode 100644
index 0000000..826134b
--- /dev/null
+++ b/example/messages/es-ES.json
@@ -0,0 +1,20 @@
+{
+ "title": {
+ "index": " Plantilla de proyecto Sapper!"
+ },
+ "nav": {
+ "home": "Inicio",
+ "about": "Acerca",
+ "blog": "Blog"
+ },
+ "messages": {
+ "success": "Gran Ă©xito!",
+ "high_five": "Cinco altos",
+ "try_editing": " Intente editar este archivo (src/routes/index.svelte) para probar la recarga en vivo."
+ },
+ "languages": {
+ "pt_BR": "Portugués",
+ "en": "Ingles",
+ "es_ES": "Espanol"
+ }
+}
diff --git a/example/messages/pt-BR.json b/example/messages/pt-BR.json
new file mode 100644
index 0000000..1997c22
--- /dev/null
+++ b/example/messages/pt-BR.json
@@ -0,0 +1,20 @@
+{
+ "title": {
+ "index": "Modelo de projeto em Sapper!"
+ },
+ "nav": {
+ "home": "Home",
+ "about": "Sobre",
+ "blog": "Blog"
+ },
+ "messages": {
+ "success": "Suuuucesso!",
+ "high_five": "Toca aqui",
+ "try_editing": "Tente editar este arquivo (src/routes/index.svelte) para testar o recarregamento ao vivo."
+ },
+ "languages": {
+ "pt_BR": "PortuguĂȘs",
+ "en": "InglĂȘs",
+ "es_ES": "Espanhol"
+ }
+}
diff --git a/example/package-lock.json b/example/package-lock.json
index e4193df..0ba8c90 100644
--- a/example/package-lock.json
+++ b/example/package-lock.json
@@ -1,22 +1,268 @@
{
- "name": "svelte-app",
- "version": "1.0.0",
+ "version": "0.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==",
+ "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/highlight": {
+ "@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-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-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/highlight/-/highlight-7.0.0.tgz",
- "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "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-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",
@@ -24,22 +270,586 @@
"js-tokens": "^4.0.0"
}
},
- "@polka/url": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz",
- "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==",
+ "@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-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-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-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-runtime": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.4.tgz",
+ "integrity": "sha512-O8kSkS5fP74Ad/8pfsCMGa8sBRdLxYoSReaARRNSz3FbFQj3z/QUvoUmJ28gn9BO93YfnXc3j+Xyaqe8cKDNBQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.7.4",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "resolve": "^1.8.1",
+ "semver": "^5.5.1"
+ }
+ },
+ "@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/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/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"
+ }
+ },
+ "@polka/url": {
+ "version": "1.0.0-next.9",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.9.tgz",
+ "integrity": "sha512-VZqSaulg2kVQYMulmuZcvapPwH5/y81YHANiFIKz1GNZoG/F4o1JSeLlrvXJ8tC+RPUjxdrebfT3Qn+bnMi0bA=="
+ },
+ "@rollup/plugin-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.0.0.tgz",
+ "integrity": "sha512-Z65CtEVWv40+ri4CvmswyhtuUtki9yP5p0UJN/GyCKKyU4jRuDS9CG0ZuV7/XuS7zGkoajyE7E4XBEaC4GW62A==",
+ "dev": true,
+ "requires": {
+ "rollup-pluginutils": "^2.5.0"
+ }
+ },
+ "@rollup/plugin-replace": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.2.1.tgz",
+ "integrity": "sha512-dgq5ijT8fK18KTb1inenZ61ivTayV7pvbz2+ivT+VN20BOgJVM1fqoBETqGHKgFVm/J9BhR82mQyAtxfpPv1lQ==",
+ "dev": true,
+ "requires": {
+ "magic-string": "^0.25.2",
+ "rollup-pluginutils": "^2.6.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==",
+ "version": "0.0.40",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.40.tgz",
+ "integrity": "sha512-p3KZgMto/JyxosKGmnLDJ/dG5wf+qTRMUjHJcspC2oQKa4jP7mz+tv0ND56lLBu3ojHlhzY33Ol+khLyNmilkA==",
"dev": true
},
"@types/node": {
- "version": "12.0.8",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.8.tgz",
- "integrity": "sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg==",
+ "version": "12.12.14",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz",
+ "integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==",
"dev": true
},
"@types/resolve": {
@@ -51,10 +861,19 @@
"@types/node": "*"
}
},
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
"acorn": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
- "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz",
+ "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==",
"dev": true
},
"ansi-styles": {
@@ -66,154 +885,21 @@
"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==",
+ "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": {
- "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"
- }
- }
+ "object.assign": "^4.1.0"
}
},
- "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
- },
- "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-filter": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
- "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
- "dev": true
- },
- "array-map": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
- "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
- "dev": true
- },
- "array-reduce": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
- "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
- "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
- },
- "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
- },
- "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
- },
- "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
- },
"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"
- }
- }
- }
- },
- "binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true
- },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -224,33 +910,15 @@
"concat-map": "0.0.1"
}
},
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "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": {
- "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"
- }
- }
+ "caniuse-lite": "^1.0.30001010",
+ "electron-to-chromium": "^1.3.306",
+ "node-releases": "^1.1.40"
}
},
"buffer-from": {
@@ -265,23 +933,27 @@
"integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
"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==",
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
"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"
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
}
},
+ "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
+ },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -293,59 +965,23 @@
"supports-color": "^5.3.0"
}
},
- "chokidar": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
- "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
+ "clean-css": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
+ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
"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"
- }
- },
- "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"
+ "source-map": "~0.6.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"
- }
+ "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
}
}
},
- "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",
@@ -362,16 +998,47 @@
"dev": true
},
"commander": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "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
},
- "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
+ "compressible": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
+ "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
+ "requires": {
+ "mime-db": ">= 1.40.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "requires": {
+ "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"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
},
"concat-map": {
"version": "0.0.1",
@@ -379,23 +1046,32 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
- "console-clear": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz",
- "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==",
- "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"
+ }
},
- "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-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
+ "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
+ }
+ }
},
"cross-spawn": {
"version": "6.0.5",
@@ -411,19 +1087,18 @@
}
},
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
- "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
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
},
"define-properties": {
"version": "1.1.3",
@@ -434,46 +1109,16 @@
"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"
- }
- }
- }
+ "dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.315",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.315.tgz",
+ "integrity": "sha512-vjb/985qplro8hR0MshKPc+CD091yBY1OGtUCjCX9HlcoVSz7awUdwpgpin0/JSgdW2+RasGGVNCpufY1Ieqkw==",
+ "dev": true
},
"error-ex": {
"version": "1.3.2",
@@ -485,23 +1130,27 @@
}
},
"es-abstract": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
- "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "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.0",
+ "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-keys": "^1.0.12"
+ "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.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
- "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "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",
@@ -522,717 +1171,15 @@
"dev": true
},
"esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
- "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"
- }
- }
- }
- },
- "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"
- }
- }
- }
- },
- "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"
- }
- },
- "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"
- }
- }
- }
- },
- "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"
- }
- }
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "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"
- }
- },
- "fsevents": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
- "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.12.1",
- "node-pre-gyp": "^0.12.0"
- },
- "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.1",
- "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": "4.1.1",
- "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.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.3",
- "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.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,
- "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.3.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.2.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^4.1.0",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.12.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"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.1",
- "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.0",
- "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.6.3",
- "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.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,
- "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.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.3.4",
- "minizlib": "^1.1.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.2"
- }
- },
- "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.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
+ "fast-memoize": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.1.tgz",
+ "integrity": "sha512-xdmw296PCL01tMOXx9mdJSmWY29jQgxyuZdq0rEHMu+Tpe1eOEtCycoG6chzlcrWsNgpZP7oL8RiQr7+G6Bl6g=="
},
"function-bind": {
"version": "1.1.1",
@@ -1240,43 +1187,26 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
- "get-port": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
- "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
+ "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
},
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
+ "globalyzer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz",
+ "integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA=="
},
- "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"
- }
- }
- }
+ "globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
},
"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==",
+ "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
},
"has": {
@@ -1295,86 +1225,70 @@
"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=",
+ "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"
- }
- },
- "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": {
- "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.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
},
"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==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
+ "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
"dev": true
},
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "html-minifier": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz",
+ "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==",
+ "dev": true,
+ "requires": {
+ "camel-case": "^3.0.0",
+ "clean-css": "^4.2.1",
+ "commander": "^2.19.0",
+ "he": "^1.2.0",
+ "param-case": "^2.1.1",
+ "relateurl": "^0.2.7",
+ "uglify-js": "^3.5.1"
+ }
+ },
+ "http-link-header": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.0.2.tgz",
+ "integrity": "sha512-z6YOZ8ZEnejkcCWlGZzYXNa6i+ZaTfiTg3WhlV/YvnNya3W/RbX1bMVUMTuCrg/DrtTCQxaFCkXCz4FtLpcebg==",
"dev": true
},
+ "intl-format-cache": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-4.2.11.tgz",
+ "integrity": "sha512-5AEkYXzkrbz/PZDgQ2SLCgpBO6pHDqagaj7oF2PGcRyQf8f0uK8/YCAIU/E6UXomeZhjpqJ+qf18wvJglAJnjw=="
+ },
"intl-messageformat": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-4.1.2.tgz",
- "integrity": "sha512-VAIBsTw8VRgd/h4gYN7IbJFK/H6PbbDa6Sa5p2VbImO7HFr8CGpzX8pOooWQXAmiq+X6tPqPKXdrWFhoPbge/Q==",
+ "version": "7.6.1",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-7.6.1.tgz",
+ "integrity": "sha512-RN2wah9s/56EVMgVQKTcou2C2DoevmiPlWqIyoY3mciNrOWLlfjFqEFqqJrFinf32/LvnOhClwoqvDZ3T0Jh8Q==",
"requires": {
- "intl-messageformat-parser": "^1.6.8"
+ "intl-format-cache": "^4.2.11",
+ "intl-messageformat-parser": "^3.3.1"
}
},
"intl-messageformat-parser": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.6.8.tgz",
- "integrity": "sha512-wnjxkKzAOKUgtBYYqVoDf2xt8zSf/c/m7FrQSmaz0SL3LNEMzVzzYXeLLda//RD3s6Ae4Tj2CgpAmY0Fnrws6A=="
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-3.3.1.tgz",
+ "integrity": "sha512-H+t27dpxi8r51GD9km0huyy5UJET3YF3AT2mvXRc0PRioKPFNexxhMUSagPNrMqGhb+/7p7RPcmsv7tcgCdWWQ=="
},
- "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=",
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"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"
- }
- }
+ "loose-envify": "^1.0.0"
}
},
"is-arrayish": {
@@ -1383,135 +1297,39 @@
"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.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
"integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
"dev": true
},
- "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-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-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-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-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"
- }
- }
- }
- },
- "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"
- }
- },
"is-reference": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.2.tgz",
- "integrity": "sha512-Kn5g8c7XHKejFOpTf2QN9YjiHHKl5xRj+2uAZf9iM2//nkBNi/NNeB5JMoun28nEaUVHyPUzqzhfRlfAirEjXg==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz",
+ "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==",
"dev": true,
"requires": {
"@types/estree": "0.0.39"
+ },
+ "dependencies": {
+ "@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
+ }
}
},
"is-regex": {
@@ -1524,45 +1342,27 @@
}
},
"is-symbol": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
- "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "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.0"
+ "has-symbols": "^1.0.1"
}
},
- "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": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
"jest-worker": {
- "version": "24.6.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz",
- "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
+ "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
"dev": true,
"requires": {
- "merge-stream": "^1.0.1",
+ "merge-stream": "^2.0.0",
"supports-color": "^6.1.0"
},
"dependencies": {
@@ -1577,45 +1377,37 @@
}
}
},
+ "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
},
+ "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
},
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
- "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
- },
- "kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
- },
- "livereload": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.8.0.tgz",
- "integrity": "sha512-Hi5Na6VIK3e8zlgOS50fu+iOTKWj5hM0BE7NKpZkwnfWTnktTjA38ZUXa2NlJww8/GrdVhpnxdqlLad5fkO27g==",
+ "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": {
- "chokidar": "^2.1.5",
- "opts": ">= 1.2.0",
- "ws": "^1.1.5"
+ "minimist": "^1.2.0"
}
},
"load-json-file": {
@@ -1630,36 +1422,36 @@
"strip-bom": "^3.0.0"
}
},
- "local-access": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.0.1.tgz",
- "integrity": "sha512-ykt2pgN0aqIy6KQC1CqdWTWkmUwNgaOS6dcpHVjyBJONA+Xi7AtSB1vuxC/U/0tjIP3wcRudwQk1YYzUvzk2bA==",
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "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": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
"dev": true
},
"magic-string": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz",
- "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.4.tgz",
+ "integrity": "sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw==",
"dev": true,
"requires": {
"sourcemap-codec": "^1.4.4"
}
},
- "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"
- }
- },
"memorystream": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
@@ -1667,45 +1459,28 @@
"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"
- }
- },
- "micro-memoize": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.0.8.tgz",
- "integrity": "sha512-Mzlo15iWNrP5EwokGjx0Wlh2b3aMjTPdpsD+ryQtkYJBD67IxBddWU2fO3MIXRtXDH8NsuhaotTrtDbfb+k6jw=="
- },
- "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"
- }
+ "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
},
"mime": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
- "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
- "dev": true
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA=="
+ },
+ "mime-db": {
+ "version": "1.42.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz",
+ "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ=="
+ },
+ "mime-types": {
+ "version": "2.1.25",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz",
+ "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==",
+ "requires": {
+ "mime-db": "1.42.0"
+ }
},
"minimatch": {
"version": "3.0.4",
@@ -1716,64 +1491,22 @@
"brace-expansion": "^1.1.7"
}
},
- "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"
- }
- }
- }
- },
- "mri": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz",
- "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==",
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
"ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "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"
- }
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"nice-try": {
"version": "1.0.5",
@@ -1781,6 +1514,32 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "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
+ }
+ }
+ },
"normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -1793,12 +1552,6 @@
"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
- },
"npm-run-all": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
@@ -1816,36 +1569,11 @@
"string.prototype.padend": "^3.0.0"
}
},
- "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"
- }
- },
- "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"
- }
- }
- }
+ "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",
@@ -1853,41 +1581,32 @@
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
- "object-resolve-path": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-resolve-path/-/object-resolve-path-1.1.1.tgz",
- "integrity": "sha1-p/j5Poogr4DkQhe6fbVDFtnRIjI="
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "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": {
- "isobject": "^3.0.0"
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
}
},
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
"dev": true,
"requires": {
- "isobject": "^3.0.1"
+ "no-case": "^2.2.0"
}
},
- "options": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
- "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
- "dev": true
- },
- "opts": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/opts/-/opts-1.2.6.tgz",
- "integrity": "sha1-0YXAQlz9652h0YKQi2W1wCOP67M=",
- "dev": true
- },
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
@@ -1898,24 +1617,6 @@
"json-parse-better-errors": "^1.0.1"
}
},
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "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-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-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
@@ -1949,16 +1650,19 @@
"integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"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
+ "polka": {
+ "version": "1.0.0-next.9",
+ "resolved": "https://registry.npmjs.org/polka/-/polka-1.0.0-next.9.tgz",
+ "integrity": "sha512-oAWH5O3CIPTzPKNx9KF9NDfy3KRyy9NtUhDEJGmMRCDT6s3CZaGDm7xafcKtm0uK6g0CBiNtoeGWpPFSLUXeaw==",
+ "requires": {
+ "@polka/url": "^1.0.0-next.9",
+ "trouter": "^3.1.0"
+ }
},
- "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==",
+ "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
},
"read-pkg": {
@@ -1972,58 +1676,82 @@
"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"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "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=",
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
"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==",
+ "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
},
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "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"
+ }
+ },
+ "regexparam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz",
+ "integrity": "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g=="
+ },
+ "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
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
"dev": true
},
"require-relative": {
@@ -2033,76 +1761,65 @@
"dev": true
},
"resolve": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+ "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-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
- },
- "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
- },
"rollup": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.15.6.tgz",
- "integrity": "sha512-s3Vn3QJQ5YVFfIG4nXoG9VdL1I37IZsft+4ZyeBhxE0df1kCFz9e+4bEAbR4mKH3pvBO9e9xjdxWPhhIp0r9ow==",
+ "version": "1.27.5",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.5.tgz",
+ "integrity": "sha512-8rfVdzuTg2kt8ObD9LNJpEwUN7B6lsl3sHc5fddtgICpLjpYeSf4m2+RftBzcCaBTMi1iYX3Ez8zFT4Gj2nJjg==",
"dev": true,
"requires": {
- "@types/estree": "0.0.39",
- "@types/node": "^12.0.8",
- "acorn": "^6.1.1"
+ "@types/estree": "*",
+ "@types/node": "*",
+ "acorn": "^7.1.0"
+ }
+ },
+ "rollup-plugin-babel": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz",
+ "integrity": "sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "rollup-pluginutils": "^2.8.1"
}
},
"rollup-plugin-commonjs": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.0.tgz",
- "integrity": "sha512-B8MoX5GRpj3kW4+YaFO/di2JsZkBxNjVmZ9LWjUoTAjq8N9wc7HObMXPsrvolVV9JXVtYSscflXM14A19dXPNQ==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz",
+ "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==",
"dev": true,
"requires": {
- "estree-walker": "^0.6.0",
+ "estree-walker": "^0.6.1",
"is-reference": "^1.1.2",
"magic-string": "^0.25.2",
- "resolve": "^1.10.1",
- "rollup-pluginutils": "^2.7.0"
- }
- },
- "rollup-plugin-livereload": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-1.0.1.tgz",
- "integrity": "sha512-gNuUr+L/8+CR/oKF8ftJNvJEww6iGzNc8+3XcCOvgKWgjhzUBETs8sNONIthcCvVYC2c2PIKMWgQwrYbxRRdwg==",
- "dev": true,
- "requires": {
- "livereload": "^0.8.0"
+ "resolve": "^1.11.0",
+ "rollup-pluginutils": "^2.8.1"
}
},
"rollup-plugin-node-resolve": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.0.3.tgz",
- "integrity": "sha512-Mhhmf0x493xgUPEsRELnU1VM+4+WO82knWkAbZ0d2DvZQZJMbhzyQK/hqtpVscoRru1EqlK3TM1kK9ro469wPw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz",
+ "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==",
"dev": true,
"requires": {
"@types/resolve": "0.0.8",
"builtin-modules": "^3.1.0",
"is-module": "^1.0.0",
- "resolve": "^1.11.0",
- "rollup-pluginutils": "^2.8.0"
+ "resolve": "^1.11.1",
+ "rollup-pluginutils": "^2.8.1"
}
},
"rollup-plugin-svelte": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.1.0.tgz",
- "integrity": "sha512-4MRZG29dAWDpoxEs5uIHzDnYafQEOLaKIJAuDYUtFIzEm1F1IGSTlFyjd8/qk4wltlHdu6V7YfZY53+CKryhMg==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.1.1.tgz",
+ "integrity": "sha512-wP3CnKHjR4fZUgNm5Iey7eItnxwnH/nAw568WJ8dpMSchBxxZ/DmKSx8e6h8k/B6SwG1wfGvWehadFJHcuFFSw==",
"dev": true,
"requires": {
"require-relative": "^0.8.7",
@@ -2111,85 +1828,56 @@
}
},
"rollup-plugin-terser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.0.0.tgz",
- "integrity": "sha512-W+jJ4opYnlmNyVW0vtRufs+EGf68BIJ7bnOazgz8mgz8pA9lUyrEifAhPs5y9M16wFeAyBGaRjKip4dnFBtXaw==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz",
+ "integrity": "sha512-wPANT5XKVJJ8RDUN0+wIr7UPd0lIXBo4UdJ59VmlPCtlFsE20AM+14pe+tk7YunCsWEiuzkDBY3QIkSCjtrPXg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "jest-worker": "^24.6.0",
- "serialize-javascript": "^1.7.0",
- "terser": "^4.0.0"
+ "jest-worker": "^24.0.0",
+ "serialize-javascript": "^1.6.1",
+ "terser": "^3.14.1"
}
},
"rollup-pluginutils": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz",
- "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==",
+ "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"
}
},
- "sade": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/sade/-/sade-1.5.0.tgz",
- "integrity": "sha512-d1BuDwSfXR3vKnV00YF09f5SgzZsexB0A3YR8c95KhiGlJwwepxPVEQZC17XOBxPeQZ5I7OZszsSHy0JloOcMA==",
- "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
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "sapper": {
+ "version": "0.27.9",
+ "resolved": "https://registry.npmjs.org/sapper/-/sapper-0.27.9.tgz",
+ "integrity": "sha512-v3b3UgGeVhFUOpA5IZgdThdr4nZ6aMH6IxDsg1Yu2UWHWEV9vW/Zehch9M/xqJNp/x9n9X+S9syJg1s5QOOmFA==",
"dev": true,
"requires": {
- "ret": "~0.1.10"
+ "html-minifier": "^4.0.0",
+ "http-link-header": "^1.0.2",
+ "shimport": "^1.0.1",
+ "sourcemap-codec": "^1.4.6",
+ "string-hash": "^1.1.3"
}
},
"semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"serialize-javascript": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz",
- "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==",
+ "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-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"
- }
- }
- }
- },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -2206,146 +1894,30 @@
"dev": true
},
"shell-quote": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
- "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
- "dev": true,
- "requires": {
- "array-filter": "~0.0.0",
- "array-map": "~0.0.0",
- "array-reduce": "~0.0.0",
- "jsonify": "~0.0.0"
- }
+ "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
+ },
+ "shimport": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/shimport/-/shimport-1.0.1.tgz",
+ "integrity": "sha512-Imf4gH+8WQmT1GvxS/x79qpmfnE6m50hyN1ucatX+7oMCgmaF8obZWCPIzSUe6+P+YmXM46lkP2pxiV2/lt9Og==",
+ "dev": true
},
"sirv": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-0.4.2.tgz",
"integrity": "sha512-dQbZnsMaIiTQPZmbGmktz+c74zt/hyrJEB4tdp2Jj0RNv9J6B/OWR5RyrZEvIn9fyh9Zlg2OlE2XzKz6wMKGAw==",
- "dev": true,
"requires": {
"@polka/url": "^0.5.0",
"mime": "^2.3.1"
- }
- },
- "sirv-cli": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-0.4.4.tgz",
- "integrity": "sha512-7SsPrYWptRcOvS7/8VIxYDibLDRB4apZaU+y8lfuSnyjYFg0AVVU3J0qcQjWPxT9Ti/DtHnmbivJ+ZTh8L0ykg==",
- "dev": true,
- "requires": {
- "console-clear": "^1.1.0",
- "get-port": "^3.2.0",
- "kleur": "^3.0.0",
- "local-access": "^1.0.1",
- "sade": "^1.4.0",
- "sirv": "^0.4.2",
- "tinydate": "^1.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"
- }
- }
- }
- },
- "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"
- },
- "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"
- }
+ "@polka/url": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz",
+ "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw=="
}
}
},
@@ -2355,23 +1927,10 @@
"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.5.12",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
- "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
+ "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",
@@ -2386,16 +1945,10 @@
}
}
},
- "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==",
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz",
+ "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==",
"dev": true
},
"spdx-correct": {
@@ -2425,40 +1978,16 @@
}
},
"spdx-license-ids": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
- "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==",
+ "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-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"
- }
- },
- "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"
- }
- }
- }
+ "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.prototype.padend": {
"version": "3.0.0",
@@ -2471,13 +2000,24 @@
"function-bind": "^1.0.2"
}
},
- "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==",
+ "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": {
- "safe-buffer": "~5.1.0"
+ "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"
}
},
"strip-bom": {
@@ -2496,25 +2036,41 @@
}
},
"svelte": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.5.1.tgz",
- "integrity": "sha512-iMnuyteFGQ8Yl68G/DHTHY1sLwoAMya1eS0ZOHIm/dqn2etR8WEe8hUAoluLryde4Cft4gvMhtHV3NhE60nBmQ==",
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.15.0.tgz",
+ "integrity": "sha512-OL9FIdUAmVTXR38cB/2vQQ9xWvW/7IuOASjWMfwRAB5NXywLW4Xqhblouan4odjI0S/JFGsytkgp7jelWpFgSA==",
"dev": true
},
"svelte-i18n": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-1.1.0.tgz",
- "integrity": "sha512-PcWrv4llsIQE9PhgNYRR4oLvjH8vbZnCZ5kyRhUsIZ88qimH4KuAwaSzwkxAPyW5Yu2JF+opgaS9XcUABNSBXQ==",
+ "version": "2.1.0-alpha.2",
+ "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-2.1.0-alpha.2.tgz",
+ "integrity": "sha512-Avf2lHjhQpMzISPuaWMJJlgN9icTmbI0+Gjy1toBhdCf9/noTFHfKqZ/Xk2w1rrJ3wenmQNEoiS/j8QVuQYdjA==",
"requires": {
- "intl-messageformat": "^4.0.1",
- "micro-memoize": "^4.0.7",
- "object-resolve-path": "^1.1.1"
+ "commander": "^4.0.1",
+ "deepmerge": "^4.2.2",
+ "dlv": "^1.1.3",
+ "estree-walker": "^0.9.0",
+ "fast-memoize": "^2.5.1",
+ "intl-messageformat": "^7.5.2",
+ "tiny-glob": "^0.2.6"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz",
+ "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA=="
+ },
+ "estree-walker": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.9.0.tgz",
+ "integrity": "sha512-12U47o7XHUX329+x3FzNVjCx3SHEzMF0nkDv7r/HnBzX/xNTKxajBk6gyygaxrAFtLj39219oMfbtxv4KpaOiA=="
+ }
}
},
"terser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz",
- "integrity": "sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==",
+ "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",
@@ -2530,157 +2086,79 @@
}
}
},
- "tinydate": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.1.0.tgz",
- "integrity": "sha512-YF6YTOyBRHX4b3EtEI0W/mROcv82Gt6VccmVuSAkRV3FNORug2457wSGvT2cThbfuctQvVSmC5GobGheScxtIw==",
+ "tiny-glob": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.6.tgz",
+ "integrity": "sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw==",
+ "requires": {
+ "globalyzer": "^0.1.0",
+ "globrex": "^0.1.1"
+ }
+ },
+ "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=",
+ "trouter": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/trouter/-/trouter-3.1.0.tgz",
+ "integrity": "sha512-3Swwu638QQWOefHLss9cdyLi5/9BKYmXZEXpH0KOFfB9YZwUAwHbDAcoYxaHfqAeFvbi/LqAK7rGkhCr1v1BJA==",
+ "requires": {
+ "regexparam": "^1.3.0"
+ }
+ },
+ "uglify-js": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.0.tgz",
+ "integrity": "sha512-PC/ee458NEMITe1OufAjal65i6lB58R1HWMRcxwvdz1UopW0DYqlRL3xdu3IcTvTXsB02CRHykidkTRL+A3hQA==",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "commander": "~2.20.3",
+ "source-map": "~0.6.1"
},
"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"
- }
- }
- }
- },
- "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"
- }
- },
- "ultron": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
- "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=",
- "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"
- }
- }
- }
- },
- "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=",
+ "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
}
}
},
- "upath": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
- "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
+ "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
},
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "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
},
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "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
},
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
"dev": true
},
"validate-npm-package-license": {
@@ -2693,6 +2171,11 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -2701,16 +2184,6 @@
"requires": {
"isexe": "^2.0.0"
}
- },
- "ws": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
- "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
- "dev": true,
- "requires": {
- "options": ">=0.0.5",
- "ultron": "1.0.x"
- }
}
}
}
diff --git a/example/package.json b/example/package.json
index b05ad4b..8e64c80 100644
--- a/example/package.json
+++ b/example/package.json
@@ -1,25 +1,33 @@
{
- "name": "svelte-app",
- "version": "1.0.0",
+ "version": "0.0.1",
"scripts": {
- "build": "rollup -c",
- "autobuild": "rollup -c -w",
- "dev": "run-p start:dev autobuild",
- "start": "sirv public",
- "start:dev": "sirv public --dev"
- },
- "devDependencies": {
- "npm-run-all": "^4.1.5",
- "rollup": "^1.15.6",
- "rollup-plugin-commonjs": "^10.0.0",
- "rollup-plugin-livereload": "^1.0.1",
- "rollup-plugin-node-resolve": "^5.0.3",
- "rollup-plugin-svelte": "^5.1.0",
- "rollup-plugin-terser": "^5.0.0",
- "sirv-cli": "^0.4.4",
- "svelte": "^3.5.1"
+ "dev": "sapper dev",
+ "build": "sapper build --legacy",
+ "export": "export NODE_ENV=development; sapper export --legacy",
+ "start": "node __sapper__/build"
},
"dependencies": {
- "svelte-i18n": "^1.1.0"
+ "compression": "^1.7.1",
+ "polka": "next",
+ "sirv": "^0.4.0",
+ "svelte-i18n": "latest"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.0.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.0.0",
+ "@babel/plugin-transform-runtime": "^7.0.0",
+ "@babel/preset-env": "^7.0.0",
+ "@babel/runtime": "^7.0.0",
+ "@rollup/plugin-json": "^4.0.0",
+ "@rollup/plugin-replace": "^2.2.0",
+ "npm-run-all": "^4.1.5",
+ "rollup": "^1.12.0",
+ "rollup-plugin-babel": "^4.0.2",
+ "rollup-plugin-commonjs": "^10.0.0",
+ "rollup-plugin-node-resolve": "^5.2.0",
+ "rollup-plugin-svelte": "^5.0.1",
+ "rollup-plugin-terser": "^4.0.4",
+ "sapper": "^0.27.0",
+ "svelte": "^3.0.0"
}
}
diff --git a/example/public/bundle.css b/example/public/bundle.css
new file mode 100644
index 0000000..59242b8
--- /dev/null
+++ b/example/public/bundle.css
@@ -0,0 +1,2 @@
+
+/*# sourceMappingURL=bundle.css.map */
\ No newline at end of file
diff --git a/example/public/bundle.js b/example/public/bundle.js
new file mode 100644
index 0000000..2428188
--- /dev/null
+++ b/example/public/bundle.js
@@ -0,0 +1,3319 @@
+var app = (function () {
+ 'use strict';
+
+ function noop() { }
+ function add_location(element, file, line, column, char) {
+ element.__svelte_meta = {
+ loc: { file, line, column, char }
+ };
+ }
+ function run(fn) {
+ return fn();
+ }
+ function blank_object() {
+ return Object.create(null);
+ }
+ function run_all(fns) {
+ fns.forEach(run);
+ }
+ function is_function(thing) {
+ return typeof thing === 'function';
+ }
+ function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
+ }
+ function validate_store(store, name) {
+ if (!store || typeof store.subscribe !== 'function') {
+ throw new Error(`'${name}' is not a store with a 'subscribe' method`);
+ }
+ }
+ function subscribe(component, store, callback) {
+ const unsub = store.subscribe(callback);
+ component.$$.on_destroy.push(unsub.unsubscribe
+ ? () => unsub.unsubscribe()
+ : unsub);
+ }
+
+ function append(target, node) {
+ target.appendChild(node);
+ }
+ function insert(target, node, anchor) {
+ target.insertBefore(node, anchor || null);
+ }
+ function detach(node) {
+ node.parentNode.removeChild(node);
+ }
+ function element(name) {
+ return document.createElement(name);
+ }
+ function text(data) {
+ return document.createTextNode(data);
+ }
+ function space() {
+ return text(' ');
+ }
+ function listen(node, event, handler, options) {
+ node.addEventListener(event, handler, options);
+ return () => node.removeEventListener(event, handler, options);
+ }
+ function attr(node, attribute, value) {
+ if (value == null)
+ node.removeAttribute(attribute);
+ else
+ node.setAttribute(attribute, value);
+ }
+ function to_number(value) {
+ return value === '' ? undefined : +value;
+ }
+ function children(element) {
+ return Array.from(element.childNodes);
+ }
+ function set_data(text, data) {
+ data = '' + data;
+ if (text.data !== data)
+ text.data = data;
+ }
+
+ let current_component;
+ function set_current_component(component) {
+ current_component = component;
+ }
+
+ const dirty_components = [];
+ const resolved_promise = Promise.resolve();
+ let update_scheduled = false;
+ const binding_callbacks = [];
+ const render_callbacks = [];
+ const flush_callbacks = [];
+ function schedule_update() {
+ if (!update_scheduled) {
+ update_scheduled = true;
+ resolved_promise.then(flush);
+ }
+ }
+ function add_render_callback(fn) {
+ render_callbacks.push(fn);
+ }
+ function flush() {
+ const seen_callbacks = new Set();
+ do {
+ // first, call beforeUpdate functions
+ // and update components
+ while (dirty_components.length) {
+ const component = dirty_components.shift();
+ set_current_component(component);
+ update(component.$$);
+ }
+ while (binding_callbacks.length)
+ binding_callbacks.shift()();
+ // then, once components are updated, call
+ // afterUpdate functions. This may cause
+ // subsequent updates...
+ while (render_callbacks.length) {
+ const callback = render_callbacks.pop();
+ if (!seen_callbacks.has(callback)) {
+ callback();
+ // ...so guard against infinite loops
+ seen_callbacks.add(callback);
+ }
+ }
+ } while (dirty_components.length);
+ while (flush_callbacks.length) {
+ flush_callbacks.pop()();
+ }
+ update_scheduled = false;
+ }
+ function update($$) {
+ if ($$.fragment) {
+ $$.update($$.dirty);
+ run_all($$.before_render);
+ $$.fragment.p($$.dirty, $$.ctx);
+ $$.dirty = null;
+ $$.after_render.forEach(add_render_callback);
+ }
+ }
+ function mount_component(component, target, anchor) {
+ const { fragment, on_mount, on_destroy, after_render } = component.$$;
+ fragment.m(target, anchor);
+ // onMount happens after the initial afterUpdate. Because
+ // afterUpdate callbacks happen in reverse order (inner first)
+ // we schedule onMount callbacks before afterUpdate callbacks
+ add_render_callback(() => {
+ const new_on_destroy = on_mount.map(run).filter(is_function);
+ if (on_destroy) {
+ on_destroy.push(...new_on_destroy);
+ }
+ else {
+ // Edge case - component was destroyed immediately,
+ // most likely as a result of a binding initialising
+ run_all(new_on_destroy);
+ }
+ component.$$.on_mount = [];
+ });
+ after_render.forEach(add_render_callback);
+ }
+ function destroy(component, detaching) {
+ if (component.$$) {
+ run_all(component.$$.on_destroy);
+ component.$$.fragment.d(detaching);
+ // TODO null out other refs, including component.$$ (but need to
+ // preserve final state?)
+ component.$$.on_destroy = component.$$.fragment = null;
+ component.$$.ctx = {};
+ }
+ }
+ function make_dirty(component, key) {
+ if (!component.$$.dirty) {
+ dirty_components.push(component);
+ schedule_update();
+ component.$$.dirty = blank_object();
+ }
+ component.$$.dirty[key] = true;
+ }
+ function init(component, options, instance, create_fragment, not_equal$$1, prop_names) {
+ const parent_component = current_component;
+ set_current_component(component);
+ const props = options.props || {};
+ const $$ = component.$$ = {
+ fragment: null,
+ ctx: null,
+ // state
+ props: prop_names,
+ update: noop,
+ not_equal: not_equal$$1,
+ bound: blank_object(),
+ // lifecycle
+ on_mount: [],
+ on_destroy: [],
+ before_render: [],
+ after_render: [],
+ context: new Map(parent_component ? parent_component.$$.context : []),
+ // everything else
+ callbacks: blank_object(),
+ dirty: null
+ };
+ let ready = false;
+ $$.ctx = instance
+ ? instance(component, props, (key, value) => {
+ if ($$.ctx && not_equal$$1($$.ctx[key], $$.ctx[key] = value)) {
+ if ($$.bound[key])
+ $$.bound[key](value);
+ if (ready)
+ make_dirty(component, key);
+ }
+ })
+ : props;
+ $$.update();
+ ready = true;
+ run_all($$.before_render);
+ $$.fragment = create_fragment($$.ctx);
+ if (options.target) {
+ if (options.hydrate) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment.l(children(options.target));
+ }
+ else {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ $$.fragment.c();
+ }
+ if (options.intro && component.$$.fragment.i)
+ component.$$.fragment.i();
+ mount_component(component, options.target, options.anchor);
+ flush();
+ }
+ set_current_component(parent_component);
+ }
+ class SvelteComponent {
+ $destroy() {
+ destroy(this, true);
+ this.$destroy = noop;
+ }
+ $on(type, callback) {
+ const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
+ callbacks.push(callback);
+ return () => {
+ const index = callbacks.indexOf(callback);
+ if (index !== -1)
+ callbacks.splice(index, 1);
+ };
+ }
+ $set() {
+ // overridden by instance, if it has props
+ }
+ }
+ class SvelteComponentDev extends SvelteComponent {
+ constructor(options) {
+ if (!options || (!options.target && !options.$$inline)) {
+ throw new Error(`'target' is a required option`);
+ }
+ super();
+ }
+ $destroy() {
+ super.$destroy();
+ this.$destroy = () => {
+ console.warn(`Component was already destroyed`); // eslint-disable-line no-console
+ };
+ }
+ }
+
+ /**
+ * Creates a `Readable` store that allows reading by subscription.
+ * @param value initial value
+ * @param {StartStopNotifier}start start and stop notifications for subscriptions
+ */
+ function readable(value, start) {
+ return {
+ subscribe: writable(value, start).subscribe,
+ };
+ }
+ /**
+ * Create a `Writable` store that allows both updating and reading by subscription.
+ * @param {*=}value initial value
+ * @param {StartStopNotifier=}start start and stop notifications for subscriptions
+ */
+ function writable(value, start = noop) {
+ let stop;
+ const subscribers = [];
+ function set(new_value) {
+ if (safe_not_equal(value, new_value)) {
+ value = new_value;
+ if (!stop) {
+ return; // not ready
+ }
+ subscribers.forEach((s) => s[1]());
+ subscribers.forEach((s) => s[0](value));
+ }
+ }
+ function update(fn) {
+ set(fn(value));
+ }
+ function subscribe(run, invalidate = noop) {
+ const subscriber = [run, invalidate];
+ subscribers.push(subscriber);
+ if (subscribers.length === 1) {
+ stop = start(set) || noop;
+ }
+ run(value);
+ return () => {
+ const index = subscribers.indexOf(subscriber);
+ if (index !== -1) {
+ subscribers.splice(index, 1);
+ }
+ if (subscribers.length === 0) {
+ stop();
+ }
+ };
+ }
+ return { set, update, subscribe };
+ }
+ /**
+ * Derived value store by synchronizing one or more readable stores and
+ * applying an aggregation function over its input values.
+ * @param {Stores} stores input stores
+ * @param {function(Stores=, function(*)=):*}fn function callback that aggregates the values
+ * @param {*=}initial_value when used asynchronously
+ */
+ function derived(stores, fn, initial_value) {
+ const single = !Array.isArray(stores);
+ const stores_array = single
+ ? [stores]
+ : stores;
+ const auto = fn.length < 2;
+ const invalidators = [];
+ const store = readable(initial_value, (set) => {
+ let inited = false;
+ const values = [];
+ let pending = 0;
+ let cleanup = noop;
+ const sync = () => {
+ if (pending) {
+ return;
+ }
+ cleanup();
+ const result = fn(single ? values[0] : values, set);
+ if (auto) {
+ set(result);
+ }
+ else {
+ cleanup = is_function(result) ? result : noop;
+ }
+ };
+ const unsubscribers = stores_array.map((store, i) => store.subscribe((value) => {
+ values[i] = value;
+ pending &= ~(1 << i);
+ if (inited) {
+ sync();
+ }
+ }, () => {
+ run_all(invalidators);
+ pending |= (1 << i);
+ }));
+ inited = true;
+ sync();
+ return function stop() {
+ run_all(unsubscribers);
+ cleanup();
+ };
+ });
+ return {
+ subscribe(run, invalidate = noop) {
+ invalidators.push(invalidate);
+ const unsubscribe = store.subscribe(run, invalidate);
+ return () => {
+ const index = invalidators.indexOf(invalidate);
+ if (index !== -1) {
+ invalidators.splice(index, 1);
+ }
+ unsubscribe();
+ };
+ }
+ };
+ }
+
+ // gutted from https://github.com/Polymer/observe-js/blob/master/src/observe.js
+ function noop$1 () {}
+ function detectEval () {
+ // Don't test for eval if we're running in a Chrome App environment.
+ // We check for APIs set that only exist in a Chrome App context.
+ if (typeof chrome !== 'undefined' && chrome.app && chrome.app.runtime) {
+ return false
+ }
+
+ // Firefox OS Apps do not allow eval. This feature detection is very hacky
+ // but even if some other platform adds support for this function this code
+ // will continue to work.
+ if (typeof navigator != 'undefined' && navigator.getDeviceStorage) {
+ return false
+ }
+
+ try {
+ var f = new Function('', 'return true;');
+ return f()
+ } catch (ex) {
+ return false
+ }
+ }
+
+ var hasEval = detectEval();
+
+ function isIndex (s) {
+ return +s === s >>> 0 && s !== ''
+ }
+
+ function isObject (obj) {
+ return obj === Object(obj)
+ }
+
+ var createObject = ('__proto__' in {}) ?
+ function (obj) {
+ return obj
+ } :
+ function (obj) {
+ var proto = obj.__proto__;
+ if (!proto)
+ return obj
+ var newObject = Object.create(proto);
+ Object.getOwnPropertyNames(obj).forEach(function (name) {
+ Object.defineProperty(newObject, name,
+ Object.getOwnPropertyDescriptor(obj, name));
+ });
+ return newObject
+ };
+
+ function parsePath (path) {
+ var keys = [];
+ var index = -1;
+ var c, newChar, key, type, transition, action, typeMap, mode = 'beforePath';
+
+ var actions = {
+ push: function () {
+ if (key === undefined)
+ return
+
+ keys.push(key);
+ key = undefined;
+ },
+
+ append: function () {
+ if (key === undefined)
+ key = newChar;
+ else
+ key += newChar;
+ }
+ };
+
+ function maybeUnescapeQuote () {
+ if (index >= path.length)
+ return
+
+ var nextChar = path[index + 1];
+ if ((mode == 'inSingleQuote' && nextChar == "'") ||
+ (mode == 'inDoubleQuote' && nextChar == '"')) {
+ index++;
+ newChar = nextChar;
+ actions.append();
+ return true
+ }
+ }
+
+ while (mode) {
+ index++;
+ c = path[index];
+
+ if (c == '\\' && maybeUnescapeQuote())
+ continue
+
+ type = getPathCharType(c);
+ typeMap = pathStateMachine[mode];
+ transition = typeMap[type] || typeMap['else'] || 'error';
+
+ if (transition == 'error')
+ return // parse error
+
+ mode = transition[0];
+ action = actions[transition[1]] || noop$1;
+ newChar = transition[2] === undefined ? c : transition[2];
+ action();
+
+ if (mode === 'afterPath') {
+ return keys
+ }
+ }
+
+ return // parse error
+ }
+
+ var identStart = '[\$_a-zA-Z]';
+ var identPart = '[\$_a-zA-Z0-9]';
+ var identRegExp = new RegExp('^' + identStart + '+' + identPart + '*' + '$');
+
+ function isIdent (s) {
+ return identRegExp.test(s)
+ }
+
+ var constructorIsPrivate = {};
+
+ function Path (parts, privateToken) {
+ if (privateToken !== constructorIsPrivate)
+ throw Error('Use Path.get to retrieve path objects')
+
+ for (var i = 0; i < parts.length; i++) {
+ this.push(String(parts[i]));
+ }
+
+ if (hasEval && this.length) {
+ this.getValueFrom = this.compiledGetValueFromFn();
+ }
+ }
+
+ var pathCache = {};
+
+ function getPath (pathString) {
+ if (pathString instanceof Path)
+ return pathString
+
+ if (pathString == null || pathString.length == 0)
+ pathString = '';
+
+ if (typeof pathString != 'string') {
+ if (isIndex(pathString.length)) {
+ // Constructed with array-like (pre-parsed) keys
+ return new Path(pathString, constructorIsPrivate)
+ }
+
+ pathString = String(pathString);
+ }
+
+ var path = pathCache[pathString];
+ if (path)
+ return path
+
+ var parts = parsePath(pathString);
+ if (!parts)
+ return invalidPath
+
+ var path = new Path(parts, constructorIsPrivate);
+ pathCache[pathString] = path;
+ return path
+ }
+
+ Path.get = getPath;
+
+ function formatAccessor (key) {
+ if (isIndex(key)) {
+ return '[' + key + ']'
+ } else {
+ return '["' + key.replace(/"/g, '\\"') + '"]'
+ }
+ }
+
+ Path.prototype = createObject({
+ __proto__: [],
+ valid: true,
+
+ toString: function () {
+ var pathString = '';
+ for (var i = 0; i < this.length; i++) {
+ var key = this[i];
+ if (isIdent(key)) {
+ pathString += i ? '.' + key : key;
+ } else {
+ pathString += formatAccessor(key);
+ }
+ }
+
+ return pathString
+ },
+
+ getValueFrom: function (obj, directObserver) {
+ for (var i = 0; i < this.length; i++) {
+ if (obj == null)
+ return
+ obj = obj[this[i]];
+ }
+ return obj
+ },
+
+ iterateObjects: function (obj, observe) {
+ for (var i = 0; i < this.length; i++) {
+ if (i)
+ obj = obj[this[i - 1]];
+ if (!isObject(obj))
+ return
+ observe(obj, this[i]);
+ }
+ },
+
+ compiledGetValueFromFn: function () {
+ var str = '';
+ var pathString = 'obj';
+ str += 'if (obj != null';
+ var i = 0;
+ var key;
+ for (; i < (this.length - 1); i++) {
+ key = this[i];
+ pathString += isIdent(key) ? '.' + key : formatAccessor(key);
+ str += ' &&\n ' + pathString + ' != null';
+ }
+ str += ')\n';
+
+ var key = this[i];
+ pathString += isIdent(key) ? '.' + key : formatAccessor(key);
+
+ str += ' return ' + pathString + ';\nelse\n return undefined;';
+ return new Function('obj', str)
+ },
+
+ setValueFrom: function (obj, value) {
+ if (!this.length)
+ return false
+
+ for (var i = 0; i < this.length - 1; i++) {
+ if (!isObject(obj))
+ return false
+ obj = obj[this[i]];
+ }
+
+ if (!isObject(obj))
+ return false
+
+ obj[this[i]] = value;
+ return true
+ }
+ });
+
+ function getPathCharType (char) {
+ if (char === undefined)
+ return 'eof'
+
+ var code = char.charCodeAt(0);
+
+ switch (code) {
+ case 0x5B: // [
+ case 0x5D: // ]
+ case 0x2E: // .
+ case 0x22: // "
+ case 0x27: // '
+ case 0x30: // 0
+ return char
+
+ case 0x5F: // _
+ case 0x24: // $
+ return 'ident'
+
+ case 0x20: // Space
+ case 0x09: // Tab
+ case 0x0A: // Newline
+ case 0x0D: // Return
+ case 0xA0: // No-break space
+ case 0xFEFF: // Byte Order Mark
+ case 0x2028: // Line Separator
+ case 0x2029: // Paragraph Separator
+ return 'ws'
+ }
+
+ // a-z, A-Z
+ if ((0x61 <= code && code <= 0x7A) || (0x41 <= code && code <= 0x5A))
+ return 'ident'
+
+ // 1-9
+ if (0x31 <= code && code <= 0x39)
+ return 'number'
+
+ return 'else'
+ }
+
+ var pathStateMachine = {
+ 'beforePath': {
+ 'ws': ['beforePath'],
+ 'ident': ['inIdent', 'append'],
+ '[': ['beforeElement'],
+ 'eof': ['afterPath']
+ },
+
+ 'inPath': {
+ 'ws': ['inPath'],
+ '.': ['beforeIdent'],
+ '[': ['beforeElement'],
+ 'eof': ['afterPath']
+ },
+
+ 'beforeIdent': {
+ 'ws': ['beforeIdent'],
+ 'ident': ['inIdent', 'append']
+ },
+
+ 'inIdent': {
+ 'ident': ['inIdent', 'append'],
+ '0': ['inIdent', 'append'],
+ 'number': ['inIdent', 'append'],
+ 'ws': ['inPath', 'push'],
+ '.': ['beforeIdent', 'push'],
+ '[': ['beforeElement', 'push'],
+ 'eof': ['afterPath', 'push']
+ },
+
+ 'beforeElement': {
+ 'ws': ['beforeElement'],
+ '0': ['afterZero', 'append'],
+ 'number': ['inIndex', 'append'],
+ "'": ['inSingleQuote', 'append', ''],
+ '"': ['inDoubleQuote', 'append', '']
+ },
+
+ 'afterZero': {
+ 'ws': ['afterElement', 'push'],
+ ']': ['inPath', 'push']
+ },
+
+ 'inIndex': {
+ '0': ['inIndex', 'append'],
+ 'number': ['inIndex', 'append'],
+ 'ws': ['afterElement'],
+ ']': ['inPath', 'push']
+ },
+
+ 'inSingleQuote': {
+ "'": ['afterElement'],
+ 'eof': ['error'],
+ 'else': ['inSingleQuote', 'append']
+ },
+
+ 'inDoubleQuote': {
+ '"': ['afterElement'],
+ 'eof': ['error'],
+ 'else': ['inDoubleQuote', 'append']
+ },
+
+ 'afterElement': {
+ 'ws': ['afterElement'],
+ ']': ['inPath', 'push']
+ }
+ };
+
+ var invalidPath = new Path('', constructorIsPrivate);
+ invalidPath.valid = false;
+ invalidPath.getValueFrom = invalidPath.setValueFrom = function () {};
+
+ var path = Path;
+
+ /**
+ *
+ * @param {Object} o
+ * @param {String} path
+ * @returns {*}
+ */
+ var objectResolvePath = function (o, path$1) {
+ if (typeof path$1 !== 'string') {
+ throw new TypeError('path must be a string')
+ }
+ if (typeof o !== 'object') {
+ throw new TypeError('object must be passed')
+ }
+ var pathObj = path.get(path$1);
+ if (!pathObj.valid) {
+ throw new Error('path is not a valid object path')
+ }
+ return pathObj.getValueFrom(o)
+ };
+
+ /*
+ Copyright (c) 2014, Yahoo! Inc. All rights reserved.
+ Copyrights licensed under the New BSD License.
+ See the accompanying LICENSE file for terms.
+ */
+ var __extends = (undefined && undefined.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+ })();
+ var Compiler = /** @class */ (function () {
+ function Compiler(locales, formats) {
+ this.locales = [];
+ this.formats = {
+ number: {},
+ date: {},
+ time: {}
+ };
+ this.pluralNumberFormat = null;
+ this.currentPlural = null;
+ this.pluralStack = [];
+ this.locales = locales;
+ this.formats = formats;
+ }
+ Compiler.prototype.compile = function (ast) {
+ this.pluralStack = [];
+ this.currentPlural = null;
+ this.pluralNumberFormat = null;
+ return this.compileMessage(ast);
+ };
+ Compiler.prototype.compileMessage = function (ast) {
+ var _this = this;
+ if (!(ast && ast.type === 'messageFormatPattern')) {
+ throw new Error('Message AST is not of type: "messageFormatPattern"');
+ }
+ var elements = ast.elements;
+ var pattern = elements
+ .filter(function (el) {
+ return el.type === 'messageTextElement' || el.type === 'argumentElement';
+ })
+ .map(function (el) {
+ return el.type === 'messageTextElement'
+ ? _this.compileMessageText(el)
+ : _this.compileArgument(el);
+ });
+ if (pattern.length !== elements.length) {
+ throw new Error('Message element does not have a valid type');
+ }
+ return pattern;
+ };
+ Compiler.prototype.compileMessageText = function (element) {
+ // When this `element` is part of plural sub-pattern and its value contains
+ // an unescaped '#', use a `PluralOffsetString` helper to properly output
+ // the number with the correct offset in the string.
+ if (this.currentPlural && /(^|[^\\])#/g.test(element.value)) {
+ // Create a cache a NumberFormat instance that can be reused for any
+ // PluralOffsetString instance in this message.
+ if (!this.pluralNumberFormat) {
+ this.pluralNumberFormat = new Intl.NumberFormat(this.locales);
+ }
+ return new PluralOffsetString(this.currentPlural.id, this.currentPlural.format.offset, this.pluralNumberFormat, element.value);
+ }
+ // Unescape the escaped '#'s in the message text.
+ return element.value.replace(/\\#/g, '#');
+ };
+ Compiler.prototype.compileArgument = function (element) {
+ var format = element.format, id = element.id;
+ if (!format) {
+ return new StringFormat(id);
+ }
+ var _a = this, formats = _a.formats, locales = _a.locales;
+ switch (format.type) {
+ case 'numberFormat':
+ return {
+ id: id,
+ format: new Intl.NumberFormat(locales, formats.number[format.style])
+ .format
+ };
+ case 'dateFormat':
+ return {
+ id: id,
+ format: new Intl.DateTimeFormat(locales, formats.date[format.style])
+ .format
+ };
+ case 'timeFormat':
+ return {
+ id: id,
+ format: new Intl.DateTimeFormat(locales, formats.time[format.style])
+ .format
+ };
+ case 'pluralFormat':
+ return new PluralFormat(id, format.ordinal, format.offset, this.compileOptions(element), locales);
+ case 'selectFormat':
+ return new SelectFormat(id, this.compileOptions(element));
+ default:
+ throw new Error('Message element does not have a valid format type');
+ }
+ };
+ Compiler.prototype.compileOptions = function (element) {
+ var _this = this;
+ var format = element.format;
+ var options = format.options;
+ // Save the current plural element, if any, then set it to a new value when
+ // compiling the options sub-patterns. This conforms the spec's algorithm
+ // for handling `"#"` syntax in message text.
+ this.pluralStack.push(this.currentPlural);
+ this.currentPlural = format.type === 'pluralFormat' ? element : null;
+ var optionsHash = options.reduce(function (all, option) {
+ // Compile the sub-pattern and save it under the options's selector.
+ all[option.selector] = _this.compileMessage(option.value);
+ return all;
+ }, {});
+ // Pop the plural stack to put back the original current plural value.
+ this.currentPlural = this.pluralStack.pop();
+ return optionsHash;
+ };
+ return Compiler;
+ }());
+ // -- Compiler Helper Classes --------------------------------------------------
+ var Formatter = /** @class */ (function () {
+ function Formatter(id) {
+ this.id = id;
+ }
+ return Formatter;
+ }());
+ var StringFormat = /** @class */ (function (_super) {
+ __extends(StringFormat, _super);
+ function StringFormat() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ StringFormat.prototype.format = function (value) {
+ if (!value && typeof value !== 'number') {
+ return '';
+ }
+ return typeof value === 'string' ? value : String(value);
+ };
+ return StringFormat;
+ }(Formatter));
+ var PluralFormat = /** @class */ (function () {
+ function PluralFormat(id, useOrdinal, offset, options, locales) {
+ this.id = id;
+ this.offset = offset;
+ this.options = options;
+ this.pluralRules = new Intl.PluralRules(locales, {
+ type: useOrdinal ? 'ordinal' : 'cardinal'
+ });
+ }
+ PluralFormat.prototype.getOption = function (value) {
+ var options = this.options;
+ var option = options['=' + value] ||
+ options[this.pluralRules.select(value - this.offset)];
+ return option || options.other;
+ };
+ return PluralFormat;
+ }());
+ var PluralOffsetString = /** @class */ (function (_super) {
+ __extends(PluralOffsetString, _super);
+ function PluralOffsetString(id, offset, numberFormat, string) {
+ var _this = _super.call(this, id) || this;
+ _this.offset = offset;
+ _this.numberFormat = numberFormat;
+ _this.string = string;
+ return _this;
+ }
+ PluralOffsetString.prototype.format = function (value) {
+ var number = this.numberFormat.format(value - this.offset);
+ return this.string
+ .replace(/(^|[^\\])#/g, '$1' + number)
+ .replace(/\\#/g, '#');
+ };
+ return PluralOffsetString;
+ }(Formatter));
+ var SelectFormat = /** @class */ (function () {
+ function SelectFormat(id, options) {
+ this.id = id;
+ this.options = options;
+ }
+ SelectFormat.prototype.getOption = function (value) {
+ var options = this.options;
+ return options[value] || options.other;
+ };
+ return SelectFormat;
+ }());
+ function isSelectOrPluralFormat(f) {
+ return !!f.options;
+ }
+ //# sourceMappingURL=compiler.js.map
+
+ var parser = /*
+ * Generated by PEG.js 0.10.0.
+ *
+ * http://pegjs.org/
+ */
+ (function() {
+
+ function peg$subclass(child, parent) {
+ function ctor() { this.constructor = child; }
+ ctor.prototype = parent.prototype;
+ child.prototype = new ctor();
+ }
+
+ function peg$SyntaxError(message, expected, found, location) {
+ this.message = message;
+ this.expected = expected;
+ this.found = found;
+ this.location = location;
+ this.name = "SyntaxError";
+
+ if (typeof Error.captureStackTrace === "function") {
+ Error.captureStackTrace(this, peg$SyntaxError);
+ }
+ }
+
+ peg$subclass(peg$SyntaxError, Error);
+
+ peg$SyntaxError.buildMessage = function(expected, found) {
+ var DESCRIBE_EXPECTATION_FNS = {
+ literal: function(expectation) {
+ return "\"" + literalEscape(expectation.text) + "\"";
+ },
+
+ "class": function(expectation) {
+ var escapedParts = "",
+ i;
+
+ for (i = 0; i < expectation.parts.length; i++) {
+ escapedParts += expectation.parts[i] instanceof Array
+ ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1])
+ : classEscape(expectation.parts[i]);
+ }
+
+ return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]";
+ },
+
+ any: function(expectation) {
+ return "any character";
+ },
+
+ end: function(expectation) {
+ return "end of input";
+ },
+
+ other: function(expectation) {
+ return expectation.description;
+ }
+ };
+
+ function hex(ch) {
+ return ch.charCodeAt(0).toString(16).toUpperCase();
+ }
+
+ function literalEscape(s) {
+ return s
+ .replace(/\\/g, '\\\\')
+ .replace(/"/g, '\\"')
+ .replace(/\0/g, '\\0')
+ .replace(/\t/g, '\\t')
+ .replace(/\n/g, '\\n')
+ .replace(/\r/g, '\\r')
+ .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
+ .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); });
+ }
+
+ function classEscape(s) {
+ return s
+ .replace(/\\/g, '\\\\')
+ .replace(/\]/g, '\\]')
+ .replace(/\^/g, '\\^')
+ .replace(/-/g, '\\-')
+ .replace(/\0/g, '\\0')
+ .replace(/\t/g, '\\t')
+ .replace(/\n/g, '\\n')
+ .replace(/\r/g, '\\r')
+ .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
+ .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); });
+ }
+
+ function describeExpectation(expectation) {
+ return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
+ }
+
+ function describeExpected(expected) {
+ var descriptions = new Array(expected.length),
+ i, j;
+
+ for (i = 0; i < expected.length; i++) {
+ descriptions[i] = describeExpectation(expected[i]);
+ }
+
+ descriptions.sort();
+
+ if (descriptions.length > 0) {
+ for (i = 1, j = 1; i < descriptions.length; i++) {
+ if (descriptions[i - 1] !== descriptions[i]) {
+ descriptions[j] = descriptions[i];
+ j++;
+ }
+ }
+ descriptions.length = j;
+ }
+
+ switch (descriptions.length) {
+ case 1:
+ return descriptions[0];
+
+ case 2:
+ return descriptions[0] + " or " + descriptions[1];
+
+ default:
+ return descriptions.slice(0, -1).join(", ")
+ + ", or "
+ + descriptions[descriptions.length - 1];
+ }
+ }
+
+ function describeFound(found) {
+ return found ? "\"" + literalEscape(found) + "\"" : "end of input";
+ }
+
+ return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
+ };
+
+ function peg$parse(input, options) {
+ options = options !== void 0 ? options : {};
+
+ var peg$FAILED = {},
+
+ peg$startRuleFunctions = { start: peg$parsestart },
+ peg$startRuleFunction = peg$parsestart,
+
+ peg$c0 = function(elements) {
+ return {
+ type : 'messageFormatPattern',
+ elements: elements,
+ location: location()
+ };
+ },
+ peg$c1 = function(chunks) {
+ return chunks.reduce(function (all, chunk) {
+ return all.concat(chunk)
+ }, []).join('')
+ },
+ peg$c2 = function(messageText) {
+ return {
+ type : 'messageTextElement',
+ value: messageText,
+ location: location()
+ };
+ },
+ peg$c3 = /^[^ \t\n\r,.+={}#]/,
+ peg$c4 = peg$classExpectation([" ", "\t", "\n", "\r", ",", ".", "+", "=", "{", "}", "#"], true, false),
+ peg$c5 = "{",
+ peg$c6 = peg$literalExpectation("{", false),
+ peg$c7 = ",",
+ peg$c8 = peg$literalExpectation(",", false),
+ peg$c9 = "}",
+ peg$c10 = peg$literalExpectation("}", false),
+ peg$c11 = function(id, format) {
+ return {
+ type : 'argumentElement',
+ id : id,
+ format: format && format[2],
+ location: location()
+ };
+ },
+ peg$c12 = "number",
+ peg$c13 = peg$literalExpectation("number", false),
+ peg$c14 = "date",
+ peg$c15 = peg$literalExpectation("date", false),
+ peg$c16 = "time",
+ peg$c17 = peg$literalExpectation("time", false),
+ peg$c18 = function(type, style) {
+ return {
+ type : type + 'Format',
+ style: style && style[2],
+ location: location()
+ };
+ },
+ peg$c19 = "plural",
+ peg$c20 = peg$literalExpectation("plural", false),
+ peg$c21 = function(pluralStyle) {
+ return {
+ type : pluralStyle.type,
+ ordinal: false,
+ offset : pluralStyle.offset || 0,
+ options: pluralStyle.options,
+ location: location()
+ };
+ },
+ peg$c22 = "selectordinal",
+ peg$c23 = peg$literalExpectation("selectordinal", false),
+ peg$c24 = function(pluralStyle) {
+ return {
+ type : pluralStyle.type,
+ ordinal: true,
+ offset : pluralStyle.offset || 0,
+ options: pluralStyle.options,
+ location: location()
+ }
+ },
+ peg$c25 = "select",
+ peg$c26 = peg$literalExpectation("select", false),
+ peg$c27 = function(options) {
+ return {
+ type : 'selectFormat',
+ options: options,
+ location: location()
+ };
+ },
+ peg$c28 = "=",
+ peg$c29 = peg$literalExpectation("=", false),
+ peg$c30 = function(selector, pattern) {
+ return {
+ type : 'optionalFormatPattern',
+ selector: selector,
+ value : pattern,
+ location: location()
+ };
+ },
+ peg$c31 = "offset:",
+ peg$c32 = peg$literalExpectation("offset:", false),
+ peg$c33 = function(number) {
+ return number;
+ },
+ peg$c34 = function(offset, options) {
+ return {
+ type : 'pluralFormat',
+ offset : offset,
+ options: options,
+ location: location()
+ };
+ },
+ peg$c35 = peg$otherExpectation("whitespace"),
+ peg$c36 = /^[ \t\n\r]/,
+ peg$c37 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false),
+ peg$c38 = peg$otherExpectation("optionalWhitespace"),
+ peg$c39 = /^[0-9]/,
+ peg$c40 = peg$classExpectation([["0", "9"]], false, false),
+ peg$c41 = /^[0-9a-f]/i,
+ peg$c42 = peg$classExpectation([["0", "9"], ["a", "f"]], false, true),
+ peg$c43 = "0",
+ peg$c44 = peg$literalExpectation("0", false),
+ peg$c45 = /^[1-9]/,
+ peg$c46 = peg$classExpectation([["1", "9"]], false, false),
+ peg$c47 = function(digits) {
+ return parseInt(digits, 10);
+ },
+ peg$c48 = /^[^{}\\\0-\x1F\x7F \t\n\r]/,
+ peg$c49 = peg$classExpectation(["{", "}", "\\", ["\0", "\x1F"], "\x7F", " ", "\t", "\n", "\r"], true, false),
+ peg$c50 = "\\\\",
+ peg$c51 = peg$literalExpectation("\\\\", false),
+ peg$c52 = function() { return '\\'; },
+ peg$c53 = "\\#",
+ peg$c54 = peg$literalExpectation("\\#", false),
+ peg$c55 = function() { return '\\#'; },
+ peg$c56 = "\\{",
+ peg$c57 = peg$literalExpectation("\\{", false),
+ peg$c58 = function() { return '\u007B'; },
+ peg$c59 = "\\}",
+ peg$c60 = peg$literalExpectation("\\}", false),
+ peg$c61 = function() { return '\u007D'; },
+ peg$c62 = "\\u",
+ peg$c63 = peg$literalExpectation("\\u", false),
+ peg$c64 = function(digits) {
+ return String.fromCharCode(parseInt(digits, 16));
+ },
+ peg$c65 = function(chars) { return chars.join(''); },
+
+ peg$currPos = 0,
+ peg$savedPos = 0,
+ peg$posDetailsCache = [{ line: 1, column: 1 }],
+ peg$maxFailPos = 0,
+ peg$maxFailExpected = [],
+ peg$silentFails = 0,
+
+ peg$result;
+
+ if ("startRule" in options) {
+ if (!(options.startRule in peg$startRuleFunctions)) {
+ throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
+ }
+
+ peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
+ }
+
+ function location() {
+ return peg$computeLocation(peg$savedPos, peg$currPos);
+ }
+
+ function peg$literalExpectation(text, ignoreCase) {
+ return { type: "literal", text: text, ignoreCase: ignoreCase };
+ }
+
+ function peg$classExpectation(parts, inverted, ignoreCase) {
+ return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase };
+ }
+
+ function peg$endExpectation() {
+ return { type: "end" };
+ }
+
+ function peg$otherExpectation(description) {
+ return { type: "other", description: description };
+ }
+
+ function peg$computePosDetails(pos) {
+ var details = peg$posDetailsCache[pos], p;
+
+ if (details) {
+ return details;
+ } else {
+ p = pos - 1;
+ while (!peg$posDetailsCache[p]) {
+ p--;
+ }
+
+ details = peg$posDetailsCache[p];
+ details = {
+ line: details.line,
+ column: details.column
+ };
+
+ while (p < pos) {
+ if (input.charCodeAt(p) === 10) {
+ details.line++;
+ details.column = 1;
+ } else {
+ details.column++;
+ }
+
+ p++;
+ }
+
+ peg$posDetailsCache[pos] = details;
+ return details;
+ }
+ }
+
+ function peg$computeLocation(startPos, endPos) {
+ var startPosDetails = peg$computePosDetails(startPos),
+ endPosDetails = peg$computePosDetails(endPos);
+
+ return {
+ start: {
+ offset: startPos,
+ line: startPosDetails.line,
+ column: startPosDetails.column
+ },
+ end: {
+ offset: endPos,
+ line: endPosDetails.line,
+ column: endPosDetails.column
+ }
+ };
+ }
+
+ function peg$fail(expected) {
+ if (peg$currPos < peg$maxFailPos) { return; }
+
+ if (peg$currPos > peg$maxFailPos) {
+ peg$maxFailPos = peg$currPos;
+ peg$maxFailExpected = [];
+ }
+
+ peg$maxFailExpected.push(expected);
+ }
+
+ function peg$buildStructuredError(expected, found, location) {
+ return new peg$SyntaxError(
+ peg$SyntaxError.buildMessage(expected, found),
+ expected,
+ found,
+ location
+ );
+ }
+
+ function peg$parsestart() {
+ var s0;
+
+ s0 = peg$parsemessageFormatPattern();
+
+ return s0;
+ }
+
+ function peg$parsemessageFormatPattern() {
+ var s0, s1, s2;
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parsemessageFormatElement();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parsemessageFormatElement();
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c0(s1);
+ }
+ s0 = s1;
+
+ return s0;
+ }
+
+ function peg$parsemessageFormatElement() {
+ var s0;
+
+ s0 = peg$parsemessageTextElement();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseargumentElement();
+ }
+
+ return s0;
+ }
+
+ function peg$parsemessageText() {
+ var s0, s1, s2, s3, s4, s5;
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$currPos;
+ s3 = peg$parse_();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parsechars();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parse_();
+ if (s5 !== peg$FAILED) {
+ s3 = [s3, s4, s5];
+ s2 = s3;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$currPos;
+ s3 = peg$parse_();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parsechars();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parse_();
+ if (s5 !== peg$FAILED) {
+ s3 = [s3, s4, s5];
+ s2 = s3;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ }
+ } else {
+ s1 = peg$FAILED;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c1(s1);
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = peg$parsews();
+ if (s1 !== peg$FAILED) {
+ s0 = input.substring(s0, peg$currPos);
+ } else {
+ s0 = s1;
+ }
+ }
+
+ return s0;
+ }
+
+ function peg$parsemessageTextElement() {
+ var s0, s1;
+
+ s0 = peg$currPos;
+ s1 = peg$parsemessageText();
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c2(s1);
+ }
+ s0 = s1;
+
+ return s0;
+ }
+
+ function peg$parseargument() {
+ var s0, s1, s2;
+
+ s0 = peg$parsenumber();
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ s1 = [];
+ if (peg$c3.test(input.charAt(peg$currPos))) {
+ s2 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c4); }
+ }
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ if (peg$c3.test(input.charAt(peg$currPos))) {
+ s2 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c4); }
+ }
+ }
+ } else {
+ s1 = peg$FAILED;
+ }
+ if (s1 !== peg$FAILED) {
+ s0 = input.substring(s0, peg$currPos);
+ } else {
+ s0 = s1;
+ }
+ }
+
+ return s0;
+ }
+
+ function peg$parseargumentElement() {
+ var s0, s1, s2, s3, s4, s5, s6, s7, s8;
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 123) {
+ s1 = peg$c5;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parse_();
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parseargument();
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parse_();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 44) {
+ s6 = peg$c7;
+ peg$currPos++;
+ } else {
+ s6 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s6 !== peg$FAILED) {
+ s7 = peg$parse_();
+ if (s7 !== peg$FAILED) {
+ s8 = peg$parseelementFormat();
+ if (s8 !== peg$FAILED) {
+ s6 = [s6, s7, s8];
+ s5 = s6;
+ } else {
+ peg$currPos = s5;
+ s5 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s5;
+ s5 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s5;
+ s5 = peg$FAILED;
+ }
+ if (s5 === peg$FAILED) {
+ s5 = null;
+ }
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parse_();
+ if (s6 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 125) {
+ s7 = peg$c9;
+ peg$currPos++;
+ } else {
+ s7 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s7 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c11(s3, s5);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parseelementFormat() {
+ var s0;
+
+ s0 = peg$parsesimpleFormat();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsepluralFormat();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseselectOrdinalFormat();
+ if (s0 === peg$FAILED) {
+ s0 = peg$parseselectFormat();
+ }
+ }
+ }
+
+ return s0;
+ }
+
+ function peg$parsesimpleFormat() {
+ var s0, s1, s2, s3, s4, s5, s6;
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 6) === peg$c12) {
+ s1 = peg$c12;
+ peg$currPos += 6;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c13); }
+ }
+ if (s1 === peg$FAILED) {
+ if (input.substr(peg$currPos, 4) === peg$c14) {
+ s1 = peg$c14;
+ peg$currPos += 4;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c15); }
+ }
+ if (s1 === peg$FAILED) {
+ if (input.substr(peg$currPos, 4) === peg$c16) {
+ s1 = peg$c16;
+ peg$currPos += 4;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c17); }
+ }
+ }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parse_();
+ if (s2 !== peg$FAILED) {
+ s3 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 44) {
+ s4 = peg$c7;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parse_();
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parsechars();
+ if (s6 !== peg$FAILED) {
+ s4 = [s4, s5, s6];
+ s3 = s4;
+ } else {
+ peg$currPos = s3;
+ s3 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s3;
+ s3 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s3;
+ s3 = peg$FAILED;
+ }
+ if (s3 === peg$FAILED) {
+ s3 = null;
+ }
+ if (s3 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c18(s1, s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parsepluralFormat() {
+ var s0, s1, s2, s3, s4, s5;
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 6) === peg$c19) {
+ s1 = peg$c19;
+ peg$currPos += 6;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c20); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parse_();
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 44) {
+ s3 = peg$c7;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parse_();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parsepluralStyle();
+ if (s5 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c21(s5);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parseselectOrdinalFormat() {
+ var s0, s1, s2, s3, s4, s5;
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 13) === peg$c22) {
+ s1 = peg$c22;
+ peg$currPos += 13;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c23); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parse_();
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 44) {
+ s3 = peg$c7;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parse_();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parsepluralStyle();
+ if (s5 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c24(s5);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parseselectFormat() {
+ var s0, s1, s2, s3, s4, s5, s6;
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 6) === peg$c25) {
+ s1 = peg$c25;
+ peg$currPos += 6;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c26); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parse_();
+ if (s2 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 44) {
+ s3 = peg$c7;
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c8); }
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = peg$parse_();
+ if (s4 !== peg$FAILED) {
+ s5 = [];
+ s6 = peg$parseoptionalFormatPattern();
+ if (s6 !== peg$FAILED) {
+ while (s6 !== peg$FAILED) {
+ s5.push(s6);
+ s6 = peg$parseoptionalFormatPattern();
+ }
+ } else {
+ s5 = peg$FAILED;
+ }
+ if (s5 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c27(s5);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parseselector() {
+ var s0, s1, s2, s3;
+
+ s0 = peg$currPos;
+ s1 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 61) {
+ s2 = peg$c28;
+ peg$currPos++;
+ } else {
+ s2 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c29); }
+ }
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parsenumber();
+ if (s3 !== peg$FAILED) {
+ s2 = [s2, s3];
+ s1 = s2;
+ } else {
+ peg$currPos = s1;
+ s1 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s1;
+ s1 = peg$FAILED;
+ }
+ if (s1 !== peg$FAILED) {
+ s0 = input.substring(s0, peg$currPos);
+ } else {
+ s0 = s1;
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$parsechars();
+ }
+
+ return s0;
+ }
+
+ function peg$parseoptionalFormatPattern() {
+ var s0, s1, s2, s3, s4, s5, s6;
+
+ s0 = peg$currPos;
+ s1 = peg$parse_();
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parseselector();
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parse_();
+ if (s3 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 123) {
+ s4 = peg$c5;
+ peg$currPos++;
+ } else {
+ s4 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c6); }
+ }
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parsemessageFormatPattern();
+ if (s5 !== peg$FAILED) {
+ if (input.charCodeAt(peg$currPos) === 125) {
+ s6 = peg$c9;
+ peg$currPos++;
+ } else {
+ s6 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c10); }
+ }
+ if (s6 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c30(s2, s5);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parseoffset() {
+ var s0, s1, s2, s3;
+
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 7) === peg$c31) {
+ s1 = peg$c31;
+ peg$currPos += 7;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c32); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parse_();
+ if (s2 !== peg$FAILED) {
+ s3 = peg$parsenumber();
+ if (s3 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c33(s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parsepluralStyle() {
+ var s0, s1, s2, s3, s4;
+
+ s0 = peg$currPos;
+ s1 = peg$parseoffset();
+ if (s1 === peg$FAILED) {
+ s1 = null;
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$parse_();
+ if (s2 !== peg$FAILED) {
+ s3 = [];
+ s4 = peg$parseoptionalFormatPattern();
+ if (s4 !== peg$FAILED) {
+ while (s4 !== peg$FAILED) {
+ s3.push(s4);
+ s4 = peg$parseoptionalFormatPattern();
+ }
+ } else {
+ s3 = peg$FAILED;
+ }
+ if (s3 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c34(s1, s3);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+
+ return s0;
+ }
+
+ function peg$parsews() {
+ var s0, s1;
+
+ peg$silentFails++;
+ s0 = [];
+ if (peg$c36.test(input.charAt(peg$currPos))) {
+ s1 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c37); }
+ }
+ if (s1 !== peg$FAILED) {
+ while (s1 !== peg$FAILED) {
+ s0.push(s1);
+ if (peg$c36.test(input.charAt(peg$currPos))) {
+ s1 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c37); }
+ }
+ }
+ } else {
+ s0 = peg$FAILED;
+ }
+ peg$silentFails--;
+ if (s0 === peg$FAILED) {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c35); }
+ }
+
+ return s0;
+ }
+
+ function peg$parse_() {
+ var s0, s1, s2;
+
+ peg$silentFails++;
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parsews();
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parsews();
+ }
+ if (s1 !== peg$FAILED) {
+ s0 = input.substring(s0, peg$currPos);
+ } else {
+ s0 = s1;
+ }
+ peg$silentFails--;
+ if (s0 === peg$FAILED) {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c38); }
+ }
+
+ return s0;
+ }
+
+ function peg$parsedigit() {
+ var s0;
+
+ if (peg$c39.test(input.charAt(peg$currPos))) {
+ s0 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s0 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c40); }
+ }
+
+ return s0;
+ }
+
+ function peg$parsehexDigit() {
+ var s0;
+
+ if (peg$c41.test(input.charAt(peg$currPos))) {
+ s0 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s0 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c42); }
+ }
+
+ return s0;
+ }
+
+ function peg$parsenumber() {
+ var s0, s1, s2, s3, s4, s5;
+
+ s0 = peg$currPos;
+ if (input.charCodeAt(peg$currPos) === 48) {
+ s1 = peg$c43;
+ peg$currPos++;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c44); }
+ }
+ if (s1 === peg$FAILED) {
+ s1 = peg$currPos;
+ s2 = peg$currPos;
+ if (peg$c45.test(input.charAt(peg$currPos))) {
+ s3 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s3 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c46); }
+ }
+ if (s3 !== peg$FAILED) {
+ s4 = [];
+ s5 = peg$parsedigit();
+ while (s5 !== peg$FAILED) {
+ s4.push(s5);
+ s5 = peg$parsedigit();
+ }
+ if (s4 !== peg$FAILED) {
+ s3 = [s3, s4];
+ s2 = s3;
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s2;
+ s2 = peg$FAILED;
+ }
+ if (s2 !== peg$FAILED) {
+ s1 = input.substring(s1, peg$currPos);
+ } else {
+ s1 = s2;
+ }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c47(s1);
+ }
+ s0 = s1;
+
+ return s0;
+ }
+
+ function peg$parsechar() {
+ var s0, s1, s2, s3, s4, s5, s6, s7;
+
+ if (peg$c48.test(input.charAt(peg$currPos))) {
+ s0 = input.charAt(peg$currPos);
+ peg$currPos++;
+ } else {
+ s0 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c49); }
+ }
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c50) {
+ s1 = peg$c50;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c51); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c52();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c53) {
+ s1 = peg$c53;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c54); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c55();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c56) {
+ s1 = peg$c56;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c57); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c58();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c59) {
+ s1 = peg$c59;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c60); }
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c61();
+ }
+ s0 = s1;
+ if (s0 === peg$FAILED) {
+ s0 = peg$currPos;
+ if (input.substr(peg$currPos, 2) === peg$c62) {
+ s1 = peg$c62;
+ peg$currPos += 2;
+ } else {
+ s1 = peg$FAILED;
+ if (peg$silentFails === 0) { peg$fail(peg$c63); }
+ }
+ if (s1 !== peg$FAILED) {
+ s2 = peg$currPos;
+ s3 = peg$currPos;
+ s4 = peg$parsehexDigit();
+ if (s4 !== peg$FAILED) {
+ s5 = peg$parsehexDigit();
+ if (s5 !== peg$FAILED) {
+ s6 = peg$parsehexDigit();
+ if (s6 !== peg$FAILED) {
+ s7 = peg$parsehexDigit();
+ if (s7 !== peg$FAILED) {
+ s4 = [s4, s5, s6, s7];
+ s3 = s4;
+ } else {
+ peg$currPos = s3;
+ s3 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s3;
+ s3 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s3;
+ s3 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s3;
+ s3 = peg$FAILED;
+ }
+ if (s3 !== peg$FAILED) {
+ s2 = input.substring(s2, peg$currPos);
+ } else {
+ s2 = s3;
+ }
+ if (s2 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c64(s2);
+ s0 = s1;
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ } else {
+ peg$currPos = s0;
+ s0 = peg$FAILED;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return s0;
+ }
+
+ function peg$parsechars() {
+ var s0, s1, s2;
+
+ s0 = peg$currPos;
+ s1 = [];
+ s2 = peg$parsechar();
+ if (s2 !== peg$FAILED) {
+ while (s2 !== peg$FAILED) {
+ s1.push(s2);
+ s2 = peg$parsechar();
+ }
+ } else {
+ s1 = peg$FAILED;
+ }
+ if (s1 !== peg$FAILED) {
+ peg$savedPos = s0;
+ s1 = peg$c65(s1);
+ }
+ s0 = s1;
+
+ return s0;
+ }
+
+ peg$result = peg$startRuleFunction();
+
+ if (peg$result !== peg$FAILED && peg$currPos === input.length) {
+ return peg$result;
+ } else {
+ if (peg$result !== peg$FAILED && peg$currPos < input.length) {
+ peg$fail(peg$endExpectation());
+ }
+
+ throw peg$buildStructuredError(
+ peg$maxFailExpected,
+ peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
+ peg$maxFailPos < input.length
+ ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)
+ : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
+ );
+ }
+ }
+
+ return {
+ SyntaxError: peg$SyntaxError,
+ parse: peg$parse
+ };
+ })();
+
+ /*
+ Copyright (c) 2014, Yahoo! Inc. All rights reserved.
+ Copyrights licensed under the New BSD License.
+ See the accompanying LICENSE file for terms.
+ */
+ var __extends$1 = (undefined && undefined.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+ })();
+ var __assign = (undefined && undefined.__assign) || function () {
+ __assign = Object.assign || function(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+ t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign.apply(this, arguments);
+ };
+ // -- MessageFormat --------------------------------------------------------
+ function resolveLocale(locales) {
+ if (typeof locales === 'string') {
+ locales = [locales];
+ }
+ try {
+ return Intl.NumberFormat.supportedLocalesOf(locales, {
+ // IE11 localeMatcher `lookup` seems to convert `en` -> `en-US`
+ // but not other browsers,
+ localeMatcher: 'best fit'
+ })[0];
+ }
+ catch (e) {
+ return MessageFormat.defaultLocale;
+ }
+ }
+ function formatPatterns(pattern, values) {
+ var result = '';
+ for (var _i = 0, pattern_1 = pattern; _i < pattern_1.length; _i++) {
+ var part = pattern_1[_i];
+ // Exist early for string parts.
+ if (typeof part === 'string') {
+ result += part;
+ continue;
+ }
+ var id = part.id;
+ // Enforce that all required values are provided by the caller.
+ if (!(values && id in values)) {
+ throw new FormatError("A value must be provided for: " + id, id);
+ }
+ var value = values[id];
+ // Recursively format plural and select parts' option â which can be a
+ // nested pattern structure. The choosing of the option to use is
+ // abstracted-by and delegated-to the part helper object.
+ if (isSelectOrPluralFormat(part)) {
+ result += formatPatterns(part.getOption(value), values);
+ }
+ else {
+ result += part.format(value);
+ }
+ }
+ return result;
+ }
+ function mergeConfig(c1, c2) {
+ if (!c2) {
+ return c1;
+ }
+ return __assign({}, (c1 || {}), (c2 || {}), Object.keys(c1).reduce(function (all, k) {
+ all[k] = __assign({}, c1[k], (c2[k] || {}));
+ return all;
+ }, {}));
+ }
+ function mergeConfigs(defaultConfig, configs) {
+ if (!configs) {
+ return defaultConfig;
+ }
+ return Object.keys(defaultConfig).reduce(function (all, k) {
+ all[k] = mergeConfig(defaultConfig[k], configs[k]);
+ return all;
+ }, __assign({}, defaultConfig));
+ }
+ var FormatError = /** @class */ (function (_super) {
+ __extends$1(FormatError, _super);
+ function FormatError(msg, variableId) {
+ var _this = _super.call(this, msg) || this;
+ _this.variableId = variableId;
+ return _this;
+ }
+ return FormatError;
+ }(Error));
+ var MessageFormat = (function (message, locales, overrideFormats) {
+ if (locales === void 0) { locales = MessageFormat.defaultLocale; }
+ // Parse string messages into an AST.
+ var ast = typeof message === 'string' ? MessageFormat.__parse(message) : message;
+ if (!(ast && ast.type === 'messageFormatPattern')) {
+ throw new TypeError('A message must be provided as a String or AST.');
+ }
+ // Creates a new object with the specified `formats` merged with the default
+ // formats.
+ var formats = mergeConfigs(MessageFormat.formats, overrideFormats);
+ // Defined first because it's used to build the format pattern.
+ var locale = resolveLocale(locales || []);
+ // Compile the `ast` to a pattern that is highly optimized for repeated
+ // `format()` invocations. **Note:** This passes the `locales` set provided
+ // to the constructor instead of just the resolved locale.
+ var pattern = new Compiler(locales, formats).compile(ast);
+ // "Bind" `format()` method to `this` so it can be passed by reference like
+ // the other `Intl` APIs.
+ return {
+ format: function (values) {
+ try {
+ return formatPatterns(pattern, values);
+ }
+ catch (e) {
+ if (e.variableId) {
+ throw new Error("The intl string context variable '" + e.variableId + "' was not provided to the string '" + message + "'");
+ }
+ else {
+ throw e;
+ }
+ }
+ },
+ resolvedOptions: function () {
+ return { locale: locale };
+ },
+ getAst: function () {
+ return ast;
+ }
+ };
+ });
+ MessageFormat.defaultLocale = 'en';
+ // Default format options used as the prototype of the `formats` provided to the
+ // constructor. These are used when constructing the internal Intl.NumberFormat
+ // and Intl.DateTimeFormat instances.
+ MessageFormat.formats = {
+ number: {
+ currency: {
+ style: 'currency'
+ },
+ percent: {
+ style: 'percent'
+ }
+ },
+ date: {
+ short: {
+ month: 'numeric',
+ day: 'numeric',
+ year: '2-digit'
+ },
+ medium: {
+ month: 'short',
+ day: 'numeric',
+ year: 'numeric'
+ },
+ long: {
+ month: 'long',
+ day: 'numeric',
+ year: 'numeric'
+ },
+ full: {
+ weekday: 'long',
+ month: 'long',
+ day: 'numeric',
+ year: 'numeric'
+ }
+ },
+ time: {
+ short: {
+ hour: 'numeric',
+ minute: 'numeric'
+ },
+ medium: {
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric'
+ },
+ long: {
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ timeZoneName: 'short'
+ },
+ full: {
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ timeZoneName: 'short'
+ }
+ }
+ };
+ MessageFormat.__parse = parser.parse;
+ //# sourceMappingURL=index.js.map
+
+ /**
+ * @constant DEFAULT_OPTIONS_KEYS the default options keys
+ */
+ var DEFAULT_OPTIONS_KEYS = {
+ isEqual: true,
+ isMatchingKey: true,
+ isPromise: true,
+ maxSize: true,
+ onCacheAdd: true,
+ onCacheChange: true,
+ onCacheHit: true,
+ transformKey: true,
+ };
+ /**
+ * @function slice
+ *
+ * @description
+ * slice.call() pre-bound
+ */
+ var slice = Array.prototype.slice;
+ /**
+ * @function cloneArray
+ *
+ * @description
+ * clone the array-like object and return the new array
+ *
+ * @param arrayLike the array-like object to clone
+ * @returns the clone as an array
+ */
+ function cloneArray(arrayLike) {
+ var length = arrayLike.length;
+ if (!length) {
+ return [];
+ }
+ if (length === 1) {
+ return [arrayLike[0]];
+ }
+ if (length === 2) {
+ return [arrayLike[0], arrayLike[1]];
+ }
+ if (length === 3) {
+ return [arrayLike[0], arrayLike[1], arrayLike[2]];
+ }
+ return slice.call(arrayLike, 0);
+ }
+ /**
+ * @function getCustomOptions
+ *
+ * @description
+ * get the custom options on the object passed
+ *
+ * @param options the memoization options passed
+ * @returns the custom options passed
+ */
+ function getCustomOptions(options) {
+ var customOptions = {};
+ /* eslint-disable no-restricted-syntax */
+ for (var key in options) {
+ if (!DEFAULT_OPTIONS_KEYS[key]) {
+ customOptions[key] = options[key];
+ }
+ }
+ /* eslint-enable */
+ return customOptions;
+ }
+ /**
+ * @function isMemoized
+ *
+ * @description
+ * is the function passed already memoized
+ *
+ * @param fn the function to test
+ * @returns is the function already memoized
+ */
+ function isMemoized(fn) {
+ return (typeof fn === 'function' &&
+ fn.isMemoized);
+ }
+ /**
+ * @function isSameValueZero
+ *
+ * @description
+ * are the objects equal based on SameValueZero equality
+ *
+ * @param object1 the first object to compare
+ * @param object2 the second object to compare
+ * @returns are the two objects equal
+ */
+ function isSameValueZero(object1, object2) {
+ // eslint-disable-next-line no-self-compare
+ return object1 === object2 || (object1 !== object1 && object2 !== object2);
+ }
+ /**
+ * @function mergeOptions
+ *
+ * @description
+ * merge the options into the target
+ *
+ * @param existingOptions the options provided
+ * @param newOptions the options to include
+ * @returns the merged options
+ */
+ function mergeOptions(existingOptions, newOptions) {
+ // @ts-ignore
+ var target = {};
+ /* eslint-disable no-restricted-syntax */
+ for (var key in existingOptions) {
+ target[key] = existingOptions[key];
+ }
+ for (var key in newOptions) {
+ target[key] = newOptions[key];
+ }
+ /* eslint-enable */
+ return target;
+ }
+
+ // utils
+ var Cache = /** @class */ (function () {
+ function Cache(options) {
+ this.keys = [];
+ this.values = [];
+ this.options = options;
+ var isMatchingKeyFunction = typeof options.isMatchingKey === 'function';
+ if (isMatchingKeyFunction) {
+ this.getKeyIndex = this._getKeyIndexFromMatchingKey;
+ }
+ else if (options.maxSize > 1) {
+ this.getKeyIndex = this._getKeyIndexForMany;
+ }
+ else {
+ this.getKeyIndex = this._getKeyIndexForSingle;
+ }
+ this.canTransformKey = typeof options.transformKey === 'function';
+ this.shouldCloneArguments = this.canTransformKey || isMatchingKeyFunction;
+ this.shouldUpdateOnAdd = typeof options.onCacheAdd === 'function';
+ this.shouldUpdateOnChange = typeof options.onCacheChange === 'function';
+ this.shouldUpdateOnHit = typeof options.onCacheHit === 'function';
+ }
+ Object.defineProperty(Cache.prototype, "size", {
+ get: function () {
+ return this.keys.length;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(Cache.prototype, "snapshot", {
+ get: function () {
+ return {
+ keys: cloneArray(this.keys),
+ size: this.size,
+ values: cloneArray(this.values),
+ };
+ },
+ enumerable: true,
+ configurable: true
+ });
+ /**
+ * @function _getKeyIndexFromMatchingKey
+ *
+ * @description
+ * gets the matching key index when a custom key matcher is used
+ *
+ * @param keyToMatch the key to match
+ * @returns the index of the matching key, or -1
+ */
+ Cache.prototype._getKeyIndexFromMatchingKey = function (keyToMatch) {
+ var _a = this.options, isMatchingKey = _a.isMatchingKey, maxSize = _a.maxSize;
+ var keys = this.keys;
+ var keysLength = keys.length;
+ if (!keysLength) {
+ return -1;
+ }
+ if (isMatchingKey(keys[0], keyToMatch)) {
+ return 0;
+ }
+ if (maxSize > 1) {
+ for (var index = 1; index < keysLength; index++) {
+ if (isMatchingKey(keys[index], keyToMatch)) {
+ return index;
+ }
+ }
+ }
+ return -1;
+ };
+ /**
+ * @function _getKeyIndexForMany
+ *
+ * @description
+ * gets the matching key index when multiple keys are used
+ *
+ * @param keyToMatch the key to match
+ * @returns the index of the matching key, or -1
+ */
+ Cache.prototype._getKeyIndexForMany = function (keyToMatch) {
+ var isEqual = this.options.isEqual;
+ var keys = this.keys;
+ var keysLength = keys.length;
+ if (!keysLength) {
+ return -1;
+ }
+ if (keysLength === 1) {
+ return this._getKeyIndexForSingle(keyToMatch);
+ }
+ var keyLength = keyToMatch.length;
+ var existingKey;
+ var argIndex;
+ if (keyLength > 1) {
+ for (var index = 0; index < keysLength; index++) {
+ existingKey = keys[index];
+ if (existingKey.length === keyLength) {
+ argIndex = 0;
+ for (; argIndex < keyLength; argIndex++) {
+ if (!isEqual(existingKey[argIndex], keyToMatch[argIndex])) {
+ break;
+ }
+ }
+ if (argIndex === keyLength) {
+ return index;
+ }
+ }
+ }
+ }
+ else {
+ for (var index = 0; index < keysLength; index++) {
+ existingKey = keys[index];
+ if (existingKey.length === keyLength &&
+ isEqual(existingKey[0], keyToMatch[0])) {
+ return index;
+ }
+ }
+ }
+ return -1;
+ };
+ /**
+ * @function _getKeyIndexForSingle
+ *
+ * @description
+ * gets the matching key index when a single key is used
+ *
+ * @param keyToMatch the key to match
+ * @returns the index of the matching key, or -1
+ */
+ Cache.prototype._getKeyIndexForSingle = function (keyToMatch) {
+ var keys = this.keys;
+ if (!keys.length) {
+ return -1;
+ }
+ var existingKey = keys[0];
+ var length = existingKey.length;
+ if (keyToMatch.length !== length) {
+ return -1;
+ }
+ var isEqual = this.options.isEqual;
+ if (length > 1) {
+ for (var index = 0; index < length; index++) {
+ if (!isEqual(existingKey[index], keyToMatch[index])) {
+ return -1;
+ }
+ }
+ return 0;
+ }
+ return isEqual(existingKey[0], keyToMatch[0]) ? 0 : -1;
+ };
+ /**
+ * @function orderByLru
+ *
+ * @description
+ * order the array based on a Least-Recently-Used basis
+ *
+ * @param key the new key to move to the front
+ * @param value the new value to move to the front
+ * @param startingIndex the index of the item to move to the front
+ */
+ Cache.prototype.orderByLru = function (key, value, startingIndex) {
+ var keys = this.keys;
+ var values = this.values;
+ var currentLength = keys.length;
+ var index = startingIndex;
+ while (index--) {
+ keys[index + 1] = keys[index];
+ values[index + 1] = values[index];
+ }
+ keys[0] = key;
+ values[0] = value;
+ var maxSize = this.options.maxSize;
+ if (currentLength === maxSize && startingIndex === currentLength) {
+ keys.pop();
+ values.pop();
+ }
+ else if (startingIndex >= maxSize) {
+ // eslint-disable-next-line no-multi-assign
+ keys.length = values.length = maxSize;
+ }
+ };
+ /**
+ * @function updateAsyncCache
+ *
+ * @description
+ * update the promise method to auto-remove from cache if rejected, and
+ * if resolved then fire cache hit / changed
+ *
+ * @param memoized the memoized function
+ */
+ Cache.prototype.updateAsyncCache = function (memoized) {
+ var _this = this;
+ var _a = this.options, onCacheChange = _a.onCacheChange, onCacheHit = _a.onCacheHit;
+ var firstKey = this.keys[0];
+ var firstValue = this.values[0];
+ this.values[0] = firstValue.then(function (value) {
+ if (_this.shouldUpdateOnHit) {
+ onCacheHit(_this, _this.options, memoized);
+ }
+ if (_this.shouldUpdateOnChange) {
+ onCacheChange(_this, _this.options, memoized);
+ }
+ return value;
+ }, function (error) {
+ var keyIndex = _this.getKeyIndex(firstKey);
+ if (keyIndex !== -1) {
+ _this.keys.splice(keyIndex, 1);
+ _this.values.splice(keyIndex, 1);
+ }
+ throw error;
+ });
+ };
+ return Cache;
+ }());
+
+ // cache
+ function createMemoizedFunction(fn, options) {
+ if (options === void 0) { options = {}; }
+ if (isMemoized(fn)) {
+ return createMemoizedFunction(fn.fn, mergeOptions(fn.options, options));
+ }
+ if (typeof fn !== 'function') {
+ throw new TypeError('You must pass a function to `memoize`.');
+ }
+ var _a = options.isEqual, isEqual = _a === void 0 ? isSameValueZero : _a, isMatchingKey = options.isMatchingKey, _b = options.isPromise, isPromise = _b === void 0 ? false : _b, _c = options.maxSize, maxSize = _c === void 0 ? 1 : _c, onCacheAdd = options.onCacheAdd, onCacheChange = options.onCacheChange, onCacheHit = options.onCacheHit, transformKey = options.transformKey;
+ var normalizedOptions = mergeOptions({
+ isEqual: isEqual,
+ isMatchingKey: isMatchingKey,
+ isPromise: isPromise,
+ maxSize: maxSize,
+ onCacheAdd: onCacheAdd,
+ onCacheChange: onCacheChange,
+ onCacheHit: onCacheHit,
+ transformKey: transformKey,
+ }, getCustomOptions(options));
+ var cache = new Cache(normalizedOptions);
+ var keys = cache.keys, values = cache.values, canTransformKey = cache.canTransformKey, shouldCloneArguments = cache.shouldCloneArguments, shouldUpdateOnAdd = cache.shouldUpdateOnAdd, shouldUpdateOnChange = cache.shouldUpdateOnChange, shouldUpdateOnHit = cache.shouldUpdateOnHit;
+ // @ts-ignore
+ var memoized = function memoized() {
+ // @ts-ignore
+ var key = shouldCloneArguments
+ ? cloneArray(arguments)
+ : arguments;
+ if (canTransformKey) {
+ key = transformKey(key);
+ }
+ var keyIndex = keys.length ? cache.getKeyIndex(key) : -1;
+ if (keyIndex !== -1) {
+ if (shouldUpdateOnHit) {
+ onCacheHit(cache, normalizedOptions, memoized);
+ }
+ if (keyIndex) {
+ cache.orderByLru(keys[keyIndex], values[keyIndex], keyIndex);
+ if (shouldUpdateOnChange) {
+ onCacheChange(cache, normalizedOptions, memoized);
+ }
+ }
+ }
+ else {
+ var newValue = fn.apply(this, arguments);
+ var newKey = shouldCloneArguments
+ ? key
+ : cloneArray(arguments);
+ cache.orderByLru(newKey, newValue, keys.length);
+ if (isPromise) {
+ cache.updateAsyncCache(memoized);
+ }
+ if (shouldUpdateOnAdd) {
+ onCacheAdd(cache, normalizedOptions, memoized);
+ }
+ if (shouldUpdateOnChange) {
+ onCacheChange(cache, normalizedOptions, memoized);
+ }
+ }
+ return values[0];
+ };
+ memoized.cache = cache;
+ memoized.fn = fn;
+ memoized.isMemoized = true;
+ memoized.options = normalizedOptions;
+ return memoized;
+ }
+ //# sourceMappingURL=micro-memoize.esm.js.map
+
+ const s=({navigator:t,hash:e,search:o,fallback:r}={})=>{let n;const s=(t,e)=>{const o=t.substr(1).split("&").find(t=>0===t.indexOf(e));if(o)return o.split("=").pop()};return "undefined"!=typeof window&&(t&&(n=window.navigator.language||window.navigator.languages[0]),o&&(n=s(window.location.search,o)),e&&(n=s(window.location.hash,e))),n||r};let a,i;const c=createMemoizedFunction((t,e,o)=>new MessageFormat(t,e,o)),l=createMemoizedFunction((t,e)=>i[e][t]||objectResolvePath(i[e],t)),p=(t,e,o=a)=>c(t,o).format(e),f=(t,e,o=a)=>{"string"==typeof e&&(o=e,e=void 0);const r=l(t,o);return r?e?c(r,o).format(e):r:t};f.time=(t,e="short",o)=>p(`{t,time,${e}}`,{t:t},o),f.date=(t,e="short",o)=>p(`{d,date,${e}}`,{d:t},o),f.number=(t,e)=>p("{n,number}",{n:t},e),f.capital=(t,e,o)=>(t=>t.replace(/(^|\s)\S/,t=>t.toUpperCase()))(f(t,e,o)),f.title=(t,e,o)=>(t=>t.replace(/(^|\s)\S/g,t=>t.toUpperCase()))(f(t,e,o)),f.upper=(t,e,o)=>(t=>t.toLocaleUpperCase())(f(t,e,o)),f.lower=(t,e,o)=>(t=>t.toLocaleLowerCase())(f(t,e,o));const m=writable({});m.subscribe(t=>{i=t;});const u=writable({}),d=u.set;u.set=t=>{const e=(t=>{if(i[t])return t;if("string"==typeof t){const e=t.split("-").shift();if(i[e])return e}return null})(t);return e?d(e):(console.warn(`[svelte-i18n] Locale "${t}" not found.`),d(t))},u.update=t=>d(t(a)),u.subscribe(t=>{a=t;});const w=derived([u,m],()=>f);
+
+ // defining a locale dictionary
+ m.set({
+ pt: {
+ 'switch.lang': 'Trocar idioma',
+ greeting: {
+ ask: 'Por favor, digite seu nome',
+ message: 'OlĂĄ {name}, como vai?',
+ },
+ photos:
+ 'VocĂȘ {n, plural, =0 {nĂŁo tem fotos.} =1 {tem uma foto.} other {tem # fotos.}}',
+ cats: 'Tenho {n, number} {n,plural,=0{gatos}one{gato}other{gatos}}',
+ },
+ en: {
+ 'switch.lang': 'Switch language',
+ greeting: {
+ ask: 'Please type your name',
+ message: 'Hello {name}, how are you?',
+ },
+ photos:
+ 'You have {n, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}',
+ cats: 'I have {n, number} {n,plural,one{cat}other{cats}}',
+ },
+ });
+
+ u.set(
+ s({
+ navigator: true,
+ hash: 'lang',
+ fallback: 'pt',
+ }),
+ );
+
+ u.subscribe(l => {
+ console.log('locale change', l);
+ });
+
+ /* src/App.svelte generated by Svelte v3.5.1 */
+
+ const file = "src/App.svelte";
+
+ function create_fragment(ctx) {
+ var t0_value = JSON.stringify(Object.keys(ctx.$dictionary), null, ' '), t0, t1, input0, input0_placeholder_value, t2, br0, t3, h1, t4_value = ctx.$_.title('greeting.message', { name: ctx.name }), t4, t5, br1, t6, input1, t7, h20, t8, t9_value = ctx.$_('photos', { n: ctx.pluralN }), t9, t10, br2, t11, input2, t12, h21, t13, t14_value = ctx.$_('cats', { n: ctx.catsN }), t14, t15, br3, t16, h22, t17, t18_value = ctx.$_.number(ctx.catsN), t18, t19, br4, t20, h23, t21, t22_value = ctx.$_.date(ctx.date, 'short'), t22, t23, br5, t24, h24, t25, t26_value = ctx.$_.time(ctx.date, 'medium'), t26, t27, br6, t28, button, t29_value = ctx.$_('switch.lang', null, ctx.oppositeLocale), t29, dispose;
+
+ return {
+ c: function create() {
+ t0 = text(t0_value);
+ t1 = space();
+ input0 = element("input");
+ t2 = space();
+ br0 = element("br");
+ t3 = space();
+ h1 = element("h1");
+ t4 = text(t4_value);
+ t5 = space();
+ br1 = element("br");
+ t6 = space();
+ input1 = element("input");
+ t7 = space();
+ h20 = element("h2");
+ t8 = text("Plural: ");
+ t9 = text(t9_value);
+ t10 = space();
+ br2 = element("br");
+ t11 = space();
+ input2 = element("input");
+ t12 = space();
+ h21 = element("h2");
+ t13 = text("Number: ");
+ t14 = text(t14_value);
+ t15 = space();
+ br3 = element("br");
+ t16 = space();
+ h22 = element("h2");
+ t17 = text("Number util: ");
+ t18 = text(t18_value);
+ t19 = space();
+ br4 = element("br");
+ t20 = space();
+ h23 = element("h2");
+ t21 = text("Date util: ");
+ t22 = text(t22_value);
+ t23 = space();
+ br5 = element("br");
+ t24 = space();
+ h24 = element("h2");
+ t25 = text("Time util: ");
+ t26 = text(t26_value);
+ t27 = space();
+ br6 = element("br");
+ t28 = space();
+ button = element("button");
+ t29 = text(t29_value);
+ input0.className = "w-100";
+ attr(input0, "type", "text");
+ input0.placeholder = input0_placeholder_value = ctx.$_('greeting.ask');
+ add_location(input0, file, 17, 0, 318);
+ add_location(br0, file, 22, 0, 413);
+ add_location(h1, file, 24, 0, 421);
+ add_location(br1, file, 26, 0, 472);
+ attr(input1, "type", "range");
+ input1.min = "0";
+ input1.max = "5";
+ input1.step = "1";
+ add_location(input1, file, 27, 0, 479);
+ add_location(h20, file, 28, 0, 548);
+ add_location(br2, file, 30, 0, 597);
+ attr(input2, "type", "range");
+ input2.min = "100";
+ input2.max = "100000000";
+ input2.step = "10000";
+ add_location(input2, file, 31, 0, 604);
+ add_location(h21, file, 32, 0, 685);
+ add_location(br3, file, 34, 0, 730);
+ add_location(h22, file, 35, 0, 737);
+ add_location(br4, file, 37, 0, 779);
+ add_location(h23, file, 38, 0, 786);
+ add_location(br5, file, 40, 0, 832);
+ add_location(h24, file, 41, 0, 839);
+ add_location(br6, file, 43, 0, 886);
+ add_location(button, file, 44, 0, 893);
+
+ dispose = [
+ listen(input0, "input", ctx.input0_input_handler),
+ listen(input1, "change", ctx.input1_change_input_handler),
+ listen(input1, "input", ctx.input1_change_input_handler),
+ listen(input2, "change", ctx.input2_change_input_handler),
+ listen(input2, "input", ctx.input2_change_input_handler),
+ listen(button, "click", ctx.click_handler)
+ ];
+ },
+
+ l: function claim(nodes) {
+ throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
+ },
+
+ m: function mount(target, anchor) {
+ insert(target, t0, anchor);
+ insert(target, t1, anchor);
+ insert(target, input0, anchor);
+
+ input0.value = ctx.name;
+
+ insert(target, t2, anchor);
+ insert(target, br0, anchor);
+ insert(target, t3, anchor);
+ insert(target, h1, anchor);
+ append(h1, t4);
+ insert(target, t5, anchor);
+ insert(target, br1, anchor);
+ insert(target, t6, anchor);
+ insert(target, input1, anchor);
+
+ input1.value = ctx.pluralN;
+
+ insert(target, t7, anchor);
+ insert(target, h20, anchor);
+ append(h20, t8);
+ append(h20, t9);
+ insert(target, t10, anchor);
+ insert(target, br2, anchor);
+ insert(target, t11, anchor);
+ insert(target, input2, anchor);
+
+ input2.value = ctx.catsN;
+
+ insert(target, t12, anchor);
+ insert(target, h21, anchor);
+ append(h21, t13);
+ append(h21, t14);
+ insert(target, t15, anchor);
+ insert(target, br3, anchor);
+ insert(target, t16, anchor);
+ insert(target, h22, anchor);
+ append(h22, t17);
+ append(h22, t18);
+ insert(target, t19, anchor);
+ insert(target, br4, anchor);
+ insert(target, t20, anchor);
+ insert(target, h23, anchor);
+ append(h23, t21);
+ append(h23, t22);
+ insert(target, t23, anchor);
+ insert(target, br5, anchor);
+ insert(target, t24, anchor);
+ insert(target, h24, anchor);
+ append(h24, t25);
+ append(h24, t26);
+ insert(target, t27, anchor);
+ insert(target, br6, anchor);
+ insert(target, t28, anchor);
+ insert(target, button, anchor);
+ append(button, t29);
+ },
+
+ p: function update(changed, ctx) {
+ if ((changed.$dictionary) && t0_value !== (t0_value = JSON.stringify(Object.keys(ctx.$dictionary), null, ' '))) {
+ set_data(t0, t0_value);
+ }
+
+ if (changed.name && (input0.value !== ctx.name)) input0.value = ctx.name;
+
+ if ((changed.$_) && input0_placeholder_value !== (input0_placeholder_value = ctx.$_('greeting.ask'))) {
+ input0.placeholder = input0_placeholder_value;
+ }
+
+ if ((changed.$_ || changed.name) && t4_value !== (t4_value = ctx.$_.title('greeting.message', { name: ctx.name }))) {
+ set_data(t4, t4_value);
+ }
+
+ if (changed.pluralN) input1.value = ctx.pluralN;
+
+ if ((changed.$_ || changed.pluralN) && t9_value !== (t9_value = ctx.$_('photos', { n: ctx.pluralN }))) {
+ set_data(t9, t9_value);
+ }
+
+ if (changed.catsN) input2.value = ctx.catsN;
+
+ if ((changed.$_ || changed.catsN) && t14_value !== (t14_value = ctx.$_('cats', { n: ctx.catsN }))) {
+ set_data(t14, t14_value);
+ }
+
+ if ((changed.$_ || changed.catsN) && t18_value !== (t18_value = ctx.$_.number(ctx.catsN))) {
+ set_data(t18, t18_value);
+ }
+
+ if ((changed.$_ || changed.date) && t22_value !== (t22_value = ctx.$_.date(ctx.date, 'short'))) {
+ set_data(t22, t22_value);
+ }
+
+ if ((changed.$_ || changed.date) && t26_value !== (t26_value = ctx.$_.time(ctx.date, 'medium'))) {
+ set_data(t26, t26_value);
+ }
+
+ if ((changed.$_ || changed.oppositeLocale) && t29_value !== (t29_value = ctx.$_('switch.lang', null, ctx.oppositeLocale))) {
+ set_data(t29, t29_value);
+ }
+ },
+
+ i: noop,
+ o: noop,
+
+ d: function destroy(detaching) {
+ if (detaching) {
+ detach(t0);
+ detach(t1);
+ detach(input0);
+ detach(t2);
+ detach(br0);
+ detach(t3);
+ detach(h1);
+ detach(t5);
+ detach(br1);
+ detach(t6);
+ detach(input1);
+ detach(t7);
+ detach(h20);
+ detach(t10);
+ detach(br2);
+ detach(t11);
+ detach(input2);
+ detach(t12);
+ detach(h21);
+ detach(t15);
+ detach(br3);
+ detach(t16);
+ detach(h22);
+ detach(t19);
+ detach(br4);
+ detach(t20);
+ detach(h23);
+ detach(t23);
+ detach(br5);
+ detach(t24);
+ detach(h24);
+ detach(t27);
+ detach(br6);
+ detach(t28);
+ detach(button);
+ }
+
+ run_all(dispose);
+ }
+ };
+ }
+
+ function instance($$self, $$props, $$invalidate) {
+ let $locale, $dictionary, $_;
+
+ validate_store(u, 'locale');
+ subscribe($$self, u, $$value => { $locale = $$value; $$invalidate('$locale', $locale); });
+ validate_store(m, 'dictionary');
+ subscribe($$self, m, $$value => { $dictionary = $$value; $$invalidate('$dictionary', $dictionary); });
+ validate_store(w, '_');
+ subscribe($$self, w, $$value => { $_ = $$value; $$invalidate('$_', $_); });
+
+ let name = '';
+ let pluralN = 2;
+ let catsN = 992301;
+ let date = new Date();
+
+ setInterval(() => {
+ $$invalidate('date', date = new Date());
+ }, 1000);
+
+ function input0_input_handler() {
+ name = this.value;
+ $$invalidate('name', name);
+ }
+
+ function input1_change_input_handler() {
+ pluralN = to_number(this.value);
+ $$invalidate('pluralN', pluralN);
+ }
+
+ function input2_change_input_handler() {
+ catsN = to_number(this.value);
+ $$invalidate('catsN', catsN);
+ }
+
+ function click_handler() {
+ return u.set(oppositeLocale);
+ }
+
+ let oppositeLocale;
+
+ $$self.$$.update = ($$dirty = { $locale: 1 }) => {
+ if ($$dirty.$locale) { $$invalidate('oppositeLocale', oppositeLocale = $locale === 'pt' ? 'en' : 'pt'); }
+ };
+
+ return {
+ name,
+ pluralN,
+ catsN,
+ date,
+ oppositeLocale,
+ $dictionary,
+ $_,
+ input0_input_handler,
+ input1_change_input_handler,
+ input2_change_input_handler,
+ click_handler
+ };
+ }
+
+ class App extends SvelteComponentDev {
+ constructor(options) {
+ super(options);
+ init(this, options, instance, create_fragment, safe_not_equal, []);
+ }
+ }
+
+ const app = new App({
+ target: document.body,
+ props: { name: 'world' },
+ });
+
+ return app;
+
+}());
+//# sourceMappingURL=bundle.js.map
diff --git a/example/public/global.css b/example/public/global.css
deleted file mode 100644
index 9d682a3..0000000
--- a/example/public/global.css
+++ /dev/null
@@ -1,61 +0,0 @@
-html, body {
- position: relative;
- width: 100%;
- height: 100%;
-}
-
-body {
- color: #333;
- margin: 0;
- padding: 8px;
- box-sizing: border-box;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-}
-
-a {
- color: rgb(0,100,200);
- text-decoration: none;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-a:visited {
- color: rgb(0,80,160);
-}
-
-label {
- display: block;
-}
-
-input, button, select, textarea {
- font-family: inherit;
- font-size: inherit;
- padding: 0.4em;
- margin: 0 0 0.5em 0;
- box-sizing: border-box;
- border: 1px solid #ccc;
- border-radius: 2px;
-}
-
-input:disabled {
- color: #ccc;
-}
-
-input[type="range"] {
- height: 0;
-}
-
-button {
- background-color: #f4f4f4;
- outline: none;
-}
-
-button:active {
- background-color: #ddd;
-}
-
-button:focus {
- border-color: #666;
-}
\ No newline at end of file
diff --git a/example/public/index.html b/example/public/index.html
deleted file mode 100644
index 5f7729a..0000000
--- a/example/public/index.html
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
- Svelte app
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/rollup.config.js b/example/rollup.config.js
index a3174d4..b46dcee 100644
--- a/example/rollup.config.js
+++ b/example/rollup.config.js
@@ -1,44 +1,109 @@
-import svelte from 'rollup-plugin-svelte'
import resolve from 'rollup-plugin-node-resolve'
+import replace from '@rollup/plugin-replace'
import commonjs from 'rollup-plugin-commonjs'
-import livereload from 'rollup-plugin-livereload'
+import svelte from 'rollup-plugin-svelte'
+import babel from 'rollup-plugin-babel'
+import json from '@rollup/plugin-json'
import { terser } from 'rollup-plugin-terser'
+import config from 'sapper/config/rollup.js'
-const production = !process.env.ROLLUP_WATCH
+import pkg from './package.json'
+
+const mode = process.env.NODE_ENV
+const dev = mode === 'development'
+const legacy = !!process.env.SAPPER_LEGACY_BUILD
+
+const onwarn = (warning, onwarn) =>
+ (warning.code === 'CIRCULAR_DEPENDENCY' &&
+ /[/\\]@sapper[/\\]/.test(warning.message)) ||
+ onwarn(warning)
+const dedupe = importee =>
+ importee === 'svelte' || importee.startsWith('svelte/')
export default {
- input: 'src/main.js',
- output: {
- sourcemap: true,
- format: 'iife',
- name: 'app',
- file: 'public/bundle.js',
+ client: {
+ input: config.client.input(),
+ output: config.client.output(),
+ plugins: [
+ replace({
+ 'process.browser': true,
+ 'process.env.NODE_ENV': JSON.stringify(mode),
+ }),
+ svelte({
+ dev,
+ hydratable: true,
+ emitCss: true,
+ }),
+ resolve({
+ browser: true,
+ dedupe,
+ }),
+ commonjs(),
+ json({
+ namedExports: false,
+ compact: !dev,
+ }),
+ legacy &&
+ babel({
+ extensions: ['.js', '.mjs', '.html', '.svelte'],
+ runtimeHelpers: true,
+ exclude: ['node_modules/@babel/**'],
+ presets: [['@babel/preset-env', { targets: '> 0.25%, not dead' }]],
+ plugins: [
+ '@babel/plugin-syntax-dynamic-import',
+ ['@babel/plugin-transform-runtime', { useESModules: true }],
+ ],
+ }),
+
+ !dev &&
+ terser({
+ module: true,
+ }),
+ ],
+
+ onwarn,
+ },
+ server: {
+ input: config.server.input(),
+ output: config.server.output(),
+ plugins: [
+ replace({
+ 'process.browser': false,
+ 'process.env.NODE_ENV': JSON.stringify(mode),
+ }),
+ svelte({
+ generate: 'ssr',
+ dev,
+ }),
+ resolve({
+ dedupe,
+ }),
+ commonjs(),
+ json({
+ namedExports: false,
+ compact: !dev,
+ }),
+ ],
+ external: Object.keys(pkg.dependencies).concat(
+ require('module').builtinModules ||
+ Object.keys(process.binding('natives'))
+ ),
+ onwarn,
},
- plugins: [
- svelte({
- // enable run-time checks when not in production
- dev: !production,
- // we'll extract any component CSS out into
- // a separate file â better for performance
- css: css => {
- css.write('public/bundle.css')
- },
- }),
- // If you have external dependencies installed from
- // npm, you'll most likely need these plugins. In
- // some cases you'll need additional configuration â
- // consult the documentation for details:
- // https://github.com/rollup/rollup-plugin-commonjs
- resolve(),
- commonjs(),
+ serviceworker: {
+ input: config.serviceworker.input(),
+ output: config.serviceworker.output(),
+ plugins: [
+ resolve(),
+ replace({
+ 'process.browser': true,
+ 'process.env.NODE_ENV': JSON.stringify(mode),
+ }),
+ commonjs(),
+ !dev && terser(),
+ ],
- // Watch the `public` directory and refresh the
- // browser on changes when not in production
- !production && livereload('public'),
-
- // If we're building for production (npm run build
- // instead of npm run dev), minify
- production && terser(),
- ],
+ onwarn,
+ },
}
diff --git a/example/src/App.svelte b/example/src/App.svelte
deleted file mode 100644
index 168b1e8..0000000
--- a/example/src/App.svelte
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-{$_.title('greeting.message', { values: { name } })}
-
-
-
-Plural: {$_('photos', { values: { n: pluralN } })}
-
-
-
-Number: {$_('cats', { values: { n: catsN } })}
-
-
-Number util: {$_.number(catsN)}
-Number util: {$_.number(10000000, { format: 'compactShort' })}
-
-
-Date util: {$_.date(date, 'short')}
-
-
-Time util: {$_.time(date, 'medium')}
-
-
- locale.set(oppositeLocale)}>
- {$_('switch.lang', { locale: oppositeLocale })}
-
diff --git a/example/src/client.js b/example/src/client.js
new file mode 100644
index 0000000..0845360
--- /dev/null
+++ b/example/src/client.js
@@ -0,0 +1,7 @@
+import * as sapper from '@sapper/app'
+
+import './i18n.js'
+
+sapper.start({
+ target: document.querySelector('#sapper'),
+})
diff --git a/example/src/components/Nav.svelte b/example/src/components/Nav.svelte
new file mode 100644
index 0000000..3afb4a5
--- /dev/null
+++ b/example/src/components/Nav.svelte
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+ {#each $locales as item}
+
+ ($locale = item)}>
+ {item.replace('-', '_')}
+
+
+ {/each}
+
+
diff --git a/example/src/i18n.js b/example/src/i18n.js
index 5b954c6..5571ab2 100644
--- a/example/src/i18n.js
+++ b/example/src/i18n.js
@@ -1,51 +1,10 @@
-import {
- locale,
- dictionary,
- getClientLocale,
- addCustomFormats,
-} from '../../src/index.js'
+import { register, init } from 'svelte-i18n'
-addCustomFormats({
- number: {
- compact: {
- notation: 'compact',
- compactDisplay: 'long',
- },
- },
-})
-
-// defining a locale dictionary
-dictionary.set({
- pt: {
- 'switch.lang': 'Trocar idioma',
- greeting: {
- ask: 'Por favor, digite seu nome',
- message: 'OlĂĄ {name}, como vai?',
- },
- photos:
- 'VocĂȘ {n, plural, =0 {nĂŁo tem fotos.} =1 {tem uma foto.} other {tem # fotos.}}',
- cats: 'Tenho {n, number} {n,plural,=0{gatos}one{gato}other{gatos}}',
- },
- en: {
- 'switch.lang': 'Switch language',
- greeting: {
- ask: 'Please type your name',
- message: 'Hello {name}, how are you?',
- },
- photos:
- 'You have {n, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}',
- cats: 'I have {n, number} {n,plural,one{cat}other{cats}}',
- },
-})
-
-locale.set(
- getClientLocale({
- navigator: true,
- hash: 'lang',
- fallback: 'pt',
- }),
-)
-
-locale.subscribe(l => {
- console.log('locale change', l)
+register('en', () => import('../messages/en.json'))
+register('pt-BR', () => import('../messages/pt-BR.json'))
+register('es-ES', () => import('../messages/es-ES.json'))
+
+init({
+ fallbackLocale: 'en',
+ initialLocale: { navigator: true },
})
diff --git a/example/src/main.js b/example/src/main.js
deleted file mode 100644
index 13fc3e6..0000000
--- a/example/src/main.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import './i18n.js'
-import App from './App.svelte'
-
-const app = new App({
- target: document.body,
- props: { name: 'world' },
-})
-
-export default app
diff --git a/example/src/routes/_error.svelte b/example/src/routes/_error.svelte
new file mode 100644
index 0000000..320e587
--- /dev/null
+++ b/example/src/routes/_error.svelte
@@ -0,0 +1,40 @@
+
+
+
+
+
+ {status}
+
+
+{status}
+
+{error.message}
+
+{#if dev && error.stack}
+ {error.stack}
+{/if}
diff --git a/example/src/routes/_layout.svelte b/example/src/routes/_layout.svelte
new file mode 100644
index 0000000..bc62040
--- /dev/null
+++ b/example/src/routes/_layout.svelte
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+{#if $isLoading}
+ Loading...
+{/if}
+
+
+
+
+
+
diff --git a/example/src/routes/about/_locales/default.json b/example/src/routes/about/_locales/default.json
new file mode 100644
index 0000000..4b22138
--- /dev/null
+++ b/example/src/routes/about/_locales/default.json
@@ -0,0 +1,7 @@
+{
+ "title": {
+ "about": "About"
+ },
+ "about_this_site": "About this site",
+ "about_content": ["This is the 'about' page. There's not much here."]
+}
diff --git a/example/src/routes/about/_locales/en.json b/example/src/routes/about/_locales/en.json
new file mode 100644
index 0000000..4b22138
--- /dev/null
+++ b/example/src/routes/about/_locales/en.json
@@ -0,0 +1,7 @@
+{
+ "title": {
+ "about": "About"
+ },
+ "about_this_site": "About this site",
+ "about_content": ["This is the 'about' page. There's not much here."]
+}
diff --git a/example/src/routes/about/_locales/es-ES.json b/example/src/routes/about/_locales/es-ES.json
new file mode 100644
index 0000000..53e4353
--- /dev/null
+++ b/example/src/routes/about/_locales/es-ES.json
@@ -0,0 +1,7 @@
+{
+ "title": {
+ "about": "Acerca de"
+ },
+ "about_this_site": " Acerca de este sitio",
+ "about_content": ["Esta es la pĂĄgina 'acerca de'. No hay mucho aquĂ."]
+}
diff --git a/example/src/routes/about/_locales/pt-BR.json b/example/src/routes/about/_locales/pt-BR.json
new file mode 100644
index 0000000..2dc5e8f
--- /dev/null
+++ b/example/src/routes/about/_locales/pt-BR.json
@@ -0,0 +1,7 @@
+{
+ "title": {
+ "about": "Sobre"
+ },
+ "about_this_site": "Sobre este site",
+ "about_content": ["Esta Ă© a pĂĄgina 'sobre'. NĂŁo hĂĄ muito aqui."]
+}
diff --git a/example/src/routes/about/index.svelte b/example/src/routes/about/index.svelte
new file mode 100644
index 0000000..dcca175
--- /dev/null
+++ b/example/src/routes/about/index.svelte
@@ -0,0 +1,23 @@
+
+
+
+
+
+ {$_('title.about')}
+
+
+{$_('about_this_site')}
+
+{$_('about_content.0')}
diff --git a/example/src/routes/blog/[slug].json.js b/example/src/routes/blog/[slug].json.js
new file mode 100644
index 0000000..176890d
--- /dev/null
+++ b/example/src/routes/blog/[slug].json.js
@@ -0,0 +1,28 @@
+import posts from './_posts.js';
+
+const lookup = new Map();
+posts.forEach(post => {
+ lookup.set(post.slug, JSON.stringify(post));
+});
+
+export function get(req, res, next) {
+ // the `slug` parameter is available because
+ // this file is called [slug].json.js
+ const { slug } = req.params;
+
+ if (lookup.has(slug)) {
+ res.writeHead(200, {
+ 'Content-Type': 'application/json'
+ });
+
+ res.end(lookup.get(slug));
+ } else {
+ res.writeHead(404, {
+ 'Content-Type': 'application/json'
+ });
+
+ res.end(JSON.stringify({
+ message: `Not found`
+ }));
+ }
+}
diff --git a/example/src/routes/blog/[slug].svelte b/example/src/routes/blog/[slug].svelte
new file mode 100644
index 0000000..9e0c419
--- /dev/null
+++ b/example/src/routes/blog/[slug].svelte
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+ {post.title}
+
+
+{post.title}
+
+
+ {@html post.html}
+
diff --git a/example/src/routes/blog/_posts.js b/example/src/routes/blog/_posts.js
new file mode 100644
index 0000000..a2a8903
--- /dev/null
+++ b/example/src/routes/blog/_posts.js
@@ -0,0 +1,92 @@
+// Ordinarily, you'd generate this data from markdown files in your
+// repo, or fetch them from a database of some kind. But in order to
+// avoid unnecessary dependencies in the starter template, and in the
+// service of obviousness, we're just going to leave it here.
+
+// This file is called `_posts.js` rather than `posts.js`, because
+// we don't want to create an `/blog/posts` route â the leading
+// underscore tells Sapper not to do that.
+
+const posts = [
+ {
+ title: 'What is Sapper?',
+ slug: 'what-is-sapper',
+ html: `
+ First, you have to know what Svelte is. Svelte is a UI framework with a bold new idea: rather than providing a library that you write code with (like React or Vue, for example), it's a compiler that turns your components into highly optimized vanilla JavaScript. If you haven't already read the introductory blog post , you should!
+
+ Sapper is a Next.js-style framework (more on that here ) built around Svelte. It makes it embarrassingly easy to create extremely high performance web apps. Out of the box, you get:
+
+
+ Code-splitting, dynamic imports and hot module replacement, powered by webpack
+ Server-side rendering (SSR) with client-side hydration
+ Service worker for offline support, and all the PWA bells and whistles
+ The nicest development experience you've ever had, or your money back
+
+
+ It's implemented as Express middleware. Everything is set up and waiting for you to get started, but you keep complete control over the server, service worker, webpack config and everything else, so it's as flexible as you need it to be.
+ `
+ },
+
+ {
+ title: 'How to use Sapper',
+ slug: 'how-to-use-sapper',
+ html: `
+ Step one
+ Create a new project, using degit :
+
+ npx degit "sveltejs/sapper-template#rollup" my-app
+ cd my-app
+ npm install # or yarn!
+ npm run dev
+
+
+ Step two
+ Go to localhost:3000 . Open my-app
in your editor. Edit the files in the src/routes
directory or add new ones.
+
+ Step three
+ ...
+
+ Step four
+ Resist overdone joke formats.
+ `
+ },
+
+ {
+ title: 'Why the name?',
+ slug: 'why-the-name',
+ html: `
+ In war, the soldiers who build bridges, repair roads, clear minefields and conduct demolitions â all under combat conditions â are known as sappers .
+
+ For web developers, the stakes are generally lower than those for combat engineers. But we face our own hostile environment: underpowered devices, poor network connections, and the complexity inherent in front-end engineering. Sapper, which is short for S velte app maker , is your courageous and dutiful ally.
+ `
+ },
+
+ {
+ title: 'How is Sapper different from Next.js?',
+ slug: 'how-is-sapper-different-from-next',
+ html: `
+ Next.js is a React framework from Zeit , and is the inspiration for Sapper. There are a few notable differences, however:
+
+
+ It's powered by Svelte instead of React, so it's faster and your apps are smaller
+ Instead of route masking, we encode route parameters in filenames. For example, the page you're looking at right now is src/routes/blog/[slug].html
+ As well as pages (Svelte components, which render on server or client), you can create server routes in your routes
directory. These are just .js
files that export functions corresponding to HTTP methods, and receive Express request
and response
objects as arguments. This makes it very easy to, for example, add a JSON API such as the one powering this very page
+ Links are just <a>
elements, rather than framework-specific <Link>
components. That means, for example, that this link right here , despite being inside a blob of HTML, works with the router as you'd expect.
+
+ `
+ },
+
+ {
+ title: 'How can I get involved?',
+ slug: 'how-can-i-get-involved',
+ html: `
+ We're so glad you asked! Come on over to the Svelte and Sapper repos, and join us in the Discord chatroom . Everyone is welcome, especially you!
+ `
+ }
+];
+
+posts.forEach(post => {
+ post.html = post.html.replace(/^\t{3}/gm, '');
+});
+
+export default posts;
diff --git a/example/src/routes/blog/index.json.js b/example/src/routes/blog/index.json.js
new file mode 100644
index 0000000..bfd9389
--- /dev/null
+++ b/example/src/routes/blog/index.json.js
@@ -0,0 +1,16 @@
+import posts from './_posts.js';
+
+const contents = JSON.stringify(posts.map(post => {
+ return {
+ title: post.title,
+ slug: post.slug
+ };
+}));
+
+export function get(req, res) {
+ res.writeHead(200, {
+ 'Content-Type': 'application/json'
+ });
+
+ res.end(contents);
+}
\ No newline at end of file
diff --git a/example/src/routes/blog/index.svelte b/example/src/routes/blog/index.svelte
new file mode 100644
index 0000000..e24f711
--- /dev/null
+++ b/example/src/routes/blog/index.svelte
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+ Blog
+
+
+Recent posts
+
+
\ No newline at end of file
diff --git a/example/src/routes/index.svelte b/example/src/routes/index.svelte
new file mode 100644
index 0000000..64100c8
--- /dev/null
+++ b/example/src/routes/index.svelte
@@ -0,0 +1,59 @@
+
+
+
+
+
+ {$_('title.index', { default: 'Sapper project template!' })}
+
+
+{$_('messages.success', { default: 'Great success!' })}
+
+
+
+ {$_('messages.high_five', { default: 'High five' })}
+
+
+
+
+ {$_('messages.try_editing', {
+ default:
+ 'Try editing this file (src/routes/index.svelte) to test live reloading.',
+ })}
+
+
diff --git a/example/src/server.js b/example/src/server.js
new file mode 100644
index 0000000..056b74d
--- /dev/null
+++ b/example/src/server.js
@@ -0,0 +1,19 @@
+import sirv from 'sirv'
+import polka from 'polka'
+import compression from 'compression'
+import * as sapper from '@sapper/server'
+
+import './i18n.js'
+
+const { PORT, NODE_ENV } = process.env
+const dev = NODE_ENV === 'development'
+
+polka() // You can also use Express
+ .use(
+ compression({ threshold: 0 }),
+ sirv('static', { dev }),
+ sapper.middleware()
+ )
+ .listen(PORT, err => {
+ if (err) console.log('error', err)
+ })
diff --git a/example/src/service-worker.js b/example/src/service-worker.js
new file mode 100644
index 0000000..1578336
--- /dev/null
+++ b/example/src/service-worker.js
@@ -0,0 +1,85 @@
+import { timestamp, files, shell, routes } from '@sapper/service-worker'
+
+const ASSETS = `cache${timestamp}`
+
+// `shell` is an array of all the files generated by the bundler,
+// `files` is an array of everything in the `static` directory
+const to_cache = shell.concat(files)
+const cached = new Set(to_cache)
+
+self.addEventListener('install', event => {
+ event.waitUntil(
+ caches
+ .open(ASSETS)
+ .then(cache => cache.addAll(to_cache))
+ .then(() => {
+ self.skipWaiting()
+ })
+ )
+})
+
+self.addEventListener('activate', event => {
+ event.waitUntil(
+ caches.keys().then(async keys => {
+ // delete old caches
+ for (const key of keys) {
+ if (key !== ASSETS) await caches.delete(key)
+ }
+
+ self.clients.claim()
+ })
+ )
+})
+
+self.addEventListener('fetch', event => {
+ if (event.request.method !== 'GET' || event.request.headers.has('range'))
+ return
+
+ const url = new URL(event.request.url)
+
+ // don't try to handle e.g. data: URIs
+ if (!url.protocol.startsWith('http')) return
+
+ // ignore dev server requests
+ if (
+ url.hostname === self.location.hostname &&
+ url.port !== self.location.port
+ )
+ return
+
+ // always serve static files and bundler-generated assets from cache
+ if (url.host === self.location.host && cached.has(url.pathname)) {
+ event.respondWith(caches.match(event.request))
+ return
+ }
+
+ // for pages, you might want to serve a shell `service-worker-index.html` file,
+ // which Sapper has generated for you. It's not right for every
+ // app, but if it's right for yours then uncomment this section
+ /*
+ if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) {
+ event.respondWith(caches.match('/service-worker-index.html'));
+ return;
+ }
+ */
+
+ if (event.request.cache === 'only-if-cached') return
+
+ // for everything else, try the network first, falling back to
+ // cache if the user is offline. (If the pages never change, you
+ // might prefer a cache-first approach to a network-first one.)
+ event.respondWith(
+ caches.open(`offline${timestamp}`).then(async cache => {
+ try {
+ const response = await fetch(event.request)
+ cache.put(event.request, response.clone())
+ return response
+ } catch (err) {
+ const response = await cache.match(event.request)
+ if (response) return response
+
+ throw err
+ }
+ })
+ )
+})
diff --git a/example/src/template.html b/example/src/template.html
new file mode 100644
index 0000000..fb96370
--- /dev/null
+++ b/example/src/template.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ %sapper.base%
+
+
+
+
+
+
+ %sapper.styles%
+
+
+ %sapper.head%
+
+
+
+ %sapper.html%
+
+
+ %sapper.scripts%
+
+
diff --git a/example/public/favicon.png b/example/static/favicon.png
similarity index 100%
rename from example/public/favicon.png
rename to example/static/favicon.png
diff --git a/example/static/global.css b/example/static/global.css
new file mode 100644
index 0000000..3566e73
--- /dev/null
+++ b/example/static/global.css
@@ -0,0 +1,36 @@
+body {
+ margin: 0;
+ font-family: Roboto, -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ font-size: 14px;
+ line-height: 1.5;
+ color: #333;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ margin: 0 0 0.5em 0;
+ font-weight: 400;
+ line-height: 1.2;
+}
+
+h1 {
+ font-size: 2em;
+}
+
+a {
+ color: inherit;
+}
+
+code {
+ font-family: menlo, inconsolata, monospace;
+ font-size: calc(1em - 2px);
+ color: #555;
+ background-color: #f0f0f0;
+ padding: 0.2em 0.4em;
+ border-radius: 2px;
+}
+
+@media (min-width: 400px) {
+ body {
+ font-size: 16px;
+ }
+}
\ No newline at end of file
diff --git a/example/static/great-success.png b/example/static/great-success.png
new file mode 100644
index 0000000..c38720c
Binary files /dev/null and b/example/static/great-success.png differ
diff --git a/example/static/logo-192.png b/example/static/logo-192.png
new file mode 100644
index 0000000..96fac03
Binary files /dev/null and b/example/static/logo-192.png differ
diff --git a/example/static/logo-512.png b/example/static/logo-512.png
new file mode 100644
index 0000000..9f0e764
Binary files /dev/null and b/example/static/logo-512.png differ
diff --git a/example/static/manifest.json b/example/static/manifest.json
new file mode 100644
index 0000000..78ad114
--- /dev/null
+++ b/example/static/manifest.json
@@ -0,0 +1,20 @@
+{
+ "background_color": "#ffffff",
+ "theme_color": "#333333",
+ "name": "TODO",
+ "short_name": "TODO",
+ "display": "minimal-ui",
+ "start_url": "/",
+ "icons": [
+ {
+ "src": "logo-192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "logo-512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ]
+}
diff --git a/package-lock.json b/package-lock.json
index 1141297..2806b27 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "svelte-i18n",
- "version": "1.1.2-beta",
+ "version": "2.1.0-alpha.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -36,51 +36,51 @@
}
},
"@babel/generator": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
- "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "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.2",
+ "@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.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz",
- "integrity": "sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg==",
+ "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.0"
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz",
- "integrity": "sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw==",
+ "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.0",
- "@babel/types": "^7.7.0"
+ "@babel/helper-explode-assignable-expression": "^7.7.4",
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-call-delegate": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz",
- "integrity": "sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw==",
+ "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.0",
- "@babel/traverse": "^7.7.0",
- "@babel/types": "^7.7.0"
+ "@babel/helper-hoist-variables": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-create-regexp-features-plugin": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz",
- "integrity": "sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ==",
+ "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",
@@ -88,94 +88,94 @@
}
},
"@babel/helper-define-map": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz",
- "integrity": "sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA==",
+ "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.0",
- "@babel/types": "^7.7.0",
+ "@babel/helper-function-name": "^7.7.4",
+ "@babel/types": "^7.7.4",
"lodash": "^4.17.13"
}
},
"@babel/helper-explode-assignable-expression": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz",
- "integrity": "sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg==",
+ "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.0",
- "@babel/types": "^7.7.0"
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-function-name": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
- "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "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.0",
- "@babel/template": "^7.7.0",
- "@babel/types": "^7.7.0"
+ "@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.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
- "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "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.0"
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz",
- "integrity": "sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ==",
+ "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.0"
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz",
- "integrity": "sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA==",
+ "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.0"
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-module-imports": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz",
- "integrity": "sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw==",
+ "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.0"
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-module-transforms": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz",
- "integrity": "sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ==",
+ "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.0",
- "@babel/helper-simple-access": "^7.7.0",
- "@babel/helper-split-export-declaration": "^7.7.0",
- "@babel/template": "^7.7.0",
- "@babel/types": "^7.7.0",
+ "@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.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz",
- "integrity": "sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg==",
+ "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.0"
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-plugin-utils": {
@@ -194,70 +194,70 @@
}
},
"@babel/helper-remap-async-to-generator": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz",
- "integrity": "sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw==",
+ "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.0",
- "@babel/helper-wrap-function": "^7.7.0",
- "@babel/template": "^7.7.0",
- "@babel/traverse": "^7.7.0",
- "@babel/types": "^7.7.0"
+ "@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.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz",
- "integrity": "sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg==",
+ "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.0",
- "@babel/helper-optimise-call-expression": "^7.7.0",
- "@babel/traverse": "^7.7.0",
- "@babel/types": "^7.7.0"
+ "@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.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz",
- "integrity": "sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g==",
+ "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.0",
- "@babel/types": "^7.7.0"
+ "@babel/template": "^7.7.4",
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
- "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "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.0"
+ "@babel/types": "^7.7.4"
}
},
"@babel/helper-wrap-function": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz",
- "integrity": "sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w==",
+ "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.0",
- "@babel/template": "^7.7.0",
- "@babel/traverse": "^7.7.0",
- "@babel/types": "^7.7.0"
+ "@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.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.0.tgz",
- "integrity": "sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g==",
+ "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.0",
- "@babel/traverse": "^7.7.0",
- "@babel/types": "^7.7.0"
+ "@babel/template": "^7.7.4",
+ "@babel/traverse": "^7.7.4",
+ "@babel/types": "^7.7.4"
}
},
"@babel/highlight": {
@@ -272,159 +272,159 @@
}
},
"@babel/parser": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
- "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "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.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz",
- "integrity": "sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA==",
+ "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.0",
- "@babel/plugin-syntax-async-generators": "^7.2.0"
+ "@babel/helper-remap-async-to-generator": "^7.7.4",
+ "@babel/plugin-syntax-async-generators": "^7.7.4"
}
},
"@babel/plugin-proposal-dynamic-import": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz",
- "integrity": "sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ==",
+ "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.2.0"
+ "@babel/plugin-syntax-dynamic-import": "^7.7.4"
}
},
"@babel/plugin-proposal-json-strings": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
- "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+ "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.2.0"
+ "@babel/plugin-syntax-json-strings": "^7.7.4"
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz",
- "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==",
+ "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.2.0"
+ "@babel/plugin-syntax-object-rest-spread": "^7.7.4"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
- "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+ "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.2.0"
+ "@babel/plugin-syntax-optional-catch-binding": "^7.7.4"
}
},
"@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz",
- "integrity": "sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw==",
+ "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.0",
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-syntax-async-generators": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
- "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
- "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
- "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+ "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-object-rest-spread": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
- "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
- "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+ "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.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz",
- "integrity": "sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
- "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+ "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.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz",
- "integrity": "sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw==",
+ "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.0",
+ "@babel/helper-module-imports": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-remap-async-to-generator": "^7.7.0"
+ "@babel/helper-remap-async-to-generator": "^7.7.4"
}
},
"@babel/plugin-transform-block-scoped-functions": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
- "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+ "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.6.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz",
- "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==",
+ "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",
@@ -432,237 +432,237 @@
}
},
"@babel/plugin-transform-classes": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz",
- "integrity": "sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA==",
+ "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.0",
- "@babel/helper-define-map": "^7.7.0",
- "@babel/helper-function-name": "^7.7.0",
- "@babel/helper-optimise-call-expression": "^7.7.0",
+ "@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.0",
- "@babel/helper-split-export-declaration": "^7.7.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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
- "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+ "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.6.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz",
- "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==",
+ "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.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz",
- "integrity": "sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA==",
+ "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.0",
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-duplicate-keys": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz",
- "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
- "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+ "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.1.0",
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
- "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
+ "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.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz",
- "integrity": "sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA==",
+ "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.0",
+ "@babel/helper-function-name": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-literals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
- "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
- "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
+ "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.5.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz",
- "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==",
+ "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.1.0",
+ "@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.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz",
- "integrity": "sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg==",
+ "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.0",
+ "@babel/helper-module-transforms": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-simple-access": "^7.7.0",
+ "@babel/helper-simple-access": "^7.7.4",
"babel-plugin-dynamic-import-node": "^2.3.0"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz",
- "integrity": "sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg==",
+ "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.0",
+ "@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.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz",
- "integrity": "sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA==",
+ "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.0",
+ "@babel/helper-module-transforms": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz",
- "integrity": "sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg==",
+ "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.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
- "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
+ "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.5.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz",
- "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==",
+ "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.5.5"
+ "@babel/helper-replace-supers": "^7.7.4"
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
- "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
+ "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.4.4",
- "@babel/helper-get-function-arity": "^7.0.0",
+ "@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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
- "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
+ "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-regenerator": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz",
- "integrity": "sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
- "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
- "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+ "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.6.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz",
- "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==",
+ "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.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
- "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+ "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",
@@ -670,31 +670,31 @@
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
- "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
+ "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.0.0",
+ "@babel/helper-annotate-as-pure": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-typeof-symbol": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
- "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+ "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.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz",
- "integrity": "sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA==",
+ "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.0",
+ "@babel/helper-create-regexp-features-plugin": "^7.7.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
@@ -758,37 +758,37 @@
}
},
"@babel/template": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
- "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "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.0",
- "@babel/types": "^7.7.0"
+ "@babel/parser": "^7.7.4",
+ "@babel/types": "^7.7.4"
}
},
"@babel/traverse": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
- "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "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.2",
- "@babel/helper-function-name": "^7.7.0",
- "@babel/helper-split-export-declaration": "^7.7.0",
- "@babel/parser": "^7.7.2",
- "@babel/types": "^7.7.2",
+ "@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.2",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
- "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "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",
@@ -1039,9 +1039,9 @@
}
},
"@types/babel__traverse": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz",
- "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==",
+ "version": "7.0.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz",
+ "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==",
"dev": true,
"requires": {
"@babel/types": "^7.3.0"
@@ -1059,6 +1059,12 @@
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
+ "@types/intl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/intl/-/intl-1.2.0.tgz",
+ "integrity": "sha512-BP+KwmOvD9AR5aoxnbyyPr3fAtpjEI/bVImHsotmpuC43+z0NAmjJ9cQbX7vPCq8XcvCeAVc8E3KSQPYNaPsUQ==",
+ "dev": true
+ },
"@types/istanbul-lib-coverage": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
@@ -1084,6 +1090,15 @@
"@types/istanbul-lib-report": "*"
}
},
+ "@types/jest": {
+ "version": "24.0.23",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.23.tgz",
+ "integrity": "sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg==",
+ "dev": true,
+ "requires": {
+ "jest-diff": "^24.3.0"
+ }
+ },
"@types/json-schema": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz",
@@ -1091,15 +1106,21 @@
"dev": true
},
"@types/node": {
- "version": "12.12.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.7.tgz",
- "integrity": "sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==",
+ "version": "12.12.12",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz",
+ "integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ==",
"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==",
+ "@types/pug": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.4.tgz",
+ "integrity": "sha1-h3L80EGOPNLMFxVV1zAHQVBR9LI=",
+ "dev": true
+ },
+ "@types/sass": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.16.0.tgz",
+ "integrity": "sha512-2XZovu4NwcqmtZtsBR5XYLw18T8cBCnU2USFHTnYLLHz9fkhnoEMoDsqShJIOFsFhn5aJHjweiUUdTrDGujegA==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -1127,69 +1148,58 @@
"dev": true
},
"@typescript-eslint/eslint-plugin": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.7.0.tgz",
- "integrity": "sha512-H5G7yi0b0FgmqaEUpzyBlVh0d9lq4cWG2ap0RKa6BkF3rpBb6IrAoubt1NWh9R2kRs/f0k6XwRDiDz3X/FqXhQ==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.8.0.tgz",
+ "integrity": "sha512-ohqul5s6XEB0AzPWZCuJF5Fd6qC0b4+l5BGEnrlpmvXxvyymb8yw8Bs4YMF8usNAeuCJK87eFIHy8g8GFvOtGA==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "2.7.0",
- "eslint-utils": "^1.4.2",
+ "@typescript-eslint/experimental-utils": "2.8.0",
+ "eslint-utils": "^1.4.3",
"functional-red-black-tree": "^1.0.1",
- "regexpp": "^2.0.1",
+ "regexpp": "^3.0.0",
"tsutils": "^3.17.1"
- }
- },
- "@typescript-eslint/experimental-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.7.0.tgz",
- "integrity": "sha512-9/L/OJh2a5G2ltgBWJpHRfGnt61AgDeH6rsdg59BH0naQseSwR7abwHq3D5/op0KYD/zFT4LS5gGvWcMmegTEg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.3",
- "@typescript-eslint/typescript-estree": "2.7.0",
- "eslint-scope": "^5.0.0"
},
"dependencies": {
- "eslint-scope": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
- "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- }
- }
- },
- "@typescript-eslint/parser": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.7.0.tgz",
- "integrity": "sha512-ctC0g0ZvYclxMh/xI+tyqP0EC2fAo6KicN9Wm2EIao+8OppLfxji7KAGJosQHSGBj3TcqUrA96AjgXuKa5ob2g==",
- "dev": true,
- "requires": {
- "@types/eslint-visitor-keys": "^1.0.0",
- "@typescript-eslint/experimental-utils": "2.7.0",
- "@typescript-eslint/typescript-estree": "2.7.0",
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "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==",
+ "regexpp": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz",
+ "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==",
"dev": true
}
}
},
+ "@typescript-eslint/experimental-utils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.8.0.tgz",
+ "integrity": "sha512-jZ05E4SxCbbXseQGXOKf3ESKcsGxT8Ucpkp1jiVp55MGhOvZB2twmWKf894PAuVQTCgbPbJz9ZbRDqtUWzP8xA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.3",
+ "@typescript-eslint/typescript-estree": "2.8.0",
+ "eslint-scope": "^5.0.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.8.0.tgz",
+ "integrity": "sha512-NseXWzhkucq+JM2HgqAAoKEzGQMb5LuTRjFPLQzGIdLthXMNUfuiskbl7QSykvWW6mvzCtYbw1fYWGa2EIaekw==",
+ "dev": true,
+ "requires": {
+ "@types/eslint-visitor-keys": "^1.0.0",
+ "@typescript-eslint/experimental-utils": "2.8.0",
+ "@typescript-eslint/typescript-estree": "2.8.0",
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
"@typescript-eslint/typescript-estree": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.7.0.tgz",
- "integrity": "sha512-vVCE/DY72N4RiJ/2f10PTyYekX2OLaltuSIBqeHYI44GQ940VCYioInIb8jKMrK9u855OEJdFC+HmWAZTnC+Ag==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.8.0.tgz",
+ "integrity": "sha512-ksvjBDTdbAQ04cR5JyFSDX113k66FxH1tAXmi+dj6hufsl/G0eMc/f1GgLjEVPkYClDbRKv+rnBFuE5EusomUw==",
"dev": true,
"requires": {
"debug": "^4.1.1",
- "glob": "^7.1.4",
+ "eslint-visitor-keys": "^1.1.0",
+ "glob": "^7.1.6",
"is-glob": "^4.0.1",
"lodash.unescape": "4.0.1",
"semver": "^6.3.0",
@@ -1204,10 +1214,20 @@
}
}
},
+ "JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
"abab": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz",
- "integrity": "sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
+ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
"dev": true
},
"acorn": {
@@ -1246,6 +1266,12 @@
"integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
"dev": true
},
+ "add-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
+ "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
+ "dev": true
+ },
"ajv": {
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
@@ -1259,18 +1285,18 @@
}
},
"ansi-escapes": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz",
- "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz",
+ "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==",
"dev": true,
"requires": {
- "type-fest": "^0.5.2"
+ "type-fest": "^0.8.1"
}
},
"ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "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": {
@@ -1325,6 +1351,18 @@
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
"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-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+ "dev": true
+ },
"array-includes": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
@@ -1341,6 +1379,12 @@
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"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",
@@ -1529,6 +1573,12 @@
"tweetnacl": "^0.14.3"
}
},
+ "binary-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
+ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
+ "dev": true
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1592,14 +1642,23 @@
}
},
"browserslist": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.2.tgz",
- "integrity": "sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==",
+ "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.30001004",
- "electron-to-chromium": "^1.3.295",
- "node-releases": "^1.1.38"
+ "caniuse-lite": "^1.0.30001010",
+ "electron-to-chromium": "^1.3.306",
+ "node-releases": "^1.1.40"
+ }
+ },
+ "bs-logger": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
+ "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
+ "dev": true,
+ "requires": {
+ "fast-json-stable-stringify": "2.x"
}
},
"bser": {
@@ -1617,12 +1676,6 @@
"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
- },
"builtins": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/builtins/-/builtins-2.0.1.tgz",
@@ -1633,9 +1686,9 @@
},
"dependencies": {
"semver": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
- "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
}
}
@@ -1664,15 +1717,26 @@
"dev": true
},
"camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
},
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
"caniuse-lite": {
- "version": "1.0.30001008",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001008.tgz",
- "integrity": "sha512-b8DJyb+VVXZGRgJUa30cbk8gKHZ3LOZTBLaUEEVr2P4xpmFigOCc62CO4uzquW641Ouq1Rm9N+rWLWdSYDaDIw==",
+ "version": "1.0.30001011",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001011.tgz",
+ "integrity": "sha512-h+Eqyn/YA6o6ZTqpS86PyRmNWOs1r54EBDcd2NTwwfsXQ8re1B38SnB+p2RKF8OUsyEIjeDU8XGec1RGO/wYCg==",
"dev": true
},
"capture-exit": {
@@ -1707,6 +1771,80 @@
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true
},
+ "chokidar": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
+ "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.1",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.2.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "fsevents": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
+ "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==",
+ "dev": true,
+ "optional": 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
+ },
+ "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
+ },
+ "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"
+ }
+ }
+ }
+ },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
@@ -1828,11 +1966,26 @@
}
},
"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==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz",
+ "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"dev": true
},
+ "compare-func": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
+ "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+ "dev": true,
+ "requires": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^3.0.0"
+ }
+ },
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
@@ -1851,6 +2004,256 @@
"integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
"dev": true
},
+ "conventional-changelog": {
+ "version": "3.1.15",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.15.tgz",
+ "integrity": "sha512-CoWM+Z9bYyF00QzNpTnxkCLiuLAeRocJz3C/foFjvhsdltdtkJgMChp7GytQNjm4pT7JFBVJTpqLHTpxNtOzaA==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-angular": "^5.0.6",
+ "conventional-changelog-atom": "^2.0.3",
+ "conventional-changelog-codemirror": "^2.0.3",
+ "conventional-changelog-conventionalcommits": "^4.2.3",
+ "conventional-changelog-core": "^4.1.1",
+ "conventional-changelog-ember": "^2.0.4",
+ "conventional-changelog-eslint": "^3.0.4",
+ "conventional-changelog-express": "^2.0.1",
+ "conventional-changelog-jquery": "^3.0.6",
+ "conventional-changelog-jshint": "^2.0.3",
+ "conventional-changelog-preset-loader": "^2.3.0"
+ }
+ },
+ "conventional-changelog-angular": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz",
+ "integrity": "sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-atom": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.3.tgz",
+ "integrity": "sha512-szZe2ut97qNO6vCCMkm1I/tWu6ol4Rr8a9Lx0y/VlpDnpY0PNp+oGpFgU55lplhx+I3Lro9Iv4/gRj0knfgjzg==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-cli": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.28.tgz",
+ "integrity": "sha512-ioagYxYI4GGs3p5APfEgSqjK21Fwl0mTa05MkIH85R64MqtUvNygtjHZWoXtdpM29OONJzxrebWDSyNHX6Fssg==",
+ "dev": true,
+ "requires": {
+ "add-stream": "^1.0.0",
+ "conventional-changelog": "^3.1.15",
+ "lodash": "^4.17.15",
+ "meow": "^5.0.0",
+ "tempfile": "^3.0.0"
+ }
+ },
+ "conventional-changelog-codemirror": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.3.tgz",
+ "integrity": "sha512-t2afackdgFV2yBdHhWPqrKbpaQeVnz2hSJKdWqjasPo5EpIB6TBL0er3cOP1mnGQmuzk9JSvimNSuqjWGDtU5Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-conventionalcommits": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.3.tgz",
+ "integrity": "sha512-atGa+R4vvEhb8N/8v3IoW59gCBJeeFiX6uIbPu876ENAmkMwsenyn0R21kdDHJFLQdy6zW4J6b4xN8KI3b9oww==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "lodash": "^4.17.15",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-core": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.1.1.tgz",
+ "integrity": "sha512-fBre5P6U9n914Da6Cj82vIfRU2DhTLGr1eDPXWA7AamxTpd4cd0jgdS7Aieas5Vn5WXOJNFRDNl6PrYLEonImg==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-writer": "^4.0.11",
+ "conventional-commits-parser": "^3.0.8",
+ "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": "^3.0.1",
+ "lodash": "^4.17.15",
+ "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"
+ },
+ "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
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ }
+ }
+ },
+ "conventional-changelog-ember": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.4.tgz",
+ "integrity": "sha512-q1u73sO9uCnxN4TSw8xu6MRU8Y1h9kpwtcdJuNRwu/LSKI1IE/iuNSH5eQ6aLlQ3HTyrIpTfUuVybW4W0F17rA==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-eslint": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.4.tgz",
+ "integrity": "sha512-CPwTUENzhLGl3auunrJxiIEWncAGaby7gOFCdj2gslIuOFJ0KPJVOUhRz4Da/I53sdo/7UncUJkiLg94jEsjxg==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-express": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz",
+ "integrity": "sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-jquery": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.6.tgz",
+ "integrity": "sha512-gHAABCXUNA/HjnZEm+vxAfFPJkgtrZvCDIlCKfdPVXtCIo/Q0lN5VKpx8aR5p8KdVRQFF3OuTlvv5kv6iPuRqA==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-jshint": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.3.tgz",
+ "integrity": "sha512-Pc2PnMPcez634ckzr4EOWviwRSpZcURaK7bjyD9oK6N5fsC/a+3G7LW5m/JpcHPhA9ZxsfIbm7uqZ3ZDGsQ/sw==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-preset-loader": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz",
+ "integrity": "sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ==",
+ "dev": true
+ },
+ "conventional-changelog-writer": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz",
+ "integrity": "sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "conventional-commits-filter": "^2.0.2",
+ "dateformat": "^3.0.0",
+ "handlebars": "^4.4.0",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.17.15",
+ "meow": "^5.0.0",
+ "semver": "^6.0.0",
+ "split": "^1.0.0",
+ "through2": "^3.0.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
+ }
+ }
+ },
+ "conventional-commits-filter": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz",
+ "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==",
+ "dev": true,
+ "requires": {
+ "lodash.ismatch": "^4.4.0",
+ "modify-values": "^1.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz",
+ "integrity": "sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.4",
+ "is-text-path": "^1.0.1",
+ "lodash": "^4.17.15",
+ "meow": "^5.0.0",
+ "split2": "^2.0.0",
+ "through2": "^3.0.0",
+ "trim-off-newlines": "^1.0.0"
+ }
+ },
"convert-source-map": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
@@ -1867,12 +2270,12 @@
"dev": true
},
"core-js-compat": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.0.tgz",
- "integrity": "sha512-pgQUcgT2+v9/yxHgMynYjNj7nmxLRXv3UC39rjCjDwpe63ev2rioQTju1PKLYUBbPCQQvZNWvQC8tBJd65q11g==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.2.tgz",
+ "integrity": "sha512-W0Aj+LM3EAxxjD0Kp2o4be8UlnxIZHNupBv2znqrheR4aY2nOn91794k/xoSp+SxqqriiZpTsSwBtZr60cbkwQ==",
"dev": true,
"requires": {
- "browserslist": "^4.7.2",
+ "browserslist": "^4.7.3",
"semver": "^6.3.0"
},
"dependencies": {
@@ -1918,6 +2321,24 @@
"cssom": "0.3.x"
}
},
+ "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"
+ }
+ },
+ "dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -1951,6 +2372,12 @@
}
}
},
+ "dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
+ },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -1966,6 +2393,24 @@
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ }
+ }
+ },
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -1978,6 +2423,11 @@
"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=="
+ },
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -2034,6 +2484,12 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
+ "detect-indent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz",
+ "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==",
+ "dev": true
+ },
"detect-newline": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
@@ -2046,6 +2502,11 @@
"integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==",
"dev": true
},
+ "dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
"doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -2064,6 +2525,15 @@
"webidl-conversions": "^4.0.2"
}
},
+ "dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -2075,9 +2545,9 @@
}
},
"electron-to-chromium": {
- "version": "1.3.306",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.306.tgz",
- "integrity": "sha512-frDqXvrIROoYvikSKTIKbHbzO6M3/qC6kCIt/1FOa9kALe++c4VAJnwjSFvf1tYLEUsP2n9XZ4XSCyqc3l7A/A==",
+ "version": "1.3.312",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.312.tgz",
+ "integrity": "sha512-/Nk6Hvwt+RfS9X3oA4IXpWqpcnS7cdWsTMP4AmrP8hPpxtZbHemvTEYzjAKghk28aS9zIV8NwGHNt8H+6OmJug==",
"dev": true
},
"emoji-regex": {
@@ -2105,23 +2575,27 @@
}
},
"es-abstract": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
- "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
+ "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
"dev": true,
"requires": {
"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-keys": "^1.0.12"
+ "object-inspect": "^1.6.0",
+ "object-keys": "^1.1.1",
+ "string.prototype.trimleft": "^2.1.0",
+ "string.prototype.trimright": "^2.1.0"
}
},
"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==",
+ "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",
@@ -2237,6 +2711,14 @@
"dev": true,
"requires": {
"get-stdin": "^6.0.0"
+ },
+ "dependencies": {
+ "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
+ }
}
},
"eslint-import-resolver-node": {
@@ -2497,14 +2979,6 @@
"dev": true,
"requires": {
"eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "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
- }
}
},
"eslint-visitor-keys": {
@@ -2549,21 +3023,20 @@
}
},
"estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "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
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.9.0.tgz",
+ "integrity": "sha512-12U47o7XHUX329+x3FzNVjCx3SHEzMF0nkDv7r/HnBzX/xNTKxajBk6gyygaxrAFtLj39219oMfbtxv4KpaOiA=="
},
"esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"exec-sh": {
@@ -2790,6 +3263,11 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
+ "fast-memoize": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.1.tgz",
+ "integrity": "sha512-xdmw296PCL01tMOXx9mdJSmWY29jQgxyuZdq0rEHMu+Tpe1eOEtCycoG6chzlcrWsNgpZP7oL8RiQr7+G6Bl6g=="
+ },
"fb-watchman": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
@@ -2840,6 +3318,77 @@
}
}
},
+ "find-cache-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.1.0.tgz",
+ "integrity": "sha512-zw+EFiNBNPgI2NTrKkDd1xd7q0cs6wr/iWnr/oUkI0yF9K9GqQ+riIt4aiyFaaqpaWbxPrJXHI+QvmNUQbX+0Q==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.0",
+ "pkg-dir": "^4.1.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"
+ }
+ },
+ "make-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz",
+ "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.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"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
@@ -2898,560 +3447,23 @@
"map-cache": "^0.2.2"
}
},
+ "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"
+ }
+ },
"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.9",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
- "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.12.1",
- "node-pre-gyp": "^0.12.0"
- },
- "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.1",
- "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": "4.1.1",
- "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.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.3",
- "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.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,
- "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.3.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.2.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^4.1.0",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.12.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"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.1",
- "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.0",
- "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.6.3",
- "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.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,
- "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.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.3.4",
- "minizlib": "^1.1.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.2"
- }
- },
- "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.0.3",
- "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",
@@ -3470,10 +3482,197 @@
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
+ "get-pkg-repo": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
+ "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+ "dev": true,
+ "requires": {
+ "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"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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-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"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
"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==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true
},
"get-stream": {
@@ -3500,10 +3699,150 @@
"assert-plus": "^1.0.0"
}
},
+ "git-raw-commits": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz",
+ "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==",
+ "dev": true,
+ "requires": {
+ "dargs": "^4.0.1",
+ "lodash.template": "^4.0.2",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^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"
+ }
+ },
+ "meow": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "dev": true,
+ "requires": {
+ "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"
+ }
+ },
+ "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
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "git-remote-origin-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+ "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+ "dev": true,
+ "requires": {
+ "gitconfiglocal": "^1.0.0",
+ "pify": "^2.3.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "git-semver-tags": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-3.0.1.tgz",
+ "integrity": "sha512-Hzd1MOHXouITfCasrpVJbRDg9uvW7LfABk3GQmXYZByerBDrfrEMP9HXpNT7RxAbieiocP6u+xq20DkvjwxnCA==",
+ "dev": true,
+ "requires": {
+ "meow": "^5.0.0",
+ "semver": "^6.0.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
+ }
+ }
+ },
+ "gitconfiglocal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+ "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.2"
+ }
+ },
"glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "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",
@@ -3529,10 +3868,20 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
+ "globalyzer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz",
+ "integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA=="
+ },
+ "globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
+ },
"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==",
+ "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
},
"growly": {
@@ -3542,9 +3891,9 @@
"dev": true
},
"handlebars": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.1.tgz",
- "integrity": "sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==",
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz",
+ "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==",
"dev": true,
"requires": {
"neo-async": "^2.6.0",
@@ -3593,9 +3942,9 @@
"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=",
+ "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": {
@@ -3631,9 +3980,9 @@
}
},
"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==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
+ "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
"dev": true
},
"html-encoding-sniffer": {
@@ -3672,9 +4021,9 @@
"dev": true
},
"import-fresh": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
- "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+ "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",
@@ -3708,6 +4057,12 @@
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -3719,9 +4074,15 @@
}
},
"inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "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": {
@@ -3746,9 +4107,9 @@
}
},
"intl-format-cache": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-4.2.6.tgz",
- "integrity": "sha512-2iNv1haP8ExnejLleEJuJi1OLUtclz+lnryKhDPyw3pRhCqYK6imhFEGllXYTzTow1N22wl8M76oNMyCEDylAA=="
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-4.2.9.tgz",
+ "integrity": "sha512-0Paz4oGaqwbBoMOClmj+bE6E63hG1nmXItJ8qLADF1LXH2SGnaLKgUCsxacLhr9k1VgHUJzlXREvQHIGyDDjNg=="
},
"intl-messageformat": {
"version": "7.5.2",
@@ -3760,9 +4121,9 @@
}
},
"intl-messageformat-parser": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-3.2.2.tgz",
- "integrity": "sha512-ax9639ST77YimAddTH/0Q9qhXuYS8ZVsoqOZinqnS90MbXaNuIq+KIdifaIndwI+lMEv3o+qNaGycXYvlh17rw=="
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-3.2.5.tgz",
+ "integrity": "sha512-cn2HgNCF1q9HCJxzpmFIWWADQWS/fG/UtAE7H8SVT79NOfNFiQnEQHokzA0UpvWv73jowFavMCvToPFRCf6zaQ=="
},
"invariant": {
"version": "2.2.4",
@@ -3799,6 +4160,15 @@
"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",
@@ -3877,6 +4247,15 @@
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"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": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -3898,12 +4277,6 @@
"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-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -3924,6 +4297,18 @@
}
}
},
+ "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-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-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -3964,12 +4349,21 @@
"dev": true
},
"is-symbol": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
- "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "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.0"
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "dev": true,
+ "requires": {
+ "text-extensions": "^1.0.0"
}
},
"is-typedarray": {
@@ -3978,6 +4372,12 @@
"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",
@@ -4249,6 +4649,556 @@
"micromatch": "^3.1.10",
"sane": "^4.0.3",
"walker": "^1.0.7"
+ },
+ "dependencies": {
+ "fsevents": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.12.1",
+ "node-pre-gyp": "^0.12.0"
+ },
+ "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.1",
+ "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": "4.1.1",
+ "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.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.3",
+ "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.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,
+ "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.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.3.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.12.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"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.1",
+ "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.0",
+ "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.6.3",
+ "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.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,
+ "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.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "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.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ }
}
},
"jest-jasmine2": {
@@ -4491,6 +5441,14 @@
"jest-get-type": "^24.9.0",
"leven": "^3.1.0",
"pretty-format": "^24.9.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
}
},
"jest-watcher": {
@@ -4652,6 +5610,21 @@
"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"
+ }
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -4726,12 +5699,49 @@
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
"dev": true
},
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash.ismatch": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
+ "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=",
+ "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.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
"dev": true
},
+ "lodash.template": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
"lodash.unescape": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
@@ -4747,6 +5757,16 @@
"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"
+ }
+ },
"magic-string": {
"version": "0.25.4",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.4.tgz",
@@ -4774,6 +5794,12 @@
}
}
},
+ "make-error": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
+ "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
+ "dev": true
+ },
"makeerror": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
@@ -4789,6 +5815,12 @@
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
"dev": true
},
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
"map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
@@ -4798,17 +5830,90 @@
"object-visit": "^1.0.0"
}
},
+ "memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+ "dev": true
+ },
+ "meow": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
+ "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
+ "dev": true,
+ "requires": {
+ "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"
+ },
+ "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
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ }
+ }
+ },
"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
},
- "micro-memoize": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.0.8.tgz",
- "integrity": "sha512-Mzlo15iWNrP5EwokGjx0Wlh2b3aMjTPdpsD+ryQtkYJBD67IxBddWU2fO3MIXRtXDH8NsuhaotTrtDbfb+k6jw=="
- },
"micromatch": {
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -4831,18 +5936,18 @@
}
},
"mime-db": {
- "version": "1.40.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
- "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
+ "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.24",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
- "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "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.40.0"
+ "mime-db": "1.42.0"
}
},
"mimic-fn": {
@@ -4866,6 +5971,16 @@
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -4904,6 +6019,12 @@
}
}
},
+ "modify-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+ "dev": true
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -4986,9 +6107,9 @@
}
},
"node-releases": {
- "version": "1.1.39",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.39.tgz",
- "integrity": "sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA==",
+ "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"
@@ -5023,6 +6144,23 @@
"remove-trailing-separator": "^1.0.1"
}
},
+ "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",
@@ -5032,6 +6170,12 @@
"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.2.0",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
@@ -5044,6 +6188,12 @@
"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",
@@ -5075,17 +6225,18 @@
}
}
},
+ "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-resolve-path": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-resolve-path/-/object-resolve-path-1.1.1.tgz",
- "integrity": "sha1-p/j5Poogr4DkQhe6fbVDFtnRIjI="
- },
"object-visit": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
@@ -5248,6 +6399,12 @@
"callsites": "^3.0.0"
}
},
+ "parse-github-repo-url": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+ "dev": true
+ },
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
@@ -5309,12 +6466,39 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
+ "picomatch": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz",
+ "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==",
+ "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": "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"
+ }
+ },
"pirates": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
@@ -5421,14 +6605,6 @@
"ansi-regex": "^4.0.0",
"ansi-styles": "^3.2.0",
"react-is": "^16.8.4"
- },
- "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
- }
}
},
"private": {
@@ -5437,6 +6613,12 @@
"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",
@@ -5475,16 +6657,28 @@
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "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
},
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
"react-is": {
- "version": "16.11.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz",
- "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==",
+ "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": {
@@ -5508,6 +6702,30 @@
"read-pkg": "^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"
+ }
+ },
+ "readdirp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
+ "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.0.4"
+ }
+ },
"realpath-native": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
@@ -5517,6 +6735,16 @@
"util.promisify": "^1.0.0"
}
},
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
"regenerate": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
@@ -5612,6 +6840,15 @@
"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",
@@ -5691,9 +6928,9 @@
"dev": true
},
"resolve": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.2.tgz",
+ "integrity": "sha512-cAVTI2VLHWYsGOirfeYVVQ7ZDejtQ9fp4YhYckWDEkFfqbVjaT11iM8k6xSAfGFMM+gDpZjMnFssPu8we+mqFw==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
@@ -5754,9 +6991,9 @@
}
},
"rollup": {
- "version": "1.26.5",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.26.5.tgz",
- "integrity": "sha512-c6Pv0yWzjYNpy2DIhLFUnyP6e1UTGownr4IfpJcPY/k186RJjpaGGPRwKQ62KCauctG6dgtHt88pw1EGrPRkuA==",
+ "version": "1.27.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.2.tgz",
+ "integrity": "sha512-sD3iyd0zlvgK1S3MmICi6F/Y+R/QWY5XxzsTGN4pAd+nCasDUizmAhgq2hdh1t2eLux974NHU2TW41fhuGPv+Q==",
"dev": true,
"requires": {
"@types/estree": "*",
@@ -5787,19 +7024,14 @@
"magic-string": "^0.25.2",
"resolve": "^1.11.0",
"rollup-pluginutils": "^2.8.1"
- }
- },
- "rollup-plugin-node-resolve": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz",
- "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==",
- "dev": true,
- "requires": {
- "@types/resolve": "0.0.8",
- "builtin-modules": "^3.1.0",
- "is-module": "^1.0.0",
- "resolve": "^1.11.1",
- "rollup-pluginutils": "^2.8.1"
+ },
+ "dependencies": {
+ "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
+ }
}
},
"rollup-plugin-terser": {
@@ -5815,6 +7047,45 @@
"terser": "^4.1.0"
}
},
+ "rollup-plugin-typescript2": {
+ "version": "0.25.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.25.2.tgz",
+ "integrity": "sha512-+tpZj/ZIf2lwjyjX6xEW1S5Y38/21TB3p6poLodISIia8owMMfIKuFFnWcESE4FPBHkR8XPKqjY0PH9IUJJK+Q==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^3.0.0",
+ "fs-extra": "8.1.0",
+ "resolve": "1.12.0",
+ "rollup-pluginutils": "2.8.1",
+ "tslib": "1.10.0"
+ },
+ "dependencies": {
+ "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
+ },
+ "resolve": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+ "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz",
+ "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.6.1"
+ }
+ }
+ }
+ },
"rollup-pluginutils": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
@@ -5822,6 +7093,14 @@
"dev": true,
"requires": {
"estree-walker": "^0.6.1"
+ },
+ "dependencies": {
+ "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
+ }
}
},
"rsvp": {
@@ -5892,6 +7171,15 @@
"walker": "~1.0.5"
}
},
+ "sass": {
+ "version": "1.23.6",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.23.6.tgz",
+ "integrity": "sha512-awBvj9xrAuiS2TOCcYSUGCmaBV3UW6fVSK4oJ2LHS8IRfnRLc5EJihw90C7ZJ/skcEwFGSf9/XO5NlMiKupBCg==",
+ "dev": true,
+ "requires": {
+ "chokidar": ">=2.0.0 <4.0.0"
+ }
+ },
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@@ -5899,9 +7187,9 @@
"dev": true
},
"semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"serialize-javascript": {
@@ -5954,6 +7242,12 @@
"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
+ },
"shellwords": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
@@ -6195,11 +7489,20 @@
}
},
"spdx-license-ids": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
- "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==",
+ "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": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
"split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -6209,6 +7512,27 @@
"extend-shallow": "^3.0.0"
}
},
+ "split2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.2"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -6303,6 +7627,12 @@
"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
+ },
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -6314,6 +7644,46 @@
}
}
},
+ "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.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_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": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -6321,14 +7691,6 @@
"dev": true,
"requires": {
"ansi-regex": "^4.1.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
- }
}
},
"strip-bom": {
@@ -6343,6 +7705,12 @@
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
"strip-json-comments": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
@@ -6359,11 +7727,23 @@
}
},
"svelte": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.14.0.tgz",
- "integrity": "sha512-BYUxQpkS5fODrQyVVRea8ws2mXJXonwrFVjPjaVQuBPSRtidzn55PsuXJHvAZHHpi+vxBZi/Bimrs7exADX7pA==",
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.15.0.tgz",
+ "integrity": "sha512-OL9FIdUAmVTXR38cB/2vQQ9xWvW/7IuOASjWMfwRAB5NXywLW4Xqhblouan4odjI0S/JFGsytkgp7jelWpFgSA==",
"dev": true
},
+ "svelte-preprocess": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-3.2.6.tgz",
+ "integrity": "sha512-gtZJBW1i8HuXPqI3Qdgwln4CX62L/2mbKiHZEeVNpV/oSYkF4uXWQKYSv1txivbB2pVJIBzp2VmDUxviHd6pxA==",
+ "dev": true,
+ "requires": {
+ "@types/pug": "^2.0.4",
+ "@types/sass": "^1.16.0",
+ "detect-indent": "^6.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
"symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
@@ -6407,6 +7787,22 @@
}
}
},
+ "temp-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
+ "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
+ "dev": true
+ },
+ "tempfile": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-3.0.0.tgz",
+ "integrity": "sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==",
+ "dev": true,
+ "requires": {
+ "temp-dir": "^2.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
"terser": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-4.4.0.tgz",
@@ -6418,6 +7814,12 @@
"source-map-support": "~0.5.12"
},
"dependencies": {
+ "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
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -6438,6 +7840,12 @@
"require-main-filename": "^2.0.0"
}
},
+ "text-extensions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
+ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
+ "dev": true
+ },
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -6456,6 +7864,24 @@
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+ "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2 || 3"
+ }
+ },
+ "tiny-glob": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.6.tgz",
+ "integrity": "sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw==",
+ "requires": {
+ "globalyzer": "^0.1.0",
+ "globrex": "^0.1.1"
+ }
+ },
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -6538,6 +7964,36 @@
"punycode": "^2.1.0"
}
},
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "trim-off-newlines": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
+ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
+ "dev": true
+ },
+ "ts-jest": {
+ "version": "24.1.0",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.1.0.tgz",
+ "integrity": "sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ==",
+ "dev": true,
+ "requires": {
+ "bs-logger": "0.x",
+ "buffer-from": "1.x",
+ "fast-json-stable-stringify": "2.x",
+ "json5": "2.x",
+ "lodash.memoize": "4.x",
+ "make-error": "1.x",
+ "mkdirp": "0.x",
+ "resolve": "1.x",
+ "semver": "^5.5",
+ "yargs-parser": "10.x"
+ }
+ },
"tslib": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
@@ -6578,15 +8034,21 @@
}
},
"type-fest": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
- "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==",
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ },
+ "typescript": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz",
+ "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==",
"dev": true
},
"uglify-js": {
- "version": "3.6.8",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.8.tgz",
- "integrity": "sha512-XhHJ3S3ZyMwP8kY1Gkugqx3CJh2C3O0y8NPiSxtm1tyD/pktLAkFZsFGpuNfTZddKDQ/bbDBLAd2YyA1pbi8HQ==",
+ "version": "3.6.9",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.9.tgz",
+ "integrity": "sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw==",
"dev": true,
"optional": true,
"requires": {
@@ -6594,6 +8056,13 @@
"source-map": "~0.6.1"
},
"dependencies": {
+ "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,
+ "optional": true
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -6643,6 +8112,12 @@
"set-value": "^2.0.1"
}
},
+ "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
+ },
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -6704,6 +8179,12 @@
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"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.0",
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
@@ -6901,6 +8382,12 @@
"integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
"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",
@@ -6925,6 +8412,12 @@
"yargs-parser": "^13.1.1"
},
"dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
@@ -6947,17 +8440,26 @@
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
+ },
+ "yargs-parser": {
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+ "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
"yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
"dev": true,
"requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
+ "camelcase": "^4.1.0"
}
}
}
diff --git a/package.json b/package.json
index 011ddae..982a3ce 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,19 @@
{
"name": "svelte-i18n",
+<<<<<<< HEAD
+ "version": "2.1.0",
+=======
"version": "1.1.2",
+>>>>>>> master
"main": "dist/i18n.js",
"module": "dist/i18n.mjs",
+ "bin": {
+ "svelte-i18n": "dist/cli.js"
+ },
"license": "MIT",
"description": "Internationalization library for Svelte",
"author": "Christian Kaisermann ",
- "repository": "https://github.com/kaisermann",
+ "repository": "https://github.com/kaisermann/svelte-i18n",
"keywords": [
"svelte",
"i18n",
@@ -14,67 +21,82 @@
"localization",
"translation"
],
+ "engines": {
+ "node": ">= 11.15.0"
+ },
"scripts": {
"build": "rollup -c",
"dev": "rollup -c -w",
"pretest": "npm run build",
+<<<<<<< HEAD
+ "test": "jest",
+ "test:ci": "jest --silent",
+ "test:watch": "jest --verbose --watchAll",
+ "lint": "eslint \"src/**/*.ts\"",
+ "format": "prettier --loglevel silent --write \"src/**/*.ts\" && eslint --fix \"src/**/*.ts\"",
+ "prerelease": "conventional-changelog -p angular -i CHANGELOG.md -s -r 1 && git add CHANGELOG.md",
+ "release": " git add package.json && git commit -m \"chore(release): v$npm_package_version :tada:\"",
+ "postrelease": "git tag -a v$npm_package_version -m 'Release v$npm_package_version'",
+ "prepublishOnly": "run-s test:ci build release"
+=======
"test": "jest --no-cache --verbose",
"test:watch": "jest --no-cache --verbose --watchAll",
"test:ci": "jest --no-cache --silent",
"lint": "eslint \"src/**/*.js\"",
"format": "prettier --loglevel silent --write \"src/**/*.js\" && eslint --fix \"src/**/*.js\"",
"prepublishOnly": "npm run format && npm run test && npm run build"
+>>>>>>> master
},
"files": [
- "dist/",
- "src/"
+ "dist/"
],
"jest": {
- "verbose": true,
- "testURL": "http://localhost/",
+ "collectCoverage": true,
+ "testMatch": [
+ "/test/**/*.test.ts"
+ ],
+ "collectCoverageFrom": [
+ "/src/**/*.ts"
+ ],
"transform": {
- "^.+\\.jsx?$": "babel-jest"
- },
- "testRegex": "(/test/.*|\\.(test|spec))\\.js$",
- "moduleFileExtensions": [
- "js"
- ],
- "coveragePathIgnorePatterns": [
- "/node_modules/",
- "/test/"
- ],
- "coverageThreshold": {
- "global": {
- "branches": 90,
- "functions": 95,
- "lines": 95,
- "statements": 95
- }
- },
- "collectCoverage": false
+ "^.+\\.tsx?$": "ts-jest"
+ }
+ },
+ "peerDependencies": {
+ "svelte": "^3.14.1"
},
"devDependencies": {
"@babel/core": "^7.7.2",
"@babel/preset-env": "^7.7.1",
+ "@types/estree": "0.0.39",
+ "@types/intl": "^1.2.0",
+ "@types/jest": "^24.0.23",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^24.9.0",
+ "conventional-changelog-cli": "^2.0.28",
"eslint": "^6.6.0",
"eslint-config-kaisermann": "0.0.3",
"jest": "^24.9.0",
+ "npm-run-all": "^4.1.5",
"prettier": "^1.19.1",
"rollup": "^1.26.5",
"rollup-plugin-auto-external": "^2.0.0",
"rollup-plugin-commonjs": "^10.1.0",
- "rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-terser": "^5.1.2",
- "svelte": "^3.14.0"
- },
- "peerDependencies": {
- "svelte": "^3.14.0"
+ "rollup-plugin-typescript2": "^0.25.2",
+ "sass": "^1.23.6",
+ "svelte": "^3.14.1",
+ "svelte-preprocess": "^3.2.6",
+ "ts-jest": "^24.1.0",
+ "typescript": "^3.7.2"
},
"dependencies": {
+ "commander": "^4.0.1",
+ "deepmerge": "^4.2.2",
+ "dlv": "^1.1.3",
+ "estree-walker": "^0.9.0",
+ "fast-memoize": "^2.5.1",
"intl-messageformat": "^7.5.2",
- "micro-memoize": "^4.0.8",
- "object-resolve-path": "^1.1.1"
+ "tiny-glob": "^0.2.6"
}
}
diff --git a/rollup.config.js b/rollup.config.js
index 233789f..5500583 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -1,19 +1,41 @@
-import resolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs'
+import ts from 'rollup-plugin-typescript2'
import { terser } from 'rollup-plugin-terser'
+import autoExternal from 'rollup-plugin-auto-external'
import pkg from './package.json'
-const plugins = [resolve(), commonjs(), terser()]
+const PROD = !process.env.ROLLUP_WATCH
export default [
{
- input: 'src/index.js',
- external: [...Object.keys(pkg.dependencies), 'svelte/store'],
+ input: 'src/client/index.ts',
+ external: [
+ ...Object.keys(pkg.dependencies),
+ ...Object.keys(pkg.peerDependencies),
+ 'svelte/store',
+ ],
output: [
{ file: pkg.module, format: 'es' },
{ file: pkg.main, format: 'cjs' },
],
- plugins,
+ plugins: [commonjs(), autoExternal(), ts(), PROD && terser()],
+ },
+ {
+ input: 'src/cli/index.ts',
+
+ // external: id => {
+ // if (id.startsWith('/')) return false
+ // return externals.has(id) || id.match(/svelte/gi)
+ // },
+ output: [
+ {
+ file: pkg.bin['svelte-i18n'],
+ name: 'cli.js',
+ format: 'cjs',
+ banner: `#!/usr/bin/env node`,
+ },
+ ],
+ plugins: [autoExternal(), commonjs(), ts(), PROD && terser()],
},
]
diff --git a/src/cli/extract.ts b/src/cli/extract.ts
new file mode 100644
index 0000000..cdefadd
--- /dev/null
+++ b/src/cli/extract.ts
@@ -0,0 +1,184 @@
+import {
+ Node,
+ ObjectExpression,
+ ImportDeclaration,
+ ImportSpecifier,
+ CallExpression,
+ Identifier,
+ Literal,
+} from 'estree'
+import delve from 'dlv'
+import { walk } from 'estree-walker'
+import { Ast } from 'svelte/types/compiler/interfaces'
+import { parse } from 'svelte/compiler'
+
+import { deepSet } from './includes/deepSet'
+import { getObjFromExpression } from './includes/getObjFromExpression'
+import { Message } from './types'
+
+const LIB_NAME = 'svelte-i18n'
+const DEFINE_MESSAGES_METHOD_NAME = 'defineMessages'
+const FORMAT_METHOD_NAMES = new Set(['format', '_', 't'])
+const IGNORED_UTILITIES = new Set(['number', 'date', 'time'])
+
+function isFormatCall(node: Node, imports: Set) {
+ if (node.type !== 'CallExpression') return false
+
+ let identifier: Identifier
+ if (
+ node.callee.type === 'MemberExpression' &&
+ node.callee.property.type === 'Identifier' &&
+ !IGNORED_UTILITIES.has(node.callee.property.name)
+ ) {
+ identifier = node.callee.object as Identifier
+ } else if (node.callee.type === 'Identifier') {
+ identifier = node.callee
+ }
+ if (!identifier || identifier.type !== 'Identifier') {
+ return false
+ }
+
+ const methodName = identifier.name.slice(1)
+ return imports.has(methodName)
+}
+
+function isMessagesDefinitionCall(node: Node, methodName: string) {
+ if (node.type !== 'CallExpression') return false
+
+ return (
+ node.callee &&
+ node.callee.type === 'Identifier' &&
+ node.callee.name === methodName
+ )
+}
+
+function getLibImportDeclarations(ast: Ast) {
+ return (ast.instance
+ ? ast.instance.content.body.filter(
+ node =>
+ node.type === 'ImportDeclaration' && node.source.value === LIB_NAME
+ )
+ : []) as ImportDeclaration[]
+}
+
+function getDefineMessagesSpecifier(decl: ImportDeclaration) {
+ return decl.specifiers.find(
+ spec =>
+ 'imported' in spec && spec.imported.name === DEFINE_MESSAGES_METHOD_NAME
+ ) as ImportSpecifier
+}
+
+function getFormatSpecifiers(decl: ImportDeclaration) {
+ return decl.specifiers.filter(
+ spec => 'imported' in spec && FORMAT_METHOD_NAMES.has(spec.imported.name)
+ ) as ImportSpecifier[]
+}
+
+export function collectFormatCalls(ast: Ast) {
+ const importDecls = getLibImportDeclarations(ast)
+
+ if (importDecls.length === 0) return []
+
+ const imports = new Set(
+ importDecls.flatMap(decl =>
+ getFormatSpecifiers(decl).map(n => n.local.name)
+ )
+ )
+
+ if (imports.size === 0) return []
+
+ const calls: CallExpression[] = []
+ function enter(node: Node) {
+ if (isFormatCall(node, imports)) {
+ calls.push(node as CallExpression)
+ this.skip()
+ }
+ }
+ walk(ast.instance as any, { enter })
+ walk(ast.html as any, { enter })
+
+ return calls
+}
+
+export function collectMessageDefinitions(ast: Ast) {
+ const definitions: ObjectExpression[] = []
+ const defineImportDecl = getLibImportDeclarations(ast).find(
+ getDefineMessagesSpecifier
+ )
+
+ if (defineImportDecl == null) return []
+
+ const defineMethodName = getDefineMessagesSpecifier(defineImportDecl).local
+ .name
+
+ walk(ast.instance as any, {
+ enter(node: Node) {
+ if (isMessagesDefinitionCall(node, defineMethodName) === false) return
+ const [arg] = (node as CallExpression).arguments
+ if (arg.type === 'ObjectExpression') {
+ definitions.push(arg)
+ this.skip()
+ }
+ },
+ })
+
+ return definitions.flatMap(definitionDict =>
+ definitionDict.properties.map(
+ propNode => propNode.value as ObjectExpression
+ )
+ )
+}
+
+export function collectMessages(markup: string): Message[] {
+ const ast = parse(markup)
+ const calls = collectFormatCalls(ast)
+ const definitions = collectMessageDefinitions(ast)
+ return [
+ ...definitions.map(definition => getObjFromExpression(definition)),
+ ...calls.map(call => {
+ const [pathNode, options] = call.arguments
+ if (pathNode.type === 'ObjectExpression') {
+ return getObjFromExpression(pathNode)
+ }
+
+ const node = pathNode as Literal
+ const id = node.value as string
+
+ if (options && options.type === 'ObjectExpression') {
+ const messageObj = getObjFromExpression(options)
+ messageObj.meta.id = id
+ return messageObj
+ }
+
+ return { node, meta: { id } }
+ }),
+ ].filter(Boolean)
+}
+
+export function extractMessages(
+ markup: string,
+ { accumulator = {}, shallow = false, overwrite = false } = {} as any
+) {
+ collectMessages(markup).forEach(message => {
+ let defaultValue = message.meta.default
+ if (typeof defaultValue === 'undefined') {
+ defaultValue = ''
+ }
+
+ if (shallow) {
+ if (overwrite === false && message.meta.id in accumulator) {
+ return
+ }
+ accumulator[message.meta.id] = defaultValue
+ } else {
+ if (
+ overwrite === false &&
+ typeof delve(accumulator, message.meta.id) !== 'undefined'
+ ) {
+ return
+ }
+ deepSet(accumulator, message.meta.id, defaultValue)
+ }
+ })
+ return accumulator
+}
diff --git a/src/cli/includes/deepSet.ts b/src/cli/includes/deepSet.ts
new file mode 100644
index 0000000..d4517e8
--- /dev/null
+++ b/src/cli/includes/deepSet.ts
@@ -0,0 +1,17 @@
+const isNumberString = (n: string) => !Number.isNaN(parseInt(n))
+
+export function deepSet(obj: any, path: string, value: any) {
+ const parts = path.replace(/\[(\w+)\]/gi, '.$1').split('.')
+ return parts.reduce((ref, part, i) => {
+ if (part in ref) return (ref = ref[part])
+
+ if (i < parts.length - 1) {
+ if (isNumberString(parts[i + 1])) {
+ return (ref = ref[part] = [])
+ }
+ return (ref = ref[part] = {})
+ }
+
+ return (ref[part] = value)
+ }, obj)
+}
diff --git a/src/cli/includes/getObjFromExpression.ts b/src/cli/includes/getObjFromExpression.ts
new file mode 100644
index 0000000..0bf435c
--- /dev/null
+++ b/src/cli/includes/getObjFromExpression.ts
@@ -0,0 +1,20 @@
+import { ObjectExpression, Property, Identifier } from 'estree'
+
+import { Message } from '../types'
+
+export function getObjFromExpression(exprNode: ObjectExpression) {
+ return exprNode.properties.reduce(
+ (acc, prop: Property) => {
+ // we only want primitives
+ if (
+ prop.value.type === 'Literal' &&
+ prop.value.value !== Object(prop.value.value)
+ ) {
+ const key = (prop.key as Identifier).name as string
+ acc.meta[key] = prop.value.value
+ }
+ return acc
+ },
+ { node: exprNode, meta: {} }
+ )
+}
diff --git a/src/cli/index.ts b/src/cli/index.ts
new file mode 100644
index 0000000..70133f1
--- /dev/null
+++ b/src/cli/index.ts
@@ -0,0 +1,73 @@
+import fs from 'fs'
+import { dirname, resolve } from 'path'
+
+import program from 'commander'
+import glob from 'tiny-glob'
+import { preprocess } from 'svelte/compiler'
+
+import { extractMessages } from './extract'
+
+const { readFile, writeFile, mkdir, access } = fs.promises
+
+const fileExists = (path: string) =>
+ access(path)
+ .then(() => true)
+ .catch(() => false)
+
+program
+ .command('extract [output]')
+ .description('extract all message definitions from files to a json')
+ .option(
+ '-s, --shallow',
+ 'extract to a shallow dictionary (ids with dots interpreted as strings, not paths)',
+ false
+ )
+ .option(
+ '--overwrite',
+ 'overwrite the content of the output file instead of just appending new properties',
+ false
+ )
+ .option(
+ '-c, --config ',
+ 'path to the "svelte.config.js" file',
+ process.cwd()
+ )
+ .action(async (globStr, output, { shallow, overwrite, config }) => {
+ const filesToExtract = (await glob(globStr)).filter(file =>
+ file.match(/\.html|svelte$/i)
+ )
+ const svelteConfig = await import(
+ resolve(config, 'svelte.config.js')
+ ).catch(() => null)
+
+ let accumulator = {}
+ if (output != null && overwrite === false && (await fileExists(output))) {
+ accumulator = await readFile(output)
+ .then(file => JSON.parse(file.toString()))
+ .catch((e: Error) => {
+ console.warn(e)
+ accumulator = {}
+ })
+ }
+
+ for await (const filePath of filesToExtract) {
+ const buffer = await readFile(filePath)
+ let content = buffer.toString()
+
+ if (svelteConfig && svelteConfig.preprocess) {
+ const processed = await preprocess(content, svelteConfig.preprocess, {
+ filename: filePath,
+ })
+ content = processed.code
+ }
+ extractMessages(content, { accumulator, shallow })
+ }
+
+ const jsonDictionary = JSON.stringify(accumulator, null, ' ')
+ if (output == null) return console.log(jsonDictionary)
+
+ await mkdir(dirname(output), { recursive: true })
+ await writeFile(output, jsonDictionary)
+ })
+
+program.parse(process.argv)
diff --git a/src/cli/types/index.ts b/src/cli/types/index.ts
new file mode 100644
index 0000000..9291827
--- /dev/null
+++ b/src/cli/types/index.ts
@@ -0,0 +1,10 @@
+import { Node } from 'estree'
+
+export interface Message {
+ node: Node
+ meta: {
+ id?: string
+ default?: string
+ [key: string]: any
+ }
+}
diff --git a/src/client/configs.ts b/src/client/configs.ts
new file mode 100644
index 0000000..d15a0d8
--- /dev/null
+++ b/src/client/configs.ts
@@ -0,0 +1,87 @@
+import { getClientLocale } from './includes/utils'
+import { ConfigureOptions } from './types'
+import { $locale } from './stores/locale'
+
+interface Formats {
+ number: Record
+ date: Record
+ time: Record
+}
+
+interface Options {
+ fallbackLocale: string
+ initialLocale: string
+ formats: Formats
+ loadingDelay: number
+ warnOnMissingMessages: boolean
+}
+
+export const defaultFormats: Formats = {
+ number: {
+ scientific: { notation: 'scientific' },
+ engineering: { notation: 'engineering' },
+ compactLong: { notation: 'compact', compactDisplay: 'long' },
+ compactShort: { notation: 'compact', compactDisplay: 'short' },
+ },
+ date: {
+ short: { month: 'numeric', day: 'numeric', year: '2-digit' },
+ medium: { month: 'short', day: 'numeric', year: 'numeric' },
+ long: { month: 'long', day: 'numeric', year: 'numeric' },
+ full: { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' },
+ },
+ time: {
+ short: { hour: 'numeric', minute: 'numeric' },
+ medium: { hour: 'numeric', minute: 'numeric', second: 'numeric' },
+ long: {
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ timeZoneName: 'short',
+ },
+ full: {
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ timeZoneName: 'short',
+ },
+ },
+}
+
+export const defaultOptions: Options = {
+ fallbackLocale: null,
+ initialLocale: null,
+ loadingDelay: 200,
+ formats: defaultFormats,
+ warnOnMissingMessages: true,
+}
+
+const options: Options = defaultOptions
+
+export function getOptions() {
+ return options
+}
+
+export function init(opts: ConfigureOptions) {
+ const { formats, ...rest } = opts
+ const initialLocale = opts.initialLocale
+ ? typeof opts.initialLocale === 'string'
+ ? opts.initialLocale
+ : getClientLocale(opts.initialLocale) || opts.fallbackLocale
+ : opts.fallbackLocale
+
+ Object.assign(options, rest, { initialLocale })
+
+ if (formats) {
+ if ('number' in formats) {
+ Object.assign(options.formats.number, formats.number)
+ }
+ if ('date' in formats) {
+ Object.assign(options.formats.date, formats.date)
+ }
+ if ('time' in formats) {
+ Object.assign(options.formats.time, formats.time)
+ }
+ }
+
+ return $locale.set(initialLocale)
+}
diff --git a/src/client/includes/formatters.ts b/src/client/includes/formatters.ts
new file mode 100644
index 0000000..7a50def
--- /dev/null
+++ b/src/client/includes/formatters.ts
@@ -0,0 +1,75 @@
+import IntlMessageFormat from 'intl-messageformat'
+import memoize from 'fast-memoize'
+
+import { MemoizedIntlFormatter } from '../types'
+import { getCurrentLocale } from '../stores/locale'
+import { getOptions } from '../configs'
+
+const getIntlFormatterOptions = (
+ type: 'time' | 'number' | 'date',
+ name: string
+): any => {
+ const formats = getOptions().formats
+ if (type in formats && name in formats[type]) {
+ return formats[type][name]
+ }
+
+ throw new Error(`[svelte-i18n] Unknown "${name}" ${type} format.`)
+}
+
+export const getNumberFormatter: MemoizedIntlFormatter<
+ Intl.NumberFormat,
+ Intl.NumberFormatOptions
+> = memoize(({ locale, format, ...options } = {}) => {
+ locale = locale || getCurrentLocale()
+ if (locale == null) {
+ throw new Error('[svelte-i18n] A "locale" must be set to format numbers')
+ }
+
+ if (format) {
+ options = getIntlFormatterOptions('number', format)
+ }
+
+ return new Intl.NumberFormat(locale, options)
+})
+
+export const getDateFormatter: MemoizedIntlFormatter<
+ Intl.DateTimeFormat,
+ Intl.DateTimeFormatOptions
+> = memoize(({ locale, format, ...options } = {}) => {
+ locale = locale || getCurrentLocale()
+ if (locale == null) {
+ throw new Error('[svelte-i18n] A "locale" must be set to format dates')
+ }
+
+ if (format) options = getIntlFormatterOptions('date', format)
+ else if (Object.keys(options).length === 0) {
+ options = getIntlFormatterOptions('date', 'short')
+ }
+
+ return new Intl.DateTimeFormat(locale, options)
+})
+
+export const getTimeFormatter: MemoizedIntlFormatter<
+ Intl.DateTimeFormat,
+ Intl.DateTimeFormatOptions
+> = memoize(({ locale, format, ...options } = {}) => {
+ locale = locale || getCurrentLocale()
+ if (locale == null) {
+ throw new Error(
+ '[svelte-i18n] A "locale" must be set to format time values'
+ )
+ }
+
+ if (format) options = getIntlFormatterOptions('time', format)
+ else if (Object.keys(options).length === 0) {
+ options = getIntlFormatterOptions('time', 'short')
+ }
+
+ return new Intl.DateTimeFormat(locale, options)
+})
+
+export const getMessageFormatter = memoize(
+ (message: string, locale: string) =>
+ new IntlMessageFormat(message, locale, getOptions().formats)
+)
diff --git a/src/client/includes/loaderQueue.ts b/src/client/includes/loaderQueue.ts
new file mode 100644
index 0000000..5b1aade
--- /dev/null
+++ b/src/client/includes/loaderQueue.ts
@@ -0,0 +1,96 @@
+import { MessagesLoader } from '../types'
+import {
+ hasLocaleDictionary,
+ $dictionary,
+ addMessages,
+} from '../stores/dictionary'
+import { getRelatedLocalesOf } from '../stores/locale'
+import { $isLoading } from '../stores/loading'
+import { getOptions } from '../configs'
+
+type Queue = Set
+const loaderQueue: Record = {}
+
+export function resetQueues() {
+ Object.keys(loaderQueue).forEach(key => {
+ delete loaderQueue[key]
+ })
+}
+
+function createLocaleQueue(locale: string) {
+ loaderQueue[locale] = new Set()
+}
+
+function removeLocaleFromQueue(locale: string) {
+ delete loaderQueue[locale]
+}
+
+function getLocaleQueue(locale: string) {
+ return loaderQueue[locale]
+}
+
+function getLocalesQueues(locale: string) {
+ return getRelatedLocalesOf(locale)
+ .reverse()
+ .map<[string, MessagesLoader[]]>(localeItem => {
+ const queue = getLocaleQueue(localeItem)
+ return [localeItem, queue ? [...queue] : []]
+ })
+ .filter(([, queue]) => queue.length > 0)
+}
+
+export function hasLocaleQueue(locale: string) {
+ return getRelatedLocalesOf(locale)
+ .reverse()
+ .some(getLocaleQueue)
+}
+
+const activeLocaleFlushes: { [key: string]: Promise } = {}
+export function flush(locale: string) {
+ if (!hasLocaleQueue(locale)) return
+ if (locale in activeLocaleFlushes) return activeLocaleFlushes[locale]
+
+ // get queue of XX-YY and XX locales
+ const queues = getLocalesQueues(locale)
+ // istanbul ignore if
+ if (queues.length === 0) return
+
+ const loadingDelay = setTimeout(
+ () => $isLoading.set(true),
+ getOptions().loadingDelay
+ )
+
+ // TODO what happens if some loader fails
+ activeLocaleFlushes[locale] = Promise.all(
+ queues.map(([locale, queue]) => {
+ return Promise.all(queue.map(loader => loader())).then(partials => {
+ removeLocaleFromQueue(locale)
+ partials = partials.map(partial => partial.default || partial)
+ addMessages(locale, ...partials)
+ })
+ })
+ ).then(() => {
+ clearTimeout(loadingDelay)
+ $isLoading.set(false)
+ delete activeLocaleFlushes[locale]
+ })
+
+ return activeLocaleFlushes[locale]
+}
+
+export function registerLocaleLoader(locale: string, loader: MessagesLoader) {
+ if (!getLocaleQueue(locale)) createLocaleQueue(locale)
+
+ const queue = getLocaleQueue(locale)
+ // istanbul ignore if
+ if (getLocaleQueue(locale).has(loader)) return
+
+ if (!hasLocaleDictionary(locale)) {
+ $dictionary.update(d => {
+ d[locale] = {}
+ return d
+ })
+ }
+
+ queue.add(loader)
+}
diff --git a/src/client/includes/lookup.ts b/src/client/includes/lookup.ts
new file mode 100644
index 0000000..0860ac1
--- /dev/null
+++ b/src/client/includes/lookup.ts
@@ -0,0 +1,23 @@
+import { getMessageFromDictionary } from '../stores/dictionary'
+import { getFallbackOf } from '../stores/locale'
+
+export const lookupCache: Record> = {}
+
+const addToCache = (path: string, locale: string, message: string) => {
+ if (!message) return message
+ if (!(locale in lookupCache)) lookupCache[locale] = {}
+ if (!(path in lookupCache[locale])) lookupCache[locale][path] = message
+ return message
+}
+
+export const lookupMessage = (path: string, locale: string): string => {
+ if (locale == null) return null
+ if (locale in lookupCache && path in lookupCache[locale]) {
+ return lookupCache[locale][path]
+ }
+
+ const message = getMessageFromDictionary(locale, path)
+ if (message) return message
+
+ return addToCache(path, locale, lookupMessage(path, getFallbackOf(locale)))
+}
diff --git a/src/client/includes/utils.ts b/src/client/includes/utils.ts
new file mode 100644
index 0000000..4dae6a5
--- /dev/null
+++ b/src/client/includes/utils.ts
@@ -0,0 +1,75 @@
+import { GetClientLocaleOptions } from '../types'
+
+export function capital(str: string) {
+ return str.replace(/(^|\s)\S/, l => l.toLocaleUpperCase())
+}
+
+export function title(str: string) {
+ return str.replace(/(^|\s)\S/g, l => l.toLocaleUpperCase())
+}
+
+export function upper(str: string) {
+ return str.toLocaleUpperCase()
+}
+
+export function lower(str: string) {
+ return str.toLocaleLowerCase()
+}
+
+const getFromQueryString = (queryString: string, key: string) => {
+ const keyVal = queryString.split('&').find(i => i.indexOf(`${key}=`) === 0)
+
+ if (keyVal) {
+ return keyVal.split('=').pop()
+ }
+ return null
+}
+
+const getFirstMatch = (base: string, pattern: RegExp) => {
+ const match = pattern.exec(base)
+ // istanbul ignore if
+ if (!match) return null
+ // istanbul ignore else
+ return match[1] || null
+}
+
+export const getClientLocale = ({
+ navigator,
+ hash,
+ search,
+ pathname,
+ hostname,
+}: GetClientLocaleOptions) => {
+ let locale
+
+ // istanbul ignore next
+ if (typeof window === 'undefined') return null
+
+ if (hostname) {
+ locale = getFirstMatch(window.location.hostname, hostname)
+ if (locale) return locale
+ }
+
+ if (pathname) {
+ locale = getFirstMatch(window.location.pathname, pathname)
+ if (locale) return locale
+ }
+
+ if (navigator) {
+ // istanbul ignore else
+ locale = window.navigator.language || window.navigator.languages[0]
+ if (locale) return locale
+ }
+
+ if (search) {
+ locale = getFromQueryString(window.location.search.substr(1), search)
+ if (locale) return locale
+ }
+
+ if (hash) {
+ locale = getFromQueryString(window.location.hash.substr(1), hash)
+ if (locale) return locale
+ }
+
+ return null
+}
diff --git a/src/client/index.ts b/src/client/index.ts
new file mode 100644
index 0000000..87b3df6
--- /dev/null
+++ b/src/client/index.ts
@@ -0,0 +1,26 @@
+import { MessageObject } from './types'
+import { getCurrentLocale } from './stores/locale'
+import { getOptions } from './configs'
+import { flush } from './includes/loaderQueue'
+
+// defineMessages allow us to define and extract dynamic message ids
+export function defineMessages(i: Record) {
+ return i
+}
+
+export function waitLocale(locale?: string) {
+ return flush(locale || getCurrentLocale() || getOptions().initialLocale)
+}
+
+export { init } from './configs'
+export { $locale as locale } from './stores/locale'
+export {
+ $dictionary as dictionary,
+ $locales as locales,
+ addMessages,
+} from './stores/dictionary'
+export { $isLoading as isLoading } from './stores/loading'
+export { $format as format, $format as _, $format as t } from './stores/format'
+
+// utilities
+export { registerLocaleLoader as register } from './includes/loaderQueue'
diff --git a/src/client/stores/dictionary.ts b/src/client/stores/dictionary.ts
new file mode 100644
index 0000000..ef34c18
--- /dev/null
+++ b/src/client/stores/dictionary.ts
@@ -0,0 +1,56 @@
+import delve from 'dlv'
+import merge from 'deepmerge'
+import { writable, derived } from 'svelte/store'
+
+import { Dictionary } from '../types/index'
+
+import { getFallbackOf } from './locale'
+
+let dictionary: Dictionary
+const $dictionary = writable({})
+
+export function getLocaleDictionary(locale: string) {
+ return (dictionary[locale] as Dictionary) || null
+}
+
+export function getDictionary() {
+ return dictionary
+}
+
+export function hasLocaleDictionary(locale: string) {
+ return locale in dictionary
+}
+
+export function getMessageFromDictionary(locale: string, id: string) {
+ if (hasLocaleDictionary(locale)) {
+ const localeDictionary = getLocaleDictionary(locale)
+ if (id in localeDictionary) {
+ return localeDictionary[id]
+ }
+ const message = delve(localeDictionary, id)
+ if (message) return message
+ }
+ return null
+}
+
+export function getClosestAvailableLocale(locale: string): string | null {
+ if (locale == null || hasLocaleDictionary(locale)) return locale
+ return getClosestAvailableLocale(getFallbackOf(locale))
+}
+
+export function addMessages(locale: string, ...partials: Dictionary[]) {
+ $dictionary.update(d => {
+ dictionary[locale] = merge.all(
+ [getLocaleDictionary(locale) || {}].concat(partials)
+ )
+ return d
+ })
+}
+
+const $locales = derived([$dictionary], ([$dictionary]) =>
+ Object.keys($dictionary)
+)
+
+$dictionary.subscribe(newDictionary => (dictionary = newDictionary))
+
+export { $dictionary, $locales }
diff --git a/src/client/stores/format.ts b/src/client/stores/format.ts
new file mode 100644
index 0000000..9628a1b
--- /dev/null
+++ b/src/client/stores/format.ts
@@ -0,0 +1,65 @@
+import { derived } from 'svelte/store'
+
+import { Formatter, MessageObject } from '../types'
+import { lookupMessage } from '../includes/lookup'
+import { hasLocaleQueue } from '../includes/loaderQueue'
+import { capital, upper, lower, title } from '../includes/utils'
+import {
+ getMessageFormatter,
+ getTimeFormatter,
+ getDateFormatter,
+ getNumberFormatter,
+} from '../includes/formatters'
+import { getOptions } from '../configs'
+
+import { $dictionary } from './dictionary'
+import { getCurrentLocale, getRelatedLocalesOf, $locale } from './locale'
+
+const formatMessage: Formatter = (id, options = {}) => {
+ if (typeof id === 'object') {
+ options = id as MessageObject
+ id = options.id
+ }
+
+ const { values, locale = getCurrentLocale(), default: defaultValue } = options
+
+ if (locale == null) {
+ throw new Error(
+ '[svelte-i18n] Cannot format a message without first setting the initial locale.'
+ )
+ }
+
+ const message = lookupMessage(id, locale)
+
+ if (!message) {
+ if (getOptions().warnOnMissingMessages) {
+ // istanbul ignore next
+ console.warn(
+ `[svelte-i18n] The message "${id}" was not found in "${getRelatedLocalesOf(
+ locale
+ ).join('", "')}".${
+ hasLocaleQueue(getCurrentLocale())
+ ? `\n\nNote: there are at least one loader still registered to this locale that wasn't executed.`
+ : ''
+ }`
+ )
+ }
+
+ return defaultValue || id
+ }
+
+ if (!values) return message
+ return getMessageFormatter(message, locale).format(values)
+}
+
+formatMessage.time = (t, options) => getTimeFormatter(options).format(t)
+formatMessage.date = (d, options) => getDateFormatter(options).format(d)
+formatMessage.number = (n, options) => getNumberFormatter(options).format(n)
+formatMessage.capital = (id, options) => capital(formatMessage(id, options))
+formatMessage.title = (id, options) => title(formatMessage(id, options))
+formatMessage.upper = (id, options) => upper(formatMessage(id, options))
+formatMessage.lower = (id, options) => lower(formatMessage(id, options))
+
+const $format = derived([$locale, $dictionary], () => formatMessage)
+
+export { $format }
diff --git a/src/client/stores/loading.ts b/src/client/stores/loading.ts
new file mode 100644
index 0000000..3cce806
--- /dev/null
+++ b/src/client/stores/loading.ts
@@ -0,0 +1,3 @@
+import { writable } from 'svelte/store'
+
+export const $isLoading = writable(false)
diff --git a/src/client/stores/locale.ts b/src/client/stores/locale.ts
new file mode 100644
index 0000000..a18b7f1
--- /dev/null
+++ b/src/client/stores/locale.ts
@@ -0,0 +1,70 @@
+import { writable } from 'svelte/store'
+
+import { flush, hasLocaleQueue } from '../includes/loaderQueue'
+import { getOptions } from '../configs'
+
+import { getClosestAvailableLocale } from './dictionary'
+
+let current: string
+const $locale = writable(null)
+
+export function isFallbackLocaleOf(localeA: string, localeB: string) {
+ return localeB.indexOf(localeA) === 0 && localeA !== localeB
+}
+
+export function isRelatedLocale(localeA: string, localeB: string) {
+ return (
+ localeA === localeB ||
+ isFallbackLocaleOf(localeA, localeB) ||
+ isFallbackLocaleOf(localeB, localeA)
+ )
+}
+
+export function getFallbackOf(locale: string) {
+ const index = locale.lastIndexOf('-')
+ if (index > 0) return locale.slice(0, index)
+
+ const { fallbackLocale } = getOptions()
+ if (fallbackLocale && !isRelatedLocale(locale, fallbackLocale)) {
+ return fallbackLocale
+ }
+ return null
+}
+
+export function getRelatedLocalesOf(locale: string): string[] {
+ const locales = locale
+ .split('-')
+ .map((_, i, arr) => arr.slice(0, i + 1).join('-'))
+
+ const { fallbackLocale } = getOptions()
+ if (fallbackLocale && !isRelatedLocale(locale, fallbackLocale)) {
+ return locales.concat(getRelatedLocalesOf(fallbackLocale))
+ }
+ return locales
+}
+
+export function getCurrentLocale() {
+ return current
+}
+
+$locale.subscribe((newLocale: string) => {
+ current = newLocale
+
+ if (typeof window !== 'undefined') {
+ document.documentElement.setAttribute('lang', newLocale)
+ }
+})
+
+const localeSet = $locale.set
+$locale.set = (newLocale: string): void | Promise => {
+ if (getClosestAvailableLocale(newLocale) && hasLocaleQueue(newLocale)) {
+ return flush(newLocale).then(() => localeSet(newLocale))
+ }
+ return localeSet(newLocale)
+}
+
+// istanbul ignore next
+$locale.update = (fn: (locale: string) => void | Promise) =>
+ localeSet(fn(current))
+
+export { $locale }
diff --git a/src/client/types/index.ts b/src/client/types/index.ts
new file mode 100644
index 0000000..8cc4651
--- /dev/null
+++ b/src/client/types/index.ts
@@ -0,0 +1,64 @@
+import { Formats } from 'intl-messageformat'
+
+export interface Dictionary {
+ [key: string]: string | string[] | Dictionary | Dictionary[]
+}
+
+export interface MessageObject {
+ id?: string
+ locale?: string
+ format?: string
+ default?: string
+ values?: Record
+}
+
+interface FormatterFn {
+ (id: string | MessageObject, options?: MessageObject): string
+}
+
+type IntlFormatterOptions = T & {
+ format?: string
+ locale?: string
+}
+
+export interface MemoizedIntlFormatter {
+ (options?: IntlFormatterOptions): T
+}
+
+export interface Formatter extends FormatterFn {
+ time: (
+ d: Date | number,
+ options?: IntlFormatterOptions
+ ) => string
+ date: (
+ d: Date | number,
+ options?: IntlFormatterOptions
+ ) => string
+ number: (
+ d: number,
+ options?: IntlFormatterOptions
+ ) => string
+ capital: FormatterFn
+ title: FormatterFn
+ upper: FormatterFn
+ lower: FormatterFn
+}
+
+export interface MessagesLoader {
+ (): Promise
+}
+
+export interface GetClientLocaleOptions {
+ navigator?: boolean
+ hash?: string
+ search?: string
+ pathname?: RegExp
+ hostname?: RegExp
+}
+
+export interface ConfigureOptions {
+ fallbackLocale: string
+ initialLocale?: string | GetClientLocaleOptions
+ formats?: Partial
+ loadingDelay?: number
+}
diff --git a/src/client/types/modules.d.ts b/src/client/types/modules.d.ts
new file mode 100644
index 0000000..7e8b08e
--- /dev/null
+++ b/src/client/types/modules.d.ts
@@ -0,0 +1,2 @@
+declare module 'dlv'
+declare module 'nano-memoize'
diff --git a/src/index.js b/src/index.js
deleted file mode 100644
index e6b7316..0000000
--- a/src/index.js
+++ /dev/null
@@ -1,119 +0,0 @@
-import { writable, derived } from 'svelte/store/index.js'
-import resolvePath from 'object-resolve-path'
-import IntlMessageFormat from 'intl-messageformat'
-import memoize from 'micro-memoize'
-
-import { capital, title, upper, lower, getClientLocale } from './utils.js'
-
-let currentLocale
-let currentDictionary
-
-const customFormats = {
- number: {
- scientific: { notation: 'scientific' },
- engineering: { notation: 'engineering' },
- compactLong: { notation: 'compact', compactDisplay: 'long' },
- compactShort: { notation: 'compact', compactDisplay: 'short' },
- },
-}
-
-function addCustomFormats(formats) {
- if ('number' in formats) Object.assign(customFormats.number, formats.number)
- if ('date' in formats) Object.assign(customFormats.date, formats.date)
- if ('time' in formats) Object.assign(customFormats.time, formats.time)
-}
-
-function getAvailableLocale(newLocale) {
- if (currentDictionary[newLocale]) return newLocale
-
- // istanbul ignore else
- if (typeof newLocale === 'string') {
- const fallbackLocale = newLocale.split('-').shift()
-
- if (currentDictionary[fallbackLocale]) {
- return fallbackLocale
- }
- }
-
- return null
-}
-
-const getMessageFormatter = memoize(
- (message, locale) => new IntlMessageFormat(message, locale, customFormats),
-)
-
-const lookupMessage = memoize((path, locale) => {
- return (
- currentDictionary[locale][path] ||
- resolvePath(currentDictionary[locale], path)
- )
-})
-
-function formatString(string, { values, locale = currentLocale } = {}) {
- return getMessageFormatter(string, locale).format(values)
-}
-
-function formatMessage(path, { values, locale = currentLocale } = {}) {
- const message = lookupMessage(path, locale)
-
- if (!message) {
- console.warn(
- `[svelte-i18n] The message "${path}" was not found in the locale "${locale}".`,
- )
- return path
- }
-
- if (!values) return message
-
- return getMessageFormatter(message, locale).format(values)
-}
-
-formatMessage.time = (t, { format = 'short' } = {}) =>
- formatString(`{t,time,${format}}`, { values: { t } })
-
-formatMessage.date = (d, { format = 'short' } = {}) =>
- formatString(`{d,date,${format}}`, { values: { d } })
-
-formatMessage.number = (n, { format } = {}) =>
- formatString(`{n,number,${format}}`, { values: { n } })
-
-formatMessage.capital = (path, options) => capital(formatMessage(path, options))
-
-formatMessage.title = (path, options) => title(formatMessage(path, options))
-
-formatMessage.upper = (path, options) => upper(formatMessage(path, options))
-
-formatMessage.lower = (path, options) => lower(formatMessage(path, options))
-
-const dictionary = writable({})
-dictionary.subscribe(newDictionary => {
- currentDictionary = newDictionary
-})
-
-const locale = writable({})
-const localeSet = locale.set
-locale.set = newLocale => {
- const availableLocale = getAvailableLocale(newLocale)
- if (availableLocale) {
- return localeSet(availableLocale)
- }
-
- throw Error(`[svelte-i18n] Locale "${newLocale}" not found.`)
-}
-locale.update = fn => localeSet(fn(currentLocale))
-locale.subscribe(newLocale => {
- currentLocale = newLocale
-})
-
-const format = derived([locale, dictionary], () => formatMessage)
-
-export {
- locale,
- format as _,
- format,
- formatString,
- dictionary,
- getClientLocale,
- customFormats,
- addCustomFormats,
-}
diff --git a/src/utils.js b/src/utils.js
deleted file mode 100644
index 35436c0..0000000
--- a/src/utils.js
+++ /dev/null
@@ -1,37 +0,0 @@
-export const capital = str => str.replace(/(^|\s)\S/, l => l.toUpperCase())
-export const title = str => str.replace(/(^|\s)\S/g, l => l.toUpperCase())
-export const upper = str => str.toLocaleUpperCase()
-export const lower = str => str.toLocaleLowerCase()
-
-export const getClientLocale = ({ navigator, hash, search, fallback } = {}) => {
- let locale
-
- const getFromURL = (urlPart, key) => {
- const keyVal = urlPart
- .substr(1)
- .split('&')
- .find(i => i.indexOf(key) === 0)
-
- if (keyVal) {
- return keyVal.split('=').pop()
- }
- }
-
- // istanbul ignore else
- if (typeof window !== 'undefined') {
- if (navigator) {
- // istanbul ignore next
- locale = window.navigator.language || window.navigator.languages[0]
- }
-
- if (search) {
- locale = getFromURL(window.location.search, search)
- }
-
- if (hash) {
- locale = getFromURL(window.location.hash, hash)
- }
- }
-
- return locale || fallback
-}
diff --git a/test/cli/extract.test.ts b/test/cli/extract.test.ts
new file mode 100644
index 0000000..0711447
--- /dev/null
+++ b/test/cli/extract.test.ts
@@ -0,0 +1,267 @@
+// TODO: better tests. these are way too generic.
+
+import { parse } from 'svelte/compiler'
+
+import {
+ collectFormatCalls,
+ collectMessageDefinitions,
+ collectMessages,
+ extractMessages,
+} from '../../src/cli/extract'
+
+describe('collecting format calls', () => {
+ test('returns nothing if there are no script tag', () => {
+ const ast = parse(`Hey
`)
+ const calls = collectFormatCalls(ast)
+ expect(calls).toHaveLength(0)
+ })
+
+ test('returns nothing if there are no imports', () => {
+ const ast = parse(``)
+ const calls = collectFormatCalls(ast)
+ expect(calls).toHaveLength(0)
+ })
+
+ test('returns nothing if there are no format imports', () => {
+ const ast = parse(
+ ``
+ )
+ const calls = collectFormatCalls(ast)
+ expect(calls).toHaveLength(0)
+ })
+
+ test('collects all format calls in the instance script', () => {
+ const ast = parse(``)
+ const calls = collectFormatCalls(ast)
+ expect(calls).toHaveLength(2)
+ expect(calls[0]).toMatchObject({ type: 'CallExpression' })
+ expect(calls[1]).toMatchObject({ type: 'CallExpression' })
+ })
+
+ test('collects all format calls with renamed imports', () => {
+ const ast = parse(``)
+ const calls = collectFormatCalls(ast)
+ expect(calls).toHaveLength(3)
+ expect(calls[0]).toMatchObject({ type: 'CallExpression' })
+ expect(calls[1]).toMatchObject({ type: 'CallExpression' })
+ expect(calls[2]).toMatchObject({ type: 'CallExpression' })
+ })
+
+ test('collects all string format utility calls', () => {
+ const ast = parse(``)
+ const calls = collectFormatCalls(ast)
+ expect(calls).toHaveLength(4)
+ expect(calls[0]).toMatchObject({ type: 'CallExpression' })
+ expect(calls[1]).toMatchObject({ type: 'CallExpression' })
+ expect(calls[2]).toMatchObject({ type: 'CallExpression' })
+ expect(calls[3]).toMatchObject({ type: 'CallExpression' })
+ })
+
+ test('ignores date, time and number calls', () => {
+ const ast = parse(``)
+ const calls = collectFormatCalls(ast)
+ expect(calls).toHaveLength(0)
+ })
+})
+
+describe('collecting message definitions', () => {
+ test('returns nothing if there are no imports from the library', () => {
+ const ast = parse(
+ ``
+ )
+ expect(collectMessageDefinitions(ast)).toHaveLength(0)
+ })
+
+ test('gets all message definition objects', () => {
+ const ast = parse(``)
+ const definitions = collectMessageDefinitions(ast)
+ expect(definitions).toHaveLength(4)
+ expect(definitions[0]).toMatchObject({ type: 'ObjectExpression' })
+ expect(definitions[1]).toMatchObject({ type: 'ObjectExpression' })
+ expect(definitions[2]).toMatchObject({ type: 'ObjectExpression' })
+ expect(definitions[3]).toMatchObject({ type: 'ObjectExpression' })
+ })
+})
+
+describe('collecting messages', () => {
+ test('collects all messages in both instance and html ASTs', () => {
+ const markup = `
+
+
+ {$_('msg_1')}
+ {$_({id: 'msg_2'})}
+ {$_('msg_3', { default: 'Message'})}
`
+
+ const messages = collectMessages(markup)
+
+ expect(messages).toHaveLength(7)
+ expect(messages).toEqual(
+ expect.arrayContaining([
+ expect.objectContaining({ meta: { id: 'foo' } }),
+ expect.objectContaining({ meta: { id: 'msg_1' } }),
+ expect.objectContaining({ meta: { id: 'msg_2' } }),
+ expect.objectContaining({ meta: { id: 'msg_3', default: 'Message' } }),
+ expect.objectContaining({ meta: { id: 'page.title' } }),
+ expect.objectContaining({
+ meta: { id: 'disabled', default: 'Disabled' },
+ }),
+ expect.objectContaining({
+ meta: { id: 'enabled', default: 'Enabled' },
+ }),
+ ])
+ )
+ })
+})
+
+describe('messages extraction', () => {
+ test('returns a object built based on all found message paths', () => {
+ const markup = `
+
+ {$_.title('title')}
+ {$_({ id: 'subtitle'})}
+ `
+ const dict = extractMessages(markup)
+ expect(dict).toMatchObject({ title: '', subtitle: '' })
+ })
+
+ test('creates deep nested properties', () => {
+ const markup = `
+
+
+ {$_.title('home.page.title')}
+ {$_({ id: 'home.page.subtitle'})}
+
+ {$_('list.0')}
+ {$_('list.1')}
+ {$_('list.2')}
+
+ `
+ const dict = extractMessages(markup)
+ expect(dict).toMatchObject({
+ home: { page: { title: '', subtitle: '' } },
+ list: ['', '', ''],
+ })
+ })
+
+ test('creates a shallow dictionary', () => {
+ const markup = `
+
+
+ {$_.title('home.page.title')}
+ {$_({ id: 'home.page.subtitle'})}
+
+ {$_('list.0')}
+ {$_('list.1')}
+ {$_('list.2')}
+
+ `
+ const dict = extractMessages(markup, { shallow: true })
+ expect(dict).toMatchObject({
+ 'home.page.title': '',
+ 'home.page.subtitle': '',
+ 'list.0': '',
+ 'list.1': '',
+ 'list.2': '',
+ })
+ })
+
+ test('allow to pass a initial dictionary and only append non-existing props', () => {
+ const markup = `
+
+
+ {$_.title('home.page.title')}
+ {$_({ id: 'home.page.subtitle'})}
+
+ {$_('list.0')}
+ {$_('list.1')}
+ {$_('list.2')}
+
+ `
+ const dict = extractMessages(markup, {
+ overwrite: false,
+ accumulator: {
+ home: {
+ page: {
+ title: 'Page title',
+ },
+ },
+ },
+ })
+ expect(dict).toMatchObject({
+ home: {
+ page: {
+ title: 'Page title',
+ subtitle: '',
+ },
+ },
+ list: ['', '', ''],
+ })
+ })
+
+ test('allow to pass a initial dictionary and only append shallow non-existing props', () => {
+ const markup = `
+
+
+ {$_.title('home.page.title')}
+ {$_({ id: 'home.page.subtitle'})}
+ `
+ const dict = extractMessages(markup, {
+ overwrite: false,
+ shallow: true,
+ accumulator: {
+ 'home.page.title': 'Page title',
+ },
+ })
+ expect(dict).toMatchObject({
+ 'home.page.title': 'Page title',
+ 'home.page.subtitle': '',
+ })
+ })
+})
diff --git a/test/client/configs.test.ts b/test/client/configs.test.ts
new file mode 100644
index 0000000..0915e6e
--- /dev/null
+++ b/test/client/configs.test.ts
@@ -0,0 +1,65 @@
+import { get } from 'svelte/store'
+
+import {
+ init,
+ getOptions,
+ defaultOptions,
+ defaultFormats,
+} from '../../src/client/configs'
+import { $locale } from '../../src/client/stores/locale'
+
+beforeEach(() => {
+ init(defaultOptions)
+})
+
+test('inits the fallback locale', () => {
+ expect(getOptions().fallbackLocale).toBe(null)
+ init({
+ fallbackLocale: 'en',
+ })
+ expect(getOptions().fallbackLocale).toBe('en')
+})
+
+test('inits the initial locale by string', () => {
+ init({
+ fallbackLocale: 'pt',
+ initialLocale: 'en',
+ })
+ expect(getOptions().initialLocale).toBe('en')
+ expect(get($locale)).toBe('en')
+})
+
+test('inits the initial locale by client heuristics', () => {
+ delete window.location
+ window.location = {
+ search: '?lang=en-US&foo',
+ pathname: '/',
+ hostname: 'example.com',
+ hash: '',
+ } as any
+
+ init({
+ fallbackLocale: 'pt',
+ initialLocale: {
+ search: 'lang',
+ },
+ })
+ expect(getOptions().initialLocale).toBe('en-US')
+ expect(get($locale)).toBe('en-US')
+})
+
+test('adds custom formats for time, date and number values', () => {
+ const customFormats = require('../fixtures/formats.json')
+
+ init({
+ fallbackLocale: 'en',
+ formats: customFormats,
+ })
+ expect(getOptions().formats).toMatchObject(defaultFormats)
+ expect(getOptions().formats).toMatchObject(customFormats)
+})
+
+test('sets the minimum delay to set the loading store value', () => {
+ init({ fallbackLocale: 'en', loadingDelay: 300 })
+ expect(getOptions().loadingDelay).toBe(300)
+})
diff --git a/test/client/includes/formatters.test.ts b/test/client/includes/formatters.test.ts
new file mode 100644
index 0000000..9027f71
--- /dev/null
+++ b/test/client/includes/formatters.test.ts
@@ -0,0 +1,173 @@
+import {
+ getNumberFormatter,
+ getDateFormatter,
+ getTimeFormatter,
+ getMessageFormatter,
+} from '../../../src/client/includes/formatters'
+import { init } from '../../../src/client/configs'
+
+beforeEach(() => {
+ init({ fallbackLocale: undefined })
+})
+
+describe('number formatter', () => {
+ const number = 123123
+
+ test('throws if no locale is set', () => {
+ expect(() => getNumberFormatter().format(number)).toThrow(
+ '[svelte-i18n] A "locale" must be set to format numbers'
+ )
+ })
+
+ test('formats a date according to the current locale', () => {
+ init({ fallbackLocale: 'en' })
+ expect(getNumberFormatter().format(number)).toBe('123,123')
+ })
+
+ test('formats a number according to a locale', () => {
+ init({ fallbackLocale: 'en' })
+ expect(getNumberFormatter({ locale: 'pt-BR' }).format(number)).toBe(
+ '123.123'
+ )
+ })
+
+ test('formats a number with a custom format', () => {
+ init({
+ fallbackLocale: 'en',
+ formats: require('../../fixtures/formats.json'),
+ })
+
+ expect(getNumberFormatter({ format: 'brl' }).format(number)).toBe(
+ 'R$123,123.00'
+ )
+ })
+
+ test('formats a number with inline options', () => {
+ init({ fallbackLocale: 'en' })
+
+ expect(
+ getNumberFormatter({ style: 'currency', currency: 'BRL' }).format(number)
+ ).toBe('R$123,123.00')
+ })
+})
+
+describe('date formatter', () => {
+ const date = new Date(2019, 1, 1)
+
+ test('throws if no locale is set', () => {
+ expect(() => getDateFormatter().format(date)).toThrow(
+ '[svelte-i18n] A "locale" must be set to format dates'
+ )
+ })
+
+ test('formats a date according to the current locale', () => {
+ init({ fallbackLocale: 'en' })
+ expect(getDateFormatter().format(date)).toBe('2/1/19')
+ })
+
+ test('formats a date according to a locale', () => {
+ expect(getDateFormatter({ locale: 'pt-BR' }).format(date)).toBe('01/02/19')
+ })
+
+ test('throws if passed a non-existing format', () => {
+ init({
+ fallbackLocale: 'en',
+ formats: require('../../fixtures/formats.json'),
+ })
+
+ expect(() =>
+ getDateFormatter({ locale: 'pt-BR', format: 'foo' }).format(date)
+ ).toThrowError(`[svelte-i18n] Unknown "foo" date format.`)
+ })
+
+ test('formats a date with a custom format', () => {
+ init({
+ fallbackLocale: 'en',
+ formats: require('../../fixtures/formats.json'),
+ })
+
+ expect(getDateFormatter({ format: 'customDate' }).format(date)).toBe(
+ '2019 AD'
+ )
+ })
+
+ test('formats a date with inline options', () => {
+ init({ fallbackLocale: 'en' })
+
+ expect(
+ getDateFormatter({ year: 'numeric', era: 'short' }).format(date)
+ ).toBe('2019 AD')
+ })
+})
+
+describe('time formatter', () => {
+ const time = new Date(2019, 1, 1, 20, 37, 32)
+
+ test('throws if no locale is set', () => {
+ expect(() => getTimeFormatter().format(time)).toThrow(
+ '[svelte-i18n] A "locale" must be set to format time'
+ )
+ })
+
+ test('formats a time according to the current locale', () => {
+ init({ fallbackLocale: 'en' })
+ expect(getTimeFormatter().format(time)).toBe('8:37 PM')
+ })
+
+ test('formats a time according to a locale', () => {
+ expect(getTimeFormatter({ locale: 'pt-BR' }).format(time)).toBe('20:37')
+ })
+
+ test('formats a time with a custom format', () => {
+ init({
+ fallbackLocale: 'en',
+ formats: require('../../fixtures/formats.json'),
+ })
+
+ expect(getTimeFormatter({ format: 'customTime' }).format(time)).toBe(
+ '08:37:32 PM'
+ )
+ })
+
+ test('throws if passed a non-existing format', () => {
+ init({
+ fallbackLocale: 'en',
+ formats: require('../../fixtures/formats.json'),
+ })
+
+ expect(() =>
+ getTimeFormatter({ locale: 'pt-BR', format: 'foo' }).format(time)
+ ).toThrowError(`[svelte-i18n] Unknown "foo" time format.`)
+ })
+
+ test('formats a time with inline options', () => {
+ init({ fallbackLocale: 'en' })
+
+ expect(
+ getTimeFormatter({
+ hour: '2-digit',
+ minute: '2-digit',
+ second: '2-digit',
+ }).format(time)
+ ).toBe('08:37:32 PM')
+ })
+})
+
+describe('message formatter', () => {
+ test('formats a message with interpolated values', () => {
+ expect(
+ getMessageFormatter('Page: {current,number}/{max,number}', 'en').format({
+ current: 2,
+ max: 10,
+ })
+ ).toBe('Page: 2/10')
+ })
+
+ test('formats number with custom formats', () => {
+ expect(
+ getMessageFormatter('Number: {n, number, compactShort}', 'en').format({
+ n: 2000000,
+ })
+ ).toBe('Number: 2M')
+ })
+})
diff --git a/test/client/includes/loaderQueue.test.ts b/test/client/includes/loaderQueue.test.ts
new file mode 100644
index 0000000..adbc3f5
--- /dev/null
+++ b/test/client/includes/loaderQueue.test.ts
@@ -0,0 +1,83 @@
+import { get } from 'svelte/store'
+
+import {
+ hasLocaleQueue,
+ flush,
+ registerLocaleLoader,
+ resetQueues,
+} from '../../../src/client/includes/loaderQueue'
+import { getMessageFromDictionary } from '../../../src/client/stores/dictionary'
+import { $isLoading } from '../../../src/client/stores/loading'
+import { getOptions } from '../../../src/client/configs'
+
+beforeEach(() => {
+ resetQueues()
+})
+
+const loader = (content: any) => () => new Promise(res => res(content))
+
+test('registers a locale loader', () => {
+ expect(hasLocaleQueue('pt-BR')).toBe(false)
+ registerLocaleLoader('pt-BR', loader({ message: 'Mensagem' }))
+ expect(hasLocaleQueue('pt-BR')).toBe(true)
+})
+
+test('checks if exist queues of locale and its fallbacks', () => {
+ registerLocaleLoader('en', loader({ field: 'Name' }))
+ expect(hasLocaleQueue('en-US')).toBe(true)
+})
+
+test("does nothing if there's no queue for a locale", () => {
+ expect(flush('foo')).toBe(undefined)
+})
+
+test('flushes the queue of a locale and its fallbacks and merge the result with the dictionary', async () => {
+ registerLocaleLoader('en', loader({ field: 'Name' }))
+ registerLocaleLoader('en-US', loader({ field_2: 'Lastname' }))
+
+ await flush('en-US')
+
+ expect(getMessageFromDictionary('en', 'field')).toBe('Name')
+ expect(getMessageFromDictionary('en-US', 'field_2')).toBe('Lastname')
+
+ expect(hasLocaleQueue('en')).toBe(false)
+ expect(hasLocaleQueue('en-US')).toBe(false)
+})
+
+test('consecutive flushes return the same promise', async () => {
+ registerLocaleLoader('en', async () => ({}))
+
+ const flushA = flush('en')
+ const flushB = flush('en')
+ const flushC = flush('en')
+
+ expect(flushB).toStrictEqual(flushA)
+ expect(flushC).toStrictEqual(flushA)
+})
+
+test('should set loading to true if passed min delay and false after loading', () => {
+ registerLocaleLoader(
+ 'en',
+ () =>
+ new Promise(res =>
+ setTimeout(() => res({}), getOptions().loadingDelay * 2)
+ )
+ )
+
+ const flushPromise = flush('en')
+
+ return new Promise((res, rej) => {
+ setTimeout(() => {
+ if (get($isLoading) === true) return res()
+ return rej('$isLoading should be "true"')
+ }, getOptions().loadingDelay)
+ }).then(() => {
+ flushPromise.then(
+ () =>
+ new Promise((res, rej) => {
+ if (get($isLoading) === false) return res()
+ return rej('$isLoading should be "false" after loading')
+ })
+ )
+ })
+})
diff --git a/test/client/includes/lookup.test.ts b/test/client/includes/lookup.test.ts
new file mode 100644
index 0000000..273ee79
--- /dev/null
+++ b/test/client/includes/lookup.test.ts
@@ -0,0 +1,48 @@
+import { lookupMessage, lookupCache } from '../../../src/client/includes/lookup'
+import { $dictionary, addMessages } from '../../../src/client/stores/dictionary'
+
+beforeEach(() => {
+ $dictionary.set({})
+})
+
+test('returns null if no locale was passed', () => {
+ expect(lookupMessage('message.id', undefined)).toBe(null)
+ expect(lookupMessage('message.id', null)).toBe(null)
+})
+
+test('gets a shallow message of a locale dictionary', () => {
+ addMessages('en', { field: 'name' })
+ expect(lookupMessage('field', 'en')).toBe('name')
+})
+
+test('gets a deep message of a locale dictionary', () => {
+ addMessages('en', { deep: { field: 'lastname' } })
+ expect(lookupMessage('deep.field', 'en')).toBe('lastname')
+})
+
+test('gets a message from the fallback dictionary', () => {
+ addMessages('en', { field: 'name' })
+ expect(lookupMessage('field', 'en-US')).toBe('name')
+})
+
+test('caches found messages by locale', () => {
+ addMessages('en', { field: 'name' })
+ addMessages('pt', { field: 'nome' })
+ lookupMessage('field', 'en-US')
+ lookupMessage('field', 'pt-BR')
+ expect(lookupCache).toMatchObject({
+ 'en-US': { field: 'name' },
+ 'pt-BR': { field: 'nome' },
+ })
+})
+
+test("doesn't cache falsy messages", () => {
+ addMessages('en', { field: 'name' })
+ addMessages('pt', { field: 'nome' })
+ lookupMessage('field_2', 'en-US')
+ lookupMessage('field_2', 'pt-BR')
+ expect(lookupCache).not.toMatchObject({
+ 'en-US': { field_2: 'name' },
+ 'pt-BR': { field_2: 'nome' },
+ })
+})
diff --git a/test/client/includes/utils.test.ts b/test/client/includes/utils.test.ts
new file mode 100644
index 0000000..6d07581
--- /dev/null
+++ b/test/client/includes/utils.test.ts
@@ -0,0 +1,131 @@
+import {
+ getClientLocale,
+ capital,
+ title,
+ upper,
+ lower,
+} from '../../../src/client/includes/utils'
+
+describe('getting client locale', () => {
+ beforeEach(() => {
+ delete window.location
+ window.location = {
+ pathname: '/',
+ hostname: 'example.com',
+ hash: '',
+ search: '',
+ } as any
+ })
+
+ test('gets the locale based on the passed hash parameter', () => {
+ window.location.hash = '#locale=en-US&lang=pt-BR'
+ expect(
+ getClientLocale({
+ hash: 'lang',
+ })
+ ).toBe('pt-BR')
+ })
+
+ test('gets the locale based on the passed search parameter', () => {
+ window.location.search = '?locale=en-US&lang=pt-BR'
+ expect(
+ getClientLocale({
+ search: 'lang',
+ })
+ ).toBe('pt-BR')
+ })
+
+ test('gets the locale based on the navigator language', () => {
+ expect(
+ getClientLocale({
+ navigator: true,
+ })
+ ).toBe(window.navigator.language)
+ })
+
+ test('gets the locale based on the pathname', () => {
+ window.location.pathname = '/en-US/foo/'
+ expect(
+ getClientLocale({
+ pathname: /^\/(.*?)\//,
+ })
+ ).toBe('en-US')
+ })
+
+ test('gets the locale base on the hostname', () => {
+ window.location.hostname = 'pt.example.com'
+ expect(
+ getClientLocale({
+ hostname: /^(.*?)\./,
+ })
+ ).toBe('pt')
+ })
+
+ test('hostname precedes pathname', () => {
+ window.location.pathname = '/en-US/foo/'
+ window.location.hostname = 'pt.example.com'
+ expect(
+ getClientLocale({
+ hostname: /^(.*?)\./,
+ pathname: /^\/(.*?)\//,
+ })
+ ).toBe('pt')
+ })
+
+ test('pathname precedes navigator', () => {
+ window.location.pathname = '/it-IT/foo/'
+ expect(
+ getClientLocale({
+ pathname: /^\/(.*?)\//,
+ navigator: true,
+ })
+ ).toBe('it-IT')
+ })
+
+ test('navigator precedes search', () => {
+ window.location.search = '?lang=pt-BR'
+ expect(
+ getClientLocale({
+ navigator: true,
+ search: 'lang',
+ })
+ ).toBe('en-US')
+ })
+
+ test('search precedes hash', () => {
+ window.location.hash = '#lang=pt-BR'
+ window.location.search = '?lang=it-IT'
+ expect(
+ getClientLocale({
+ hash: 'lang',
+ search: 'lang',
+ })
+ ).toBe('it-IT')
+ })
+
+ test('returns null if no locale was found', () => {
+ expect(
+ getClientLocale({
+ search: 'lang',
+ })
+ ).toBe(null)
+ })
+})
+
+describe('string utilities', () => {
+ test('transforms a string into capital case', () => {
+ expect(capital('lowercase string')).toMatch('Lowercase string')
+ })
+
+ test('transforms a string into title case', () => {
+ expect(title('lowercase string')).toMatch('Lowercase String')
+ })
+
+ test('transforms a string into uppercase', () => {
+ expect(upper('lowercase string')).toMatch('LOWERCASE STRING')
+ })
+
+ test('transforms a string into lowercase', () => {
+ expect(lower('UPPERCASE STRING')).toMatch('uppercase string')
+ })
+})
diff --git a/test/client/index.test.ts b/test/client/index.test.ts
new file mode 100644
index 0000000..36a27df
--- /dev/null
+++ b/test/client/index.test.ts
@@ -0,0 +1,73 @@
+import { defineMessages, waitLocale, register, init } from '../../src/client'
+import { $locale } from '../../src/client/stores/locale'
+import { hasLocaleQueue } from '../../src/client/includes/loaderQueue'
+import {
+ getLocaleDictionary,
+ $dictionary,
+} from '../../src/client/stores/dictionary'
+import { $format } from '../../src/client/stores/format'
+
+test('defineMessages returns the identity of its first argument', () => {
+ const obj = {}
+ expect(obj).toBe(defineMessages(obj))
+})
+
+describe('waiting for a locale to load', () => {
+ beforeEach(() => {
+ $dictionary.set({})
+ $locale.set(undefined)
+ })
+
+ test('should wait for a locale queue to be flushed', async () => {
+ register('en', () => Promise.resolve({ foo: 'foo' }))
+ $locale.set('en')
+
+ await waitLocale('en')
+
+ expect(hasLocaleQueue('en')).toBe(false)
+ expect(getLocaleDictionary('en')).toMatchObject({ foo: 'foo' })
+ })
+
+ test('should wait for the current locale queue to be flushed', async () => {
+ register('en', () => Promise.resolve({ foo: 'foo' }))
+ init({ fallbackLocale: 'pt', initialLocale: 'en' })
+
+ await waitLocale()
+
+ expect(hasLocaleQueue('en')).toBe(false)
+ expect(getLocaleDictionary('en')).toMatchObject({ foo: 'foo' })
+ })
+
+ test('should wait for the fallback locale queue to be flushed if initial not set', async () => {
+ register('pt', () => Promise.resolve({ foo: 'foo' }))
+ init({ fallbackLocale: 'pt' })
+
+ await waitLocale()
+
+ expect(hasLocaleQueue('pt')).toBe(false)
+ expect(getLocaleDictionary('pt')).toMatchObject({ foo: 'foo' })
+ })
+})
+
+describe('format updates', () => {
+ beforeEach(() => {
+ init({ fallbackLocale: 'en' })
+ })
+
+ test('format store is updated when locale changes', () => {
+ const fn = jest.fn()
+ const cancel = $format.subscribe(fn)
+
+ $locale.set('pt')
+ expect(fn).toHaveBeenCalledTimes(2)
+ cancel()
+ })
+
+ test('format store is updated when dictionary changes', () => {
+ const fn = jest.fn()
+ const cancel = $format.subscribe(fn)
+ $dictionary.set({})
+ expect(fn).toHaveBeenCalledTimes(2)
+ cancel()
+ })
+})
diff --git a/test/client/stores/dictionary.test.ts b/test/client/stores/dictionary.test.ts
new file mode 100644
index 0000000..2af7f9d
--- /dev/null
+++ b/test/client/stores/dictionary.test.ts
@@ -0,0 +1,113 @@
+import { get } from 'svelte/store'
+
+import {
+ getDictionary,
+ hasLocaleDictionary,
+ getClosestAvailableLocale,
+ getMessageFromDictionary,
+ addMessages,
+ $dictionary,
+ $locales,
+ getLocaleDictionary,
+} from '../../../src/client/stores/dictionary'
+
+beforeEach(() => {
+ $dictionary.set({})
+})
+
+test('adds a new dictionary to a locale', () => {
+ addMessages('en', { field_1: 'name' })
+ addMessages('pt', { field_1: 'nome' })
+
+ expect(get($dictionary)).toMatchObject({
+ en: { field_1: 'name' },
+ pt: { field_1: 'nome' },
+ })
+})
+
+test('gets the whole current dictionary', () => {
+ addMessages('en', { field_1: 'name' })
+ expect(getDictionary()).toMatchObject(get($dictionary))
+})
+
+test('merges the existing dictionaries with new ones', () => {
+ addMessages('en', { field_1: 'name', deep: { prop1: 'foo' } })
+ addMessages('en', { field_2: 'lastname', deep: { prop2: 'foo' } })
+ addMessages('pt', { field_1: 'nome', deep: { prop1: 'foo' } })
+ addMessages('pt', { field_2: 'sobrenome', deep: { prop2: 'foo' } })
+
+ expect(get($dictionary)).toMatchObject({
+ en: {
+ field_1: 'name',
+ field_2: 'lastname',
+ deep: { prop1: 'foo', prop2: 'foo' },
+ },
+ pt: {
+ field_1: 'nome',
+ field_2: 'sobrenome',
+ deep: { prop1: 'foo', prop2: 'foo' },
+ },
+ })
+})
+
+test('gets the dictionary of a locale', () => {
+ addMessages('en', { field_1: 'name' })
+ expect(getLocaleDictionary('en')).toMatchObject({ field_1: 'name' })
+})
+
+test('checks if a locale dictionary exists', () => {
+ addMessages('pt', { field_1: 'name' })
+ expect(hasLocaleDictionary('en')).toBe(false)
+ expect(hasLocaleDictionary('pt')).toBe(true)
+})
+
+test('gets the closest available locale', () => {
+ addMessages('pt', { field_1: 'name' })
+ expect(getClosestAvailableLocale('pt-BR')).toBe('pt')
+})
+
+test("returns null if there's no closest locale available", () => {
+ addMessages('pt', { field_1: 'name' })
+ expect(getClosestAvailableLocale('it-IT')).toBe(null)
+})
+
+test('lists all locales in the dictionary', () => {
+ addMessages('en', {})
+ addMessages('pt', {})
+ addMessages('pt-BR', {})
+ expect(get($locales)).toEqual(['en', 'pt', 'pt-BR'])
+})
+
+describe('getting messages', () => {
+ test('gets a message from a shallow dictionary', () => {
+ addMessages('en', { message: 'Some message' })
+ expect(getMessageFromDictionary('en', 'message')).toBe('Some message')
+ })
+
+ test('gets a message from a deep object in the dictionary', () => {
+ addMessages('en', { messages: { message_1: 'Some message' } })
+ expect(getMessageFromDictionary('en', 'messages.message_1')).toBe(
+ 'Some message'
+ )
+ })
+
+ test('gets a message from an array in the dictionary', () => {
+ addMessages('en', { messages: ['Some message', 'Other message'] })
+ expect(getMessageFromDictionary('en', 'messages.0')).toBe('Some message')
+ expect(getMessageFromDictionary('en', 'messages.1')).toBe('Other message')
+ })
+
+ test('accepts english in dictionary keys', () => {
+ addMessages('pt', {
+ 'Hey man, how are you today?': 'E ai cara, como vocĂȘ vai hoje?',
+ })
+ expect(getMessageFromDictionary('pt', 'Hey man, how are you today?')).toBe(
+ 'E ai cara, como vocĂȘ vai hoje?'
+ )
+ })
+
+ test('returns null for missing messages', () => {
+ addMessages('en', {})
+ expect(getMessageFromDictionary('en', 'foo')).toBe(null)
+ })
+})
diff --git a/test/client/stores/format.test.ts b/test/client/stores/format.test.ts
new file mode 100644
index 0000000..7d99eb7
--- /dev/null
+++ b/test/client/stores/format.test.ts
@@ -0,0 +1,92 @@
+import { Formatter } from '../../../src/client/types/index'
+import { $format } from '../../../src/client/stores/format'
+import { init } from '../../../src/client/configs'
+import { addMessages } from '../../../src/client/stores/dictionary'
+import { $locale } from '../../../src/client/stores/locale'
+
+let format: Formatter
+$format.subscribe(f => (format = f))
+
+addMessages('en', require('../../fixtures/en.json'))
+addMessages('en-GB', require('../../fixtures/en-GB.json'))
+addMessages('pt', require('../../fixtures/pt.json'))
+addMessages('pt-BR', require('../../fixtures/pt-BR.json'))
+addMessages('pt-PT', require('../../fixtures/pt-PT.json'))
+
+beforeEach(() => {
+ init({ fallbackLocale: 'en' })
+})
+
+test('formats a message by its id and the current locale', () => {
+ expect(format({ id: 'form.field_1_name' })).toBe('Name')
+})
+
+test('formats a message by its id and the a passed locale', () => {
+ expect(format({ id: 'form.field_1_name', locale: 'pt' })).toBe('Nome')
+})
+
+test('formats a message with interpolated values', () => {
+ expect(format({ id: 'photos', values: { n: 0 } })).toBe('You have no photos.')
+ expect(format({ id: 'photos', values: { n: 1 } })).toBe('You have one photo.')
+ expect(format({ id: 'photos', values: { n: 21 } })).toBe(
+ 'You have 21 photos.'
+ )
+})
+
+test('accepts a message id as first argument', () => {
+ expect(format('form.field_1_name')).toBe('Name')
+})
+
+test('accepts a message id as first argument and formatting options as second', () => {
+ expect(format('form.field_1_name', { locale: 'pt' })).toBe('Nome')
+})
+
+test('throws if no locale is set', () => {
+ $locale.set(null)
+ expect(() => format('form.field_1_name')).toThrow(
+ '[svelte-i18n] Cannot format a message without first setting the initial locale.'
+ )
+})
+
+test('uses a missing message default value', () => {
+ expect(format('missing', { default: 'Missing Default' })).toBe(
+ 'Missing Default'
+ )
+})
+
+test('warn on missing messages', () => {
+ const warn = global.console.warn
+ global.console.warn = jest.fn()
+
+ format('missing')
+
+ expect(console.warn).toBeCalledWith(
+ `[svelte-i18n] The message "missing" was not found in "en".`
+ )
+
+ global.console.warn = warn
+})
+
+describe('format utilities', () => {
+ test('time', () => {
+ expect(format.time(new Date(2019, 0, 1, 20, 37))).toBe('8:37 PM')
+ })
+ test('date', () => {
+ expect(format.date(new Date(2019, 0, 1, 20, 37))).toBe('1/1/19')
+ })
+ test('number', () => {
+ expect(format.number(123123123)).toBe('123,123,123')
+ })
+ test('capital', () => {
+ expect(format.capital('title')).toBe('Page title')
+ })
+ test('title', () => {
+ expect(format.title('title')).toBe('Page Title')
+ })
+ test('upper', () => {
+ expect(format.upper('title')).toBe('PAGE TITLE')
+ })
+ test('lower', () => {
+ expect(format.lower('title')).toBe('page title')
+ })
+})
diff --git a/test/client/stores/locale.test.ts b/test/client/stores/locale.test.ts
new file mode 100644
index 0000000..1a44a20
--- /dev/null
+++ b/test/client/stores/locale.test.ts
@@ -0,0 +1,136 @@
+import { get } from 'svelte/store'
+
+import { lookupMessage } from '../../../src/client/includes/lookup'
+import {
+ isFallbackLocaleOf,
+ getFallbackOf,
+ getRelatedLocalesOf,
+ getCurrentLocale,
+ $locale,
+ isRelatedLocale,
+} from '../../../src/client/stores/locale'
+import { getOptions, init } from '../../../src/client/configs'
+import { register } from '../../../src/client'
+import { hasLocaleQueue } from '../../../src/client/includes/loaderQueue'
+
+beforeEach(() => {
+ init({ fallbackLocale: undefined })
+ $locale.set(undefined)
+})
+
+test('sets and gets the fallback locale', () => {
+ init({ fallbackLocale: 'en' })
+ expect(getOptions().fallbackLocale).toBe('en')
+})
+
+test('checks if a locale is a fallback locale of another locale', () => {
+ expect(isFallbackLocaleOf('en', 'en-US')).toBe(true)
+ expect(isFallbackLocaleOf('en', 'en')).toBe(false)
+ expect(isFallbackLocaleOf('it', 'en-US')).toBe(false)
+})
+
+test('checks if a locale is a fallback locale of another locale', () => {
+ expect(isRelatedLocale('en', 'en-US')).toBe(true)
+ expect(isRelatedLocale('pt-BR', 'pt')).toBe(true)
+ expect(isRelatedLocale('en', 'en')).toBe(true)
+ expect(isRelatedLocale('en', 'it-IT')).toBe(false)
+ expect(isRelatedLocale('en-US', 'it')).toBe(false)
+})
+
+test('gets the next fallback locale of a locale', () => {
+ expect(getFallbackOf('az-Cyrl-AZ')).toBe('az-Cyrl')
+ expect(getFallbackOf('en-US')).toBe('en')
+ expect(getFallbackOf('en')).toBe(null)
+})
+
+test('gets the global fallback locale if set', () => {
+ init({ fallbackLocale: 'en' })
+ expect(getFallbackOf('it')).toBe('en')
+})
+
+test('should not get the global fallback as the fallback of itself', () => {
+ init({ fallbackLocale: 'en' })
+ expect(getFallbackOf('en')).toBe(null)
+})
+
+test('if global fallback locale has a fallback, it should return it', () => {
+ init({ fallbackLocale: 'en-US' })
+ expect(getFallbackOf('en-US')).toBe('en')
+})
+
+test('gets all fallback locales of a locale', () => {
+ expect(getRelatedLocalesOf('en-US')).toEqual(['en', 'en-US'])
+ expect(getRelatedLocalesOf('en-US')).toEqual(['en', 'en-US'])
+ expect(getRelatedLocalesOf('az-Cyrl-AZ')).toEqual([
+ 'az',
+ 'az-Cyrl',
+ 'az-Cyrl-AZ',
+ ])
+})
+
+test('gets all fallback locales of a locale including the global fallback locale', () => {
+ init({ fallbackLocale: 'pt' })
+ expect(getRelatedLocalesOf('en-US')).toEqual(['en', 'en-US', 'pt'])
+ expect(getRelatedLocalesOf('en-US')).toEqual(['en', 'en-US', 'pt'])
+ expect(getRelatedLocalesOf('az-Cyrl-AZ')).toEqual([
+ 'az',
+ 'az-Cyrl',
+ 'az-Cyrl-AZ',
+ 'pt',
+ ])
+})
+test('gets all fallback locales of a locale including the global fallback locale and its fallbacks', () => {
+ init({ fallbackLocale: 'pt-BR' })
+ expect(getRelatedLocalesOf('en-US')).toEqual(['en', 'en-US', 'pt', 'pt-BR'])
+ expect(getRelatedLocalesOf('en-US')).toEqual(['en', 'en-US', 'pt', 'pt-BR'])
+ expect(getRelatedLocalesOf('az-Cyrl-AZ')).toEqual([
+ 'az',
+ 'az-Cyrl',
+ 'az-Cyrl-AZ',
+ 'pt',
+ 'pt-BR',
+ ])
+})
+
+test("don't list fallback locale twice", () => {
+ init({ fallbackLocale: 'pt-BR' })
+ expect(getRelatedLocalesOf('pt-BR')).toEqual(['pt', 'pt-BR'])
+ expect(getRelatedLocalesOf('pt')).toEqual(['pt'])
+})
+
+test('gets the current locale', () => {
+ expect(getCurrentLocale()).toBe(undefined)
+ $locale.set('es-ES')
+ expect(getCurrentLocale()).toBe('es-ES')
+})
+
+test('if no initial locale is set, set the locale to the fallback', () => {
+ init({ fallbackLocale: 'pt' })
+ expect(get($locale)).toBe('pt')
+ expect(getOptions().fallbackLocale).toBe('pt')
+})
+
+test('if no initial locale was found, set to the fallback locale', () => {
+ init({
+ fallbackLocale: 'en',
+ initialLocale: {
+ hash: 'lang',
+ },
+ })
+ expect(get($locale)).toBe('en')
+ expect(getOptions().fallbackLocale).toBe('en')
+})
+
+test('should flush the queue of the locale when changing the store value', async () => {
+ register(
+ 'en',
+ () => new Promise(res => setTimeout(() => res({ foo: 'Foo' }), 50))
+ )
+
+ expect(hasLocaleQueue('en')).toBe(true)
+
+ await $locale.set('en')
+
+ expect(hasLocaleQueue('en')).toBe(false)
+ expect(lookupMessage('foo', 'en')).toBe('Foo')
+})
diff --git a/test/fixtures/en-GB.json b/test/fixtures/en-GB.json
new file mode 100644
index 0000000..943dc25
--- /dev/null
+++ b/test/fixtures/en-GB.json
@@ -0,0 +1,3 @@
+{
+ "sneakers": "trainers"
+}
diff --git a/test/fixtures/en.json b/test/fixtures/en.json
new file mode 100644
index 0000000..62186de
--- /dev/null
+++ b/test/fixtures/en.json
@@ -0,0 +1,9 @@
+{
+ "form": {
+ "field_1_name": "Name",
+ "field_2_name": "Lastname"
+ },
+ "photos": "You have {n, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}",
+ "title": "Page title",
+ "sneakers": "sneakers"
+}
diff --git a/test/fixtures/es.json b/test/fixtures/es.json
new file mode 100644
index 0000000..6436bcd
--- /dev/null
+++ b/test/fixtures/es.json
@@ -0,0 +1,8 @@
+{
+ "form": {
+ "field_1_name": "Nombre",
+ "field_2_name": "Apellido"
+ },
+ "title": "TĂtulo de la pĂĄgina",
+ "sneakers": "zapatillas"
+}
diff --git a/test/fixtures/formats.json b/test/fixtures/formats.json
new file mode 100644
index 0000000..d36cac1
--- /dev/null
+++ b/test/fixtures/formats.json
@@ -0,0 +1,16 @@
+{
+ "number": {
+ "usd": { "style": "currency", "currency": "USD" },
+ "brl": { "style": "currency", "currency": "BRL" }
+ },
+ "date": {
+ "customDate": { "year": "numeric", "era": "short" }
+ },
+ "time": {
+ "customTime": {
+ "hour": "2-digit",
+ "minute": "2-digit",
+ "second": "2-digit"
+ }
+ }
+}
diff --git a/test/fixtures/partials/en.json b/test/fixtures/partials/en.json
new file mode 100644
index 0000000..8dc22dd
--- /dev/null
+++ b/test/fixtures/partials/en.json
@@ -0,0 +1,5 @@
+{
+ "page": {
+ "title_about": "About"
+ }
+}
diff --git a/test/fixtures/pt-BR.json b/test/fixtures/pt-BR.json
new file mode 100644
index 0000000..4394540
--- /dev/null
+++ b/test/fixtures/pt-BR.json
@@ -0,0 +1,3 @@
+{
+ "french_bread": "pĂŁo francĂȘs"
+}
diff --git a/test/fixtures/pt-PT.json b/test/fixtures/pt-PT.json
new file mode 100644
index 0000000..26afcc3
--- /dev/null
+++ b/test/fixtures/pt-PT.json
@@ -0,0 +1,3 @@
+{
+ "french_bread": "cacetinhos"
+}
diff --git a/test/fixtures/pt.json b/test/fixtures/pt.json
new file mode 100644
index 0000000..5c554ee
--- /dev/null
+++ b/test/fixtures/pt.json
@@ -0,0 +1,9 @@
+{
+ "form": {
+ "field_1_name": "Nome",
+ "field_2_name": "Sobrenome"
+ },
+ "photos": "VocĂȘ {n, plural, =0 {nĂŁo tem fotos.} =1 {tem uma foto.} other {tem # fotos.}}",
+ "title": "TĂtulo da pĂĄgina",
+ "sneakers": "tĂȘnis"
+}
diff --git a/test/fixtures/svelte.config.js b/test/fixtures/svelte.config.js
new file mode 100644
index 0000000..c24f11c
--- /dev/null
+++ b/test/fixtures/svelte.config.js
@@ -0,0 +1,5 @@
+const preprocess = require('svelte-preprocess')
+
+module.exports = {
+ preprocess: preprocess(),
+}
diff --git a/test/index.test.js b/test/index.test.js
deleted file mode 100644
index 3a1ec8c..0000000
--- a/test/index.test.js
+++ /dev/null
@@ -1,206 +0,0 @@
-import {
- dictionary,
- locale,
- format,
- getClientLocale,
- addCustomFormats,
- customFormats,
-} from '../src/index.js'
-
-let _
-let currentLocale
-
-const dict = {
- pt: {
- hi: 'olĂĄ vocĂȘ',
- 'switch.lang': 'Trocar idioma',
- greeting: {
- ask: 'Por favor, digite seu nome',
- message: 'OlĂĄ {name}, como vai?',
- },
- photos:
- 'VocĂȘ {n, plural, =0 {nĂŁo tem fotos.} =1 {tem uma foto.} other {tem # fotos.}}',
- cats: 'Tenho {n, number} {n,plural,=0{gatos}one{gato}other{gatos}}',
- },
- en: {
- hi: 'hi yo',
- 'switch.lang': 'Switch language',
- greeting: {
- ask: 'Please type your name',
- message: 'Hello {name}, how are you?',
- },
- photos:
- 'You have {n, plural, =0 {no photos.} =1 {one photo.} other {# photos.}}',
- cats: 'I have {n, number} {n,plural,one{cat}other{cats}}',
- },
-}
-
-format.subscribe(formatFn => {
- _ = formatFn
-})
-dictionary.set(dict)
-locale.subscribe(l => (currentLocale = l))
-locale.set('pt')
-
-it('should change locale', () => {
- locale.set('pt')
- expect(currentLocale).toBe('pt')
- locale.set('en')
- expect(currentLocale).toBe('en')
-})
-
-it('should fallback to existing locale', () => {
- locale.set('pt-BR')
- expect(currentLocale).toBe('pt')
-
- locale.set('en-US')
- expect(currentLocale).toBe('en')
-})
-
-it("should throw an error if locale doesn't exist", () => {
- expect(() => locale.set('FOO')).toThrow()
-})
-
-it('should fallback to message id if id is not found', () => {
- locale.set('en')
- expect(_('batatinha')).toBe('batatinha')
-})
-
-it('should translate to current locale', () => {
- locale.set('pt')
- expect(_('switch.lang')).toBe('Trocar idioma')
- locale.set('en')
- expect(_('switch.lang')).toBe('Switch language')
-})
-
-it('should translate to passed locale', () => {
- expect(_('switch.lang', { locale: 'pt' })).toBe('Trocar idioma')
- expect(_('switch.lang', { locale: 'en' })).toBe('Switch language')
-})
-
-it('should interpolate message with variables', () => {
- expect(_('greeting.message', { values: { name: 'Chris' } })).toBe(
- 'Hello Chris, how are you?',
- )
-})
-
-it('should interpolate message with variables according to passed locale', () => {
- expect(
- _('greeting.message', { values: { name: 'Chris' }, locale: 'pt' }),
- ).toBe('OlĂĄ Chris, como vai?')
-})
-
-describe('utilities', () => {
- describe('get locale', () => {
- beforeEach(() => {
- delete window.location
- window.location = {
- hash: '',
- search: '',
- }
- })
-
- it('should get the locale based on the passed hash parameter', () => {
- window.location.hash = '#locale=en-US&lang=pt-BR'
- expect(getClientLocale({ hash: 'locale' })).toBe('en-US')
- expect(getClientLocale({ hash: 'lang' })).toBe('pt-BR')
- })
-
- it('should get the locale based on the passed search parameter', () => {
- window.location.search = '?locale=en-US&lang=pt-BR'
- expect(getClientLocale({ search: 'locale' })).toBe('en-US')
- expect(getClientLocale({ search: 'lang' })).toBe('pt-BR')
- })
-
- it('should get the locale based on the navigator language', () => {
- expect(getClientLocale({ navigator: true })).toBe(
- window.navigator.language,
- )
- })
-
- it('should get the fallback locale', () => {
- expect(getClientLocale({ navigator: false, fallback: 'pt' })).toBe('pt')
- expect(getClientLocale({ hash: 'locale', fallback: 'pt' })).toBe('pt')
- })
- })
-
- describe('format utils', () => {
- beforeAll(() => {
- locale.set('en')
- })
-
- it('should capital a translated message', () => {
- expect(_.capital('hi')).toBe('Hi yo')
- })
-
- it('should title a translated message', () => {
- expect(_.title('hi')).toBe('Hi Yo')
- })
-
- it('should lowercase a translated message', () => {
- expect(_.lower('hi')).toBe('hi yo')
- })
-
- it('should uppercase a translated message', () => {
- expect(_.upper('hi')).toBe('HI YO')
- })
-
- const date = new Date(2019, 3, 24, 23, 45)
- it('should format a time value', () => {
- locale.set('en')
- expect(_.time(date)).toBe('11:45 PM')
- expect(_.time(date, { format: 'medium' })).toBe('11:45:00 PM')
- })
-
- it('should format a date value', () => {
- expect(_.date(date)).toBe('4/24/19')
- expect(_.date(date, { format: 'medium' })).toBe('Apr 24, 2019')
- })
- // number
- it('should format a date value', () => {
- expect(_.number(123123123)).toBe('123,123,123')
- })
- })
-})
-
-describe('custom formats', () => {
- beforeAll(() => {
- locale.set('pt-BR')
- })
-
- it('should have default number custom formats', () => {
- expect(customFormats.number).toMatchObject({
- scientific: { notation: 'scientific' },
- engineering: { notation: 'engineering' },
- compactLong: { notation: 'compact', compactDisplay: 'long' },
- compactShort: { notation: 'compact', compactDisplay: 'short' },
- })
- })
-
- it('should allow to add custom formats', () => {
- addCustomFormats({
- number: {
- usd: { style: 'currency', currency: 'USD' },
- },
- })
-
- expect(customFormats.number).toMatchObject({
- usd: { style: 'currency', currency: 'USD' },
- })
- })
-
- it('should format messages with custom formats', () => {
- addCustomFormats({
- number: {
- usd: { style: 'currency', currency: 'USD' },
- brl: { style: 'currency', currency: 'BRL' },
- },
- })
-
- expect(_.number(123123123, { format: 'usd' })).toContain('US$')
- expect(_.number(123123123, { format: 'usd' })).toContain('123.123.123,00')
-
- expect(_.number(123123123, { format: 'brl' })).toContain('R$')
- expect(_.number(123123123, { format: 'brl' })).toContain('123.123.123,00')
- })
-})
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..f11d7a1
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "noImplicitAny": true,
+ "sourceMap": false,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "resolveJsonModule": true,
+ "target": "esnext",
+ "lib": ["es2018", "dom", "esnext"],
+ "outDir": "dist",
+ "types": ["svelte", "jest"]
+ },
+ "exclude": ["node_modules/**/*", "dist"]
+}