diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 6cbb37da..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./node_modules/aurelia-tools/.eslintrc.json" -} diff --git a/.gitignore b/.gitignore index e6ea5e11..164024fa 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ bower_components .DS_STORE build/reports .vscode/ +test/coverage-jest diff --git a/bower.json b/bower.json deleted file mode 100644 index 10dd81ad..00000000 --- a/bower.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "aurelia-i18n", - "version": "2.3.2", - "description": "A plugin that provides i18n support.", - "keywords": [ - "aurelia", - "i18n", - "plugin" - ], - "homepage": "http://aurelia.io", - "main": "dist/commonjs/aurelia-i18n.js", - "moduleType": "node", - "license": "MIT", - "authors": [ - "Rob Eisenberg (http://robeisenberg.com/)" - ], - "repository": { - "type": "git", - "url": "http://github.com/aurelia/i18n" - }, - "dependencies": { - "aurelia-binding": "^2.0.0", - "aurelia-dependency-injection": "^1.0.0", - "aurelia-event-aggregator": "^1.0.0", - "aurelia-loader": "^1.0.0", - "aurelia-logging": "^1.0.0", - "aurelia-metadata": "^1.0.3", - "aurelia-pal": "^1.0.0", - "aurelia-templating": "^1.4.0", - "aurelia-templating-resources": "^1.0.0", - "i18next": "^3.4.1", - "intl": "^1.2.4" - } -} diff --git a/config.js b/config.js deleted file mode 100644 index 9c7d9a78..00000000 --- a/config.js +++ /dev/null @@ -1,236 +0,0 @@ -System.config({ - defaultJSExtensions: true, - transpiler: "babel", - babelOptions: { - "optional": [ - "runtime", - "optimisation.modules.system" - ] - }, - paths: { - "github:*": "jspm_packages/github/*", - "npm:*": "jspm_packages/npm/*" - }, - - map: { - "aurelia-binding": "npm:aurelia-binding@1.5.0", - "aurelia-bootstrapper": "npm:aurelia-bootstrapper@2.1.1", - "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.2", - "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1", - "aurelia-loader": "npm:aurelia-loader@1.0.0", - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-pal-browser": "npm:aurelia-pal-browser@1.3.0", - "aurelia-polyfills": "npm:aurelia-polyfills@1.2.2", - "aurelia-templating": "npm:aurelia-templating@1.6.0", - "aurelia-templating-resources": "npm:aurelia-templating-resources@1.5.4", - "aurelia-testing": "npm:aurelia-testing@0.4.2", - "babel": "npm:babel-core@5.8.38", - "babel-runtime": "npm:babel-runtime@5.8.38", - "core-js": "npm:core-js@2.4.1", - "i18next": "npm:i18next@9.0.0", - "intl": "npm:intl@1.2.4", - "text": "github:systemjs/plugin-text@0.0.2", - "github:jspm/nodelibs-assert@0.1.0": { - "assert": "npm:assert@1.4.1" - }, - "github:jspm/nodelibs-buffer@0.1.1": { - "buffer": "npm:buffer@5.0.7" - }, - "github:jspm/nodelibs-path@0.1.0": { - "path-browserify": "npm:path-browserify@0.0.0" - }, - "github:jspm/nodelibs-process@0.1.2": { - "process": "npm:process@0.11.10" - }, - "github:jspm/nodelibs-util@0.1.0": { - "util": "npm:util@0.10.3" - }, - "github:jspm/nodelibs-vm@0.1.0": { - "vm-browserify": "npm:vm-browserify@0.0.4" - }, - "npm:assert@1.4.1": { - "assert": "github:jspm/nodelibs-assert@0.1.0", - "buffer": "github:jspm/nodelibs-buffer@0.1.1", - "process": "github:jspm/nodelibs-process@0.1.2", - "util": "npm:util@0.10.3" - }, - "npm:aurelia-binding@1.5.0": { - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-task-queue": "npm:aurelia-task-queue@1.2.1" - }, - "npm:aurelia-bootstrapper@1.0.0-rc.1.0.1": { - "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1", - "aurelia-framework": "npm:aurelia-framework@1.1.5", - "aurelia-history": "npm:aurelia-history@1.1.0", - "aurelia-history-browser": "npm:aurelia-history-browser@1.1.0", - "aurelia-loader-default": "npm:aurelia-loader-default@1.0.3", - "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-pal-browser": "npm:aurelia-pal-browser@1.3.0", - "aurelia-polyfills": "npm:aurelia-polyfills@1.2.2", - "aurelia-router": "npm:aurelia-router@1.4.0", - "aurelia-templating": "npm:aurelia-templating@1.6.0", - "aurelia-templating-binding": "npm:aurelia-templating-binding@1.4.0", - "aurelia-templating-resources": "npm:aurelia-templating-resources@1.5.4", - "aurelia-templating-router": "npm:aurelia-templating-router@1.2.0" - }, - "npm:aurelia-bootstrapper@2.1.1": { - "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1", - "aurelia-framework": "npm:aurelia-framework@1.1.5", - "aurelia-history": "npm:aurelia-history@1.1.0", - "aurelia-history-browser": "npm:aurelia-history-browser@1.1.0", - "aurelia-loader-default": "npm:aurelia-loader-default@1.0.3", - "aurelia-logging-console": "npm:aurelia-logging-console@1.0.0", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-pal-browser": "npm:aurelia-pal-browser@1.3.0", - "aurelia-polyfills": "npm:aurelia-polyfills@1.2.2", - "aurelia-router": "npm:aurelia-router@1.4.0", - "aurelia-templating": "npm:aurelia-templating@1.6.0", - "aurelia-templating-binding": "npm:aurelia-templating-binding@1.4.0", - "aurelia-templating-resources": "npm:aurelia-templating-resources@1.5.4", - "aurelia-templating-router": "npm:aurelia-templating-router@1.2.0" - }, - "npm:aurelia-dependency-injection@1.3.2": { - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-pal": "npm:aurelia-pal@1.4.0" - }, - "npm:aurelia-event-aggregator@1.0.1": { - "aurelia-logging": "npm:aurelia-logging@1.3.1" - }, - "npm:aurelia-framework@1.1.5": { - "aurelia-binding": "npm:aurelia-binding@1.5.0", - "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.2", - "aurelia-loader": "npm:aurelia-loader@1.0.0", - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-path": "npm:aurelia-path@1.1.1", - "aurelia-task-queue": "npm:aurelia-task-queue@1.2.1", - "aurelia-templating": "npm:aurelia-templating@1.6.0" - }, - "npm:aurelia-history-browser@1.1.0": { - "aurelia-history": "npm:aurelia-history@1.1.0", - "aurelia-pal": "npm:aurelia-pal@1.4.0" - }, - "npm:aurelia-loader-default@1.0.3": { - "aurelia-loader": "npm:aurelia-loader@1.0.0", - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-pal": "npm:aurelia-pal@1.4.0" - }, - "npm:aurelia-loader@1.0.0": { - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-path": "npm:aurelia-path@1.1.1" - }, - "npm:aurelia-logging-console@1.0.0": { - "aurelia-logging": "npm:aurelia-logging@1.3.1" - }, - "npm:aurelia-metadata@1.0.3": { - "aurelia-pal": "npm:aurelia-pal@1.4.0" - }, - "npm:aurelia-pal-browser@1.3.0": { - "aurelia-pal": "npm:aurelia-pal@1.4.0" - }, - "npm:aurelia-polyfills@1.2.2": { - "aurelia-pal": "npm:aurelia-pal@1.4.0" - }, - "npm:aurelia-route-recognizer@1.1.1": { - "aurelia-path": "npm:aurelia-path@1.1.1" - }, - "npm:aurelia-router@1.4.0": { - "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.2", - "aurelia-event-aggregator": "npm:aurelia-event-aggregator@1.0.1", - "aurelia-history": "npm:aurelia-history@1.1.0", - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-path": "npm:aurelia-path@1.1.1", - "aurelia-route-recognizer": "npm:aurelia-route-recognizer@1.1.1" - }, - "npm:aurelia-task-queue@1.2.1": { - "aurelia-pal": "npm:aurelia-pal@1.4.0" - }, - "npm:aurelia-templating-binding@1.4.0": { - "aurelia-binding": "npm:aurelia-binding@1.5.0", - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-templating": "npm:aurelia-templating@1.6.0" - }, - "npm:aurelia-templating-resources@1.5.4": { - "aurelia-binding": "npm:aurelia-binding@1.5.0", - "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.2", - "aurelia-loader": "npm:aurelia-loader@1.0.0", - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-path": "npm:aurelia-path@1.1.1", - "aurelia-task-queue": "npm:aurelia-task-queue@1.2.1", - "aurelia-templating": "npm:aurelia-templating@1.6.0" - }, - "npm:aurelia-templating-router@1.2.0": { - "aurelia-binding": "npm:aurelia-binding@1.5.0", - "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.2", - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-path": "npm:aurelia-path@1.1.1", - "aurelia-router": "npm:aurelia-router@1.4.0", - "aurelia-templating": "npm:aurelia-templating@1.6.0" - }, - "npm:aurelia-templating@1.6.0": { - "aurelia-binding": "npm:aurelia-binding@1.5.0", - "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.2", - "aurelia-loader": "npm:aurelia-loader@1.0.0", - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-metadata": "npm:aurelia-metadata@1.0.3", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-path": "npm:aurelia-path@1.1.1", - "aurelia-task-queue": "npm:aurelia-task-queue@1.2.1" - }, - "npm:aurelia-testing@0.4.2": { - "aurelia-bootstrapper": "npm:aurelia-bootstrapper@2.1.1", - "aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.3.2", - "aurelia-framework": "npm:aurelia-framework@1.1.5", - "aurelia-logging": "npm:aurelia-logging@1.3.1", - "aurelia-pal": "npm:aurelia-pal@1.4.0", - "aurelia-templating": "npm:aurelia-templating@1.6.0" - }, - "npm:babel-runtime@5.8.38": { - "process": "github:jspm/nodelibs-process@0.1.2" - }, - "npm:buffer@5.0.7": { - "base64-js": "npm:base64-js@1.2.1", - "ieee754": "npm:ieee754@1.1.8" - }, - "npm:core-js@2.4.1": { - "fs": "github:jspm/nodelibs-fs@0.1.2", - "path": "github:jspm/nodelibs-path@0.1.0", - "process": "github:jspm/nodelibs-process@0.1.2", - "systemjs-json": "github:systemjs/plugin-json@0.1.2" - }, - "npm:i18next@9.0.0": { - "process": "github:jspm/nodelibs-process@0.1.2" - }, - "npm:inherits@2.0.1": { - "util": "github:jspm/nodelibs-util@0.1.0" - }, - "npm:intl@1.2.4": { - "process": "github:jspm/nodelibs-process@0.1.2" - }, - "npm:path-browserify@0.0.0": { - "process": "github:jspm/nodelibs-process@0.1.2" - }, - "npm:process@0.11.10": { - "assert": "github:jspm/nodelibs-assert@0.1.0", - "fs": "github:jspm/nodelibs-fs@0.1.2", - "vm": "github:jspm/nodelibs-vm@0.1.0" - }, - "npm:util@0.10.3": { - "inherits": "npm:inherits@2.0.1", - "process": "github:jspm/nodelibs-process@0.1.2" - }, - "npm:vm-browserify@0.0.4": { - "indexof": "npm:indexof@0.0.1" - } - } -}); diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 49321f59..00000000 --- a/karma.conf.js +++ /dev/null @@ -1,93 +0,0 @@ -// Karma configuration -// Generated on Fri Dec 05 2014 16:49:29 GMT-0500 (EST) - -module.exports = function(config) { - config.set({ - - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jspm', 'jasmine'], - - jspm: { - // Edit this to your needs - loadFiles: ['test/unit/setup.js', 'test/unit/**/*.js'], - serveFiles: ['src/**/*.js', 'test/unit/fixtures/**/*', 'test/unit/mocks/**/*-vm.*'] - }, - - - // list of files / patterns to load in the browser - files: [ - 'node_modules/babel-polyfill/browser.js', - {pattern: 'test/unit/fixtures/**/*.html', included: false}, - // dont pre-load just serve if requested - {pattern: 'test/unit/fixtures/**/*.jpg', watched: false, included: false, served: true} - ], - - // proxy test images, map the same placeholder to different requests - proxies: { - '/testimage-english.jpg': '/base/test/unit/fixtures/placeholder.jpg', - '/testimage-german.jpg': '/base/test/unit/fixtures/placeholder.jpg', - // redirect aurelia.feature's request of the index file to the actual setup - '/base/src/index.js': '/base/src/aurelia-i18n.js' - }, - - // list of files to exclude - exclude: [ - ], - - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - 'test/unit/**/*.js': ['babel'], - 'src/**/*.js': ['babel'] - }, - 'babelPreprocessor': { - options: { - sourceMap: 'inline', - presets: [ 'es2015-loose', 'stage-1'], - plugins: [ - 'syntax-flow', - 'transform-decorators-legacy', - 'transform-flow-strip-types' - ] - } - }, - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress'], - - - // web server port - port: 9876, - - - // enable / disable colors in the output (reporters and logs) - colors: true, - - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['Chrome'], - - - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: false - }); -}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..0ebcef21 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9307 @@ +{ + "name": "aurelia-i18n", + "version": "3.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-rc.3.tgz", + "integrity": "sha512-vH+ONMtvkQpjvKAXl5shNFyIpBwmkgKjo+buySLpQsMNDlqbJcFIMiYhwDrK4isZsae+QeHJYbqUJ0BYwyKNZw==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-rc.3" + } + }, + "@babel/highlight": { + "version": "7.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-rc.3.tgz", + "integrity": "sha512-BwDi54dopTDbp0nIXZ1Ln7dGaZx8Vxqi8IKVFxtHHFhlTMxwVnYZlRFamRy7yOG4KEemRYhENq5ea/cNa9Jvjw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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 + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@types/debug": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.29.tgz", + "integrity": "sha1-oeUUrfvZLwOiJLpU1pMRHb8fN1Q=", + "dev": true + }, + "@types/events": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", + "dev": true + }, + "@types/fs-extra": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz", + "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "5.0.35", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz", + "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/handlebars": { + "version": "4.0.36", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.36.tgz", + "integrity": "sha512-LjNiTX7TY7wtuC6y3QwC93hKMuqYhgV9A1uXBKNvZtVC8ZvyWAjZkJ5BvT0K7RKqORRYRLMrqCxpw5RgS+MdrQ==", + "dev": true + }, + "@types/highlight.js": { + "version": "9.12.2", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.2.tgz", + "integrity": "sha512-y5x0XD/WXDaGSyiTaTcKS4FurULJtSiYbGTeQd0m2LYZGBcZZ/7fM6t5H/DzeUF+kv8y6UfmF6yJABQsHcp9VQ==", + "dev": true + }, + "@types/i18next": { + "version": "8.4.4", + "resolved": "https://registry.npmjs.org/@types/i18next/-/i18next-8.4.4.tgz", + "integrity": "sha512-zDWxVDdRZvuBRjqMWZjC4ySwUM5mUZWHrfshAZHfbjbyn8qNtkL86+/Z17YtcExvrST/nrlu9S8GlbEsXSw32Q==", + "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/jest": { + "version": "21.1.10", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-21.1.10.tgz", + "integrity": "sha512-qDyqzbcyNgW2RgWbl606xCYQ+5fK9khOW5+Hl3wH7RggVES0dB6GcZvpmPs/XIty5qpu1xYCwpiK+iRkJ3xFBw==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.104", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.104.tgz", + "integrity": "sha512-ufQcVg4daO8xQ5kopxRHanqFdL4AI7ondQkV+2f+7mz3gvp0LkBx2zBRC6hfs3T87mzQFmf5Fck7Fi145Ul6NQ==", + "dev": true + }, + "@types/marked": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.3.0.tgz", + "integrity": "sha512-CSf9YWJdX1DkTNu9zcNtdCcn6hkRtB5ILjbhRId4ZOQqx30fXmdecuaXhugQL6eyrhuXtaHJ7PHI+Vm7k9ZJjg==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "8.10.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.28.tgz", + "integrity": "sha512-iHsAzDg3OLH7JP+wipniUULHoDSWLgEDYOvsar6/mpAkTJd9/n23Ap8ikruMlvRTqMv/LXrflH9v/AfiEqaBGg==", + "dev": true + }, + "@types/shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha512-M2giRw93PxKS7YjU6GZjtdV9HASdB7TWqizBXe4Ju7AqbKlWvTr0gNO92XH56D/gMxqD/jNHLNfC5hA34yGqrQ==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "JSONStream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + }, + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + } + }, + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "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" + } + } + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + } + } + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "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-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "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-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-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 + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, + "aurelia-binding": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/aurelia-binding/-/aurelia-binding-2.1.4.tgz", + "integrity": "sha512-jtMrm2We92ge09G3ZoCfxCUjNsw59wpgaMG0+p1UyPyKuT25oBmowC+E1z1dy3l+2Ouf4IWKEecpXV03PoZd6Q==", + "requires": { + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0", + "aurelia-task-queue": "^1.0.0" + } + }, + "aurelia-bootstrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/aurelia-bootstrapper/-/aurelia-bootstrapper-2.3.0.tgz", + "integrity": "sha512-JQ0yo5EbdoMPGQkeeNr2COMeOniZErb7cqLSKKjOdJ9SxYAfQDfbN4cF60NlOW6dJ3nR94ZpKXKjed2yF6nTVQ==", + "dev": true, + "requires": { + "aurelia-event-aggregator": "^1.0.0", + "aurelia-framework": "^1.3.0", + "aurelia-history": "^1.1.0", + "aurelia-history-browser": "^1.1.0", + "aurelia-loader-default": "^1.0.0", + "aurelia-logging-console": "^1.0.0", + "aurelia-pal": "^1.3.0", + "aurelia-pal-browser": "^1.0.0", + "aurelia-polyfills": "^1.0.0", + "aurelia-router": "^1.5.0", + "aurelia-templating": "^1.8.1", + "aurelia-templating-binding": "^1.0.0", + "aurelia-templating-resources": "^1.7.0", + "aurelia-templating-router": "^1.0.0" + }, + "dependencies": { + "aurelia-templating": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/aurelia-templating/-/aurelia-templating-1.8.2.tgz", + "integrity": "sha512-5suUaJzEhxfJ8yVhOysWJHRwZW54ZaNumAIGqu6Jtnx/5h/08s9aZw1Ev1PMS3lYyq/w4KucdXbG8NeXnJBUNA==", + "dev": true, + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-dependency-injection": "^1.0.0", + "aurelia-loader": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0", + "aurelia-path": "^1.0.0", + "aurelia-task-queue": "^1.1.0" + } + }, + "aurelia-templating-resources": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/aurelia-templating-resources/-/aurelia-templating-resources-1.7.1.tgz", + "integrity": "sha512-zLiy1a4ivnyzcnD9TPHY6jMF+pnoYpTC5riIWQXlRQOK/qsTBiojknhE64tgFAA9H/BxJfUkqCfqeWYVIartSA==", + "dev": true, + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-dependency-injection": "^1.0.0", + "aurelia-loader": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.3.0", + "aurelia-path": "^1.0.0", + "aurelia-task-queue": "^1.0.0", + "aurelia-templating": "^1.8.1" + } + } + } + }, + "aurelia-dependency-injection": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/aurelia-dependency-injection/-/aurelia-dependency-injection-1.4.1.tgz", + "integrity": "sha512-NexdxbXQKVhg8ywHosauccKbnn3vAeLyNg3oPa0l+z1fgOMf3/jvVYpcdmWelJP5yfBmYNyTYVBffCKeaS2m0w==", + "requires": { + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0" + } + }, + "aurelia-event-aggregator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/aurelia-event-aggregator/-/aurelia-event-aggregator-1.0.1.tgz", + "integrity": "sha1-nXx8Hh7+HvOnh4Xnar6AYB4tNMg=", + "requires": { + "aurelia-logging": "^1.0.0" + } + }, + "aurelia-framework": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/aurelia-framework/-/aurelia-framework-1.3.0.tgz", + "integrity": "sha512-yuKdy3LQx0tN/2CMKM8KTBcVLCeAcmcjXyEgWmRUlxJHCBAIT63ECrjkRWYkUzRNz8EQ0qnuH4jLUaWykXgJwg==", + "dev": true, + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-dependency-injection": "^1.0.0", + "aurelia-loader": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0", + "aurelia-path": "^1.0.0", + "aurelia-task-queue": "^1.0.0", + "aurelia-templating": "^1.8.1" + }, + "dependencies": { + "aurelia-templating": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/aurelia-templating/-/aurelia-templating-1.8.2.tgz", + "integrity": "sha512-5suUaJzEhxfJ8yVhOysWJHRwZW54ZaNumAIGqu6Jtnx/5h/08s9aZw1Ev1PMS3lYyq/w4KucdXbG8NeXnJBUNA==", + "dev": true, + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-dependency-injection": "^1.0.0", + "aurelia-loader": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0", + "aurelia-path": "^1.0.0", + "aurelia-task-queue": "^1.1.0" + } + } + } + }, + "aurelia-history": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/aurelia-history/-/aurelia-history-1.1.0.tgz", + "integrity": "sha1-d5qjhtVoA6qkvbfXFDWld2hQX1c=", + "dev": true + }, + "aurelia-history-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aurelia-history-browser/-/aurelia-history-browser-1.2.0.tgz", + "integrity": "sha512-3sAHq1xVX3fx8tyDb1LookueTRddB+hPVyfCVFR5Az2MbAfiovxXTzU6EX4VsOcuMweuER26NW4FTCgTA+sTuQ==", + "dev": true, + "requires": { + "aurelia-history": "^1.0.0", + "aurelia-pal": "^1.0.0" + } + }, + "aurelia-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/aurelia-loader/-/aurelia-loader-1.0.0.tgz", + "integrity": "sha1-t4wqKBOqjkQSRyN91m/WLl1OGeo=", + "requires": { + "aurelia-metadata": "^1.0.0", + "aurelia-path": "^1.0.0" + } + }, + "aurelia-loader-default": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/aurelia-loader-default/-/aurelia-loader-default-1.0.4.tgz", + "integrity": "sha512-xHo8Qb/xpl/ncKJcPGN3h2WHVwjNtNEqZZn7APc+AT/AZMSr9zubWorPmYBp3b3mZp27lEhcIttL0NKJnHcYSg==", + "dev": true, + "requires": { + "aurelia-loader": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0" + } + }, + "aurelia-loader-nodejs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/aurelia-loader-nodejs/-/aurelia-loader-nodejs-1.0.1.tgz", + "integrity": "sha1-Udv8vLpu86mlHpqWLZRhraewTXs=", + "dev": true, + "requires": { + "@types/debug": "^0.0.29", + "aurelia-loader": "^1.0.0", + "aurelia-metadata": "^1.0.2", + "aurelia-pal": "^1.0.0", + "aurelia-path": "^1.1.1", + "debug": "^2.3.2" + } + }, + "aurelia-logging": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/aurelia-logging/-/aurelia-logging-1.5.0.tgz", + "integrity": "sha512-u9Hhoj3yDHthKgTyj2svr7PaO41e2WFM2dSITxzOMzW8dC9hGVsIo9Hl6cereTP4+GMfMMQF5ZFp6Kfg87Ov0Q==" + }, + "aurelia-logging-console": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/aurelia-logging-console/-/aurelia-logging-console-1.0.0.tgz", + "integrity": "sha1-7fdQepf8aLQFE6F8Z31wQUEBrbQ=", + "dev": true, + "requires": { + "aurelia-logging": "^1.0.0" + } + }, + "aurelia-metadata": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/aurelia-metadata/-/aurelia-metadata-1.0.4.tgz", + "integrity": "sha512-9CgVH+kgrMIqWPAtdhhEJLoEPRMFz4RMsaLkYfYnK7LUCcOtZtPrOrAHCaU7jVa67JjGcsXkEqoN+xaTs0NL3g==", + "requires": { + "aurelia-pal": "^1.0.0" + } + }, + "aurelia-pal": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aurelia-pal/-/aurelia-pal-1.8.0.tgz", + "integrity": "sha512-Nc9S/JTUh1ErSUwg4INhgwBTe99ef8gYXZLjBnP4JJBmLcc/ChhOvj/dSRwluPkosggQgyj2pjla/9VAYHAXPg==" + }, + "aurelia-pal-browser": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aurelia-pal-browser/-/aurelia-pal-browser-1.8.0.tgz", + "integrity": "sha512-YcJyzMJ9I2NvUwac1Dcct5ZTL4NsNlB2MvLMKK5onTIlMI+azg8PSjM8OPRgms/h6cxUlKtzIiraq+KEmSqCuw==", + "dev": true, + "requires": { + "aurelia-pal": "^1.4.0" + } + }, + "aurelia-pal-nodejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/aurelia-pal-nodejs/-/aurelia-pal-nodejs-1.1.1.tgz", + "integrity": "sha512-ppUNX17fza2PcoKohI7paXdAB4VD9lHxvTT4IZzvLRfjWW9Hbx1N9LQAOv94poJTQESrfZwvkPX9X9iOihY2OA==", + "dev": true, + "requires": { + "aurelia-pal": "^1.1.0", + "jsdom": "~11.5.1" + } + }, + "aurelia-path": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/aurelia-path/-/aurelia-path-1.1.1.tgz", + "integrity": "sha1-yqnSC8hRWl+fKG2aOxjYGyyFsN0=" + }, + "aurelia-polyfills": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/aurelia-polyfills/-/aurelia-polyfills-1.3.0.tgz", + "integrity": "sha1-iZ7ABR92qXHDFpNBJ57WLH859wc=", + "dev": true, + "requires": { + "aurelia-pal": "^1.0.0" + } + }, + "aurelia-route-recognizer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aurelia-route-recognizer/-/aurelia-route-recognizer-1.2.0.tgz", + "integrity": "sha512-ABpfGBNclwWJik/DRSwJ5pUXAjMoD5mqGLMFbovroeWjdPQKonLh1G0BByngaWOdsIi3KrOglmktCFXqLn2jxg==", + "dev": true, + "requires": { + "aurelia-path": "^1.0.0" + } + }, + "aurelia-router": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/aurelia-router/-/aurelia-router-1.6.2.tgz", + "integrity": "sha512-UGi5ipJfcu2dg/BTmsi25Za5sj3li3lr8IZy/xbzeK9XHz8Y7NZU2uRrl/VRIQUGqc5/rwgW1jVKcvvMW/9keA==", + "dev": true, + "requires": { + "aurelia-dependency-injection": "^1.0.0", + "aurelia-event-aggregator": "^1.0.0", + "aurelia-history": "^1.1.0", + "aurelia-logging": "^1.0.0", + "aurelia-path": "^1.0.0", + "aurelia-route-recognizer": "^1.2.0" + } + }, + "aurelia-task-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/aurelia-task-queue/-/aurelia-task-queue-1.2.1.tgz", + "integrity": "sha1-LiXHzWY7fjB08dmXROstFOxc5ZQ=", + "requires": { + "aurelia-pal": "^1.0.0" + } + }, + "aurelia-templating": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/aurelia-templating/-/aurelia-templating-1.8.2.tgz", + "integrity": "sha512-5suUaJzEhxfJ8yVhOysWJHRwZW54ZaNumAIGqu6Jtnx/5h/08s9aZw1Ev1PMS3lYyq/w4KucdXbG8NeXnJBUNA==", + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-dependency-injection": "^1.0.0", + "aurelia-loader": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0", + "aurelia-path": "^1.0.0", + "aurelia-task-queue": "^1.1.0" + } + }, + "aurelia-templating-binding": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/aurelia-templating-binding/-/aurelia-templating-binding-1.4.3.tgz", + "integrity": "sha512-XmfR1GTFxw/nQp6jO/3XRDpPibAhQ1f/B47XrjMqRnR+zM0t3vhGem7HQ7Q9GKVccWz3eVXNxcUs6UH/6pe5pA==", + "dev": true, + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-templating": "^1.3.0" + } + }, + "aurelia-templating-resources": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/aurelia-templating-resources/-/aurelia-templating-resources-1.7.1.tgz", + "integrity": "sha512-zLiy1a4ivnyzcnD9TPHY6jMF+pnoYpTC5riIWQXlRQOK/qsTBiojknhE64tgFAA9H/BxJfUkqCfqeWYVIartSA==", + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-dependency-injection": "^1.0.0", + "aurelia-loader": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.3.0", + "aurelia-path": "^1.0.0", + "aurelia-task-queue": "^1.0.0", + "aurelia-templating": "^1.8.1" + } + }, + "aurelia-templating-router": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/aurelia-templating-router/-/aurelia-templating-router-1.3.2.tgz", + "integrity": "sha512-2Jc7E2M99ya37pFyEnktXAPTcVyMPjMbNvHLFLBYAo8QLy6DiBHOhukbLJPA+RrrfBFFY++5W66J4GoRbOHDNA==", + "dev": true, + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-dependency-injection": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.3.0", + "aurelia-path": "^1.0.0", + "aurelia-router": "^1.5.0", + "aurelia-templating": "^1.8.1" + }, + "dependencies": { + "aurelia-templating": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/aurelia-templating/-/aurelia-templating-1.8.2.tgz", + "integrity": "sha512-5suUaJzEhxfJ8yVhOysWJHRwZW54ZaNumAIGqu6Jtnx/5h/08s9aZw1Ev1PMS3lYyq/w4KucdXbG8NeXnJBUNA==", + "dev": true, + "requires": { + "aurelia-binding": "^2.0.0", + "aurelia-dependency-injection": "^1.0.0", + "aurelia-loader": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0", + "aurelia-path": "^1.0.0", + "aurelia-task-queue": "^1.1.0" + } + } + } + }, + "aurelia-testing": { + "version": "1.0.0-beta.4.0.0", + "resolved": "https://registry.npmjs.org/aurelia-testing/-/aurelia-testing-1.0.0-beta.4.0.0.tgz", + "integrity": "sha1-iBTz7wq9F1RVo60iGVPjppbfV/A=", + "dev": true, + "requires": { + "aurelia-dependency-injection": "^1.0.0", + "aurelia-framework": "^1.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-pal": "^1.0.0", + "aurelia-templating": "^1.0.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-jest": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.4.tgz", + "integrity": "sha512-A9NB6/lZhYyypR9ATryOSDcqBaqNdzq4U+CN+/wcMsLcmKkPxQEoTKLajGfd3IkxNyVBT8NewUK2nWyGbSzHEQ==", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.5", + "babel-preset-jest": "^22.4.4" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + } + } + }, + "babel-plugin-jest-hoist": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz", + "integrity": "sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ==", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-jest": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz", + "integrity": "sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^22.4.4", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "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": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "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" + } + }, + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "dev": true, + "requires": { + "rsvp": "^3.3.3" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "ci-info": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "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": { + "source-map": "~0.6.0" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "dev": true, + "requires": { + "color-name": "1.1.1" + } + }, + "color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", + "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" + } + }, + "compare-versions": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.3.1.tgz", + "integrity": "sha512-GkIcfJ9sDt4+gS+RWH3X+kR7ezuKdu3fg2oA9nRA8HZoqZwAKv3ml3TyfB9OyV2iFXxCw7q5XfV6SyPbSCT2pw==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concurrently": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-3.6.1.tgz", + "integrity": "sha512-/+ugz+gwFSEfTGUxn0KHkY+19XPRTXR8+7oUK/HxgiN1n7FjeJmkrbSiXAJfyQ0zORgJYPaenmymwon51YXH9Q==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "commander": "2.6.0", + "date-fns": "^1.23.0", + "lodash": "^4.5.1", + "read-pkg": "^3.0.0", + "rx": "2.3.24", + "spawn-command": "^0.0.2-1", + "supports-color": "^3.2.3", + "tree-kill": "^1.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + } + } + } + } + }, + "content-type-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", + "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", + "dev": true + }, + "conventional-changelog": { + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz", + "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^1.6.6", + "conventional-changelog-atom": "^0.2.8", + "conventional-changelog-codemirror": "^0.3.8", + "conventional-changelog-core": "^2.0.11", + "conventional-changelog-ember": "^0.3.12", + "conventional-changelog-eslint": "^1.0.9", + "conventional-changelog-express": "^0.3.6", + "conventional-changelog-jquery": "^0.1.0", + "conventional-changelog-jscs": "^0.1.0", + "conventional-changelog-jshint": "^0.3.8", + "conventional-changelog-preset-loader": "^1.1.8" + } + }, + "conventional-changelog-angular": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", + "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-changelog-atom": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz", + "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-cli": { + "version": "1.3.22", + "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz", + "integrity": "sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==", + "dev": true, + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog": "^1.1.24", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "tempfile": "^1.1.1" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "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 + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "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" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "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 + } + } + }, + "conventional-changelog-codemirror": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz", + "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz", + "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==", + "dev": true, + "requires": { + "conventional-changelog-writer": "^3.0.9", + "conventional-commits-parser": "^2.1.7", + "dateformat": "^3.0.0", + "get-pkg-repo": "^1.0.0", + "git-raw-commits": "^1.3.6", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^1.3.6", + "lodash": "^4.2.1", + "normalize-package-data": "^2.3.5", + "q": "^1.5.1", + "read-pkg": "^1.1.0", + "read-pkg-up": "^1.0.1", + "through2": "^2.0.0" + }, + "dependencies": { + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + } + } + }, + "conventional-changelog-ember": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz", + "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-eslint": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz", + "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-express": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz", + "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jquery": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", + "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", + "dev": true, + "requires": { + "q": "^1.4.1" + } + }, + "conventional-changelog-jscs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", + "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", + "dev": true, + "requires": { + "q": "^1.4.1" + } + }, + "conventional-changelog-jshint": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz", + "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-changelog-preset-loader": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz", + "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", + "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "conventional-commits-filter": "^1.1.6", + "dateformat": "^3.0.0", + "handlebars": "^4.0.2", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "semver": "^5.5.0", + "split": "^1.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "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" + } + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "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 + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "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" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "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 + } + } + }, + "conventional-commits-filter": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", + "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", + "dev": true, + "requires": { + "is-subset": "^0.1.1", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", + "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.0", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0", + "trim-off-newlines": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "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 + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "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" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "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 + } + } + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copyfiles": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.0.0.tgz", + "integrity": "sha512-NSSJdwCH27/hEiBlhkXYWh3AaPo8IATxLX5XtJQgknOvOehrREtETsGd/BNr2vuj0URgKBC/50PNRM3yShQGJQ==", + "dev": true, + "requires": { + "glob": "^7.0.5", + "minimatch": "^3.0.3", + "mkdirp": "^0.5.1", + "noms": "0.0.0", + "through2": "^2.0.1", + "yargs": "^11.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "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" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", + "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 + }, + "coveralls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz", + "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", + "dev": true, + "requires": { + "growl": "~> 1.10.0", + "js-yaml": "^3.11.0", + "lcov-parse": "^0.0.10", + "log-driver": "^1.2.7", + "minimist": "^1.2.0", + "request": "^2.85.0" + } + }, + "cpx": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cpx/-/cpx-1.5.0.tgz", + "integrity": "sha1-GFvgGFEdhycN7czCkxceN2VauI8=", + "dev": true, + "requires": { + "babel-runtime": "^6.9.2", + "chokidar": "^1.6.0", + "duplexer": "^0.1.1", + "glob": "^7.0.5", + "glob2base": "^0.0.12", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "resolve": "^1.1.7", + "safe-buffer": "^5.0.1", + "shell-quote": "^1.6.1", + "subarg": "^1.0.0" + } + }, + "cross-env": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", + "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "is-windows": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + } + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + } + } + }, + "cssom": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", + "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", + "dev": true + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "requires": { + "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", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "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" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + } + }, + "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" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "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" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + } + }, + "es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "dev": true, + "requires": { + "recast": "~0.11.12", + "through": "~2.3.6" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "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" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "expect": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", + "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "jest-diff": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-regex-util": "^22.4.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "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" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "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" + } + } + } + }, + "find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-extra": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.0.tgz", + "integrity": "sha512-lk2cUCo8QzbiEWEbt7Cw3m27WMiRG321xsssbcIpfMhpRjrlC08WBOVQqj1/nQYYNnPtyIhP1oqLO3QwT2tPCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "full-icu": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/full-icu/-/full-icu-1.2.1.tgz", + "integrity": "sha512-E2s1b4GVbt8PyG+iaRN6ks8N0Oy2LOJz7SIMUwWWWx7Mr5Z08hKkfpkKQbOtOGqzkFpckDJHjjZ8qfigN2W86A==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-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" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-raw-commits": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", + "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", + "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": { + "camelcase": { + "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" + } + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "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 + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "dev": true, + "requires": { + "lodash._reinterpolate": "~3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "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" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "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 + } + } + }, + "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" + } + }, + "git-semver-tags": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", + "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", + "dev": true, + "requires": { + "meow": "^4.0.0", + "semver": "^5.5.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "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 + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "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" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "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 + } + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "^0.1.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + }, + "dependencies": { + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + } + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "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.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "highlight.js": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", + "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-loader": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", + "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", + "dev": true, + "requires": { + "es6-templates": "^0.2.3", + "fastparse": "^1.1.1", + "html-minifier": "^3.5.8", + "loader-utils": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "html-minifier": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.20.tgz", + "integrity": "sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "uglify-js": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.8.tgz", + "integrity": "sha512-WatYTD84gP/867bELqI2F/2xC9PQBETn/L+7RGq9MQOA/7yFBNvY1UwXqvtILeE6n0ITwBXxp34M0/o70dzj6A==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "husky": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", + "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "dev": true, + "requires": { + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "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 + } + } + }, + "i18next": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-9.1.0.tgz", + "integrity": "sha512-oarlBl8AX+2xSae45aT57y/i0dlhRP+MAYhuV2AMtih4Cv+ICpAApOILxtxi0BKPL95FMDStIH4F0PX/4CwfCQ==" + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "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" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "intl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", + "integrity": "sha1-giRKIZDE5Bn4Nx9ao02qNCDiq94=" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "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-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "dev": true, + "requires": { + "ci-info": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "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-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-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": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "dev": true + }, + "is-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-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "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", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "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": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", + "dev": true, + "requires": { + "async": "^2.1.4", + "compare-versions": "^3.1.0", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-hook": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-report": "^1.1.4", + "istanbul-lib-source-maps": "^1.2.4", + "istanbul-reports": "^1.3.0", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz", + "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz", + "integrity": "sha512-eLAMkPG9FU0v5L02lIkcj/2/Zlz9OuluaXikdr5iStk8FDbSwAixTK9TkYxbF0eNnzAJTwM2fkV2A1tpsIp4Jg==", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", + "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "jest": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-22.4.4.tgz", + "integrity": "sha512-eBhhW8OS/UuX3HxgzNBSVEVhSuRDh39Z1kdYkQVWna+scpgsrD7vSeBI7tmEvsguPDMnfJodW28YBnhv/BzSew==", + "dev": true, + "requires": { + "import-local": "^1.0.0", + "jest-cli": "^22.4.4" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "jest-cli": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.4.tgz", + "integrity": "sha512-I9dsgkeyjVEEZj9wrGrqlH+8OlNob9Iptyl+6L5+ToOLJmHm4JwOPatin1b2Bzp5R5YRQJ+oiedx7o1H7wJzhA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.1.14", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-instrument": "^1.8.0", + "istanbul-lib-source-maps": "^1.2.1", + "jest-changed-files": "^22.2.0", + "jest-config": "^22.4.4", + "jest-environment-jsdom": "^22.4.1", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^22.4.2", + "jest-message-util": "^22.4.0", + "jest-regex-util": "^22.1.0", + "jest-resolve-dependencies": "^22.1.0", + "jest-runner": "^22.4.4", + "jest-runtime": "^22.4.4", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "jest-worker": "^22.2.2", + "micromatch": "^2.3.11", + "node-notifier": "^5.2.1", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^10.0.3" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "jest-changed-files": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz", + "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==", + "dev": true, + "requires": { + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.4.tgz", + "integrity": "sha512-9CKfo1GC4zrXSoMLcNeDvQBfgtqGTB1uP8iDIZ97oB26RCUb886KkKWhVcpyxVDOUxbhN+uzcBCeFe7w+Iem4A==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^22.4.1", + "jest-environment-node": "^22.4.1", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^22.4.4", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "pretty-format": "^22.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-css-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-css-modules/-/jest-css-modules-1.1.0.tgz", + "integrity": "sha1-GTMs92dhjmBS8JAN4l5riFnmW5U=", + "dev": true, + "requires": { + "babel-jest": "^16.0.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "babel-jest": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-16.0.0.tgz", + "integrity": "sha1-NIcprqbWJKR3S4qTTQekDdLP1kA=", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-plugin-istanbul": "^2.0.0", + "babel-preset-jest": "^16.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz", + "integrity": "sha1-JmswS5EJYH1gdIR0OUZ2mC9mDfQ=", + "dev": true, + "requires": { + "find-up": "^1.1.2", + "istanbul-lib-instrument": "^1.1.4", + "object-assign": "^4.1.0", + "test-exclude": "^2.1.1" + } + }, + "babel-plugin-jest-hoist": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-16.0.0.tgz", + "integrity": "sha1-tYyj93CYKn58JbVhSy5X6dr8bnY=", + "dev": true + }, + "babel-preset-jest": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-16.0.0.tgz", + "integrity": "sha1-QXqrwtfZMXD0PCDvHqAUXo9/LbU=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^16.0.0" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "test-exclude": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-2.1.3.tgz", + "integrity": "sha1-qNiWjh2oMmb5hk8oUsVeIg8GQ0o=", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + } + } + } + }, + "jest-diff": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-docblock": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz", + "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-environment-jsdom": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", + "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", + "dev": true, + "requires": { + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", + "dev": true, + "requires": { + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3" + } + }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true + }, + "jest-haste-map": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz", + "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==", + "dev": true, + "requires": { + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-docblock": "^22.4.3", + "jest-serializer": "^22.4.3", + "jest-worker": "^22.4.3", + "micromatch": "^2.3.11", + "sane": "^2.0.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + } + } + }, + "jest-jasmine2": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz", + "integrity": "sha512-nK3vdUl50MuH7vj/8at7EQVjPGWCi3d5+6aCi7Gxy/XMWdOdbH1qtO/LjKbqD8+8dUAEH+BVVh7HkjpCWC1CSw==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^22.4.0", + "graceful-fs": "^4.1.11", + "is-generator-fn": "^1.0.0", + "jest-diff": "^22.4.0", + "jest-matcher-utils": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-snapshot": "^22.4.0", + "jest-util": "^22.4.1", + "source-map-support": "^0.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz", + "integrity": "sha512-NZpR/Ls7+ndO57LuXROdgCGz2RmUdC541tTImL9bdUtU3WadgFGm0yV+Ok4Fuia/1rLAn5KaJ+i76L6e3zGJYQ==", + "dev": true, + "requires": { + "pretty-format": "^22.4.3" + } + }, + "jest-matcher-utils": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", + "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-message-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", + "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-mock": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", + "dev": true + }, + "jest-regex-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", + "dev": true + }, + "jest-resolve": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", + "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", + "dev": true, + "requires": { + "browser-resolve": "^1.11.2", + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz", + "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==", + "dev": true, + "requires": { + "jest-regex-util": "^22.4.3" + } + }, + "jest-runner": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.4.tgz", + "integrity": "sha512-5S/OpB51igQW9xnkM5Tgd/7ZjiAuIoiJAVtvVTBcEBiXBIFzWM3BAMPBM19FX68gRV0KWyFuGKj0EY3M3aceeQ==", + "dev": true, + "requires": { + "exit": "^0.1.2", + "jest-config": "^22.4.4", + "jest-docblock": "^22.4.0", + "jest-haste-map": "^22.4.2", + "jest-jasmine2": "^22.4.4", + "jest-leak-detector": "^22.4.0", + "jest-message-util": "^22.4.0", + "jest-runtime": "^22.4.4", + "jest-util": "^22.4.1", + "jest-worker": "^22.2.2", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.4.tgz", + "integrity": "sha512-WRTj9m///npte1YjuphCYX7GRY/c2YvJImU9t7qOwFcqHr4YMzmX6evP/3Sehz5DKW2Vi8ONYPCFWe36JVXxfw==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^22.4.4", + "babel-plugin-istanbul": "^4.1.5", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^22.4.4", + "jest-haste-map": "^22.4.2", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.4.2", + "jest-util": "^22.4.1", + "jest-validate": "^22.4.4", + "json-stable-stringify": "^1.0.1", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "^2.1.0", + "yargs": "^10.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "jest-serializer": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz", + "integrity": "sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw==", + "dev": true + }, + "jest-snapshot": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", + "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^22.4.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", + "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", + "dev": true, + "requires": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^22.4.3", + "mkdirp": "^0.5.1", + "source-map": "^0.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-validate": { + "version": "22.4.4", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.4.tgz", + "integrity": "sha512-dmlf4CIZRGvkaVg3fa0uetepcua44DHtktHm6rcoNVtYlpwe6fEJRkMFsaUVcFHLzbuBJ2cPw9Gl9TKfnzMVwg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-config": "^22.4.4", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^22.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "jest-worker": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz", + "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdom": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.5.1.tgz", + "integrity": "sha512-89ztIZ03aYK9f1uUrLXLsZndRge/JnZjzjpaN+lrse3coqz+8PR/dX4WLHpbF5fIKTXhDjFODOJw2328lPJ90g==", + "dev": true, + "requires": { + "abab": "^1.0.3", + "acorn": "^5.1.2", + "acorn-globals": "^4.0.0", + "array-equal": "^1.0.0", + "browser-process-hrtime": "^0.1.2", + "content-type-parser": "^1.0.1", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.1", + "left-pad": "^1.2.0", + "nwmatcher": "^1.4.3", + "parse5": "^3.0.2", + "pn": "^1.0.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.3", + "sax": "^1.2.1", + "symbol-tree": "^3.2.1", + "tough-cookie": "^2.3.3", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.1", + "whatwg-url": "^6.3.0", + "xml-name-validator": "^2.0.1" + }, + "dependencies": { + "escodegen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "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" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "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", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "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" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "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.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "^3.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" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "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" + } + }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "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" + } + }, + "merge": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "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" + } + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "~1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "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.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", + "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "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-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "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-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "semver": "^5.4.1", + "shellwords": "^0.1.1", + "which": "^1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + } + } + }, + "noms": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", + "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "~1.0.31" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwmatcher": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "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-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "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 + }, + "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": { + "no-case": "^2.2.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-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "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" + } + } + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-format": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "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 + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "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" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.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.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "realpath-native": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.1.tgz", + "integrity": "sha512-W14EcXuqUvKP8dkWkD7B95iMy77lpMnlFXbbk409bQtNCbeu0kvRE5reo+yIZ3JXxg6frbGsz2DLQ39lrCB40g==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "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" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "dev": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "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 + } + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "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 + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + }, + "rx": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz", + "integrity": "sha1-FPlQpCF9fjXapxu8vljv9o6ksrc=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", + "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.3", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "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", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.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" + } + }, + "shelljs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", + "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "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" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "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 + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "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", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "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" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-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" + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "^1.1.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "tempfile": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "dev": true, + "requires": { + "os-tmpdir": "^1.0.0", + "uuid": "^2.0.1" + }, + "dependencies": { + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "test-exclude": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", + "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^3.1.8", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + } + }, + "text-extensions": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz", + "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==", + "dev": true + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "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" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "tree-kill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", + "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-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 + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-jest": { + "version": "22.4.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-22.4.6.tgz", + "integrity": "sha512-kYQ6g1G1AU+bOO9rv+SSQXg4WTcni6Wx3AM48iHni0nP1vIuhdNRjKTE9Cxx36Ix/IOV7L85iKu07dgXJzH2pQ==", + "dev": true, + "requires": { + "babel-core": "^6.26.3", + "babel-plugin-istanbul": "^4.1.6", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "babel-preset-jest": "^22.4.3", + "cpx": "^1.5.0", + "fs-extra": "6.0.0", + "jest-config": "^22.4.3", + "lodash": "^4.17.10", + "pkg-dir": "^2.0.0", + "source-map-support": "^0.5.5", + "yargs": "^11.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "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" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "tslint": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.27.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typedoc": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.11.1.tgz", + "integrity": "sha512-jdNIoHm5wkZqxQTe/g9AQ3LKnZyrzHXqu6A/c9GUOeJyBWLxNr7/Dm3rwFvLksuxRNwTvY/0HRDU9sJTa9WQSg==", + "dev": true, + "requires": { + "@types/fs-extra": "5.0.1", + "@types/handlebars": "4.0.36", + "@types/highlight.js": "9.12.2", + "@types/lodash": "4.14.104", + "@types/marked": "0.3.0", + "@types/minimatch": "3.0.3", + "@types/shelljs": "0.7.8", + "fs-extra": "^5.0.0", + "handlebars": "^4.0.6", + "highlight.js": "^9.0.0", + "lodash": "^4.17.5", + "marked": "^0.3.17", + "minimatch": "^3.0.0", + "progress": "^2.0.0", + "shelljs": "^0.8.1", + "typedoc-default-themes": "^0.5.0", + "typescript": "2.7.2" + }, + "dependencies": { + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "typescript": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", + "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "dev": true + } + } + }, + "typedoc-default-themes": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz", + "integrity": "sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic=", + "dev": true + }, + "typescript": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.1.tgz", + "integrity": "sha512-zQIMOmC+372pC/CCVLqnQ0zSBiY7HHodU7mpQdjiZddek4GMj31I3dUJ7gAs9o65X7mnRma6OokOkc6f9jjfBg==", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": 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" + } + } + } + }, + "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", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watch": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz", + "integrity": "sha512-vM9KWN6MP2mIHZ86ytcyIv7e8Cj3KTfO2nd2c8PFDqcI4bxFmQp83ibq4wadq7rL9l9sZV6o9B0LTt8ygGAAXg==", + "dev": true, + "requires": { + "iconv-lite": "0.4.23" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "xml-name-validator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } +} diff --git a/package.json b/package.json index e80b49c4..3adfa017 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aurelia-i18n", - "version": "2.3.2", + "version": "3.0.0", "description": "A plugin that provides i18n support.", "keywords": [ "aurelia", @@ -13,14 +13,78 @@ "url": "https://github.com/aurelia/i18n/issues" }, "scripts": { - "build": "gulp build", - "precommit": "gulp lint", - "test": "karma start" + "lint": "cross-env tslint --project tsconfig.json", + "pretest": "cross-env npm run lint", + "test": "cross-env NODE_ICU_DATA=node_modules/full-icu jest", + "test-ci": "cross-env NODE_ICU_DATA=node_modules/full-icu jest && cat ./test/coverage-jest/lcov.info | ./node_modules/coveralls/bin/coveralls.js", + "test-watch": "concurrently \"tsc --watch\" \"jest --watch\"", + "build:amd": "cross-env tsc --p tsconfig-build.json --outDir dist/amd --module amd", + "build:commonjs": "cross-env tsc --p tsconfig-build.json --outDir dist/commonjs --module commonjs", + "build:es2015": "cross-env tsc --p tsconfig-build.json --outDir dist/es2015 --module es2015", + "build:es2017": "cross-env tsc --p tsconfig-build.json --outDir dist/es2017 --module es2015 --target es2017", + "build:native-modules": "cross-env tsc --p tsconfig-build.json --outDir dist/native-modules --module es2015", + "build:system": "cross-env tsc --p tsconfig-build.json --outDir dist/system --module system", + "prebuild": "cross-env rimraf dist", + "build": "concurrently \"npm run build:amd\" \"npm run build:commonjs\" \"npm run build:es2015\" \"npm run build:es2017\" \"npm run build:native-modules\" \"npm run build:system\"", + "precommit": "npm run lint", + "predoc": "cross-env rimraf doc/api.json && rimraf dist/doc-temp && tsc --p tsconfig-build.json --module amd --outFile dist/doc-temp/aurelia-store.js && node doc/shape-defs && copyfiles tsconfig.json dist/doc-temp", + "doc": "cross-env typedoc --json doc/api.json --excludeExternals --includeDeclarations --mode modules --target ES6 --name aurelia-store-docs dist/doc-temp/", + "postdoc": "cross-env node doc/shape-doc && rimraf dist/doc-temp", + "changelog": "cross-env conventional-changelog -p angular -i doc/CHANGELOG.md -s", + "bump-version": "npm --no-git-tag-version version", + "preprepare-release": "cross-env npm run test", + "prepare-release": "cross-env npm run changelog && npm run build && npm run doc", + "x": "NODE_ICU_DATA=node_modules/full-icu node test.js" + }, + "jest": { + "modulePaths": [ + "/src", + "/node_modules" + ], + "moduleFileExtensions": [ + "js", + "json", + "ts", + "html" + ], + "transform": { + "^.+\\.(ts|tsx)$": "/node_modules/ts-jest/preprocessor.js", + "^.+\\.(scss|css)$": "/node_modules/jest-css-modules", + "^.+\\.html$": "/test/html-loader.js" + }, + "testRegex": "\\.spec\\.(ts)x?$", + "setupFiles": [ + "/test/jest-pretest.ts" + ], + "testEnvironment": "node", + "moduleNameMapper": { + "src/index.*": "/src/aurelia-i18n.ts", + "src/(t|nf|df|rt)": "/src/$1.ts", + "(test\\\\unit\\\\)aurelia-(.*)": "/node_modules/aurelia-$2", + "^.+\\.(css)$": "/test/jest-css-stub.js" + }, + "collectCoverage": true, + "collectCoverageFrom": [ + "src/**/*.{js,ts}", + "!**/*.spec.{js,ts}", + "!**/node_modules/**", + "!**/test/**" + ], + "coverageDirectory": "/test/coverage-jest", + "coveragePathIgnorePatterns": [ + "/node_modules/" + ], + "coverageReporters": [ + "json", + "lcov", + "text", + "html" + ] }, "license": "MIT", "author": "Rob Eisenberg (http://robeisenberg.com/)", "main": "dist/commonjs/aurelia-i18n.js", - "typings": "dist/aurelia-i18n.d.ts", + "typings": "dist/typings/aurelia-i18n.d.ts", "repository": { "type": "git", "url": "http://github.com/aurelia/i18n" @@ -34,91 +98,57 @@ }, "dependencies": { "aurelia-binding": "^2.0.0", - "aurelia-dependency-injection": "^1.0.0", + "aurelia-dependency-injection": "^1.4.1", "aurelia-event-aggregator": "^1.0.0", "aurelia-loader": "^1.0.0", - "aurelia-logging": "^1.0.0", - "aurelia-metadata": "^1.0.3", + "aurelia-logging": "^1.5.0", + "aurelia-metadata": "^1.0.4", "aurelia-pal": "^1.3.0", - "aurelia-templating": "^1.4.0", - "aurelia-templating-resources": "^1.0.0", + "aurelia-templating": "^1.8.2", + "aurelia-templating-resources": "^1.7.1", "i18next": "^9.0.0", - "intl": "^1.2.4" - }, - "devDependencies": { - "aurelia-bootstrapper": "^2.1.1", - "aurelia-pal-browser": "^1.0.0-rc.1.0.0", - "aurelia-polyfills": "^1.0.0-rc.1.0.0", - "aurelia-testing": "^0.4.0", - "babel": "babel-core@^5.8.24", - "babel-runtime": "^5.8.24", - "core-js": "^2.0.3", - "text": "github:systemjs/plugin-text@^0.0.2" + "intl": "^1.2.5" } }, "dependencies": { "aurelia-binding": "^2.0.0", - "aurelia-dependency-injection": "^1.0.0", + "aurelia-dependency-injection": "^1.4.1", "aurelia-event-aggregator": "^1.0.0", "aurelia-loader": "^1.0.0", - "aurelia-logging": "^1.0.0", - "aurelia-metadata": "^1.0.3", + "aurelia-logging": "^1.5.0", + "aurelia-metadata": "^1.0.4", "aurelia-pal": "^1.3.0", - "aurelia-templating": "^1.4.0", - "aurelia-templating-resources": "^1.0.0", + "aurelia-templating": "^1.8.2", + "aurelia-templating-resources": "^1.7.1", "i18next": "^9.0.0", - "intl": "^1.2.4" + "intl": "^1.2.5" }, "devDependencies": { - "aurelia-tools": "^0.2.4", - "babel": "^6.5.2", - "babel-dts-generator": "^0.6.1", - "babel-eslint": "^6.1.2", - "babel-plugin-syntax-flow": "^6.8.0", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-es2015-modules-amd": "^6.8.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.11.5", - "babel-plugin-transform-es2015-modules-systemjs": "^6.11.6", - "babel-plugin-transform-flow-strip-types": "^6.8.0", - "babel-polyfill": "^6.26.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-es2015-loose": "^7.0.0", - "babel-preset-es2015-loose-native-modules": "^1.0.0", - "babel-preset-stage-1": "^6.5.0", - "del": "^2.2.1", - "gulp": "^3.9.1", - "gulp-babel": "^6.1.2", - "gulp-bump": "^2.2.0", - "gulp-concat": "^2.6.0", - "gulp-conventional-changelog": "^1.1.0", - "gulp-eslint": "^3.0.1", - "gulp-ignore": "^2.0.1", - "gulp-insert": "^0.5.0", - "gulp-rename": "^1.2.2", - "gulp-replace": "^0.6.1", - "gulp-typedoc": "^2.0.0", - "gulp-typedoc-extractor": "0.0.8", - "gulp-typescript": "^2.13.6", - "gulp-util": "^3.0.7", + "@types/i18next": "^8.4.4", + "@types/intl": "^1.2.0", + "@types/jest": "^21.1.10", + "@types/node": "^8.10.26", + "aurelia-bootstrapper": "^2.3.0", + "aurelia-loader-nodejs": "^1.0.1", + "aurelia-pal-browser": "^1.8.0", + "aurelia-pal-nodejs": "^1.1.1", + "aurelia-polyfills": "^1.3.0", + "aurelia-testing": "^1.0.0-beta.4.0.0", + "concurrently": "^3.6.1", + "conventional-changelog-cli": "^1.3.22", + "copyfiles": "^2.0.0", + "coveralls": "^3.0.2", + "cross-env": "^5.2.0", + "full-icu": "^1.2.1", + "html-loader": "^0.5.5", "husky": "^0.14.3", - "jasmine-core": "^2.4.1", - "karma": "^1.1.2", - "karma-babel-preprocessor": "^6.0.1", - "karma-chrome-launcher": "^1.0.1", - "karma-coverage": "^1.1.1", - "karma-jasmine": "^1.0.2", - "karma-jasmine-ajax": "^0.1.13", - "karma-jspm": "^2.2.0", - "merge2": "^1.0.2", - "object.assign": "^4.0.4", - "require-dir": "^0.3.2", - "run-sequence": "^1.2.2", - "through2": "^2.0.1", - "typedoc": "^0.4.4", - "typescript": "^1.9.0-dev.20160622-1.0", - "vinyl": "^1.1.1", - "vinyl-paths": "^2.1.0", - "yargs": "^4.8.1" + "jest": "^22.4.4", + "jest-css-modules": "^1.1.0", + "rimraf": "^2.6.1", + "ts-jest": "^22.4.6", + "tslint": "^5.11.0", + "typedoc": "^0.11.1", + "typescript": "^3.0.1" }, "aurelia": { "build": { diff --git a/src/aurelia-i18n-loader.js b/src/aurelia-i18n-loader.js deleted file mode 100644 index e91f3c54..00000000 --- a/src/aurelia-i18n-loader.js +++ /dev/null @@ -1,101 +0,0 @@ -// aurelia-i18n-loader -// an implementation of an i18next Backend that uses the aurelia loader to load the json translation files -// based on i18next-xhr-backend -// -// usage: -// aurelia.use.plugin('aurelia-i18n', (instance) => { -// // register backend plugin -// instance.i18next.use(Backend.with(aurelia.loader)); - -export class Backend { - static loader = null; // static loader to support passing the aurelia-loader - - static with(loader) { - this.loader = loader; - return this; - } - - constructor(services, options = {}) { - this.init(services, options); - this.type = 'backend'; - } - - init(services, options = {}) { - this.services = services; - this.options = defaults(options, this.options || {}, getDefaults()); - } - - readMulti(languages, namespaces, callback) { - let loadPath = this.options.loadPath; - - if (typeof this.options.loadPath === 'function') { - loadPath = this.options.loadPath(languages, namespaces); - } - - let url = this.services.interpolator.interpolate(loadPath, { lng: languages.join('+'), ns: namespaces.join('+') }); - - this.loadUrl(url, callback); - } - - read(language, namespace, callback) { - let loadPath = this.options.loadPath; - - if (typeof this.options.loadPath === 'function') { - loadPath = this.options.loadPath([language], [namespace]); - } - - let url = this.services.interpolator.interpolate(loadPath, { lng: language, ns: namespace }); - - this.loadUrl(url, callback); - } - - loadUrl(url, callback) { - this.constructor.loader.loadText(url) - .then(response=>{ - let ret; - let err; - try { - ret = (response instanceof Object) ? response : this.options.parse(response, url); - } catch (e) { - err = 'failed parsing ' + url + ' to json'; - } - if (err) return callback(err, false); - callback(null, ret); - }, - response=>{ - return callback('failed loading ' + url, false /* no retry */); - }); - } - - create(languages, namespace, key, fallbackValue) { - // create is not (yet) supported - } -} - -Backend.type = 'backend'; -export default Backend; - -// helper functions -let arr = []; -let each = arr.forEach; -let slice = arr.slice; - -function getDefaults() { - return { - loadPath: '/locales/{{lng}}/{{ns}}.json', - addPath: 'locales/add/{{lng}}/{{ns}}', - allowMultiLoading: false, - parse: JSON.parse - }; -} - -function defaults(obj) { - each.call(slice.call(arguments, 1), function(source) { - if (source) { - for (let prop in source) { - if (obj[prop] === undefined) obj[prop] = source[prop]; - } - } - }); - return obj; -} diff --git a/src/aurelia-i18n-loader.ts b/src/aurelia-i18n-loader.ts new file mode 100644 index 00000000..d9204d17 --- /dev/null +++ b/src/aurelia-i18n-loader.ts @@ -0,0 +1,94 @@ +import { Loader } from "aurelia-loader"; + +// aurelia-i18n-loader +// an implementation of an i18next Backend that uses the aurelia loader to load the json translation files +// based on i18next-xhr-backend +// +// usage: +// aurelia.use.plugin('aurelia-i18n', (instance) => { +// // register backend plugin +// instance.i18next.use(Backend.with(aurelia.loader)); + +export type LoadPathOption = string | ((lngs: string[], namespaces: string[]) => string); +export type LoadCallback = (error: any, result: string | false | undefined) => void; + +export interface AureliaBackendOptions { + loadPath?: LoadPathOption; + parse?(data: string, url: string): string; +} + +export class Backend { + public type: string = "backend"; + + public static type: string = "backend"; + public static loader: Loader; // static loader to support passing the aurelia-loader + + public static with(loader: Loader) { + this.loader = loader; + return this; + } + + constructor(public services: any, public options: AureliaBackendOptions = {}) { + this.init(services, options); + } + + public init(services: any, options: AureliaBackendOptions = {}) { + this.services = services; + this.options = Object.assign({}, options, { + loadPath: "/locales/{{lng}}/{{ns}}.json", + addPath: "locales/add/{{lng}}/{{ns}}", + allowMultiLoading: false, + parse: JSON.parse + }); + } + + public readMulti(languages: string[], namespaces: string[], callback: LoadCallback) { + let loadPath = this.options.loadPath; + + if (typeof this.options.loadPath === "function") { + loadPath = this.options.loadPath(languages, namespaces); + } + + let url = this.services.interpolator.interpolate(loadPath, { lng: languages.join("+"), ns: namespaces.join("+") }); + + this.loadUrl(url, callback); + } + + read(language: string, namespace: string, callback: LoadCallback) { + let loadPath = this.options.loadPath; + + if (typeof this.options.loadPath === "function") { + loadPath = this.options.loadPath([language], [namespace]); + } + + let url = this.services.interpolator.interpolate(loadPath, { lng: language, ns: namespace }); + + this.loadUrl(url, callback); + } + + async loadUrl(url: string, callback: LoadCallback) { + try { + const response = await Backend.loader.loadText(url); + let ret; + let err; + try { + ret = (response as any instanceof Object) ? response : this.options.parse!(response, url); + } catch (e) { + err = "failed parsing " + url + " to json"; + } + + if (err) { + return callback(err, false); + } + callback(null, ret); + } catch { + callback("failed loading " + url, false /* no retry */); + }; + } + + create(_languages: string | string[], _namespace: string, _key: string, _fallbackValue: string) { + // not supported + } +} + +export default Backend; diff --git a/src/aurelia-i18n.js b/src/aurelia-i18n.js deleted file mode 100644 index 8b9f2b42..00000000 --- a/src/aurelia-i18n.js +++ /dev/null @@ -1,103 +0,0 @@ -import * as LogManager from 'aurelia-logging'; -import {EventAggregator} from 'aurelia-event-aggregator'; -import {ViewResources} from 'aurelia-templating'; -import {Loader} from 'aurelia-loader'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {PLATFORM} from 'aurelia-pal'; - -import {I18N} from './i18n'; -import {RelativeTime} from './relativeTime'; -import { - DfValueConverter, - DfBindingBehavior -} from './df'; -import { - NfValueConverter, - NfBindingBehavior -} from './nf'; -import { - RtValueConverter, - RtBindingBehavior -} from './rt'; -import { - TValueConverter, - TBindingBehavior, - TCustomAttribute, - TParamsCustomAttribute -} from './t'; -import {BaseI18N} from './base-i18n'; -import {Backend} from './aurelia-i18n-loader'; - -function registerI18N(frameworkConfig, cb) { - let instance = new I18N(frameworkConfig.container.get(EventAggregator), frameworkConfig.container.get(BindingSignaler)); - frameworkConfig.container.registerInstance(I18N, instance); - - let ret = cb(instance); - - frameworkConfig.postTask(() => { - let resources = frameworkConfig.container.get(ViewResources); - let htmlBehaviorResource = resources.getAttribute('t'); - let htmlParamsResource = resources.getAttribute('t-params'); - let attributes = instance.i18next.options.attributes; - - // Register default attributes if none provided - if (!attributes) { - attributes = ['t', 'i18n']; - } - - attributes.forEach(alias => resources.registerAttribute(alias, htmlBehaviorResource, 't')); - attributes.forEach(alias => resources.registerAttribute(alias + '-params', htmlParamsResource, 't-params')); - }); - - return ret; -} - -function configure(frameworkConfig, cb): Promise { - if (cb === undefined || typeof cb !== 'function') { - let errorMsg = 'You need to provide a callback method to properly configure the library'; - throw errorMsg; - } - - frameworkConfig.globalResources(PLATFORM.moduleName('./t')); - frameworkConfig.globalResources(PLATFORM.moduleName('./nf')); - frameworkConfig.globalResources(PLATFORM.moduleName('./df')); - frameworkConfig.globalResources(PLATFORM.moduleName('./rt')); - - // check whether Intl is available, otherwise load the polyfill - if (PLATFORM.global.Intl === undefined) { - let i18nLogger = LogManager.getLogger('i18n'); - i18nLogger.warn('Intl API is not available. Trying to load the polyfill.'); - let loader = frameworkConfig.container.get(Loader); - const normalizeErrorMessage = 'Failed to normalize {module} while loading the Intl polyfill.'; - - return loader.normalize('aurelia-i18n').then((i18nName) => { - return loader.normalize('intl', i18nName).then((intlName) => { - return loader.loadModule(intlName).then((poly) => { - PLATFORM.global.Intl = poly; - return registerI18N(frameworkConfig, cb); - }, () => i18nLogger.warn('Failed to load the Intl polyfill.')); - }, () => i18nLogger.warn(normalizeErrorMessage.replace('{module}', 'intl'))); - }, () => i18nLogger.warn(normalizeErrorMessage.replace('{module}', 'aurelia-i18n'))); - } - - return Promise.resolve(registerI18N(frameworkConfig, cb)); -} - -export { - configure, - I18N, - RelativeTime, - DfValueConverter, - DfBindingBehavior, - NfValueConverter, - NfBindingBehavior, - RtValueConverter, - RtBindingBehavior, - TValueConverter, - TBindingBehavior, - TCustomAttribute, - TParamsCustomAttribute, - BaseI18N, - EventAggregator, - Backend -}; diff --git a/src/aurelia-i18n.ts b/src/aurelia-i18n.ts new file mode 100644 index 00000000..0cab021a --- /dev/null +++ b/src/aurelia-i18n.ts @@ -0,0 +1,64 @@ +import { FrameworkConfiguration } from "aurelia-framework"; +import { EventAggregator } from "aurelia-event-aggregator"; +import { ViewResources } from "aurelia-templating"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { PLATFORM } from "aurelia-pal"; + +import { I18N, AureliaEnhancedI18Next } from "./i18n"; +import { i18n } from "i18next"; + +export * from "./i18n"; +export { RelativeTime } from "./relativeTime"; +export { + DfValueConverter, + DfBindingBehavior +} from "./df"; +export { + NfValueConverter, + NfBindingBehavior +} from "./nf"; +export { + RtValueConverter, + RtBindingBehavior +} from "./rt"; +export { + TValueConverter, + TBindingBehavior, + TCustomAttribute, + TParamsCustomAttribute +} from "./t"; +export { Backend } from "./aurelia-i18n-loader"; + +export function configure(frameworkConfig: FrameworkConfiguration, cb: (instance: I18N) => AureliaEnhancedI18Next & i18n) { + if (cb === undefined || typeof cb !== "function") { + let errorMsg = "You need to provide a callback method to properly configure the library"; + throw errorMsg; + } + + frameworkConfig.globalResources(PLATFORM.moduleName("./t")); + frameworkConfig.globalResources(PLATFORM.moduleName("./nf")); + frameworkConfig.globalResources(PLATFORM.moduleName("./df")); + frameworkConfig.globalResources(PLATFORM.moduleName("./rt")); + + let instance = new I18N(frameworkConfig.container.get(EventAggregator), frameworkConfig.container.get(BindingSignaler)); + frameworkConfig.container.registerInstance(I18N, instance); + + let ret = cb(instance); + + frameworkConfig.postTask(() => { + let resources = frameworkConfig.container.get(ViewResources); + let htmlBehaviorResource = resources.getAttribute("t"); + let htmlParamsResource = resources.getAttribute("t-params"); + let attributes = instance.i18next.options.attributes as string[]; + + // Register default attributes if none provided + if (!attributes) { + attributes = ["t", "i18n"]; + } + + attributes.forEach((alias) => resources.registerAttribute(alias, htmlBehaviorResource, "t")); + attributes.forEach((alias) => resources.registerAttribute(alias + "-params", htmlParamsResource, "t-params")); + }); + + return ret; +} diff --git a/src/base-i18n.js b/src/base-i18n.js deleted file mode 100644 index 5b62dde2..00000000 --- a/src/base-i18n.js +++ /dev/null @@ -1,27 +0,0 @@ -import { I18N } from './i18n'; -import { DOM } from 'aurelia-pal'; -import { EventAggregator } from 'aurelia-event-aggregator'; - -export class BaseI18N { - - static inject() { - return [I18N, DOM.Element, EventAggregator]; - } - - constructor(i18n, element, ea) { - this.i18n = i18n; - this.element = element; - - this.__i18nDisposer = ea.subscribe('i18n:locale:changed', () => { - this.i18n.updateTranslations(this.element); - }); - } - - attached() { - this.i18n.updateTranslations(this.element); - } - - detached() { - this.__i18nDisposer.dispose(); - } -} diff --git a/src/customTypings/i18next-xhr-backend.d.ts b/src/customTypings/i18next-xhr-backend.d.ts deleted file mode 100644 index 0f31e197..00000000 --- a/src/customTypings/i18next-xhr-backend.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -declare module 'i18next-xhr-backend' { - export class Backend { - type: any; - services: any; - options: any; - constructor(services: any, options?: {}); - init(services: any, options?: {}): void; - readMulti(languages: any, namespaces: any, callback: any): void; - read(language: any, namespace: any, callback: any): void; - loadUrl(url: any, callback: any): void; - create(languages: any, namespace: any, key: any, fallbackValue: any): void; - } -} \ No newline at end of file diff --git a/src/customTypings/i18next.d.ts b/src/customTypings/i18next.d.ts deleted file mode 100644 index 4fb56477..00000000 --- a/src/customTypings/i18next.d.ts +++ /dev/null @@ -1,125 +0,0 @@ -// Type definitions for i18next v2.3.4 -// Project: http://i18next.com -// Definitions by: Michael Ledin -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -// Sources: https://github.com/i18next/i18next/ - - -declare namespace I18next { - interface ResourceStore { - [language: string]: ResourceStoreLanguage; - } - - interface ResourceStoreLanguage { - [namespace: string]: ResourceStoreKey; - } - - interface ResourceStoreKey { - [key: string]: any; - } - - interface InterpolationOptions { - escapeValue?: boolean; - prefix?: string; - suffix?: string; - prefixEscaped?: string; - suffixEscaped?: string; - unescapeSuffix?: string; - unescapePrefix?: string; - nestingPrefix?: string; - nestingSuffix?: string; - nestingPrefixEscaped?: string; - nestedSuffixEscaped?: string; - defaultVariables?: any; - } - - interface TranslationOptions { - defaultValue?: string; - count?: number; - context?: any; - replace?: any; - lng?:string; - lngs?:string[]; - fallbackLng?:string; - ns?:string|string[]; - keySeparator?:string; - nsSeparator?:string; - returnObjects?:boolean; - joinArrays?:string; - postProcess?:string|any[]; - interpolation?: InterpolationOptions; - } - - interface Options { - debug?: boolean; - resources?: ResourceStore; - lng?: string; - fallbackLng?: string; - ns?: string|string[]; - defaultNS?: string; - fallbackNS?: string|string[]; - whitelist?:string[]; - lowerCaseLng?: boolean; - load?: string - preload?: string[]; - keySeparator?: string; - nsSeparator?: string; - pluralSeparator?: string; - contextSeparator?: string; - saveMissing?: boolean; - saveMissingTo?: string; - missingKeyHandler?: (lng:string, ns:string, key:string, fallbackValue:string) => void; - parseMissingKeyHandler?: (key:string) => void; - appendNamespaceToMissingKey?: boolean; - postProcess?: string|any[]; - returnNull?: boolean; - returnEmptyString?: boolean; - returnObjects?: boolean; - returnedObjectHandler?: (key:string, value:string, options:any) => void; - joinArrays?: string; - overloadTranslationOptionHandler?: (args:any[]) => TranslationOptions; - interpolation?: InterpolationOptions; - detection?: any; - backend?: any; - cache?: any; - } - - type TranslationFunction = (key:string, options?:TranslationOptions) => string; - - class I18n { - constructor(options?:Options, callback?:(err:any, t:TranslationFunction) => void); - - init(options?:Options, callback?:(err:any, t:TranslationFunction) => void):I18n; - - loadResources(callback?:(err:any) => void):void; - - use(module:any):I18n; - - changeLanguage(lng:string, callback?:(err:any, t:TranslationFunction) => void):void; - - getFixedT(lng?:string, ns?:string|string[]):TranslationFunction; - - t(key:string, options?:TranslationOptions):string|any|Array; - - exists():boolean; - - setDefaultNamespace(ns:string):void; - - loadNamespaces(ns:string[], callback?:() => void):void; - - loadLanguages(lngs:string[], callback?:()=>void):void; - - dir(lng?:string):string; - - createInstance(options?:Options, callback?:(err:any, t:TranslationFunction) => void):I18n; - - cloneInstance(options?:Options, callback?:(err:any, t:TranslationFunction) => void):I18n; - } -} - -declare module 'i18next' { - var i18next:I18next.I18n; - - export = i18next; -} diff --git a/src/defaultTranslations/relative.time.js b/src/defaultTranslations/relative.time.js deleted file mode 100644 index fa855050..00000000 --- a/src/defaultTranslations/relative.time.js +++ /dev/null @@ -1,493 +0,0 @@ -/*eslint no-irregular-whitespace: 0*/ -export const translations = { - ar: { - translation: { - 'now': 'الآن', - 'second_ago': 'منذ __count__ ثانية', - 'second_ago_plural': 'منذ __count__ ثواني', - 'second_in': 'في __count__ ثانية', - 'second_in_plural': 'في __count__ ثواني', - 'minute_ago': 'منذ __count__ دقيقة', - 'minute_ago_plural': 'منذ __count__ دقائق', - 'minute_in': 'في __count__ دقيقة', - 'minute_in_plural': 'في __count__ دقائق', - 'hour_ago': 'منذ __count__ ساعة', - 'hour_ago_plural': 'منذ __count__ ساعات', - 'hour_in': 'في __count__ ساعة', - 'hour_in_plural': 'في __count__ ساعات', - 'day_ago': 'منذ __count__ يوم', - 'day_ago_plural': 'منذ __count__ أيام', - 'day_in': 'في __count__ يوم', - 'day_in_plural': 'في __count__ أيام', - 'month_ago': 'منذ __count__ شهر', - 'month_ago_plural': 'منذ __count__ أشهر', - 'month_in': 'في __count__ شهر', - 'month_in_plural': 'في __count__ أشهر', - 'year_ago': 'منذ __count__ سنة', - 'year_ago_plural': 'منذ __count__ سنوات', - 'year_in': 'في __count__ سنة', - 'year_in_plural': 'في __count__ سنوات' - } - }, - en: { - translation: { - 'now': 'just now', - 'second_ago': '__count__ second ago', - 'second_ago_plural': '__count__ seconds ago', - 'second_in': 'in __count__ second', - 'second_in_plural': 'in __count__ seconds', - 'minute_ago': '__count__ minute ago', - 'minute_ago_plural': '__count__ minutes ago', - 'minute_in': 'in __count__ minute', - 'minute_in_plural': 'in __count__ minutes', - 'hour_ago': '__count__ hour ago', - 'hour_ago_plural': '__count__ hours ago', - 'hour_in': 'in __count__ hour', - 'hour_in_plural': 'in __count__ hours', - 'day_ago': '__count__ day ago', - 'day_ago_plural': '__count__ days ago', - 'day_in': 'in __count__ day', - 'day_in_plural': 'in __count__ days', - 'month_ago': '__count__ month ago', - 'month_ago_plural': '__count__ months ago', - 'month_in': 'in __count__ month', - 'month_in_plural': 'in __count__ months', - 'year_ago': '__count__ year ago', - 'year_ago_plural': '__count__ years ago', - 'year_in': 'in __count__ year', - 'year_in_plural': 'in __count__ years' - } - }, - es: { - translation: { - 'now': 'ahora mismo', - 'second_ago': 'hace __count__ segundo', - 'second_ago_plural': 'hace __count__ segundos', - 'second_in': 'en __count__ segundo', - 'second_in_plural': 'en __count__ segundos', - 'minute_ago': 'hace __count__ minuto', - 'minute_ago_plural': 'hace __count__ minutos', - 'minute_in': 'en __count__ minuto', - 'minute_in_plural': 'en __count__ minutos', - 'hour_ago': 'hace __count__ hora', - 'hour_ago_plural': 'hace __count__ horas', - 'hour_in': 'en __count__ hora', - 'hour_in_plural': 'en __count__ horas', - 'day_ago': 'hace __count__ día', - 'day_ago_plural': 'hace __count__ días', - 'day_in': 'en __count__ día', - 'day_in_plural': 'en __count__ días', - 'month_ago': 'hace __count__ mes', - 'month_ago_plural': 'hace __count__ meses', - 'month_in': 'en __count__ mes', - 'month_in_plural': 'en __count__ meses', - 'year_ago': 'hace __count__ año', - 'year_ago_plural': 'hace __count__ años', - 'year_in': 'en __count__ año', - 'year_in_plural': 'en __count__ años' - } - }, - it: { - translation: { - 'now': 'adesso', - 'second_ago': '__count__ secondo fa', - 'second_ago_plural': '__count__ secondi fa', - 'second_in': 'in __count__ secondo', - 'second_in_plural': 'in __count__ secondi', - 'minute_ago': '__count__ minuto fa', - 'minute_ago_plural': '__count__ minuti fa', - 'minute_in': 'in __count__ minuto', - 'minute_in_plural': 'in __count__ minuti', - 'hour_ago': '__count__ ora fa', - 'hour_ago_plural': '__count__ ore fa', - 'hour_in': 'in __count__ ora', - 'hour_in_plural': 'in __count__ ore', - 'day_ago': '__count__ giorno fa', - 'day_ago_plural': '__count__ giorni fa', - 'day_in': 'in __count__ giorno', - 'day_in_plural': 'in __count__ giorni', - 'month_ago': '__count__ mese fa', - 'month_ago_plural': '__count__ mesi fa', - 'month_in': 'in __count__ mese', - 'month_in_plural': 'in __count__ mesi', - 'year_ago': '__count__ anno fa', - 'year_ago_plural': '__count__ anni fa', - 'year_in': 'in __count__ anno', - 'year_in_plural': 'in __count__ anni' - } - }, - de: { - translation: { - 'now': 'jetzt gerade', - 'second_ago': 'vor __count__ Sekunde', - 'second_ago_plural': 'vor __count__ Sekunden', - 'second_in': 'in __count__ Sekunde', - 'second_in_plural': 'in __count__ Sekunden', - 'minute_ago': 'vor __count__ Minute', - 'minute_ago_plural': 'vor __count__ Minuten', - 'minute_in': 'in __count__ Minute', - 'minute_in_plural': 'in __count__ Minuten', - 'hour_ago': 'vor __count__ Stunde', - 'hour_ago_plural': 'vor __count__ Stunden', - 'hour_in': 'in __count__ Stunde', - 'hour_in_plural': 'in __count__ Stunden', - 'day_ago': 'vor __count__ Tag', - 'day_ago_plural': 'vor __count__ Tagen', - 'day_in': 'in __count__ Tag', - 'day_in_plural': 'in __count__ Tagen', - 'month_ago': 'vor __count__ Monat', - 'month_ago_plural': 'vor __count__ Monaten', - 'month_in': 'in __count__ Monat', - 'month_in_plural': 'in __count__ Monaten', - 'year_ago': 'vor __count__ Jahr', - 'year_ago_plural': 'vor __count__ Jahren', - 'year_in': 'in __count__ Jahr', - 'year_in_plural': 'in __count__ Jahren' - } - }, - nl: { - translation: { - 'now': 'zonet', - 'second_ago': '__count__ seconde geleden', - 'second_ago_plural': '__count__ seconden geleden', - 'second_in': 'in __count__ seconde', - 'second_in_plural': 'in __count__ seconden', - 'minute_ago': '__count__ minuut geleden', - 'minute_ago_plural': '__count__ minuten geleden', - 'minute_in': 'in __count__ minuut', - 'minute_in_plural': 'in __count__ minuten', - 'hour_ago': '__count__ uur geleden', - 'hour_ago_plural': '__count__ uren geleden', - 'hour_in': 'in __count__ uur', - 'hour_in_plural': 'in __count__ uren', - 'day_ago': '__count__ dag geleden', - 'day_ago_plural': '__count__ dagen geleden', - 'day_in': 'in __count__ dag', - 'day_in_plural': 'in __count__ dagen', - 'month_ago': '__count__ maand geleden', - 'month_ago_plural': '__count__ maanden geleden', - 'month_in': 'in __count__ maand', - 'month_in_plural': 'in __count__ maanden', - 'year_ago': '__count__ jaar geleden', - 'year_ago_plural': '__count__ jaren geleden', - 'year_in': 'in __count__ jaar', - 'year_in_plural': 'in __count__ jaren' - } - }, - fr: { - translation: { - 'now': 'maintenant', - 'second_ago': 'il y a __count__ seconde', - 'second_ago_plural': 'il y a __count__ secondes', - 'second_in': 'dans __count__ seconde', - 'second_in_plural': 'dans __count__ secondes', - 'minute_ago': 'il y a __count__ minute', - 'minute_ago_plural': 'il y a __count__ minutes', - 'minute_in': 'dans __count__ minute', - 'minute_in_plural': 'dans __count__ minutes', - 'hour_ago': 'il y a __count__ heure', - 'hour_ago_plural': 'il y a __count__ heures', - 'hour_in': 'dans __count__ heure', - 'hour_in_plural': 'dans __count__ heures', - 'day_ago': 'il y a __count__ jour', - 'day_ago_plural': 'il y a __count__ jours', - 'day_in': 'dans __count__ jour', - 'day_in_plural': 'dans __count__ jours', - 'month_ago': 'il y a __count__ mois', - 'month_ago_plural': 'il y a __count__ mois', - 'month_in': 'dans __count__ mois', - 'month_in_plural': 'dans __count__ mois', - 'year_ago': 'il y a __count__ an', - 'year_ago_plural': 'il y a __count__ ans', - 'year_in': 'dans __count__ an', - 'year_in_plural': 'dans __count__ ans' - } - }, - th: { - translation: { - 'now': 'เมื่อกี้', - 'second_ago': '__count__ วินาที ที่ผ่านมา', - 'second_ago_plural': '__count__ วินาที ที่ผ่านมา', - 'second_in': 'อีก __count__ วินาที', - 'second_in_plural': 'อีก __count__ วินาที', - 'minute_ago': '__count__ นาที ที่ผ่านมา', - 'minute_ago_plural': '__count__ นาที ที่ผ่านมา', - 'minute_in': 'อีก __count__ นาที', - 'minute_in_plural': 'อีก __count__ นาที', - 'hour_ago': '__count__ ชั่วโมง ที่ผ่านมา', - 'hour_ago_plural': '__count__ ชั่วโมง ที่ผ่านมา', - 'hour_in': 'อีก __count__ ชั่วโมง', - 'hour_in_plural': 'อีก __count__ ชั่วโมง', - 'day_ago': '__count__ วัน ที่ผ่านมา', - 'day_ago_plural': '__count__ วัน ที่ผ่านมา', - 'day_in': 'อีก __count__ วัน', - 'day_in_plural': 'อีก __count__ วัน' - } - }, - sv: { - translation: { - 'now': 'just nu', - 'second_ago': '__count__ sekund sedan', - 'second_ago_plural': '__count__ sekunder sedan', - 'second_in': 'om __count__ sekund', - 'second_in_plural': 'om __count__ sekunder', - 'minute_ago': '__count__ minut sedan', - 'minute_ago_plural': '__count__ minuter sedan', - 'minute_in': 'om __count__ minut', - 'minute_in_plural': 'om __count__ minuter', - 'hour_ago': '__count__ timme sedan', - 'hour_ago_plural': '__count__ timmar sedan', - 'hour_in': 'om __count__ timme', - 'hour_in_plural': 'om __count__ timmar', - 'day_ago': '__count__ dag sedan', - 'day_ago_plural': '__count__ dagar sedan', - 'day_in': 'om __count__ dag', - 'day_in_plural': 'om __count__ dagar' - } - }, - da: { - translation: { - 'now': 'lige nu', - 'second_ago': '__count__ sekunder siden', - 'second_ago_plural': '__count__ sekunder siden', - 'second_in': 'om __count__ sekund', - 'second_in_plural': 'om __count__ sekunder', - 'minute_ago': '__count__ minut siden', - 'minute_ago_plural': '__count__ minutter siden', - 'minute_in': 'om __count__ minut', - 'minute_in_plural': 'om __count__ minutter', - 'hour_ago': '__count__ time siden', - 'hour_ago_plural': '__count__ timer siden', - 'hour_in': 'om __count__ time', - 'hour_in_plural': 'om __count__ timer', - 'day_ago': '__count__ dag siden', - 'day_ago_plural': '__count__ dage siden', - 'day_in': 'om __count__ dag', - 'day_in_plural': 'om __count__ dage' - } - }, - no: { - translation: { - 'now': 'akkurat nå', - 'second_ago': '__count__ sekund siden', - 'second_ago_plural': '__count__ sekunder siden', - 'second_in': 'om __count__ sekund', - 'second_in_plural': 'om __count__ sekunder', - 'minute_ago': '__count__ minutt siden', - 'minute_ago_plural': '__count__ minutter siden', - 'minute_in': 'om __count__ minutt', - 'minute_in_plural': 'om __count__ minutter', - 'hour_ago': '__count__ time siden', - 'hour_ago_plural': '__count__ timer siden', - 'hour_in': 'om __count__ time', - 'hour_in_plural': 'om __count__ timer', - 'day_ago': '__count__ dag siden', - 'day_ago_plural': '__count__ dager siden', - 'day_in': 'om __count__ dag', - 'day_in_plural': 'om __count__ dager' - } - }, - ja: { - translation: { - 'now': 'たった今', - 'second_ago': '__count__ 秒前', - 'second_ago_plural': '__count__ 秒前', - 'second_in': 'あと __count__ 秒', - 'second_in_plural': 'あと __count__ 秒', - 'minute_ago': '__count__ 分前', - 'minute_ago_plural': '__count__ 分前', - 'minute_in': 'あと __count__ 分', - 'minute_in_plural': 'あと __count__ 分', - 'hour_ago': '__count__ 時間前', - 'hour_ago_plural': '__count__ 時間前', - 'hour_in': 'あと __count__ 時間', - 'hour_in_plural': 'あと __count__ 時間', - 'day_ago': '__count__ 日間前', - 'day_ago_plural': '__count__ 日間前', - 'day_in': 'あと __count__ 日間', - 'day_in_plural': 'あと __count__ 日間', - 'month_ago': '__count__ ヶ月前', - 'month_ago_plural': '__count__ ヶ月前', - 'month_in': 'あと __count__ ヶ月前', - 'month_in_plural': 'あと __count__ ヶ月前', - 'year_ago': '__count__ 年前', - 'year_ago_plural': '__count__ 年前', - 'year_in': 'あと __count__ 年', - 'year_in_plural': 'あと __count__ 年' - } - }, - jp: { - translation: { - 'now': 'たった今', - 'second_ago': '__count__ 秒前', - 'second_ago_plural': '__count__ 秒前', - 'second_in': 'あと __count__ 秒', - 'second_in_plural': 'あと __count__ 秒', - 'minute_ago': '__count__ 分前', - 'minute_ago_plural': '__count__ 分前', - 'minute_in': 'あと __count__ 分', - 'minute_in_plural': 'あと __count__ 分', - 'hour_ago': '__count__ 時間前', - 'hour_ago_plural': '__count__ 時間前', - 'hour_in': 'あと __count__ 時間', - 'hour_in_plural': 'あと __count__ 時間', - 'day_ago': '__count__ 日間前', - 'day_ago_plural': '__count__ 日間前', - 'day_in': 'あと __count__ 日間', - 'day_in_plural': 'あと __count__ 日間', - 'month_ago': '__count__ ヶ月前', - 'month_ago_plural': '__count__ ヶ月前', - 'month_in': 'あと __count__ ヶ月前', - 'month_in_plural': 'あと __count__ ヶ月前', - 'year_ago': '__count__ 年前', - 'year_ago_plural': '__count__ 年前', - 'year_in': 'あと __count__ 年', - 'year_in_plural': 'あと __count__ 年' - } - }, - pt: { - translation: { - 'now': 'neste exato momento', - 'second_ago': '__count__ segundo atrás', - 'second_ago_plural': '__count__ segundos atrás', - 'second_in': 'em __count__ segundo', - 'second_in_plural': 'em __count__ segundos', - 'minute_ago': '__count__ minuto atrás', - 'minute_ago_plural': '__count__ minutos atrás', - 'minute_in': 'em __count__ minuto', - 'minute_in_plural': 'em __count__ minutos', - 'hour_ago': '__count__ hora atrás', - 'hour_ago_plural': '__count__ horas atrás', - 'hour_in': 'em __count__ hora', - 'hour_in_plural': 'em __count__ horas', - 'day_ago': '__count__ dia atrás', - 'day_ago_plural': '__count__ dias atrás', - 'day_in': 'em __count__ dia', - 'day_in_plural': 'em __count__ dias', - 'month_ago': '__count__ mês atrás', - 'month_ago_plural': '__count__ meses atrás', - 'month_in': 'em __count__ mês', - 'month_in_plural': 'em __count__ meses', - 'year_ago': '__count__ ano atrás', - 'year_ago_plural': '__count__ anos atrás', - 'year_in': 'em __count__ ano', - 'year_in_plural': 'em __count__ anos' - } - }, - zh: { - translation: { - 'now': '刚才', - 'second_ago': '__count__ 秒钟前', - 'second_ago_plural': '__count__ 秒钟前', - 'second_in': '__count__ 秒内', - 'second_in_plural': '__count__ 秒内', - 'minute_ago': '__count__ 分钟前', - 'minute_ago_plural': '__count__ 分钟前', - 'minute_in': '__count__ 分钟内', - 'minute_in_plural': '__count__ 分钟内', - 'hour_ago': '__count__ 小时前', - 'hour_ago_plural': '__count__ 小时前', - 'hour_in': '__count__ 小时内', - 'hour_in_plural': '__count__ 小时内', - 'day_ago': '__count__ 天前', - 'day_ago_plural': '__count__ 天前', - 'day_in': '__count__ 天内', - 'day_in_plural': '__count__ 天内', - 'month_ago': '__count__ 月前', - 'month_ago_plural': '__count__ 月前', - 'month_in': '__count__ 月内', - 'month_in_plural': '__count__ 月内', - 'year_ago': '__count__ 年前', - 'year_ago_plural': '__count__ 年前', - 'year_in': '__count__ 年内', - 'year_in_plural': '__count__ 年内' - } - }, - 'zh-CN': { - translation: { - 'now': '刚才', - 'second_ago': '__count__ 秒钟前', - 'second_ago_plural': '__count__ 秒钟前', - 'second_in': '__count__ 秒内', - 'second_in_plural': '__count__ 秒内', - 'minute_ago': '__count__ 分钟前', - 'minute_ago_plural': '__count__ 分钟前', - 'minute_in': '__count__ 分钟内', - 'minute_in_plural': '__count__ 分钟内', - 'hour_ago': '__count__ 小时前', - 'hour_ago_plural': '__count__ 小时前', - 'hour_in': '__count__ 小时内', - 'hour_in_plural': '__count__ 小时内', - 'day_ago': '__count__ 天前', - 'day_ago_plural': '__count__ 天前', - 'day_in': '__count__ 天内', - 'day_in_plural': '__count__ 天内', - 'month_ago': '__count__ 月前', - 'month_ago_plural': '__count__ 月前', - 'month_in': '__count__ 月内', - 'month_in_plural': '__count__ 月内', - 'year_ago': '__count__ 年前', - 'year_ago_plural': '__count__ 年前', - 'year_in': '__count__ 年内', - 'year_in_plural': '__count__ 年内' - } - }, - 'zh-HK': { - translation: { - 'now': '剛才', - 'second_ago': '__count__ 秒鐘前', - 'second_ago_plural': '__count__ 秒鐘前', - 'second_in': '__count__ 秒內', - 'second_in_plural': '__count__ 秒內', - 'minute_ago': '__count__ 分鐘前', - 'minute_ago_plural': '__count__ 分鐘前', - 'minute_in': '__count__ 分鐘內', - 'minute_in_plural': '__count__ 分鐘內', - 'hour_ago': '__count__ 小時前', - 'hour_ago_plural': '__count__ 小時前', - 'hour_in': '__count__ 小時內', - 'hour_in_plural': '__count__ 小時內', - 'day_ago': '__count__ 天前', - 'day_ago_plural': '__count__ 天前', - 'day_in': '__count__ 天內', - 'day_in_plural': '__count__ 天內', - 'month_ago': '__count__ 月前', - 'month_ago_plural': '__count__ 月前', - 'month_in': '__count__ 月內', - 'month_in_plural': '__count__ 月內', - 'year_ago': '__count__ 年前', - 'year_ago_plural': '__count__ 年前', - 'year_in': '__count__ 年內', - 'year_in_plural': '__count__ 年內' - } - }, - 'zh-TW': { - translation: { - 'now': '剛才', - 'second_ago': '__count__ 秒鐘前', - 'second_ago_plural': '__count__ 秒鐘前', - 'second_in': '__count__ 秒內', - 'second_in_plural': '__count__ 秒內', - 'minute_ago': '__count__ 分鐘前', - 'minute_ago_plural': '__count__ 分鐘前', - 'minute_in': '__count__ 分鐘內', - 'minute_in_plural': '__count__ 分鐘內', - 'hour_ago': '__count__ 小時前', - 'hour_ago_plural': '__count__ 小時前', - 'hour_in': '__count__ 小時內', - 'hour_in_plural': '__count__ 小時內', - 'day_ago': '__count__ 天前', - 'day_ago_plural': '__count__ 天前', - 'day_in': '__count__ 天內', - 'day_in_plural': '__count__ 天內', - 'month_ago': '__count__ 月前', - 'month_ago_plural': '__count__ 月前', - 'month_in': '__count__ 月內', - 'month_in_plural': '__count__ 月內', - 'year_ago': '__count__ 年前', - 'year_ago_plural': '__count__ 年前', - 'year_in': '__count__ 年內', - 'year_in_plural': '__count__ 年內' - } - } -}; diff --git a/src/defaultTranslations/relative.time.ts b/src/defaultTranslations/relative.time.ts new file mode 100644 index 00000000..2a582d86 --- /dev/null +++ b/src/defaultTranslations/relative.time.ts @@ -0,0 +1,492 @@ +export const translations = { + ar: { + translation: { + "now": "الآن", + "second_ago": "منذ __count__ ثانية", + "second_ago_plural": "منذ __count__ ثواني", + "second_in": "في __count__ ثانية", + "second_in_plural": "في __count__ ثواني", + "minute_ago": "منذ __count__ دقيقة", + "minute_ago_plural": "منذ __count__ دقائق", + "minute_in": "في __count__ دقيقة", + "minute_in_plural": "في __count__ دقائق", + "hour_ago": "منذ __count__ ساعة", + "hour_ago_plural": "منذ __count__ ساعات", + "hour_in": "في __count__ ساعة", + "hour_in_plural": "في __count__ ساعات", + "day_ago": "منذ __count__ يوم", + "day_ago_plural": "منذ __count__ أيام", + "day_in": "في __count__ يوم", + "day_in_plural": "في __count__ أيام", + "month_ago": "منذ __count__ شهر", + "month_ago_plural": "منذ __count__ أشهر", + "month_in": "في __count__ شهر", + "month_in_plural": "في __count__ أشهر", + "year_ago": "منذ __count__ سنة", + "year_ago_plural": "منذ __count__ سنوات", + "year_in": "في __count__ سنة", + "year_in_plural": "في __count__ سنوات" + } + }, + en: { + translation: { + "now": "just now", + "second_ago": "__count__ second ago", + "second_ago_plural": "__count__ seconds ago", + "second_in": "in __count__ second", + "second_in_plural": "in __count__ seconds", + "minute_ago": "__count__ minute ago", + "minute_ago_plural": "__count__ minutes ago", + "minute_in": "in __count__ minute", + "minute_in_plural": "in __count__ minutes", + "hour_ago": "__count__ hour ago", + "hour_ago_plural": "__count__ hours ago", + "hour_in": "in __count__ hour", + "hour_in_plural": "in __count__ hours", + "day_ago": "__count__ day ago", + "day_ago_plural": "__count__ days ago", + "day_in": "in __count__ day", + "day_in_plural": "in __count__ days", + "month_ago": "__count__ month ago", + "month_ago_plural": "__count__ months ago", + "month_in": "in __count__ month", + "month_in_plural": "in __count__ months", + "year_ago": "__count__ year ago", + "year_ago_plural": "__count__ years ago", + "year_in": "in __count__ year", + "year_in_plural": "in __count__ years" + } + }, + es: { + translation: { + "now": "ahora mismo", + "second_ago": "hace __count__ segundo", + "second_ago_plural": "hace __count__ segundos", + "second_in": "en __count__ segundo", + "second_in_plural": "en __count__ segundos", + "minute_ago": "hace __count__ minuto", + "minute_ago_plural": "hace __count__ minutos", + "minute_in": "en __count__ minuto", + "minute_in_plural": "en __count__ minutos", + "hour_ago": "hace __count__ hora", + "hour_ago_plural": "hace __count__ horas", + "hour_in": "en __count__ hora", + "hour_in_plural": "en __count__ horas", + "day_ago": "hace __count__ día", + "day_ago_plural": "hace __count__ días", + "day_in": "en __count__ día", + "day_in_plural": "en __count__ días", + "month_ago": "hace __count__ mes", + "month_ago_plural": "hace __count__ meses", + "month_in": "en __count__ mes", + "month_in_plural": "en __count__ meses", + "year_ago": "hace __count__ año", + "year_ago_plural": "hace __count__ años", + "year_in": "en __count__ año", + "year_in_plural": "en __count__ años" + } + }, + it: { + translation: { + "now": "adesso", + "second_ago": "__count__ secondo fa", + "second_ago_plural": "__count__ secondi fa", + "second_in": "in __count__ secondo", + "second_in_plural": "in __count__ secondi", + "minute_ago": "__count__ minuto fa", + "minute_ago_plural": "__count__ minuti fa", + "minute_in": "in __count__ minuto", + "minute_in_plural": "in __count__ minuti", + "hour_ago": "__count__ ora fa", + "hour_ago_plural": "__count__ ore fa", + "hour_in": "in __count__ ora", + "hour_in_plural": "in __count__ ore", + "day_ago": "__count__ giorno fa", + "day_ago_plural": "__count__ giorni fa", + "day_in": "in __count__ giorno", + "day_in_plural": "in __count__ giorni", + "month_ago": "__count__ mese fa", + "month_ago_plural": "__count__ mesi fa", + "month_in": "in __count__ mese", + "month_in_plural": "in __count__ mesi", + "year_ago": "__count__ anno fa", + "year_ago_plural": "__count__ anni fa", + "year_in": "in __count__ anno", + "year_in_plural": "in __count__ anni" + } + }, + de: { + translation: { + "now": "jetzt gerade", + "second_ago": "vor __count__ Sekunde", + "second_ago_plural": "vor __count__ Sekunden", + "second_in": "in __count__ Sekunde", + "second_in_plural": "in __count__ Sekunden", + "minute_ago": "vor __count__ Minute", + "minute_ago_plural": "vor __count__ Minuten", + "minute_in": "in __count__ Minute", + "minute_in_plural": "in __count__ Minuten", + "hour_ago": "vor __count__ Stunde", + "hour_ago_plural": "vor __count__ Stunden", + "hour_in": "in __count__ Stunde", + "hour_in_plural": "in __count__ Stunden", + "day_ago": "vor __count__ Tag", + "day_ago_plural": "vor __count__ Tagen", + "day_in": "in __count__ Tag", + "day_in_plural": "in __count__ Tagen", + "month_ago": "vor __count__ Monat", + "month_ago_plural": "vor __count__ Monaten", + "month_in": "in __count__ Monat", + "month_in_plural": "in __count__ Monaten", + "year_ago": "vor __count__ Jahr", + "year_ago_plural": "vor __count__ Jahren", + "year_in": "in __count__ Jahr", + "year_in_plural": "in __count__ Jahren" + } + }, + nl: { + translation: { + "now": "zonet", + "second_ago": "__count__ seconde geleden", + "second_ago_plural": "__count__ seconden geleden", + "second_in": "in __count__ seconde", + "second_in_plural": "in __count__ seconden", + "minute_ago": "__count__ minuut geleden", + "minute_ago_plural": "__count__ minuten geleden", + "minute_in": "in __count__ minuut", + "minute_in_plural": "in __count__ minuten", + "hour_ago": "__count__ uur geleden", + "hour_ago_plural": "__count__ uren geleden", + "hour_in": "in __count__ uur", + "hour_in_plural": "in __count__ uren", + "day_ago": "__count__ dag geleden", + "day_ago_plural": "__count__ dagen geleden", + "day_in": "in __count__ dag", + "day_in_plural": "in __count__ dagen", + "month_ago": "__count__ maand geleden", + "month_ago_plural": "__count__ maanden geleden", + "month_in": "in __count__ maand", + "month_in_plural": "in __count__ maanden", + "year_ago": "__count__ jaar geleden", + "year_ago_plural": "__count__ jaren geleden", + "year_in": "in __count__ jaar", + "year_in_plural": "in __count__ jaren" + } + }, + fr: { + translation: { + "now": "maintenant", + "second_ago": "il y a __count__ seconde", + "second_ago_plural": "il y a __count__ secondes", + "second_in": "dans __count__ seconde", + "second_in_plural": "dans __count__ secondes", + "minute_ago": "il y a __count__ minute", + "minute_ago_plural": "il y a __count__ minutes", + "minute_in": "dans __count__ minute", + "minute_in_plural": "dans __count__ minutes", + "hour_ago": "il y a __count__ heure", + "hour_ago_plural": "il y a __count__ heures", + "hour_in": "dans __count__ heure", + "hour_in_plural": "dans __count__ heures", + "day_ago": "il y a __count__ jour", + "day_ago_plural": "il y a __count__ jours", + "day_in": "dans __count__ jour", + "day_in_plural": "dans __count__ jours", + "month_ago": "il y a __count__ mois", + "month_ago_plural": "il y a __count__ mois", + "month_in": "dans __count__ mois", + "month_in_plural": "dans __count__ mois", + "year_ago": "il y a __count__ an", + "year_ago_plural": "il y a __count__ ans", + "year_in": "dans __count__ an", + "year_in_plural": "dans __count__ ans" + } + }, + th: { + translation: { + "now": "เมื่อกี้", + "second_ago": "__count__ วินาที ที่ผ่านมา", + "second_ago_plural": "__count__ วินาที ที่ผ่านมา", + "second_in": "อีก __count__ วินาที", + "second_in_plural": "อีก __count__ วินาที", + "minute_ago": "__count__ นาที ที่ผ่านมา", + "minute_ago_plural": "__count__ นาที ที่ผ่านมา", + "minute_in": "อีก __count__ นาที", + "minute_in_plural": "อีก __count__ นาที", + "hour_ago": "__count__ ชั่วโมง ที่ผ่านมา", + "hour_ago_plural": "__count__ ชั่วโมง ที่ผ่านมา", + "hour_in": "อีก __count__ ชั่วโมง", + "hour_in_plural": "อีก __count__ ชั่วโมง", + "day_ago": "__count__ วัน ที่ผ่านมา", + "day_ago_plural": "__count__ วัน ที่ผ่านมา", + "day_in": "อีก __count__ วัน", + "day_in_plural": "อีก __count__ วัน" + } + }, + sv: { + translation: { + "now": "just nu", + "second_ago": "__count__ sekund sedan", + "second_ago_plural": "__count__ sekunder sedan", + "second_in": "om __count__ sekund", + "second_in_plural": "om __count__ sekunder", + "minute_ago": "__count__ minut sedan", + "minute_ago_plural": "__count__ minuter sedan", + "minute_in": "om __count__ minut", + "minute_in_plural": "om __count__ minuter", + "hour_ago": "__count__ timme sedan", + "hour_ago_plural": "__count__ timmar sedan", + "hour_in": "om __count__ timme", + "hour_in_plural": "om __count__ timmar", + "day_ago": "__count__ dag sedan", + "day_ago_plural": "__count__ dagar sedan", + "day_in": "om __count__ dag", + "day_in_plural": "om __count__ dagar" + } + }, + da: { + translation: { + "now": "lige nu", + "second_ago": "__count__ sekunder siden", + "second_ago_plural": "__count__ sekunder siden", + "second_in": "om __count__ sekund", + "second_in_plural": "om __count__ sekunder", + "minute_ago": "__count__ minut siden", + "minute_ago_plural": "__count__ minutter siden", + "minute_in": "om __count__ minut", + "minute_in_plural": "om __count__ minutter", + "hour_ago": "__count__ time siden", + "hour_ago_plural": "__count__ timer siden", + "hour_in": "om __count__ time", + "hour_in_plural": "om __count__ timer", + "day_ago": "__count__ dag siden", + "day_ago_plural": "__count__ dage siden", + "day_in": "om __count__ dag", + "day_in_plural": "om __count__ dage" + } + }, + no: { + translation: { + "now": "akkurat nå", + "second_ago": "__count__ sekund siden", + "second_ago_plural": "__count__ sekunder siden", + "second_in": "om __count__ sekund", + "second_in_plural": "om __count__ sekunder", + "minute_ago": "__count__ minutt siden", + "minute_ago_plural": "__count__ minutter siden", + "minute_in": "om __count__ minutt", + "minute_in_plural": "om __count__ minutter", + "hour_ago": "__count__ time siden", + "hour_ago_plural": "__count__ timer siden", + "hour_in": "om __count__ time", + "hour_in_plural": "om __count__ timer", + "day_ago": "__count__ dag siden", + "day_ago_plural": "__count__ dager siden", + "day_in": "om __count__ dag", + "day_in_plural": "om __count__ dager" + } + }, + ja: { + translation: { + "now": "たった今", + "second_ago": "__count__ 秒前", + "second_ago_plural": "__count__ 秒前", + "second_in": "あと __count__ 秒", + "second_in_plural": "あと __count__ 秒", + "minute_ago": "__count__ 分前", + "minute_ago_plural": "__count__ 分前", + "minute_in": "あと __count__ 分", + "minute_in_plural": "あと __count__ 分", + "hour_ago": "__count__ 時間前", + "hour_ago_plural": "__count__ 時間前", + "hour_in": "あと __count__ 時間", + "hour_in_plural": "あと __count__ 時間", + "day_ago": "__count__ 日間前", + "day_ago_plural": "__count__ 日間前", + "day_in": "あと __count__ 日間", + "day_in_plural": "あと __count__ 日間", + "month_ago": "__count__ ヶ月前", + "month_ago_plural": "__count__ ヶ月前", + "month_in": "あと __count__ ヶ月前", + "month_in_plural": "あと __count__ ヶ月前", + "year_ago": "__count__ 年前", + "year_ago_plural": "__count__ 年前", + "year_in": "あと __count__ 年", + "year_in_plural": "あと __count__ 年" + } + }, + jp: { + translation: { + "now": "たった今", + "second_ago": "__count__ 秒前", + "second_ago_plural": "__count__ 秒前", + "second_in": "あと __count__ 秒", + "second_in_plural": "あと __count__ 秒", + "minute_ago": "__count__ 分前", + "minute_ago_plural": "__count__ 分前", + "minute_in": "あと __count__ 分", + "minute_in_plural": "あと __count__ 分", + "hour_ago": "__count__ 時間前", + "hour_ago_plural": "__count__ 時間前", + "hour_in": "あと __count__ 時間", + "hour_in_plural": "あと __count__ 時間", + "day_ago": "__count__ 日間前", + "day_ago_plural": "__count__ 日間前", + "day_in": "あと __count__ 日間", + "day_in_plural": "あと __count__ 日間", + "month_ago": "__count__ ヶ月前", + "month_ago_plural": "__count__ ヶ月前", + "month_in": "あと __count__ ヶ月前", + "month_in_plural": "あと __count__ ヶ月前", + "year_ago": "__count__ 年前", + "year_ago_plural": "__count__ 年前", + "year_in": "あと __count__ 年", + "year_in_plural": "あと __count__ 年" + } + }, + pt: { + translation: { + "now": "neste exato momento", + "second_ago": "__count__ segundo atrás", + "second_ago_plural": "__count__ segundos atrás", + "second_in": "em __count__ segundo", + "second_in_plural": "em __count__ segundos", + "minute_ago": "__count__ minuto atrás", + "minute_ago_plural": "__count__ minutos atrás", + "minute_in": "em __count__ minuto", + "minute_in_plural": "em __count__ minutos", + "hour_ago": "__count__ hora atrás", + "hour_ago_plural": "__count__ horas atrás", + "hour_in": "em __count__ hora", + "hour_in_plural": "em __count__ horas", + "day_ago": "__count__ dia atrás", + "day_ago_plural": "__count__ dias atrás", + "day_in": "em __count__ dia", + "day_in_plural": "em __count__ dias", + "month_ago": "__count__ mês atrás", + "month_ago_plural": "__count__ meses atrás", + "month_in": "em __count__ mês", + "month_in_plural": "em __count__ meses", + "year_ago": "__count__ ano atrás", + "year_ago_plural": "__count__ anos atrás", + "year_in": "em __count__ ano", + "year_in_plural": "em __count__ anos" + } + }, + zh: { + translation: { + "now": "刚才", + "second_ago": "__count__ 秒钟前", + "second_ago_plural": "__count__ 秒钟前", + "second_in": "__count__ 秒内", + "second_in_plural": "__count__ 秒内", + "minute_ago": "__count__ 分钟前", + "minute_ago_plural": "__count__ 分钟前", + "minute_in": "__count__ 分钟内", + "minute_in_plural": "__count__ 分钟内", + "hour_ago": "__count__ 小时前", + "hour_ago_plural": "__count__ 小时前", + "hour_in": "__count__ 小时内", + "hour_in_plural": "__count__ 小时内", + "day_ago": "__count__ 天前", + "day_ago_plural": "__count__ 天前", + "day_in": "__count__ 天内", + "day_in_plural": "__count__ 天内", + "month_ago": "__count__ 月前", + "month_ago_plural": "__count__ 月前", + "month_in": "__count__ 月内", + "month_in_plural": "__count__ 月内", + "year_ago": "__count__ 年前", + "year_ago_plural": "__count__ 年前", + "year_in": "__count__ 年内", + "year_in_plural": "__count__ 年内" + } + }, + "zh-CN": { + translation: { + "now": "刚才", + "second_ago": "__count__ 秒钟前", + "second_ago_plural": "__count__ 秒钟前", + "second_in": "__count__ 秒内", + "second_in_plural": "__count__ 秒内", + "minute_ago": "__count__ 分钟前", + "minute_ago_plural": "__count__ 分钟前", + "minute_in": "__count__ 分钟内", + "minute_in_plural": "__count__ 分钟内", + "hour_ago": "__count__ 小时前", + "hour_ago_plural": "__count__ 小时前", + "hour_in": "__count__ 小时内", + "hour_in_plural": "__count__ 小时内", + "day_ago": "__count__ 天前", + "day_ago_plural": "__count__ 天前", + "day_in": "__count__ 天内", + "day_in_plural": "__count__ 天内", + "month_ago": "__count__ 月前", + "month_ago_plural": "__count__ 月前", + "month_in": "__count__ 月内", + "month_in_plural": "__count__ 月内", + "year_ago": "__count__ 年前", + "year_ago_plural": "__count__ 年前", + "year_in": "__count__ 年内", + "year_in_plural": "__count__ 年内" + } + }, + "zh-HK": { + translation: { + "now": "剛才", + "second_ago": "__count__ 秒鐘前", + "second_ago_plural": "__count__ 秒鐘前", + "second_in": "__count__ 秒內", + "second_in_plural": "__count__ 秒內", + "minute_ago": "__count__ 分鐘前", + "minute_ago_plural": "__count__ 分鐘前", + "minute_in": "__count__ 分鐘內", + "minute_in_plural": "__count__ 分鐘內", + "hour_ago": "__count__ 小時前", + "hour_ago_plural": "__count__ 小時前", + "hour_in": "__count__ 小時內", + "hour_in_plural": "__count__ 小時內", + "day_ago": "__count__ 天前", + "day_ago_plural": "__count__ 天前", + "day_in": "__count__ 天內", + "day_in_plural": "__count__ 天內", + "month_ago": "__count__ 月前", + "month_ago_plural": "__count__ 月前", + "month_in": "__count__ 月內", + "month_in_plural": "__count__ 月內", + "year_ago": "__count__ 年前", + "year_ago_plural": "__count__ 年前", + "year_in": "__count__ 年內", + "year_in_plural": "__count__ 年內" + } + }, + "zh-TW": { + translation: { + "now": "剛才", + "second_ago": "__count__ 秒鐘前", + "second_ago_plural": "__count__ 秒鐘前", + "second_in": "__count__ 秒內", + "second_in_plural": "__count__ 秒內", + "minute_ago": "__count__ 分鐘前", + "minute_ago_plural": "__count__ 分鐘前", + "minute_in": "__count__ 分鐘內", + "minute_in_plural": "__count__ 分鐘內", + "hour_ago": "__count__ 小時前", + "hour_ago_plural": "__count__ 小時前", + "hour_in": "__count__ 小時內", + "hour_in_plural": "__count__ 小時內", + "day_ago": "__count__ 天前", + "day_ago_plural": "__count__ 天前", + "day_in": "__count__ 天內", + "day_in_plural": "__count__ 天內", + "month_ago": "__count__ 月前", + "month_ago_plural": "__count__ 月前", + "month_in": "__count__ 月內", + "month_in_plural": "__count__ 月內", + "year_ago": "__count__ 年前", + "year_ago_plural": "__count__ 年前", + "year_in": "__count__ 年內", + "year_in_plural": "__count__ 年內" + } + } +}; diff --git a/src/df.js b/src/df.js deleted file mode 100644 index 8b4c7d8c..00000000 --- a/src/df.js +++ /dev/null @@ -1,71 +0,0 @@ -import * as LogManager from 'aurelia-logging'; -import {I18N} from './i18n'; -import { SignalBindingBehavior } from 'aurelia-templating-resources'; -import { ValueConverter } from 'aurelia-binding'; -import { isInteger } from './utils'; - -export class DfValueConverter { - static inject() { return [I18N]; } - constructor(i18n) { - this.service = i18n; - } - - toView(value, dfOrOptions, locale, df) { - if (value === null - || typeof value === 'undefined' - || (typeof value === 'string' && value.trim() === '') - ) { - return value; - } - - if (dfOrOptions && (typeof dfOrOptions.format === 'function')) { - return dfOrOptions.format(value); - } else if (df) { - let i18nLogger = LogManager.getLogger('i18n'); - i18nLogger.warn('This ValueConverter signature is depcrecated and will be removed in future releases. Please use the signature [dfOrOptions, locale]'); - } else { - df = this.service.df(dfOrOptions, locale || this.service.getLocale()); - } - - if (typeof value === 'string' && isNaN(value) && !isInteger(value)) { - value = new Date(value); - } - - return df.format(value); - } -} - -export class DfBindingBehavior { - static inject() {return [SignalBindingBehavior];} - - constructor(signalBindingBehavior) { - this.signalBindingBehavior = signalBindingBehavior; - } - - bind(binding, source) { - // bind the signal behavior - this.signalBindingBehavior.bind(binding, source, 'aurelia-translation-signal'); - - // rewrite the expression to use the DfValueConverter. - // pass through any args to the binding behavior to the DfValueConverter - let sourceExpression = binding.sourceExpression; - - // do create the sourceExpression only once - if (sourceExpression.rewritten) { - return; - } - sourceExpression.rewritten = true; - - let expression = sourceExpression.expression; - sourceExpression.expression = new ValueConverter( - expression, - 'df', - sourceExpression.args, - [expression, ...sourceExpression.args]); - } - - unbind(binding, source) { - // unbind the signal behavior - this.signalBindingBehavior.unbind(binding, source); - } -} diff --git a/src/df.ts b/src/df.ts new file mode 100644 index 00000000..3c3b3621 --- /dev/null +++ b/src/df.ts @@ -0,0 +1,68 @@ +import * as LogManager from "aurelia-logging"; +import { I18N } from "./i18n"; +import { SignalBindingBehavior } from "aurelia-templating-resources"; +import { ValueConverter } from "aurelia-binding"; +import { isInteger } from "./utils"; + +export class DfValueConverter { + static inject() { return [I18N]; } + + constructor(private service: I18N) {} + + toView(value: any, dfOrOptions?: Intl.DateTimeFormat | Intl.DateTimeFormatOptions, locale?: string, df?: Intl.DateTimeFormat) { + if (value === null + || typeof value === "undefined" + || (typeof value === "string" && value.trim() === "") + ) { + return value; + } + + if (dfOrOptions && (dfOrOptions instanceof Intl.DateTimeFormat && typeof dfOrOptions.format === "function")) { + return dfOrOptions.format(value); + } else if (df) { + let i18nLogger = LogManager.getLogger("i18n"); + i18nLogger.warn("This ValueConverter signature is depcrecated and will be removed in future releases. Please use the signature [dfOrOptions, locale]"); + } else { + df = this.service.df(dfOrOptions as Intl.DateTimeFormatOptions, locale || this.service.getLocale()); + } + + if (typeof value === "string" && isNaN(value as any) && !isInteger(value as any)) { + value = new Date(value); + } + + return df!.format(value); + } +} + +export class DfBindingBehavior { + static inject() {return [SignalBindingBehavior]; } + + constructor(private signalBindingBehavior: SignalBindingBehavior) {} + + bind(binding: any, source: any) { + // bind the signal behavior + (this.signalBindingBehavior.bind as any)(binding, source, "aurelia-translation-signal"); + + // rewrite the expression to use the DfValueConverter. + // pass through any args to the binding behavior to the DfValueConverter + let sourceExpression = binding.sourceExpression; + + // do create the sourceExpression only once + if (sourceExpression.rewritten) { + return; + } + sourceExpression.rewritten = true; + + let expression = sourceExpression.expression; + sourceExpression.expression = new ValueConverter( + expression, + "df", + sourceExpression.args, + [expression, ...sourceExpression.args]); + } + + unbind(binding: any, source: any) { + // unbind the signal behavior + this.signalBindingBehavior.unbind(binding, source); + } +} diff --git a/src/i18n.js b/src/i18n.js deleted file mode 100644 index 3c33f05c..00000000 --- a/src/i18n.js +++ /dev/null @@ -1,291 +0,0 @@ -/*eslint no-cond-assign: 0*/ -import * as LogManager from 'aurelia-logging'; -import i18next from 'i18next'; -import { DOM, PLATFORM } from 'aurelia-pal'; -import { EventAggregator } from 'aurelia-event-aggregator'; -import { BindingSignaler } from 'aurelia-templating-resources'; - -export class I18N { - static inject = [EventAggregator, BindingSignaler]; - - globalVars = {}; - params = {}; - i18nextDefered = { - resolve: null, - promise: null - }; - i18next; - ea: EventAggregator; - - constructor(ea, signaler) { - this.i18next = i18next; - this.ea = ea; - this.Intl = PLATFORM.global.Intl; - this.signaler = signaler; - this.i18nextDefered.promise = new Promise((resolve) => this.i18nextDefered.resolve = resolve); - } - - setup(options?): Promise { - const defaultOptions = { - skipTranslationOnMissingKey: false, - compatibilityAPI: 'v1', - compatibilityJSON: 'v1', - lng: 'en', - attributes: ['t', 'i18n'], - fallbackLng: 'en', - debug: false - }; - - - i18next.init(options || defaultOptions, (err, t) => { - //make sure attributes is an array in case a string was provided - if (i18next.options.attributes instanceof String) { - i18next.options.attributes = [i18next.options.attributes]; - } - - this.i18nextDefered.resolve(this.i18next); - }); - - return this.i18nextDefered.promise; - } - - i18nextReady(): Promise { - return this.i18nextDefered.promise; - } - - setLocale(locale): Promise { - return new Promise(resolve => { - let oldLocale = this.getLocale(); - this.i18next.changeLanguage(locale, (err, tr) => { - this.ea.publish('i18n:locale:changed', { oldValue: oldLocale, newValue: locale }); - this.signaler.signal('aurelia-translation-signal'); - resolve(tr); - }); - }); - } - - getLocale(): string { - return this.i18next.language; - } - - nf(options?, locales?): any { - return new this.Intl.NumberFormat(locales || this.getLocale(), options || {}); - } - - uf(number, locale?): number { - let nf = this.nf({}, locale || this.getLocale()); - let comparer = nf.format(10000 / 3); - - let thousandSeparator = comparer[1]; - let decimalSeparator = comparer[5]; - - if (thousandSeparator === '.') { - thousandSeparator = '\\.'; - } - - // remove all thousand seperators - let result = number.replace(new RegExp(thousandSeparator, 'g'), '') - // remove non-numeric signs except -> , . - .replace(/[^\d.,-]/g, '') - // replace original decimalSeparator with english one - .replace(decimalSeparator, '.'); - - // return real number - return Number(result); - } - - df(options?, locales?): any { - return new this.Intl.DateTimeFormat(locales || this.getLocale(), options); - } - - tr(key, options?): string { - let fullOptions = this.globalVars; - - if (options !== undefined) { - fullOptions = Object.assign(Object.assign({}, this.globalVars), options); - } - - return this.i18next.t(key, fullOptions); - } - - registerGlobalVariable(key, value): void { - this.globalVars[key] = value; - } - - unregisterGlobalVariable(key): void { - delete this.globalVars[key]; - } - - /** - * Scans an element for children that have a translation attribute and - * updates their innerHTML with the current translation values. - * - * If an image is encountered the translated value will be applied to the src attribute. - * - * @param el HTMLElement to search within - */ - updateTranslations(el): void { - if (!el || !el.querySelectorAll) { - return; - } - - let i; - let l; - - //create a selector from the specified attributes to look for - //var selector = [].concat(this.i18next.options.attributes); - let selector = [].concat(this.i18next.options.attributes); - for (i = 0, l = selector.length; i < l; i++) selector[i] = '[' + selector[i] + ']'; - selector = selector.join(','); - - //get the nodes - let nodes = el.querySelectorAll(selector); - for (i = 0, l = nodes.length; i < l; i++) { - let node = nodes[i]; - let keys; - let params; - //test every attribute and get the first one that has a value - for (let i2 = 0, l2 = this.i18next.options.attributes.length; i2 < l2; i2++) { - keys = node.getAttribute(this.i18next.options.attributes[i2]); - const pname = this.i18next.options.attributes[i2] + '-params'; - - if (pname && node.au && node.au[pname]) { - params = node.au[pname].viewModel.value; - } - - if (keys) break; - } - //skip if nothing was found - if (!keys) continue; - - //split the keys into multiple keys separated by a ; - this.updateValue(node, keys, params); - } - } - - updateValue(node, value, params) { - if (value === null || value === undefined) { - return; - } - - let keys = value.toString().split(';'); - let i = keys.length; - - while (i--) { - let key = keys[i]; - // remove the optional attribute - let re = /\[([a-z\-, ]*)\]/ig; - - let m; - let attr = 'text'; - //set default attribute to src if this is an image node - if (node.nodeName === 'IMG') attr = 'src'; - - //check if a attribute was specified in the key - while ((m = re.exec(key)) !== null) { - if (m.index === re.lastIndex) { - re.lastIndex++; - } - if (m) { - key = key.replace(m[0], ''); - attr = m[1]; - } - } - - let attrs = attr.split(','); - let j = attrs.length; - - while (j--) { - attr = attrs[j].trim(); - - if (!node._textContent) node._textContent = node.textContent; - if (!node._innerHTML) node._innerHTML = node.innerHTML; - - // convert to camelCase - const attrCC = attr.replace(/-([a-z])/g, function(g) { return g[1].toUpperCase(); }); - const reservedNames = ['prepend', 'append', 'text', 'html']; - const i18nLogger = LogManager.getLogger('i18n'); - - if (reservedNames.indexOf(attr) > -1 && - node.au && - node.au.controller && - node.au.controller.viewModel && - attrCC in node.au.controller.viewModel) { - i18nLogger.warn(`Aurelia I18N reserved attribute name\n - [${reservedNames.join(', ')}]\n - Your custom element has a bindable named ${attr} which is a reserved word.\n - If you'd like Aurelia I18N to translate your bindable instead, please consider giving it another name.`); - } - - if (this.i18next.options.skipTranslationOnMissingKey && - this.tr(key, params) === key) { - i18nLogger.warn(`Couldn't find translation for key: ${key}`); - return; - } - - //handle various attributes - //anything other than text,prepend,append or html will be added as an attribute on the element. - switch (attr) { - case 'text': - let newChild = DOM.createTextNode(this.tr(key, params)); - if (node._newChild && node._newChild.parentNode === node) { - node.removeChild(node._newChild); - } - - node._newChild = newChild; - while (node.firstChild) { - node.removeChild(node.firstChild); - } - node.appendChild(node._newChild); - break; - case 'prepend': - let prependParser = DOM.createElement('div'); - prependParser.innerHTML = this.tr(key, params); - for (let ni = node.childNodes.length - 1; ni >= 0; ni--) { - if (node.childNodes[ni]._prepended) { - node.removeChild(node.childNodes[ni]); - } - } - - for (let pi = prependParser.childNodes.length - 1; pi >= 0; pi--) { - prependParser.childNodes[pi]._prepended = true; - if (node.firstChild) { - node.insertBefore(prependParser.childNodes[pi], node.firstChild); - } else { - node.appendChild(prependParser.childNodes[pi]); - } - } - break; - case 'append': - let appendParser = DOM.createElement('div'); - appendParser.innerHTML = this.tr(key, params); - for (let ni = node.childNodes.length - 1; ni >= 0; ni--) { - if (node.childNodes[ni]._appended) { - node.removeChild(node.childNodes[ni]); - } - } - - while (appendParser.firstChild) { - appendParser.firstChild._appended = true; - node.appendChild(appendParser.firstChild); - } - break; - case 'html': - node.innerHTML = this.tr(key, params); - break; - default: //normal html attribute - if (node.au && - node.au.controller && - node.au.controller.viewModel && - attrCC in node.au.controller.viewModel) { - node.au.controller.viewModel[attrCC] = this.tr(key, params); - } else { - node.setAttribute(attr, this.tr(key, params)); - } - - break; - } - } - } - } -} diff --git a/src/i18n.ts b/src/i18n.ts new file mode 100644 index 00000000..9ba391cb --- /dev/null +++ b/src/i18n.ts @@ -0,0 +1,311 @@ +/*eslint no-cond-assign: 0*/ +import * as LogManager from "aurelia-logging"; +import i18next, { i18n, InitOptions } from "i18next"; +import { DOM, PLATFORM } from "aurelia-pal"; +import { EventAggregator } from "aurelia-event-aggregator"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { autoinject } from "aurelia-framework"; + +export interface AureliaAdditionalOptions { + attributes?: string[], + skipTranslationOnMissingKey?: boolean + +} + +export interface AureliaEnhancedI18Next { + options?: InitOptions & AureliaAdditionalOptions; +} + +// tslint:disable-next-line:interface-name +export interface I18NEventPayload { + oldValue: string, + newValue: string +} + +@autoinject +export class I18N { + public i18nextDeferred: Promise; + public i18next: AureliaEnhancedI18Next & i18n; + public Intl: typeof Intl; + private globalVars: {[key: string]: any} = {}; + + constructor(private ea: EventAggregator, private signaler: BindingSignaler) { + this.i18next = i18next; + this.Intl = PLATFORM.global.Intl; + } + + async setup(options?: AureliaAdditionalOptions & InitOptions) { + const defaultOptions = { + skipTranslationOnMissingKey: false, + compatibilityAPI: "v1", + compatibilityJSON: "v1", + lng: "en", + attributes: ["t", "i18n"], + fallbackLng: "en", + debug: false + }; + + + this.i18nextDeferred = new Promise((resolve, reject) => { + this.i18next = this.i18next.init(options || defaultOptions, (err) => { + if (err) { + reject(err); + } + + //make sure attributes is an array in case a string was provided + if (this.i18next.options.attributes instanceof String) { + this.i18next.options.attributes = [this.i18next.options.attributes as any as string]; + } + + resolve(this.i18next); + }); + }); + + return this.i18nextDeferred; + } + + i18nextReady(): Promise { + return this.i18nextDeferred; + } + + setLocale(locale: string): Promise { + return new Promise((resolve, reject) => { + let oldLocale = this.getLocale(); + this.i18next.changeLanguage(locale, (err, tr) => { + if (err) { + reject(err); + } + + this.ea.publish("i18n:locale:changed", { oldValue: oldLocale, newValue: locale }); + this.signaler.signal("aurelia-translation-signal"); + resolve(tr); + }); + }); + } + + getLocale(): string { + return this.i18next.language; + } + + nf(options?: Intl.NumberFormatOptions, locales?: string | string[]): any { + return new this.Intl.NumberFormat(locales || this.getLocale(), options || {}); + } + + uf(number: string, locale?: string): number { + let nf = this.nf({}, locale || this.getLocale()); + let comparer = nf.format(10000 / 3); + + let thousandSeparator = comparer[1]; + let decimalSeparator = comparer[5]; + + if (thousandSeparator === ".") { + thousandSeparator = "\\."; + } + + // remove all thousand seperators + let result = number.replace(new RegExp(thousandSeparator, "g"), "") + // remove non-numeric signs except -> , . + .replace(/[^\d.,-]/g, "") + // replace original decimalSeparator with english one + .replace(decimalSeparator, "."); + + // return real number + return Number(result); + } + + df(options?: Intl.DateTimeFormatOptions, locales?: string | string[]): any { + return new this.Intl.DateTimeFormat(locales || this.getLocale(), options); + } + + tr(key: string | string[], options?: i18next.TranslationOptions): string { + let fullOptions = this.globalVars; + + if (options !== undefined) { + fullOptions = Object.assign(Object.assign({}, this.globalVars), options); + } + + return this.i18next.t(key, fullOptions); + } + + registerGlobalVariable(key: string, value: any): void { + this.globalVars[key] = value; + } + + unregisterGlobalVariable(key: string): void { + delete this.globalVars[key]; + } + + /** + * Scans an element for children that have a translation attribute and + * updates their innerHTML with the current translation values. + * + * If an image is encountered the translated value will be applied to the src attribute. + * + * @param el HTMLElement to search within + */ + updateTranslations(el: HTMLElement): void { + if (!el || !el.querySelectorAll) { + return; + } + + let i; + let l; + + //create a selector from the specified attributes to look for + //var selector = [].concat(this.i18next.options.attributes); + const attributes = this.i18next.options.attributes!; + let selector = [].concat(attributes as any) as any; + for (i = 0, l = selector.length; i < l; i++) selector[i] = "[" + selector[i] + "]"; + selector = selector.join(","); + + //get the nodes + let nodes = el.querySelectorAll(selector); + for (i = 0, l = nodes.length; i < l; i++) { + let node = nodes[i]; + let keys; + let params; + //test every attribute and get the first one that has a value + for (let i2 = 0, l2 = attributes.length; i2 < l2; i2++) { + keys = node.getAttribute(attributes[i2]); + const pname = attributes[i2] + "-params"; + + if (pname && node.au && node.au[pname]) { + params = node.au[pname].viewModel.value; + } + + if (keys) break; + } + //skip if nothing was found + if (!keys) continue; + + //split the keys into multiple keys separated by a ; + this.updateValue(node, keys, params); + } + } + + updateValue(node: Element & { au: any }, value: string, params: any) { + if (value === null || value === undefined) { + return; + } + + let keys = value.toString().split(";"); + let i = keys.length; + + while (i--) { + let key = keys[i]; + // remove the optional attribute + let re = /\[([a-z\-, ]*)\]/ig; + + let m; + let attr = "text"; + //set default attribute to src if this is an image node + if (node.nodeName === "IMG") attr = "src"; + + //check if a attribute was specified in the key + while ((m = re.exec(key)) !== null) { + if (m.index === re.lastIndex) { + re.lastIndex++; + } + if (m) { + key = key.replace(m[0], ""); + attr = m[1]; + } + } + + let attrs = attr.split(","); + let j = attrs.length; + + while (j--) { + attr = attrs[j].trim(); + + if (!(node as any)._textContent) (node as any)._textContent = node.textContent; + if (!(node as any)._innerHTML) (node as any)._innerHTML = node.innerHTML; + + // convert to camelCase + const attrCC = attr.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); }); + const reservedNames = ["prepend", "append", "text", "html"]; + const i18nLogger = LogManager.getLogger("i18n"); + + if (reservedNames.indexOf(attr) > -1 && + node.au && + node.au.controller && + node.au.controller.viewModel && + attrCC in node.au.controller.viewModel) { + i18nLogger.warn(`Aurelia I18N reserved attribute name\n + [${reservedNames.join(", ")}]\n + Your custom element has a bindable named ${attr} which is a reserved word.\n + If you'd like Aurelia I18N to translate your bindable instead, please consider giving it another name.`); + } + + if (this.i18next.options.skipTranslationOnMissingKey && + this.tr(key, params) === key) { + i18nLogger.warn(`Couldn't find translation for key: ${key}`); + return; + } + + //handle various attributes + //anything other than text,prepend,append or html will be added as an attribute on the element. + switch (attr) { + case "text": + let newChild = DOM.createTextNode(this.tr(key, params)); + if ((node as any)._newChild && (node as any)._newChild.parentNode === node) { + node.removeChild((node as any)._newChild); + } + + (node as any)._newChild = newChild; + while (node.firstChild) { + node.removeChild(node.firstChild); + } + node.appendChild((node as any)._newChild); + break; + case "prepend": + let prependParser = DOM.createElement("div"); + prependParser.innerHTML = this.tr(key, params); + for (let ni = node.childNodes.length - 1; ni >= 0; ni--) { + if ((node.childNodes[ni] as any)._prepended) { + node.removeChild(node.childNodes[ni]); + } + } + + for (let pi = prependParser.childNodes.length - 1; pi >= 0; pi--) { + (prependParser.childNodes[pi] as any)._prepended = true; + if (node.firstChild) { + node.insertBefore(prependParser.childNodes[pi], node.firstChild); + } else { + node.appendChild(prependParser.childNodes[pi]); + } + } + break; + case "append": + let appendParser = DOM.createElement("div"); + appendParser.innerHTML = this.tr(key, params); + for (let ni = node.childNodes.length - 1; ni >= 0; ni--) { + if ((node.childNodes[ni] as any)._appended) { + node.removeChild(node.childNodes[ni]); + } + } + + while (appendParser.firstChild) { + (appendParser.firstChild as any)._appended = true; + node.appendChild(appendParser.firstChild); + } + break; + case "html": + node.innerHTML = this.tr(key, params); + break; + default: //normal html attribute + if (node.au && + node.au.controller && + node.au.controller.viewModel && + attrCC in node.au.controller.viewModel) { + node.au.controller.viewModel[attrCC] = this.tr(key, params); + } else { + node.setAttribute(attr, this.tr(key, params)); + } + + break; + } + } + } + } +} diff --git a/src/nf.js b/src/nf.js deleted file mode 100644 index 404d57ad..00000000 --- a/src/nf.js +++ /dev/null @@ -1,66 +0,0 @@ -import * as LogManager from 'aurelia-logging'; -import {I18N} from './i18n'; -import { SignalBindingBehavior } from 'aurelia-templating-resources'; -import { ValueConverter } from 'aurelia-binding'; - -export class NfValueConverter { - static inject() { return [I18N]; } - constructor(i18n) { - this.service = i18n; - } - - toView(value, nfOrOptions, locale, nf) { - if (value === null - || typeof value === 'undefined' - || (typeof value === 'string' && value.trim() === '') - ) { - return value; - } - - if (nfOrOptions && (typeof nfOrOptions.format === 'function')) { - return nfOrOptions.format(value); - } else if (nf) { - let i18nLogger = LogManager.getLogger('i18n'); - i18nLogger.warn('This ValueConverter signature is depcrecated and will be removed in future releases. Please use the signature [nfOrOptions, locale]'); - } else { - nf = this.service.nf(nfOrOptions, locale || this.service.getLocale()); - } - - return nf.format(value); - } -} - -export class NfBindingBehavior { - static inject() {return [SignalBindingBehavior];} - - constructor(signalBindingBehavior) { - this.signalBindingBehavior = signalBindingBehavior; - } - - bind(binding, source) { - // bind the signal behavior - this.signalBindingBehavior.bind(binding, source, 'aurelia-translation-signal'); - - // rewrite the expression to use the NfValueConverter. - // pass through any args to the binding behavior to the NfValueConverter - let sourceExpression = binding.sourceExpression; - - // do create the sourceExpression only once - if (sourceExpression.rewritten) { - return; - } - sourceExpression.rewritten = true; - - let expression = sourceExpression.expression; - sourceExpression.expression = new ValueConverter( - expression, - 'nf', - sourceExpression.args, - [expression, ...sourceExpression.args]); - } - - unbind(binding, source) { - // unbind the signal behavior - this.signalBindingBehavior.unbind(binding, source); - } -} diff --git a/src/nf.ts b/src/nf.ts new file mode 100644 index 00000000..da576a61 --- /dev/null +++ b/src/nf.ts @@ -0,0 +1,62 @@ +import * as LogManager from "aurelia-logging"; +import { I18N } from "./i18n"; +import { SignalBindingBehavior } from "aurelia-templating-resources"; +import { ValueConverter } from "aurelia-binding"; + +export class NfValueConverter { + static inject() { return [I18N]; } + constructor(private service: I18N) {} + + toView(value: any, nfOrOptions?: Intl.NumberFormat | Intl.NumberFormatOptions, locale?: string, nf?: Intl.NumberFormat) { + if (value === null + || typeof value === "undefined" + || (typeof value === "string" && value.trim() === "") + ) { + return value; + } + + if (nfOrOptions && (nfOrOptions instanceof Intl.NumberFormat && typeof nfOrOptions.format === "function")) { + return nfOrOptions.format(value); + } else if (nf) { + let i18nLogger = LogManager.getLogger("i18n"); + i18nLogger.warn("This ValueConverter signature is depcrecated and will be removed in future releases. Please use the signature [nfOrOptions, locale]"); + } else { + nf = this.service.nf(nfOrOptions as Intl.NumberFormatOptions, locale || this.service.getLocale()); + } + + return nf!.format(value); + } +} + +export class NfBindingBehavior { + static inject() {return [SignalBindingBehavior]; } + + constructor(private signalBindingBehavior: SignalBindingBehavior) {} + + bind(binding: any, source: any) { + // bind the signal behavior + (this.signalBindingBehavior.bind as any)(binding, source, "aurelia-translation-signal"); + + // rewrite the expression to use the NfValueConverter. + // pass through any args to the binding behavior to the NfValueConverter + let sourceExpression = binding.sourceExpression; + + // do create the sourceExpression only once + if (sourceExpression.rewritten) { + return; + } + sourceExpression.rewritten = true; + + let expression = sourceExpression.expression; + sourceExpression.expression = new ValueConverter( + expression, + "nf", + sourceExpression.args, + [expression, ...sourceExpression.args]); + } + + unbind(binding: any, source: any) { + // unbind the signal behavior + this.signalBindingBehavior.unbind(binding, source); + } +} diff --git a/src/relativeTime.js b/src/relativeTime.js deleted file mode 100644 index 277c333e..00000000 --- a/src/relativeTime.js +++ /dev/null @@ -1,100 +0,0 @@ -import { I18N } from './i18n'; -import { translations } from './defaultTranslations/relative.time'; -import { EventAggregator } from 'aurelia-event-aggregator'; - -export class RelativeTime { - static inject() { return [I18N, EventAggregator]; } - constructor(i18n, ea) { - this.service = i18n; - this.ea = ea; - - this.service.i18nextReady().then(() => { - this.setup(); - }); - this.ea.subscribe('i18n:locale:changed', locales => { - this.setup(locales); - }); - } - - setup(locales) { - let trans = translations.default || translations; - let fallbackLng = this.service.i18next.fallbackLng; - - let alternateFb = fallbackLng || this.service.i18next.options.fallbackLng; - if (Array.isArray(alternateFb) && alternateFb.length > 0) { - alternateFb = alternateFb[0]; - } - - let key = ((locales && locales.newValue) - ? locales.newValue - : this.service.getLocale()) || alternateFb; - - let index = 0; - - if ((index = key.indexOf('-')) >= 0) { // eslint-disable-line no-cond-assign - let baseLocale = key.substring(0, index); - - if (trans[baseLocale]) { - this.addTranslationResource(baseLocale, trans[baseLocale].translation); - } - } - - if (trans[key]) { - this.addTranslationResource(key, trans[key].translation); - } - if (trans[fallbackLng]) { - this.addTranslationResource(key, trans[fallbackLng].translation); - } - } - - addTranslationResource(key, translation) { - let options = this.service.i18next.options; - - if (options.interpolation && options.interpolation.prefix !== '__' || options.interpolation.suffix !== '__') { - for (let subkey in translation) { - translation[subkey] = translation[subkey].replace('__count__', `${options.interpolation.prefix || '{{'}count${options.interpolation.suffix || '}}'}`); - } - } - - this.service.i18next.addResources(key, options.defaultNS, translation); - } - - getRelativeTime(time) { - let now = new Date(); - let diff = now.getTime() - time.getTime(); - - let timeDiff = this.getTimeDiffDescription(diff, 'year', 31104000000); - if (!timeDiff) { - timeDiff = this.getTimeDiffDescription(diff, 'month', 2592000000); - if (!timeDiff) { - timeDiff = this.getTimeDiffDescription(diff, 'day', 86400000); - if (!timeDiff) { - timeDiff = this.getTimeDiffDescription(diff, 'hour', 3600000); - if (!timeDiff) { - timeDiff = this.getTimeDiffDescription(diff, 'minute', 60000); - if (!timeDiff) { - timeDiff = this.getTimeDiffDescription(diff, 'second', 1000); - if (!timeDiff) { - timeDiff = this.service.tr('now'); - } - } - } - } - } - } - - return timeDiff; - } - - getTimeDiffDescription(diff, unit, timeDivisor) { - let unitAmount = (diff / timeDivisor).toFixed(0); - if (unitAmount > 0) { - return this.service.tr(unit, { count: parseInt(unitAmount, 10), context: 'ago' }); - } else if (unitAmount < 0) { - let abs = Math.abs(unitAmount); - return this.service.tr(unit, { count: abs, context: 'in' }); - } - - return null; - } -} diff --git a/src/relativeTime.ts b/src/relativeTime.ts new file mode 100644 index 00000000..5e828e01 --- /dev/null +++ b/src/relativeTime.ts @@ -0,0 +1,98 @@ +import { I18N, I18NEventPayload } from "./i18n"; +import { translations } from "./defaultTranslations/relative.time"; +import { EventAggregator } from "aurelia-event-aggregator"; + +export class RelativeTime { + static inject() { return [I18N, EventAggregator]; } + constructor(private service: I18N, private ea: EventAggregator) { + this.service.i18nextReady().then(() => { + this.setup(); + }); + + this.ea.subscribe("i18n:locale:changed", (locales: I18NEventPayload) => { + this.setup(locales); + }); + } + + setup(locales?: { oldValue: string, newValue: string }) { + let trans = (translations as any).default || translations; + let fallbackLng = (this.service.i18next as any).fallbackLng; + + let alternateFb = fallbackLng || this.service.i18next.options.fallbackLng; + if (Array.isArray(alternateFb) && alternateFb.length > 0) { + alternateFb = alternateFb[0]; + } + + let key = ((locales && locales.newValue) + ? locales.newValue + : this.service.getLocale()) || alternateFb; + + let index = 0; + + if ((index = key.indexOf("-")) >= 0) { // eslint-disable-line no-cond-assign + let baseLocale = key.substring(0, index); + + if (trans[baseLocale]) { + this.addTranslationResource(baseLocale, trans[baseLocale].translation); + } + } + + if (trans[key]) { + this.addTranslationResource(key, trans[key].translation); + } + if (trans[fallbackLng]) { + this.addTranslationResource(key, trans[fallbackLng].translation); + } + } + + addTranslationResource(key: string, translation: any) { + let options = this.service.i18next.options; + + if (options.interpolation && (options.interpolation.prefix !== "__" || options.interpolation.suffix !== "__")) { + for (let subkey in translation) { + translation[subkey] = translation[subkey].replace("__count__", `${options.interpolation.prefix || "{{"}count${options.interpolation.suffix || "}}"}`); + } + } + + this.service.i18next.addResources(key, options.defaultNS || "translation", translation); + } + + getRelativeTime(time: Date) { + let now = new Date(); + let diff = now.getTime() - time.getTime(); + + let timeDiff = this.getTimeDiffDescription(diff, "year", 31104000000); + if (!timeDiff) { + timeDiff = this.getTimeDiffDescription(diff, "month", 2592000000); + if (!timeDiff) { + timeDiff = this.getTimeDiffDescription(diff, "day", 86400000); + if (!timeDiff) { + timeDiff = this.getTimeDiffDescription(diff, "hour", 3600000); + if (!timeDiff) { + timeDiff = this.getTimeDiffDescription(diff, "minute", 60000); + if (!timeDiff) { + timeDiff = this.getTimeDiffDescription(diff, "second", 1000); + if (!timeDiff) { + timeDiff = this.service.tr("now"); + } + } + } + } + } + } + + return timeDiff; + } + + getTimeDiffDescription(diff: number, unit: "year" | "month" | "day" | "hour" | "minute" | "second", timeDivisor: number) { + let unitAmount = parseInt((diff / timeDivisor).toFixed(0), 10); + if (unitAmount > 0) { + return this.service.tr(unit, { count: unitAmount, context: "ago" }); + } else if (unitAmount < 0) { + let abs = Math.abs(unitAmount); + return this.service.tr(unit, { count: abs, context: "in" }); + } + + return null; + } +} diff --git a/src/rt.js b/src/rt.ts similarity index 55% rename from src/rt.js rename to src/rt.ts index f73919d8..1ac027a4 100644 --- a/src/rt.js +++ b/src/rt.ts @@ -1,22 +1,20 @@ -import { RelativeTime } from './relativeTime'; -import { SignalBindingBehavior } from 'aurelia-templating-resources'; -import { ValueConverter } from 'aurelia-binding'; +import { RelativeTime } from "./relativeTime"; +import { SignalBindingBehavior } from "aurelia-templating-resources"; +import { ValueConverter } from "aurelia-binding"; export class RtValueConverter { static inject() { return [RelativeTime]; } - constructor(relativeTime) { - this.service = relativeTime; - } + constructor(private service: RelativeTime) {} - toView(value) { + toView(value: any) { if (value === null - || typeof value === 'undefined' - || (typeof value === 'string' && value.trim() === '') + || typeof value === "undefined" + || (typeof value === "string" && value.trim() === "") ) { return value; } - if (typeof value === 'string' && isNaN(value) && !Number.isInteger(value)) { + if (typeof value === "string" && isNaN(value as any) && !Number.isInteger(value as any)) { value = new Date(value); } @@ -25,15 +23,13 @@ export class RtValueConverter { } export class RtBindingBehavior { - static inject() {return [SignalBindingBehavior];} + static inject() {return [SignalBindingBehavior]; } - constructor(signalBindingBehavior) { - this.signalBindingBehavior = signalBindingBehavior; - } + constructor(private signalBindingBehavior: SignalBindingBehavior) {} - bind(binding, source) { + bind(binding: any, source: any) { // bind the signal behavior - this.signalBindingBehavior.bind(binding, source, 'aurelia-translation-signal', 'aurelia-relativetime-signal'); + (this.signalBindingBehavior.bind as any)(binding, source, "aurelia-translation-signal", "aurelia-relativetime-signal"); // rewrite the expression to use the RtValueConverter. // pass through any args to the binding behavior to the RtValueConverter @@ -48,12 +44,12 @@ export class RtBindingBehavior { let expression = sourceExpression.expression; sourceExpression.expression = new ValueConverter( expression, - 'rt', + "rt", sourceExpression.args, [expression, ...sourceExpression.args]); } - unbind(binding, source) { + unbind(binding: any, source: any) { // unbind the signal behavior this.signalBindingBehavior.unbind(binding, source); } diff --git a/src/t.js b/src/t.ts similarity index 55% rename from src/t.js rename to src/t.ts index 49bd12ba..e99099a4 100644 --- a/src/t.js +++ b/src/t.ts @@ -1,84 +1,87 @@ -import {I18N} from './i18n'; -import {EventAggregator} from 'aurelia-event-aggregator'; -import {metadata} from 'aurelia-metadata'; -import {customAttribute, HtmlBehaviorResource} from 'aurelia-templating'; -import {SignalBindingBehavior} from 'aurelia-templating-resources'; -import {ValueConverter} from 'aurelia-binding'; -import {DOM} from 'aurelia-pal'; -import {LazyOptional} from './utils'; - +import { I18N } from "./i18n"; +import { EventAggregator, Subscription } from "aurelia-event-aggregator"; +import { metadata } from "aurelia-metadata"; +import { customAttribute, HtmlBehaviorResource } from "aurelia-templating"; +import { SignalBindingBehavior } from "aurelia-templating-resources"; +import { ValueConverter } from "aurelia-binding"; +import { DOM } from "aurelia-pal"; +import { LazyOptional } from "./utils"; +import i18next from "i18next"; export class TValueConverter { static inject() { return [I18N]; } - constructor(i18n) { - this.service = i18n; - } + constructor(private service: I18N) {} - toView(value, options) { + toView(value: any, options: i18next.TranslationOptions | undefined) { return this.service.tr(value, options); } } -@customAttribute('t-params') +@customAttribute("t-params") export class TParamsCustomAttribute { static inject() { return [DOM.Element]; } - static configureAliases(aliases) { + static configureAliases(aliases: string[]) { let r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, TParamsCustomAttribute); - r.aliases = aliases; + (r as any).aliases = aliases; } - service; + service: any; - constructor(element) { - this.element = element; - } + constructor(public element: Element) {} valueChanged() { } } -@customAttribute('t') +@customAttribute("t") export class TCustomAttribute { static inject() { return [DOM.Element, I18N, EventAggregator, LazyOptional.of(TParamsCustomAttribute)]; } - static configureAliases(aliases) { + static configureAliases(aliases: string[]) { let r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, TCustomAttribute); - r.aliases = aliases; + (r as any).aliases = aliases; } - constructor(element, i18n, ea, tparams) { - this.element = element; - this.service = i18n; - this.ea = ea; - this.lazyParams = tparams; + private params: any; + private lazyParams: () => any; + private subscription: Subscription; + private value: any; + + constructor( + private element: Element & { au: any }, + private service: I18N, + private ea: EventAggregator, + p: any + ) { + this.lazyParams = p; } bind() { this.params = this.lazyParams(); if (this.params) { - this.params.valueChanged = (newParams, oldParams) => { - this.paramsChanged(this.value, newParams, oldParams); + this.params.valueChanged = (newParams: any, oldParams: any) => { + (this.paramsChanged as any)(this.value, newParams, oldParams); }; } let p = this.params !== null ? this.params.value : undefined; - this.subscription = this.ea.subscribe('i18n:locale:changed', () => { + this.subscription = this.ea.subscribe("i18n:locale:changed", () => { this.service.updateValue(this.element, this.value, this.params !== null ? this.params.value : undefined); }); this.service.updateValue(this.element, this.value, p); } - paramsChanged(newValue, newParams) { + paramsChanged(newValue: any, newParams: any) { this.service.updateValue(this.element, newValue, newParams); } - valueChanged(newValue) { + valueChanged(newValue: any) { let p = this.params !== null ? this.params.value : undefined; this.service.updateValue(this.element, newValue, p); } @@ -94,13 +97,11 @@ export class TCustomAttribute { export class TBindingBehavior { static inject = [SignalBindingBehavior]; - constructor(signalBindingBehavior) { - this.signalBindingBehavior = signalBindingBehavior; - } + constructor(private signalBindingBehavior: SignalBindingBehavior) {} - bind(binding, source) { + bind(binding: any, source: any) { // bind the signal behavior - this.signalBindingBehavior.bind(binding, source, 'aurelia-translation-signal'); + (this.signalBindingBehavior.bind as any)(binding, source, "aurelia-translation-signal"); // rewrite the expression to use the TValueConverter. // pass through any args to the binding behavior to the TValueConverter @@ -115,12 +116,12 @@ export class TBindingBehavior { let expression = sourceExpression.expression; sourceExpression.expression = new ValueConverter( expression, - 't', + "t", sourceExpression.args, [expression, ...sourceExpression.args]); } - unbind(binding, source) { + unbind(binding: any, source: any) { // unbind the signal behavior this.signalBindingBehavior.unbind(binding, source); } diff --git a/src/utils.js b/src/utils.ts similarity index 61% rename from src/utils.js rename to src/utils.ts index 16036806..5d5c5a7f 100644 --- a/src/utils.js +++ b/src/utils.ts @@ -1,6 +1,6 @@ -import {resolver} from 'aurelia-dependency-injection'; +import { resolver, Container } from "aurelia-dependency-injection"; -export let extend = (destination, source) => { +export let extend = (destination: any, source: any) => { for (let property in source) { destination[property] = source[property]; } @@ -9,12 +9,12 @@ export let extend = (destination, source) => { }; export const isInteger = Number.isInteger || function(value) { - return typeof value === 'number' && + return typeof value === "number" && isFinite(value) && Math.floor(value) === value; }; -export let assignObjectToKeys = (root, obj) => { +export let assignObjectToKeys = (root: any, obj: any) => { if (obj === undefined || obj === null) { return obj; } @@ -22,10 +22,10 @@ export let assignObjectToKeys = (root, obj) => { let opts = {}; Object.keys(obj).map( (key) => { - if (typeof obj[key] === 'object') { + if (typeof obj[key] === "object") { extend(opts, assignObjectToKeys(key, obj[key])); } else { - opts[root !== '' ? root + '.' + key : key] = obj[key]; + (opts as any)[root !== "" ? root + "." + key : key] = obj[key]; } }); @@ -34,11 +34,9 @@ export let assignObjectToKeys = (root, obj) => { @resolver() export class LazyOptional { - constructor(key) { - this.key = key; - } + constructor(private key: string) {} - get(container) { + get(container: Container) { return () => { if (container.hasResolver(this.key, false)) { return container.get(this.key); @@ -47,7 +45,7 @@ export class LazyOptional { }; } - static of(key) { + static of(key: any) { return new LazyOptional(key); } } diff --git a/test/html-loader.d.ts b/test/html-loader.d.ts new file mode 100644 index 00000000..3a031d8f --- /dev/null +++ b/test/html-loader.d.ts @@ -0,0 +1,4 @@ +declare module "*.html" { + const content: string; + export default content; +} diff --git a/test/html-loader.js b/test/html-loader.js new file mode 100644 index 00000000..d375050b --- /dev/null +++ b/test/html-loader.js @@ -0,0 +1,7 @@ +const htmlLoader = require("html-loader"); + +module.exports = { + process(src, _filename, _config, _options) { + return htmlLoader(src); + } +} diff --git a/test/jest-css-stub.js b/test/jest-css-stub.js new file mode 100644 index 00000000..f053ebf7 --- /dev/null +++ b/test/jest-css-stub.js @@ -0,0 +1 @@ +module.exports = {}; diff --git a/test/jest-pretest.ts b/test/jest-pretest.ts new file mode 100644 index 00000000..207f16ff --- /dev/null +++ b/test/jest-pretest.ts @@ -0,0 +1,16 @@ +import "aurelia-polyfills"; +import { Options } from "aurelia-loader-nodejs"; +import { globalize } from "aurelia-pal-nodejs"; +import IntlPolyfill from "intl"; +import * as path from "path"; + +Options.relativeToDir = path.join(__dirname, "unit"); +globalize(); +//global.Intl = IntlPolyfill; +//(window as any).Intl = IntlPolyfill; +global.Intl.NumberFormat = IntlPolyfill.NumberFormat; +global.Intl.DateTimeFormat = IntlPolyfill.DateTimeFormat; +(window as any).Intl = global.Intl; + +(window as any).Intl.NumberFormat = IntlPolyfill.NumberFormat; +(window as any).Intl.DateTimeFormat = IntlPolyfill.DateTimeFormat; diff --git a/test/unit/aurelia.integration.spec.js b/test/unit/aurelia.integration.spec.js deleted file mode 100644 index 720c5560..00000000 --- a/test/unit/aurelia.integration.spec.js +++ /dev/null @@ -1,34 +0,0 @@ -import {configure} from '../../src/aurelia-i18n'; - -describe('testing aurelia configure routine', () => { - let frameworkConfig = { - globalResources: () => { - - }, - container: { - registerInstance: (type, instance) => { - - }, - get: (Type) => { return new Type(); } - }, - postTask: () => {} - }; - - it('should export configure function', () => { - expect(typeof configure).toBe('function'); - }); - - it('should accept a setup callback passing back the instance', (done) => { - const cb = (instance) => { - expect(typeof instance).toBe('object'); - done(); - }; - - configure(frameworkConfig, cb); - }); - - it('should throw custom error message if no callback is provided', () => { - expect(() => { configure(frameworkConfig); }) - .toThrow('You need to provide a callback method to properly configure the library'); - }); -}); diff --git a/test/unit/aurelia.integration.spec.ts b/test/unit/aurelia.integration.spec.ts new file mode 100644 index 00000000..b313f970 --- /dev/null +++ b/test/unit/aurelia.integration.spec.ts @@ -0,0 +1,38 @@ +import { FrameworkConfiguration } from "aurelia-framework"; + +import { configure, I18N } from "../../src/aurelia-i18n"; + +describe("testing aurelia configure routine", () => { + let frameworkConfig = { + globalResources: () => { + + }, + container: { + registerInstance: () => { + + }, + get: (Type: any) => { return new Type(); } + }, + postTask: () => {} + } as any as FrameworkConfiguration; + + it("should export configure function", () => { + expect(typeof configure).toBe("function"); + }); + + it("should accept a setup callback passing back the instance", (done) => { + const cb = (instance: I18N) => { + expect(typeof instance).toBe("object"); + done(); + + return instance.i18next; + }; + + configure(frameworkConfig, cb); + }); + + it("should throw custom error message if no callback is provided", () => { + expect(() => { (configure as any)(frameworkConfig); }) + .toThrow("You need to provide a callback method to properly configure the library"); + }); +}); diff --git a/test/unit/datetimeformat.spec.js b/test/unit/datetimeformat.spec.js deleted file mode 100644 index 786767c0..00000000 --- a/test/unit/datetimeformat.spec.js +++ /dev/null @@ -1,56 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {EventAggregator} from 'aurelia-event-aggregator'; - -describe('datetimeformat tests', () => { - let sut; - - beforeEach((done) => { - sut = new I18N(new EventAggregator(), new BindingSignaler()); - sut.setup({ - resources: { - en: { - translation: { - 'lives': '__count__ life remaining', - 'lives_plural': '__count__ lives remaining', - 'lives_indefinite': 'a life remaining', - 'lives_plural_indefinite': 'some lives remaining' - } - } - }, - lng: 'en', - fallbackLng: 'en', - debug: false - }).then( (instance) => { done(); }); - }); - - it('should display only the date in the setup locale format by default', () => { - const df = sut.df(); - const testDate = new Date(2000, 0, 1, 0, 0, 1); - - expect(df.format(testDate)).toEqual('1/1/2000'); - }); - - it('should display date in the previously modified locale', (done) => { - sut.setLocale('de').then( () => { - const df = sut.df(); - const testDate = new Date(2000, 0, 1, 0, 0, 1); - - expect(df.format(testDate)).toEqual('1.1.2000'); - - done(); - }); - }); - - it('should display datetime', () => { - const options = { - year: 'numeric', month: '2-digit', day: '2-digit', - hour: '2-digit', minute: '2-digit', second: '2-digit', - hour12: false - }; - const df = sut.df(options, 'de'); - const testDate = new Date(2000, 0, 1, 0, 0, 1); - - expect(df.format(testDate)).toEqual('01.01.2000, 00:00:01'); - }); -}); diff --git a/test/unit/datetimeformat.spec.ts b/test/unit/datetimeformat.spec.ts new file mode 100644 index 00000000..326ee369 --- /dev/null +++ b/test/unit/datetimeformat.spec.ts @@ -0,0 +1,60 @@ +import { I18N } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { EventAggregator } from "aurelia-event-aggregator"; + +describe("datetimeformat tests", () => { + let sut: I18N; + + beforeEach(async (done) => { + sut = new I18N(new EventAggregator(), new BindingSignaler()); + await sut.setup({ + resources: { + en: { + translation: { + "lives": "__count__ life remaining", + "lives_plural": "__count__ lives remaining", + "lives_indefinite": "a life remaining", + "lives_plural_indefinite": "some lives remaining" + } + } + }, + lng: "en", + fallbackLng: "en", + debug: false + }) + + done(); + }); + + it("should display only the date in the setup locale format by default", () => { + const df = sut.df(); + const testDate = new Date(2000, 0, 1, 0, 0, 1); + + expect(df.format(testDate)).toEqual("1/1/2000"); + }); + + it("should display date in the previously modified locale", async (done) => { + await sut.i18nextReady(); + + sut.setLocale("de").then(() => { + const df = sut.df(); + const testDate = new Date(2000, 0, 1, 0, 0, 1); + + expect(df.format(testDate)).toEqual("1.1.2000"); + + done(); + }); + }); + + it("should display datetime", () => { + const options = { + year: "numeric", month: "2-digit", day: "2-digit", + hour: "2-digit", minute: "2-digit", second: "2-digit", + hour12: false + }; + const df = sut.df(options, "de"); + const testDate = new Date(2000, 0, 1, 0, 0, 1); + + expect(df.format(testDate)).toEqual("01.01.2000, 00:00:01"); + }); +}); diff --git a/test/unit/dfvalueconverter.spec.js b/test/unit/dfvalueconverter.spec.js deleted file mode 100644 index 4b30d870..00000000 --- a/test/unit/dfvalueconverter.spec.js +++ /dev/null @@ -1,104 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {DfValueConverter} from '../../src/df'; -import {EventAggregator} from 'aurelia-event-aggregator'; - -describe('dfvalueconverter tests', () => { - let sut; - let dfvc; - - beforeEach(() => { - sut = new I18N(new EventAggregator(), new BindingSignaler()); - dfvc = new DfValueConverter(sut); - }); - - it('should display only the date in the setup locale format by default', () => { - const testDate = new Date(2000, 0, 1, 0, 0, 1); - - expect(dfvc.toView(testDate)).toEqual('1/1/2000'); - }); - - it('should display date in the previously modified locale', (done) => { - sut.setLocale('de').then(() => { - const testDate = new Date(2000, 0, 1, 0, 0, 1); - expect(dfvc.toView(testDate)).toEqual('1.1.2000'); - done(); - }); - }); - - it('should display datetime', () => { - const options = { - year: 'numeric', month: '2-digit', day: '2-digit', - hour: '2-digit', minute: '2-digit', second: '2-digit', - hour12: false - }; - const testDate = new Date(2000, 0, 1, 0, 0, 1); - expect(dfvc.toView(testDate, options, 'de')).toEqual('01.01.2000, 00:00:01'); - }); - - it('should return undefined if undefined value given', () => { - const val = undefined; - expect(dfvc.toView(val)).toBe(undefined); - }); - - it('should return null if null value given', () => { - const val = null; - expect(dfvc.toView(val)).toBe(null); - }); - - it('should return empty string if empty string value given', () => { - const val = ''; - expect(dfvc.toView(val)).toBe(''); - }); - - it('should return 0 as begin of unix timestamp', (done) => { - const val = 0; - sut.setLocale('de').then(() => { - expect(dfvc.toView(val, { timeZone: 'UTC' })).toBe('1.1.1970'); - done(); - }); - }); - - it('should return "0" as begin of unix timestamp', (done) => { - const val = '0'; - sut.setLocale('de').then(() => { - expect(dfvc.toView(val, { timeZone: 'UTC' })).toBe('1.1.1970'); - done(); - }); - }); - - it('should return formated string if ISO8601 datetime string value given UTC+Offset time AU', (done) => { - const val = '2016-09-05T23:36:00+12:00'; - sut.setLocale('en-AU').then(() => { - expect(dfvc.toView(val)).toBe('05/09/2016'); - done(); - }); - }); - - it('should return formated string if ISO8601 datetime string value given UTC time AU', (done) => { - const val = '2016-09-05T23:36:00Z'; - sut.setLocale('en-AU').then(() => { - expect(dfvc.toView(val, { timeZone: 'UTC' })).toBe('05/09/2016'); - done(); - }); - }); - - it('should return formated string if ISO8601 date string value given LOCAL time AU', (done) => { - const val = '2016-09-05'; - const options = { - year: 'numeric', month: '2-digit', day: '2-digit', timeZone: 'UTC' - }; - sut.setLocale('en-AU').then(() => { - expect(dfvc.toView(val, options)).toBe('05/09/2016'); - done(); - }); - }); - - it('should return formated string if ISO8601 date string value given LOCAL time DE', (done) => { - const val = '2016-09-05'; - sut.setLocale('de').then(() => { - expect(dfvc.toView(val, { timeZone: 'UTC'})).toBe('5.9.2016'); - done(); - }); - }); -}); diff --git a/test/unit/dfvalueconverter.spec.ts b/test/unit/dfvalueconverter.spec.ts new file mode 100644 index 00000000..f244d479 --- /dev/null +++ b/test/unit/dfvalueconverter.spec.ts @@ -0,0 +1,120 @@ +import { I18N } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { DfValueConverter } from "../../src/df"; +import { EventAggregator } from "aurelia-event-aggregator"; + +describe("dfvalueconverter tests", () => { + let sut: I18N; + let dfvc: DfValueConverter; + + beforeEach(async () => { + sut = new I18N(new EventAggregator(), new BindingSignaler()); + dfvc = new DfValueConverter(sut); + + sut.i18next = await sut.setup({ + resources: { + en: { + translation: { + "lives": "__count__ life remaining", + "lives_plural": "__count__ lives remaining", + "lives_indefinite": "a life remaining", + "lives_plural_indefinite": "some lives remaining" + } + } + }, + lng: "en", + fallbackLng: "en", + debug: false + }); + }); + + it("should display only the date in the setup locale format by default", () => { + const testDate = new Date(2000, 0, 1, 0, 0, 1); + + expect(dfvc.toView(testDate)).toEqual("1/1/2000"); + }); + + it("should display date in the previously modified locale", (done) => { + sut.setLocale("de").then(() => { + const testDate = new Date(2000, 0, 1, 0, 0, 1); + expect(dfvc.toView(testDate)).toEqual("1.1.2000"); + done(); + }); + }); + + it("should display datetime", () => { + const options = { + year: "numeric", month: "2-digit", day: "2-digit", + hour: "2-digit", minute: "2-digit", second: "2-digit", + hour12: false + }; + const testDate = new Date(2000, 0, 1, 0, 0, 1); + expect(dfvc.toView(testDate, options, "de")).toEqual("01.01.2000, 00:00:01"); + }); + + it("should return undefined if undefined value given", () => { + const val = undefined; + expect(dfvc.toView(val)).toBe(undefined); + }); + + it("should return null if null value given", () => { + const val = null; + expect(dfvc.toView(val)).toBe(null); + }); + + it("should return empty string if empty string value given", () => { + const val = ""; + expect(dfvc.toView(val)).toBe(""); + }); + + it("should return 0 as begin of unix timestamp", (done) => { + const val = 0; + sut.setLocale("de").then(() => { + expect(dfvc.toView(val, { timeZone: "UTC" })).toBe("1.1.1970"); + done(); + }); + }); + + it("should return \"0\" as begin of unix timestamp", (done) => { + const val = "0"; + sut.setLocale("de").then(() => { + expect(dfvc.toView(val, { timeZone: "UTC" })).toBe("1.1.1970"); + done(); + }); + }); + + it("should return formated string if ISO8601 datetime string value given UTC+Offset time AU", (done) => { + const val = "2016-09-05T23:36:00+12:00"; + sut.setLocale("en-AU").then(() => { + expect(dfvc.toView(val)).toBe("5/9/16"); + done(); + }); + }); + + it("should return formated string if ISO8601 datetime string value given UTC time AU", (done) => { + const val = "2016-09-05T23:36:00Z"; + sut.setLocale("en-AU").then(() => { + expect(dfvc.toView(val, { timeZone: "UTC" })).toBe("5/9/16"); + done(); + }); + }); + + it("should return formated string if ISO8601 date string value given LOCAL time AU", (done) => { + const val = "2016-09-05"; + const options = { + year: "numeric", month: "2-digit", day: "2-digit", timeZone: "UTC" + }; + sut.setLocale("en-AU").then(() => { + expect(dfvc.toView(val, options)).toBe("05/09/2016"); + done(); + }); + }); + + it("should return formated string if ISO8601 date string value given LOCAL time DE", (done) => { + const val = "2016-09-05"; + sut.setLocale("de").then(() => { + expect(dfvc.toView(val, { timeZone: "UTC"})).toBe("5.9.2016"); + done(); + }); + }); +}); diff --git a/test/unit/feature.placeholders.spec.js b/test/unit/feature.placeholders.spec.js deleted file mode 100644 index be476a43..00000000 --- a/test/unit/feature.placeholders.spec.js +++ /dev/null @@ -1,43 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {EventAggregator} from 'aurelia-event-aggregator'; - -describe('feature verification placeholders', () => { - let sut; - - beforeEach( () => { - let resources = { - en: { - translation: { - 'demo': '{{framework}} is the {{quality}} framework in the world', - 'curlies': 'using curlies is {difficulty}', - 'es6interpolation': 'you can use ${type} as well' - } - } - }; - - sut = new I18N(new EventAggregator(), new BindingSignaler()); - sut.setup({ - resources: resources, - lng: 'en', - fallbackLng: 'en', - debug: false - }); - }); - - it('should replace all given variables and return translation', () => { - expect(sut.tr('demo', { framework: 'Aurelia', quality: 'best' })).toEqual('Aurelia is the best framework in the world'); - }); - - it('should use single-curly variable handles', () => { - let options = { difficulty: 'easy', interpolation: { prefix: '{', suffix: '}' }}; - - expect(sut.tr('curlies', options)).toBe('using curlies is easy'); - }); - - it('should use es6 interpolation variable handles', () => { - let options = { type: 'interpolation', interpolation: { prefix: '${', suffix: '}' }}; - - expect(sut.tr('es6interpolation', options)).toBe('you can use interpolation as well'); - }); -}); diff --git a/test/unit/feature.placeholders.spec.ts b/test/unit/feature.placeholders.spec.ts new file mode 100644 index 00000000..0febd15b --- /dev/null +++ b/test/unit/feature.placeholders.spec.ts @@ -0,0 +1,43 @@ +import { I18N } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { EventAggregator } from "aurelia-event-aggregator"; + +describe("feature verification placeholders", () => { + let sut: I18N; + + beforeEach( () => { + let resources = { + en: { + translation: { + "demo": "{{framework}} is the {{quality}} framework in the world", + "curlies": "using curlies is {difficulty}", + "es6interpolation": "you can use ${type} as well" + } + } + }; + + sut = new I18N(new EventAggregator(), new BindingSignaler()); + sut.setup({ + resources: resources, + lng: "en", + fallbackLng: "en", + debug: false + }); + }); + + it("should replace all given variables and return translation", () => { + expect(sut.tr("demo", { framework: "Aurelia", quality: "best" })).toEqual("Aurelia is the best framework in the world"); + }); + + it("should use single-curly variable handles", () => { + let options = { difficulty: "easy", interpolation: { prefix: "{", suffix: "}" }}; + + expect(sut.tr("curlies", options)).toBe("using curlies is easy"); + }); + + it("should use es6 interpolation variable handles", () => { + let options = { type: "interpolation", interpolation: { prefix: "${", suffix: "}" }}; + + expect(sut.tr("es6interpolation", options)).toBe("you can use interpolation as well"); + }); +}); diff --git a/test/unit/feature.pluralization.spec.js b/test/unit/feature.pluralization.spec.js deleted file mode 100644 index c8724c8f..00000000 --- a/test/unit/feature.pluralization.spec.js +++ /dev/null @@ -1,40 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {EventAggregator} from 'aurelia-event-aggregator'; - -describe('feature verification pluralization', () => { - let sut; - - beforeEach( () => { - let resources = { - en: { - translation: { - 'lives': '{{count}} life remaining', - 'lives_plural': '{{count}} lives remaining', - 'lives_indefinite': 'a life remaining', - 'lives_plural_indefinite': 'some lives remaining' - } - } - }; - - sut = new I18N(new EventAggregator(), new BindingSignaler()); - sut.setup({ - resources: resources, - lng: 'en', - fallbackLng: 'en', - debug: false - }); - }); - - it('should return singular translation', () => { - expect(sut.tr('lives', { count: 1 })).toEqual('1 life remaining'); - }); - - it('should return plural translation', () => { - expect(sut.tr('lives', { count: 2 })).toEqual('2 lives remaining'); - }); - - it('should return same key if no plural is defined', () => { - expect(sut.tr('wrongtest', { count: 2 })).toContain('wrongtest'); - }); -}); diff --git a/test/unit/feature.pluralization.spec.ts b/test/unit/feature.pluralization.spec.ts new file mode 100644 index 00000000..b87d7996 --- /dev/null +++ b/test/unit/feature.pluralization.spec.ts @@ -0,0 +1,40 @@ +import { I18N } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { EventAggregator } from "aurelia-event-aggregator"; + +describe("feature verification pluralization", () => { + let sut: I18N; + + beforeEach( () => { + let resources = { + en: { + translation: { + "lives": "{{count}} life remaining", + "lives_plural": "{{count}} lives remaining", + "lives_indefinite": "a life remaining", + "lives_plural_indefinite": "some lives remaining" + } + } + }; + + sut = new I18N(new EventAggregator(), new BindingSignaler()); + sut.setup({ + resources: resources, + lng: "en", + fallbackLng: "en", + debug: false + }); + }); + + it("should return singular translation", () => { + expect(sut.tr("lives", { count: 1 })).toEqual("1 life remaining"); + }); + + it("should return plural translation", () => { + expect(sut.tr("lives", { count: 2 })).toEqual("2 lives remaining"); + }); + + it("should return same key if no plural is defined", () => { + expect(sut.tr("wrongtest", { count: 2 })).toContain("wrongtest"); + }); +}); diff --git a/test/unit/i18n.spec.js b/test/unit/i18n.spec.js deleted file mode 100644 index 3ae1d8fa..00000000 --- a/test/unit/i18n.spec.js +++ /dev/null @@ -1,134 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {EventAggregator} from 'aurelia-event-aggregator'; - -describe('testing i18n translations', () => { - let sut; - - beforeEach( () => { - let resources = { - en: { - translation: { - 'score': 'Score: {{score}}', - 'lives': '{{count}} life remaining', - 'lives_plural': '{{count}} lives remaining', - 'lives_indefinite': 'a life remaining', - 'lives_plural_indefinite': 'some lives remaining', - 'friend': 'A friend', - 'friend_male': 'A boyfriend', - 'friend_female': 'A girlfriend', - 'complex': '{{field}} should be between {{threshold.min}} and {{threshold.max}}', - 'nested_referencing': '$t(lives) in round {{round}}', - 'statement': '{{brand}} is a next next gen JavaScript client framework', - 'novar': '{{notexisting}} should be replaced with an empty string' - } - }, - de: { - translation: { - 'score': 'Punktestand: {{score}}', - 'lives': '{{count}} Lebenspunkt übrig', - 'lives_plural': '{{count}} Lebenspunkte übrig', - 'lives_indefinite': 'ein Lebenspunkt übrig', - 'lives_plural_indefinite': 'einige Lebenspunkte übrig', - 'friend': 'Ein Freund', - 'friend_male': 'Ein Freund', - 'friend_female': 'Eine Freundin', - 'statement': '{{brand}} ist ein JavaScript client framework der nächsten Generation', - 'novar': '{{notexisting}} sollte mit einem Leerstring ersetzt werden' - } - } - }; - - sut = new I18N(new EventAggregator(), new BindingSignaler()); - sut.setup({ - resources: resources, - lng: 'en', - fallbackLng: 'en', - debug: false - }); - }); - - it('should translate a simple key without options', () => { - expect(sut.tr('friend', { count: 0 })).toEqual('A friend'); - }); - - it('should replace a not provided variable with an empty string', () => { - expect(sut.tr('novar')).toEqual(' should be replaced with an empty string'); - }); - - it('should properly switch locales', (done) => { - expect(sut.getLocale()).toBe('en'); - - sut.setLocale('de').then( () => { - expect(sut.getLocale()).toBe('de'); - expect(sut.tr('friend', { count: 0 })).toEqual('Ein Freund'); - done(); - }); - }); - - it('should pass on provided options', () => { - expect(sut.i18next.options.debug).toBe(false); - expect(sut.i18next.options.fallbackLng).toEqual(['en']); - }); - - it('should map complex object', () => { - let options = { - 'threshold': { - 'min': 1, - 'max': 10 - }, - 'field': 'Age' - }; - - expect(sut.tr('complex', options)).toEqual('Age should be between 1 and 10'); - }); - - it('should support nested translations', () => { - expect(sut.tr('nested_referencing', { count: 1, round: 1 })).toEqual('1 life remaining in round 1'); - }); - - it('should automatically add global variables as options if none provided', () => { - sut.registerGlobalVariable('brand', 'Aurelia'); - - expect(sut.tr('statement')).toEqual('Aurelia is a next next gen JavaScript client framework'); - }); - - it('should prefer passed in options vs. global variables', () => { - sut.registerGlobalVariable('brand', 'Aurelia'); - - expect(sut.tr('statement', { brand: 'Aurelia.io' })).toEqual('Aurelia.io is a next next gen JavaScript client framework'); - }); - - it('should allow unregistering of global variables', () => { - sut.registerGlobalVariable('brand', 'Aurelia'); - expect(sut.tr('statement')).toEqual('Aurelia is a next next gen JavaScript client framework'); - - sut.unregisterGlobalVariable('brand'); - expect(sut.tr('statement')).toEqual(' is a next next gen JavaScript client framework'); - }); - - it('should rewrite undefined options with empty string', () => { - expect(sut.tr('nested_referencing', { count: 1, round: undefined })).toEqual('1 life remaining in round '); - }); - - it('should trigger an event when switching locales', (done) => { - let subscription = sut.ea.subscribe('i18n:locale:changed', (payload) => { - subscription.dispose(); - - expect(payload.oldValue).toBe('en'); - expect(payload.newValue).toBe('de'); - done(); - }); - - sut.setLocale('de'); - }); - - it('should handle undefined elements during translation updates', () => { - expect(() => { sut.updateTranslations(); }).not.toThrow(); - }); - - it('should not process comment nodes during translation updates', () => { - let comment = document.createComment('A DEMO COMMENT'); - expect(() => { sut.updateTranslations(comment); }).not.toThrow(); - }); -}); diff --git a/test/unit/i18n.spec.ts b/test/unit/i18n.spec.ts new file mode 100644 index 00000000..23b160be --- /dev/null +++ b/test/unit/i18n.spec.ts @@ -0,0 +1,134 @@ +import { I18N, I18NEventPayload } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { EventAggregator } from "aurelia-event-aggregator"; + +describe("testing i18n translations", () => { + let sut: I18N; + + beforeEach( () => { + let resources = { + en: { + translation: { + "score": "Score: {{score}}", + "lives": "{{count}} life remaining", + "lives_plural": "{{count}} lives remaining", + "lives_indefinite": "a life remaining", + "lives_plural_indefinite": "some lives remaining", + "friend": "A friend", + "friend_male": "A boyfriend", + "friend_female": "A girlfriend", + "complex": "{{field}} should be between {{threshold.min}} and {{threshold.max}}", + "nested_referencing": "$t(lives) in round {{round}}", + "statement": "{{brand}} is a next next gen JavaScript client framework", + "novar": "{{notexisting}} should be replaced with an empty string" + } + }, + de: { + translation: { + "score": "Punktestand: {{score}}", + "lives": "{{count}} Lebenspunkt übrig", + "lives_plural": "{{count}} Lebenspunkte übrig", + "lives_indefinite": "ein Lebenspunkt übrig", + "lives_plural_indefinite": "einige Lebenspunkte übrig", + "friend": "Ein Freund", + "friend_male": "Ein Freund", + "friend_female": "Eine Freundin", + "statement": "{{brand}} ist ein JavaScript client framework der nächsten Generation", + "novar": "{{notexisting}} sollte mit einem Leerstring ersetzt werden" + } + } + }; + + sut = new I18N(new EventAggregator(), new BindingSignaler()); + sut.setup({ + resources: resources, + lng: "en", + fallbackLng: "en", + debug: false + }); + }); + + it("should translate a simple key without options", () => { + expect(sut.tr("friend", { count: 0 })).toEqual("A friend"); + }); + + it("should replace a not provided variable with an empty string", () => { + expect(sut.tr("novar")).toEqual(" should be replaced with an empty string"); + }); + + it("should properly switch locales", (done) => { + expect(sut.getLocale()).toBe("en"); + + sut.setLocale("de").then( () => { + expect(sut.getLocale()).toBe("de"); + expect(sut.tr("friend", { count: 0 })).toEqual("Ein Freund"); + done(); + }); + }); + + it("should pass on provided options", () => { + expect(sut.i18next.options.debug).toBe(false); + expect(sut.i18next.options.fallbackLng).toEqual(["en"]); + }); + + it("should map complex object", () => { + let options = { + "threshold": { + "min": 1, + "max": 10 + }, + "field": "Age" + }; + + expect(sut.tr("complex", options)).toEqual("Age should be between 1 and 10"); + }); + + it("should support nested translations", () => { + expect(sut.tr("nested_referencing", { count: 1, round: 1 })).toEqual("1 life remaining in round 1"); + }); + + it("should automatically add global variables as options if none provided", () => { + sut.registerGlobalVariable("brand", "Aurelia"); + + expect(sut.tr("statement")).toEqual("Aurelia is a next next gen JavaScript client framework"); + }); + + it("should prefer passed in options vs. global variables", () => { + sut.registerGlobalVariable("brand", "Aurelia"); + + expect(sut.tr("statement", { brand: "Aurelia.io" })).toEqual("Aurelia.io is a next next gen JavaScript client framework"); + }); + + it("should allow unregistering of global variables", () => { + sut.registerGlobalVariable("brand", "Aurelia"); + expect(sut.tr("statement")).toEqual("Aurelia is a next next gen JavaScript client framework"); + + sut.unregisterGlobalVariable("brand"); + expect(sut.tr("statement")).toEqual(" is a next next gen JavaScript client framework"); + }); + + it("should rewrite undefined options with empty string", () => { + expect(sut.tr("nested_referencing", { count: 1, round: undefined })).toEqual("1 life remaining in round "); + }); + + it("should trigger an event when switching locales", (done) => { + let subscription = (sut as any).ea.subscribe("i18n:locale:changed", (payload: I18NEventPayload) => { + subscription.dispose(); + + expect(payload.oldValue).toBe("en"); + expect(payload.newValue).toBe("de"); + done(); + }); + + sut.setLocale("de"); + }); + + it("should handle undefined elements during translation updates", () => { + expect(() => { (sut.updateTranslations as any)(); }).not.toThrow(); + }); + + it("should not process comment nodes during translation updates", () => { + let comment = document.createComment("A DEMO COMMENT"); + expect(() => { sut.updateTranslations(comment as any); }).not.toThrow(); + }); +}); diff --git a/test/unit/i18n.update-translations.spec.js b/test/unit/i18n.update-translations.spec.js deleted file mode 100644 index 16bbd68e..00000000 --- a/test/unit/i18n.update-translations.spec.js +++ /dev/null @@ -1,231 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {EventAggregator} from 'aurelia-event-aggregator'; - -describe('testing i18n translation update', () => { - let sut; - let resources; - let template; - let ea; - - beforeEach(done => { - System.config({ - 'paths': { - 'fixture:*': 'test/unit/fixtures/*.js' - } - }); - - resources = { - en: { - translation: { - 'title': 'Title', - 'description': 'Description', - 'description2': 'Description with some bold', - 'nested_referencing': 'The $t(title) is the header', - 'description-class': 'red', - 'params': 'My name is {{name}}', - 'testimage': 'testimage-english.jpg' - } - }, - de: { - translation: { - 'title': 'Titel', - 'description': 'Beschreibung', - 'description2': 'Beschreibung mit Fettdruck', - 'nested_referencing': 'Der $t(title) ist der Kopf', - 'description-class': 'blue', - 'params': 'Meine Name ist {{name}}', - 'testimage': 'testimage-german.jpg' - } - } - }; - - ea = new EventAggregator(); - sut = new I18N(ea, new BindingSignaler()); - let i18nextSetupPromise = sut.setup({ - resources: resources, - lng: 'en', - attributes: ['t', 'data-i18n'], - fallbackLng: 'en', - debug: false - }); - - //load the the html fixture - let systemImportPromise = System.import('fixture:template.html!text').then((result) => { - template = document.createElement('div'); - template.innerHTML = result; - if (template.firstChild instanceof HTMLTemplateElement) template.innerHTML = template.firstChild.innerHTML; - document.body.appendChild(template); - }); - - //update the translations in the template when the locale changes - ea.subscribe('i18n:locale:changed', payload => { - sut.updateTranslations(template); - }); - - Promise.all([i18nextSetupPromise, systemImportPromise]).then(() => done()); - }); - - - describe('init locale', () => { - beforeEach(done => { - sut.setLocale('en').then(() => done()); - }); - - - it('should not update translations if no attributes defined in options', (done) => { - ea = new EventAggregator(); - sut = new I18N(ea, new BindingSignaler()); - sut.setup({ - resStore: resources, - lng: 'en', - getAsync: false, - sendMissing: false, - fallbackLng: 'en', - debug: false - }); - - //load the the html fixture - System.import('fixture:template.html!text').then((result) => { - template = document.createElement('div'); - template.innerHTML = result; - - if (template.firstChild instanceof HTMLTemplateElement) { - template.innerHTML = template.firstChild.innerHTML; - } - - document.body.appendChild(template); - done(); - }); - - expect(template.querySelector('#test1').innerHTML.trim()).toBe('Title'); - expect(template.querySelector('#test2').innerHTML.trim()).toBe('Description'); - sut.setLocale('de'); - expect(template.querySelector('#test1').innerHTML.trim()).toBe('Title'); - expect(template.querySelector('#test2').innerHTML.trim()).toBe('Description'); - }); - - it('should translate contents of elements with a translation attribute', done => { - expect(template.querySelector('#test1').innerHTML.trim()).toBe('Title'); - expect(template.querySelector('#test2').innerHTML.trim()).toBe('Description'); - sut.setLocale('de').then(() => { - expect(template.querySelector('#test1').innerHTML.trim()).toBe('Titel'); - expect(template.querySelector('#test2').innerHTML.trim()).toBe('Beschreibung'); - done(); - }); - }); - - it('should translate nested keys', done => { - expect(template.querySelector('#test-nested').innerHTML.trim()).toBe('The Title is the header'); - sut.setLocale('de').then(() => { - expect(template.querySelector('#test-nested').innerHTML.trim()).toBe('Der Titel ist der Kopf'); - done(); - }); - }); - - it('should work with all attributes specified in the options', done => { - let el = template.querySelector('#test-other-attr'); - expect(el.innerHTML.trim()).toBe('Description'); - sut.setLocale('de').then(() => { - expect(el.innerHTML.trim()).toBe('Beschreibung'); - done(); - }); - }); - - it('should set the textContent when using the [text] attribute', done => { - let el = template.querySelector('#test-text'); - expect(el.innerHTML.trim()).toBe('Description'); - sut.setLocale('de').then(() => { - expect(el.innerHTML.trim()).toBe('Beschreibung'); - done(); - }); - }); - - it('should escape html tags by default or when using [text]', done => { - let el = template.querySelector('#test-text-with-tags'); - expect(el.innerHTML.trim()).toBe('Description <b>with some bold</b>'); - sut.setLocale('de').then(() => { - expect(el.innerHTML.trim()).toBe('Beschreibung <b>mit Fettdruck</b>'); - done(); - }); - }); - - it('should allow tags when using the [html] attribute', done => { - let el = template.querySelector('#test-html'); - expect(el.innerHTML.trim()).toBe('Description with some bold'); - sut.setLocale('de').then(() => { - expect(el.innerHTML.trim()).toBe('Beschreibung mit Fettdruck'); - done(); - }); - }); - }); - - it('should prepend the translation when using the [prepend] attribute, and it allows html', done => { - let el = template.querySelector('#test-prepend'); - expect(el.innerHTML.trim()).toBe('content'); - sut.setLocale('de').then(() => { - expect(el.innerHTML.trim()).toBe('Beschreibung mit Fettdruckcontent'); - return sut.setLocale('en'); - }).then(() => { - expect(el.innerHTML.trim()).toBe('Description with some boldcontent'); - done(); - }); - }); - - it('should append the translation when using the [append] attribute, and it allows html', done => { - let el = template.querySelector('#test-append'); - expect(el.innerHTML.trim()).toBe('content'); - sut.setLocale('de').then(() => { - expect(el.innerHTML.trim()).toBe('contentBeschreibung mit Fettdruck'); - return sut.setLocale('en'); - }).then(() => { - expect(el.innerHTML.trim()).toBe('contentDescription with some bold'); - done(); - }); - }); - - it('should set multiple keys when separated with a semicolon', done => { - let el = template.querySelector('#test-multiple'); - expect(el.innerHTML.trim()).toBe('Wrong Description with some bold'); - expect(el.className).toBe(''); - sut.setLocale('de').then(() => { - expect(el.innerHTML.trim()).toBe('Beschreibung mit Fettdruck'); - expect(el.className).toBe('blue'); - return sut.setLocale('en'); - }).then(() => { - expect(el.innerHTML.trim()).toBe('Description with some bold'); - expect(el.className).toBe('red'); - done(); - }); - }); - - it('should set multiple attributes when separated with a comma', done => { - let el = template.querySelector('#test-multiple-attributes'); - expect(el.innerHTML.trim()).toBe('Wrong Description'); - expect(el.getAttribute('alt')).toBe(null); - expect(el.getAttribute('aria-label')).toBe(null); - sut.setLocale('de').then(() => { - expect(el.innerHTML.trim()).toBe('Beschreibung'); - expect(el.getAttribute('alt')).toBe('Beschreibung'); - expect(el.getAttribute('aria-label')).toBe('Beschreibung'); - return sut.setLocale('en'); - }).then(() => { - expect(el.innerHTML.trim()).toBe('Description'); - expect(el.getAttribute('alt')).toBe('Description'); - expect(el.getAttribute('aria-label')).toBe('Description'); - done(); - }); - }); - - it('should set the src attribute for images', done => { - let el = template.querySelector('#test-img'); - expect(el.getAttribute('src')).toBeNull(); - sut.setLocale('de').then(() => { - expect(el.getAttribute('src')).toBe('testimage-german.jpg'); - return sut.setLocale('en'); - }).then(() => { - expect(el.getAttribute('src')).toBe('testimage-english.jpg'); - done(); - }); - }); -}); diff --git a/test/unit/i18n.update-translations.spec.ts b/test/unit/i18n.update-translations.spec.ts new file mode 100644 index 00000000..3c9d2950 --- /dev/null +++ b/test/unit/i18n.update-translations.spec.ts @@ -0,0 +1,205 @@ +/// +import { I18N } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { EventAggregator } from "aurelia-event-aggregator"; +import tpl from "./fixtures/template.html"; + +function loadTemplate() { + //load the the html fixture + const existingElement = document.querySelector("#the-template"); + if (existingElement) { + document.body.removeChild(existingElement); + } + + const template = document.createElement("div"); + template.id = "the-template"; + template.innerHTML = tpl; + template.innerHTML = (template.firstChild! as HTMLElement).innerHTML; + + document.body.appendChild(template); + + return template; +} + +describe("testing i18n translation update", () => { + let sut: I18N; + let resources: any; + let template: HTMLElement; + let ea: EventAggregator; + + beforeEach(done => { + resources = { + en: { + translation: { + "title": "Title", + "description": "Description", + "description2": "Description with some bold", + "nested_referencing": "The $t(title) is the header", + "description-class": "red", + "params": "My name is {{name}}", + "testimage": "testimage-english.jpg" + } + }, + de: { + translation: { + "title": "Titel", + "description": "Beschreibung", + "description2": "Beschreibung mit Fettdruck", + "nested_referencing": "Der $t(title) ist der Kopf", + "description-class": "blue", + "params": "Meine Name ist {{name}}", + "testimage": "testimage-german.jpg" + } + } + }; + + ea = new EventAggregator(); + sut = new I18N(ea, new BindingSignaler()); + let i18nextSetupPromise = sut.setup({ + resources: resources, + lng: "en", + attributes: ["t", "data-i18n"], + fallbackLng: "en", + debug: false + }); + + template = loadTemplate(); + + //update the translations in the template when the locale changes + ea.subscribe("i18n:locale:changed", () => { + sut.updateTranslations(template); + }); + + Promise.all([i18nextSetupPromise]).then(() => done()); + }); + + + describe("init locale", () => { + beforeEach(done => { + sut.setLocale("en").then(() => done()); + }); + + it("should translate contents of elements with a translation attribute", done => { + expect(template.querySelector("#test1")!.innerHTML.trim()).toBe("Title"); + expect(template.querySelector("#test2")!.innerHTML.trim()).toBe("Description"); + sut.setLocale("de").then(() => { + expect(template.querySelector("#test1")!.innerHTML.trim()).toBe("Titel"); + expect(template.querySelector("#test2")!.innerHTML.trim()).toBe("Beschreibung"); + done(); + }); + }); + + it("should translate nested keys", done => { + expect(template.querySelector("#test-nested")!.innerHTML.trim()).toBe("The Title is the header"); + sut.setLocale("de").then(() => { + expect(template.querySelector("#test-nested")!.innerHTML.trim()).toBe("Der Titel ist der Kopf"); + done(); + }); + }); + + it("should work with all attributes specified in the options", done => { + let el = template.querySelector("#test-other-attr")!; + expect(el.innerHTML.trim()).toBe("Description"); + sut.setLocale("de").then(() => { + expect(el.innerHTML.trim()).toBe("Beschreibung"); + done(); + }); + }); + + it("should set the textContent when using the [text] attribute", done => { + let el = template.querySelector("#test-text")!; + expect(el.innerHTML.trim()).toBe("Description"); + sut.setLocale("de").then(() => { + expect(el.innerHTML.trim()).toBe("Beschreibung"); + done(); + }); + }); + + it("should escape html tags by default or when using [text]", done => { + let el = template.querySelector("#test-text-with-tags")!; + expect(el.innerHTML.trim()).toBe("Description <b>with some bold</b>"); + sut.setLocale("de").then(() => { + expect(el.innerHTML.trim()).toBe("Beschreibung <b>mit Fettdruck</b>"); + done(); + }); + }); + + it("should allow tags when using the [html] attribute", done => { + let el = template.querySelector("#test-html")!; + expect(el.innerHTML.trim()).toBe("Description with some bold"); + sut.setLocale("de").then(() => { + expect(el.innerHTML.trim()).toBe("Beschreibung mit Fettdruck"); + done(); + }); + }); + }); + + it("should prepend the translation when using the [prepend] attribute, and it allows html", done => { + let el = template.querySelector("#test-prepend")!; + expect(el.innerHTML.trim()).toBe("content"); + sut.setLocale("de").then(() => { + expect(el.innerHTML.trim()).toBe("Beschreibung mit Fettdruckcontent"); + return sut.setLocale("en"); + }).then(() => { + expect(el.innerHTML.trim()).toBe("Description with some boldcontent"); + done(); + }); + }); + + it("should append the translation when using the [append] attribute, and it allows html", done => { + let el = template.querySelector("#test-append")!; + expect(el.innerHTML.trim()).toBe("content"); + sut.setLocale("de").then(() => { + expect(el.innerHTML.trim()).toBe("contentBeschreibung mit Fettdruck"); + return sut.setLocale("en"); + }).then(() => { + expect(el.innerHTML.trim()).toBe("contentDescription with some bold"); + done(); + }); + }); + + it("should set multiple keys when separated with a semicolon", done => { + let el = template.querySelector("#test-multiple")!; + expect(el.innerHTML.trim()).toBe("Wrong Description with some bold"); + expect(el.className).toBe(""); + sut.setLocale("de").then(() => { + expect(el.innerHTML.trim()).toBe("Beschreibung mit Fettdruck"); + expect(el.className).toBe("blue"); + return sut.setLocale("en"); + }).then(() => { + expect(el.innerHTML.trim()).toBe("Description with some bold"); + expect(el.className).toBe("red"); + done(); + }); + }); + + it("should set multiple attributes when separated with a comma", done => { + let el = template.querySelector("#test-multiple-attributes")!; + expect(el.innerHTML.trim()).toBe("Wrong Description"); + expect(el.getAttribute("alt")).toBe(null); + expect(el.getAttribute("aria-label")).toBe(null); + sut.setLocale("de").then(() => { + expect(el.innerHTML.trim()).toBe("Beschreibung"); + expect(el.getAttribute("alt")).toBe("Beschreibung"); + expect(el.getAttribute("aria-label")).toBe("Beschreibung"); + return sut.setLocale("en"); + }).then(() => { + expect(el.innerHTML.trim()).toBe("Description"); + expect(el.getAttribute("alt")).toBe("Description"); + expect(el.getAttribute("aria-label")).toBe("Description"); + done(); + }); + }); + + it("should set the src attribute for images", done => { + let el = template.querySelector("#test-img")!; + expect(el.getAttribute("src")).toBeNull(); + sut.setLocale("de").then(() => { + expect(el.getAttribute("src")).toBe("testimage-german.jpg"); + return sut.setLocale("en"); + }).then(() => { + expect(el.getAttribute("src")).toBe("testimage-english.jpg"); + done(); + }); + }); +}); diff --git a/test/unit/mocks/i18n.js b/test/unit/mocks/i18n.ts similarity index 100% rename from test/unit/mocks/i18n.js rename to test/unit/mocks/i18n.ts diff --git a/test/unit/mocks/rt-vm.js b/test/unit/mocks/rt-vm.ts similarity index 100% rename from test/unit/mocks/rt-vm.js rename to test/unit/mocks/rt-vm.ts diff --git a/test/unit/namespace.spec.js b/test/unit/namespace.spec.js deleted file mode 100644 index 327403d8..00000000 --- a/test/unit/namespace.spec.js +++ /dev/null @@ -1,68 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {EventAggregator} from 'aurelia-event-aggregator'; - -describe('testing i18n namespaces', () => { - let sut; - let resources; - - beforeEach( () => { - resources = { - en: { - translation: { - 'score': 'Score: {{score}}', - 'lives': '{{count}} life remaining', - 'lives_plural': '{{count}} lives remaining', - 'lives_indefinite': 'a life remaining', - 'lives_plural_indefinite': 'some lives remaining', - 'friend': 'A friend', - 'friend_male': 'A boyfriend', - 'friend_female': 'A girlfriend', - 'complex': '{{field}} should be between {{threshold.min}} and {{threshold.max}}', - 'nested_referencing': '$t(lives) in round {{round}}', - 'statement': '{{brand}} is a next next gen JavaScript client framework', - 'novar': '{{notexisting}} should be replaced with an empty string' - } - }, - de: { - translation: { - 'score': 'Punktestand: {{score}}', - 'lives': '{{count}} Lebenspunkt übrig', - 'lives_plural': '{{count}} Lebenspunkte übrig', - 'lives_indefinite': 'ein Lebenspunkt übrig', - 'lives_plural_indefinite': 'einige Lebenspunkte übrig', - 'friend': 'Ein Freund', - 'friend_male': 'Ein Freund', - 'friend_female': 'Eine Freundin', - 'statement': '{{brand}} ist ein JavaScript client framework der nächsten Generation', - 'novar': '{{notexisting}} sollte mit einem Leerstring ersetzt werden' - } - } - }; - - sut = new I18N(new EventAggregator(), new BindingSignaler()); - }); - - it('should have translation as defaultNS', () => { - sut.setup({ - resources: resources, - lng: 'en', - fallbackLng: 'en', - debug: false - }); - - expect(sut.i18next.options.defaultNS).toEqual(['translation']); - }); - - it('should have customns as defaultNS', () => { - sut.setup({ - resources: resources, - lng: 'en', - fallbackLng: 'en', - defaultNS: 'customns', - debug: false - }); - - expect(sut.i18next.options.defaultNS).toBe('customns'); - }); -}); diff --git a/test/unit/namespace.spec.ts b/test/unit/namespace.spec.ts new file mode 100644 index 00000000..00f6e9a1 --- /dev/null +++ b/test/unit/namespace.spec.ts @@ -0,0 +1,68 @@ +import { I18N } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { EventAggregator } from "aurelia-event-aggregator"; + +describe("testing i18n namespaces", () => { + let sut: I18N; + let resources: any; + + beforeEach( () => { + resources = { + en: { + translation: { + "score": "Score: {{score}}", + "lives": "{{count}} life remaining", + "lives_plural": "{{count}} lives remaining", + "lives_indefinite": "a life remaining", + "lives_plural_indefinite": "some lives remaining", + "friend": "A friend", + "friend_male": "A boyfriend", + "friend_female": "A girlfriend", + "complex": "{{field}} should be between {{threshold.min}} and {{threshold.max}}", + "nested_referencing": "$t(lives) in round {{round}}", + "statement": "{{brand}} is a next next gen JavaScript client framework", + "novar": "{{notexisting}} should be replaced with an empty string" + } + }, + de: { + translation: { + "score": "Punktestand: {{score}}", + "lives": "{{count}} Lebenspunkt übrig", + "lives_plural": "{{count}} Lebenspunkte übrig", + "lives_indefinite": "ein Lebenspunkt übrig", + "lives_plural_indefinite": "einige Lebenspunkte übrig", + "friend": "Ein Freund", + "friend_male": "Ein Freund", + "friend_female": "Eine Freundin", + "statement": "{{brand}} ist ein JavaScript client framework der nächsten Generation", + "novar": "{{notexisting}} sollte mit einem Leerstring ersetzt werden" + } + } + }; + + sut = new I18N(new EventAggregator(), new BindingSignaler()); + }); + + it("should have translation as defaultNS", () => { + sut.setup({ + resources: resources, + lng: "en", + fallbackLng: "en", + debug: false + }); + + expect(sut.i18next.options.defaultNS).toEqual(["translation"]); + }); + + it("should have customns as defaultNS", () => { + sut.setup({ + resources: resources, + lng: "en", + fallbackLng: "en", + defaultNS: "customns", + debug: false + }); + + expect(sut.i18next.options.defaultNS).toBe("customns"); + }); +}); diff --git a/test/unit/nfvalueconverter.spec.js b/test/unit/nfvalueconverter.spec.js deleted file mode 100644 index fc9337fd..00000000 --- a/test/unit/nfvalueconverter.spec.js +++ /dev/null @@ -1,55 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {NfValueConverter} from '../../src/nf'; -import {EventAggregator} from 'aurelia-event-aggregator'; - -describe('nfvalueconverter tests', () => { - let sut; - let nfvc; - - beforeEach(function() { - sut = new I18N(new EventAggregator(), new BindingSignaler()); - nfvc = new NfValueConverter(sut); - - sut.setup({ - lng: 'en', - getAsync: false, - sendMissing: false, - fallbackLng: 'en', - debug: false - }); - }); - - it('should display number in the setup locale format by default', () => { - let testNumber = 123456.789; - expect(nfvc.toView(testNumber)).toEqual('123,456.789'); - }); - - it('should display number in the previously modified locale', (done) => { - sut.setLocale('de').then( () => { - let testNumber = 123456.789; - expect(nfvc.toView(testNumber)).toEqual('123.456,789'); - done(); - }); - }); - - it('should return undefined if undefined value given', () => { - let val = undefined; - expect(nfvc.toView(val)).toBe(undefined); - }); - - it('should return null if null value given', () => { - let val = null; - expect(nfvc.toView(val)).toBe(null); - }); - - it('should return empty string if empty string value given', () => { - let val = ''; - expect(nfvc.toView(val)).toBe(''); - }); - - it('should display number as currency', () => { - let testNumber = 123456.789; - expect(nfvc.toView(testNumber, { style: 'currency', currency: 'JPY' }, 'de')).toBe('123.457 ¥'); - }); -}); diff --git a/test/unit/nfvalueconverter.spec.ts b/test/unit/nfvalueconverter.spec.ts new file mode 100644 index 00000000..1fd17e2a --- /dev/null +++ b/test/unit/nfvalueconverter.spec.ts @@ -0,0 +1,53 @@ +import { I18N } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { NfValueConverter } from "../../src/nf"; +import { EventAggregator } from "aurelia-event-aggregator"; + +describe("nfvalueconverter tests", () => { + let sut: I18N; + let nfvc: NfValueConverter; + + beforeEach(function() { + sut = new I18N(new EventAggregator(), new BindingSignaler()); + nfvc = new NfValueConverter(sut); + + sut.setup({ + lng: "en", + fallbackLng: "en", + debug: false + }); + }); + + it("should display number in the setup locale format by default", () => { + let testNumber = 123456.789; + expect(nfvc.toView(testNumber)).toEqual("123,456.789"); + }); + + it("should display number in the previously modified locale", (done) => { + sut.setLocale("de").then( () => { + let testNumber = 123456.789; + expect(nfvc.toView(testNumber)).toEqual("123.456,789"); + done(); + }); + }); + + it("should return undefined if undefined value given", () => { + let val = undefined; + expect(nfvc.toView(val)).toBe(undefined); + }); + + it("should return null if null value given", () => { + let val = null; + expect(nfvc.toView(val)).toBe(null); + }); + + it("should return empty string if empty string value given", () => { + let val = ""; + expect(nfvc.toView(val)).toBe(""); + }); + + it("should display number as currency", () => { + let testNumber = 123456.789; + expect(nfvc.toView(testNumber, { style: "currency", currency: "JPY" }, "de")).toBe("123.457 ¥"); + }); +}); diff --git a/test/unit/numberformat.spec.js b/test/unit/numberformat.spec.js deleted file mode 100644 index 119340e4..00000000 --- a/test/unit/numberformat.spec.js +++ /dev/null @@ -1,110 +0,0 @@ -import {I18N} from '../../src/i18n'; -import {BindingSignaler} from 'aurelia-templating-resources'; -import {EventAggregator} from 'aurelia-event-aggregator'; -import Intl from 'intl'; -import 'intl/locale-data/complete'; - -describe('numberformat tests', () => { - let sut; - - beforeEach( () => { - let resources = { - en: { - translation: { - 'lives': '__count__ life remaining', - 'lives_plural': '__count__ lives remaining', - 'lives_indefinite': 'a life remaining', - 'lives_plural_indefinite': 'some lives remaining' - } - } - }; - - sut = new I18N(new EventAggregator(), new BindingSignaler()); - sut.setup({ - resStore: resources, - lng: 'en', - getAsync: false, - sendMissing: false, - fallbackLng: 'en', - debug: false - }); - }); - - it('should display number in the setup locale format by default', () => { - let nf = sut.nf(); - let testNumber = 123456.789; - - let result = nf.format(testNumber); - expect(result).toEqual('123,456.789'); - }); - - it('should display number in the previously modified locale', (done) => { - sut.setLocale('de').then( () => { - let nf = sut.nf(); - let testNumber = 123456.789; - - expect(nf.format(testNumber)).toEqual('123.456,789'); - - done(); - }); - }); - - it('should display number as currency', () => { - let nf = sut.nf({ style: 'currency', currency: 'EUR' }, 'de'); - let testNumber = 123456.789; - - expect(nf.format(testNumber)).toBe('123.456,79 €'); - }); - - describe('unformating numbers', () => { - beforeEach( () => { - sut = new I18N(new EventAggregator()); - sut.setup({ - resStore: {}, - lng: 'en', - getAsync: false, - sendMissing: false, - fallbackLng: 'en', - debug: false - }); - - window.Intl.NumberFormat = Intl.NumberFormat; - sut.Intl.NumberFormat = Intl.NumberFormat; - }); - - it('should keep the decimal separator', () => { - let sample = '1,234,567.89'; - let result = sut.uf(sample); - - expect(result).toBe(1234567.89); - }); - - it('should respect provided locale', () => { - let sample = '1.234.567,89'; - let result = sut.uf(sample, 'de'); - - expect(result).toBe(1234567.89); - }); - - it('should remove currency symbols', () => { - let sample = '$ 1,234.56'; - let result = sut.uf(sample); - - expect(result).toBe(1234.56); - }); - - it('should remove all non numeric symbols', () => { - let sample = '1,234.56 m/s'; - let result = sut.uf(sample); - - expect(result).toBe(1234.56); - }); - - it('should respect negative values', () => { - let sample = '-1,234.56'; - let result = sut.uf(sample); - - expect(result).toBe(-1234.56); - }); - }); -}); diff --git a/test/unit/numberformat.spec.ts b/test/unit/numberformat.spec.ts new file mode 100644 index 00000000..c02ac181 --- /dev/null +++ b/test/unit/numberformat.spec.ts @@ -0,0 +1,106 @@ +import { I18N } from "../../src/i18n"; +import { BindingSignaler } from "aurelia-templating-resources"; +import { EventAggregator } from "aurelia-event-aggregator"; +import Intl from "intl"; +import "intl/locale-data/complete"; + +describe("numberformat tests", () => { + let sut: I18N; + + beforeEach( () => { + let resources = { + en: { + translation: { + "lives": "__count__ life remaining", + "lives_plural": "__count__ lives remaining", + "lives_indefinite": "a life remaining", + "lives_plural_indefinite": "some lives remaining" + } + } + }; + + sut = new I18N(new EventAggregator(), new BindingSignaler()); + sut.setup({ + resources: resources, + lng: "en", + fallbackLng: "en", + debug: false + }); + }); + + it("should display number in the setup locale format by default", () => { + let nf = sut.nf(); + let testNumber = 123456.789; + + let result = nf.format(testNumber); + expect(result).toEqual("123,456.789"); + }); + + it("should display number in the previously modified locale", (done) => { + sut.setLocale("de").then( () => { + let nf = sut.nf(); + let testNumber = 123456.789; + + expect(nf.format(testNumber)).toEqual("123.456,789"); + + done(); + }); + }); + + it("should display number as currency", () => { + let nf = sut.nf({ style: "currency", currency: "EUR" }, "de"); + let testNumber = 123456.789; + + expect(nf.format(testNumber)).toBe("123.456,79 €"); + }); + + describe("unformating numbers", () => { + beforeEach( () => { + sut = new I18N(new EventAggregator(), new BindingSignaler()); + sut.setup({ + resources: {}, + lng: "en", + fallbackLng: "en", + debug: false + }); + + (window as any).Intl.NumberFormat = Intl.NumberFormat; + sut.Intl.NumberFormat = Intl.NumberFormat; + }); + + it("should keep the decimal separator", () => { + let sample = "1,234,567.89"; + let result = sut.uf(sample); + + expect(result).toBe(1234567.89); + }); + + it("should respect provided locale", () => { + let sample = "1.234.567,89"; + let result = sut.uf(sample, "de"); + + expect(result).toBe(1234567.89); + }); + + it("should remove currency symbols", () => { + let sample = "$ 1,234.56"; + let result = sut.uf(sample); + + expect(result).toBe(1234.56); + }); + + it("should remove all non numeric symbols", () => { + let sample = "1,234.56 m/s"; + let result = sut.uf(sample); + + expect(result).toBe(1234.56); + }); + + it("should respect negative values", () => { + let sample = "-1,234.56"; + let result = sut.uf(sample); + + expect(result).toBe(-1234.56); + }); + }); +}); diff --git a/test/unit/staging-helpers.js b/test/unit/staging-helpers.js deleted file mode 100644 index e6ee3f9e..00000000 --- a/test/unit/staging-helpers.js +++ /dev/null @@ -1,30 +0,0 @@ -import { Backend } from '../../src/aurelia-i18n-loader'; - -export function bootstrapTestEnvironment(component, config) { - component.bootstrap((aurelia) => { - aurelia.use - .standardConfiguration() - .feature('src', (instance) => { - let aliases = ['t', 'i18n']; - - // register backend plugin - instance.i18next.use(Backend.with(aurelia.loader)); - - - return instance.setup(Object.assign({ - backend: { // <-- configure backend settings - loadPath: './locales/{{lng}}/{{ns}}.json' // <-- XHR settings for where to get the files from - }, - interpolation: { - prefix: '{{', - suffix: '}}' - }, - attributes: aliases, - lng: 'en', - defaultNS: 'translation', - fallbackLng: 'en', - debug: false - }, config)); - }); - }); -} diff --git a/test/unit/staging-helpers.ts b/test/unit/staging-helpers.ts new file mode 100644 index 00000000..7cef1353 --- /dev/null +++ b/test/unit/staging-helpers.ts @@ -0,0 +1,34 @@ +import { Backend } from "../../src/aurelia-i18n-loader"; +import { Aurelia } from "aurelia-framework"; +import { AureliaEnhancedI18Next, I18N } from "../../src/i18n"; +import { ComponentTester } from "aurelia-testing"; +import { InitOptions } from "i18next"; + +export function bootstrapTestEnvironment(component: ComponentTester, config: AureliaEnhancedI18Next & InitOptions) { + component.bootstrap((aurelia: Aurelia) => { + return aurelia.use + .standardConfiguration() + .feature("src", (instance: I18N) => { + let aliases = ["t", "i18n"]; + + // register backend plugin + instance.i18next.use(Backend.with(aurelia.loader)); + + + return instance.setup(Object.assign({ + backend: { // <-- configure backend settings + loadPath: "./locales/{{lng}}/{{ns}}.json" // <-- XHR settings for where to get the files from + }, + interpolation: { + prefix: "{{", + suffix: "}}" + }, + attributes: aliases, + lng: "en", + defaultNS: "translation", + fallbackLng: "en", + debug: false + }, config)); + }); + }); +} diff --git a/test/unit/t-attribute.spec.js b/test/unit/t-attribute.spec.js deleted file mode 100644 index bc8b87c3..00000000 --- a/test/unit/t-attribute.spec.js +++ /dev/null @@ -1,30 +0,0 @@ -import { StageComponent } from 'aurelia-testing'; -import { bootstrap } from 'aurelia-bootstrapper'; - -import { bootstrapTestEnvironment } from './staging-helpers'; - -describe('t-attribute', () => { - it('should convert bound integers to strings', done => { - const target = 'test-target'; - const expectedValue = 'Foobar'; - const component = StageComponent - .withResources('test/unit/mocks/rt-vm') - .inView(`
`) - .boundTo({ integer: 1 }); - - bootstrapTestEnvironment(component, { - resources: { - en: { translation: { '1': expectedValue } } - } - }); - - component.create(bootstrap) - .then(() => { - const elem = document.getElementById(target); - expect(elem.innerHTML).toBe(expectedValue); - - component.dispose(); - done(); - }); - }); -}); diff --git a/test/unit/t-attribute.spec.ts b/test/unit/t-attribute.spec.ts new file mode 100644 index 00000000..b0709bcf --- /dev/null +++ b/test/unit/t-attribute.spec.ts @@ -0,0 +1,31 @@ +import { StageComponent } from "aurelia-testing"; +import { bootstrap } from "aurelia-bootstrapper"; + +import { bootstrapTestEnvironment } from "./staging-helpers"; + +describe("t-attribute", () => { + it("should convert bound integers to strings", done => { + const target = "test-target"; + const expectedValue = "Foobar"; + const component = StageComponent + .withResources("mocks/rt-vm") + .inView(`
`) + .boundTo({ integer: 1 }); + + bootstrapTestEnvironment(component, { + resources: { + en: { translation: { "1": expectedValue } } + } + }); + + component.create(bootstrap) + .then(() => { + const elem = document.getElementById(target); + expect(elem).not.toBeNull(); + expect(elem!.innerHTML).toBe(expectedValue); + + component.dispose(); + done(); + }); + }); +}); diff --git a/tsconfig-build.json b/tsconfig-build.json new file mode 100644 index 00000000..99bae9c9 --- /dev/null +++ b/tsconfig-build.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + ".vscode", + "dist", + "doc", + "node_modules", + "test" + ] +} diff --git a/tsconfig.json b/tsconfig.json index 4adcc86c..12510ea2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,25 +1,33 @@ { "compilerOptions": { - "target": "es2015", - "module": "es2015", - "experimentalDecorators": true, - "emitDecoratorMetadata": false, + "module": "commonjs", "moduleResolution": "node", - "stripInternal": true, - "preserveConstEnums": true, - "listFiles": true, + "target": "es5", + "lib": [ + "es2017", + "dom" + ], + "outDir": "dist/commonjs", + "noImplicitAny": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "strictNullChecks": true, "declaration": true, - "removeComments": true, - "lib": ["es2015", "dom"] + "declarationDir": "dist/typings", + "forceConsistentCasingInFileNames": true, + "strictPropertyInitialization": false, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "noEmitHelpers": false, + "strict": true, + "newLine": "LF", + "sourceMap": true }, "exclude": [ - "node_modules", + ".vscode", "dist", - "build", "doc", - "test", - "config.js", - "gulpfile.js", - "karma.conf.js" + "node_modules" ] } diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..5584a907 --- /dev/null +++ b/tslint.json @@ -0,0 +1,11 @@ +{ + "rules": { + "quotemark": [true, "double"], + "object-literal-sort-keys": false, + "ordered-imports": [false], + "whitespace": [true, "check-branch", "check-decl", "check-operator", "check-module", "check-separator", "check-type"], + "interface-name": [true, "never-prefix"], + "no-shadowed-variable": false, + "no-string-literal": false + } +}