From e5e277dfa74d99ee9952f0b731eae4ec30e628ea Mon Sep 17 00:00:00 2001 From: Sam Armstrong Date: Mon, 1 Jul 2019 23:25:59 -0700 Subject: [PATCH] Change project to use validation project pattern --- .circleci/config.yml | 45 + .editorconfig | 9 +- .eslintrc.json | 8 - .gitignore | 8 +- .npmignore | 19 +- .vscode/extensions.json | 5 + .vscode/settings.json | 7 + README.md | 64 +- bower.json | 2 +- build/args.js | 13 - build/babel-options.js | 65 - build/paths.js | 32 - build/tasks/build.js | 130 - build/tasks/clean.js | 9 - build/tasks/dev.js | 10 - build/tasks/doc.js | 46 - build/tasks/lint.js | 10 - build/tasks/prepare-release.js | 33 - build/tasks/test.js | 40 - build/typescript-options.js | 9 - config.js | 83 - dist/amd/aurelia-dependency-injection.js | 753 -- dist/amd/index.js | 16 - dist/aurelia-dependency-injection.d.ts | 511 - dist/aurelia-dependency-injection.js | 1138 --- dist/commonjs/aurelia-dependency-injection.js | 756 -- dist/commonjs/index.js | 17 - dist/es2015/aurelia-dependency-injection.js | 647 -- dist/es2015/index.js | 1 - .../aurelia-dependency-injection.js | 740 -- dist/native-modules/index.js | 1 - dist/system/aurelia-dependency-injection.js | 811 -- dist/system/index.js | 18 - doc/CHANGELOG.md | 18 + doc/api.json | 7 +- doc/shape-defs.js | 52 + doc/shape-doc.js | 24 + gulpfile.js | 1 - karma.conf.js | 54 +- package-lock.json | 8536 +++++++---------- package.json | 97 +- rollup.config.js | 112 + src/aurelia-dependency-injection.ts | 6 + src/container.js | 484 - src/container.ts | 585 ++ src/injection.js | 44 - src/injection.ts | 60 + src/internal.d.ts | 19 + src/invokers.js | 97 - src/invokers.ts | 126 + src/registrations.js | 105 - src/registrations.ts | 147 + src/resolvers.js | 420 - src/resolvers.ts | 574 ++ src/types.d.ts | 44 + test/container.spec.js | 252 - test/container.spec.ts | 273 + test/injection.spec.js | 593 -- test/injection.spec.ts | 598 ++ test/jasmine.d.ts | 7 + test/main.ts | 50 + test/{metadata.spec.js => metadata.spec.ts} | 22 +- test/reflect.d.ts | 4 + test/registration.spec.js | 137 - test/registration.spec.ts | 142 + test/resolver.spec.js | 786 -- test/resolver.spec.ts | 701 ++ test/{setup.js => setup.ts} | 0 tsconfig.build.json | 27 + tsconfig.json | 32 +- tslint.json | 21 + 71 files changed, 7107 insertions(+), 14206 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 .eslintrc.json create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json delete mode 100644 build/args.js delete mode 100644 build/babel-options.js delete mode 100644 build/paths.js delete mode 100644 build/tasks/build.js delete mode 100644 build/tasks/clean.js delete mode 100644 build/tasks/dev.js delete mode 100644 build/tasks/doc.js delete mode 100644 build/tasks/lint.js delete mode 100644 build/tasks/prepare-release.js delete mode 100644 build/tasks/test.js delete mode 100644 build/typescript-options.js delete mode 100644 config.js delete mode 100644 dist/amd/aurelia-dependency-injection.js delete mode 100644 dist/amd/index.js delete mode 100644 dist/aurelia-dependency-injection.d.ts delete mode 100644 dist/aurelia-dependency-injection.js delete mode 100644 dist/commonjs/aurelia-dependency-injection.js delete mode 100644 dist/commonjs/index.js delete mode 100644 dist/es2015/aurelia-dependency-injection.js delete mode 100644 dist/es2015/index.js delete mode 100644 dist/native-modules/aurelia-dependency-injection.js delete mode 100644 dist/native-modules/index.js delete mode 100644 dist/system/aurelia-dependency-injection.js delete mode 100644 dist/system/index.js create mode 100644 doc/shape-defs.js create mode 100644 doc/shape-doc.js delete mode 100644 gulpfile.js create mode 100644 rollup.config.js create mode 100644 src/aurelia-dependency-injection.ts delete mode 100644 src/container.js create mode 100644 src/container.ts delete mode 100644 src/injection.js create mode 100644 src/injection.ts create mode 100644 src/internal.d.ts delete mode 100644 src/invokers.js create mode 100644 src/invokers.ts delete mode 100644 src/registrations.js create mode 100644 src/registrations.ts delete mode 100644 src/resolvers.js create mode 100644 src/resolvers.ts create mode 100644 src/types.d.ts delete mode 100644 test/container.spec.js create mode 100644 test/container.spec.ts delete mode 100644 test/injection.spec.js create mode 100644 test/injection.spec.ts create mode 100644 test/jasmine.d.ts create mode 100644 test/main.ts rename test/{metadata.spec.js => metadata.spec.ts} (55%) create mode 100644 test/reflect.d.ts delete mode 100644 test/registration.spec.js create mode 100644 test/registration.spec.ts delete mode 100644 test/resolver.spec.js create mode 100644 test/resolver.spec.ts rename test/{setup.js => setup.ts} (100%) create mode 100644 tsconfig.build.json create mode 100644 tslint.json diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..e4e8dd0 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,45 @@ +version: 2.1 + +map-1: &filter_only_develop + filters: + branches: + only: develop + +map-2: &filter_only_tag + filters: + branches: + ignore: /.*/ + tags: + only: /^v?[0-9]+(\.[0-9]+)*$/ + +orbs: + v1: aurelia/v1@volatile + +workflows: + main: + jobs: + - v1/build_test + - v1/build_merge: + <<: *filter_only_develop + requires: + - v1/build_test + - v1/npm_publish: + <<: *filter_only_tag + name: npm_publish_dry + args: "--dry-run" + - request_publish_latest: + <<: *filter_only_tag + type: approval + requires: + - npm_publish_dry + - v1/npm_publish: + <<: *filter_only_tag + name: npm_publish + context: Aurelia + requires: + - request_publish_latest + - v1/merge_back: + <<: *filter_only_tag + requires: + - npm_publish + diff --git a/.editorconfig b/.editorconfig index 1033e2d..2e86f65 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,10 +5,15 @@ root = true # Unix-style newlines with a newline ending every file [*] -end_of_line = lf +end_of_line = crlf insert_final_newline = true # 2 space indentation [**.*] indent_style = space -indent_size = 2 \ No newline at end of file +indent_size = 2 + +[node_modules/**/*,dist/**/*] +insert_final_newline = false +indent_style = none +indent_size = none diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 019019e..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./node_modules/aurelia-tools/.eslintrc.json", - "rules": { - "no-unused-vars": 0, - "no-shadow": 0, - "no-lone-blocks": 0 - } -} diff --git a/.gitignore b/.gitignore index 76489e1..d7045ac 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,10 @@ jspm_packages bower_components .idea .DS_STORE -build/reports +*.swp +npm-debug.log* +.test +.rollupcache +dist/doc-temp +dist/test +dist diff --git a/.npmignore b/.npmignore index 9c7e619..6cd18a8 100644 --- a/.npmignore +++ b/.npmignore @@ -1,4 +1,15 @@ -jspm_packages -bower_components -.idea -build/reports +.vscode +doc +src +test +.editorconfig +.gitignore +.npmignore +circle.yml +CONTRIBUTING.md +ISSUE_TEMPLATE.md +karma.conf.js +rollup.config.js +tsconfig.build.json +tsconfig.json +tslint.json \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..b3e36c8 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "eg2.tslint" + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..44314be --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "tslint.nodePath": "./node_modules/tslint/bin/tslint", + "editor.formatOnSave": false, + "json.format.enable": false, + "typescript.format.enable": true +} diff --git a/README.md b/README.md index 8f44e3c..478af2a 100644 --- a/README.md +++ b/README.md @@ -17,52 +17,42 @@ You can read documentation on dependency injection [here](https://aurelia.io/doc This library can be used in the **browser** as well as on the **server**. -## Building The Code +## Reporting Issues -To build the code, follow these steps. +Please refer to the [issue template](ISSUE_TEMPLATE.md). Accompany any bug report with a demo of the issue using a [runnable Gist](https://gist.run/?id=381fdb1a4b0865a4c25026187db865ce). -1. Ensure that [NodeJS](http://nodejs.org/) is installed. This provides the platform on which the build tooling runs. -2. From the project folder, execute the following command: +## Building - ```shell - npm install - ``` -3. Ensure that [Gulp](http://gulpjs.com/) is installed. If you need to install it, use the following command: +```shell +npm run build +``` - ```shell - npm install -g gulp - ``` -4. To build the code, you can now run: +## Tests - ```shell - gulp build - ``` -5. You will find the compiled code in the `dist` folder, available in three module formats: AMD, CommonJS and ES6. +```shell +npm run test +``` -6. See `gulpfile.js` for other tasks related to generating the docs and linting. +## Developing -## Running The Tests +Run the tests in watch mode: -To run the unit tests, first ensure that you have followed the steps above in order to install all dependencies and successfully build the library. Once you have done that, proceed with these additional steps: +```shell +npm run develop +``` -1. Ensure that the [Karma](http://karma-runner.github.io/) CLI is installed. If you need to install it, use the following command: +## Publishing - ```shell - npm install -g karma-cli - ``` -2. Ensure that [jspm](http://jspm.io/) is installed. If you need to install it, use the following commnand: +1. Bump the version + + ```shell + npm run bump-version [ | major | minor | patch] + ``` - ```shell - npm install -g jspm - ``` -3. Install the client-side dependencies with jspm: +2. Prepare the release (run tests, run build, docs, release notes) + + ```shell + npm run prepare-release + ``` - ```shell - jspm install - ``` - -4. You can now run the tests with this command: - - ```shell - karma start - ``` +3. Commit, tag, npm publish (not automated) diff --git a/bower.json b/bower.json index f0a2074..dca6b28 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "aurelia-dependency-injection", - "version": "1.4.2", + "version": "1.4.4", "description": "A lightweight, extensible dependency injection container for JavaScript.", "keywords": [ "aurelia", diff --git a/build/args.js b/build/args.js deleted file mode 100644 index db342fc..0000000 --- a/build/args.js +++ /dev/null @@ -1,13 +0,0 @@ -var yargs = require('yargs'); - -var argv = yargs.argv, - validBumpTypes = "major|minor|patch|prerelease".split("|"), - bump = (argv.bump || 'patch').toLowerCase(); - -if(validBumpTypes.indexOf(bump) === -1) { - throw new Error('Unrecognized bump "' + bump + '".'); -} - -module.exports = { - bump: bump -}; diff --git a/build/babel-options.js b/build/babel-options.js deleted file mode 100644 index 3e99af9..0000000 --- a/build/babel-options.js +++ /dev/null @@ -1,65 +0,0 @@ -var path = require('path'); -var paths = require('./paths'); - -exports.base = function() { - var config = { - filename: '', - filenameRelative: '', - sourceMap: true, - sourceRoot: '', - moduleRoot: path.resolve('src').replace(/\\/g, '/'), - moduleIds: false, - comments: false, - compact: false, - code: true, - presets: [ 'es2015-loose', 'stage-1' ], - plugins: [ - 'syntax-flow', - 'transform-decorators-legacy', - ] - }; - if (!paths.useTypeScriptForDTS) { - config.plugins.push( - ['babel-dts-generator', { - packageName: paths.packageName, - typings: '', - suppressModulePath: true, - suppressComments: false, - memberOutputFilter: /^_.*/, - suppressAmbientDeclaration: true - }] - ); - }; - config.plugins.push('transform-flow-strip-types'); - return config; -} - -exports.commonjs = function() { - var options = exports.base(); - options.plugins.push('transform-es2015-modules-commonjs'); - return options; -}; - -exports.amd = function() { - var options = exports.base(); - options.plugins.push('transform-es2015-modules-amd'); - return options; -}; - -exports.system = function() { - var options = exports.base(); - options.plugins.push('transform-es2015-modules-systemjs'); - return options; -}; - -exports.es2015 = function() { - var options = exports.base(); - options.presets = ['stage-1'] - return options; -}; - -exports['native-modules'] = function() { - var options = exports.base(); - options.presets[0] = 'es2015-loose-native-modules'; - return options; -} diff --git a/build/paths.js b/build/paths.js deleted file mode 100644 index 941f8b7..0000000 --- a/build/paths.js +++ /dev/null @@ -1,32 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -// hide warning // -var emitter = require('events'); -emitter.defaultMaxListeners = 20; - -var appRoot = 'src/'; -var pkg = JSON.parse(fs.readFileSync('./package.json', 'utf-8')); - -var paths = { - root: appRoot, - source: appRoot + '**/*.js', - html: appRoot + '**/*.html', - style: 'styles/**/*.css', - output: 'dist/', - doc:'./doc', - unitTests: 'test/**/*.js', - e2eSpecsSrc: 'test/e2e/src/*.js', - e2eSpecsDist: 'test/e2e/dist/', - packageName: pkg.name, - ignore: [], - useTypeScriptForDTS: true, - importsToAdd: [], - sort: false -}; - -paths.files = ['resolvers.js', 'invokers.js', 'registrations.js', 'container.js', 'injection.js'].map(function(file){ - return paths.root + file; -}); - -module.exports = paths; diff --git a/build/tasks/build.js b/build/tasks/build.js deleted file mode 100644 index 9b5f5b9..0000000 --- a/build/tasks/build.js +++ /dev/null @@ -1,130 +0,0 @@ -var gulp = require('gulp'); -var runSequence = require('run-sequence'); -var to5 = require('gulp-babel'); -var paths = require('../paths'); -var compilerOptions = require('../babel-options'); -var compilerTsOptions = require('../typescript-options'); -var assign = Object.assign || require('object.assign'); -var through2 = require('through2'); -var concat = require('gulp-concat'); -var insert = require('gulp-insert'); -var rename = require('gulp-rename'); -var tools = require('aurelia-tools'); -var ts = require('gulp-typescript'); -var gutil = require('gulp-util'); -var gulpIgnore = require('gulp-ignore'); -var merge = require('merge2'); -var jsName = paths.packageName + '.js'; -var compileToModules = ['es2015', 'commonjs', 'amd', 'system', 'native-modules']; - -function cleanGeneratedCode() { - return through2.obj(function(file, enc, callback) { - file.contents = new Buffer(tools.cleanGeneratedCode(file.contents.toString('utf8'))); - this.push(file); - return callback(); - }); -} - -gulp.task('build-index', function() { - var importsToAdd = paths.importsToAdd.slice(); - - var src = gulp.src(paths.files); - - if (paths.sort) { - src = src.pipe(tools.sortFiles()); - } - - if (paths.ignore) { - paths.ignore.forEach(function(filename){ - src = src.pipe(gulpIgnore.exclude(filename)); - }); - } - - return src.pipe(through2.obj(function(file, enc, callback) { - file.contents = new Buffer(tools.extractImports(file.contents.toString('utf8'), importsToAdd)); - this.push(file); - return callback(); - })) - .pipe(concat(jsName)) - .pipe(insert.transform(function(contents) { - return tools.createImportBlock(importsToAdd) + contents; - })) - .pipe(gulp.dest(paths.output)); -}); - -function gulpFileFromString(filename, string) { - var src = require('stream').Readable({ objectMode: true }); - src._read = function() { - this.push(new gutil.File({ cwd: paths.appRoot, base: paths.output, path: filename, contents: new Buffer(string) })) - this.push(null) - } - return src; -} - -function srcForBabel() { - return merge( - gulp.src(paths.output + jsName), - gulpFileFromString(paths.output + 'index.js', "export * from './" + paths.packageName + "';") - ); -} - -function srcForTypeScript() { - return gulp - .src(paths.output + paths.packageName + '.js') - .pipe(rename(function (path) { - if (path.extname == '.js') { - path.extname = '.ts'; - } - })); -} - -compileToModules.forEach(function(moduleType){ - gulp.task('build-babel-' + moduleType, function () { - return srcForBabel() - .pipe(to5(assign({}, compilerOptions[moduleType]()))) - .pipe(cleanGeneratedCode()) - .pipe(gulp.dest(paths.output + moduleType)); - }); - - if (moduleType === 'native-modules') return; // typescript doesn't support the combination of: es5 + native modules - - gulp.task('build-ts-' + moduleType, function () { - var tsProject = ts.createProject( - compilerTsOptions({ module: moduleType, target: moduleType == 'es2015' ? 'es2015' : 'es5' }), ts.reporter.defaultReporter()); - var tsResult = srcForTypeScript().pipe(ts(tsProject)); - return tsResult.js - .pipe(gulp.dest(paths.output + moduleType)); - }); -}); - -gulp.task('build-dts', function() { - var tsProject = ts.createProject( - compilerTsOptions({ removeComments: false, target: "es2015", module: "es2015" }), ts.reporter.defaultReporter()); - var tsResult = srcForTypeScript().pipe(ts(tsProject)); - return tsResult.dts - .pipe(gulp.dest(paths.output)); -}); - -gulp.task('build', function(callback) { - return runSequence( - 'clean', - 'build-index', - compileToModules - .map(function(moduleType) { return 'build-babel-' + moduleType }) - .concat(paths.useTypeScriptForDTS ? ['build-dts'] : []), - callback - ); -}); - -gulp.task('build-ts', function(callback) { - return runSequence( - 'clean', - 'build-index', - 'build-babel-native-modules', - compileToModules - .filter(function(moduleType) { return moduleType !== 'native-modules' }) - .map(function(moduleType) { return 'build-ts-' + moduleType }) - .concat(paths.useTypeScriptForDTS ? ['build-dts'] : []), - callback - ); -}); diff --git a/build/tasks/clean.js b/build/tasks/clean.js deleted file mode 100644 index 800cb0b..0000000 --- a/build/tasks/clean.js +++ /dev/null @@ -1,9 +0,0 @@ -var gulp = require('gulp'); -var paths = require('../paths'); -var del = require('del'); -var vinylPaths = require('vinyl-paths'); - -gulp.task('clean', function() { - return gulp.src([paths.output]) - .pipe(vinylPaths(del)); -}); diff --git a/build/tasks/dev.js b/build/tasks/dev.js deleted file mode 100644 index 2d8c619..0000000 --- a/build/tasks/dev.js +++ /dev/null @@ -1,10 +0,0 @@ -var gulp = require('gulp'); -var tools = require('aurelia-tools'); - -gulp.task('update-own-deps', function(){ - tools.updateOwnDependenciesFromLocalRepositories(); -}); - -gulp.task('build-dev-env', function () { - tools.buildDevEnv(); -}); diff --git a/build/tasks/doc.js b/build/tasks/doc.js deleted file mode 100644 index 1bb4f36..0000000 --- a/build/tasks/doc.js +++ /dev/null @@ -1,46 +0,0 @@ -var gulp = require('gulp'); -var paths = require('../paths'); -var typedoc = require('gulp-typedoc'); -var runSequence = require('run-sequence'); -var through2 = require('through2'); - -gulp.task('doc-generate', function(){ - return gulp.src([paths.output + paths.packageName + '.d.ts']) - .pipe(typedoc({ - target: 'es6', - includeDeclarations: true, - moduleResolution: 'node', - json: paths.doc + '/api.json', - name: paths.packageName + '-docs',  - mode: 'modules', - excludeExternals: true, - ignoreCompilerErrors: false, - version: true - })); -}); - -gulp.task('doc-shape', function(){ - return gulp.src([paths.doc + '/api.json']) - .pipe(through2.obj(function(file, enc, callback) { - var json = JSON.parse(file.contents.toString('utf8')).children[0]; - - json = { - name: paths.packageName, - children: json.children, - groups: json.groups - }; - - file.contents = new Buffer(JSON.stringify(json)); - this.push(file); - return callback(); - })) - .pipe(gulp.dest(paths.doc)); -}); - -gulp.task('doc', function(callback){ - return runSequence( - 'doc-generate', - 'doc-shape', - callback - ); -}); diff --git a/build/tasks/lint.js b/build/tasks/lint.js deleted file mode 100644 index 3568c46..0000000 --- a/build/tasks/lint.js +++ /dev/null @@ -1,10 +0,0 @@ -var gulp = require('gulp'); -var paths = require('../paths'); -var eslint = require('gulp-eslint'); - -gulp.task('lint', function() { - return gulp.src([paths.source, paths.unitTests]) - .pipe(eslint()) - .pipe(eslint.format()) - .pipe(eslint.failOnError()); -}); diff --git a/build/tasks/prepare-release.js b/build/tasks/prepare-release.js deleted file mode 100644 index b374e6b..0000000 --- a/build/tasks/prepare-release.js +++ /dev/null @@ -1,33 +0,0 @@ -var gulp = require('gulp'); -var runSequence = require('run-sequence'); -var paths = require('../paths'); -var fs = require('fs'); -var bump = require('gulp-bump'); -var args = require('../args'); -var conventionalChangelog = require('gulp-conventional-changelog'); - -gulp.task('changelog', function () { - return gulp.src(paths.doc + '/CHANGELOG.md', { - buffer: false - }).pipe(conventionalChangelog({ - preset: 'angular' - })) - .pipe(gulp.dest(paths.doc)); -}); - -gulp.task('bump-version', function(){ - return gulp.src(['./package.json', './bower.json']) - .pipe(bump({type:args.bump })) //major|minor|patch|prerelease - .pipe(gulp.dest('./')); -}); - -gulp.task('prepare-release', function(callback){ - return runSequence( - 'build', - 'lint', - 'bump-version', - 'doc', - 'changelog', - callback - ); -}); diff --git a/build/tasks/test.js b/build/tasks/test.js deleted file mode 100644 index c7af441..0000000 --- a/build/tasks/test.js +++ /dev/null @@ -1,40 +0,0 @@ -var gulp = require('gulp'); -var Karma = require('karma').Server; - -/** - * Run test once and exit - */ -gulp.task('test', function (done) { - new Karma({ - configFile: __dirname + '/../../karma.conf.js', - singleRun: true - }, done).start(); -}); - -/** - * Watch for file changes and re-run tests on each change - */ -gulp.task('tdd', function (done) { - new Karma({ - configFile: __dirname + '/../../karma.conf.js' - }, done).start(); -}); - -/** - * Run test once with code coverage and exit - */ -gulp.task('cover', function (done) { - new Karma({ - configFile: __dirname + '/../../karma.conf.js', - singleRun: true, - reporters: ['coverage'], - preprocessors: { - 'test/**/*.js': ['babel'], - 'src/**/*.js': ['babel', 'coverage'] - }, - coverageReporter: { - type: 'html', - dir: 'build/reports/coverage' - } - }, done).start(); -}); diff --git a/build/typescript-options.js b/build/typescript-options.js deleted file mode 100644 index 8a22abe..0000000 --- a/build/typescript-options.js +++ /dev/null @@ -1,9 +0,0 @@ -var tsconfig = require('../tsconfig.json'); -var assign = Object.assign || require('object.assign'); - -module.exports = function(override) { - return assign(tsconfig.compilerOptions, { - "target": override && override.target || "es5", - "typescript": require('typescript') - }, override || {}); -} diff --git a/config.js b/config.js deleted file mode 100644 index a95b9dd..0000000 --- a/config.js +++ /dev/null @@ -1,83 +0,0 @@ -System.config({ - defaultJSExtensions: true, - paths: { - "github:*": "jspm_packages/github/*", - "aurelia-dependency-injection/*": "dist/*", - "npm:*": "jspm_packages/npm/*" - }, - - map: { - "aurelia-logging": "npm:aurelia-logging@1.0.0-beta.1.1.1", - "aurelia-metadata": "npm:aurelia-metadata@1.0.0", - "aurelia-pal": "npm:aurelia-pal@1.0.0", - "aurelia-polyfills": "npm:aurelia-polyfills@1.0.0", - "babel": "npm:babel-core@5.8.38", - "babel-runtime": "npm:babel-runtime@5.8.38", - "core-js": "npm:core-js@2.4.1", - "github:jspm/nodelibs-assert@0.1.0": { - "assert": "npm:assert@1.4.1" - }, - "github:jspm/nodelibs-buffer@0.1.0": { - "buffer": "npm:buffer@3.6.0" - }, - "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.6" - }, - "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.0", - "process": "github:jspm/nodelibs-process@0.1.2", - "util": "npm:util@0.10.3" - }, - "npm:aurelia-metadata@1.0.0": { - "aurelia-pal": "npm:aurelia-pal@1.0.0" - }, - "npm:aurelia-polyfills@1.0.0": { - "aurelia-pal": "npm:aurelia-pal@1.0.0" - }, - "npm:babel-runtime@5.8.38": { - "process": "github:jspm/nodelibs-process@0.1.2" - }, - "npm:buffer@3.6.0": { - "base64-js": "npm:base64-js@0.0.8", - "child_process": "github:jspm/nodelibs-child_process@0.1.0", - "fs": "github:jspm/nodelibs-fs@0.1.2", - "ieee754": "npm:ieee754@1.1.6", - "isarray": "npm:isarray@1.0.0", - "process": "github:jspm/nodelibs-process@0.1.2" - }, - "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:inherits@2.0.1": { - "util": "github:jspm/nodelibs-util@0.1.0" - }, - "npm:path-browserify@0.0.0": { - "process": "github:jspm/nodelibs-process@0.1.2" - }, - "npm:process@0.11.6": { - "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/dist/amd/aurelia-dependency-injection.js b/dist/amd/aurelia-dependency-injection.js deleted file mode 100644 index a10eb0b..0000000 --- a/dist/amd/aurelia-dependency-injection.js +++ /dev/null @@ -1,753 +0,0 @@ -define(['exports', 'aurelia-metadata', 'aurelia-pal'], function (exports, _aureliaMetadata, _aureliaPal) { - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.Container = exports.InvocationHandler = exports._emptyParameters = exports.SingletonRegistration = exports.TransientRegistration = exports.FactoryInvoker = exports.NewInstance = exports.Factory = exports.Parent = exports.Optional = exports.All = exports.Lazy = exports.StrategyResolver = exports.resolver = undefined; - exports.getDecoratorDependencies = getDecoratorDependencies; - exports.lazy = lazy; - exports.all = all; - exports.optional = optional; - exports.parent = parent; - exports.factory = factory; - exports.newInstance = newInstance; - exports.invoker = invoker; - exports.invokeAsFactory = invokeAsFactory; - exports.registration = registration; - exports.transient = transient; - exports.singleton = singleton; - exports.autoinject = autoinject; - exports.inject = inject; - - - - var _dec, _class, _dec2, _class2, _dec3, _class3, _dec4, _class4, _dec5, _class5, _dec6, _class6, _dec7, _class7, _classInvokers; - - var resolver = exports.resolver = _aureliaMetadata.protocol.create('aurelia:resolver', function (target) { - if (!(typeof target.get === 'function')) { - return 'Resolvers must implement: get(container: Container, key: any): any'; - } - - return true; - }); - - var StrategyResolver = exports.StrategyResolver = (_dec = resolver(), _dec(_class = function () { - function StrategyResolver(strategy, state) { - - - this.strategy = strategy; - this.state = state; - } - - StrategyResolver.prototype.get = function get(container, key) { - switch (this.strategy) { - case 0: - return this.state; - case 1: - var _singleton = container.invoke(this.state); - this.state = _singleton; - this.strategy = 0; - return _singleton; - case 2: - return container.invoke(this.state); - case 3: - return this.state(container, key, this); - case 4: - return this.state[0].get(container, key); - case 5: - return container.get(this.state); - default: - throw new Error('Invalid strategy: ' + this.strategy); - } - }; - - return StrategyResolver; - }()) || _class); - var Lazy = exports.Lazy = (_dec2 = resolver(), _dec2(_class2 = function () { - function Lazy(key) { - - - this._key = key; - } - - Lazy.prototype.get = function get(container) { - var _this = this; - - return function () { - return container.get(_this._key); - }; - }; - - Lazy.of = function of(key) { - return new Lazy(key); - }; - - return Lazy; - }()) || _class2); - var All = exports.All = (_dec3 = resolver(), _dec3(_class3 = function () { - function All(key) { - - - this._key = key; - } - - All.prototype.get = function get(container) { - return container.getAll(this._key); - }; - - All.of = function of(key) { - return new All(key); - }; - - return All; - }()) || _class3); - var Optional = exports.Optional = (_dec4 = resolver(), _dec4(_class4 = function () { - function Optional(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - - - this._key = key; - this._checkParent = checkParent; - } - - Optional.prototype.get = function get(container) { - if (container.hasResolver(this._key, this._checkParent)) { - return container.get(this._key); - } - - return null; - }; - - Optional.of = function of(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - return new Optional(key, checkParent); - }; - - return Optional; - }()) || _class4); - var Parent = exports.Parent = (_dec5 = resolver(), _dec5(_class5 = function () { - function Parent(key) { - - - this._key = key; - } - - Parent.prototype.get = function get(container) { - return container.parent ? container.parent.get(this._key) : null; - }; - - Parent.of = function of(key) { - return new Parent(key); - }; - - return Parent; - }()) || _class5); - var Factory = exports.Factory = (_dec6 = resolver(), _dec6(_class6 = function () { - function Factory(key) { - - - this._key = key; - } - - Factory.prototype.get = function get(container) { - var fn = this._key; - var resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - return function () { - for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { - rest[_key] = arguments[_key]; - } - - return container.invoke(fn, rest); - }; - }; - - Factory.of = function of(key) { - return new Factory(key); - }; - - return Factory; - }()) || _class6); - var NewInstance = exports.NewInstance = (_dec7 = resolver(), _dec7(_class7 = function () { - function NewInstance(key) { - - - this.key = key; - this.asKey = key; - - for (var _len2 = arguments.length, dynamicDependencies = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - dynamicDependencies[_key2 - 1] = arguments[_key2]; - } - - this.dynamicDependencies = dynamicDependencies; - } - - NewInstance.prototype.get = function get(container) { - var dynamicDependencies = this.dynamicDependencies.length > 0 ? this.dynamicDependencies.map(function (dependency) { - return dependency['protocol:aurelia:resolver'] ? dependency.get(container) : container.get(dependency); - }) : undefined; - - var fn = this.key; - var resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - var instance = container.invoke(fn, dynamicDependencies); - container.registerInstance(this.asKey, instance); - return instance; - }; - - NewInstance.prototype.as = function as(key) { - this.asKey = key; - return this; - }; - - NewInstance.of = function of(key) { - for (var _len3 = arguments.length, dynamicDependencies = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { - dynamicDependencies[_key3 - 1] = arguments[_key3]; - } - - return new (Function.prototype.bind.apply(NewInstance, [null].concat([key], dynamicDependencies)))(); - }; - - return NewInstance; - }()) || _class7); - function getDecoratorDependencies(target) { - autoinject(target); - - return target.inject; - } - - function lazy(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Lazy.of(keyValue); - }; - } - - function all(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = All.of(keyValue); - }; - } - - function optional() { - var checkParentOrTarget = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - var deco = function deco(checkParent) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Optional.of(inject[index], checkParent); - }; - }; - if (typeof checkParentOrTarget === 'boolean') { - return deco(checkParentOrTarget); - } - return deco(true); - } - - function parent(target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Parent.of(inject[index]); - } - - function factory(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Factory.of(keyValue); - }; - } - - function newInstance(asKeyOrTarget) { - for (var _len4 = arguments.length, dynamicDependencies = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - dynamicDependencies[_key4 - 1] = arguments[_key4]; - } - - var deco = function deco(asKey) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = NewInstance.of.apply(NewInstance, [inject[index]].concat(dynamicDependencies)); - if (!!asKey) { - inject[index].as(asKey); - } - }; - }; - if (arguments.length >= 1) { - return deco(asKeyOrTarget); - } - return deco(); - } - - function invoker(value) { - return function (target) { - _aureliaMetadata.metadata.define(_aureliaMetadata.metadata.invoker, value, target); - }; - } - - function invokeAsFactory(potentialTarget) { - var deco = function deco(target) { - _aureliaMetadata.metadata.define(_aureliaMetadata.metadata.invoker, FactoryInvoker.instance, target); - }; - - return potentialTarget ? deco(potentialTarget) : deco; - } - - var FactoryInvoker = exports.FactoryInvoker = function () { - function FactoryInvoker() { - - } - - FactoryInvoker.prototype.invoke = function invoke(container, fn, dependencies) { - var i = dependencies.length; - var args = new Array(i); - - while (i--) { - args[i] = container.get(dependencies[i]); - } - - return fn.apply(undefined, args); - }; - - FactoryInvoker.prototype.invokeWithDynamicDependencies = function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - var i = staticDependencies.length; - var args = new Array(i); - - while (i--) { - args[i] = container.get(staticDependencies[i]); - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return fn.apply(undefined, args); - }; - - return FactoryInvoker; - }(); - - FactoryInvoker.instance = new FactoryInvoker(); - - function registration(value) { - return function (target) { - _aureliaMetadata.metadata.define(_aureliaMetadata.metadata.registration, value, target); - }; - } - - function transient(key) { - return registration(new TransientRegistration(key)); - } - - function singleton(keyOrRegisterInChild) { - var registerInChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild)); - } - - var TransientRegistration = exports.TransientRegistration = function () { - function TransientRegistration(key) { - - - this._key = key; - } - - TransientRegistration.prototype.registerResolver = function registerResolver(container, key, fn) { - var existingResolver = container.getResolver(this._key || key); - return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver; - }; - - return TransientRegistration; - }(); - - var SingletonRegistration = exports.SingletonRegistration = function () { - function SingletonRegistration(keyOrRegisterInChild) { - var registerInChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - - - if (typeof keyOrRegisterInChild === 'boolean') { - this._registerInChild = keyOrRegisterInChild; - } else { - this._key = keyOrRegisterInChild; - this._registerInChild = registerInChild; - } - } - - SingletonRegistration.prototype.registerResolver = function registerResolver(container, key, fn) { - var targetContainer = this._registerInChild ? container : container.root; - var existingResolver = targetContainer.getResolver(this._key || key); - return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver; - }; - - return SingletonRegistration; - }(); - - function validateKey(key) { - if (key === null || key === undefined) { - throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } - } - var _emptyParameters = exports._emptyParameters = Object.freeze([]); - - _aureliaMetadata.metadata.registration = 'aurelia:registration'; - _aureliaMetadata.metadata.invoker = 'aurelia:invoker'; - - var resolverDecorates = resolver.decorates; - - var InvocationHandler = exports.InvocationHandler = function () { - function InvocationHandler(fn, invoker, dependencies) { - - - this.fn = fn; - this.invoker = invoker; - this.dependencies = dependencies; - } - - InvocationHandler.prototype.invoke = function invoke(container, dynamicDependencies) { - return dynamicDependencies !== undefined ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) : this.invoker.invoke(container, this.fn, this.dependencies); - }; - - return InvocationHandler; - }(); - - function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - var i = staticDependencies.length; - var args = new Array(i); - var lookup = void 0; - - while (i--) { - lookup = staticDependencies[i]; - - if (lookup === null || lookup === undefined) { - throw new Error('Constructor Parameter with index ' + i + ' cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } else { - args[i] = container.get(lookup); - } - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return Reflect.construct(fn, args); - } - - var classInvokers = (_classInvokers = {}, _classInvokers[0] = { - invoke: function invoke(container, Type) { - return new Type(); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[1] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[2] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[3] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[4] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[5] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers.fallback = { - invoke: invokeWithDynamicDependencies, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers); - - function getDependencies(f) { - if (!f.hasOwnProperty('inject')) { - return []; - } - - if (typeof f.inject === 'function') { - return f.inject(); - } - - return f.inject; - } - - var Container = exports.Container = function () { - function Container(configuration) { - - - if (configuration === undefined) { - configuration = {}; - } - - this._configuration = configuration; - this._onHandlerCreated = configuration.onHandlerCreated; - this._handlers = configuration.handlers || (configuration.handlers = new Map()); - this._resolvers = new Map(); - this.root = this; - this.parent = null; - } - - Container.prototype.makeGlobal = function makeGlobal() { - Container.instance = this; - return this; - }; - - Container.prototype.setHandlerCreatedCallback = function setHandlerCreatedCallback(onHandlerCreated) { - this._onHandlerCreated = onHandlerCreated; - this._configuration.onHandlerCreated = onHandlerCreated; - }; - - Container.prototype.registerInstance = function registerInstance(key, instance) { - return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance)); - }; - - Container.prototype.registerSingleton = function registerSingleton(key, fn) { - return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn)); - }; - - Container.prototype.registerTransient = function registerTransient(key, fn) { - return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn)); - }; - - Container.prototype.registerHandler = function registerHandler(key, handler) { - return this.registerResolver(key, new StrategyResolver(3, handler)); - }; - - Container.prototype.registerAlias = function registerAlias(originalKey, aliasKey) { - return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey)); - }; - - Container.prototype.registerResolver = function registerResolver(key, resolver) { - validateKey(key); - - var allResolvers = this._resolvers; - var result = allResolvers.get(key); - - if (result === undefined) { - allResolvers.set(key, resolver); - } else if (result.strategy === 4) { - result.state.push(resolver); - } else { - allResolvers.set(key, new StrategyResolver(4, [result, resolver])); - } - - return resolver; - }; - - Container.prototype.autoRegister = function autoRegister(key, fn) { - fn = fn === undefined ? key : fn; - - if (typeof fn === 'function') { - var _registration = _aureliaMetadata.metadata.get(_aureliaMetadata.metadata.registration, fn); - - if (_registration === undefined) { - return this.registerResolver(key, new StrategyResolver(1, fn)); - } - - return _registration.registerResolver(this, key, fn); - } - - return this.registerResolver(key, new StrategyResolver(0, fn)); - }; - - Container.prototype.autoRegisterAll = function autoRegisterAll(fns) { - var i = fns.length; - while (i--) { - this.autoRegister(fns[i]); - } - }; - - Container.prototype.unregister = function unregister(key) { - this._resolvers.delete(key); - }; - - Container.prototype.hasResolver = function hasResolver(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - validateKey(key); - - return this._resolvers.has(key) || checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent); - }; - - Container.prototype.getResolver = function getResolver(key) { - return this._resolvers.get(key); - }; - - Container.prototype.get = function get(key) { - validateKey(key); - - if (key === Container) { - return this; - } - - if (resolverDecorates(key)) { - return key.get(this, key); - } - - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - var _registration2 = _aureliaMetadata.metadata.get(_aureliaMetadata.metadata.registration, key); - - if (_registration2 === undefined) { - return this.parent._get(key); - } - - return _registration2.registerResolver(this, key, key).get(this, key); - } - - return resolver.get(this, key); - }; - - Container.prototype._get = function _get(key) { - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - return this.parent._get(key); - } - - return resolver.get(this, key); - }; - - Container.prototype.getAll = function getAll(key) { - validateKey(key); - - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return _emptyParameters; - } - - return this.parent.getAll(key); - } - - if (resolver.strategy === 4) { - var state = resolver.state; - var i = state.length; - var results = new Array(i); - - while (i--) { - results[i] = state[i].get(this, key); - } - - return results; - } - - return [resolver.get(this, key)]; - }; - - Container.prototype.createChild = function createChild() { - var child = new Container(this._configuration); - child.root = this.root; - child.parent = this; - return child; - }; - - Container.prototype.invoke = function invoke(fn, dynamicDependencies) { - try { - var _handler = this._handlers.get(fn); - - if (_handler === undefined) { - _handler = this._createInvocationHandler(fn); - this._handlers.set(fn, _handler); - } - - return _handler.invoke(this, dynamicDependencies); - } catch (e) { - throw new _aureliaPal.AggregateError('Error invoking ' + fn.name + '. Check the inner error for details.', e, true); - } - }; - - Container.prototype._createInvocationHandler = function _createInvocationHandler(fn) { - var dependencies = void 0; - - if (fn.inject === undefined) { - dependencies = _aureliaMetadata.metadata.getOwn(_aureliaMetadata.metadata.paramTypes, fn) || _emptyParameters; - } else { - dependencies = []; - var ctor = fn; - while (typeof ctor === 'function') { - var _dependencies; - - (_dependencies = dependencies).push.apply(_dependencies, getDependencies(ctor)); - ctor = Object.getPrototypeOf(ctor); - } - } - - var invoker = _aureliaMetadata.metadata.getOwn(_aureliaMetadata.metadata.invoker, fn) || classInvokers[dependencies.length] || classInvokers.fallback; - - var handler = new InvocationHandler(fn, invoker, dependencies); - return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler; - }; - - return Container; - }(); - - function autoinject(potentialTarget) { - var deco = function deco(target) { - if (!target.hasOwnProperty('inject')) { - target.inject = (_aureliaMetadata.metadata.getOwn(_aureliaMetadata.metadata.paramTypes, target) || _emptyParameters).slice(); - - if (target.inject.length > 0 && target.inject[target.inject.length - 1] === Object) { - target.inject.pop(); - } - } - }; - - return potentialTarget ? deco(potentialTarget) : deco; - } - - function inject() { - for (var _len5 = arguments.length, rest = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - rest[_key5] = arguments[_key5]; - } - - return function (target, key, descriptor) { - if (typeof descriptor === 'number') { - autoinject(target); - if (rest.length === 1) { - target.inject[descriptor] = rest[0]; - } - return; - } - - if (descriptor) { - var _fn = descriptor.value; - _fn.inject = rest; - } else { - target.inject = rest; - } - }; - } -}); \ No newline at end of file diff --git a/dist/amd/index.js b/dist/amd/index.js deleted file mode 100644 index 6ae9af4..0000000 --- a/dist/amd/index.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['exports', './aurelia-dependency-injection'], function (exports, _aureliaDependencyInjection) { - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - Object.keys(_aureliaDependencyInjection).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function () { - return _aureliaDependencyInjection[key]; - } - }); - }); -}); \ No newline at end of file diff --git a/dist/aurelia-dependency-injection.d.ts b/dist/aurelia-dependency-injection.d.ts deleted file mode 100644 index eecb474..0000000 --- a/dist/aurelia-dependency-injection.d.ts +++ /dev/null @@ -1,511 +0,0 @@ -/** -* Decorator: Indicates that the decorated class/object is a custom resolver. -*/ -export declare const resolver: Function & { - decorates?: any; -}; -/** -* Used to allow functions/classes to specify custom dependency resolution logic. -*/ -export interface Resolver { - /** - * Called by the container to allow custom resolution of dependencies for a function/class. - * @param container The container to resolve from. - * @param key The key that the resolver was registered as. - * @return Returns the resolved object. - */ - get(container: Container, key: any): any; -} -/** -* Used to resolve instances, singletons, transients, aliases -*/ -export declare class StrategyResolver { - strategy: StrategyResolver | number; - state: any; - /** - * Creates an instance of the StrategyResolver class. - * @param strategy The type of resolution strategy. - * @param state The state associated with the resolution strategy. - */ - constructor(strategy: any, state: any); - /** - * Called by the container to allow custom resolution of dependencies for a function/class. - * @param container The container to resolve from. - * @param key The key that the resolver was registered as. - * @return Returns the resolved object. - */ - get(container: Container, key: any): any; -} -/** -* Used to allow functions/classes to specify lazy resolution logic. -*/ -export declare class Lazy { - /** - * Creates an instance of the Lazy class. - * @param key The key to lazily resolve. - */ - constructor(key: any); - /** - * Called by the container to lazily resolve the dependency into a lazy locator function. - * @param container The container to resolve from. - * @return Returns a function which can be invoked at a later time to obtain the actual dependency. - */ - get(container: Container): any; - /** - * Creates a Lazy Resolver for the supplied key. - * @param key The key to lazily resolve. - * @return Returns an instance of Lazy for the key. - */ - static of(key: any): Lazy; -} -/** -* Used to allow functions/classes to specify resolution of all matches to a key. -*/ -export declare class All { - /** - * Creates an instance of the All class. - * @param key The key to lazily resolve all matches for. - */ - constructor(key: any); - /** - * Called by the container to resolve all matching dependencies as an array of instances. - * @param container The container to resolve from. - * @return Returns an array of all matching instances. - */ - get(container: Container): any[]; - /** - * Creates an All Resolver for the supplied key. - * @param key The key to resolve all instances for. - * @return Returns an instance of All for the key. - */ - static of(key: any): All; -} -/** -* Used to allow functions/classes to specify an optional dependency, which will be resolved only if already registred with the container. -*/ -export declare class Optional { - /** - * Creates an instance of the Optional class. - * @param key The key to optionally resolve for. - * @param checkParent Indicates whether or not the parent container hierarchy should be checked. - */ - constructor(key: any, checkParent?: boolean); - /** - * Called by the container to provide optional resolution of the key. - * @param container The container to resolve from. - * @return Returns the instance if found; otherwise null. - */ - get(container: Container): any; - /** - * Creates an Optional Resolver for the supplied key. - * @param key The key to optionally resolve for. - * @param [checkParent=true] Indicates whether or not the parent container hierarchy should be checked. - * @return Returns an instance of Optional for the key. - */ - static of(key: any, checkParent?: boolean): Optional; -} -/** -* Used to inject the dependency from the parent container instead of the current one. -*/ -export declare class Parent { - /** - * Creates an instance of the Parent class. - * @param key The key to resolve from the parent container. - */ - constructor(key: any); - /** - * Called by the container to load the dependency from the parent container - * @param container The container to resolve the parent from. - * @return Returns the matching instance from the parent container - */ - get(container: Container): any; - /** - * Creates a Parent Resolver for the supplied key. - * @param key The key to resolve. - * @return Returns an instance of Parent for the key. - */ - static of(key: any): Parent; -} -/** -* Used to allow injecting dependencies but also passing data to the constructor. -*/ -export declare class Factory { - /** - * Creates an instance of the Factory class. - * @param key The key to resolve from the parent container. - */ - constructor(key: any); - /** - * Called by the container to pass the dependencies to the constructor. - * @param container The container to invoke the constructor with dependencies and other parameters. - * @return Returns a function that can be invoked to resolve dependencies later, and the rest of the parameters. - */ - get(container: Container): any; - /** - * Creates a Factory Resolver for the supplied key. - * @param key The key to resolve. - * @return Returns an instance of Factory for the key. - */ - static of(key: any): Factory; -} -/** -* Used to inject a new instance of a dependency, without regard for existing -* instances in the container. Instances can optionally be registered in the container -* under a different key by supplying a key using the `as` method. -*/ -export declare class NewInstance { - /** - * Creates an instance of the NewInstance class. - * @param key The key to resolve/instantiate. - * @param dynamicDependencies An optional list of dynamic dependencies. - */ - constructor(key: any, ...dynamicDependencies: any[]); - /** - * Called by the container to instantiate the dependency and potentially register - * as another key if the `as` method was used. - * @param container The container to resolve the parent from. - * @return Returns the matching instance from the parent container - */ - get(container: any): any; - /** - * Instructs the NewInstance resolver to register the resolved instance using the supplied key. - * @param key The key to register the instance with. - * @return Returns the NewInstance resolver. - */ - as(key: any): this; - /** - * Creates an NewInstance Resolver for the supplied key. - * @param key The key to resolve/instantiate. - * @param dynamicDependencies An optional list of dynamic dependencies. - * @return Returns an instance of NewInstance for the key. - */ - static of(key: any, ...dynamicDependencies: any[]): NewInstance; -} -/** -* Used by parameter decorators to call autoinject for the target and retrieve the target's inject property. -* @param target The target class. -* @return Returns the target's own inject property. -*/ -export declare function getDecoratorDependencies(target: any): any; -/** -* Decorator: Specifies the dependency should be lazy loaded -*/ -export declare function lazy(keyValue: any): (target: any, key: any, index: any) => void; -/** -* Decorator: Specifies the dependency should load all instances of the given key. -*/ -export declare function all(keyValue: any): (target: any, key: any, index: any) => void; -/** -* Decorator: Specifies the dependency as optional -*/ -export declare function optional(checkParentOrTarget?: boolean): (target: any, key: any, index: any) => void; -/** -* Decorator: Specifies the dependency to look at the parent container for resolution -*/ -export declare function parent(target: any, key: any, index: any): void; -/** -* Decorator: Specifies the dependency to create a factory method, that can accept optional arguments -*/ -export declare function factory(keyValue: any): (target: any, key: any, index: any) => void; -/** -* Decorator: Specifies the dependency as a new instance. Instances can optionally be registered in the container -* under a different key and/or use dynamic dependencies -*/ -export declare function newInstance(asKeyOrTarget?: any, ...dynamicDependencies: any[]): (target: any, key: any, index: any) => void; -/** -* Decorator: Specifies a custom Invoker for the decorated item. -*/ -export declare function invoker(value: Invoker): any; -/** -* Decorator: Specifies that the decorated item should be called as a factory function, rather than a constructor. -*/ -export declare function invokeAsFactory(potentialTarget?: any): any; -/** -* A strategy for invoking a function, resulting in an object instance. -*/ -export interface Invoker { - /** - * Invokes the function with the provided dependencies. - * @param fn The constructor or factory function. - * @param dependencies The dependencies of the function call. - * @return The result of the function invocation. - */ - invoke(container: Container, fn: Function, dependencies: any[]): any; - /** - * Invokes the function with the provided dependencies. - * @param fn The constructor or factory function. - * @param staticDependencies The static dependencies of the function. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invokeWithDynamicDependencies(container: Container, fn: Function, staticDependencies: any[], dynamicDependencies: any[]): any; -} -/** -* An Invoker that is used to invoke a factory method. -*/ -export declare class FactoryInvoker { - /** - * The singleton instance of the FactoryInvoker. - */ - static instance: FactoryInvoker; - /** - * Invokes the function with the provided dependencies. - * @param container The calling container. - * @param fn The constructor or factory function. - * @param dependencies The dependencies of the function call. - * @return The result of the function invocation. - */ - invoke(container: Container, fn: Function, dependencies: any[]): any; - /** - * Invokes the function with the provided dependencies. - * @param container The calling container. - * @param fn The constructor or factory function. - * @param staticDependencies The static dependencies of the function. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invokeWithDynamicDependencies(container: Container, fn: Function, staticDependencies: any[], dynamicDependencies: any[]): any; -} -/** -* Decorator: Specifies a custom registration strategy for the decorated class/function. -*/ -export declare function registration(value: Registration): any; -/** -* Decorator: Specifies to register the decorated item with a "transient" lifetime. -*/ -export declare function transient(key?: any): any; -/** -* Decorator: Specifies to register the decorated item with a "singleton" lifetime. -*/ -export declare function singleton(keyOrRegisterInChild?: any, registerInChild?: boolean): any; -/** -* Customizes how a particular function is resolved by the Container. -*/ -export interface Registration { - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver; -} -/** -* Used to allow functions/classes to indicate that they should be registered as transients with the container. -*/ -export declare class TransientRegistration { - /** - * Creates an instance of TransientRegistration. - * @param key The key to register as. - */ - constructor(key?: any); - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver; -} -/** -* Used to allow functions/classes to indicate that they should be registered as singletons with the container. -*/ -export declare class SingletonRegistration { - /** - * Creates an instance of SingletonRegistration. - * @param key The key to register as. - */ - constructor(keyOrRegisterInChild?: any, registerInChild?: boolean); - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver; -} -export declare const _emptyParameters: any[]; -/** -* Stores the information needed to invoke a function. -*/ -export declare class InvocationHandler { - /** - * The function to be invoked by this handler. - */ - fn: Function; - /** - * The invoker implementation that will be used to actually invoke the function. - */ - invoker: Invoker; - /** - * The statically known dependencies of this function invocation. - */ - dependencies: any[]; - /** - * Instantiates an InvocationDescription. - * @param fn The Function described by this description object. - * @param invoker The strategy for invoking the function. - * @param dependencies The static dependencies of the function call. - */ - constructor(fn: Function, invoker: Invoker, dependencies: any[]); - /** - * Invokes the function. - * @param container The calling container. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invoke(container: Container, dynamicDependencies?: any[]): any; -} -/** -* Used to configure a Container instance. -*/ -export interface ContainerConfiguration { - /** - * An optional callback which will be called when any function needs an InvocationHandler created (called once per Function). - */ - onHandlerCreated?: (handler: InvocationHandler) => InvocationHandler; - handlers?: Map; -} -/** -* A lightweight, extensible dependency injection container. -*/ -export declare class Container { - /** - * The global root Container instance. Available if makeGlobal() has been called. Aurelia Framework calls makeGlobal(). - */ - static instance: Container; - /** - * The parent container in the DI hierarchy. - */ - parent: Container; - /** - * The root container in the DI hierarchy. - */ - root: Container; - /** - * Creates an instance of Container. - * @param configuration Provides some configuration for the new Container instance. - */ - constructor(configuration?: ContainerConfiguration); - /** - * Makes this container instance globally reachable through Container.instance. - */ - makeGlobal(): Container; - /** - * Sets an invocation handler creation callback that will be called when new InvocationsHandlers are created (called once per Function). - * @param onHandlerCreated The callback to be called when an InvocationsHandler is created. - */ - setHandlerCreatedCallback(onHandlerCreated: (handler: InvocationHandler) => InvocationHandler): void; - /** - * Registers an existing object instance with the container. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param instance The instance that will be resolved when the key is matched. This defaults to the key value when instance is not supplied. - * @return The resolver that was registered. - */ - registerInstance(key: any, instance?: any): Resolver; - /** - * Registers a type (constructor function) such that the container always returns the same instance for each request. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - * @return The resolver that was registered. - */ - registerSingleton(key: any, fn?: Function): Resolver; - /** - * Registers a type (constructor function) such that the container returns a new instance for each request. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - * @return The resolver that was registered. - */ - registerTransient(key: any, fn?: Function): Resolver; - /** - * Registers a custom resolution function such that the container calls this function for each request to obtain the instance. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param handler The resolution function to use when the dependency is needed. - * @return The resolver that was registered. - */ - registerHandler(key: any, handler: (container?: Container, key?: any, resolver?: Resolver) => any): Resolver; - /** - * Registers an additional key that serves as an alias to the original DI key. - * @param originalKey The key that originally identified the dependency; usually a constructor function. - * @param aliasKey An alternate key which can also be used to resolve the same dependency as the original. - * @return The resolver that was registered. - */ - registerAlias(originalKey: any, aliasKey: any): Resolver; - /** - * Registers a custom resolution function such that the container calls this function for each request to obtain the instance. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param resolver The resolver to use when the dependency is needed. - * @return The resolver that was registered. - */ - registerResolver(key: any, resolver: Resolver): Resolver; - /** - * Registers a type (constructor function) by inspecting its registration annotations. If none are found, then the default singleton registration is used. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - */ - autoRegister(key: any, fn?: Function): Resolver; - /** - * Registers an array of types (constructor functions) by inspecting their registration annotations. If none are found, then the default singleton registration is used. - * @param fns The constructor function to use when the dependency needs to be instantiated. - */ - autoRegisterAll(fns: any[]): void; - /** - * Unregisters based on key. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - */ - unregister(key: any): void; - /** - * Inspects the container to determine if a particular key has been registred. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param checkParent Indicates whether or not to check the parent container hierarchy. - * @return Returns true if the key has been registred; false otherwise. - */ - hasResolver(key: any, checkParent?: boolean): boolean; - /** - * Gets the resolver for the particular key, if it has been registered. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @return Returns the resolver, if registred, otherwise undefined. - */ - getResolver(key: any): any; - /** - * Resolves a single instance based on the provided key. - * @param key The key that identifies the object to resolve. - * @return Returns the resolved instance. - */ - get(key: any): any; - _get(key: any): any; - /** - * Resolves all instance registered under the provided key. - * @param key The key that identifies the objects to resolve. - * @return Returns an array of the resolved instances. - */ - getAll(key: any): any[]; - /** - * Creates a new dependency injection container whose parent is the current container. - * @return Returns a new container instance parented to this. - */ - createChild(): Container; - /** - * Invokes a function, recursively resolving its dependencies. - * @param fn The function to invoke with the auto-resolved dependencies. - * @param dynamicDependencies Additional function dependencies to use during invocation. - * @return Returns the instance resulting from calling the function. - */ - invoke(fn: Function & { - name?: string; - }, dynamicDependencies?: any[]): any; - _createInvocationHandler(fn: Function & { - inject?: any; - }): InvocationHandler; -} -/** -* Decorator: Directs the TypeScript transpiler to write-out type metadata for the decorated class. -*/ -export declare function autoinject(potentialTarget?: any): any; -/** -* Decorator: Specifies the dependencies that should be injected by the DI Container into the decorated class/function. -*/ -export declare function inject(...rest: any[]): any; diff --git a/dist/aurelia-dependency-injection.js b/dist/aurelia-dependency-injection.js deleted file mode 100644 index 3137bf2..0000000 --- a/dist/aurelia-dependency-injection.js +++ /dev/null @@ -1,1138 +0,0 @@ -import {protocol,metadata} from 'aurelia-metadata'; -import {AggregateError} from 'aurelia-pal'; - -/** -* Decorator: Indicates that the decorated class/object is a custom resolver. -*/ -export const resolver: Function & { decorates?: any } = protocol.create('aurelia:resolver', function(target): string | boolean { - if (!(typeof target.get === 'function')) { - return 'Resolvers must implement: get(container: Container, key: any): any'; - } - - return true; -}); - -/** -* Used to allow functions/classes to specify custom dependency resolution logic. -*/ -export interface Resolver { - /** - * Called by the container to allow custom resolution of dependencies for a function/class. - * @param container The container to resolve from. - * @param key The key that the resolver was registered as. - * @return Returns the resolved object. - */ - get(container: Container, key: any): any; -} - -/** -* Used to resolve instances, singletons, transients, aliases -*/ -@resolver() -export class StrategyResolver { - strategy: StrategyResolver | number; - state: any; - - /** - * Creates an instance of the StrategyResolver class. - * @param strategy The type of resolution strategy. - * @param state The state associated with the resolution strategy. - */ - constructor(strategy, state) { - this.strategy = strategy; - this.state = state; - } - - /** - * Called by the container to allow custom resolution of dependencies for a function/class. - * @param container The container to resolve from. - * @param key The key that the resolver was registered as. - * @return Returns the resolved object. - */ - get(container: Container, key: any): any { - switch (this.strategy) { - case 0: //instance - return this.state; - case 1: //singleton - let singleton = container.invoke(this.state); - this.state = singleton; - this.strategy = 0; - return singleton; - case 2: //transient - return container.invoke(this.state); - case 3: //function - return this.state(container, key, this); - case 4: //array - return this.state[0].get(container, key); - case 5: //alias - return container.get(this.state); - default: - throw new Error('Invalid strategy: ' + this.strategy); - } - } -} - -/** -* Used to allow functions/classes to specify lazy resolution logic. -*/ -@resolver() -export class Lazy { - /** @internal */ - _key: any; - - /** - * Creates an instance of the Lazy class. - * @param key The key to lazily resolve. - */ - constructor(key: any) { - this._key = key; - } - - /** - * Called by the container to lazily resolve the dependency into a lazy locator function. - * @param container The container to resolve from. - * @return Returns a function which can be invoked at a later time to obtain the actual dependency. - */ - get(container: Container): any { - return () => container.get(this._key); - } - - /** - * Creates a Lazy Resolver for the supplied key. - * @param key The key to lazily resolve. - * @return Returns an instance of Lazy for the key. - */ - static of(key: any): Lazy { - return new Lazy(key); - } -} - -/** -* Used to allow functions/classes to specify resolution of all matches to a key. -*/ -@resolver() -export class All { - /** @internal */ - _key: any; - - /** - * Creates an instance of the All class. - * @param key The key to lazily resolve all matches for. - */ - constructor(key: any) { - this._key = key; - } - - /** - * Called by the container to resolve all matching dependencies as an array of instances. - * @param container The container to resolve from. - * @return Returns an array of all matching instances. - */ - get(container: Container): any[] { - return container.getAll(this._key); - } - - /** - * Creates an All Resolver for the supplied key. - * @param key The key to resolve all instances for. - * @return Returns an instance of All for the key. - */ - static of(key: any): All { - return new All(key); - } -} - -/** -* Used to allow functions/classes to specify an optional dependency, which will be resolved only if already registred with the container. -*/ -@resolver() -export class Optional { - /** @internal */ - _key: any; - - /** @internal */ - _checkParent: boolean; - - /** - * Creates an instance of the Optional class. - * @param key The key to optionally resolve for. - * @param checkParent Indicates whether or not the parent container hierarchy should be checked. - */ - constructor(key: any, checkParent: boolean = true) { - this._key = key; - this._checkParent = checkParent; - } - - /** - * Called by the container to provide optional resolution of the key. - * @param container The container to resolve from. - * @return Returns the instance if found; otherwise null. - */ - get(container: Container): any { - if (container.hasResolver(this._key, this._checkParent)) { - return container.get(this._key); - } - - return null; - } - - /** - * Creates an Optional Resolver for the supplied key. - * @param key The key to optionally resolve for. - * @param [checkParent=true] Indicates whether or not the parent container hierarchy should be checked. - * @return Returns an instance of Optional for the key. - */ - static of(key: any, checkParent: boolean = true): Optional { - return new Optional(key, checkParent); - } -} - -/** -* Used to inject the dependency from the parent container instead of the current one. -*/ -@resolver() -export class Parent { - /** @internal */ - _key: any; - - /** - * Creates an instance of the Parent class. - * @param key The key to resolve from the parent container. - */ - constructor(key: any) { - this._key = key; - } - - /** - * Called by the container to load the dependency from the parent container - * @param container The container to resolve the parent from. - * @return Returns the matching instance from the parent container - */ - get(container: Container): any { - return container.parent - ? container.parent.get(this._key) - : null; - } - - /** - * Creates a Parent Resolver for the supplied key. - * @param key The key to resolve. - * @return Returns an instance of Parent for the key. - */ - static of(key: any) : Parent { - return new Parent(key); - } -} - -/** -* Used to allow injecting dependencies but also passing data to the constructor. -*/ -@resolver() -export class Factory { - /** @internal */ - _key: any; - - /** - * Creates an instance of the Factory class. - * @param key The key to resolve from the parent container. - */ - constructor(key: any) { - this._key = key; - } - - /** - * Called by the container to pass the dependencies to the constructor. - * @param container The container to invoke the constructor with dependencies and other parameters. - * @return Returns a function that can be invoked to resolve dependencies later, and the rest of the parameters. - */ - get(container: Container): any { - let fn = this._key; - let resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - return (...rest) => container.invoke(fn, rest); - } - - /** - * Creates a Factory Resolver for the supplied key. - * @param key The key to resolve. - * @return Returns an instance of Factory for the key. - */ - static of(key: any): Factory { - return new Factory(key); - } -} - -/** -* Used to inject a new instance of a dependency, without regard for existing -* instances in the container. Instances can optionally be registered in the container -* under a different key by supplying a key using the `as` method. -*/ -@resolver() -export class NewInstance { - /** @internal */ - key: any; - /** @internal */ - asKey: any; - /** @internal */ - dynamicDependencies: any[]; - - /** - * Creates an instance of the NewInstance class. - * @param key The key to resolve/instantiate. - * @param dynamicDependencies An optional list of dynamic dependencies. - */ - constructor(key, ...dynamicDependencies: any[]) { - this.key = key; - this.asKey = key; - this.dynamicDependencies = dynamicDependencies; - } - - /** - * Called by the container to instantiate the dependency and potentially register - * as another key if the `as` method was used. - * @param container The container to resolve the parent from. - * @return Returns the matching instance from the parent container - */ - get(container) { - let dynamicDependencies = this.dynamicDependencies.length > 0 ? - this.dynamicDependencies.map(dependency => dependency['protocol:aurelia:resolver'] ? - dependency.get(container) : container.get(dependency)) : undefined; - - let fn = this.key; - let resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - const instance = container.invoke(fn, dynamicDependencies); - container.registerInstance(this.asKey, instance); - return instance; - } - - /** - * Instructs the NewInstance resolver to register the resolved instance using the supplied key. - * @param key The key to register the instance with. - * @return Returns the NewInstance resolver. - */ - as(key) { - this.asKey = key; - return this; - } - - /** - * Creates an NewInstance Resolver for the supplied key. - * @param key The key to resolve/instantiate. - * @param dynamicDependencies An optional list of dynamic dependencies. - * @return Returns an instance of NewInstance for the key. - */ - static of(key, ...dynamicDependencies: any[]) { - return new NewInstance(key, ...dynamicDependencies); - } -} - -/** -* Used by parameter decorators to call autoinject for the target and retrieve the target's inject property. -* @param target The target class. -* @return Returns the target's own inject property. -*/ -export function getDecoratorDependencies(target) { - autoinject(target); - - return target.inject; -} - -/** -* Decorator: Specifies the dependency should be lazy loaded -*/ -export function lazy(keyValue: any) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Lazy.of(keyValue); - }; -} - -/** -* Decorator: Specifies the dependency should load all instances of the given key. -*/ -export function all(keyValue: any) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = All.of(keyValue); - }; -} - -/** -* Decorator: Specifies the dependency as optional -*/ -export function optional(checkParentOrTarget: boolean = true) { - let deco = function(checkParent: boolean) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Optional.of(inject[index], checkParent); - }; - }; - if (typeof checkParentOrTarget === 'boolean') { - return deco(checkParentOrTarget); - } - return deco(true); -} - -/** -* Decorator: Specifies the dependency to look at the parent container for resolution -*/ -export function parent(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Parent.of(inject[index]); -} - -/** -* Decorator: Specifies the dependency to create a factory method, that can accept optional arguments -*/ -export function factory(keyValue: any) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Factory.of(keyValue); - }; -} - -/** -* Decorator: Specifies the dependency as a new instance. Instances can optionally be registered in the container -* under a different key and/or use dynamic dependencies -*/ -export function newInstance(asKeyOrTarget?: any, ...dynamicDependencies: any[]) { - let deco = function(asKey?: any) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = NewInstance.of(inject[index], ...dynamicDependencies); - if (!!asKey) { - inject[index].as(asKey); - } - }; - }; - if (arguments.length >= 1) { - return deco(asKeyOrTarget); - } - return deco(); -} - -/** -* Decorator: Specifies a custom Invoker for the decorated item. -*/ -export function invoker(value: Invoker): any { - return function(target) { - metadata.define(metadata.invoker, value, target); - }; -} - -/** -* Decorator: Specifies that the decorated item should be called as a factory function, rather than a constructor. -*/ -export function invokeAsFactory(potentialTarget?: any): any { - let deco = function(target) { - metadata.define(metadata.invoker, FactoryInvoker.instance, target); - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -/** -* A strategy for invoking a function, resulting in an object instance. -*/ -export interface Invoker { - /** - * Invokes the function with the provided dependencies. - * @param fn The constructor or factory function. - * @param dependencies The dependencies of the function call. - * @return The result of the function invocation. - */ - invoke(container: Container, fn: Function, dependencies: any[]): any; - - /** - * Invokes the function with the provided dependencies. - * @param fn The constructor or factory function. - * @param staticDependencies The static dependencies of the function. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invokeWithDynamicDependencies(container: Container, fn: Function, staticDependencies: any[], dynamicDependencies: any[]): any; -} - -/** -* An Invoker that is used to invoke a factory method. -*/ -export class FactoryInvoker { - /** - * The singleton instance of the FactoryInvoker. - */ - static instance: FactoryInvoker; - - /** - * Invokes the function with the provided dependencies. - * @param container The calling container. - * @param fn The constructor or factory function. - * @param dependencies The dependencies of the function call. - * @return The result of the function invocation. - */ - invoke(container: Container, fn: Function, dependencies: any[]): any { - let i = dependencies.length; - let args = new Array(i); - - while (i--) { - args[i] = container.get(dependencies[i]); - } - - return fn.apply(undefined, args); - } - - /** - * Invokes the function with the provided dependencies. - * @param container The calling container. - * @param fn The constructor or factory function. - * @param staticDependencies The static dependencies of the function. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invokeWithDynamicDependencies(container: Container, fn: Function, staticDependencies: any[], dynamicDependencies: any[]): any { - let i = staticDependencies.length; - let args = new Array(i); - - while (i--) { - args[i] = container.get(staticDependencies[i]); - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return fn.apply(undefined, args); - } -} - -FactoryInvoker.instance = new FactoryInvoker(); - -/** -* Decorator: Specifies a custom registration strategy for the decorated class/function. -*/ -export function registration(value: Registration): any { - return function(target) { - metadata.define(metadata.registration, value, target); - }; -} - -/** -* Decorator: Specifies to register the decorated item with a "transient" lifetime. -*/ -export function transient(key?: any): any { - return registration(new TransientRegistration(key)); -} - -/** -* Decorator: Specifies to register the decorated item with a "singleton" lifetime. -*/ -export function singleton(keyOrRegisterInChild?: any, registerInChild: boolean = false): any { - return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild)); -} - -/** -* Customizes how a particular function is resolved by the Container. -*/ -export interface Registration { - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver; -} - -/** -* Used to allow functions/classes to indicate that they should be registered as transients with the container. -*/ -export class TransientRegistration { - /** @internal */ - _key: any; - - /** - * Creates an instance of TransientRegistration. - * @param key The key to register as. - */ - constructor(key?: any) { - this._key = key; - } - - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver { - let existingResolver = container.getResolver(this._key || key); - return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver; - } -} - -/** -* Used to allow functions/classes to indicate that they should be registered as singletons with the container. -*/ -export class SingletonRegistration { - /** @internal */ - _registerInChild: any; - - /** @internal */ - _key: any; - - /** - * Creates an instance of SingletonRegistration. - * @param key The key to register as. - */ - constructor(keyOrRegisterInChild?: any, registerInChild: boolean = false) { - if (typeof keyOrRegisterInChild === 'boolean') { - this._registerInChild = keyOrRegisterInChild; - } else { - this._key = keyOrRegisterInChild; - this._registerInChild = registerInChild; - } - } - - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver { - let targetContainer = this._registerInChild ? container : container.root; - let existingResolver = targetContainer.getResolver(this._key || key); - return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver; - } -} - -function validateKey(key: any) { - if (key === null || key === undefined) { - throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } -} -export const _emptyParameters = Object.freeze([]); - -metadata.registration = 'aurelia:registration'; -metadata.invoker = 'aurelia:invoker'; - -let resolverDecorates = resolver.decorates; - -/** -* Stores the information needed to invoke a function. -*/ -export class InvocationHandler { - /** - * The function to be invoked by this handler. - */ - fn: Function; - - /** - * The invoker implementation that will be used to actually invoke the function. - */ - invoker: Invoker; - - /** - * The statically known dependencies of this function invocation. - */ - dependencies: any[]; - - /** - * Instantiates an InvocationDescription. - * @param fn The Function described by this description object. - * @param invoker The strategy for invoking the function. - * @param dependencies The static dependencies of the function call. - */ - constructor(fn: Function, invoker: Invoker, dependencies: any[]) { - this.fn = fn; - this.invoker = invoker; - this.dependencies = dependencies; - } - - /** - * Invokes the function. - * @param container The calling container. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invoke(container: Container, dynamicDependencies?: any[]): any { - return dynamicDependencies !== undefined - ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) - : this.invoker.invoke(container, this.fn, this.dependencies); - } -} - -/** -* Used to configure a Container instance. -*/ -export interface ContainerConfiguration { - /** - * An optional callback which will be called when any function needs an InvocationHandler created (called once per Function). - */ - onHandlerCreated?: (handler: InvocationHandler) => InvocationHandler; - - handlers?: Map; -} - -function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - let i = staticDependencies.length; - let args = new Array(i); - let lookup; - - while (i--) { - lookup = staticDependencies[i]; - - if (lookup === null || lookup === undefined) { - throw new Error('Constructor Parameter with index ' + i + ' cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } else { - args[i] = container.get(lookup); - } - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return Reflect.construct(fn, args); -} - -let classInvokers = { - [0]: { - invoke(container, Type) { - return new Type(); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [1]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [2]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [3]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [4]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [5]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - fallback: { - invoke: invokeWithDynamicDependencies, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - } -}; - -function getDependencies(f) { - if (!f.hasOwnProperty('inject')) { - return []; - } - - if (typeof f.inject === 'function') { - return f.inject(); - } - - return f.inject; -} - -/** -* A lightweight, extensible dependency injection container. -*/ -export class Container { - /** - * The global root Container instance. Available if makeGlobal() has been called. Aurelia Framework calls makeGlobal(). - */ - static instance: Container; - - /** - * The parent container in the DI hierarchy. - */ - parent: Container; - - /** - * The root container in the DI hierarchy. - */ - root: Container; - - /** @internal */ - _configuration: ContainerConfiguration; - - /** @internal */ - _onHandlerCreated: (handler: InvocationHandler) => InvocationHandler; - - /** @internal */ - _handlers: Map; - - /** @internal */ - _resolvers: Map; - - /** - * Creates an instance of Container. - * @param configuration Provides some configuration for the new Container instance. - */ - constructor(configuration?: ContainerConfiguration) { - if (configuration === undefined) { - configuration = {}; - } - - this._configuration = configuration; - this._onHandlerCreated = configuration.onHandlerCreated; - this._handlers = configuration.handlers || (configuration.handlers = new Map()); - this._resolvers = new Map(); - this.root = this; - this.parent = null; - } - - /** - * Makes this container instance globally reachable through Container.instance. - */ - makeGlobal(): Container { - Container.instance = this; - return this; - } - - /** - * Sets an invocation handler creation callback that will be called when new InvocationsHandlers are created (called once per Function). - * @param onHandlerCreated The callback to be called when an InvocationsHandler is created. - */ - setHandlerCreatedCallback(onHandlerCreated: (handler: InvocationHandler) => InvocationHandler) { - this._onHandlerCreated = onHandlerCreated; - this._configuration.onHandlerCreated = onHandlerCreated; - } - - /** - * Registers an existing object instance with the container. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param instance The instance that will be resolved when the key is matched. This defaults to the key value when instance is not supplied. - * @return The resolver that was registered. - */ - registerInstance(key: any, instance?: any): Resolver { - return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance)); - } - - /** - * Registers a type (constructor function) such that the container always returns the same instance for each request. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - * @return The resolver that was registered. - */ - registerSingleton(key: any, fn?: Function): Resolver { - return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn)); - } - - /** - * Registers a type (constructor function) such that the container returns a new instance for each request. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - * @return The resolver that was registered. - */ - registerTransient(key: any, fn?: Function): Resolver { - return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn)); - } - - /** - * Registers a custom resolution function such that the container calls this function for each request to obtain the instance. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param handler The resolution function to use when the dependency is needed. - * @return The resolver that was registered. - */ - registerHandler(key: any, handler: (container?: Container, key?: any, resolver?: Resolver) => any): Resolver { - return this.registerResolver(key, new StrategyResolver(3, handler)); - } - - /** - * Registers an additional key that serves as an alias to the original DI key. - * @param originalKey The key that originally identified the dependency; usually a constructor function. - * @param aliasKey An alternate key which can also be used to resolve the same dependency as the original. - * @return The resolver that was registered. - */ - registerAlias(originalKey: any, aliasKey: any): Resolver { - return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey)); - } - - /** - * Registers a custom resolution function such that the container calls this function for each request to obtain the instance. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param resolver The resolver to use when the dependency is needed. - * @return The resolver that was registered. - */ - registerResolver(key: any, resolver: Resolver): Resolver { - validateKey(key); - - let allResolvers = this._resolvers; - let result = allResolvers.get(key); - - if (result === undefined) { - allResolvers.set(key, resolver); - } else if (result.strategy === 4) { - result.state.push(resolver); - } else { - allResolvers.set(key, new StrategyResolver(4, [result, resolver])); - } - - return resolver; - } - - /** - * Registers a type (constructor function) by inspecting its registration annotations. If none are found, then the default singleton registration is used. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - */ - autoRegister(key: any, fn?: Function): Resolver { - fn = fn === undefined ? key : fn; - - if (typeof fn === 'function') { - let registration = metadata.get(metadata.registration, fn); - - if (registration === undefined) { - return this.registerResolver(key, new StrategyResolver(1, fn)); - } - - return registration.registerResolver(this, key, fn); - } - - return this.registerResolver(key, new StrategyResolver(0, fn)); - } - - /** - * Registers an array of types (constructor functions) by inspecting their registration annotations. If none are found, then the default singleton registration is used. - * @param fns The constructor function to use when the dependency needs to be instantiated. - */ - autoRegisterAll(fns: any[]): void { - let i = fns.length; - while (i--) { - this.autoRegister(fns[i]); - } - } - - /** - * Unregisters based on key. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - */ - unregister(key: any) : void { - this._resolvers.delete(key); - } - - /** - * Inspects the container to determine if a particular key has been registred. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param checkParent Indicates whether or not to check the parent container hierarchy. - * @return Returns true if the key has been registred; false otherwise. - */ - hasResolver(key: any, checkParent: boolean = false): boolean { - validateKey(key); - - return this._resolvers.has(key) || (checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent)); - } - - /** - * Gets the resolver for the particular key, if it has been registered. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @return Returns the resolver, if registred, otherwise undefined. - */ - getResolver(key: any) { - return this._resolvers.get(key); - } - - /** - * Resolves a single instance based on the provided key. - * @param key The key that identifies the object to resolve. - * @return Returns the resolved instance. - */ - get(key: any): any { - validateKey(key); - - if (key === Container) { - return this; - } - - if (resolverDecorates(key)) { - return key.get(this, key); - } - - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - let registration = metadata.get(metadata.registration, key); - - if (registration === undefined) { - return this.parent._get(key); - } - - return registration.registerResolver(this, key, key).get(this, key); - } - - return resolver.get(this, key); - } - - _get(key) { - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - return this.parent._get(key); - } - - return resolver.get(this, key); - } - - /** - * Resolves all instance registered under the provided key. - * @param key The key that identifies the objects to resolve. - * @return Returns an array of the resolved instances. - */ - getAll(key: any): any[] { - validateKey(key); - - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return _emptyParameters; - } - - return this.parent.getAll(key); - } - - if (resolver.strategy === 4) { - let state = resolver.state; - let i = state.length; - let results = new Array(i); - - while (i--) { - results[i] = state[i].get(this, key); - } - - return results; - } - - return [resolver.get(this, key)]; - } - - /** - * Creates a new dependency injection container whose parent is the current container. - * @return Returns a new container instance parented to this. - */ - createChild(): Container { - let child = new Container(this._configuration); - child.root = this.root; - child.parent = this; - return child; - } - - /** - * Invokes a function, recursively resolving its dependencies. - * @param fn The function to invoke with the auto-resolved dependencies. - * @param dynamicDependencies Additional function dependencies to use during invocation. - * @return Returns the instance resulting from calling the function. - */ - invoke(fn: Function & { name?: string }, dynamicDependencies?: any[]) { - try { - let handler = this._handlers.get(fn); - - if (handler === undefined) { - handler = this._createInvocationHandler(fn); - this._handlers.set(fn, handler); - } - - return handler.invoke(this, dynamicDependencies); - } catch (e) { - throw new AggregateError(`Error invoking ${fn.name}. Check the inner error for details.`, e, true); - } - } - - _createInvocationHandler(fn: Function & { inject?: any }): InvocationHandler { - let dependencies; - - if (fn.inject === undefined) { - dependencies = metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters; - } else { - dependencies = []; - let ctor = fn; - while (typeof ctor === 'function') { - dependencies.push(...getDependencies(ctor)); - ctor = Object.getPrototypeOf(ctor); - } - } - - let invoker = metadata.getOwn(metadata.invoker, fn) - || classInvokers[dependencies.length] || classInvokers.fallback; - - let handler = new InvocationHandler(fn, invoker, dependencies); - return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler; - } -} - -/** -* Decorator: Directs the TypeScript transpiler to write-out type metadata for the decorated class. -*/ -export function autoinject(potentialTarget?: any): any { - let deco = function(target) { - if (!target.hasOwnProperty('inject')) { - target.inject = (metadata.getOwn(metadata.paramTypes, target) || _emptyParameters).slice(); - // TypeScript 3.0 metadata for "...rest" gives type "Object" - // if last parameter is "Object", assume it's a ...rest and remove that metadata. - if (target.inject.length > 0 && - target.inject[target.inject.length - 1] === Object) { - target.inject.pop(); - } - } - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -/** -* Decorator: Specifies the dependencies that should be injected by the DI Container into the decorated class/function. -*/ -export function inject(...rest: any[]): any { - return function(target, key, descriptor) { - // handle when used as a constructor parameter decorator - if (typeof descriptor === 'number') { - autoinject(target); - if (rest.length === 1) { - target.inject[descriptor] = rest[0]; - } - return; - } - // if it's true then we injecting rest into function and not Class constructor - if (descriptor) { - const fn = descriptor.value; - fn.inject = rest; - } else { - target.inject = rest; - } - }; -} diff --git a/dist/commonjs/aurelia-dependency-injection.js b/dist/commonjs/aurelia-dependency-injection.js deleted file mode 100644 index 965ce5a..0000000 --- a/dist/commonjs/aurelia-dependency-injection.js +++ /dev/null @@ -1,756 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Container = exports.InvocationHandler = exports._emptyParameters = exports.SingletonRegistration = exports.TransientRegistration = exports.FactoryInvoker = exports.NewInstance = exports.Factory = exports.Parent = exports.Optional = exports.All = exports.Lazy = exports.StrategyResolver = exports.resolver = undefined; - -var _dec, _class, _dec2, _class2, _dec3, _class3, _dec4, _class4, _dec5, _class5, _dec6, _class6, _dec7, _class7, _classInvokers; - -exports.getDecoratorDependencies = getDecoratorDependencies; -exports.lazy = lazy; -exports.all = all; -exports.optional = optional; -exports.parent = parent; -exports.factory = factory; -exports.newInstance = newInstance; -exports.invoker = invoker; -exports.invokeAsFactory = invokeAsFactory; -exports.registration = registration; -exports.transient = transient; -exports.singleton = singleton; -exports.autoinject = autoinject; -exports.inject = inject; - -var _aureliaMetadata = require('aurelia-metadata'); - -var _aureliaPal = require('aurelia-pal'); - - - -var resolver = exports.resolver = _aureliaMetadata.protocol.create('aurelia:resolver', function (target) { - if (!(typeof target.get === 'function')) { - return 'Resolvers must implement: get(container: Container, key: any): any'; - } - - return true; -}); - -var StrategyResolver = exports.StrategyResolver = (_dec = resolver(), _dec(_class = function () { - function StrategyResolver(strategy, state) { - - - this.strategy = strategy; - this.state = state; - } - - StrategyResolver.prototype.get = function get(container, key) { - switch (this.strategy) { - case 0: - return this.state; - case 1: - var _singleton = container.invoke(this.state); - this.state = _singleton; - this.strategy = 0; - return _singleton; - case 2: - return container.invoke(this.state); - case 3: - return this.state(container, key, this); - case 4: - return this.state[0].get(container, key); - case 5: - return container.get(this.state); - default: - throw new Error('Invalid strategy: ' + this.strategy); - } - }; - - return StrategyResolver; -}()) || _class); -var Lazy = exports.Lazy = (_dec2 = resolver(), _dec2(_class2 = function () { - function Lazy(key) { - - - this._key = key; - } - - Lazy.prototype.get = function get(container) { - var _this = this; - - return function () { - return container.get(_this._key); - }; - }; - - Lazy.of = function of(key) { - return new Lazy(key); - }; - - return Lazy; -}()) || _class2); -var All = exports.All = (_dec3 = resolver(), _dec3(_class3 = function () { - function All(key) { - - - this._key = key; - } - - All.prototype.get = function get(container) { - return container.getAll(this._key); - }; - - All.of = function of(key) { - return new All(key); - }; - - return All; -}()) || _class3); -var Optional = exports.Optional = (_dec4 = resolver(), _dec4(_class4 = function () { - function Optional(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - - - this._key = key; - this._checkParent = checkParent; - } - - Optional.prototype.get = function get(container) { - if (container.hasResolver(this._key, this._checkParent)) { - return container.get(this._key); - } - - return null; - }; - - Optional.of = function of(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - return new Optional(key, checkParent); - }; - - return Optional; -}()) || _class4); -var Parent = exports.Parent = (_dec5 = resolver(), _dec5(_class5 = function () { - function Parent(key) { - - - this._key = key; - } - - Parent.prototype.get = function get(container) { - return container.parent ? container.parent.get(this._key) : null; - }; - - Parent.of = function of(key) { - return new Parent(key); - }; - - return Parent; -}()) || _class5); -var Factory = exports.Factory = (_dec6 = resolver(), _dec6(_class6 = function () { - function Factory(key) { - - - this._key = key; - } - - Factory.prototype.get = function get(container) { - var fn = this._key; - var resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - return function () { - for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { - rest[_key] = arguments[_key]; - } - - return container.invoke(fn, rest); - }; - }; - - Factory.of = function of(key) { - return new Factory(key); - }; - - return Factory; -}()) || _class6); -var NewInstance = exports.NewInstance = (_dec7 = resolver(), _dec7(_class7 = function () { - function NewInstance(key) { - - - this.key = key; - this.asKey = key; - - for (var _len2 = arguments.length, dynamicDependencies = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - dynamicDependencies[_key2 - 1] = arguments[_key2]; - } - - this.dynamicDependencies = dynamicDependencies; - } - - NewInstance.prototype.get = function get(container) { - var dynamicDependencies = this.dynamicDependencies.length > 0 ? this.dynamicDependencies.map(function (dependency) { - return dependency['protocol:aurelia:resolver'] ? dependency.get(container) : container.get(dependency); - }) : undefined; - - var fn = this.key; - var resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - var instance = container.invoke(fn, dynamicDependencies); - container.registerInstance(this.asKey, instance); - return instance; - }; - - NewInstance.prototype.as = function as(key) { - this.asKey = key; - return this; - }; - - NewInstance.of = function of(key) { - for (var _len3 = arguments.length, dynamicDependencies = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { - dynamicDependencies[_key3 - 1] = arguments[_key3]; - } - - return new (Function.prototype.bind.apply(NewInstance, [null].concat([key], dynamicDependencies)))(); - }; - - return NewInstance; -}()) || _class7); -function getDecoratorDependencies(target) { - autoinject(target); - - return target.inject; -} - -function lazy(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Lazy.of(keyValue); - }; -} - -function all(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = All.of(keyValue); - }; -} - -function optional() { - var checkParentOrTarget = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - var deco = function deco(checkParent) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Optional.of(inject[index], checkParent); - }; - }; - if (typeof checkParentOrTarget === 'boolean') { - return deco(checkParentOrTarget); - } - return deco(true); -} - -function parent(target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Parent.of(inject[index]); -} - -function factory(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Factory.of(keyValue); - }; -} - -function newInstance(asKeyOrTarget) { - for (var _len4 = arguments.length, dynamicDependencies = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - dynamicDependencies[_key4 - 1] = arguments[_key4]; - } - - var deco = function deco(asKey) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = NewInstance.of.apply(NewInstance, [inject[index]].concat(dynamicDependencies)); - if (!!asKey) { - inject[index].as(asKey); - } - }; - }; - if (arguments.length >= 1) { - return deco(asKeyOrTarget); - } - return deco(); -} - -function invoker(value) { - return function (target) { - _aureliaMetadata.metadata.define(_aureliaMetadata.metadata.invoker, value, target); - }; -} - -function invokeAsFactory(potentialTarget) { - var deco = function deco(target) { - _aureliaMetadata.metadata.define(_aureliaMetadata.metadata.invoker, FactoryInvoker.instance, target); - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -var FactoryInvoker = exports.FactoryInvoker = function () { - function FactoryInvoker() { - - } - - FactoryInvoker.prototype.invoke = function invoke(container, fn, dependencies) { - var i = dependencies.length; - var args = new Array(i); - - while (i--) { - args[i] = container.get(dependencies[i]); - } - - return fn.apply(undefined, args); - }; - - FactoryInvoker.prototype.invokeWithDynamicDependencies = function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - var i = staticDependencies.length; - var args = new Array(i); - - while (i--) { - args[i] = container.get(staticDependencies[i]); - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return fn.apply(undefined, args); - }; - - return FactoryInvoker; -}(); - -FactoryInvoker.instance = new FactoryInvoker(); - -function registration(value) { - return function (target) { - _aureliaMetadata.metadata.define(_aureliaMetadata.metadata.registration, value, target); - }; -} - -function transient(key) { - return registration(new TransientRegistration(key)); -} - -function singleton(keyOrRegisterInChild) { - var registerInChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild)); -} - -var TransientRegistration = exports.TransientRegistration = function () { - function TransientRegistration(key) { - - - this._key = key; - } - - TransientRegistration.prototype.registerResolver = function registerResolver(container, key, fn) { - var existingResolver = container.getResolver(this._key || key); - return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver; - }; - - return TransientRegistration; -}(); - -var SingletonRegistration = exports.SingletonRegistration = function () { - function SingletonRegistration(keyOrRegisterInChild) { - var registerInChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - - - if (typeof keyOrRegisterInChild === 'boolean') { - this._registerInChild = keyOrRegisterInChild; - } else { - this._key = keyOrRegisterInChild; - this._registerInChild = registerInChild; - } - } - - SingletonRegistration.prototype.registerResolver = function registerResolver(container, key, fn) { - var targetContainer = this._registerInChild ? container : container.root; - var existingResolver = targetContainer.getResolver(this._key || key); - return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver; - }; - - return SingletonRegistration; -}(); - -function validateKey(key) { - if (key === null || key === undefined) { - throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } -} -var _emptyParameters = exports._emptyParameters = Object.freeze([]); - -_aureliaMetadata.metadata.registration = 'aurelia:registration'; -_aureliaMetadata.metadata.invoker = 'aurelia:invoker'; - -var resolverDecorates = resolver.decorates; - -var InvocationHandler = exports.InvocationHandler = function () { - function InvocationHandler(fn, invoker, dependencies) { - - - this.fn = fn; - this.invoker = invoker; - this.dependencies = dependencies; - } - - InvocationHandler.prototype.invoke = function invoke(container, dynamicDependencies) { - return dynamicDependencies !== undefined ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) : this.invoker.invoke(container, this.fn, this.dependencies); - }; - - return InvocationHandler; -}(); - -function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - var i = staticDependencies.length; - var args = new Array(i); - var lookup = void 0; - - while (i--) { - lookup = staticDependencies[i]; - - if (lookup === null || lookup === undefined) { - throw new Error('Constructor Parameter with index ' + i + ' cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } else { - args[i] = container.get(lookup); - } - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return Reflect.construct(fn, args); -} - -var classInvokers = (_classInvokers = {}, _classInvokers[0] = { - invoke: function invoke(container, Type) { - return new Type(); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[1] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[2] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[3] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[4] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[5] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers.fallback = { - invoke: invokeWithDynamicDependencies, - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers); - -function getDependencies(f) { - if (!f.hasOwnProperty('inject')) { - return []; - } - - if (typeof f.inject === 'function') { - return f.inject(); - } - - return f.inject; -} - -var Container = exports.Container = function () { - function Container(configuration) { - - - if (configuration === undefined) { - configuration = {}; - } - - this._configuration = configuration; - this._onHandlerCreated = configuration.onHandlerCreated; - this._handlers = configuration.handlers || (configuration.handlers = new Map()); - this._resolvers = new Map(); - this.root = this; - this.parent = null; - } - - Container.prototype.makeGlobal = function makeGlobal() { - Container.instance = this; - return this; - }; - - Container.prototype.setHandlerCreatedCallback = function setHandlerCreatedCallback(onHandlerCreated) { - this._onHandlerCreated = onHandlerCreated; - this._configuration.onHandlerCreated = onHandlerCreated; - }; - - Container.prototype.registerInstance = function registerInstance(key, instance) { - return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance)); - }; - - Container.prototype.registerSingleton = function registerSingleton(key, fn) { - return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn)); - }; - - Container.prototype.registerTransient = function registerTransient(key, fn) { - return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn)); - }; - - Container.prototype.registerHandler = function registerHandler(key, handler) { - return this.registerResolver(key, new StrategyResolver(3, handler)); - }; - - Container.prototype.registerAlias = function registerAlias(originalKey, aliasKey) { - return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey)); - }; - - Container.prototype.registerResolver = function registerResolver(key, resolver) { - validateKey(key); - - var allResolvers = this._resolvers; - var result = allResolvers.get(key); - - if (result === undefined) { - allResolvers.set(key, resolver); - } else if (result.strategy === 4) { - result.state.push(resolver); - } else { - allResolvers.set(key, new StrategyResolver(4, [result, resolver])); - } - - return resolver; - }; - - Container.prototype.autoRegister = function autoRegister(key, fn) { - fn = fn === undefined ? key : fn; - - if (typeof fn === 'function') { - var _registration = _aureliaMetadata.metadata.get(_aureliaMetadata.metadata.registration, fn); - - if (_registration === undefined) { - return this.registerResolver(key, new StrategyResolver(1, fn)); - } - - return _registration.registerResolver(this, key, fn); - } - - return this.registerResolver(key, new StrategyResolver(0, fn)); - }; - - Container.prototype.autoRegisterAll = function autoRegisterAll(fns) { - var i = fns.length; - while (i--) { - this.autoRegister(fns[i]); - } - }; - - Container.prototype.unregister = function unregister(key) { - this._resolvers.delete(key); - }; - - Container.prototype.hasResolver = function hasResolver(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - validateKey(key); - - return this._resolvers.has(key) || checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent); - }; - - Container.prototype.getResolver = function getResolver(key) { - return this._resolvers.get(key); - }; - - Container.prototype.get = function get(key) { - validateKey(key); - - if (key === Container) { - return this; - } - - if (resolverDecorates(key)) { - return key.get(this, key); - } - - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - var _registration2 = _aureliaMetadata.metadata.get(_aureliaMetadata.metadata.registration, key); - - if (_registration2 === undefined) { - return this.parent._get(key); - } - - return _registration2.registerResolver(this, key, key).get(this, key); - } - - return resolver.get(this, key); - }; - - Container.prototype._get = function _get(key) { - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - return this.parent._get(key); - } - - return resolver.get(this, key); - }; - - Container.prototype.getAll = function getAll(key) { - validateKey(key); - - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return _emptyParameters; - } - - return this.parent.getAll(key); - } - - if (resolver.strategy === 4) { - var state = resolver.state; - var i = state.length; - var results = new Array(i); - - while (i--) { - results[i] = state[i].get(this, key); - } - - return results; - } - - return [resolver.get(this, key)]; - }; - - Container.prototype.createChild = function createChild() { - var child = new Container(this._configuration); - child.root = this.root; - child.parent = this; - return child; - }; - - Container.prototype.invoke = function invoke(fn, dynamicDependencies) { - try { - var _handler = this._handlers.get(fn); - - if (_handler === undefined) { - _handler = this._createInvocationHandler(fn); - this._handlers.set(fn, _handler); - } - - return _handler.invoke(this, dynamicDependencies); - } catch (e) { - throw new _aureliaPal.AggregateError('Error invoking ' + fn.name + '. Check the inner error for details.', e, true); - } - }; - - Container.prototype._createInvocationHandler = function _createInvocationHandler(fn) { - var dependencies = void 0; - - if (fn.inject === undefined) { - dependencies = _aureliaMetadata.metadata.getOwn(_aureliaMetadata.metadata.paramTypes, fn) || _emptyParameters; - } else { - dependencies = []; - var ctor = fn; - while (typeof ctor === 'function') { - var _dependencies; - - (_dependencies = dependencies).push.apply(_dependencies, getDependencies(ctor)); - ctor = Object.getPrototypeOf(ctor); - } - } - - var invoker = _aureliaMetadata.metadata.getOwn(_aureliaMetadata.metadata.invoker, fn) || classInvokers[dependencies.length] || classInvokers.fallback; - - var handler = new InvocationHandler(fn, invoker, dependencies); - return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler; - }; - - return Container; -}(); - -function autoinject(potentialTarget) { - var deco = function deco(target) { - if (!target.hasOwnProperty('inject')) { - target.inject = (_aureliaMetadata.metadata.getOwn(_aureliaMetadata.metadata.paramTypes, target) || _emptyParameters).slice(); - - if (target.inject.length > 0 && target.inject[target.inject.length - 1] === Object) { - target.inject.pop(); - } - } - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -function inject() { - for (var _len5 = arguments.length, rest = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - rest[_key5] = arguments[_key5]; - } - - return function (target, key, descriptor) { - if (typeof descriptor === 'number') { - autoinject(target); - if (rest.length === 1) { - target.inject[descriptor] = rest[0]; - } - return; - } - - if (descriptor) { - var _fn = descriptor.value; - _fn.inject = rest; - } else { - target.inject = rest; - } - }; -} \ No newline at end of file diff --git a/dist/commonjs/index.js b/dist/commonjs/index.js deleted file mode 100644 index eef1b40..0000000 --- a/dist/commonjs/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _aureliaDependencyInjection = require('./aurelia-dependency-injection'); - -Object.keys(_aureliaDependencyInjection).forEach(function (key) { - if (key === "default" || key === "__esModule") return; - Object.defineProperty(exports, key, { - enumerable: true, - get: function get() { - return _aureliaDependencyInjection[key]; - } - }); -}); \ No newline at end of file diff --git a/dist/es2015/aurelia-dependency-injection.js b/dist/es2015/aurelia-dependency-injection.js deleted file mode 100644 index 308469f..0000000 --- a/dist/es2015/aurelia-dependency-injection.js +++ /dev/null @@ -1,647 +0,0 @@ -var _dec, _class, _dec2, _class2, _dec3, _class3, _dec4, _class4, _dec5, _class5, _dec6, _class6, _dec7, _class7; - -import { protocol, metadata } from 'aurelia-metadata'; -import { AggregateError } from 'aurelia-pal'; - -export const resolver = protocol.create('aurelia:resolver', function (target) { - if (!(typeof target.get === 'function')) { - return 'Resolvers must implement: get(container: Container, key: any): any'; - } - - return true; -}); - -export let StrategyResolver = (_dec = resolver(), _dec(_class = class StrategyResolver { - constructor(strategy, state) { - this.strategy = strategy; - this.state = state; - } - - get(container, key) { - switch (this.strategy) { - case 0: - return this.state; - case 1: - let singleton = container.invoke(this.state); - this.state = singleton; - this.strategy = 0; - return singleton; - case 2: - return container.invoke(this.state); - case 3: - return this.state(container, key, this); - case 4: - return this.state[0].get(container, key); - case 5: - return container.get(this.state); - default: - throw new Error('Invalid strategy: ' + this.strategy); - } - } -}) || _class); - -export let Lazy = (_dec2 = resolver(), _dec2(_class2 = class Lazy { - constructor(key) { - this._key = key; - } - - get(container) { - return () => container.get(this._key); - } - - static of(key) { - return new Lazy(key); - } -}) || _class2); - -export let All = (_dec3 = resolver(), _dec3(_class3 = class All { - constructor(key) { - this._key = key; - } - - get(container) { - return container.getAll(this._key); - } - - static of(key) { - return new All(key); - } -}) || _class3); - -export let Optional = (_dec4 = resolver(), _dec4(_class4 = class Optional { - constructor(key, checkParent = true) { - this._key = key; - this._checkParent = checkParent; - } - - get(container) { - if (container.hasResolver(this._key, this._checkParent)) { - return container.get(this._key); - } - - return null; - } - - static of(key, checkParent = true) { - return new Optional(key, checkParent); - } -}) || _class4); - -export let Parent = (_dec5 = resolver(), _dec5(_class5 = class Parent { - constructor(key) { - this._key = key; - } - - get(container) { - return container.parent ? container.parent.get(this._key) : null; - } - - static of(key) { - return new Parent(key); - } -}) || _class5); - -export let Factory = (_dec6 = resolver(), _dec6(_class6 = class Factory { - constructor(key) { - this._key = key; - } - - get(container) { - let fn = this._key; - let resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - return (...rest) => container.invoke(fn, rest); - } - - static of(key) { - return new Factory(key); - } -}) || _class6); - -export let NewInstance = (_dec7 = resolver(), _dec7(_class7 = class NewInstance { - constructor(key, ...dynamicDependencies) { - this.key = key; - this.asKey = key; - this.dynamicDependencies = dynamicDependencies; - } - - get(container) { - let dynamicDependencies = this.dynamicDependencies.length > 0 ? this.dynamicDependencies.map(dependency => dependency['protocol:aurelia:resolver'] ? dependency.get(container) : container.get(dependency)) : undefined; - - let fn = this.key; - let resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - const instance = container.invoke(fn, dynamicDependencies); - container.registerInstance(this.asKey, instance); - return instance; - } - - as(key) { - this.asKey = key; - return this; - } - - static of(key, ...dynamicDependencies) { - return new NewInstance(key, ...dynamicDependencies); - } -}) || _class7); - -export function getDecoratorDependencies(target) { - autoinject(target); - - return target.inject; -} - -export function lazy(keyValue) { - return function (target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Lazy.of(keyValue); - }; -} - -export function all(keyValue) { - return function (target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = All.of(keyValue); - }; -} - -export function optional(checkParentOrTarget = true) { - let deco = function (checkParent) { - return function (target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Optional.of(inject[index], checkParent); - }; - }; - if (typeof checkParentOrTarget === 'boolean') { - return deco(checkParentOrTarget); - } - return deco(true); -} - -export function parent(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Parent.of(inject[index]); -} - -export function factory(keyValue) { - return function (target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Factory.of(keyValue); - }; -} - -export function newInstance(asKeyOrTarget, ...dynamicDependencies) { - let deco = function (asKey) { - return function (target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = NewInstance.of(inject[index], ...dynamicDependencies); - if (!!asKey) { - inject[index].as(asKey); - } - }; - }; - if (arguments.length >= 1) { - return deco(asKeyOrTarget); - } - return deco(); -} - -export function invoker(value) { - return function (target) { - metadata.define(metadata.invoker, value, target); - }; -} - -export function invokeAsFactory(potentialTarget) { - let deco = function (target) { - metadata.define(metadata.invoker, FactoryInvoker.instance, target); - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -export let FactoryInvoker = class FactoryInvoker { - invoke(container, fn, dependencies) { - let i = dependencies.length; - let args = new Array(i); - - while (i--) { - args[i] = container.get(dependencies[i]); - } - - return fn.apply(undefined, args); - } - - invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - let i = staticDependencies.length; - let args = new Array(i); - - while (i--) { - args[i] = container.get(staticDependencies[i]); - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return fn.apply(undefined, args); - } -}; - -FactoryInvoker.instance = new FactoryInvoker(); - -export function registration(value) { - return function (target) { - metadata.define(metadata.registration, value, target); - }; -} - -export function transient(key) { - return registration(new TransientRegistration(key)); -} - -export function singleton(keyOrRegisterInChild, registerInChild = false) { - return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild)); -} - -export let TransientRegistration = class TransientRegistration { - constructor(key) { - this._key = key; - } - - registerResolver(container, key, fn) { - let existingResolver = container.getResolver(this._key || key); - return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver; - } -}; - -export let SingletonRegistration = class SingletonRegistration { - constructor(keyOrRegisterInChild, registerInChild = false) { - if (typeof keyOrRegisterInChild === 'boolean') { - this._registerInChild = keyOrRegisterInChild; - } else { - this._key = keyOrRegisterInChild; - this._registerInChild = registerInChild; - } - } - - registerResolver(container, key, fn) { - let targetContainer = this._registerInChild ? container : container.root; - let existingResolver = targetContainer.getResolver(this._key || key); - return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver; - } -}; - -function validateKey(key) { - if (key === null || key === undefined) { - throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } -} -export const _emptyParameters = Object.freeze([]); - -metadata.registration = 'aurelia:registration'; -metadata.invoker = 'aurelia:invoker'; - -let resolverDecorates = resolver.decorates; - -export let InvocationHandler = class InvocationHandler { - constructor(fn, invoker, dependencies) { - this.fn = fn; - this.invoker = invoker; - this.dependencies = dependencies; - } - - invoke(container, dynamicDependencies) { - return dynamicDependencies !== undefined ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) : this.invoker.invoke(container, this.fn, this.dependencies); - } -}; - -function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - let i = staticDependencies.length; - let args = new Array(i); - let lookup; - - while (i--) { - lookup = staticDependencies[i]; - - if (lookup === null || lookup === undefined) { - throw new Error('Constructor Parameter with index ' + i + ' cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } else { - args[i] = container.get(lookup); - } - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return Reflect.construct(fn, args); -} - -let classInvokers = { - [0]: { - invoke(container, Type) { - return new Type(); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [1]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [2]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [3]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [4]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [5]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - fallback: { - invoke: invokeWithDynamicDependencies, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - } -}; - -function getDependencies(f) { - if (!f.hasOwnProperty('inject')) { - return []; - } - - if (typeof f.inject === 'function') { - return f.inject(); - } - - return f.inject; -} - -export let Container = class Container { - constructor(configuration) { - if (configuration === undefined) { - configuration = {}; - } - - this._configuration = configuration; - this._onHandlerCreated = configuration.onHandlerCreated; - this._handlers = configuration.handlers || (configuration.handlers = new Map()); - this._resolvers = new Map(); - this.root = this; - this.parent = null; - } - - makeGlobal() { - Container.instance = this; - return this; - } - - setHandlerCreatedCallback(onHandlerCreated) { - this._onHandlerCreated = onHandlerCreated; - this._configuration.onHandlerCreated = onHandlerCreated; - } - - registerInstance(key, instance) { - return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance)); - } - - registerSingleton(key, fn) { - return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn)); - } - - registerTransient(key, fn) { - return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn)); - } - - registerHandler(key, handler) { - return this.registerResolver(key, new StrategyResolver(3, handler)); - } - - registerAlias(originalKey, aliasKey) { - return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey)); - } - - registerResolver(key, resolver) { - validateKey(key); - - let allResolvers = this._resolvers; - let result = allResolvers.get(key); - - if (result === undefined) { - allResolvers.set(key, resolver); - } else if (result.strategy === 4) { - result.state.push(resolver); - } else { - allResolvers.set(key, new StrategyResolver(4, [result, resolver])); - } - - return resolver; - } - - autoRegister(key, fn) { - fn = fn === undefined ? key : fn; - - if (typeof fn === 'function') { - let registration = metadata.get(metadata.registration, fn); - - if (registration === undefined) { - return this.registerResolver(key, new StrategyResolver(1, fn)); - } - - return registration.registerResolver(this, key, fn); - } - - return this.registerResolver(key, new StrategyResolver(0, fn)); - } - - autoRegisterAll(fns) { - let i = fns.length; - while (i--) { - this.autoRegister(fns[i]); - } - } - - unregister(key) { - this._resolvers.delete(key); - } - - hasResolver(key, checkParent = false) { - validateKey(key); - - return this._resolvers.has(key) || checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent); - } - - getResolver(key) { - return this._resolvers.get(key); - } - - get(key) { - validateKey(key); - - if (key === Container) { - return this; - } - - if (resolverDecorates(key)) { - return key.get(this, key); - } - - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - let registration = metadata.get(metadata.registration, key); - - if (registration === undefined) { - return this.parent._get(key); - } - - return registration.registerResolver(this, key, key).get(this, key); - } - - return resolver.get(this, key); - } - - _get(key) { - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - return this.parent._get(key); - } - - return resolver.get(this, key); - } - - getAll(key) { - validateKey(key); - - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return _emptyParameters; - } - - return this.parent.getAll(key); - } - - if (resolver.strategy === 4) { - let state = resolver.state; - let i = state.length; - let results = new Array(i); - - while (i--) { - results[i] = state[i].get(this, key); - } - - return results; - } - - return [resolver.get(this, key)]; - } - - createChild() { - let child = new Container(this._configuration); - child.root = this.root; - child.parent = this; - return child; - } - - invoke(fn, dynamicDependencies) { - try { - let handler = this._handlers.get(fn); - - if (handler === undefined) { - handler = this._createInvocationHandler(fn); - this._handlers.set(fn, handler); - } - - return handler.invoke(this, dynamicDependencies); - } catch (e) { - throw new AggregateError(`Error invoking ${fn.name}. Check the inner error for details.`, e, true); - } - } - - _createInvocationHandler(fn) { - let dependencies; - - if (fn.inject === undefined) { - dependencies = metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters; - } else { - dependencies = []; - let ctor = fn; - while (typeof ctor === 'function') { - dependencies.push(...getDependencies(ctor)); - ctor = Object.getPrototypeOf(ctor); - } - } - - let invoker = metadata.getOwn(metadata.invoker, fn) || classInvokers[dependencies.length] || classInvokers.fallback; - - let handler = new InvocationHandler(fn, invoker, dependencies); - return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler; - } -}; - -export function autoinject(potentialTarget) { - let deco = function (target) { - if (!target.hasOwnProperty('inject')) { - target.inject = (metadata.getOwn(metadata.paramTypes, target) || _emptyParameters).slice(); - - if (target.inject.length > 0 && target.inject[target.inject.length - 1] === Object) { - target.inject.pop(); - } - } - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -export function inject(...rest) { - return function (target, key, descriptor) { - if (typeof descriptor === 'number') { - autoinject(target); - if (rest.length === 1) { - target.inject[descriptor] = rest[0]; - } - return; - } - - if (descriptor) { - const fn = descriptor.value; - fn.inject = rest; - } else { - target.inject = rest; - } - }; -} \ No newline at end of file diff --git a/dist/es2015/index.js b/dist/es2015/index.js deleted file mode 100644 index 8188ff3..0000000 --- a/dist/es2015/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './aurelia-dependency-injection'; \ No newline at end of file diff --git a/dist/native-modules/aurelia-dependency-injection.js b/dist/native-modules/aurelia-dependency-injection.js deleted file mode 100644 index b1939c4..0000000 --- a/dist/native-modules/aurelia-dependency-injection.js +++ /dev/null @@ -1,740 +0,0 @@ -var _dec, _class, _dec2, _class2, _dec3, _class3, _dec4, _class4, _dec5, _class5, _dec6, _class6, _dec7, _class7, _classInvokers; - - - -import { protocol, metadata } from 'aurelia-metadata'; -import { AggregateError } from 'aurelia-pal'; - -export var resolver = protocol.create('aurelia:resolver', function (target) { - if (!(typeof target.get === 'function')) { - return 'Resolvers must implement: get(container: Container, key: any): any'; - } - - return true; -}); - -export var StrategyResolver = (_dec = resolver(), _dec(_class = function () { - function StrategyResolver(strategy, state) { - - - this.strategy = strategy; - this.state = state; - } - - StrategyResolver.prototype.get = function get(container, key) { - switch (this.strategy) { - case 0: - return this.state; - case 1: - var _singleton = container.invoke(this.state); - this.state = _singleton; - this.strategy = 0; - return _singleton; - case 2: - return container.invoke(this.state); - case 3: - return this.state(container, key, this); - case 4: - return this.state[0].get(container, key); - case 5: - return container.get(this.state); - default: - throw new Error('Invalid strategy: ' + this.strategy); - } - }; - - return StrategyResolver; -}()) || _class); - -export var Lazy = (_dec2 = resolver(), _dec2(_class2 = function () { - function Lazy(key) { - - - this._key = key; - } - - Lazy.prototype.get = function get(container) { - var _this = this; - - return function () { - return container.get(_this._key); - }; - }; - - Lazy.of = function of(key) { - return new Lazy(key); - }; - - return Lazy; -}()) || _class2); - -export var All = (_dec3 = resolver(), _dec3(_class3 = function () { - function All(key) { - - - this._key = key; - } - - All.prototype.get = function get(container) { - return container.getAll(this._key); - }; - - All.of = function of(key) { - return new All(key); - }; - - return All; -}()) || _class3); - -export var Optional = (_dec4 = resolver(), _dec4(_class4 = function () { - function Optional(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - - - this._key = key; - this._checkParent = checkParent; - } - - Optional.prototype.get = function get(container) { - if (container.hasResolver(this._key, this._checkParent)) { - return container.get(this._key); - } - - return null; - }; - - Optional.of = function of(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - return new Optional(key, checkParent); - }; - - return Optional; -}()) || _class4); - -export var Parent = (_dec5 = resolver(), _dec5(_class5 = function () { - function Parent(key) { - - - this._key = key; - } - - Parent.prototype.get = function get(container) { - return container.parent ? container.parent.get(this._key) : null; - }; - - Parent.of = function of(key) { - return new Parent(key); - }; - - return Parent; -}()) || _class5); - -export var Factory = (_dec6 = resolver(), _dec6(_class6 = function () { - function Factory(key) { - - - this._key = key; - } - - Factory.prototype.get = function get(container) { - var fn = this._key; - var resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - return function () { - for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { - rest[_key] = arguments[_key]; - } - - return container.invoke(fn, rest); - }; - }; - - Factory.of = function of(key) { - return new Factory(key); - }; - - return Factory; -}()) || _class6); - -export var NewInstance = (_dec7 = resolver(), _dec7(_class7 = function () { - function NewInstance(key) { - - - this.key = key; - this.asKey = key; - - for (var _len2 = arguments.length, dynamicDependencies = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - dynamicDependencies[_key2 - 1] = arguments[_key2]; - } - - this.dynamicDependencies = dynamicDependencies; - } - - NewInstance.prototype.get = function get(container) { - var dynamicDependencies = this.dynamicDependencies.length > 0 ? this.dynamicDependencies.map(function (dependency) { - return dependency['protocol:aurelia:resolver'] ? dependency.get(container) : container.get(dependency); - }) : undefined; - - var fn = this.key; - var resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - var instance = container.invoke(fn, dynamicDependencies); - container.registerInstance(this.asKey, instance); - return instance; - }; - - NewInstance.prototype.as = function as(key) { - this.asKey = key; - return this; - }; - - NewInstance.of = function of(key) { - for (var _len3 = arguments.length, dynamicDependencies = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { - dynamicDependencies[_key3 - 1] = arguments[_key3]; - } - - return new (Function.prototype.bind.apply(NewInstance, [null].concat([key], dynamicDependencies)))(); - }; - - return NewInstance; -}()) || _class7); - -export function getDecoratorDependencies(target) { - autoinject(target); - - return target.inject; -} - -export function lazy(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Lazy.of(keyValue); - }; -} - -export function all(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = All.of(keyValue); - }; -} - -export function optional() { - var checkParentOrTarget = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - var deco = function deco(checkParent) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Optional.of(inject[index], checkParent); - }; - }; - if (typeof checkParentOrTarget === 'boolean') { - return deco(checkParentOrTarget); - } - return deco(true); -} - -export function parent(target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Parent.of(inject[index]); -} - -export function factory(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Factory.of(keyValue); - }; -} - -export function newInstance(asKeyOrTarget) { - for (var _len4 = arguments.length, dynamicDependencies = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - dynamicDependencies[_key4 - 1] = arguments[_key4]; - } - - var deco = function deco(asKey) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = NewInstance.of.apply(NewInstance, [inject[index]].concat(dynamicDependencies)); - if (!!asKey) { - inject[index].as(asKey); - } - }; - }; - if (arguments.length >= 1) { - return deco(asKeyOrTarget); - } - return deco(); -} - -export function invoker(value) { - return function (target) { - metadata.define(metadata.invoker, value, target); - }; -} - -export function invokeAsFactory(potentialTarget) { - var deco = function deco(target) { - metadata.define(metadata.invoker, FactoryInvoker.instance, target); - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -export var FactoryInvoker = function () { - function FactoryInvoker() { - - } - - FactoryInvoker.prototype.invoke = function invoke(container, fn, dependencies) { - var i = dependencies.length; - var args = new Array(i); - - while (i--) { - args[i] = container.get(dependencies[i]); - } - - return fn.apply(undefined, args); - }; - - FactoryInvoker.prototype.invokeWithDynamicDependencies = function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - var i = staticDependencies.length; - var args = new Array(i); - - while (i--) { - args[i] = container.get(staticDependencies[i]); - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return fn.apply(undefined, args); - }; - - return FactoryInvoker; -}(); - -FactoryInvoker.instance = new FactoryInvoker(); - -export function registration(value) { - return function (target) { - metadata.define(metadata.registration, value, target); - }; -} - -export function transient(key) { - return registration(new TransientRegistration(key)); -} - -export function singleton(keyOrRegisterInChild) { - var registerInChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild)); -} - -export var TransientRegistration = function () { - function TransientRegistration(key) { - - - this._key = key; - } - - TransientRegistration.prototype.registerResolver = function registerResolver(container, key, fn) { - var existingResolver = container.getResolver(this._key || key); - return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver; - }; - - return TransientRegistration; -}(); - -export var SingletonRegistration = function () { - function SingletonRegistration(keyOrRegisterInChild) { - var registerInChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - - - if (typeof keyOrRegisterInChild === 'boolean') { - this._registerInChild = keyOrRegisterInChild; - } else { - this._key = keyOrRegisterInChild; - this._registerInChild = registerInChild; - } - } - - SingletonRegistration.prototype.registerResolver = function registerResolver(container, key, fn) { - var targetContainer = this._registerInChild ? container : container.root; - var existingResolver = targetContainer.getResolver(this._key || key); - return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver; - }; - - return SingletonRegistration; -}(); - -function validateKey(key) { - if (key === null || key === undefined) { - throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } -} -export var _emptyParameters = Object.freeze([]); - -metadata.registration = 'aurelia:registration'; -metadata.invoker = 'aurelia:invoker'; - -var resolverDecorates = resolver.decorates; - -export var InvocationHandler = function () { - function InvocationHandler(fn, invoker, dependencies) { - - - this.fn = fn; - this.invoker = invoker; - this.dependencies = dependencies; - } - - InvocationHandler.prototype.invoke = function invoke(container, dynamicDependencies) { - return dynamicDependencies !== undefined ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) : this.invoker.invoke(container, this.fn, this.dependencies); - }; - - return InvocationHandler; -}(); - -function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - var i = staticDependencies.length; - var args = new Array(i); - var lookup = void 0; - - while (i--) { - lookup = staticDependencies[i]; - - if (lookup === null || lookup === undefined) { - throw new Error('Constructor Parameter with index ' + i + ' cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } else { - args[i] = container.get(lookup); - } - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return Reflect.construct(fn, args); -} - -var classInvokers = (_classInvokers = {}, _classInvokers[0] = { - invoke: function invoke(container, Type) { - return new Type(); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[1] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[2] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[3] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[4] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers[5] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers.fallback = { - invoke: invokeWithDynamicDependencies, - invokeWithDynamicDependencies: invokeWithDynamicDependencies -}, _classInvokers); - -function getDependencies(f) { - if (!f.hasOwnProperty('inject')) { - return []; - } - - if (typeof f.inject === 'function') { - return f.inject(); - } - - return f.inject; -} - -export var Container = function () { - function Container(configuration) { - - - if (configuration === undefined) { - configuration = {}; - } - - this._configuration = configuration; - this._onHandlerCreated = configuration.onHandlerCreated; - this._handlers = configuration.handlers || (configuration.handlers = new Map()); - this._resolvers = new Map(); - this.root = this; - this.parent = null; - } - - Container.prototype.makeGlobal = function makeGlobal() { - Container.instance = this; - return this; - }; - - Container.prototype.setHandlerCreatedCallback = function setHandlerCreatedCallback(onHandlerCreated) { - this._onHandlerCreated = onHandlerCreated; - this._configuration.onHandlerCreated = onHandlerCreated; - }; - - Container.prototype.registerInstance = function registerInstance(key, instance) { - return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance)); - }; - - Container.prototype.registerSingleton = function registerSingleton(key, fn) { - return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn)); - }; - - Container.prototype.registerTransient = function registerTransient(key, fn) { - return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn)); - }; - - Container.prototype.registerHandler = function registerHandler(key, handler) { - return this.registerResolver(key, new StrategyResolver(3, handler)); - }; - - Container.prototype.registerAlias = function registerAlias(originalKey, aliasKey) { - return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey)); - }; - - Container.prototype.registerResolver = function registerResolver(key, resolver) { - validateKey(key); - - var allResolvers = this._resolvers; - var result = allResolvers.get(key); - - if (result === undefined) { - allResolvers.set(key, resolver); - } else if (result.strategy === 4) { - result.state.push(resolver); - } else { - allResolvers.set(key, new StrategyResolver(4, [result, resolver])); - } - - return resolver; - }; - - Container.prototype.autoRegister = function autoRegister(key, fn) { - fn = fn === undefined ? key : fn; - - if (typeof fn === 'function') { - var _registration = metadata.get(metadata.registration, fn); - - if (_registration === undefined) { - return this.registerResolver(key, new StrategyResolver(1, fn)); - } - - return _registration.registerResolver(this, key, fn); - } - - return this.registerResolver(key, new StrategyResolver(0, fn)); - }; - - Container.prototype.autoRegisterAll = function autoRegisterAll(fns) { - var i = fns.length; - while (i--) { - this.autoRegister(fns[i]); - } - }; - - Container.prototype.unregister = function unregister(key) { - this._resolvers.delete(key); - }; - - Container.prototype.hasResolver = function hasResolver(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - validateKey(key); - - return this._resolvers.has(key) || checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent); - }; - - Container.prototype.getResolver = function getResolver(key) { - return this._resolvers.get(key); - }; - - Container.prototype.get = function get(key) { - validateKey(key); - - if (key === Container) { - return this; - } - - if (resolverDecorates(key)) { - return key.get(this, key); - } - - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - var _registration2 = metadata.get(metadata.registration, key); - - if (_registration2 === undefined) { - return this.parent._get(key); - } - - return _registration2.registerResolver(this, key, key).get(this, key); - } - - return resolver.get(this, key); - }; - - Container.prototype._get = function _get(key) { - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - return this.parent._get(key); - } - - return resolver.get(this, key); - }; - - Container.prototype.getAll = function getAll(key) { - validateKey(key); - - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return _emptyParameters; - } - - return this.parent.getAll(key); - } - - if (resolver.strategy === 4) { - var state = resolver.state; - var i = state.length; - var results = new Array(i); - - while (i--) { - results[i] = state[i].get(this, key); - } - - return results; - } - - return [resolver.get(this, key)]; - }; - - Container.prototype.createChild = function createChild() { - var child = new Container(this._configuration); - child.root = this.root; - child.parent = this; - return child; - }; - - Container.prototype.invoke = function invoke(fn, dynamicDependencies) { - try { - var _handler = this._handlers.get(fn); - - if (_handler === undefined) { - _handler = this._createInvocationHandler(fn); - this._handlers.set(fn, _handler); - } - - return _handler.invoke(this, dynamicDependencies); - } catch (e) { - throw new AggregateError('Error invoking ' + fn.name + '. Check the inner error for details.', e, true); - } - }; - - Container.prototype._createInvocationHandler = function _createInvocationHandler(fn) { - var dependencies = void 0; - - if (fn.inject === undefined) { - dependencies = metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters; - } else { - dependencies = []; - var ctor = fn; - while (typeof ctor === 'function') { - var _dependencies; - - (_dependencies = dependencies).push.apply(_dependencies, getDependencies(ctor)); - ctor = Object.getPrototypeOf(ctor); - } - } - - var invoker = metadata.getOwn(metadata.invoker, fn) || classInvokers[dependencies.length] || classInvokers.fallback; - - var handler = new InvocationHandler(fn, invoker, dependencies); - return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler; - }; - - return Container; -}(); - -export function autoinject(potentialTarget) { - var deco = function deco(target) { - if (!target.hasOwnProperty('inject')) { - target.inject = (metadata.getOwn(metadata.paramTypes, target) || _emptyParameters).slice(); - - if (target.inject.length > 0 && target.inject[target.inject.length - 1] === Object) { - target.inject.pop(); - } - } - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -export function inject() { - for (var _len5 = arguments.length, rest = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - rest[_key5] = arguments[_key5]; - } - - return function (target, key, descriptor) { - if (typeof descriptor === 'number') { - autoinject(target); - if (rest.length === 1) { - target.inject[descriptor] = rest[0]; - } - return; - } - - if (descriptor) { - var _fn = descriptor.value; - _fn.inject = rest; - } else { - target.inject = rest; - } - }; -} \ No newline at end of file diff --git a/dist/native-modules/index.js b/dist/native-modules/index.js deleted file mode 100644 index 8188ff3..0000000 --- a/dist/native-modules/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './aurelia-dependency-injection'; \ No newline at end of file diff --git a/dist/system/aurelia-dependency-injection.js b/dist/system/aurelia-dependency-injection.js deleted file mode 100644 index 5ac1c3c..0000000 --- a/dist/system/aurelia-dependency-injection.js +++ /dev/null @@ -1,811 +0,0 @@ -'use strict'; - -System.register(['aurelia-metadata', 'aurelia-pal'], function (_export, _context) { - "use strict"; - - var protocol, metadata, AggregateError, _dec, _class, _dec2, _class2, _dec3, _class3, _dec4, _class4, _dec5, _class5, _dec6, _class6, _dec7, _class7, _classInvokers, resolver, StrategyResolver, Lazy, All, Optional, Parent, Factory, NewInstance, FactoryInvoker, TransientRegistration, SingletonRegistration, _emptyParameters, resolverDecorates, InvocationHandler, classInvokers, Container; - - - - function getDecoratorDependencies(target) { - autoinject(target); - - return target.inject; - } - - _export('getDecoratorDependencies', getDecoratorDependencies); - - function lazy(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Lazy.of(keyValue); - }; - } - - _export('lazy', lazy); - - function all(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = All.of(keyValue); - }; - } - - _export('all', all); - - function optional() { - var checkParentOrTarget = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - var deco = function deco(checkParent) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Optional.of(inject[index], checkParent); - }; - }; - if (typeof checkParentOrTarget === 'boolean') { - return deco(checkParentOrTarget); - } - return deco(true); - } - - _export('optional', optional); - - function parent(target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Parent.of(inject[index]); - } - - _export('parent', parent); - - function factory(keyValue) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = Factory.of(keyValue); - }; - } - - _export('factory', factory); - - function newInstance(asKeyOrTarget) { - for (var _len4 = arguments.length, dynamicDependencies = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { - dynamicDependencies[_key4 - 1] = arguments[_key4]; - } - - var deco = function deco(asKey) { - return function (target, key, index) { - var inject = getDecoratorDependencies(target); - inject[index] = NewInstance.of.apply(NewInstance, [inject[index]].concat(dynamicDependencies)); - if (!!asKey) { - inject[index].as(asKey); - } - }; - }; - if (arguments.length >= 1) { - return deco(asKeyOrTarget); - } - return deco(); - } - - _export('newInstance', newInstance); - - function invoker(value) { - return function (target) { - metadata.define(metadata.invoker, value, target); - }; - } - - _export('invoker', invoker); - - function invokeAsFactory(potentialTarget) { - var deco = function deco(target) { - metadata.define(metadata.invoker, FactoryInvoker.instance, target); - }; - - return potentialTarget ? deco(potentialTarget) : deco; - } - - _export('invokeAsFactory', invokeAsFactory); - - function registration(value) { - return function (target) { - metadata.define(metadata.registration, value, target); - }; - } - - _export('registration', registration); - - function transient(key) { - return registration(new TransientRegistration(key)); - } - - _export('transient', transient); - - function singleton(keyOrRegisterInChild) { - var registerInChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild)); - } - - _export('singleton', singleton); - - function validateKey(key) { - if (key === null || key === undefined) { - throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } - } - - - function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - var i = staticDependencies.length; - var args = new Array(i); - var lookup = void 0; - - while (i--) { - lookup = staticDependencies[i]; - - if (lookup === null || lookup === undefined) { - throw new Error('Constructor Parameter with index ' + i + ' cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } else { - args[i] = container.get(lookup); - } - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return Reflect.construct(fn, args); - } - - function getDependencies(f) { - if (!f.hasOwnProperty('inject')) { - return []; - } - - if (typeof f.inject === 'function') { - return f.inject(); - } - - return f.inject; - } - - function autoinject(potentialTarget) { - var deco = function deco(target) { - if (!target.hasOwnProperty('inject')) { - target.inject = (metadata.getOwn(metadata.paramTypes, target) || _emptyParameters).slice(); - - if (target.inject.length > 0 && target.inject[target.inject.length - 1] === Object) { - target.inject.pop(); - } - } - }; - - return potentialTarget ? deco(potentialTarget) : deco; - } - - _export('autoinject', autoinject); - - function inject() { - for (var _len5 = arguments.length, rest = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - rest[_key5] = arguments[_key5]; - } - - return function (target, key, descriptor) { - if (typeof descriptor === 'number') { - autoinject(target); - if (rest.length === 1) { - target.inject[descriptor] = rest[0]; - } - return; - } - - if (descriptor) { - var _fn = descriptor.value; - _fn.inject = rest; - } else { - target.inject = rest; - } - }; - } - - _export('inject', inject); - - return { - setters: [function (_aureliaMetadata) { - protocol = _aureliaMetadata.protocol; - metadata = _aureliaMetadata.metadata; - }, function (_aureliaPal) { - AggregateError = _aureliaPal.AggregateError; - }], - execute: function () { - _export('resolver', resolver = protocol.create('aurelia:resolver', function (target) { - if (!(typeof target.get === 'function')) { - return 'Resolvers must implement: get(container: Container, key: any): any'; - } - - return true; - })); - - _export('resolver', resolver); - - _export('StrategyResolver', StrategyResolver = (_dec = resolver(), _dec(_class = function () { - function StrategyResolver(strategy, state) { - - - this.strategy = strategy; - this.state = state; - } - - StrategyResolver.prototype.get = function get(container, key) { - switch (this.strategy) { - case 0: - return this.state; - case 1: - var _singleton = container.invoke(this.state); - this.state = _singleton; - this.strategy = 0; - return _singleton; - case 2: - return container.invoke(this.state); - case 3: - return this.state(container, key, this); - case 4: - return this.state[0].get(container, key); - case 5: - return container.get(this.state); - default: - throw new Error('Invalid strategy: ' + this.strategy); - } - }; - - return StrategyResolver; - }()) || _class)); - - _export('StrategyResolver', StrategyResolver); - - _export('Lazy', Lazy = (_dec2 = resolver(), _dec2(_class2 = function () { - function Lazy(key) { - - - this._key = key; - } - - Lazy.prototype.get = function get(container) { - var _this = this; - - return function () { - return container.get(_this._key); - }; - }; - - Lazy.of = function of(key) { - return new Lazy(key); - }; - - return Lazy; - }()) || _class2)); - - _export('Lazy', Lazy); - - _export('All', All = (_dec3 = resolver(), _dec3(_class3 = function () { - function All(key) { - - - this._key = key; - } - - All.prototype.get = function get(container) { - return container.getAll(this._key); - }; - - All.of = function of(key) { - return new All(key); - }; - - return All; - }()) || _class3)); - - _export('All', All); - - _export('Optional', Optional = (_dec4 = resolver(), _dec4(_class4 = function () { - function Optional(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - - - this._key = key; - this._checkParent = checkParent; - } - - Optional.prototype.get = function get(container) { - if (container.hasResolver(this._key, this._checkParent)) { - return container.get(this._key); - } - - return null; - }; - - Optional.of = function of(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - return new Optional(key, checkParent); - }; - - return Optional; - }()) || _class4)); - - _export('Optional', Optional); - - _export('Parent', Parent = (_dec5 = resolver(), _dec5(_class5 = function () { - function Parent(key) { - - - this._key = key; - } - - Parent.prototype.get = function get(container) { - return container.parent ? container.parent.get(this._key) : null; - }; - - Parent.of = function of(key) { - return new Parent(key); - }; - - return Parent; - }()) || _class5)); - - _export('Parent', Parent); - - _export('Factory', Factory = (_dec6 = resolver(), _dec6(_class6 = function () { - function Factory(key) { - - - this._key = key; - } - - Factory.prototype.get = function get(container) { - var fn = this._key; - var resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - return function () { - for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) { - rest[_key] = arguments[_key]; - } - - return container.invoke(fn, rest); - }; - }; - - Factory.of = function of(key) { - return new Factory(key); - }; - - return Factory; - }()) || _class6)); - - _export('Factory', Factory); - - _export('NewInstance', NewInstance = (_dec7 = resolver(), _dec7(_class7 = function () { - function NewInstance(key) { - - - this.key = key; - this.asKey = key; - - for (var _len2 = arguments.length, dynamicDependencies = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - dynamicDependencies[_key2 - 1] = arguments[_key2]; - } - - this.dynamicDependencies = dynamicDependencies; - } - - NewInstance.prototype.get = function get(container) { - var dynamicDependencies = this.dynamicDependencies.length > 0 ? this.dynamicDependencies.map(function (dependency) { - return dependency['protocol:aurelia:resolver'] ? dependency.get(container) : container.get(dependency); - }) : undefined; - - var fn = this.key; - var resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - var instance = container.invoke(fn, dynamicDependencies); - container.registerInstance(this.asKey, instance); - return instance; - }; - - NewInstance.prototype.as = function as(key) { - this.asKey = key; - return this; - }; - - NewInstance.of = function of(key) { - for (var _len3 = arguments.length, dynamicDependencies = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { - dynamicDependencies[_key3 - 1] = arguments[_key3]; - } - - return new (Function.prototype.bind.apply(NewInstance, [null].concat([key], dynamicDependencies)))(); - }; - - return NewInstance; - }()) || _class7)); - - _export('NewInstance', NewInstance); - - _export('FactoryInvoker', FactoryInvoker = function () { - function FactoryInvoker() { - - } - - FactoryInvoker.prototype.invoke = function invoke(container, fn, dependencies) { - var i = dependencies.length; - var args = new Array(i); - - while (i--) { - args[i] = container.get(dependencies[i]); - } - - return fn.apply(undefined, args); - }; - - FactoryInvoker.prototype.invokeWithDynamicDependencies = function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - var i = staticDependencies.length; - var args = new Array(i); - - while (i--) { - args[i] = container.get(staticDependencies[i]); - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return fn.apply(undefined, args); - }; - - return FactoryInvoker; - }()); - - _export('FactoryInvoker', FactoryInvoker); - - FactoryInvoker.instance = new FactoryInvoker(); - - _export('TransientRegistration', TransientRegistration = function () { - function TransientRegistration(key) { - - - this._key = key; - } - - TransientRegistration.prototype.registerResolver = function registerResolver(container, key, fn) { - var existingResolver = container.getResolver(this._key || key); - return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver; - }; - - return TransientRegistration; - }()); - - _export('TransientRegistration', TransientRegistration); - - _export('SingletonRegistration', SingletonRegistration = function () { - function SingletonRegistration(keyOrRegisterInChild) { - var registerInChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - - - if (typeof keyOrRegisterInChild === 'boolean') { - this._registerInChild = keyOrRegisterInChild; - } else { - this._key = keyOrRegisterInChild; - this._registerInChild = registerInChild; - } - } - - SingletonRegistration.prototype.registerResolver = function registerResolver(container, key, fn) { - var targetContainer = this._registerInChild ? container : container.root; - var existingResolver = targetContainer.getResolver(this._key || key); - return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver; - }; - - return SingletonRegistration; - }()); - - _export('SingletonRegistration', SingletonRegistration); - - _export('_emptyParameters', _emptyParameters = Object.freeze([])); - - _export('_emptyParameters', _emptyParameters); - - metadata.registration = 'aurelia:registration'; - metadata.invoker = 'aurelia:invoker'; - - resolverDecorates = resolver.decorates; - - _export('InvocationHandler', InvocationHandler = function () { - function InvocationHandler(fn, invoker, dependencies) { - - - this.fn = fn; - this.invoker = invoker; - this.dependencies = dependencies; - } - - InvocationHandler.prototype.invoke = function invoke(container, dynamicDependencies) { - return dynamicDependencies !== undefined ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) : this.invoker.invoke(container, this.fn, this.dependencies); - }; - - return InvocationHandler; - }()); - - _export('InvocationHandler', InvocationHandler); - - classInvokers = (_classInvokers = {}, _classInvokers[0] = { - invoke: function invoke(container, Type) { - return new Type(); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[1] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[2] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[3] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[4] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers[5] = { - invoke: function invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4])); - }, - - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers.fallback = { - invoke: invokeWithDynamicDependencies, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, _classInvokers); - - _export('Container', Container = function () { - function Container(configuration) { - - - if (configuration === undefined) { - configuration = {}; - } - - this._configuration = configuration; - this._onHandlerCreated = configuration.onHandlerCreated; - this._handlers = configuration.handlers || (configuration.handlers = new Map()); - this._resolvers = new Map(); - this.root = this; - this.parent = null; - } - - Container.prototype.makeGlobal = function makeGlobal() { - Container.instance = this; - return this; - }; - - Container.prototype.setHandlerCreatedCallback = function setHandlerCreatedCallback(onHandlerCreated) { - this._onHandlerCreated = onHandlerCreated; - this._configuration.onHandlerCreated = onHandlerCreated; - }; - - Container.prototype.registerInstance = function registerInstance(key, instance) { - return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance)); - }; - - Container.prototype.registerSingleton = function registerSingleton(key, fn) { - return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn)); - }; - - Container.prototype.registerTransient = function registerTransient(key, fn) { - return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn)); - }; - - Container.prototype.registerHandler = function registerHandler(key, handler) { - return this.registerResolver(key, new StrategyResolver(3, handler)); - }; - - Container.prototype.registerAlias = function registerAlias(originalKey, aliasKey) { - return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey)); - }; - - Container.prototype.registerResolver = function registerResolver(key, resolver) { - validateKey(key); - - var allResolvers = this._resolvers; - var result = allResolvers.get(key); - - if (result === undefined) { - allResolvers.set(key, resolver); - } else if (result.strategy === 4) { - result.state.push(resolver); - } else { - allResolvers.set(key, new StrategyResolver(4, [result, resolver])); - } - - return resolver; - }; - - Container.prototype.autoRegister = function autoRegister(key, fn) { - fn = fn === undefined ? key : fn; - - if (typeof fn === 'function') { - var _registration = metadata.get(metadata.registration, fn); - - if (_registration === undefined) { - return this.registerResolver(key, new StrategyResolver(1, fn)); - } - - return _registration.registerResolver(this, key, fn); - } - - return this.registerResolver(key, new StrategyResolver(0, fn)); - }; - - Container.prototype.autoRegisterAll = function autoRegisterAll(fns) { - var i = fns.length; - while (i--) { - this.autoRegister(fns[i]); - } - }; - - Container.prototype.unregister = function unregister(key) { - this._resolvers.delete(key); - }; - - Container.prototype.hasResolver = function hasResolver(key) { - var checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - validateKey(key); - - return this._resolvers.has(key) || checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent); - }; - - Container.prototype.getResolver = function getResolver(key) { - return this._resolvers.get(key); - }; - - Container.prototype.get = function get(key) { - validateKey(key); - - if (key === Container) { - return this; - } - - if (resolverDecorates(key)) { - return key.get(this, key); - } - - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - var _registration2 = metadata.get(metadata.registration, key); - - if (_registration2 === undefined) { - return this.parent._get(key); - } - - return _registration2.registerResolver(this, key, key).get(this, key); - } - - return resolver.get(this, key); - }; - - Container.prototype._get = function _get(key) { - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - return this.parent._get(key); - } - - return resolver.get(this, key); - }; - - Container.prototype.getAll = function getAll(key) { - validateKey(key); - - var resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return _emptyParameters; - } - - return this.parent.getAll(key); - } - - if (resolver.strategy === 4) { - var state = resolver.state; - var i = state.length; - var results = new Array(i); - - while (i--) { - results[i] = state[i].get(this, key); - } - - return results; - } - - return [resolver.get(this, key)]; - }; - - Container.prototype.createChild = function createChild() { - var child = new Container(this._configuration); - child.root = this.root; - child.parent = this; - return child; - }; - - Container.prototype.invoke = function invoke(fn, dynamicDependencies) { - try { - var _handler = this._handlers.get(fn); - - if (_handler === undefined) { - _handler = this._createInvocationHandler(fn); - this._handlers.set(fn, _handler); - } - - return _handler.invoke(this, dynamicDependencies); - } catch (e) { - throw new AggregateError('Error invoking ' + fn.name + '. Check the inner error for details.', e, true); - } - }; - - Container.prototype._createInvocationHandler = function _createInvocationHandler(fn) { - var dependencies = void 0; - - if (fn.inject === undefined) { - dependencies = metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters; - } else { - dependencies = []; - var ctor = fn; - while (typeof ctor === 'function') { - var _dependencies; - - (_dependencies = dependencies).push.apply(_dependencies, getDependencies(ctor)); - ctor = Object.getPrototypeOf(ctor); - } - } - - var invoker = metadata.getOwn(metadata.invoker, fn) || classInvokers[dependencies.length] || classInvokers.fallback; - - var handler = new InvocationHandler(fn, invoker, dependencies); - return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler; - }; - - return Container; - }()); - - _export('Container', Container); - } - }; -}); \ No newline at end of file diff --git a/dist/system/index.js b/dist/system/index.js deleted file mode 100644 index 0d419bd..0000000 --- a/dist/system/index.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -System.register(['./aurelia-dependency-injection'], function (_export, _context) { - "use strict"; - - return { - setters: [function (_aureliaDependencyInjection) { - var _exportObj = {}; - - for (var _key in _aureliaDependencyInjection) { - if (_key !== "default" && _key !== "__esModule") _exportObj[_key] = _aureliaDependencyInjection[_key]; - } - - _export(_exportObj); - }], - execute: function () {} - }; -}); \ No newline at end of file diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index fb13733..9915af4 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -1,3 +1,21 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [1.4.4](https://github.com/aurelia/dependency-injection/compare/1.4.3...1.4.4) (2019-07-06) + + + +## [1.4.3](https://github.com/aurelia/dependency-injection/compare/1.4.2...1.4.3) (2019-07-06) + + +### Bug Fixes + +* **ci:** add dev dep jspm ([ad4be00](https://github.com/aurelia/dependency-injection/commit/ad4be00)) +* **ci:** take our circle ci ([9899197](https://github.com/aurelia/dependency-injection/commit/9899197)) + + + ## [1.4.2](https://github.com/aurelia/dependency-injection/compare/1.4.1...1.4.2) (2018-12-18) diff --git a/doc/api.json b/doc/api.json index 0c91b9a..05e6b85 100644 --- a/doc/api.json +++ b/doc/api.json @@ -1 +1,6 @@ -{"name":"aurelia-dependency-injection","children":[{"id":28,"name":"All","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to allow functions/classes to specify resolution of all matches to a key."},"children":[{"id":29,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of the All class."},"signatures":[{"id":30,"name":"new All","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of the All class."},"parameters":[{"id":31,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The key to lazily resolve all matches for.\n"},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"All","id":28}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":64,"character":26}]},{"id":32,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":33,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to resolve all matching dependencies as an array of instances.","returns":"Returns an array of all matching instances.\n"},"parameters":[{"id":34,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container to resolve from."},"type":{"type":"reference","name":"Container","id":154}}],"type":{"type":"instrinct","isArray":true,"name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":75,"character":7}]},{"id":35,"name":"of","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":36,"name":"of","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates an All Resolver for the supplied key.","returns":"Returns an instance of All for the key.\n"},"parameters":[{"id":37,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key to resolve all instances for."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"All","id":28}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":81,"character":13}]}],"groups":[{"title":"Constructors","kind":512,"children":[29]},{"title":"Methods","kind":2048,"children":[32,35]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":64,"character":24}]},{"id":154,"name":"Container","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"A lightweight, extensible dependency injection container."},"children":[{"id":158,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of Container."},"signatures":[{"id":159,"name":"new Container","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of Container."},"parameters":[{"id":160,"name":"configuration","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"Provides some configuration for the new Container instance.\n"},"type":{"type":"reference","name":"ContainerConfiguration","id":148}}],"type":{"type":"reference","name":"Container","id":154}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":387,"character":20}]},{"id":156,"name":"parent","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The parent container in the DI hierarchy."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":383,"character":10}],"type":{"type":"reference","name":"Container","id":154}},{"id":157,"name":"root","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The root container in the DI hierarchy."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":387,"character":8}],"type":{"type":"reference","name":"Container","id":154}},{"id":155,"name":"instance","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"comment":{"shortText":"The global root Container instance. Available if makeGlobal() has been called. Aurelia Framework calls makeGlobal()."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":379,"character":19}],"type":{"type":"reference","name":"Container","id":154}},{"id":230,"name":"_createInvocationHandler","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":231,"name":"_createInvocationHandler","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":232,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"unknown","name":"Function & { inject?: any; }"}}],"type":{"type":"reference","name":"InvocationHandler","id":135}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":500,"character":28}]},{"id":218,"name":"_get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":219,"name":"_get","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":220,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":479,"character":8}]},{"id":198,"name":"autoRegister","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":199,"name":"autoRegister","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers a type (constructor function) by inspecting its registration annotations. If none are found, then the default singleton registration is used."},"parameters":[{"id":200,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function."},"type":{"type":"instrinct","name":"any"}},{"id":201,"name":"fn","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied.\n"},"type":{"type":"reference","name":"Function"}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":449,"character":16}]},{"id":202,"name":"autoRegisterAll","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":203,"name":"autoRegisterAll","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers an array of types (constructor functions) by inspecting their registration annotations. If none are found, then the default singleton registration is used."},"parameters":[{"id":204,"name":"fns","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The constructor function to use when the dependency needs to be instantiated.\n"},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":454,"character":19}]},{"id":224,"name":"createChild","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":225,"name":"createChild","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a new dependency injection container whose parent is the current container.","returns":"Returns a new container instance parented to this.\n"},"type":{"type":"reference","name":"Container","id":154}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":490,"character":15}]},{"id":215,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":216,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Resolves a single instance based on the provided key.","returns":"Returns the resolved instance.\n"},"parameters":[{"id":217,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the object to resolve."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":478,"character":7}]},{"id":221,"name":"getAll","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":222,"name":"getAll","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Resolves all instance registered under the provided key.","returns":"Returns an array of the resolved instances.\n"},"parameters":[{"id":223,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the objects to resolve."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","isArray":true,"name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":485,"character":10}]},{"id":212,"name":"getResolver","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":213,"name":"getResolver","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the resolver for the particular key, if it has been registered.","returns":"Returns the resolver, if registred, otherwise undefined.\n"},"parameters":[{"id":214,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":472,"character":15}]},{"id":208,"name":"hasResolver","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":209,"name":"hasResolver","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Inspects the container to determine if a particular key has been registred.","returns":"Returns true if the key has been registred; false otherwise.\n"},"parameters":[{"id":210,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function."},"type":{"type":"instrinct","name":"any"}},{"id":211,"name":"checkParent","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Indicates whether or not to check the parent container hierarchy."},"type":{"type":"instrinct","name":"boolean"}}],"type":{"type":"instrinct","name":"boolean"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":466,"character":15}]},{"id":226,"name":"invoke","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":227,"name":"invoke","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Invokes a function, recursively resolving its dependencies.","returns":"Returns the instance resulting from calling the function.\n"},"parameters":[{"id":228,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The function to invoke with the auto-resolved dependencies."},"type":{"type":"unknown","name":"Function & { name?: string; }"}},{"id":229,"name":"dynamicDependencies","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Additional function dependencies to use during invocation."},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":497,"character":10}]},{"id":161,"name":"makeGlobal","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":162,"name":"makeGlobal","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Makes this container instance globally reachable through Container.instance."},"type":{"type":"reference","name":"Container","id":154}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":396,"character":14}]},{"id":190,"name":"registerAlias","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":191,"name":"registerAlias","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers an additional key that serves as an alias to the original DI key.","returns":"The resolver that was registered.\n"},"parameters":[{"id":192,"name":"originalKey","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that originally identified the dependency; usually a constructor function."},"type":{"type":"instrinct","name":"any"}},{"id":193,"name":"aliasKey","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"An alternate key which can also be used to resolve the same dependency as the original."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":436,"character":17}]},{"id":181,"name":"registerHandler","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":182,"name":"registerHandler","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers a custom resolution function such that the container calls this function for each request to obtain the instance.","returns":"The resolver that was registered.\n"},"parameters":[{"id":183,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function."},"type":{"type":"instrinct","name":"any"}},{"id":184,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The resolution function to use when the dependency is needed."},"type":{"type":"reflection","declaration":{"id":185,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":186,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":187,"name":"container","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","name":"Container","id":154}},{"id":188,"name":"key","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"any"}},{"id":189,"name":"resolver","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","name":"Resolver","id":2}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":429,"character":38}]}}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":429,"character":19}]},{"id":169,"name":"registerInstance","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":170,"name":"registerInstance","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers an existing object instance with the container.","returns":"The resolver that was registered.\n"},"parameters":[{"id":171,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function."},"type":{"type":"instrinct","name":"any"}},{"id":172,"name":"instance","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"The instance that will be resolved when the key is matched. This defaults to the key value when instance is not supplied."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":408,"character":20}]},{"id":194,"name":"registerResolver","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":195,"name":"registerResolver","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers a custom resolution function such that the container calls this function for each request to obtain the instance.","returns":"The resolver that was registered.\n"},"parameters":[{"id":196,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function."},"type":{"type":"instrinct","name":"any"}},{"id":197,"name":"resolver","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The resolver to use when the dependency is needed."},"type":{"type":"reference","name":"Resolver","id":2}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":443,"character":20}]},{"id":173,"name":"registerSingleton","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":174,"name":"registerSingleton","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers a type (constructor function) such that the container always returns the same instance for each request.","returns":"The resolver that was registered.\n"},"parameters":[{"id":175,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function."},"type":{"type":"instrinct","name":"any"}},{"id":176,"name":"fn","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied."},"type":{"type":"reference","name":"Function"}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":415,"character":21}]},{"id":177,"name":"registerTransient","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":178,"name":"registerTransient","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers a type (constructor function) such that the container returns a new instance for each request.","returns":"The resolver that was registered.\n"},"parameters":[{"id":179,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function."},"type":{"type":"instrinct","name":"any"}},{"id":180,"name":"fn","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied."},"type":{"type":"reference","name":"Function"}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":422,"character":21}]},{"id":163,"name":"setHandlerCreatedCallback","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":164,"name":"setHandlerCreatedCallback","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets an invocation handler creation callback that will be called when new InvocationsHandlers are created (called once per Function)."},"parameters":[{"id":165,"name":"onHandlerCreated","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The callback to be called when an InvocationsHandler is created.\n"},"type":{"type":"reflection","declaration":{"id":166,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":167,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":168,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"InvocationHandler","id":135}}],"type":{"type":"reference","name":"InvocationHandler","id":135}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":401,"character":47}]}}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":401,"character":29}]},{"id":205,"name":"unregister","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":206,"name":"unregister","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Unregisters based on key."},"parameters":[{"id":207,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that identifies the dependency at resolution time; usually a constructor function.\n"},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":459,"character":14}]}],"groups":[{"title":"Constructors","kind":512,"children":[158]},{"title":"Properties","kind":1024,"children":[156,157,155]},{"title":"Methods","kind":2048,"children":[230,218,198,202,224,215,221,212,208,226,161,190,181,169,194,173,177,163,205]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":375,"character":30}]},{"id":60,"name":"Factory","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to allow injecting dependencies but also passing data to the constructor."},"children":[{"id":61,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of the Factory class."},"signatures":[{"id":62,"name":"new Factory","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of the Factory class."},"parameters":[{"id":63,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The key to resolve from the parent container.\n"},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"Factory","id":60}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":132,"character":30}]},{"id":64,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":65,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to pass the dependencies to the constructor.","returns":"Returns a function that can be invoked to resolve dependencies later, and the rest of the parameters.\n"},"parameters":[{"id":66,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container to invoke the constructor with dependencies and other parameters."},"type":{"type":"reference","name":"Container","id":154}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":143,"character":7}]},{"id":67,"name":"of","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":68,"name":"of","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a Factory Resolver for the supplied key.","returns":"Returns an instance of Factory for the key.\n"},"parameters":[{"id":69,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key to resolve."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"Factory","id":60}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":149,"character":13}]}],"groups":[{"title":"Constructors","kind":512,"children":[61]},{"title":"Methods","kind":2048,"children":[64,67]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":132,"character":28}]},{"id":97,"name":"FactoryInvoker","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"An Invoker that is used to invoke a factory method."},"children":[{"id":98,"name":"instance","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"comment":{"shortText":"The singleton instance of the FactoryInvoker."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":250,"character":19}],"type":{"type":"reference","name":"FactoryInvoker","id":97}},{"id":99,"name":"invoke","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":100,"name":"invoke","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Invokes the function with the provided dependencies.","returns":"The result of the function invocation.\n"},"parameters":[{"id":101,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The calling container."},"type":{"type":"reference","name":"Container","id":154}},{"id":102,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The constructor or factory function."},"type":{"type":"reference","name":"Function"}},{"id":103,"name":"dependencies","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The dependencies of the function call."},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":258,"character":10}]},{"id":104,"name":"invokeWithDynamicDependencies","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":105,"name":"invokeWithDynamicDependencies","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Invokes the function with the provided dependencies.","returns":"The result of the function invocation.\n"},"parameters":[{"id":106,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The calling container."},"type":{"type":"reference","name":"Container","id":154}},{"id":107,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The constructor or factory function."},"type":{"type":"reference","name":"Function"}},{"id":108,"name":"staticDependencies","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The static dependencies of the function."},"type":{"type":"instrinct","isArray":true,"name":"any"}},{"id":109,"name":"dynamicDependencies","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"Additional dependencies to use during invocation."},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":267,"character":33}]}],"groups":[{"title":"Properties","kind":1024,"children":[98]},{"title":"Methods","kind":2048,"children":[99,104]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":246,"character":35}]},{"id":135,"name":"InvocationHandler","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Stores the information needed to invoke a function."},"children":[{"id":139,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Instantiates an InvocationDescription."},"signatures":[{"id":140,"name":"new InvocationHandler","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Instantiates an InvocationDescription."},"parameters":[{"id":141,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The Function described by this description object."},"type":{"type":"reference","name":"Function"}},{"id":142,"name":"invoker","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The strategy for invoking the function."},"type":{"type":"reference","name":"Invoker","id":85}},{"id":143,"name":"dependencies","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The static dependencies of the function call.\n"},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"reference","name":"InvocationHandler","id":135}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":346,"character":24}]},{"id":138,"name":"dependencies","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The statically known dependencies of this function invocation."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":346,"character":16}],"type":{"type":"instrinct","isArray":true,"name":"any"}},{"id":136,"name":"fn","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The function to be invoked by this handler."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":338,"character":6}],"type":{"type":"reference","name":"Function"}},{"id":137,"name":"invoker","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The invoker implementation that will be used to actually invoke the function."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":342,"character":11}],"type":{"type":"reference","name":"Invoker","id":85}},{"id":144,"name":"invoke","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":145,"name":"invoke","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Invokes the function.","returns":"The result of the function invocation.\n"},"parameters":[{"id":146,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The calling container."},"type":{"type":"reference","name":"Container","id":154}},{"id":147,"name":"dynamicDependencies","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Additional dependencies to use during invocation."},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":360,"character":10}]}],"groups":[{"title":"Constructors","kind":512,"children":[139]},{"title":"Properties","kind":1024,"children":[138,136,137]},{"title":"Methods","kind":2048,"children":[144]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":334,"character":38}]},{"id":18,"name":"Lazy","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to allow functions/classes to specify lazy resolution logic."},"children":[{"id":19,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of the Lazy class."},"signatures":[{"id":20,"name":"new Lazy","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of the Lazy class."},"parameters":[{"id":21,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The key to lazily resolve.\n"},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"Lazy","id":18}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":42,"character":27}]},{"id":22,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":23,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to lazily resolve the dependency into a lazy locator function.","returns":"Returns a function which can be invoked at a later time to obtain the actual dependency.\n"},"parameters":[{"id":24,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container to resolve from."},"type":{"type":"reference","name":"Container","id":154}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":53,"character":7}]},{"id":25,"name":"of","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":26,"name":"of","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a Lazy Resolver for the supplied key.","returns":"Returns an instance of Lazy for the key.\n"},"parameters":[{"id":27,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key to lazily resolve."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"Lazy","id":18}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":59,"character":13}]}],"groups":[{"title":"Constructors","kind":512,"children":[19]},{"title":"Methods","kind":2048,"children":[22,25]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":42,"character":25}]},{"id":70,"name":"NewInstance","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to inject a new instance of a dependency, without regard for existing\ninstances in the container. Instances can optionally be registered in the container\nunder a different key by supplying a key using the `as` method."},"children":[{"id":71,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of the NewInstance class."},"signatures":[{"id":72,"name":"new NewInstance","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of the NewInstance class."},"parameters":[{"id":73,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The key to resolve/instantiate."},"type":{"type":"instrinct","name":"any"}},{"id":74,"name":"dynamicDependencies","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"comment":{"shortText":"An optional list of dynamic dependencies.\n"},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"reference","name":"NewInstance","id":70}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":156,"character":34}]},{"id":78,"name":"as","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":79,"name":"as","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Instructs the NewInstance resolver to register the resolved instance using the supplied key.","returns":"Returns the NewInstance resolver.\n"},"parameters":[{"id":80,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key to register the instance with."},"type":{"type":"instrinct","name":"any"}}]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":175,"character":6}]},{"id":75,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":76,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to instantiate the dependency and potentially register\nas another key if the `as` method was used.","returns":"Returns the matching instance from the parent container\n"},"parameters":[{"id":77,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container to resolve the parent from."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":169,"character":7}]},{"id":81,"name":"of","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":82,"name":"of","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates an NewInstance Resolver for the supplied key.","returns":"Returns an instance of NewInstance for the key.\n"},"parameters":[{"id":83,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key to resolve/instantiate."},"type":{"type":"instrinct","name":"any"}},{"id":84,"name":"dynamicDependencies","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"comment":{"text":"An optional list of dynamic dependencies."},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"reference","name":"NewInstance","id":70}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":182,"character":13}]}],"groups":[{"title":"Constructors","kind":512,"children":[71]},{"title":"Methods","kind":2048,"children":[78,75,81]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":156,"character":32}]},{"id":38,"name":"Optional","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to allow functions/classes to specify an optional dependency, which will be resolved only if already registred with the container."},"children":[{"id":39,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of the Optional class."},"signatures":[{"id":40,"name":"new Optional","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of the Optional class."},"parameters":[{"id":41,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The key to optionally resolve for."},"type":{"type":"instrinct","name":"any"}},{"id":42,"name":"checkParent","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"Indicates whether or not the parent container hierarchy should be checked.\n"},"type":{"type":"instrinct","name":"boolean"}}],"type":{"type":"reference","name":"Optional","id":38}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":86,"character":31}]},{"id":43,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":44,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to provide optional resolution of the key.","returns":"Returns the instance if found; otherwise null.\n"},"parameters":[{"id":45,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container to resolve from."},"type":{"type":"reference","name":"Container","id":154}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":98,"character":7}]},{"id":46,"name":"of","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":47,"name":"of","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates an Optional Resolver for the supplied key.","returns":"Returns an instance of Optional for the key.\n"},"parameters":[{"id":48,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key to optionally resolve for."},"type":{"type":"instrinct","name":"any"}},{"id":49,"name":"checkParent","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"boolean"}}],"type":{"type":"reference","name":"Optional","id":38}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":105,"character":13}]}],"groups":[{"title":"Constructors","kind":512,"children":[39]},{"title":"Methods","kind":2048,"children":[43,46]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":86,"character":29}]},{"id":50,"name":"Parent","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to inject the dependency from the parent container instead of the current one."},"children":[{"id":51,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of the Parent class."},"signatures":[{"id":52,"name":"new Parent","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of the Parent class."},"parameters":[{"id":53,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The key to resolve from the parent container.\n"},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"Parent","id":50}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":110,"character":29}]},{"id":54,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":55,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to load the dependency from the parent container","returns":"Returns the matching instance from the parent container\n"},"parameters":[{"id":56,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container to resolve the parent from."},"type":{"type":"reference","name":"Container","id":154}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":121,"character":7}]},{"id":57,"name":"of","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":58,"name":"of","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a Parent Resolver for the supplied key.","returns":"Returns an instance of Parent for the key.\n"},"parameters":[{"id":59,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key to resolve."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"Parent","id":50}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":127,"character":13}]}],"groups":[{"title":"Constructors","kind":512,"children":[51]},{"title":"Methods","kind":2048,"children":[54,57]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":110,"character":27}]},{"id":125,"name":"SingletonRegistration","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to allow functions/classes to indicate that they should be registered as singletons with the container."},"children":[{"id":126,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of SingletonRegistration."},"signatures":[{"id":127,"name":"new SingletonRegistration","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of SingletonRegistration."},"parameters":[{"id":128,"name":"keyOrRegisterInChild","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"any"}},{"id":129,"name":"registerInChild","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"boolean"}}],"type":{"type":"reference","name":"SingletonRegistration","id":125}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":315,"character":44}]},{"id":130,"name":"registerResolver","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":131,"name":"registerResolver","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to register the resolver.","returns":"The resolver that was registered.\n"},"parameters":[{"id":132,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container the resolver is being registered with."},"type":{"type":"reference","name":"Container","id":154}},{"id":133,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key the resolver should be registered as."},"type":{"type":"instrinct","name":"any"}},{"id":134,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The function to create the resolver for."},"type":{"type":"reference","name":"Function"}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":328,"character":20}]}],"groups":[{"title":"Constructors","kind":512,"children":[126]},{"title":"Methods","kind":2048,"children":[130]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":315,"character":42}]},{"id":7,"name":"StrategyResolver","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to resolve instances, singletons, transients, aliases"},"children":[{"id":10,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of the StrategyResolver class."},"signatures":[{"id":11,"name":"new StrategyResolver","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of the StrategyResolver class."},"parameters":[{"id":12,"name":"strategy","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The type of resolution strategy."},"type":{"type":"instrinct","name":"any"}},{"id":13,"name":"state","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The state associated with the resolution strategy.\n"},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"StrategyResolver","id":7}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":24,"character":15}]},{"id":9,"name":"state","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":24,"character":9}],"type":{"type":"instrinct","name":"any"}},{"id":8,"name":"strategy","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":23,"character":12}],"type":{"type":"union","types":[{"type":"reference","name":"StrategyResolver","id":7},{"type":"instrinct","name":"number"}]}},{"id":14,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":15,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to allow custom resolution of dependencies for a function/class.","returns":"Returns the resolved object.\n"},"parameters":[{"id":16,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container to resolve from."},"type":{"type":"reference","name":"Container","id":154}},{"id":17,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that the resolver was registered as."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":37,"character":7}]}],"groups":[{"title":"Constructors","kind":512,"children":[10]},{"title":"Properties","kind":1024,"children":[9,8]},{"title":"Methods","kind":2048,"children":[14]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":22,"character":37}]},{"id":116,"name":"TransientRegistration","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Used to allow functions/classes to indicate that they should be registered as transients with the container."},"children":[{"id":117,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{"shortText":"Creates an instance of TransientRegistration."},"signatures":[{"id":118,"name":"new TransientRegistration","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{"shortText":"Creates an instance of TransientRegistration."},"parameters":[{"id":119,"name":"key","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"shortText":"The key to register as.\n"},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reference","name":"TransientRegistration","id":116}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":297,"character":44}]},{"id":120,"name":"registerResolver","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":121,"name":"registerResolver","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to register the resolver.","returns":"The resolver that was registered.\n"},"parameters":[{"id":122,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container the resolver is being registered with."},"type":{"type":"reference","name":"Container","id":154}},{"id":123,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key the resolver should be registered as."},"type":{"type":"instrinct","name":"any"}},{"id":124,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The function to create the resolver for."},"type":{"type":"reference","name":"Function"}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":310,"character":20}]}],"groups":[{"title":"Constructors","kind":512,"children":[117]},{"title":"Methods","kind":2048,"children":[120]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":297,"character":42}]},{"id":148,"name":"ContainerConfiguration","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"Used to configure a Container instance."},"children":[{"id":153,"name":"handlers","kind":1024,"kindString":"Property","flags":{"isExported":true,"isOptional":true},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":370,"character":12}],"type":{"type":"reference","name":"Map","typeArguments":[{"type":"instrinct","name":"any"},{"type":"instrinct","name":"any"}]}},{"id":149,"name":"onHandlerCreated","kind":1024,"kindString":"Property","flags":{"isExported":true,"isOptional":true},"comment":{"shortText":"An optional callback which will be called when any function needs an InvocationHandler created (called once per Function)."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":369,"character":20}],"type":{"type":"reflection","declaration":{"id":150,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":151,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":152,"name":"handler","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"InvocationHandler","id":135}}],"type":{"type":"reference","name":"InvocationHandler","id":135}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":369,"character":22}]}}}],"groups":[{"title":"Properties","kind":1024,"children":[153,149]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":365,"character":39}]},{"id":85,"name":"Invoker","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"A strategy for invoking a function, resulting in an object instance."},"children":[{"id":86,"name":"invoke","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":87,"name":"invoke","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Invokes the function with the provided dependencies.","returns":"The result of the function invocation.\n"},"parameters":[{"id":88,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Container","id":154}},{"id":89,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The constructor or factory function."},"type":{"type":"reference","name":"Function"}},{"id":90,"name":"dependencies","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The dependencies of the function call."},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":233,"character":10}]},{"id":91,"name":"invokeWithDynamicDependencies","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":92,"name":"invokeWithDynamicDependencies","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Invokes the function with the provided dependencies.","returns":"The result of the function invocation.\n"},"parameters":[{"id":93,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Container","id":154}},{"id":94,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The constructor or factory function."},"type":{"type":"reference","name":"Function"}},{"id":95,"name":"staticDependencies","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The static dependencies of the function."},"type":{"type":"instrinct","isArray":true,"name":"any"}},{"id":96,"name":"dynamicDependencies","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"Additional dependencies to use during invocation."},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":241,"character":33}]}],"groups":[{"title":"Methods","kind":2048,"children":[86,91]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":226,"character":24}]},{"id":110,"name":"Registration","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"Customizes how a particular function is resolved by the Container."},"children":[{"id":111,"name":"registerResolver","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":112,"name":"registerResolver","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to register the resolver.","returns":"The resolver that was registered.\n"},"parameters":[{"id":113,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container the resolver is being registered with."},"type":{"type":"reference","name":"Container","id":154}},{"id":114,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key the resolver should be registered as."},"type":{"type":"instrinct","name":"any"}},{"id":115,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The function to create the resolver for."},"type":{"type":"reference","name":"Function"}}],"type":{"type":"reference","name":"Resolver","id":2}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":292,"character":20}]}],"groups":[{"title":"Methods","kind":2048,"children":[111]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":284,"character":29}]},{"id":2,"name":"Resolver","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"Used to allow functions/classes to specify custom dependency resolution logic."},"children":[{"id":3,"name":"get","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":4,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Called by the container to allow custom resolution of dependencies for a function/class.","returns":"Returns the resolved object.\n"},"parameters":[{"id":5,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The container to resolve from."},"type":{"type":"reference","name":"Container","id":154}},{"id":6,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The key that the resolver was registered as."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":17,"character":7}]}],"groups":[{"title":"Methods","kind":2048,"children":[3]}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":10,"character":25}]},{"id":299,"name":"_emptyParameters","kind":32,"kindString":"Variable","flags":{"isExported":true},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":330,"character":37}],"type":{"type":"instrinct","isArray":true,"name":"any"}},{"id":233,"name":"resolver","kind":32,"kindString":"Variable","flags":{"isExported":true},"comment":{"shortText":"Decorator: Indicates that the decorated class/object is a custom resolver."},"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":4,"character":29}],"type":{"type":"unknown","name":"Function & { decorates?: any; }"}},{"id":245,"name":"all","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":246,"name":"all","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies the dependency should load all instances of the given key."},"parameters":[{"id":247,"name":"keyValue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reflection","declaration":{"id":248,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":249,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":250,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":251,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":252,"name":"index","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":197,"character":43}]}}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":197,"character":27}]},{"id":300,"name":"autoinject","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":301,"name":"autoinject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Directs the TypeScript transpiler to write-out type metadata for the decorated class."},"parameters":[{"id":302,"name":"potentialTarget","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":507,"character":34}]},{"id":266,"name":"factory","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":267,"name":"factory","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies the dependency to create a factory method, that can accept optional arguments"},"parameters":[{"id":268,"name":"keyValue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reflection","declaration":{"id":269,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":270,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":271,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":272,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":273,"name":"index","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":209,"character":47}]}}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":209,"character":31}]},{"id":234,"name":"getDecoratorDependencies","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":235,"name":"getDecoratorDependencies","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Used by parameter decorators to call autoinject for the target and retrieve the target's inject property.","returns":"Returns the target's own inject property.\n"},"parameters":[{"id":236,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The target class."},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":189,"character":48}]},{"id":303,"name":"inject","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":304,"name":"inject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies the dependencies that should be injected by the DI Container into the decorated class/function."},"parameters":[{"id":305,"name":"rest","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":511,"character":30}]},{"id":286,"name":"invokeAsFactory","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":287,"name":"invokeAsFactory","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies that the decorated item should be called as a factory function, rather than a constructor."},"parameters":[{"id":288,"name":"potentialTarget","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":222,"character":39}]},{"id":283,"name":"invoker","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":284,"name":"invoker","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies a custom Invoker for the decorated item."},"parameters":[{"id":285,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Invoker","id":85}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":218,"character":31}]},{"id":237,"name":"lazy","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":238,"name":"lazy","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies the dependency should be lazy loaded"},"parameters":[{"id":239,"name":"keyValue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"reflection","declaration":{"id":240,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":241,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":242,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":243,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":244,"name":"index","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":193,"character":44}]}}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":193,"character":28}]},{"id":274,"name":"newInstance","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":275,"name":"newInstance","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies the dependency as a new instance. Instances can optionally be registered in the container\nunder a different key and/or use dynamic dependencies"},"parameters":[{"id":276,"name":"asKeyOrTarget","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"any"}},{"id":277,"name":"dynamicDependencies","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"instrinct","isArray":true,"name":"any"}}],"type":{"type":"reflection","declaration":{"id":278,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":279,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":280,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":281,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":282,"name":"index","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":214,"character":88}]}}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":214,"character":35}]},{"id":253,"name":"optional","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":254,"name":"optional","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies the dependency as optional"},"parameters":[{"id":255,"name":"checkParentOrTarget","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"boolean"}}],"type":{"type":"reflection","declaration":{"id":256,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":257,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":258,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":259,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":260,"name":"index","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":201,"character":64}]}}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":201,"character":32}]},{"id":261,"name":"parent","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":262,"name":"parent","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies the dependency to look at the parent container for resolution"},"parameters":[{"id":263,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":264,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}},{"id":265,"name":"index","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"void"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":205,"character":30}]},{"id":289,"name":"registration","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":290,"name":"registration","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies a custom registration strategy for the decorated class/function."},"parameters":[{"id":291,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Registration","id":110}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":272,"character":36}]},{"id":295,"name":"singleton","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":296,"name":"singleton","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies to register the decorated item with a \"singleton\" lifetime."},"parameters":[{"id":297,"name":"keyOrRegisterInChild","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"any"}},{"id":298,"name":"registerInChild","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"boolean"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":280,"character":33}]},{"id":292,"name":"transient","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":293,"name":"transient","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Decorator: Specifies to register the decorated item with a \"transient\" lifetime."},"parameters":[{"id":294,"name":"key","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"instrinct","name":"any"}}],"type":{"type":"instrinct","name":"any"}}],"sources":[{"fileName":"aurelia-dependency-injection.d.ts","line":276,"character":33}]}],"groups":[{"title":"Classes","kind":128,"children":[28,154,60,97,135,18,70,38,50,125,7,116]},{"title":"Interfaces","kind":256,"children":[148,85,110,2]},{"title":"Variables","kind":32,"children":[299,233]},{"title":"Functions","kind":64,"children":[245,300,266,234,303,286,283,237,274,253,261,289,295,292]}]} \ No newline at end of file +{ + "id": 0, + "name": "aurelia-dependency-injection-docs", + "kind": 0, + "flags": {} +} \ No newline at end of file diff --git a/doc/shape-defs.js b/doc/shape-defs.js new file mode 100644 index 0000000..e652167 --- /dev/null +++ b/doc/shape-defs.js @@ -0,0 +1,52 @@ +"use strict"; + +const path = require('path'); +const fs = require('fs'); +const packageJsonPath = path.resolve(__dirname, '../package.json'); + +try { + const packageName = require(packageJsonPath).name; + const dtsPath = path.resolve(__dirname, `../dist/doc-temp/${packageName}.d.ts`); + let defs = fs.readFileSync(dtsPath).toString(); + + // aggregate external imports + const packages = {}; + const importRegex = /^\s*import\s+\{([^}]+)\}\s*from\s*'([\w|-]+)'/gm; + let importMatch = importRegex.exec(defs); + while (importMatch) { + const packageName = importMatch[2]; + const imports = packages[packageName] || (packages[packageName] = []); + const bindings = importMatch[1].split(',').map(x => x.trim()); + for (let binding of bindings) { + if (imports.indexOf(binding) === -1) { + imports.push(binding); + } + } + importMatch = importRegex.exec(defs); + } + + // remove leading declare module + defs = defs.replace(/^declare module ".*" \{/, ''); + // remove "} declare module {" + defs = defs.replace(/\}\r?\ndeclare module ".*" \{/g, ''); + // remove closing "}" + defs = defs.replace(/\}\r?\n$/, ''); + // remove imports + defs = defs.replace(/^\s+import.*;$/gm, ''); + // remove "export *" + defs = defs.replace(/^\s+export \*.*;$/gm, ''); + + // write imports + for (let packageName in packages) { + if (packages.hasOwnProperty(packageName)) { + const imports = packages[packageName]; + defs = `import {${imports.sort()}} from '${packageName}';\n` + defs; + } + } + + fs.writeFileSync(dtsPath, defs); + console.log(`Shaped the dist/doc-temp/${packageName}.d.ts file.`); +} catch (e) { + console.error(`Unable to shape the .d.ts file.`); + console.error(e.message); +} diff --git a/doc/shape-doc.js b/doc/shape-doc.js new file mode 100644 index 0000000..37514e3 --- /dev/null +++ b/doc/shape-doc.js @@ -0,0 +1,24 @@ +"use strict"; + +const path = require('path'); +const fs = require('fs'); +const packageJsonPath = path.resolve(__dirname, '../package.json'); +const apiJsonPath = path.resolve(__dirname, './api.json'); + +try { + const packageName = require(packageJsonPath).name; + let json = require(apiJsonPath).children[0]; + + json = { + name: packageName, + children: json.children, + groups: json.groups + }; + + const str = JSON.stringify(json) + '\n'; + fs.writeFileSync(apiJsonPath, str); + console.log('Shaped the doc/api.json file.'); +} catch (e) { + console.error('Unable to shape the api.json. The file probably has an incorrect format or doesn\'t exist.'); + console.error(e.message); +} diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 978fd98..0000000 --- a/gulpfile.js +++ /dev/null @@ -1 +0,0 @@ -require('require-dir')('build/tasks'); diff --git a/karma.conf.js b/karma.conf.js index 1facd78..28118e2 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,81 +1,57 @@ // Karma configuration -// Generated on Fri Dec 05 2014 16:49:29 GMT-0500 (EST) +// Generated on Sun Aug 28 2016 19:03:27 GMT-0400 (Eastern Daylight Time) module.exports = function(config) { config.set({ // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', - + basePath: "", // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jspm', 'jasmine'], - - jspm: { - // Edit this to your needs - loadFiles: ['src/**/*.js', 'test/**/*.js'] - }, - + frameworks: ["jasmine", "requirejs"], // list of files / patterns to load in the browser - files: [], - - - // list of files to exclude - exclude: [ + files: [ + "dist/test/test/main.js", + { pattern: "dist/test/**/*.js", included: false, watched: true }, + //{ pattern: 'dist/test/**/*.html', included: false, watched: true }, + { pattern: "node_modules/**/*.js", included: false, watched: false }, ], - // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { - 'test/**/*.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'], - + 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'], - + browsers: ["Chrome"], // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits - singleRun: false + singleRun: false, + + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity, }); }; diff --git a/package-lock.json b/package-lock.json index 8423c4e..9112d75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,58 +1,168 @@ { "name": "aurelia-dependency-injection", - "version": "1.4.2", + "version": "1.4.4", "lockfileVersion": 1, "requires": true, "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/events": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", + "dev": true + }, + "@types/fs-extra": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.4.tgz", + "integrity": "sha512-DsknoBvD8s+RFfSGjmERJ7ZOP1HI0UZRA3FSI+Zakhrc/Gy26YQsLI+m5V5DHxroHRJqCDLKJp7Hixn8zyaF7g==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/handlebars": { + "version": "4.0.39", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.39.tgz", + "integrity": "sha512-vjaS7Q0dVqFp85QhyPSZqDKnTTCemcSHNHFvDdalO1s0Ifz5KuE64jQD5xoUkfdWwF4WpqdJEl7LsWH8rzhKJA==", + "dev": true + }, + "@types/highlight.js": { + "version": "9.12.3", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", + "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", + "dev": true + }, + "@types/jsdom": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-12.2.0.tgz", + "integrity": "sha512-8LQPkE7S3IuuJyHOIghXf+AjpcfhleEG63z9pveKFJ+Aqu9h/PXefU4gF6PSvCyOeNzlfFjMWO1Vtctowq2jRg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^4.0.0" + }, + "dependencies": { + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + } + } + }, + "@types/lodash": { + "version": "4.14.117", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.117.tgz", + "integrity": "sha512-xyf2m6tRbz8qQKcxYZa7PA4SllYcay+eh25DN3jmNYY6gSTL7Htc/bttVdkqj2wfJGbeWlQiX8pIyJpKU+tubw==", + "dev": true + }, + "@types/marked": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.4.2.tgz", + "integrity": "sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg==", + "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.9.5", + "resolved": "http://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", + "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", + "dev": true + }, + "@types/shelljs": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.0.tgz", + "integrity": "sha512-vs1hCC8RxLHRu2bwumNyYRNrU3o8BtZhLysH5A4I98iYmA2APl6R3uNQb5ihl+WiwH0xdC9LLO+vRrXLs/Kyxg==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "@types/tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-Set5ZdrAaKI/qHdFlVMgm/GsAv/wkXhSTuZFkJ+JI7HK+wIkIlOaUXSXieIvJ0+OvGIqtREFoE+NHJtEq0gtEw==", + "dev": true + }, "JSONStream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.3.tgz", - "integrity": "sha512-3Sp6WZZ/lXl+nTDoGpGWHEpTnnC6X5fnkolYZR6nwIfzbxxvA8utPWe1gCt7i0m9uVGsSz2IS8K8mJ7HmlduMg==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" } }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", "dev": true }, "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "~2.1.11", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "acorn-globals": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", + "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", "dev": true, "requires": { - "acorn": "^3.0.4" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" }, "dependencies": { "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz", + "integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg==", "dev": true } } }, + "acorn-walk": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.0.tgz", + "integrity": "sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==", + "dev": true + }, "add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", @@ -66,21 +176,17 @@ "dev": true }, "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "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", - "json-stable-stringify": "^1.0.1" + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -109,173 +215,31 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "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-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "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": { - "ansi-wrap": "0.1.0" + "color-convert": "^1.9.0" } }, - "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 - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "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" - } - } + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -303,18 +267,18 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, "array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", "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-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -328,24 +292,9 @@ "dev": true }, "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true }, "array-unique": { @@ -355,9 +304,9 @@ "dev": true }, "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "dev": true }, "arrify": { @@ -388,10 +337,21 @@ "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "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" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + } + } }, "async-each": { "version": "1.0.1", @@ -399,6 +359,12 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -406,274 +372,416 @@ "dev": true }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "aurelia-metadata": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/aurelia-metadata/-/aurelia-metadata-1.0.4.tgz", - "integrity": "sha512-9CgVH+kgrMIqWPAtdhhEJLoEPRMFz4RMsaLkYfYnK7LUCcOtZtPrOrAHCaU7jVa67JjGcsXkEqoN+xaTs0NL3g==", + "aurelia-binding": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/aurelia-binding/-/aurelia-binding-2.1.6.tgz", + "integrity": "sha512-M/za0p+LIEv0lLhJqzIIxufGbwVDMKDTuICiZ9hXFVrsTruT18axFWKW4OOuen3rpxTmhrzWCtukn5YxYG95XQ==", + "dev": true, "requires": { - "aurelia-pal": "^1.0.0" + "aurelia-logging": "^1.0.0", + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0", + "aurelia-task-queue": "^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-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" + } + }, + "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==", + "dev": true, + "requires": { + "aurelia-metadata": "^1.0.0", + "aurelia-pal": "^1.0.0" + } }, - "aurelia-tools": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/aurelia-tools/-/aurelia-tools-0.2.4.tgz", - "integrity": "sha1-FcmS8wSeldmISAQ7yLWDs9sfulQ=", + "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=", "dev": true, "requires": { - "breeze-dag": "^0.1.0", - "through2": "^2.0.0" + "aurelia-logging": "^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 + "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" + } }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "aurelia-history": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/aurelia-history/-/aurelia-history-1.1.0.tgz", + "integrity": "sha1-d5qjhtVoA6qkvbfXFDWld2hQX1c=", "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=", + "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": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "aurelia-history": "^1.0.0", + "aurelia-pal": "^1.0.0" } }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "aurelia-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/aurelia-loader/-/aurelia-loader-1.0.0.tgz", + "integrity": "sha1-t4wqKBOqjkQSRyN91m/WLl1OGeo=", "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" + "aurelia-metadata": "^1.0.0", + "aurelia-path": "^1.0.0" } }, - "babel-dts-generator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-dts-generator/-/babel-dts-generator-0.6.3.tgz", - "integrity": "sha1-tc4+Q4JVowKbNK3Akqm7iz34HAc=", + "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-logging": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/aurelia-logging/-/aurelia-logging-1.5.0.tgz", + "integrity": "sha512-u9Hhoj3yDHthKgTyj2svr7PaO41e2WFM2dSITxzOMzW8dC9hGVsIo9Hl6cereTP4+GMfMMQF5ZFp6Kfg87Ov0Q==", "dev": true }, - "babel-eslint": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-6.1.2.tgz", - "integrity": "sha1-UpNBn+NnLWZZjTJ9qWlFZ7pqXy8=", + "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": { - "babel-traverse": "^6.0.20", - "babel-types": "^6.0.19", - "babylon": "^6.0.18", - "lodash.assign": "^4.0.0", - "lodash.pickby": "^4.0.0" + "aurelia-logging": "^1.0.0" } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "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": { - "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 - } + "aurelia-pal": "^1.4.0" } }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "aurelia-pal-nodejs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aurelia-pal-nodejs/-/aurelia-pal-nodejs-1.2.0.tgz", + "integrity": "sha512-Ghca3sai7ju3Z5YVSmNDwKVn1dQ4nmDP+cirBlhL3N0PWf4+bE43g6dbVa91+muQ7HULZ23uGFVWTIM0s1OKBw==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "aurelia-pal": "^1.1.0", + "jsdom": "~11.5.1" } }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "aurelia-path": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/aurelia-path/-/aurelia-path-1.1.1.tgz", + "integrity": "sha1-yqnSC8hRWl+fKG2aOxjYGyyFsN0=", + "dev": true + }, + "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": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "aurelia-pal": "^1.0.0" } }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "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": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "aurelia-path": "^1.0.0" } }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "aurelia-router": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/aurelia-router/-/aurelia-router-1.6.3.tgz", + "integrity": "sha512-6Dsr+8cSq4Bf61OOHhTQgkZvis4mhjqh1QbIKO7Ny+oRYdhnFjz1izHDYAosD52spXl/mVtlC1pJSg/ooAtHqA==", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "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" } }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "aurelia-task-queue": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/aurelia-task-queue/-/aurelia-task-queue-1.3.1.tgz", + "integrity": "sha512-Eyto+EVcezwrY3qHZwBvueKb3j+e/lgKp2nNbX1y6KVJmoO9XzK/KctViprpn7ZFl9YGYjJ9s+zJM8nFlQUr1g==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "aurelia-pal": "^1.0.0" } }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "aurelia-templating": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aurelia-templating/-/aurelia-templating-1.10.1.tgz", + "integrity": "sha512-GDClZWk+32SUYMsEttRFE3+dIbzZeDf5vl9dvuO6ULe+erTUOq2TUf9pHknWZuzoXXdGSD2qQnk+AEZZWW3MOQ==", "dev": true, "requires": { - "babel-helper-bindify-decorators": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "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" } }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "aurelia-templating-binding": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/aurelia-templating-binding/-/aurelia-templating-binding-1.5.2.tgz", + "integrity": "sha512-G2zMZGse1n6o/pWjlvSmTevgXBq+ZapHWA9SlRyChoZOwz1/+wzPUF/0a+EqHpAB5cW/nqWCo9a53GRqmzLR1w==", "dev": true, "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "aurelia-binding": "^2.0.0", + "aurelia-logging": "^1.0.0", + "aurelia-templating": "^1.3.0" } }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "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": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "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" } }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "aurelia-templating-router": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/aurelia-templating-router/-/aurelia-templating-router-1.3.3.tgz", + "integrity": "sha512-Bfl3QwXSJtyN5Q1kNgOn4vM+Q3aYrZ+lShumbhn349/TjHRUPz73CihJvdTQoMBYPV8CwEeZt2qgmrPc1MmQYA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "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" } }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "aurelia-testing": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/aurelia-testing/-/aurelia-testing-1.0.0.tgz", + "integrity": "sha512-eLzP7Run0PyN0l1YWQobr2H/OEd0zSPabPKcbMD9gAxfGEKpotTQFFEEhCXEJu9ykLWqjO1TARB5SqoXpfdfGg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "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" } }, - "babel-helper-regex": { + "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-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "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", - "lodash": "^4.17.4" + "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-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "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-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-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": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "babel-helper-replace-supers": { + "babel-helper-hoist-variables": { "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, @@ -696,103 +804,6 @@ "babel-runtime": "^6.22.0" } }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true - }, - "babel-plugin-syntax-class-constructor-call": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, "babel-plugin-transform-cjs-system-wrapper": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-cjs-system-wrapper/-/babel-plugin-transform-cjs-system-wrapper-0.3.0.tgz", @@ -802,318 +813,17 @@ "babel-template": "^6.9.0" } }, - "babel-plugin-transform-class-constructor-call": { + "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", - "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "dev": true, - "requires": { - "babel-helper-explode-class": "^6.24.1", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-decorators-legacy": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", - "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", - "dev": true, - "requires": { - "babel-plugin-syntax-decorators": "^6.1.18", - "babel-runtime": "^6.2.0", - "babel-template": "^6.3.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "dev": true, - "requires": { - "babel-plugin-syntax-export-extensions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" - } - }, "babel-plugin-transform-global-system-wrapper": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-global-system-wrapper/-/babel-plugin-transform-global-system-wrapper-0.0.1.tgz", @@ -1123,127 +833,12 @@ "babel-template": "^6.9.0" } }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, "babel-plugin-transform-system-register": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-system-register/-/babel-plugin-transform-system-register-0.0.1.tgz", "integrity": "sha1-nf9AOQwnY6xRjwsq18XqT2WlviU=", "dev": true }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.24.1", - "babel-plugin-transform-es2015-classes": "^6.24.1", - "babel-plugin-transform-es2015-computed-properties": "^6.24.1", - "babel-plugin-transform-es2015-destructuring": "^6.22.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", - "babel-plugin-transform-es2015-for-of": "^6.22.0", - "babel-plugin-transform-es2015-function-name": "^6.24.1", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-plugin-transform-es2015-object-super": "^6.24.1", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", - "babel-plugin-transform-regenerator": "^6.24.1" - } - }, - "babel-preset-es2015-loose": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-es2015-loose/-/babel-preset-es2015-loose-7.0.0.tgz", - "integrity": "sha1-/YDIXTsgy/MJvQzjCjY4DFeEvwY=", - "dev": true, - "requires": { - "modify-babel-preset": "^1.0.0" - } - }, - "babel-preset-es2015-loose-native-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-es2015-loose-native-modules/-/babel-preset-es2015-loose-native-modules-1.0.0.tgz", - "integrity": "sha1-riE7quywcGjH7/KO6Wl7pG6TVh8=", - "dev": true, - "requires": { - "modify-babel-preset": "^1.2.0" - } - }, - "babel-preset-stage-1": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", - "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", - "dev": true, - "requires": { - "babel-plugin-transform-class-constructor-call": "^6.24.1", - "babel-plugin-transform-export-extensions": "^6.22.0", - "babel-preset-stage-2": "^6.24.1" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "dev": true, - "requires": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators": "^6.24.1", - "babel-preset-stage-3": "^6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-generator-functions": "^6.24.1", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.22.0" - } - }, "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", @@ -1405,12 +1000,6 @@ "tweetnacl": "^0.14.3" } }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, "better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", @@ -1421,20 +1010,14 @@ } }, "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "binaryextensions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz", - "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U=", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, "blob": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/blob/-/blob-0.0.4.tgz", "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", "dev": true }, @@ -1448,9 +1031,9 @@ } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", + "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==", "dev": true }, "body-parser": { @@ -1469,12 +1052,23 @@ "qs": "6.5.2", "raw-body": "2.3.3", "type-is": "~1.6.16" + }, + "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" + } + } } }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -1510,41 +1104,44 @@ } } }, - "breeze-dag": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/breeze-dag/-/breeze-dag-0.1.0.tgz", - "integrity": "sha1-yQyUVZYeeXP8b+tL7wCaSYvx3IA=", - "dev": true, - "requires": { - "breeze-queue": "0.1.x", - "gaia-tsort": "*" - } - }, - "breeze-nexttick": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/breeze-nexttick/-/breeze-nexttick-0.2.1.tgz", - "integrity": "sha1-HguC9F6rYA2E8OkfFq741lst+6s=", + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", "dev": true }, - "breeze-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/breeze-queue/-/breeze-queue-0.1.0.tgz", - "integrity": "sha1-f9QQWP5ghyWDPSSR2I0oyiz4nJA=", + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "breeze-nexttick": "*" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-peek-stream": { @@ -1553,39 +1150,12 @@ "integrity": "sha1-U7R1cKE0d4fFutTKLKMCH52LPP0=", "dev": true }, - "bufferstreams": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.3.tgz", - "integrity": "sha512-HaJnVuslRF4g2kSDeyl++AaVizoitCpL9PglzCYwy0uHHyvWerfvEb8jWmYbF1z4kiVFolGomnxSGl+GUQp2jg==", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, "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 }, - "bump-regex": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/bump-regex/-/bump-regex-2.9.0.tgz", - "integrity": "sha512-o4WC1mKw/kM0zScuOxZKi243lc+/h09b41u2A7HlWbxHsEDsTTZtqDZYkQj65l24J8+9Saahn5ep+EyeqpQoCg==", - "dev": true, - "requires": { - "semver": "^5.1.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -1609,41 +1179,27 @@ "unset-value": "^1.0.0" } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "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": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" } }, "caseless": { @@ -1663,65 +1219,52 @@ } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" + } + } } }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "^1.3.0", + "anymatch": "^2.0.0", "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", "inherits": "^2.0.1", "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - }, - "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" - } - } + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", + "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", "dev": true }, "class-utils": { @@ -1747,67 +1290,15 @@ } } }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "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": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "co": { @@ -1832,16 +1323,25 @@ "object-visit": "^1.0.0" } }, - "color-support": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", - "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", + "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", "dev": true }, "combine-lists": { @@ -1863,13 +1363,10 @@ } }, "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true }, "compare-func": { "version": "1.3.2", @@ -1917,19 +1414,27 @@ "typedarray": "^0.0.6" } }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "requires": { - "source-map": "^0.6.1" + "concurrently": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-4.0.1.tgz", + "integrity": "sha512-D8UI+mlI/bfvrA57SeKOht6sEpb01dKk+8Yee4fbnkk1Ue8r3S+JXoEdFZIpzQlXJGtnxo47Wvvg/kG4ba3U6Q==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "date-fns": "^1.23.0", + "lodash": "^4.17.10", + "read-pkg": "^4.0.1", + "rxjs": "6.2.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^4.5.0", + "tree-kill": "^1.1.0", + "yargs": "^12.0.1" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true } } @@ -1952,23 +1457,29 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "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==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-2.0.3.tgz", + "integrity": "sha512-4bcII9cJHSKb2qi9e8qGF6aJHLf/AB0dokhyR+X6QILTMl77s4l163vK+reXhajvfOYbbHQvsrWybr5+PKZwNA==", "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-atom": "^2.0.0", + "conventional-changelog-codemirror": "^2.0.0", + "conventional-changelog-core": "^3.1.0", + "conventional-changelog-ember": "^2.0.1", + "conventional-changelog-eslint": "^3.0.0", + "conventional-changelog-express": "^2.0.0", "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-jshint": "^2.0.0", + "conventional-changelog-preset-loader": "^2.0.1" } }, "conventional-changelog-angular": { @@ -1982,36 +1493,49 @@ } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.0.tgz", + "integrity": "sha512-ygwkwyTQYAm4S0tsDt+1yg8tHhRrv7qu9SOWPhNQlVrInFLsfKc0FActCA3de2ChknxpVPY2B53yhKvCAtkBCg==", "dev": true, "requires": { "q": "^1.5.1" } }, + "conventional-changelog-cli": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-2.0.5.tgz", + "integrity": "sha512-StqCVo10g194UhyLIhg+M/tTVu6YjGnON/IiQ9Ty/h+dgi9obYAkknwpmmgGJMQ3P3vNRljuZBupz0N2tpdxXg==", + "dev": true, + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog": "^2.0.3", + "lodash": "^4.2.1", + "meow": "^4.0.0", + "tempfile": "^1.1.1" + } + }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.0.tgz", + "integrity": "sha512-pZt/YynJ5m8C9MGV5wkBuhM1eX+8a84fmNrdOylxg/lJV+lgtAiNhnpskNuixtf71iKVWSlEqMQ6z6CH7/Uo5A==", "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==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.0.tgz", + "integrity": "sha512-bcZkcFXkqVgG2W8m/1wjlp2wn/BKDcrPgw3/mvSEQtzs8Pax8JbAPFpEQReHY92+EKNNXC67wLA8y2xcNx0rDA==", "dev": true, "requires": { - "conventional-changelog-writer": "^3.0.9", - "conventional-commits-parser": "^2.1.7", + "conventional-changelog-writer": "^4.0.0", + "conventional-commits-parser": "^3.0.0", "dateformat": "^3.0.0", "get-pkg-repo": "^1.0.0", - "git-raw-commits": "^1.3.6", + "git-raw-commits": "^2.0.0", "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^1.3.6", + "git-semver-tags": "^2.0.0", "lodash": "^4.2.1", "normalize-package-data": "^2.3.5", "q": "^1.5.1", @@ -2020,36 +1544,89 @@ "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==", + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "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" + } } } }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.1.tgz", + "integrity": "sha512-Ym1xLi7YLGooLUpHCJhlXJW5V7u/g+hlYD/+HKt0KqG2qbiBi7e7/HO9aScXTEKUBGMm7m4C443R+eCWQI2ynA==", "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.0.tgz", + "integrity": "sha512-Acn20v+13c+o1OAWKvc9sCCl73Nj2vOMyn+G82euiMZwgYNE9CcBkTnw/GKdBi9KiZMK9uy+SCQ/QyAEE+8vZA==", "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.0.tgz", + "integrity": "sha512-2svPjeXCrjwwqnzu/f3qU5LWoLO0jmUIEbtbbSRXAAP9Ag+137b484eJsiRt9DPYXSVzog0Eoek3rvCzfHcphQ==", "dev": true, "requires": { "q": "^1.5.1" @@ -2074,9 +1651,9 @@ } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.0.tgz", + "integrity": "sha512-+4fCln755N0ZzRUEdcDWR5Due71Dsqkbov6K/UmVCnljZvhVh0/wpT4YROoSsAnhfZO8shyWDPFKm6EP20pLQg==", "dev": true, "requires": { "compare-func": "^1.3.1", @@ -2084,19 +1661,19 @@ } }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.1.tgz", + "integrity": "sha512-HiSfhXNzAzG9klIqJaA97MMiNBR4js+53g4Px0k7tgKeCNVXmrDrm+CY+nIqcmG5NVngEPf8rAr7iji1TWW7zg==", "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.0.tgz", + "integrity": "sha512-hMZPe0AQ6Bi05epeK/7hz80xxk59nPA5z/b63TOHq2wigM0/akreOc8N4Jam5b9nFgKWX1e9PdPv2ewgW6bcfg==", "dev": true, "requires": { "compare-func": "^1.3.1", - "conventional-commits-filter": "^1.1.6", + "conventional-commits-filter": "^2.0.0", "dateformat": "^3.0.0", "handlebars": "^4.0.2", "json-stringify-safe": "^5.0.1", @@ -2105,209 +1682,157 @@ "semver": "^5.5.0", "split": "^1.0.0", "through2": "^2.0.0" + } + }, + "conventional-commits-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.0.tgz", + "integrity": "sha512-Cfl0j1/NquB/TMVx7Wrmyq7uRM+/rPQbtVVGwzfkhZ6/yH6fcMmP0Q/9044TBZPTNdGzm46vXFXL14wbET0/Mg==", + "dev": true, + "requires": { + "is-subset": "^0.1.1", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.0.tgz", + "integrity": "sha512-GWh71U26BLWgMykCp+VghZ4s64wVbtseECcKQ/PvcPZR2cUnz+FUc2J9KjxNl7/ZbCxST8R03c9fc+Vi0umS9Q==", + "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" + } + }, + "conventional-recommended-bump": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-4.0.4.tgz", + "integrity": "sha512-9mY5Yoblq+ZMqJpBzgS+RpSq+SUfP2miOR3H/NR9drGf08WCrY9B6HAGJZEm6+ThsVP917VHAahSOjM6k1vhPg==", + "dev": true, + "requires": { + "concat-stream": "^1.6.0", + "conventional-changelog-preset-loader": "^2.0.2", + "conventional-commits-filter": "^2.0.1", + "conventional-commits-parser": "^3.0.1", + "git-raw-commits": "2.0.0", + "git-semver-tags": "^2.0.2", + "meow": "^4.0.0", + "q": "^1.5.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" - } - }, - "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=", + "conventional-changelog-preset-loader": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz", + "integrity": "sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ==", "dev": true }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "conventional-commits-filter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz", + "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==", "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" + "is-subset": "^0.1.1", + "modify-values": "^1.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "conventional-commits-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz", + "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "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" } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "git-semver-tags": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.2.tgz", + "integrity": "sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w==", "dev": true, "requires": { - "pify": "^3.0.0" + "meow": "^4.0.0", + "semver": "^5.5.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==", + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { - "is-subset": "^0.1.1", - "modify-values": "^1.0.0" + "safe-buffer": "~5.1.1" } }, - "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==", + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copyfiles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.1.0.tgz", + "integrity": "sha512-cAeDE0vL/koE9WSEGxqPpSyvU638Kgfu6wfrnj7kqp9FWa1CWsU54Coo6sdYZP4GstWa39tL/wIVJWfXcujgNA==", "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" + "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": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "find-up": { @@ -2319,147 +1844,112 @@ "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=", + "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 }, - "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=", + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "invert-kv": "^1.0.0" } }, - "map-obj": { + "locate-path": { "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=", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "pify": "^3.0.0" + "mimic-fn": "^1.0.0" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "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": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.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=", + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "p-try": "^1.0.0" } }, - "redent": { + "p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "p-limit": "^1.1.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "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 }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "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 + "yargs": { + "version": "11.1.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } } } }, - "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 - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", @@ -2472,6 +1962,44 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "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" + } + }, + "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" + } + }, + "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", @@ -2520,10 +2048,22 @@ "integrity": "sha1-RuE6udqOMJdFyNAc5UchPr2y/j8=", "dev": true }, + "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 + }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true }, "debug": { @@ -2536,10 +2076,13 @@ } }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } }, "decamelize-keys": { "version": "1.1.0", @@ -2549,6 +2092,20 @@ "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "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 + } } }, "decode-uri-component": { @@ -2563,25 +2120,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "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", @@ -2623,21 +2161,6 @@ } } }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2650,12 +2173,6 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -2671,20 +2188,23 @@ "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 + }, "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true }, "dom-serialize": { "version": "2.2.1", @@ -2698,6 +2218,15 @@ "void-elements": "^2.0.0" } }, + "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", @@ -2707,66 +2236,169 @@ "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 - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", "dev": true, "requires": { - "readable-stream": "~1.1.9" - }, - "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.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "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 - } + "find-up": "^3.0.0", + "minimatch": "^3.0.4" } }, - "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dts-bundle-generator": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-1.6.1.tgz", + "integrity": "sha512-PXNbaDgYvJSCbAOKHqDxml0uojfRvrVHkKc7v/lcxe8vuGxvkZsEcijQp4KHuEvtLt1whVddhZmTrGqXCW1p7w==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "typescript": ">=2.6.1", + "yargs": "~11.0.0" }, "dependencies": { - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "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": { - "once": "^1.4.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "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 + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "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" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "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" } } } @@ -2793,106 +2425,72 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "~1.3.0" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "1" - } - } - } - }, "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", "dev": true, "requires": { - "accepts": "1.3.3", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "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": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", - "parsejson": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "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": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", "dev": true, "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.6", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" + "has-binary2": "~1.0.2" } }, "ent": { @@ -2908,18 +2506,18 @@ "dev": true }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es5-ext": { - "version": "0.10.45", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", - "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", + "version": "0.10.47", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz", + "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", "dev": true, "requires": { "es6-iterator": "~2.0.3", @@ -2938,33 +2536,6 @@ "es6-symbol": "^3.1.1" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - } - }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", @@ -2985,18 +2556,6 @@ "esniff": "^1.1" } }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -3010,112 +2569,16 @@ "dev": true }, "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", "dev": true, "requires": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.5.2", - "debug": "^2.1.1", - "doctrine": "^2.0.0", - "escope": "^3.6.0", - "espree": "^3.4.0", - "esquery": "^1.0.0", + "esprima": "^3.1.3", "estraverse": "^4.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "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 - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - } + "optionator": "^0.8.1", + "source-map": "~0.6.1" } }, "esniff": { @@ -3128,99 +2591,50 @@ "es5-ext": "^0.10.12" } }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - }, - "dependencies": { - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2" - } - } - } - }, "eventemitter3": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", "dev": true }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } }, "expand-braces": { "version": "0.1.2", @@ -3233,12 +2647,6 @@ "braces": "^0.1.2" }, "dependencies": { - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", @@ -3253,28 +2661,6 @@ "requires": { "expand-range": "^0.1.0" } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true } } }, @@ -3314,69 +2700,42 @@ } }, "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=", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "fill-range": "^2.1.0" + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" }, "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "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" - } + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true } } }, "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1" + "os-homedir": "^1.0.1" } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { @@ -3471,21 +2830,10 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "time-stamp": "^1.0.0" - } - }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "fast-json-stable-stringify": { @@ -3510,23 +2858,12 @@ } }, "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "file-entry-cache": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "escape-string-regexp": "^1.0.5" } }, "filename-regex": { @@ -3581,20 +2918,13 @@ } } }, - "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=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^3.0.0" } }, "findup-sync": { @@ -3607,12 +2937,23 @@ "is-glob": "^3.1.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz", + "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==", "dev": true, "requires": { "expand-tilde": "^2.0.2", @@ -3620,47 +2961,32 @@ "object.defaults": "^1.1.0", "object.pick": "^1.2.0", "parse-filepath": "^1.0.1" - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", - "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", - "dev": true - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.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 + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } } } }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, "follow-redirects": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz", - "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==", + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", + "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", "dev": true, "requires": { - "debug": "^3.1.0" + "debug": "=3.1.0" }, "dependencies": { "debug": { @@ -3681,20 +3007,14 @@ "dev": true }, "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "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" } }, - "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", @@ -3721,12 +3041,6 @@ "map-cache": "^0.2.2" } }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, "fs-access": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", @@ -3737,24 +3051,14 @@ } }, "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - }, - "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 - } + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs.realpath": { @@ -4302,56 +3606,12 @@ "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gaia-tsort": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/gaia-tsort/-/gaia-tsort-0.1.0.tgz", - "integrity": "sha1-ye1GH/CW4SuGYt0GxB76YQHX6EA=", - "dev": true - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "~0.1.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" } }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "get-pkg-repo": { @@ -4365,210 +3625,136 @@ "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-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=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", "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=", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "camelcase": "^2.0.0", + "map-obj": "^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=", + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "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=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0" + "repeating": "^2.0.0" } }, "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "version": "3.7.0", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", "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" + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "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=", + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "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": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "get-stdin": "^4.0.1" } }, - "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=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true } } }, + "get-stdin": { + "version": "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": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-raw-commits": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", + "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", + "dev": true, + "requires": { + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0" + } + }, "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", @@ -4577,171 +3763,24 @@ "requires": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.0.tgz", + "integrity": "sha512-lSgFc3zQTul31nFje2Q8XdNcTOI6B4I3mJRPCgFzHQQLfxfqdWTYzdtCaynkK5Xmb2wQlSJoKolhXJ1VhKROnQ==", "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": { @@ -4755,773 +3794,37 @@ }, "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" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", - "dev": true, - "requires": { - "glob": "^4.3.1", - "glob2base": "^0.0.12", - "minimatch": "^2.0.1", - "ordered-read-streams": "^0.1.0", - "through2": "^0.6.1", - "unique-stream": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "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 - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "^0.5.1" - } - }, - "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" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } - } - }, - "glogg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", - "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "^1.1.0" - } - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "^1.0.0", - "chalk": "^1.0.0", - "deprecated": "^0.0.1", - "gulp-util": "^3.0.0", - "interpret": "^1.0.0", - "liftoff": "^2.1.0", - "minimist": "^1.1.0", - "orchestrator": "^0.3.0", - "pretty-hrtime": "^1.0.0", - "semver": "^4.1.0", - "tildify": "^1.0.0", - "v8flags": "^2.0.2", - "vinyl-fs": "^0.3.0" - } - }, - "gulp-babel": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-6.1.3.tgz", - "integrity": "sha512-tm15R3rt4gO59WXCuqrwf4QXJM9VIJC+0J2NPYSC6xZn+cZRD5y5RPGAiHaDxCJq7Rz5BDljlrk3cEjWADF+wQ==", - "dev": true, - "requires": { - "babel-core": "^6.23.1", - "object-assign": "^4.0.1", - "plugin-error": "^1.0.1", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl-sourcemaps-apply": "^0.2.0" - } - }, - "gulp-bump": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/gulp-bump/-/gulp-bump-2.9.0.tgz", - "integrity": "sha512-Cu+QOhwb2Jr2K6yo2u2mh4GWQRpSAMZD/z0v8FStlrOGaqML9u1On7XcyR1pS/PN3HQ9wsd/Ks6AcCQb+j3BgA==", - "dev": true, - "requires": { - "bump-regex": "^2.9.0", - "plugin-error": "^0.1.2", - "plugin-log": "^0.1.0", - "semver": "^5.3.0", - "through2": "^2.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, - "gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", - "dev": true, - "requires": { - "concat-with-sourcemaps": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "gulp-conventional-changelog": { - "version": "1.1.24", - "resolved": "https://registry.npmjs.org/gulp-conventional-changelog/-/gulp-conventional-changelog-1.1.24.tgz", - "integrity": "sha512-8nw2Vh7HSvNkmYLRrpt77zGjSjz+GoG9uMWCIJWHEoCR4iAHJ1w6PaPJ39C8xdkAfvPdowyKrAhUi3WepELiTA==", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "concat-stream": "^1.6.0", - "conventional-changelog": "^1.1.24", - "fancy-log": "^1.3.2", - "object-assign": "^4.0.1", - "plugin-error": "^1.0.1", - "through2": "^2.0.0" - } - }, - "gulp-eslint": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-3.0.1.tgz", - "integrity": "sha1-BOV+PhjGl0JnwSz2hV3HF9SjE70=", - "dev": true, - "requires": { - "bufferstreams": "^1.1.1", - "eslint": "^3.0.0", - "gulp-util": "^3.0.6" - } - }, - "gulp-ignore": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gulp-ignore/-/gulp-ignore-2.0.2.tgz", - "integrity": "sha1-XC6ioKRALgq0orzRLv2SlTRNePI=", - "dev": true, - "requires": { - "gulp-match": "^1.0.3", - "through2": "^2.0.1" - } - }, - "gulp-insert": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/gulp-insert/-/gulp-insert-0.5.0.tgz", - "integrity": "sha1-MjE/E+SiPPWsylzl8MCAkjx3hgI=", - "dev": true, - "requires": { - "readable-stream": "^1.0.26-4", - "streamqueue": "0.0.6" - }, - "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.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "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 - } - } - }, - "gulp-match": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", - "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=", - "dev": true, - "requires": { - "minimatch": "^3.0.3" - } - }, - "gulp-rename": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.3.0.tgz", - "integrity": "sha512-nEuZB7/9i0IZ8AXORTizl2QLP9tcC9uWc/s329zElBLJw1CfOhmMXBxwVlCRKjDyrWuhVP0uBKl61KeQ32TiCg==", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "^1.1.1", - "graceful-fs": "^4.1.2", - "strip-bom": "^2.0.0", - "through2": "^2.0.0", - "vinyl": "^1.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" - } - } - } - }, - "gulp-typedoc": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulp-typedoc/-/gulp-typedoc-2.2.0.tgz", - "integrity": "sha512-yDBI4CK0CVRONXiI2EXx7rH732pPIXRr6HVlbH05Wbf9uU0/gJ1XiZCef4d43opHl6vA3QkWpM+8NxsMrcoD1w==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "event-stream": "^3.3.4", - "fancy-log": "^1.3.2", - "plugin-error": "^0.1.2" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - } - } - } - }, - "gulp-typedoc-extractor": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/gulp-typedoc-extractor/-/gulp-typedoc-extractor-0.0.8.tgz", - "integrity": "sha1-I9ISexw62HfD+wO7IE12zNwRz/4=", - "dev": true, - "requires": { - "gulp-util": "~3.0.1", - "istextorbinary": "1.0.2", - "nconf": "~0.6.9", - "readable-stream": "^2.0.1", - "replacestream": "^4.0.0", - "through2": "~0.6.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "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 - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - }, - "dependencies": { - "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" - } - } - } - } + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "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" } }, - "gulp-typescript": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-2.14.1.tgz", - "integrity": "sha1-vADt8u5x8JvaU/0dC4c7VxNx1N4=", + "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": { - "gulp-util": "~3.0.7", - "source-map": "~0.5.3", - "through2": "~2.0.1", - "typescript": "1.8.10", - "vinyl-fs": "~2.4.3" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { - "arr-diff": { + "glob-parent": { "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" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "extend": "^3.0.0", - "glob": "^5.0.3", - "glob-parent": "^3.0.0", - "micromatch": "^2.3.7", - "ordered-read-streams": "^0.3.0", - "through2": "^0.6.0", - "to-absolute-glob": "^0.1.1", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "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" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } + "is-glob": "^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 - }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", @@ -5536,188 +3839,95 @@ "requires": { "is-extglob": "^1.0.0" } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "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" - } - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "^1.0.1", - "readable-stream": "^2.0.1" - } - }, - "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 - }, - "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" - } - }, - "typescript": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.10.tgz", - "integrity": "sha1-tHXW4N/wv1DyluXKbvn7tccyDx4=", - "dev": true - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "^1.0.0", - "through2-filter": "^2.0.0" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "^3.2.0", - "glob-stream": "^5.3.2", - "graceful-fs": "^4.0.0", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "^0.3.0", - "lazystream": "^1.0.0", - "lodash.isequal": "^4.0.0", - "merge-stream": "^1.0.0", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.0", - "readable-stream": "^2.0.4", - "strip-bom": "^2.0.0", - "strip-bom-stream": "^1.0.0", - "through2": "^2.0.0", - "through2-filter": "^2.0.0", - "vali-date": "^1.0.0", - "vinyl": "^1.0.0" - } } } }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" + "is-extglob": "^2.1.0" } } } }, - "gulplog": { + "global-modules": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "glogg": "^1.0.0" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "homedir-polyfill": "^1.0.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 + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "handlebars": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -5725,27 +3935,13 @@ "dev": true }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "dev": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^5.3.0", "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - } } }, "has-ansi": { @@ -5755,21 +3951,29 @@ "dev": true, "requires": { "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", "dev": true, "requires": { - "isarray": "0.0.1" + "isarray": "2.0.1" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true } } @@ -5781,24 +3985,9 @@ "dev": true }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-value": { @@ -5834,9 +4023,9 @@ } }, "highlight.js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", - "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", + "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==", "dev": true }, "home-or-tmp": { @@ -5859,14 +4048,23 @@ } }, "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==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, "http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { @@ -5899,34 +4097,19 @@ } }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, - "ignore": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", - "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, "indent-string": { - "version": "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" - } + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true }, "indexof": { "version": "0.0.1", @@ -5956,27 +4139,6 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", @@ -5993,9 +4155,9 @@ } }, "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=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, "is-absolute": { @@ -6051,7 +4213,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -6134,40 +4296,18 @@ } }, "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-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "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-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -6192,51 +4332,10 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://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-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -6264,12 +4363,6 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -6279,12 +4372,6 @@ "is-unc-path": "^1.0.0" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -6327,12 +4414,6 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -6346,10 +4427,13 @@ "dev": true }, "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } }, "isexe": { "version": "2.0.0", @@ -6369,84 +4453,10 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "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" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "istextorbinary": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz", - "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=", - "dev": true, - "requires": { - "binaryextensions": "~1.0.0", - "textextensions": "~1.0.0" - } - }, "jasmine-core": { - "version": "2.99.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", - "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.3.0.tgz", + "integrity": "sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA==", "dev": true }, "js-tokens": { @@ -6463,6 +4473,14 @@ "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } } }, "jsbn": { @@ -6471,10 +4489,42 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": 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" + } + }, "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, "json-parse-better-errors": { @@ -6490,32 +4540,17 @@ "dev": true }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "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 }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", @@ -6523,41 +4558,20 @@ "dev": true }, "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "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 }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, "jspm": { "version": "0.16.53", "resolved": "https://registry.npmjs.org/jspm/-/jspm-0.16.53.tgz", @@ -6586,12 +4600,60 @@ "uglify-js": "^2.6.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, "core-js": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", "dev": true }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, "glob": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", @@ -6605,17 +4667,55 @@ "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } } } }, @@ -6636,29 +4736,6 @@ "tar": "^2.2.1", "which": "^1.0.9", "yauzl": "^2.3.1" - }, - "dependencies": { - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "^1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } } }, "jspm-npm": { @@ -6693,18 +4770,6 @@ "path-is-absolute": "^1.0.0" } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, "tar": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tar/-/tar-1.0.3.tgz", @@ -6730,10 +4795,10 @@ "semver": "^4.3.3" }, "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", "dev": true } } @@ -6751,14 +4816,14 @@ } }, "karma": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz", + "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==", "dev": true, "requires": { "bluebird": "^3.3.0", "body-parser": "^1.16.1", - "chokidar": "^1.4.1", + "chokidar": "^2.0.3", "colors": "^1.1.0", "combine-lists": "^1.0.0", "connect": "^3.6.0", @@ -6770,77 +4835,38 @@ "graceful-fs": "^4.1.2", "http-proxy": "^1.13.0", "isbinaryfile": "^3.0.0", - "lodash": "^3.8.0", - "log4js": "^0.6.31", - "mime": "^1.3.4", + "lodash": "^4.17.4", + "log4js": "^3.0.0", + "mime": "^2.3.1", "minimatch": "^3.0.2", "optimist": "^0.6.1", "qjobs": "^1.1.4", "range-parser": "^1.2.0", "rimraf": "^2.6.0", "safe-buffer": "^5.0.1", - "socket.io": "1.7.3", - "source-map": "^0.5.3", - "tmp": "0.0.31", - "useragent": "^2.1.12" - }, - "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 - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "karma-babel-preprocessor": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/karma-babel-preprocessor/-/karma-babel-preprocessor-6.0.1.tgz", - "integrity": "sha1-euHT5klQ2+EfQht0BAqwj7WmbCE=", - "dev": true, - "requires": { - "babel-core": "^6.0.0" + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.2.1" } }, "karma-chrome-launcher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-1.0.1.tgz", - "integrity": "sha1-vlrnxCZPmgouIuPZhL6zJa2SyMs=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=", "dev": true, "requires": { "fs-access": "^1.0.0", "which": "^1.2.1" } }, - "karma-coverage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", - "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", + "karma-ie-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", + "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", "dev": true, "requires": { - "dateformat": "^1.0.6", - "istanbul": "^0.4.0", - "lodash": "^4.17.0", - "minimatch": "^3.0.0", - "source-map": "^0.5.1" - }, - "dependencies": { - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - } + "lodash": "^4.6.1" } }, "karma-jasmine": { @@ -6849,79 +4875,39 @@ "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", "dev": true }, - "karma-jspm": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/karma-jspm/-/karma-jspm-2.2.3.tgz", - "integrity": "sha1-uxXNDIwJAkgBE9OWICFXBBWdVQM=", - "dev": true, - "requires": { - "glob": "~7.0.5" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, + "karma-requirejs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-requirejs/-/karma-requirejs-1.1.0.tgz", + "integrity": "sha1-/driy4fX68FvsCIok1ZNf+5Xh5g=", + "dev": true + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - }, - "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 - } - } - }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "^2.0.0" } }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -6949,99 +4935,31 @@ } }, "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=", + "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": "^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" - } - } + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.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._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", "dev": true }, "lodash._reinterpolate": { @@ -7050,127 +4968,63 @@ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "dev": true }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "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._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" + "lodash._reinterpolate": "~3.0.0", + "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "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", - "lodash.escape": "^3.0.0" + "lodash._reinterpolate": "~3.0.0" } }, "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", + "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", "dev": true, "requires": { - "readable-stream": "~1.0.2", - "semver": "~4.3.3" + "circular-json": "^0.5.5", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "rfdc": "^1.1.2", + "streamroller": "0.7.0" }, "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=", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "ms": "^2.1.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } @@ -7182,12 +5036,12 @@ "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=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "loud-rejection": { @@ -7201,10 +5055,14 @@ } }, "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true + "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" + } }, "make-iterator": { "version": "1.0.1", @@ -7215,6 +5073,15 @@ "kind-of": "^6.0.2" } }, + "map-age-cleaner": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", + "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -7222,15 +5089,9 @@ "dev": true }, "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", "dev": true }, "map-visit": { @@ -7243,9 +5104,9 @@ } }, "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz", + "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==", "dev": true }, "math-random": { @@ -7256,43 +5117,110 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "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" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "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": { - "readable-stream": "^2.0.1" + "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" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "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" + } + } } }, - "merge2": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", - "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==", - "dev": true - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -7315,39 +5243,45 @@ } }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", "dev": true }, "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==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", "dev": true }, "mime-types": { - "version": "2.1.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==", + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "mime-db": "~1.37.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "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=", + "version": "0.0.10", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, "minimist-options": { @@ -7383,7 +5317,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -7392,21 +5326,12 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } } }, - "modify-babel-preset": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/modify-babel-preset/-/modify-babel-preset-1.2.0.tgz", - "integrity": "sha1-0bfIwkiW4Z28SEc0chPmtxRNG8c=", - "dev": true, - "requires": { - "require-relative": "^0.8.7" - } - }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -7419,93 +5344,30 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", "dev": true, "optional": true - }, - "nanomatch": { - "version": "1.2.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" - } - }, - "natives": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", - "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nconf": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz", - "integrity": "sha1-lXDvFe1vmuays8jV5xtm0xk81mE=", - "dev": true, - "requires": { - "async": "0.2.9", - "ini": "1.x.x", - "optimist": "0.6.0" - }, - "dependencies": { - "async": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz", - "integrity": "sha1-32MGD789Myhqdqr21Vophtn/hhk=", - "dev": true - }, - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "optimist": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", - "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "ncp": { @@ -7520,6 +5382,12 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true + }, "netrc": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/netrc/-/netrc-0.1.4.tgz", @@ -7532,13 +5400,46 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "noms": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", + "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=", "dev": true, "requires": { - "abbrev": "1" + "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": "http://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": { @@ -7562,6 +5463,15 @@ "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" + } + }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", @@ -7574,6 +5484,12 @@ "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", @@ -7623,12 +5539,6 @@ } } }, - "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", @@ -7638,18 +5548,6 @@ "isobject": "^3.0.0" } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", @@ -7660,6 +5558,23 @@ "array-slice": "^1.0.0", "for-own": "^1.0.0", "isobject": "^3.0.0" + }, + "dependencies": { + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } } }, "object.map": { @@ -7670,6 +5585,17 @@ "requires": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } } }, "object.omit": { @@ -7680,17 +5606,6 @@ "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": { @@ -7720,12 +5635,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -7736,10 +5645,10 @@ "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=", + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true } } @@ -7756,39 +5665,8 @@ "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 - } - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" } }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -7796,12 +5674,14 @@ "dev": true }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", + "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "lcid": "^1.0.0" + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { @@ -7810,28 +5690,46 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "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-is-promise": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.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=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, "parse-filepath": { @@ -7881,12 +5779,13 @@ } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "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.2.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parse-passwd": { @@ -7895,13 +5794,13 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "dev": true, "requires": { - "better-assert": "~1.0.0" + "@types/node": "*" } }, "parseqs": { @@ -7941,13 +5840,10 @@ "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" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -7955,16 +5851,16 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "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.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "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-root": { @@ -7983,31 +5879,12 @@ "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 - } - } - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "through": "~2.3" + "pify": "^3.0.0" } }, "pend": { @@ -8023,9 +5900,9 @@ "dev": true }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pinkie": { @@ -8043,44 +5920,10 @@ "pinkie": "^2.0.0" } }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - } - }, - "plugin-log": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/plugin-log/-/plugin-log-0.1.0.tgz", - "integrity": "sha1-hgSc9qsQgzOYqTHzaJy67nteEzM=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "dateformat": "^1.0.11" - }, - "dependencies": { - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - } - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "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": { @@ -8101,12 +5944,6 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -8120,9 +5957,9 @@ "dev": true }, "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", + "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", "dev": true }, "proper-lockfile": { @@ -8135,14 +5972,6 @@ "extend": "^3.0.0", "graceful-fs": "^4.1.2", "retry": "^0.10.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - } } }, "pseudomap": { @@ -8152,15 +5981,15 @@ "dev": true }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "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": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "q": { @@ -8188,9 +6017,9 @@ "dev": true }, "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "requires": { "is-number": "^4.0.0", @@ -8222,17 +6051,28 @@ "http-errors": "1.6.3", "iconv-lite": "0.4.23", "unpipe": "1.0.0" + }, + "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" + } + } } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dev": true, "requires": { - "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "parse-json": "^4.0.0", + "pify": "^3.0.0" } }, "read-pkg-up": { @@ -8243,11 +6083,91 @@ "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "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" + } + } } }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -8261,34 +6181,14 @@ } }, "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 - } - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "rechoir": { @@ -8301,38 +6201,21 @@ } }, "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", @@ -8352,32 +6235,6 @@ "safe-regex": "^1.1.0" } }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -8385,9 +6242,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -8405,23 +6262,6 @@ "is-finite": "^1.0.0" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "replacestream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", - "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.3", - "object-assign": "^4.0.1", - "readable-stream": "^2.0.2" - } - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -8448,182 +6288,308 @@ "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + } + }, + "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 + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "dev": true + }, + "requirejs-text": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/requirejs-text/-/requirejs-text-2.0.15.tgz", + "integrity": "sha1-ExOHM2E/xEV7fhJH6Mt1HfeqVCk=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" }, "dependencies": { - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + } + } + }, + "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 + }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "rfdc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", + "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.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" + } + }, + "rollup": { + "version": "0.66.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.66.6.tgz", + "integrity": "sha512-J7/SWanrcb83vfIHqa8+aVVGzy457GcjA6GVZEnD0x2u4OnOd0Q1pCrEoNe8yLwM6z6LZP02zBT2uW0yh5TqOw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "*" + } + }, + "rollup-plugin-typescript2": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.17.2.tgz", + "integrity": "sha512-QmrZElI+p4sytmv1S7uvtUbL4XADWWmM/dIuc3agGZTE+fO2X1KoRo8EbeR1x0ZO4I9KwPubGfmw/1rHeUR+Dg==", + "dev": true, + "requires": { + "fs-extra": "7.0.0", + "resolve": "1.8.1", + "rollup-pluginutils": "2.3.3", + "tslib": "1.9.3" + } + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + }, + "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 }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "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" + } + }, + "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" + } + }, + "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" + } + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "mime-db": "~1.37.0" + "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" } } } }, - "require-dir": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/require-dir/-/require-dir-0.3.2.tgz", - "integrity": "sha1-wdXHXp+//eny5rM+OD209ZS1pqk=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "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 - }, - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.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" - } - }, - "rollup": { - "version": "0.36.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.36.4.tgz", - "integrity": "sha1-oiRJTFOGwdc9OPe7hvafXrARo9I=", - "dev": true, - "requires": { - "source-map-support": "^0.4.0" - } - }, "rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", "dev": true }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "^1.3.0" - } - }, - "run-sequence": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", - "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", + "rxjs": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.2.tgz", + "integrity": "sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ==", "dev": true, "requires": { - "chalk": "*", - "gulp-util": "*" + "tslib": "^1.9.0" } }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -8632,7 +6598,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -8645,16 +6611,16 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "set-blocking": { @@ -8663,12 +6629,6 @@ "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", @@ -8698,10 +6658,25 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "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", @@ -8709,12 +6684,6 @@ "rechoir": "^0.6.2" } }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -8727,12 +6696,6 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -8766,6 +6729,12 @@ "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 } } }, @@ -8841,151 +6810,101 @@ } }, "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", - "dev": true, - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "dev": true, "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "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": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "dev": true, "requires": { "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", + "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "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": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" }, "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "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": "0.7.1" + "ms": "2.0.0" } }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true } } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "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": { @@ -9008,6 +6927,14 @@ "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": { @@ -9016,16 +6943,16 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "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==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", + "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -9033,9 +6960,9 @@ } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { @@ -9049,9 +6976,9 @@ } }, "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==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", "dev": true }, "split": { @@ -9088,9 +7015,9 @@ "dev": true }, "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", + "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -9104,6 +7031,282 @@ "tweetnacl": "~0.14.0" } }, + "standard-version": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-5.0.2.tgz", + "integrity": "sha512-vvdWZySinwWU9UZhtgYUGGTkYzqrwYMw3c7CFJ17E7vMbAEqVSui/bm+ZcSukAAU2WmphPTWIKFmn8ni+lk4NA==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "conventional-changelog": "^3.0.6", + "conventional-recommended-bump": "^4.0.4", + "detect-indent": "^5.0.0", + "detect-newline": "^2.1.0", + "dotgitignore": "^2.1.0", + "figures": "^2.0.0", + "fs-access": "^1.0.0", + "git-semver-tags": "^2.0.2", + "semver": "^5.2.0", + "stringify-package": "^1.0.0", + "yargs": "^12.0.2" + }, + "dependencies": { + "conventional-changelog": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.0.6.tgz", + "integrity": "sha512-1b96x3G67lDKakRvMm+VvYGwgRk+C8aapHKL5iZ/TJzzD/RuyGA2diHNEsR+uPHmQ7/A4Ts7j6N+VNqUoOfksg==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.3", + "conventional-changelog-atom": "^2.0.1", + "conventional-changelog-codemirror": "^2.0.1", + "conventional-changelog-core": "^3.1.6", + "conventional-changelog-ember": "^2.0.2", + "conventional-changelog-eslint": "^3.0.1", + "conventional-changelog-express": "^2.0.1", + "conventional-changelog-jquery": "^3.0.4", + "conventional-changelog-jshint": "^2.0.1", + "conventional-changelog-preset-loader": "^2.0.2" + } + }, + "conventional-changelog-angular": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz", + "integrity": "sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-changelog-atom": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz", + "integrity": "sha512-9BniJa4gLwL20Sm7HWSNXd0gd9c5qo49gCi8nylLFpqAHhkFTj7NQfROq3f1VpffRtzfTQp4VKU5nxbe2v+eZQ==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-codemirror": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz", + "integrity": "sha512-23kT5IZWa+oNoUaDUzVXMYn60MCdOygTA2I+UjnOMiYVhZgmVwNd6ri/yDlmQGXHqbKhNR5NoXdBzSOSGxsgIQ==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.6.tgz", + "integrity": "sha512-5teTAZOtJ4HLR6384h50nPAaKdDr+IaU0rnD2Gg2C3MS7hKsEPH8pZxrDNqam9eOSPQg9tET6uZY79zzgSz+ig==", + "dev": true, + "requires": { + "conventional-changelog-writer": "^4.0.3", + "conventional-commits-parser": "^3.0.1", + "dateformat": "^3.0.0", + "get-pkg-repo": "^1.0.0", + "git-raw-commits": "2.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^2.0.2", + "lodash": "^4.2.1", + "normalize-package-data": "^2.3.5", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^2.0.0" + } + }, + "conventional-changelog-ember": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz", + "integrity": "sha512-qtZbA3XefO/n6DDmkYywDYi6wDKNNc98MMl2F9PKSaheJ25Trpi3336W8fDlBhq0X+EJRuseceAdKLEMmuX2tg==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-eslint": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.1.tgz", + "integrity": "sha512-yH3+bYrtvgKxSFChUBQnKNh9/U9kN2JElYBm253VpYs5wXhPHVc9ENcuVGWijh24nnOkei7wEJmnmUzgZ4ok+A==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-express": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz", + "integrity": "sha512-G6uCuCaQhLxdb4eEfAIHpcfcJ2+ao3hJkbLrw/jSK/eROeNfnxCJasaWdDAfFkxsbpzvQT4W01iSynU3OoPLIw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jquery": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz", + "integrity": "sha512-IVJGI3MseYoY6eybknnTf9WzeQIKZv7aNTm2KQsiFVJH21bfP2q7XVjfoMibdCg95GmgeFlaygMdeoDDa+ZbEQ==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jshint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz", + "integrity": "sha512-kRFJsCOZzPFm2tzRHULWP4tauGMvccOlXYf3zGeuSW4U0mZhk5NsjnRZ7xFWrTFPlCLV+PNmHMuXp5atdoZmEg==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-changelog-preset-loader": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz", + "integrity": "sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.3.tgz", + "integrity": "sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "conventional-commits-filter": "^2.0.1", + "dateformat": "^3.0.0", + "handlebars": "^4.1.0", + "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" + } + }, + "conventional-commits-filter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz", + "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==", + "dev": true, + "requires": { + "is-subset": "^0.1.1", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz", + "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==", + "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" + } + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "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" + } + }, + "git-semver-tags": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.2.tgz", + "integrity": "sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w==", + "dev": true, + "requires": { + "meow": "^4.0.0", + "semver": "^5.5.0" + } + }, + "handlebars": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", + "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "read-pkg": { + "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" + } + } + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -9131,71 +7334,49 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, - "stream-consume": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", - "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", - "dev": true - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "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 }, - "streamqueue": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.0.6.tgz", - "integrity": "sha1-ZvX17JTpuK8knkrsLdH3Qb/pTeM=", + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", "dev": true, "requires": { - "readable-stream": "^1.0.26-2" + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" }, "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.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "ms": "^2.1.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -9207,65 +7388,60 @@ "safe-buffer": "~5.1.0" } }, + "stringify-package": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.0.tgz", + "integrity": "sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g==", + "dev": true + }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "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": "^2.0.0" + "ansi-regex": "^3.0.0" } }, "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "^1.0.0", - "is-utf8": "^0.2.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true }, - "strip-bom-stream": { + "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "first-chunk-stream": "^1.0.0", - "strip-bom": "^2.0.0" + "has-flag": "^2.0.0" }, "dependencies": { - "strip-bom": { + "has-flag": { "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" - } + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "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" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", "dev": true }, "systemjs": { @@ -9312,6 +7488,38 @@ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "rollup": { + "version": "0.36.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.36.4.tgz", + "integrity": "sha1-oiRJTFOGwdc9OPe7hvafXrARo9I=", + "dev": true, + "requires": { + "source-map-support": "^0.4.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 + }, "uglify-js": { "version": "2.7.5", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", @@ -9324,6 +7532,12 @@ "yargs": "~3.10.0" } }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", @@ -9338,53 +7552,6 @@ } } }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", - "slice-ansi": "0.0.4", - "string-width": "^2.0.0" - }, - "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 - }, - "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 - }, - "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" - } - } - } - }, "tar": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", @@ -9396,92 +7563,53 @@ "inherits": "2" } }, - "text-extensions": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz", - "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "textextensions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-1.0.2.tgz", - "integrity": "sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI=", - "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" - } - }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "tempfile": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", "dev": true, "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" + "os-tmpdir": "^1.0.0", + "uuid": "^2.0.1" + }, + "dependencies": { + "uuid": { + "version": "2.0.3", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } } }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "through": { + "version": "2.3.8", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "extend-shallow": "^2.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" - } - } + "os-tmpdir": "~1.0.2" } }, "to-array": { @@ -9546,12 +7674,21 @@ "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": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "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 } } @@ -9569,6 +7706,15 @@ "source-map-support": "~0.2.8" }, "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", @@ -9582,6 +7728,12 @@ "path-is-absolute": "^1.0.0" } }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, "source-map": { "version": "0.1.32", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", @@ -9602,10 +7754,16 @@ } } }, + "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=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", "dev": true }, "trim-off-newlines": { @@ -9620,6 +7778,41 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "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" + } + }, + "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", @@ -9661,93 +7854,65 @@ "dev": true }, "typedoc": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.4.5.tgz", - "integrity": "sha1-0SyO3Gu5e+cZnFba3mXgzBLRLos=", - "dev": true, - "requires": { - "fs-extra": "^0.30.0", - "handlebars": "4.0.5", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.12.0.tgz", + "integrity": "sha512-dsdlaYZ7Je8JC+jQ3j2Iroe4uyD0GhqzADNUVyBRgLuytQDP/g0dPkAw5PdM/4drnmmJjRzSWW97FkKo+ITqQg==", + "dev": true, + "requires": { + "@types/fs-extra": "^5.0.3", + "@types/handlebars": "^4.0.38", + "@types/highlight.js": "^9.12.3", + "@types/lodash": "^4.14.110", + "@types/marked": "^0.4.0", + "@types/minimatch": "3.0.3", + "@types/shelljs": "^0.8.0", + "fs-extra": "^7.0.0", + "handlebars": "^4.0.6", "highlight.js": "^9.0.0", - "lodash": "^4.13.1", - "marked": "^0.3.5", + "lodash": "^4.17.10", + "marked": "^0.4.0", "minimatch": "^3.0.0", - "progress": "^1.1.8", - "shelljs": "^0.7.0", - "typedoc-default-themes": "^0.4.0", - "typescript": "1.8.10" + "progress": "^2.0.0", + "shelljs": "^0.8.2", + "typedoc-default-themes": "^0.5.0", + "typescript": "3.0.x" }, "dependencies": { - "handlebars": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.5.tgz", - "integrity": "sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc=", - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - } - }, - "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" - } + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true }, "typescript": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.10.tgz", - "integrity": "sha1-tHXW4N/wv1DyluXKbvn7tccyDx4=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.3.tgz", + "integrity": "sha512-kk80vLW9iGtjMnIv11qyxLqZm20UklzuR2tL0QAnDIygIUIemcZMxlMWudl9OOt76H3ntVzcTiddQ1/pAAJMYg==", "dev": true } } }, "typedoc-default-themes": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.4.4.tgz", - "integrity": "sha1-q+mX3PF0YrYnQ4vGO2XFDTY8JS8=", + "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": "1.9.0-dev.20160627-1.0", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.9.0-dev.20160627-1.0.tgz", - "integrity": "sha1-qGhSHHdLf3atRoz81diZ7em3KFk=", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", + "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==", "dev": true }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "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 - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } + "commander": "~2.17.1", + "source-map": "~0.6.1" } }, "uglify-to-browserify": { @@ -9757,9 +7922,9 @@ "dev": true }, "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, "unc-path-regex": { @@ -9803,10 +7968,10 @@ } } }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { @@ -9855,14 +8020,11 @@ } } }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true }, "urix": { "version": "0.1.0", @@ -9871,39 +8033,26 @@ "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" - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", "dev": true, "requires": { - "lru-cache": "4.1.x", + "lru-cache": "2.2.x", "tmp": "0.0.x" }, "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" - } + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true } } }, @@ -9925,25 +8074,10 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "^1.1.1" - } - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "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==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -9961,109 +8095,38 @@ "extsprintf": "^1.2.0" } }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "^1.0.0", - "glob-stream": "^3.1.5", - "glob-watcher": "^0.0.6", - "graceful-fs": "^3.0.0", - "mkdirp": "^0.5.0", - "strip-bom": "^1.0.0", - "through2": "^0.6.1", - "vinyl": "^0.4.0" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "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 - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } - } - } + "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 }, - "vinyl-paths": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl-paths/-/vinyl-paths-2.1.0.tgz", - "integrity": "sha1-AIIEN8ujgmLO+IAthA+T4zku5Es=", + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "requires": { - "through2": "^2.0.0" + "iconv-lite": "0.4.24" } }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "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": { - "source-map": "^0.5.1" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, "when": { "version": "3.7.8", "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", @@ -10071,18 +8134,18 @@ "dev": true }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "window-size": { @@ -10092,19 +8155,56 @@ "dev": true }, "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "wrappy": { @@ -10113,35 +8213,33 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "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 }, "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", "dev": true }, "xtend": { @@ -10151,9 +8249,9 @@ "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { @@ -10163,62 +8261,32 @@ "dev": true }, "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "os-locale": "^3.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - }, - "dependencies": { - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "dev": true - } + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" } }, "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } + "camelcase": "^4.1.0" } }, "yauzl": { diff --git a/package.json b/package.json index 910b81d..e2fc082 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,30 @@ "typings": "dist/aurelia-dependency-injection.d.ts", "repository": { "type": "git", - "url": "http://github.com/aurelia/dependency-injection" + "url": "https://github.com/aurelia/dependency-injection" + }, + "files": [ + "dist", + "doc", + "src", + "typings.json", + "README.md", + "LICENSE" + ], + "scripts": { + "lint": "cross-env tslint --project tsconfig.json", + "pretest": "cross-env npm run lint", + "test": "cross-env rimraf dist && tsc && karma start --single-run", + "develop": "concurrently \"./node_modules/.bin/tsc --watch\" \"./node_modules/.bin/karma start\"", + "prebuild": "cross-env rimraf dist", + "build": "rollup -c --environment NODE_ENV:production", + "postbuild": "npm run build:dts", + "build:dts": "dts-bundle-generator -o dist/aurelia-dependency-injection.d.ts src/aurelia-dependency-injection.ts", + "predoc": "cross-env rimraf doc/api.json && rimraf dist/doc-temp && tsc --project tsconfig.build.json --outFile dist/doc-temp/aurelia-dependency-injection.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-dependency-injection-docs dist/doc-temp/", + "postdoc": "cross-env node doc/shape-doc && rimraf dist/doc-temp", + "precut-release": "cross-env npm run test", + "cut-release": "standard-version -t \"\" -i doc/CHANGELOG.md && npm run build && npm run doc" }, "jspm": { "registry": "npm", @@ -49,51 +72,35 @@ "aurelia-pal": "^1.0.0" }, "devDependencies": { - "aurelia-tools": "^0.2.4", - "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-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-typedoc": "^2.0.0", - "gulp-typedoc-extractor": "^0.0.8", - "gulp-typescript": "^2.13.6", - "gulp-util": "^3.0.7", - "jasmine-core": "^2.4.1", + "@types/jsdom": "^12.2.0", + "@types/node": "^8.5.1", + "aurelia-bootstrapper": "^2.3.0", + "aurelia-pal-browser": "^1.8.0", + "aurelia-pal-nodejs": "^1.1.1", + "aurelia-polyfills": "^1.3.0", + "aurelia-testing": "^1.0.0", + "concurrently": "^4.0.1", + "conventional-changelog-cli": "^2.0.5", + "copyfiles": "^2.1.0", + "cross-env": "^5.2.0", + "dts-bundle-generator": "^1.6.1", + "jasmine-core": "^3.2.1", "jspm": "^0.16.53", - "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-jspm": "^2.2.0", - "merge2": "^1.0.2", - "object.assign": "^4.0.4", - "require-dir": "^0.3.0", - "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" + "karma": "^3.0.0", + "karma-chrome-launcher": "^2.2.0", + "karma-ie-launcher": "^1.0.0", + "karma-jasmine": "^1.1.2", + "karma-requirejs": "^1.1.0", + "requirejs": "^2.3.6", + "requirejs-text": "^2.0.15", + "rimraf": "^2.6.2", + "rollup": "^0.66.2", + "rollup-plugin-typescript2": "^0.17.0", + "standard-version": "^5.0.2", + "tslib": "^1.9.3", + "tslint": "^5.11.0", + "typedoc": "^0.12.0", + "typescript": "^3.4.1" }, "aurelia": { "documentation": { diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..304ebb3 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,112 @@ +import typescript from "rollup-plugin-typescript2"; +// import cfg from './tsconfig.json'; + +const isProduction = process.env.NODE_ENV === "production"; +const entryName = "aurelia-dependency-injection"; +// const defaultCfg = { ...cfg, include: ['src'], exclude: undefined }; + +// defaultCfg.compilerOptions.module = 'es2015'; +// defaultCfg.compilerOptions.noEmitHelpers = true; +// defaultCfg.compilerOptions.importHelpers = true; + +export default [{ + input: `src/${entryName}.ts`, + output: [ + { + file: `dist/es2015/${entryName}.js`, + format: "es", + }, + { + file: `dist/umd-es2015/${entryName}.js`, + format: "umd", + globals: { + "aurelia-binding": "au", + "aurelia-dependency-injection": "au", + "aurelia-logging": "au.LogManager", + "aurelia-pal": "au", + "aurelia-task-queue": "au", + "aurelia-templating": "au", + }, + name: "au.validation", + }, + ], + plugins: [ + typescript({ + cacheRoot: ".rollupcache", + // tsconfigDefaults: defaultCfg, + // tsconfig: undefined, + tsconfigOverride: { + compilerOptions: { + module: "es2015", + target: "es2015", + }, + exclude: "**/internal.d.ts", + include: ["src"], + }, + useTsconfigDeclarationDir: true, + }), + ], +}].concat(!isProduction + ? [] + : [ + { + input: `src/${entryName}.ts`, + output: { + // @ts-ignore + file: `dist/es2017/${entryName}.js`, + format: "es", + }, + plugins: [ + typescript({ + // tsconfigDefaults: defaultCfg, + // tsconfig: undefined, + cacheRoot: ".rollupcache", + tsconfigOverride: { + compilerOptions: { + module: "es2015", + target: "es2017", + }, + exclude: "**/internal.d.ts", + include: ["src"], + }, + }), + ], + }, + { + input: `src/${entryName}.ts`, + output: [ + { file: `dist/commonjs/${entryName}.js`, format: "cjs" }, + { file: `dist/amd/${entryName}.js`, format: "amd", amd: { id: entryName } }, + { file: `dist/native-modules/${entryName}.js`, format: "es" }, + { file: `dist/umd/${entryName}.js`, + format: "umd", + globals: { + "aurelia-binding": "au", + "aurelia-dependency-injection": "au", + "aurelia-logging": "au.LogManager", + "aurelia-pal": "au", + "aurelia-task-queue": "au", + "aurelia-templating": "au", + }, + name: "au.validation", + }, + { file: `dist/system/${entryName}.js`, format: "system" }, + ], + plugins: [ + typescript({ + // tsconfigDefaults: defaultCfg, + // tsconfig: undefined, + cacheRoot: ".rollupcache", + tsconfigOverride: { + compilerOptions: { + module: "es2015", + target: "es5", + }, + exclude: "**/internal.d.ts", + include: ["src"], + }, + }), + ], + }, + ], +); diff --git a/src/aurelia-dependency-injection.ts b/src/aurelia-dependency-injection.ts new file mode 100644 index 0000000..a14b718 --- /dev/null +++ b/src/aurelia-dependency-injection.ts @@ -0,0 +1,6 @@ +// Exports +export * from './container'; +export * from './injection'; +export * from './invokers'; +export * from './registrations'; +export * from './resolvers'; diff --git a/src/container.js b/src/container.js deleted file mode 100644 index 469e8d9..0000000 --- a/src/container.js +++ /dev/null @@ -1,484 +0,0 @@ -import {metadata} from 'aurelia-metadata'; -import {AggregateError} from 'aurelia-pal'; -import {resolver, StrategyResolver, Resolver} from './resolvers'; -import {Invoker} from './invokers'; - -function validateKey(key: any) { - if (key === null || key === undefined) { - throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } -} -export const _emptyParameters = Object.freeze([]); - -metadata.registration = 'aurelia:registration'; -metadata.invoker = 'aurelia:invoker'; - -let resolverDecorates = resolver.decorates; - -/** -* Stores the information needed to invoke a function. -*/ -export class InvocationHandler { - /** - * The function to be invoked by this handler. - */ - fn: Function; - - /** - * The invoker implementation that will be used to actually invoke the function. - */ - invoker: Invoker; - - /** - * The statically known dependencies of this function invocation. - */ - dependencies: any[]; - - /** - * Instantiates an InvocationDescription. - * @param fn The Function described by this description object. - * @param invoker The strategy for invoking the function. - * @param dependencies The static dependencies of the function call. - */ - constructor(fn: Function, invoker: Invoker, dependencies: any[]) { - this.fn = fn; - this.invoker = invoker; - this.dependencies = dependencies; - } - - /** - * Invokes the function. - * @param container The calling container. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invoke(container: Container, dynamicDependencies?: any[]): any { - return dynamicDependencies !== undefined - ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) - : this.invoker.invoke(container, this.fn, this.dependencies); - } -} - -/** -* Used to configure a Container instance. -*/ -export interface ContainerConfiguration { - /** - * An optional callback which will be called when any function needs an InvocationHandler created (called once per Function). - */ - onHandlerCreated?: (handler: InvocationHandler) => InvocationHandler; - - handlers?: Map; -} - -function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) { - let i = staticDependencies.length; - let args = new Array(i); - let lookup; - - while (i--) { - lookup = staticDependencies[i]; - - if (lookup === null || lookup === undefined) { - throw new Error('Constructor Parameter with index ' + i + ' cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?'); - } else { - args[i] = container.get(lookup); - } - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return Reflect.construct(fn, args); -} - -let classInvokers = { - [0]: { - invoke(container, Type) { - return new Type(); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [1]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [2]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [3]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [4]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - [5]: { - invoke(container, Type, deps) { - return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4])); - }, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - }, - fallback: { - invoke: invokeWithDynamicDependencies, - invokeWithDynamicDependencies: invokeWithDynamicDependencies - } -}; - -function getDependencies(f) { - if (!f.hasOwnProperty('inject')) { - return []; - } - - if (typeof f.inject === 'function') { - return f.inject(); - } - - return f.inject; -} - -/** -* A lightweight, extensible dependency injection container. -*/ -export class Container { - /** - * The global root Container instance. Available if makeGlobal() has been called. Aurelia Framework calls makeGlobal(). - */ - static instance: Container; - - /** - * The parent container in the DI hierarchy. - */ - parent: Container; - - /** - * The root container in the DI hierarchy. - */ - root: Container; - - /** @internal */ - _configuration: ContainerConfiguration; - - /** @internal */ - _onHandlerCreated: (handler: InvocationHandler) => InvocationHandler; - - /** @internal */ - _handlers: Map; - - /** @internal */ - _resolvers: Map; - - /** - * Creates an instance of Container. - * @param configuration Provides some configuration for the new Container instance. - */ - constructor(configuration?: ContainerConfiguration) { - if (configuration === undefined) { - configuration = {}; - } - - this._configuration = configuration; - this._onHandlerCreated = configuration.onHandlerCreated; - this._handlers = configuration.handlers || (configuration.handlers = new Map()); - this._resolvers = new Map(); - this.root = this; - this.parent = null; - } - - /** - * Makes this container instance globally reachable through Container.instance. - */ - makeGlobal(): Container { - Container.instance = this; - return this; - } - - /** - * Sets an invocation handler creation callback that will be called when new InvocationsHandlers are created (called once per Function). - * @param onHandlerCreated The callback to be called when an InvocationsHandler is created. - */ - setHandlerCreatedCallback(onHandlerCreated: (handler: InvocationHandler) => InvocationHandler) { - this._onHandlerCreated = onHandlerCreated; - this._configuration.onHandlerCreated = onHandlerCreated; - } - - /** - * Registers an existing object instance with the container. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param instance The instance that will be resolved when the key is matched. This defaults to the key value when instance is not supplied. - * @return The resolver that was registered. - */ - registerInstance(key: any, instance?: any): Resolver { - return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance)); - } - - /** - * Registers a type (constructor function) such that the container always returns the same instance for each request. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - * @return The resolver that was registered. - */ - registerSingleton(key: any, fn?: Function): Resolver { - return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn)); - } - - /** - * Registers a type (constructor function) such that the container returns a new instance for each request. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - * @return The resolver that was registered. - */ - registerTransient(key: any, fn?: Function): Resolver { - return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn)); - } - - /** - * Registers a custom resolution function such that the container calls this function for each request to obtain the instance. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param handler The resolution function to use when the dependency is needed. - * @return The resolver that was registered. - */ - registerHandler(key: any, handler: (container?: Container, key?: any, resolver?: Resolver) => any): Resolver { - return this.registerResolver(key, new StrategyResolver(3, handler)); - } - - /** - * Registers an additional key that serves as an alias to the original DI key. - * @param originalKey The key that originally identified the dependency; usually a constructor function. - * @param aliasKey An alternate key which can also be used to resolve the same dependency as the original. - * @return The resolver that was registered. - */ - registerAlias(originalKey: any, aliasKey: any): Resolver { - return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey)); - } - - /** - * Registers a custom resolution function such that the container calls this function for each request to obtain the instance. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param resolver The resolver to use when the dependency is needed. - * @return The resolver that was registered. - */ - registerResolver(key: any, resolver: Resolver): Resolver { - validateKey(key); - - let allResolvers = this._resolvers; - let result = allResolvers.get(key); - - if (result === undefined) { - allResolvers.set(key, resolver); - } else if (result.strategy === 4) { - result.state.push(resolver); - } else { - allResolvers.set(key, new StrategyResolver(4, [result, resolver])); - } - - return resolver; - } - - /** - * Registers a type (constructor function) by inspecting its registration annotations. If none are found, then the default singleton registration is used. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param fn The constructor function to use when the dependency needs to be instantiated. This defaults to the key value when fn is not supplied. - */ - autoRegister(key: any, fn?: Function): Resolver { - fn = fn === undefined ? key : fn; - - if (typeof fn === 'function') { - let registration = metadata.get(metadata.registration, fn); - - if (registration === undefined) { - return this.registerResolver(key, new StrategyResolver(1, fn)); - } - - return registration.registerResolver(this, key, fn); - } - - return this.registerResolver(key, new StrategyResolver(0, fn)); - } - - /** - * Registers an array of types (constructor functions) by inspecting their registration annotations. If none are found, then the default singleton registration is used. - * @param fns The constructor function to use when the dependency needs to be instantiated. - */ - autoRegisterAll(fns: any[]): void { - let i = fns.length; - while (i--) { - this.autoRegister(fns[i]); - } - } - - /** - * Unregisters based on key. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - */ - unregister(key: any) : void { - this._resolvers.delete(key); - } - - /** - * Inspects the container to determine if a particular key has been registred. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @param checkParent Indicates whether or not to check the parent container hierarchy. - * @return Returns true if the key has been registred; false otherwise. - */ - hasResolver(key: any, checkParent: boolean = false): boolean { - validateKey(key); - - return this._resolvers.has(key) || (checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent)); - } - - /** - * Gets the resolver for the particular key, if it has been registered. - * @param key The key that identifies the dependency at resolution time; usually a constructor function. - * @return Returns the resolver, if registred, otherwise undefined. - */ - getResolver(key: any) { - return this._resolvers.get(key); - } - - /** - * Resolves a single instance based on the provided key. - * @param key The key that identifies the object to resolve. - * @return Returns the resolved instance. - */ - get(key: any): any { - validateKey(key); - - if (key === Container) { - return this; - } - - if (resolverDecorates(key)) { - return key.get(this, key); - } - - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - let registration = metadata.get(metadata.registration, key); - - if (registration === undefined) { - return this.parent._get(key); - } - - return registration.registerResolver(this, key, key).get(this, key); - } - - return resolver.get(this, key); - } - - _get(key) { - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return this.autoRegister(key).get(this, key); - } - - return this.parent._get(key); - } - - return resolver.get(this, key); - } - - /** - * Resolves all instance registered under the provided key. - * @param key The key that identifies the objects to resolve. - * @return Returns an array of the resolved instances. - */ - getAll(key: any): any[] { - validateKey(key); - - let resolver = this._resolvers.get(key); - - if (resolver === undefined) { - if (this.parent === null) { - return _emptyParameters; - } - - return this.parent.getAll(key); - } - - if (resolver.strategy === 4) { - let state = resolver.state; - let i = state.length; - let results = new Array(i); - - while (i--) { - results[i] = state[i].get(this, key); - } - - return results; - } - - return [resolver.get(this, key)]; - } - - /** - * Creates a new dependency injection container whose parent is the current container. - * @return Returns a new container instance parented to this. - */ - createChild(): Container { - let child = new Container(this._configuration); - child.root = this.root; - child.parent = this; - return child; - } - - /** - * Invokes a function, recursively resolving its dependencies. - * @param fn The function to invoke with the auto-resolved dependencies. - * @param dynamicDependencies Additional function dependencies to use during invocation. - * @return Returns the instance resulting from calling the function. - */ - invoke(fn: Function & { name?: string }, dynamicDependencies?: any[]) { - try { - let handler = this._handlers.get(fn); - - if (handler === undefined) { - handler = this._createInvocationHandler(fn); - this._handlers.set(fn, handler); - } - - return handler.invoke(this, dynamicDependencies); - } catch (e) { - throw new AggregateError(`Error invoking ${fn.name}. Check the inner error for details.`, e, true); - } - } - - _createInvocationHandler(fn: Function & { inject?: any }): InvocationHandler { - let dependencies; - - if (fn.inject === undefined) { - dependencies = metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters; - } else { - dependencies = []; - let ctor = fn; - while (typeof ctor === 'function') { - dependencies.push(...getDependencies(ctor)); - ctor = Object.getPrototypeOf(ctor); - } - } - - let invoker = metadata.getOwn(metadata.invoker, fn) - || classInvokers[dependencies.length] || classInvokers.fallback; - - let handler = new InvocationHandler(fn, invoker, dependencies); - return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler; - } -} diff --git a/src/container.ts b/src/container.ts new file mode 100644 index 0000000..9cbae7d --- /dev/null +++ b/src/container.ts @@ -0,0 +1,585 @@ +// tslint:disable-next-line:no-reference +/// +import { metadata } from 'aurelia-metadata'; +import { AggregateError } from 'aurelia-pal'; +import { resolver, StrategyResolver, Resolver, Strategy } from './resolvers'; +import { Invoker } from './invokers'; +import { + DependencyCtorOrFunctor, + DependencyCtor, + PrimitiveOrDependencyCtor, + PrimitiveOrBase, + PrimitiveOrDependencyCtorOrFunctor, + ImplOrAny +} from './types'; + +function validateKey(key: any) { + if (key === null || key === undefined) { + throw new Error( + 'key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?' + ); + } +} +export const _emptyParameters = Object.freeze([]) as []; + +metadata.registration = 'aurelia:registration'; +metadata.invoker = 'aurelia:invoker'; + +const resolverDecorates = resolver.decorates; + +/** + * Stores the information needed to invoke a function. + */ +export class InvocationHandler< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase + > { + /** + * The function to be invoked by this handler. + */ + public fn: DependencyCtorOrFunctor; + + /** + * The invoker implementation that will be used to actually invoke the function. + */ + public invoker: Invoker; + + /** + * The statically known dependencies of this function invocation. + */ + public dependencies: TArgs; + + /** + * Instantiates an InvocationDescription. + * @param fn The Function described by this description object. + * @param invoker The strategy for invoking the function. + * @param dependencies The static dependencies of the function call. + */ + constructor( + fn: DependencyCtorOrFunctor, + invoker: Invoker, + dependencies: TArgs + ) { + this.fn = fn; + this.invoker = invoker; + this.dependencies = dependencies; + } + + /** + * Invokes the function. + * @param container The calling container. + * @param dynamicDependencies Additional dependencies to use during invocation. + * @return The result of the function invocation. + */ + public invoke(container: Container, dynamicDependencies?: any[]): any { + return dynamicDependencies !== undefined + ? this.invoker.invokeWithDynamicDependencies( + container, + this.fn, + this.dependencies, + dynamicDependencies + ) + : this.invoker.invoke(container, this.fn, this.dependencies); + } +} + +/** + * Used to configure a Container instance. + */ +export interface ContainerConfiguration { + /** + * An optional callback which will be called when any function needs an + * InvocationHandler created (called once per Function). + */ + onHandlerCreated?: ( + handler: InvocationHandler + ) => InvocationHandler; + + handlers?: Map; +} + +function invokeWithDynamicDependencies< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase +>( + container: Container, + fn: DependencyCtorOrFunctor, + staticDependencies: TArgs[number][], + dynamicDependencies: TArgs[number][] +) { + let i = staticDependencies.length; + let args = new Array(i); + let lookup; + + while (i--) { + lookup = staticDependencies[i]; + + if (lookup === null || lookup === undefined) { + throw new Error( + 'Constructor Parameter with index ' + + i + + ' cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?' + ); + } else { + args[i] = container.get(lookup); + } + } + + if (dynamicDependencies !== undefined) { + args = args.concat(dynamicDependencies); + } + + return Reflect.construct(fn, args); +} + +const classInvoker: Invoker = { + invoke(container, Type: DependencyCtor, deps) { + const instances = deps.map((dep) => container.get(dep)); + const inst = Object.create(Type.prototype); + Type.apply(inst, instances); + return inst; + }, + invokeWithDynamicDependencies +}; + +function getDependencies(f) { + if (!f.hasOwnProperty('inject')) { + return []; + } + + if (typeof f.inject === 'function') { + return f.inject(); + } + + return f.inject; +} + +/** + * A lightweight, extensible dependency injection container. + */ +export class Container { + /** + * The global root Container instance. Available if makeGlobal() has been + * called. Aurelia Framework calls makeGlobal(). + */ + public static instance: Container; + + /** + * The parent container in the DI hierarchy. + */ + public parent: Container; + + /** + * The root container in the DI hierarchy. + */ + public root: Container; + + /** @internal */ + public _configuration: ContainerConfiguration; + + /** @internal */ + public _onHandlerCreated: ( + handler: InvocationHandler + ) => InvocationHandler; + + /** @internal */ + public _handlers: Map; + + /** @internal */ + public _resolvers: Map; + + /** + * Creates an instance of Container. + * @param configuration Provides some configuration for the new Container instance. + */ + constructor(configuration?: ContainerConfiguration) { + if (configuration === undefined) { + configuration = {}; + } + + this._configuration = configuration; + this._onHandlerCreated = configuration.onHandlerCreated; + this._handlers = + configuration.handlers || (configuration.handlers = new Map()); + this._resolvers = new Map(); + this.root = this; + this.parent = null; + } + + /** + * Makes this container instance globally reachable through Container.instance. + */ + public makeGlobal(): Container { + Container.instance = this; + return this; + } + + /** + * Sets an invocation handler creation callback that will be called when new + * InvocationsHandlers are created (called once per Function). + * @param onHandlerCreated The callback to be called when an + * InvocationsHandler is created. + */ + public setHandlerCreatedCallback, TImpl extends PrimitiveOrBase>( + onHandlerCreated: ( + handler: InvocationHandler + ) => InvocationHandler + ) { + this._onHandlerCreated = onHandlerCreated; + this._configuration.onHandlerCreated = onHandlerCreated; + } + + /** + * Registers an existing object instance with the container. + * @param key The key that identifies the dependency at resolution time; + * usually a constructor function. + * @param instance The instance that will be resolved when the key is matched. + * This defaults to the key value when instance is not supplied. + * @return The resolver that was registered. + */ + public registerInstance, TArgs extends Array = Array>( + key: PrimitiveOrDependencyCtor, + instance?: TImpl): Resolver { + return this.registerResolver( + key, + new StrategyResolver(0, instance === undefined ? key : instance) + ); + } + + /** + * Registers a type (constructor function) such that the container always + * returns the same instance for each request. + * @param key The key that identifies the dependency at resolution time; + * usually a constructor function. + * @param fn The constructor function to use when the dependency needs to be + * instantiated. This defaults to the key value when fn is not supplied. + * @return The resolver that was registered. + */ + public registerSingleton, TImpl extends PrimitiveOrBase>( + key: any, fn?: DependencyCtorOrFunctor): Resolver { + return this.registerResolver( + key, + new StrategyResolver(1, fn === undefined ? key : fn) + ); + } + + /** + * Registers a type (constructor function) such that the container returns a + * new instance for each request. + * @param key The key that identifies the dependency at resolution time; + * usually a constructor function. + * @param fn The constructor function to use when the dependency needs to be + * instantiated. This defaults to the key value when fn is not supplied. + * @return The resolver that was registered. + */ + public registerTransient, TImpl extends PrimitiveOrBase>( + key: string, fn: DependencyCtorOrFunctor): Resolver; + public registerTransient, TImpl extends PrimitiveOrBase>( + key: DependencyCtor, fn?: DependencyCtorOrFunctor): Resolver; + public registerTransient, TImpl extends PrimitiveOrBase>( + key: PrimitiveOrDependencyCtor, fn?: DependencyCtorOrFunctor): Resolver { + return this.registerResolver( + key, + new StrategyResolver(2, fn === undefined ? key as DependencyCtor : fn) + ); + } + + /** + * Registers a custom resolution function such that the container calls this + * function for each request to obtain the instance. + * @param key The key that identifies the dependency at resolution time; + * usually a constructor function. + * @param handler The resolution function to use when the dependency is + * needed. + * @return The resolver that was registered. + */ + public registerHandler, TArgs extends Array>( + key: PrimitiveOrDependencyCtor, + handler: (container?: Container, key?: PrimitiveOrDependencyCtor, resolver?: Resolver) => any + ): Resolver { + return this.registerResolver( + key, + new StrategyResolver(Strategy.function, handler) + ); + } + + /** + * Registers an additional key that serves as an alias to the original DI key. + * @param originalKey The key that originally identified the dependency; usually a constructor function. + * @param aliasKey An alternate key which can also be used to resolve the same dependency as the original. + * @return The resolver that was registered. + */ + public registerAlias, TArgs extends Array>( + originalKey: PrimitiveOrDependencyCtor, + aliasKey: PrimitiveOrDependencyCtor): Resolver { + return this.registerResolver( + aliasKey, + new StrategyResolver(5, originalKey) + ); + } + + /** + * Registers a custom resolution function such that the container calls this + * function for each request to obtain the instance. + * @param key The key that identifies the dependency at resolution time; + * usually a constructor function. + * @param resolver The resolver to use when the dependency is needed. + * @return The resolver that was registered. + */ + public registerResolver, TArgs extends Array>( + key: PrimitiveOrDependencyCtor, + resolver: Resolver + ): Resolver { + validateKey(key); + + const allResolvers = this._resolvers; + const result = allResolvers.get(key); + + if (result === undefined) { + allResolvers.set(key, resolver); + } else if (result.strategy === 4) { + result.state.push(resolver); + } else { + allResolvers.set(key, new StrategyResolver(4, [result, resolver])); + } + + return resolver; + } + + /** + * Registers a type (constructor function) by inspecting its registration + * annotations. If none are found, then the default singleton registration is + * used. + * @param key The key that identifies the dependency at resolution time; + * usually a constructor function. + * @param fn The constructor function to use when the dependency needs to be + * instantiated. This defaults to the key value when fn is not supplied. + */ + public autoRegister, TImpl extends PrimitiveOrBase>( + key: string, fn: DependencyCtorOrFunctor): Resolver; + public autoRegister, TImpl extends PrimitiveOrBase>( + key: DependencyCtor, fn?: DependencyCtorOrFunctor): Resolver; + public autoRegister, TImpl extends PrimitiveOrBase>( + key: PrimitiveOrDependencyCtor, fn?: DependencyCtorOrFunctor): Resolver { + fn = fn === undefined ? key as DependencyCtor : fn; + + if (typeof fn === 'function') { + const registration = metadata.get(metadata.registration, fn); + + if (registration === undefined) { + return this.registerResolver(key, new StrategyResolver(1, fn)); + } + + return registration.registerResolver(this, key, fn); + } + + return this.registerResolver(key, new StrategyResolver(0, fn)); + } + + /** + * Registers an array of types (constructor functions) by inspecting their + * registration annotations. If none are found, then the default singleton + * registration is used. + * @param fns The constructor function to use when the dependency needs to be instantiated. + */ + public autoRegisterAll(fns: DependencyCtor[]): void { + let i = fns.length; + while (i--) { + this.autoRegister(fns[i]); + } + } + + /** + * Unregisters based on key. + * @param key The key that identifies the dependency at resolution time; usually a constructor function. + */ + public unregister(key: any): void { + this._resolvers.delete(key); + } + + /** + * Inspects the container to determine if a particular key has been registred. + * @param key The key that identifies the dependency at resolution time; usually a constructor function. + * @param checkParent Indicates whether or not to check the parent container hierarchy. + * @return Returns true if the key has been registred; false otherwise. + */ + public hasResolver, TArgs extends Array>( + key: PrimitiveOrDependencyCtor, checkParent: boolean = false): boolean { + validateKey(key); + + return ( + this._resolvers.has(key) || + (checkParent && + this.parent !== null && + this.parent.hasResolver(key, checkParent)) + ); + } + + /** + * Gets the resolver for the particular key, if it has been registered. + * @param key The key that identifies the dependency at resolution time; usually a constructor function. + * @return Returns the resolver, if registred, otherwise undefined. + */ + public getResolver, TArgs extends Array>( + key: PrimitiveOrDependencyCtorOrFunctor) { + return this._resolvers.get(key); + } + + /** + * Resolves a single instance based on the provided key. + * @param key The key that identifies the object to resolve. + * @return Returns the resolved instance. + */ + public get, TArgs extends Array = Array>( + key: PrimitiveOrDependencyCtor): ImplOrAny; + public get, TArgs extends Array = Array>( + key: typeof Container): Container; + public get, TArgs extends Array = Array>( + key: PrimitiveOrDependencyCtor | typeof Container): ImplOrAny | Container { + validateKey(key); + + if (key === Container) { + return this; + } + + if (resolverDecorates(key)) { + return key.get(this, key); + } + + const resolver = this._resolvers.get(key); + + if (resolver === undefined) { + if (this.parent === null) { + return this.autoRegister(key as DependencyCtor).get(this, key); + } + + const registration = metadata.get(metadata.registration, key); + + if (registration === undefined) { + return this.parent._get(key); + } + + return registration.registerResolver( + this, key, key as DependencyCtorOrFunctor).get(this, key); + } + + return resolver.get(this, key); + } + + public _get(key) { + const resolver = this._resolvers.get(key); + + if (resolver === undefined) { + if (this.parent === null) { + return this.autoRegister(key).get(this, key); + } + + return this.parent._get(key); + } + + return resolver.get(this, key); + } + + /** + * Resolves all instance registered under the provided key. + * @param key The key that identifies the objects to resolve. + * @return Returns an array of the resolved instances. + */ + public getAll, TImpl extends PrimitiveOrBase>( + key: PrimitiveOrDependencyCtor): ImplOrAny[] { + validateKey(key); + + const resolver = this._resolvers.get(key); + + if (resolver === undefined) { + if (this.parent === null) { + return _emptyParameters; + } + + return this.parent.getAll(key); + } + + if (resolver.strategy === 4) { + const state = resolver.state; + let i = state.length; + const results = new Array(i); + + while (i--) { + results[i] = state[i].get(this, key); + } + + return results; + } + + return [resolver.get(this, key)]; + } + + /** + * Creates a new dependency injection container whose parent is the current container. + * @return Returns a new container instance parented to this. + */ + public createChild(): Container { + const child = new Container(this._configuration); + child.root = this.root; + child.parent = this; + return child; + } + + /** + * Invokes a function, recursively resolving its dependencies. + * @param fn The function to invoke with the auto-resolved dependencies. + * @param dynamicDependencies Additional function dependencies to use during invocation. + * @return Returns the instance resulting from calling the function. + */ + public invoke, TImpl extends PrimitiveOrBase>( + fn: DependencyCtorOrFunctor, + dynamicDependencies?: TArgs[number][] + ): ImplOrAny { + try { + let handler = this._handlers.get(fn); + + if (handler === undefined) { + handler = this._createInvocationHandler(fn); + this._handlers.set(fn, handler); + } + + return handler.invoke(this, dynamicDependencies); + } catch (e) { + // @ts-ignore + throw new AggregateError( + `Error invoking ${fn.name}. Check the inner error for details.`, + e, + true + ); + } + } + + public _createInvocationHandler, TImpl extends PrimitiveOrBase>( + fn: DependencyCtorOrFunctor & { + inject?: any; + } + ): InvocationHandler { + let dependencies; + + if (fn.inject === undefined) { + dependencies = + metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters; + } else { + dependencies = []; + let ctor = fn; + while (typeof ctor === 'function') { + dependencies.push(...getDependencies(ctor)); + ctor = Object.getPrototypeOf(ctor); + } + } + + const invoker = metadata.getOwn(metadata.invoker, fn) || classInvoker; + + const handler = new InvocationHandler(fn, invoker, dependencies); + return this._onHandlerCreated !== undefined + ? this._onHandlerCreated(handler) + : handler; + } +} diff --git a/src/injection.js b/src/injection.js deleted file mode 100644 index b7a5113..0000000 --- a/src/injection.js +++ /dev/null @@ -1,44 +0,0 @@ -import {metadata} from 'aurelia-metadata'; -import {_emptyParameters} from './container'; - -/** -* Decorator: Directs the TypeScript transpiler to write-out type metadata for the decorated class. -*/ -export function autoinject(potentialTarget?: any): any { - let deco = function(target) { - if (!target.hasOwnProperty('inject')) { - target.inject = (metadata.getOwn(metadata.paramTypes, target) || _emptyParameters).slice(); - // TypeScript 3.0 metadata for "...rest" gives type "Object" - // if last parameter is "Object", assume it's a ...rest and remove that metadata. - if (target.inject.length > 0 && - target.inject[target.inject.length - 1] === Object) { - target.inject.pop(); - } - } - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -/** -* Decorator: Specifies the dependencies that should be injected by the DI Container into the decorated class/function. -*/ -export function inject(...rest: any[]): any { - return function(target, key, descriptor) { - // handle when used as a constructor parameter decorator - if (typeof descriptor === 'number') { - autoinject(target); - if (rest.length === 1) { - target.inject[descriptor] = rest[0]; - } - return; - } - // if it's true then we injecting rest into function and not Class constructor - if (descriptor) { - const fn = descriptor.value; - fn.inject = rest; - } else { - target.inject = rest; - } - }; -} diff --git a/src/injection.ts b/src/injection.ts new file mode 100644 index 0000000..5248d2f --- /dev/null +++ b/src/injection.ts @@ -0,0 +1,60 @@ +import { metadata } from 'aurelia-metadata'; +import { _emptyParameters } from './container'; +import { DependencyCtor, PrimitiveOrBase } from './types'; + +/** + * Decorator: Directs the TypeScript transpiler to write-out type metadata for + * the decorated class. + */ +export function autoinject( + potentialTarget?: DependencyCtor +): any { + const deco = (target: DependencyCtor & { inject?: any }) => { + if (!target.hasOwnProperty('inject')) { + target.inject = ( + (metadata.getOwn(metadata.paramTypes, target) as Array) || + _emptyParameters + ).slice(); + if (target.inject && target.inject.length > 0) { + // TypeScript 3.0 metadata for "...rest" gives type "Object" + // if last parameter is "Object", assume it's a ...rest and remove that + // metadata. + if (target.inject[target.inject.length - 1] === Object) { + target.inject.splice(-1, 1); + } + } + } + }; + + return potentialTarget ? deco(potentialTarget) : deco; +} + +/** + * Decorator: Specifies the dependencies that should be injected by the DI Container into the decorated class/function. + */ +export function inject< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase +>(...rest: TArgs[number][]): any { + return ( + target: DependencyCtor & { inject: any }, + _key: any, + descriptor: any) => { + // handle when used as a constructor parameter decorator + if (typeof descriptor === 'number') { + autoinject(target); + if (rest.length === 1) { + target.inject[descriptor] = rest[0]; + } + return; + } + // if it's true then we injecting rest into function and not Class constructor + if (descriptor) { + const fn = descriptor.value; + fn.inject = rest; + } else { + target.inject = rest; + } + }; +} diff --git a/src/internal.d.ts b/src/internal.d.ts new file mode 100644 index 0000000..2d03d1c --- /dev/null +++ b/src/internal.d.ts @@ -0,0 +1,19 @@ +import { DependencyCtorOrFunctor } from './types'; +import { Invoker } from './invokers'; +import { SingletonRegistration, TransientRegistration } from './registrations'; + +/** @internal */ +declare module 'aurelia-metadata' { + interface MetadataType { + invoker: 'aurelia:invoker'; + getOwn( + metadataKey: 'aurelia:invoker', + target: DependencyCtorOrFunctor + ): Invoker; + registration: 'aurelia:registration'; + get( + metadataKey: 'aurelia:registration', + target: any + ): SingletonRegistration | TransientRegistration; + } +} diff --git a/src/invokers.js b/src/invokers.js deleted file mode 100644 index afd3a96..0000000 --- a/src/invokers.js +++ /dev/null @@ -1,97 +0,0 @@ -import {metadata} from 'aurelia-metadata'; -import {Container} from './container'; - -/** -* Decorator: Specifies a custom Invoker for the decorated item. -*/ -export function invoker(value: Invoker): any { - return function(target) { - metadata.define(metadata.invoker, value, target); - }; -} - -/** -* Decorator: Specifies that the decorated item should be called as a factory function, rather than a constructor. -*/ -export function invokeAsFactory(potentialTarget?: any): any { - let deco = function(target) { - metadata.define(metadata.invoker, FactoryInvoker.instance, target); - }; - - return potentialTarget ? deco(potentialTarget) : deco; -} - -/** -* A strategy for invoking a function, resulting in an object instance. -*/ -export interface Invoker { - /** - * Invokes the function with the provided dependencies. - * @param fn The constructor or factory function. - * @param dependencies The dependencies of the function call. - * @return The result of the function invocation. - */ - invoke(container: Container, fn: Function, dependencies: any[]): any; - - /** - * Invokes the function with the provided dependencies. - * @param fn The constructor or factory function. - * @param staticDependencies The static dependencies of the function. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invokeWithDynamicDependencies(container: Container, fn: Function, staticDependencies: any[], dynamicDependencies: any[]): any; -} - -/** -* An Invoker that is used to invoke a factory method. -*/ -export class FactoryInvoker { - /** - * The singleton instance of the FactoryInvoker. - */ - static instance: FactoryInvoker; - - /** - * Invokes the function with the provided dependencies. - * @param container The calling container. - * @param fn The constructor or factory function. - * @param dependencies The dependencies of the function call. - * @return The result of the function invocation. - */ - invoke(container: Container, fn: Function, dependencies: any[]): any { - let i = dependencies.length; - let args = new Array(i); - - while (i--) { - args[i] = container.get(dependencies[i]); - } - - return fn.apply(undefined, args); - } - - /** - * Invokes the function with the provided dependencies. - * @param container The calling container. - * @param fn The constructor or factory function. - * @param staticDependencies The static dependencies of the function. - * @param dynamicDependencies Additional dependencies to use during invocation. - * @return The result of the function invocation. - */ - invokeWithDynamicDependencies(container: Container, fn: Function, staticDependencies: any[], dynamicDependencies: any[]): any { - let i = staticDependencies.length; - let args = new Array(i); - - while (i--) { - args[i] = container.get(staticDependencies[i]); - } - - if (dynamicDependencies !== undefined) { - args = args.concat(dynamicDependencies); - } - - return fn.apply(undefined, args); - } -} - -FactoryInvoker.instance = new FactoryInvoker(); diff --git a/src/invokers.ts b/src/invokers.ts new file mode 100644 index 0000000..4c783ca --- /dev/null +++ b/src/invokers.ts @@ -0,0 +1,126 @@ +// tslint:disable-next-line:no-reference +/// +import { metadata } from 'aurelia-metadata'; +import { Container } from './container'; +import { DependencyCtorOrFunctor, PrimitiveOrBase, ImplOrAny } from './types'; + +/** + * Decorator: Specifies a custom Invoker for the decorated item. + */ +export function invoker, TImpl extends PrimitiveOrBase>( + value: Invoker +): any { + return target => { + metadata.define(metadata.invoker, value, target); + }; +} + +/** + * Decorator: Specifies that the decorated item should be called as a factory + * function, rather than a constructor. + */ +export function invokeAsFactory(potentialTarget?: any): any { + const deco = target => { + metadata.define(metadata.invoker, FactoryInvoker.instance, target); + }; + + return potentialTarget ? deco(potentialTarget) : deco; +} + +/** + * A strategy for invoking a function, resulting in an object instance. + */ +export interface Invoker, TImpl extends PrimitiveOrBase> { + /** + * Invokes the function with the provided dependencies. + * @param fn The constructor or factory function. + * @param dependencies The dependencies of the function call. + * @return The result of the function invocation. + */ + invoke( + container: Container, + fn: DependencyCtorOrFunctor, + dependencies: TArgs + ): ImplOrAny; + + /** + * Invokes the function with the provided dependencies. + * @param fn The constructor or factory function. + * @param staticDependencies The static dependencies of the function. + * @param dynamicDependencies Additional dependencies to use during + * invocation. + * @return The result of the function invocation. + */ + invokeWithDynamicDependencies( + container: Container, + fn: DependencyCtorOrFunctor, + staticDependencies: TArgs[number][], + dynamicDependencies: TArgs[number][] + ): ImplOrAny; +} + +/** + * An Invoker that is used to invoke a factory method. + */ +export class FactoryInvoker< + TBase = any, + TArgs extends Array = Array, + TImpl extends PrimitiveOrBase = PrimitiveOrBase + > { + /** + * The singleton instance of the FactoryInvoker. + */ + public static instance: FactoryInvoker; + + /** + * Invokes the function with the provided dependencies. + * @param container The calling container. + * @param fn The constructor or factory function. + * @param dependencies The dependencies of the function call. + * @return The result of the function invocation. + */ + public invoke( + container: Container, + fn: DependencyCtorOrFunctor, + dependencies: TArgs + ): ImplOrAny { + let i = dependencies.length; + const args = new Array(i); + + while (i--) { + args[i] = container.get(dependencies[i]); + } + + return fn.apply(undefined, args); + } + + /** + * Invokes the function with the provided dependencies. + * @param container The calling container. + * @param fn The constructor or factory function. + * @param staticDependencies The static dependencies of the function. + * @param dynamicDependencies Additional dependencies to use during invocation. + * @return The result of the function invocation. + */ + public invokeWithDynamicDependencies( + container: Container, + fn: DependencyCtorOrFunctor, + staticDependencies: TArgs[number][], + dynamicDependencies: TArgs[number][] + ): ImplOrAny { + let i = staticDependencies.length; + let args = new Array(i); + + while (i--) { + args[i] = container.get(staticDependencies[i]); + } + + if (dynamicDependencies !== undefined) { + args = args.concat(dynamicDependencies); + } + + return fn.apply(undefined, args); + } +} + +FactoryInvoker.instance = new FactoryInvoker(); diff --git a/src/registrations.js b/src/registrations.js deleted file mode 100644 index 129e3aa..0000000 --- a/src/registrations.js +++ /dev/null @@ -1,105 +0,0 @@ -import {StrategyResolver, Resolver} from './resolvers'; -import {Container} from './container'; -import {metadata} from 'aurelia-metadata'; - -/** -* Decorator: Specifies a custom registration strategy for the decorated class/function. -*/ -export function registration(value: Registration): any { - return function(target) { - metadata.define(metadata.registration, value, target); - }; -} - -/** -* Decorator: Specifies to register the decorated item with a "transient" lifetime. -*/ -export function transient(key?: any): any { - return registration(new TransientRegistration(key)); -} - -/** -* Decorator: Specifies to register the decorated item with a "singleton" lifetime. -*/ -export function singleton(keyOrRegisterInChild?: any, registerInChild: boolean = false): any { - return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild)); -} - -/** -* Customizes how a particular function is resolved by the Container. -*/ -export interface Registration { - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver; -} - -/** -* Used to allow functions/classes to indicate that they should be registered as transients with the container. -*/ -export class TransientRegistration { - /** @internal */ - _key: any; - - /** - * Creates an instance of TransientRegistration. - * @param key The key to register as. - */ - constructor(key?: any) { - this._key = key; - } - - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver { - let existingResolver = container.getResolver(this._key || key); - return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver; - } -} - -/** -* Used to allow functions/classes to indicate that they should be registered as singletons with the container. -*/ -export class SingletonRegistration { - /** @internal */ - _registerInChild: any; - - /** @internal */ - _key: any; - - /** - * Creates an instance of SingletonRegistration. - * @param key The key to register as. - */ - constructor(keyOrRegisterInChild?: any, registerInChild: boolean = false) { - if (typeof keyOrRegisterInChild === 'boolean') { - this._registerInChild = keyOrRegisterInChild; - } else { - this._key = keyOrRegisterInChild; - this._registerInChild = registerInChild; - } - } - - /** - * Called by the container to register the resolver. - * @param container The container the resolver is being registered with. - * @param key The key the resolver should be registered as. - * @param fn The function to create the resolver for. - * @return The resolver that was registered. - */ - registerResolver(container: Container, key: any, fn: Function): Resolver { - let targetContainer = this._registerInChild ? container : container.root; - let existingResolver = targetContainer.getResolver(this._key || key); - return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver; - } -} diff --git a/src/registrations.ts b/src/registrations.ts new file mode 100644 index 0000000..fce4c8f --- /dev/null +++ b/src/registrations.ts @@ -0,0 +1,147 @@ +// tslint:disable-next-line:no-reference +/// +import { Resolver } from './resolvers'; +import { Container } from './container'; +import { metadata } from 'aurelia-metadata'; +import { + DependencyCtorOrFunctor, + PrimitiveOrDependencyCtor, + PrimitiveOrBase +} from './types'; + +/** + * Decorator: Specifies a custom registration strategy for the decorated + * class/function. + */ +export function registration, TImpl extends PrimitiveOrBase>( + value: Registration): any { + return (target: (...rest: any[]) => any) => { + metadata.define(metadata.registration, value, target); + }; +} + +/** + * Decorator: Specifies to register the decorated item with a "transient" + * lifetime. + */ +export function transient, TImpl extends PrimitiveOrBase>( + key?: PrimitiveOrDependencyCtor): any { + return registration(new TransientRegistration(key)); +} + +/** + * Decorator: Specifies to register the decorated item with a "singleton" + * lifetime. + */ +export function singleton(registerInChild?: boolean): any; +export function singleton, TImpl extends PrimitiveOrBase>( + key?: PrimitiveOrDependencyCtor, registerInChild?: boolean): any; +export function singleton, TImpl extends PrimitiveOrBase>( + keyOrRegisterInChild?: PrimitiveOrDependencyCtor | boolean, registerInChild: boolean = false) { + return registration( + new SingletonRegistration(keyOrRegisterInChild, registerInChild) + ); +} + +/** + * Customizes how a particular function is resolved by the Container. + */ +export interface Registration, TImpl extends PrimitiveOrBase> { + /** + * Called by the container to register the resolver. + * @param container The container the resolver is being registered with. + * @param key The key the resolver should be registered as. + * @param fn The function to create the resolver for. + * @return The resolver that was registered. + */ + registerResolver( + container: Container, + key: PrimitiveOrDependencyCtor, + fn: DependencyCtorOrFunctor + ): Resolver; +} + +/** + * Used to allow functions/classes to indicate that they should be registered as + * transients with the container. + */ +export class TransientRegistration, TImpl extends PrimitiveOrBase> + implements Registration { + /** @internal */ + public _key: PrimitiveOrDependencyCtor; + + /** + * Creates an instance of TransientRegistration. + * @param key The key to register as. + */ + constructor(key?: PrimitiveOrDependencyCtor) { + this._key = key; + } + + /** + * Called by the container to register the resolver. + * @param container The container the resolver is being registered with. + * @param key The key the resolver should be registered as. + * @param fn The function to create the resolver for. + * @return The resolver that was registered. + */ + public registerResolver( + container: Container, + key: PrimitiveOrDependencyCtor, + fn: DependencyCtorOrFunctor + ): Resolver { + const existingResolver = container.getResolver(this._key || key); + return existingResolver === undefined + ? container.registerTransient( + (this._key || key) as string, + fn as DependencyCtorOrFunctor) + : existingResolver; + } +} + +/** + * Used to allow functions/classes to indicate that they should be registered as + * singletons with the container. + */ +export class SingletonRegistration, TImpl extends PrimitiveOrBase> + implements Registration { + /** @internal */ + public _registerInChild: boolean; + + /** @internal */ + public _key: PrimitiveOrDependencyCtor; + + /** + * Creates an instance of SingletonRegistration. + * @param key The key to register as. + */ + constructor( + keyOrRegisterInChild?: PrimitiveOrDependencyCtor | boolean, + registerInChild: boolean = false) { + if (typeof keyOrRegisterInChild === 'boolean') { + this._registerInChild = keyOrRegisterInChild; + } else { + this._key = keyOrRegisterInChild; + this._registerInChild = registerInChild; + } + } + + /** + * Called by the container to register the resolver. + * @param container The container the resolver is being registered with. + * @param key The key the resolver should be registered as. + * @param fn The function to create the resolver for. + * @return The resolver that was registered. + */ + public registerResolver( + container: Container, + key: PrimitiveOrDependencyCtor, + fn: DependencyCtorOrFunctor + ): Resolver { + const targetContainer = this._registerInChild ? container : container.root; + const existingResolver = targetContainer.getResolver(this._key || key); + return existingResolver === undefined + ? targetContainer.registerSingleton(this._key || key, fn) + : existingResolver; + } +} diff --git a/src/resolvers.js b/src/resolvers.js deleted file mode 100644 index b226c15..0000000 --- a/src/resolvers.js +++ /dev/null @@ -1,420 +0,0 @@ -import {protocol} from 'aurelia-metadata'; -import {Container} from './container'; -import {autoinject} from './injection'; - -/** -* Decorator: Indicates that the decorated class/object is a custom resolver. -*/ -export const resolver: Function & { decorates?: any } = protocol.create('aurelia:resolver', function(target): string | boolean { - if (!(typeof target.get === 'function')) { - return 'Resolvers must implement: get(container: Container, key: any): any'; - } - - return true; -}); - -/** -* Used to allow functions/classes to specify custom dependency resolution logic. -*/ -export interface Resolver { - /** - * Called by the container to allow custom resolution of dependencies for a function/class. - * @param container The container to resolve from. - * @param key The key that the resolver was registered as. - * @return Returns the resolved object. - */ - get(container: Container, key: any): any; -} - -/** -* Used to resolve instances, singletons, transients, aliases -*/ -@resolver() -export class StrategyResolver { - strategy: StrategyResolver | number; - state: any; - - /** - * Creates an instance of the StrategyResolver class. - * @param strategy The type of resolution strategy. - * @param state The state associated with the resolution strategy. - */ - constructor(strategy, state) { - this.strategy = strategy; - this.state = state; - } - - /** - * Called by the container to allow custom resolution of dependencies for a function/class. - * @param container The container to resolve from. - * @param key The key that the resolver was registered as. - * @return Returns the resolved object. - */ - get(container: Container, key: any): any { - switch (this.strategy) { - case 0: //instance - return this.state; - case 1: //singleton - let singleton = container.invoke(this.state); - this.state = singleton; - this.strategy = 0; - return singleton; - case 2: //transient - return container.invoke(this.state); - case 3: //function - return this.state(container, key, this); - case 4: //array - return this.state[0].get(container, key); - case 5: //alias - return container.get(this.state); - default: - throw new Error('Invalid strategy: ' + this.strategy); - } - } -} - -/** -* Used to allow functions/classes to specify lazy resolution logic. -*/ -@resolver() -export class Lazy { - /** @internal */ - _key: any; - - /** - * Creates an instance of the Lazy class. - * @param key The key to lazily resolve. - */ - constructor(key: any) { - this._key = key; - } - - /** - * Called by the container to lazily resolve the dependency into a lazy locator function. - * @param container The container to resolve from. - * @return Returns a function which can be invoked at a later time to obtain the actual dependency. - */ - get(container: Container): any { - return () => container.get(this._key); - } - - /** - * Creates a Lazy Resolver for the supplied key. - * @param key The key to lazily resolve. - * @return Returns an instance of Lazy for the key. - */ - static of(key: any): Lazy { - return new Lazy(key); - } -} - -/** -* Used to allow functions/classes to specify resolution of all matches to a key. -*/ -@resolver() -export class All { - /** @internal */ - _key: any; - - /** - * Creates an instance of the All class. - * @param key The key to lazily resolve all matches for. - */ - constructor(key: any) { - this._key = key; - } - - /** - * Called by the container to resolve all matching dependencies as an array of instances. - * @param container The container to resolve from. - * @return Returns an array of all matching instances. - */ - get(container: Container): any[] { - return container.getAll(this._key); - } - - /** - * Creates an All Resolver for the supplied key. - * @param key The key to resolve all instances for. - * @return Returns an instance of All for the key. - */ - static of(key: any): All { - return new All(key); - } -} - -/** -* Used to allow functions/classes to specify an optional dependency, which will be resolved only if already registred with the container. -*/ -@resolver() -export class Optional { - /** @internal */ - _key: any; - - /** @internal */ - _checkParent: boolean; - - /** - * Creates an instance of the Optional class. - * @param key The key to optionally resolve for. - * @param checkParent Indicates whether or not the parent container hierarchy should be checked. - */ - constructor(key: any, checkParent: boolean = true) { - this._key = key; - this._checkParent = checkParent; - } - - /** - * Called by the container to provide optional resolution of the key. - * @param container The container to resolve from. - * @return Returns the instance if found; otherwise null. - */ - get(container: Container): any { - if (container.hasResolver(this._key, this._checkParent)) { - return container.get(this._key); - } - - return null; - } - - /** - * Creates an Optional Resolver for the supplied key. - * @param key The key to optionally resolve for. - * @param [checkParent=true] Indicates whether or not the parent container hierarchy should be checked. - * @return Returns an instance of Optional for the key. - */ - static of(key: any, checkParent: boolean = true): Optional { - return new Optional(key, checkParent); - } -} - -/** -* Used to inject the dependency from the parent container instead of the current one. -*/ -@resolver() -export class Parent { - /** @internal */ - _key: any; - - /** - * Creates an instance of the Parent class. - * @param key The key to resolve from the parent container. - */ - constructor(key: any) { - this._key = key; - } - - /** - * Called by the container to load the dependency from the parent container - * @param container The container to resolve the parent from. - * @return Returns the matching instance from the parent container - */ - get(container: Container): any { - return container.parent - ? container.parent.get(this._key) - : null; - } - - /** - * Creates a Parent Resolver for the supplied key. - * @param key The key to resolve. - * @return Returns an instance of Parent for the key. - */ - static of(key: any) : Parent { - return new Parent(key); - } -} - -/** -* Used to allow injecting dependencies but also passing data to the constructor. -*/ -@resolver() -export class Factory { - /** @internal */ - _key: any; - - /** - * Creates an instance of the Factory class. - * @param key The key to resolve from the parent container. - */ - constructor(key: any) { - this._key = key; - } - - /** - * Called by the container to pass the dependencies to the constructor. - * @param container The container to invoke the constructor with dependencies and other parameters. - * @return Returns a function that can be invoked to resolve dependencies later, and the rest of the parameters. - */ - get(container: Container): any { - let fn = this._key; - let resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - return (...rest) => container.invoke(fn, rest); - } - - /** - * Creates a Factory Resolver for the supplied key. - * @param key The key to resolve. - * @return Returns an instance of Factory for the key. - */ - static of(key: any): Factory { - return new Factory(key); - } -} - -/** -* Used to inject a new instance of a dependency, without regard for existing -* instances in the container. Instances can optionally be registered in the container -* under a different key by supplying a key using the `as` method. -*/ -@resolver() -export class NewInstance { - /** @internal */ - key: any; - /** @internal */ - asKey: any; - /** @internal */ - dynamicDependencies: any[]; - - /** - * Creates an instance of the NewInstance class. - * @param key The key to resolve/instantiate. - * @param dynamicDependencies An optional list of dynamic dependencies. - */ - constructor(key, ...dynamicDependencies: any[]) { - this.key = key; - this.asKey = key; - this.dynamicDependencies = dynamicDependencies; - } - - /** - * Called by the container to instantiate the dependency and potentially register - * as another key if the `as` method was used. - * @param container The container to resolve the parent from. - * @return Returns the matching instance from the parent container - */ - get(container) { - let dynamicDependencies = this.dynamicDependencies.length > 0 ? - this.dynamicDependencies.map(dependency => dependency['protocol:aurelia:resolver'] ? - dependency.get(container) : container.get(dependency)) : undefined; - - let fn = this.key; - let resolver = container.getResolver(fn); - if (resolver && resolver.strategy === 3) { - fn = resolver.state; - } - - const instance = container.invoke(fn, dynamicDependencies); - container.registerInstance(this.asKey, instance); - return instance; - } - - /** - * Instructs the NewInstance resolver to register the resolved instance using the supplied key. - * @param key The key to register the instance with. - * @return Returns the NewInstance resolver. - */ - as(key) { - this.asKey = key; - return this; - } - - /** - * Creates an NewInstance Resolver for the supplied key. - * @param key The key to resolve/instantiate. - * @param dynamicDependencies An optional list of dynamic dependencies. - * @return Returns an instance of NewInstance for the key. - */ - static of(key, ...dynamicDependencies: any[]) { - return new NewInstance(key, ...dynamicDependencies); - } -} - -/** -* Used by parameter decorators to call autoinject for the target and retrieve the target's inject property. -* @param target The target class. -* @return Returns the target's own inject property. -*/ -export function getDecoratorDependencies(target) { - autoinject(target); - - return target.inject; -} - -/** -* Decorator: Specifies the dependency should be lazy loaded -*/ -export function lazy(keyValue: any) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Lazy.of(keyValue); - }; -} - -/** -* Decorator: Specifies the dependency should load all instances of the given key. -*/ -export function all(keyValue: any) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = All.of(keyValue); - }; -} - -/** -* Decorator: Specifies the dependency as optional -*/ -export function optional(checkParentOrTarget: boolean = true) { - let deco = function(checkParent: boolean) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Optional.of(inject[index], checkParent); - }; - }; - if (typeof checkParentOrTarget === 'boolean') { - return deco(checkParentOrTarget); - } - return deco(true); -} - -/** -* Decorator: Specifies the dependency to look at the parent container for resolution -*/ -export function parent(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Parent.of(inject[index]); -} - -/** -* Decorator: Specifies the dependency to create a factory method, that can accept optional arguments -*/ -export function factory(keyValue: any) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = Factory.of(keyValue); - }; -} - -/** -* Decorator: Specifies the dependency as a new instance. Instances can optionally be registered in the container -* under a different key and/or use dynamic dependencies -*/ -export function newInstance(asKeyOrTarget?: any, ...dynamicDependencies: any[]) { - let deco = function(asKey?: any) { - return function(target, key, index) { - let inject = getDecoratorDependencies(target); - inject[index] = NewInstance.of(inject[index], ...dynamicDependencies); - if (!!asKey) { - inject[index].as(asKey); - } - }; - }; - if (arguments.length >= 1) { - return deco(asKeyOrTarget); - } - return deco(); -} diff --git a/src/resolvers.ts b/src/resolvers.ts new file mode 100644 index 0000000..cf91dbb --- /dev/null +++ b/src/resolvers.ts @@ -0,0 +1,574 @@ +import { protocol } from 'aurelia-metadata'; +import { Container } from './container'; +import { autoinject } from './injection'; +import { + PrimitiveOrBase, + PrimitiveOrDependencyCtor, + DependencyCtorOrFunctor, + PrimitiveOrDependencyCtorOrFunctor, + DependencyCtor, + DependencyFunctor, + ImplOrAny +} from './types'; + +/** + * Decorator: Indicates that the decorated class/object is a custom resolver. + */ +export const resolver: { + decorates?: (key: any) => key is { get(container: Container, key: any): any }; +} & (() => any) = ((protocol as unknown) as { create(...args: any[]): any }).create( + 'aurelia:resolver', + (target): string | boolean => { + if (!(typeof target.get === 'function')) { + return 'Resolvers must implement: get(container: Container, key: any): any'; + } + + return true; + } +); + +/** + * Used to allow functions/classes to specify custom dependency resolution logic. + */ +export interface Resolver { + /** + * Called by the container to allow custom resolution of dependencies for a + * function/class. + * @param container The container to resolve from. + * @param key The key that the resolver was registered as. + * @return Returns the resolved object. + */ + get(container: Container, key: any): any; +} + +export const enum Strategy { + instance = 0, + singleton = 1, + transient = 2, + function = 3, + array = 4, + alias = 5 +} +export type IStrategy = 1 | 2 | 3 | 4 | 5; + +export type StrategyFunctor< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase = PrimitiveOrBase + > = ( + container?: Container, + ctor?: PrimitiveOrDependencyCtorOrFunctor, + strategyResolver?: any + ) => TImpl; + +export interface StrategyState< + TBase, + TImpl extends PrimitiveOrBase, + TArgs extends Array + > { + [Strategy.instance]: TImpl; + [Strategy.singleton]: DependencyCtorOrFunctor; + [Strategy.transient]: DependencyCtorOrFunctor; + [Strategy.function]: StrategyFunctor; + [Strategy.array]: [{ + get: ( + container: Container, + key: PrimitiveOrDependencyCtor + ) => TImpl + }, ...TImpl[]]; + [Strategy.alias]: any; +} + +function isStrategy< + TBase, + TImpl extends PrimitiveOrBase, + TArgs extends Array, + TKey extends keyof StrategyState = keyof StrategyState>( + actual: Strategy, + expected: TKey, + state): + state is StrategyState[TKey] { + return actual === expected; +} +/** + * Used to resolve instances, singletons, transients, aliases + */ +@resolver() +export class StrategyResolver< + TBase, + TImpl extends PrimitiveOrBase, + TArgs extends Array, + TStrategyKey extends keyof StrategyState> { + + public strategy: keyof StrategyState; + public state: StrategyState[keyof StrategyState]; + + /** + * Creates an instance of the StrategyResolver class. + * @param strategy The type of resolution strategy. + * @param state The state associated with the resolution strategy. + */ + constructor(strategy: TStrategyKey, state: StrategyState[TStrategyKey]) { + this.strategy = strategy; + this.state = state; + } + + /** + * Called by the container to allow custom resolution of dependencies for a + * function/class. + * @param container The container to resolve from. + * @param key The key that the resolver was registered as. + * @return Returns the resolved object. + */ + public get(container: Container, key: PrimitiveOrDependencyCtor) { + if (isStrategy(this.strategy, Strategy.instance, this.state)) { + return this.state; + } + if (isStrategy(this.strategy, Strategy.singleton, this.state)) { + const singleton = container.invoke(this.state); + this.state = singleton; + this.strategy = 0; + return singleton; + } + if (isStrategy(this.strategy, Strategy.transient, this.state)) { + return container.invoke(this.state); + } + if (isStrategy(this.strategy, Strategy.function, this.state)) { + return this.state(container, key, this); + } + if (isStrategy(this.strategy, Strategy.array, this.state)) { + return this.state[0].get(container, key); + } + if (isStrategy(this.strategy, Strategy.alias, this.state)) { + return container.get(this.state) as TImpl; + } + throw new Error('Invalid strategy: ' + this.strategy); + } +} + +/** + * Used to allow functions/classes to specify lazy resolution logic. + */ +@resolver() +export class Lazy, TImpl extends PrimitiveOrBase = PrimitiveOrBase> { + /** @internal */ + public _key: PrimitiveOrDependencyCtor; + + /** + * Creates an instance of the Lazy class. + * @param key The key to lazily resolve. + */ + constructor(key: PrimitiveOrDependencyCtor) { + this._key = key; + } + + /** + * Called by the container to lazily resolve the dependency into a lazy locator + * function. + * @param container The container to resolve from. + * @return Returns a function which can be invoked at a later time to obtain + * the actual dependency. + */ + public get(container: Container): () => ImplOrAny { + return () => container.get(this._key); + } + + /** + * Creates a Lazy Resolver for the supplied key. + * @param key The key to lazily resolve. + * @return Returns an instance of Lazy for the key. + */ + public static of< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase = PrimitiveOrBase + >(key: any) { + return new Lazy(key); + } +} + +/** + * Used to allow functions/classes to specify resolution of all matches to a key. + */ +@resolver() +export class All, TImpl extends PrimitiveOrBase = PrimitiveOrBase> { + /** @internal */ + public _key: PrimitiveOrDependencyCtor; + + /** + * Creates an instance of the All class. + * @param key The key to lazily resolve all matches for. + */ + constructor(key: PrimitiveOrDependencyCtor) { + this._key = key; + } + + /** + * Called by the container to resolve all matching dependencies as an array of + * instances. + * @param container The container to resolve from. + * @return Returns an array of all matching instances. + */ + public get(container: Container): any[] { + return container.getAll(this._key); + } + + /** + * Creates an All Resolver for the supplied key. + * @param key The key to resolve all instances for. + * @return Returns an instance of All for the key. + */ + public static of, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + key: any): All { + return new All(key); + } +} + +/** + * Used to allow functions/classes to specify an optional dependency, which will + * be resolved only if already registred with the container. + */ +@resolver() +export class Optional, TImpl extends PrimitiveOrBase = PrimitiveOrBase> { + /** @internal */ + public _key: PrimitiveOrDependencyCtor; + + /** @internal */ + public _checkParent: boolean; + + /** + * Creates an instance of the Optional class. + * @param key The key to optionally resolve for. + * @param checkParent Indicates whether or not the parent container hierarchy + * should be checked. + */ + constructor(key: PrimitiveOrDependencyCtor, checkParent: boolean = true) { + this._key = key; + this._checkParent = checkParent; + } + + /** + * Called by the container to provide optional resolution of the key. + * @param container The container to resolve from. + * @return Returns the instance if found; otherwise null. + */ + public get(container: Container): any { + if (container.hasResolver(this._key, this._checkParent)) { + return container.get(this._key); + } + + return null; + } + + /** + * Creates an Optional Resolver for the supplied key. + * @param key The key to optionally resolve for. + * @param [checkParent=true] Indicates whether or not the parent container + * hierarchy should be checked. + * @return Returns an instance of Optional for the key. + */ + public static of, + TImpl extends PrimitiveOrBase = PrimitiveOrBase + >(key: any, checkParent: boolean = true): Optional { + return new Optional(key, checkParent); + } +} + +/** + * Used to inject the dependency from the parent container instead of the current + * one. + */ +@resolver() +export class Parent, TImpl extends PrimitiveOrBase = PrimitiveOrBase> { + /** @internal */ + public _key: PrimitiveOrDependencyCtor; + + /** + * Creates an instance of the Parent class. + * @param key The key to resolve from the parent container. + */ + constructor(key: PrimitiveOrDependencyCtor) { + this._key = key; + } + + /** + * Called by the container to load the dependency from the parent container + * @param container The container to resolve the parent from. + * @return Returns the matching instance from the parent container + */ + public get(container: Container): any { + return container.parent ? container.parent.get(this._key) : null; + } + + /** + * Creates a Parent Resolver for the supplied key. + * @param key The key to resolve. + * @return Returns an instance of Parent for the key. + */ + public static of, + TImpl extends PrimitiveOrBase = PrimitiveOrBase>(key: any): Parent { + return new Parent(key); + } +} + +/** + * Used to allow injecting dependencies but also passing data to the constructor. + */ +@resolver() +export class Factory, TImpl extends PrimitiveOrBase = PrimitiveOrBase> { + /** @internal */ + public _key: PrimitiveOrDependencyCtorOrFunctor; + + /** + * Creates an instance of the Factory class. + * @param key The key to resolve from the parent container. + */ + constructor(key: PrimitiveOrDependencyCtorOrFunctor) { + this._key = key; + } + + /** + * Called by the container to pass the dependencies to the constructor. + * @param container The container to invoke the constructor with dependencies + * and other parameters. + * @return Returns a function that can be invoked to resolve dependencies + * later, and the rest of the parameters. + */ + public get(container: Container): DependencyFunctor { + let fn = this._key; + const resolver = container.getResolver(fn); + if (resolver && resolver.strategy === Strategy.function) { + fn = resolver.state; + } + + return (...rest) => container.invoke(fn as DependencyCtorOrFunctor, rest); + } + + /** + * Creates a Factory Resolver for the supplied key. + * @param key The key to resolve. + * @return Returns an instance of Factory for the key. + */ + public static of, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + key: DependencyCtor + ): Factory { + return new Factory(key); + } +} + +/** + * Used to inject a new instance of a dependency, without regard for existing + * instances in the container. Instances can optionally be registered in the + * container + * under a different key by supplying a key using the `as` method. + */ +@resolver() +export class NewInstance< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase = PrimitiveOrBase + > { + /** @internal */ + public key: PrimitiveOrDependencyCtorOrFunctor; + /** @internal */ + public asKey: PrimitiveOrDependencyCtorOrFunctor; + /** @internal */ + public dynamicDependencies: TArgs[number][]; + + /** + * Creates an instance of the NewInstance class. + * @param key The key to resolve/instantiate. + * @param dynamicDependencies An optional list of dynamic dependencies. + */ + constructor(key: PrimitiveOrDependencyCtorOrFunctor, ...dynamicDependencies: TArgs[number][]) { + this.key = key; + this.asKey = key; + this.dynamicDependencies = dynamicDependencies; + } + + /** + * Called by the container to instantiate the dependency and potentially + * register + * as another key if the `as` method was used. + * @param container The container to resolve the parent from. + * @return Returns the matching instance from the parent container + */ + public get(container: Container) { + const dynamicDependencies = + this.dynamicDependencies.length > 0 + ? this.dynamicDependencies.map(dependency => + dependency['protocol:aurelia:resolver'] + ? dependency.get(container) + : container.get(dependency) + ) + : undefined; + + let fn = this.key; + const resolver = container.getResolver(fn); + if (resolver && resolver.strategy === 3) { + fn = resolver.state; + } + + const instance = container.invoke(fn as DependencyCtorOrFunctor, dynamicDependencies); + container.registerInstance(this.asKey, instance); + return instance; + } + + /** + * Instructs the NewInstance resolver to register the resolved instance using + * the supplied key. + * @param key The key to register the instance with. + * @return Returns the NewInstance resolver. + */ + public as(key: PrimitiveOrDependencyCtorOrFunctor) { + this.asKey = key; + return this; + } + + /** + * Creates an NewInstance Resolver for the supplied key. + * @param key The key to resolve/instantiate. + * @param dynamicDependencies An optional list of dynamic dependencies. + * @return Returns an instance of NewInstance for the key. + */ + public static of, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + key: PrimitiveOrDependencyCtorOrFunctor, + ...dynamicDependencies: TArgs[number][]): NewInstance { + return new NewInstance(key, ...dynamicDependencies); + } +} + +/** + * Used by parameter decorators to call autoinject for the target and retrieve + * the target's inject property. + * @param target The target class. + * @return Returns the target's own inject property. + */ +export function getDecoratorDependencies< + TBase, TArgs extends Array, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + target: DependencyCtor & { inject?: TArgs[number][] } + ) { + autoinject(target); + + return target.inject; +} + +/** + * Decorator: Specifies the dependency should be lazy loaded + */ +export function lazy< + TBase, TArgs extends Array, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + keyValue: any + ) { + return ( + target: DependencyCtor & { inject?: TArgs[number][] }, + key, + index: number + ) => { + const inject = getDecoratorDependencies(target); + inject[index] = Lazy.of(keyValue); + }; +} + +/** + * Decorator: Specifies the dependency should load all instances of the given + * key. + */ +export function all< + TBase, TArgs extends Array, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + keyValue: any + ) { + return ( + target: DependencyCtor & { inject?: TArgs[number][] }, + key, + index: number + ) => { + const inject = getDecoratorDependencies(target); + inject[index] = All.of(keyValue); + }; +} + +/** + * Decorator: Specifies the dependency as optional + */ +export function optional< + TBase, TArgs extends Array, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + checkParentOrTarget: boolean = true) { + const deco = (checkParent: boolean) => { + return ( + target: DependencyCtor & { inject?: TArgs[number][] }, + key, + index: number) => { + const inject = getDecoratorDependencies(target); + inject[index] = Optional.of(inject[index], checkParent); + }; + }; + if (typeof checkParentOrTarget === 'boolean') { + return deco(checkParentOrTarget); + } + return deco(true); +} + +/** + * Decorator: Specifies the dependency to look at the parent container for + * resolution + */ +export function parent< + TBase, TArgs extends Array, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + target: DependencyCtor & { inject?: TArgs[number][] }, + key, + index: number) { + const inject = getDecoratorDependencies(target); + inject[index] = Parent.of(inject[index]); +} + +/** + * Decorator: Specifies the dependency to create a factory method, that can + * accept optional arguments + */ +export function factory< + TBase, TArgs extends Array, TImpl extends PrimitiveOrBase = PrimitiveOrBase>( + keyValue: any + ) { + return ( + target: DependencyCtor & { inject?: TArgs[number][] }, + key, + index: number + ) => { + const inject = getDecoratorDependencies(target); + inject[index] = Factory.of(keyValue); + }; +} + +/** + * Decorator: Specifies the dependency as a new instance. Instances can optionally be registered in the container + * under a different key and/or use dynamic dependencies + */ +export function newInstance< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase = PrimitiveOrBase +>( + asKeyOrTarget?: PrimitiveOrDependencyCtor & { inject?: TArgs[number][] }, + ...dynamicDependencies: TArgs[number][] +) { + const deco = (asKey?: typeof asKeyOrTarget) => { + return ( + target: DependencyCtor & { inject?: TArgs[number][] }, + key, + index: number + ) => { + const inject = getDecoratorDependencies(target); + inject[index] = NewInstance.of(inject[index], ...dynamicDependencies); + if (!!asKey) { + inject[index].as(asKey); + } + }; + }; + if (arguments.length >= 1) { + return deco(asKeyOrTarget); + } + return deco(); +} diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 0000000..a736688 --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1,44 @@ +export type Primitive = boolean + | string + | number + | symbol + | object + | ((...args: any[]) => any) + | Array; + +export type DependencyCtor< + TBase, + TImpl extends PrimitiveOrBase, + TArgs extends Array + > = new (...args: TArgs) => TImpl | TBase; + +export type DependencyFunctor< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase = PrimitiveOrBase + > = (...args: TArgs) => TImpl | TBase; + +export type DependencyCtorOrFunctor< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase = PrimitiveOrBase + > = DependencyCtor + | DependencyFunctor; + +export type PrimitiveOrDependencyCtor< + TBase, + TImpl extends PrimitiveOrBase, + TArgs extends Array + > = DependencyCtor | Primitive; + +export type PrimitiveOrDependencyCtorOrFunctor< + TBase, + TArgs extends Array, + TImpl extends PrimitiveOrBase = PrimitiveOrBase + > = DependencyCtor + | DependencyFunctor + | Primitive; + +export type PrimitiveOrBase = Primitive extends TBase ? TBase : any; + +export type ImplOrAny = unknown extends TImpl ? any : TImpl; diff --git a/test/container.spec.js b/test/container.spec.js deleted file mode 100644 index 6d23b17..0000000 --- a/test/container.spec.js +++ /dev/null @@ -1,252 +0,0 @@ -import './setup'; -import {Container} from '../src/container'; -import {inject} from '../src/injection'; - -describe('container', () => { - it('asserts keys are defined', () => { - let container = new Container(); - - expect(() => container.get(null)).toThrow(); - expect(() => container.get(undefined)).toThrow(); - - expect(() => container.registerInstance(null, {})).toThrow(); - expect(() => container.registerInstance(undefined, {})).toThrow(); - - expect(() => container.registerSingleton(null)).toThrow(); - expect(() => container.registerSingleton(undefined)).toThrow(); - - expect(() => container.registerTransient(null)).toThrow(); - expect(() => container.registerTransient(undefined)).toThrow(); - - expect(() => container.autoRegister(null)).toThrow(); - expect(() => container.autoRegister(undefined)).toThrow(); - - expect(() => container.autoRegisterAll([null])).toThrow(); - expect(() => container.autoRegisterAll([undefined])).toThrow(); - - expect(() => container.registerHandler(null)).toThrow(); - expect(() => container.registerHandler(undefined)).toThrow(); - - expect(() => container.hasHandler(null)).toThrow(); - expect(() => container.hasHandler(undefined)).toThrow(); - }); - - it('automatically configures as singleton', () => { - class Logger {} - - class App1 { - constructor(logger) { - this.logger = logger; - } - } - - inject(Logger)(App1); - - class App2 { - constructor(logger) { - this.logger = logger; - } - } - - inject(Logger)(App2); - - let container = new Container(); - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).toBe(app2.logger); - }); - - it('automatically configures non-functions as instances', () => { - let someObject = {}; - - class App1 { - constructor(something) { - this.something = something; - } - } - - inject(someObject)(App1); - - - let container = new Container(); - let app1 = container.get(App1); - - expect(app1.something).toBe(someObject); - }); - - it('configures singleton via api', () => { - class Logger {} - - class App1 { - constructor(logger) { - this.logger = logger; - } - } - - inject(Logger)(App1); - - class App2 { - constructor(logger) { - this.logger = logger; - } - } - - inject(Logger)(App2); - - let container = new Container(); - container.registerSingleton(Logger, Logger); - - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).toBe(app2.logger); - }); - - it('configures transient (non singleton) via api', () => { - class Logger {} - - class App1 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class App2 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - container.registerTransient(Logger, Logger); - - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).not.toBe(app2.logger); - }); - - it('configures instance via api', () => { - class Logger {} - - class App1 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class App2 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let instance = new Logger(); - container.registerInstance(Logger, instance); - - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).toBe(instance); - expect(app2.logger).toBe(instance); - }); - - it('configures custom via api', () => { - class Logger {} - - class App1 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class App2 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - container.registerHandler(Logger, c => 'something strange'); - - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).toEqual('something strange'); - expect(app2.logger).toEqual('something strange'); - }); - - it('configures key as service when transient api only provided with key', () => { - class Logger {} - - let container = new Container(); - container.registerTransient(Logger); - - let logger1 = container.get(Logger); - let logger2 = container.get(Logger); - - expect(logger1).toEqual(jasmine.any(Logger)); - expect(logger2).toEqual(jasmine.any(Logger)); - expect(logger2).not.toBe(logger1); - }); - - it('configures key as service when singleton api only provided with key', () => { - class Logger {} - - let container = new Container(); - container.registerSingleton(Logger); - - let logger1 = container.get(Logger); - let logger2 = container.get(Logger); - - expect(logger1).toEqual(jasmine.any(Logger)); - expect(logger2).toEqual(jasmine.any(Logger)); - expect(logger2).toBe(logger1); - }); - - it('configures concrete singleton via api for abstract dependency', () => { - class LoggerBase {} - class Logger extends LoggerBase {} - - class App { - static inject() { return [LoggerBase]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - container.registerSingleton(LoggerBase, Logger); - - let app = container.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - - it('configures concrete transient via api for abstract dependency', () => { - class LoggerBase {} - class Logger extends LoggerBase {} - - class App { - static inject() { return [LoggerBase]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - container.registerTransient(LoggerBase, Logger); - - let app = container.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - }); -}); diff --git a/test/container.spec.ts b/test/container.spec.ts new file mode 100644 index 0000000..7d3cab9 --- /dev/null +++ b/test/container.spec.ts @@ -0,0 +1,273 @@ +import './setup'; +import { Container } from '../src/container'; +import { inject } from '../src/injection'; + +describe('container', () => { + it('asserts keys are defined', () => { + const container = new Container(); + + expect(() => container.get(null as any)).toThrow(); + expect(() => container.get(undefined as any)).toThrow(); + + expect(() => container.registerInstance(null as any, {})).toThrow(); + expect(() => container.registerInstance(undefined as any, {})).toThrow(); + + expect(() => container.registerSingleton(null as any)).toThrow(); + expect(() => container.registerSingleton(undefined as any)).toThrow(); + + expect(() => container.registerTransient(null as any)).toThrow(); + expect(() => container.registerTransient(undefined as any)).toThrow(); + + expect(() => container.autoRegister(null as any)).toThrow(); + expect(() => container.autoRegister(undefined as any)).toThrow(); + + expect(() => container.registerHandler(null as any, undefined as any)).toThrow(); + expect(() => container.registerHandler(undefined as any, undefined as any)).toThrow(); + + expect(() => container.autoRegisterAll([null as any])).toThrow(); + expect(() => container.autoRegisterAll([undefined as any])).toThrow(); + + const instance = { instanceProp: 'value' }; + + const key1 = (...keyArgs: any[]) => null; + container.registerInstance(key1, instance); + expect(container.get(key1).instanceProp).toBe(instance.instanceProp); + + const key2 = { keyProperty: 1 }; + container.registerInstance(key2, instance); + expect(container.get(key2).instanceProp).toBe(instance.instanceProp); + + const key3 = true; + container.registerInstance(key3, instance); + expect(container.get(key3).instanceProp).toBe(instance.instanceProp); + + const key4 = false; + container.registerInstance(key4, instance); + expect(container.get(key4).instanceProp).toBe(instance.instanceProp); + + const key5 = Symbol(); + container.registerInstance(key5, instance); + expect(container.get(key5).instanceProp).toBe(instance.instanceProp); + + const key6 = 'stringKey'; + container.registerInstance(key6, instance); + expect(container.get(key6).instanceProp).toBe(instance.instanceProp); + + class Key7 { public keyProps: string; } + container.registerInstance(Key7, instance as any); + expect(container.get(Key7).keyProps).toBe(undefined); + }); + + it('automatically configures as singleton', () => { + class Logger { } + + @inject(Logger) + class App1 { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + @inject(Logger) + class App2 { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).toBe(app2.logger); + }); + + it('automatically configures non-functions as instances', () => { + const someObject = {}; + + class App1 { + constructor(public something: {}) { + this.something = something; + } + } + + inject(someObject)(App1); + + const container = new Container(); + const app1 = container.get(App1); + + expect(app1.something).toBe(someObject); + }); + + it('configures singleton via api', () => { + class Logger { } + + @inject(Logger) + class App1 { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + @inject(Logger) + class App2 { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + container.registerSingleton(Logger, Logger); + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).toBe(app2.logger); + }); + + it('configures transient (non singleton) via api', () => { + class Logger { } + + class App1 { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + class App2 { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + container.registerTransient(Logger, Logger); + + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).not.toBe(app2.logger); + }); + + it('configures instance via api', () => { + class Logger { } + + class App1 { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + class App2 { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + const instance = new Logger(); + container.registerInstance(Logger, instance); + + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).toBe(instance); + expect(app2.logger).toBe(instance); + }); + + it('configures custom via api', () => { + class Logger { } + + class App1 { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + class App2 { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + container.registerHandler(Logger, (c) => 'something strange'); + + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).toEqual('something strange'); + expect(app2.logger).toEqual('something strange'); + }); + + it('configures key as service when transient api only provided with key', () => { + class Logger { } + + const container = new Container(); + container.registerTransient(Logger); + + const logger1 = container.get(Logger); + const logger2 = container.get(Logger); + + expect(logger1).toEqual(jasmine.any(Logger)); + expect(logger2).toEqual(jasmine.any(Logger)); + expect(logger2).not.toBe(logger1); + }); + + it('configures key as service when singleton api only provided with key', () => { + class Logger { } + + const container = new Container(); + container.registerSingleton(Logger); + + const logger1 = container.get(Logger); + const logger2 = container.get(Logger); + + expect(logger1).toEqual(jasmine.any(Logger)); + expect(logger2).toEqual(jasmine.any(Logger)); + expect(logger2).toBe(logger1); + }); + + it('configures concrete singleton via api for abstract dependency', () => { + class LoggerBase { } + class Logger extends LoggerBase { } + + class App { + public static inject() { return [LoggerBase]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + container.registerSingleton(LoggerBase, Logger); + + const app = container.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + + it('configures concrete transient via api for abstract dependency', () => { + class LoggerBase { } + class Logger extends LoggerBase { } + + class App { + public static inject() { return [LoggerBase]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + container.registerTransient(LoggerBase, Logger); + + const app = container.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + }); +}); diff --git a/test/injection.spec.js b/test/injection.spec.js deleted file mode 100644 index c593c02..0000000 --- a/test/injection.spec.js +++ /dev/null @@ -1,593 +0,0 @@ -import './setup'; -import {Container} from '../src/container'; -import {inject, autoinject} from '../src/injection'; -import {decorators} from 'aurelia-metadata'; - -describe('injection', () => { - it('instantiates class without injected services', function() { - class App {} - - let container = new Container(); - let app = container.get(App); - - expect(app).toEqual(jasmine.any(App)); - }); - - describe('inject', () => { - it('uses static inject method (ES6)', function() { - class Logger {} - - class App { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let app = container.get(App); - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - - it('uses static inject property (TypeScript,CoffeeScript,ES5)', function() { - class Logger {} - - class App { - constructor(logger) { - this.logger = logger; - } - } - - App.inject = [Logger]; - - let container = new Container(); - let app = container.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - - it('uses inject decorator', function() { - class Logger {} - - let App = decorators(inject(Logger)).on( - class App { - constructor(logger) { - this.logger = logger; - } - }); - - let container = new Container(); - let app = container.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - - it('uses inject as param decorator', ()=> { - class Logger {} - - class App1 { - constructor(logger) { - this.logger = logger; - } - } - - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App1); - inject(Logger)(App1, null, 0); - decorators( autoinject() ).on(App1); - - let container = new Container(); - let app1 = container.get(App1); - - let logger = app1.logger; - - expect(logger).toEqual(jasmine.any(Logger)); - }); - - describe('inheritance', function() { - class Logger {} - class Service {} - - it('loads dependencies for the parent class', function() { - class ParentApp { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class ChildApp extends ParentApp { - constructor(...rest) { - super(...rest); - } - } - - let container = new Container(); - let app = container.get(ChildApp); - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - - it('loads dependencies for the child class', function() { - class ParentApp { - } - - class ChildApp extends ParentApp { - static inject() { return [Service]; } - constructor(service, ...rest) { - super(...rest); - this.service = service; - } - } - - let container = new Container(); - let app = container.get(ChildApp); - expect(app.service).toEqual(jasmine.any(Service)); - }); - - it('loads dependencies for both classes', function() { - class ParentApp { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class ChildApp extends ParentApp { - static inject() { return [Service]; } - constructor(service, ...rest) { - super(...rest); - this.service = service; - } - } - - let container = new Container(); - let app = container.get(ChildApp); - expect(app.service).toEqual(jasmine.any(Service)); - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - }); - }); - - describe('autoinject', () => { - class Logger {} - class Service {} - class SubService1 {} - class SubService2 {} - - it('injects using design:paramtypes metadata', function() { - let App = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Logger, Service ])).on( - class App { - constructor(logger, service) { - this.logger = logger; - this.service = service; - } - }); - - let container = new Container(); - let app = container.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - expect(app.service).toEqual(jasmine.any(Service)); - }); - - describe('inheritance', function() { - let ParentApp = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Logger])).on( - class { - constructor(logger) { - this.logger = logger; - } - }); - - - let ChildApp = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Service, Logger])).on( - class extends ParentApp { - constructor(service, ...rest) { - super(...rest); - this.service = service; - } - }); - - let SubChildApp1 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [SubService1, Service, Logger])).on( - class extends ChildApp { - constructor(subService1, ...rest) { - super(...rest); - this.subService1 = subService1; - } - }); - - let SubChildApp2 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [SubService2, Service, Logger])).on( - class extends ChildApp { - constructor(subService2, ...rest) { - super(...rest); - this.subService2 = subService2; - } - }); - - class SubChildApp3 extends ChildApp { - } - - let SubChildApp4 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Logger, SubService1, Service])).on( - class extends ChildApp { - constructor(logger, subService1, service) { - super(service, logger); - this.subService1 = subService1; - } - }); - - let container = new Container(); - - let app1 = container.get(SubChildApp1); - let app2 = container.get(SubChildApp2); - let app3 = container.get(SubChildApp3); - let app4 = container.get(SubChildApp4); - - it('loads dependencies in tree classes', function() { - expect(app1.subService1).toEqual(jasmine.any(SubService1)); - expect(app1.service).toEqual(jasmine.any(Service)); - expect(app1.logger).toEqual(jasmine.any(Logger)); - }); - - it('does not effect other child classes with different parameters', function() { - expect(app2.subService2).toEqual(jasmine.any(SubService2)); - expect(app2.service).toEqual(jasmine.any(Service)); - expect(app2.logger).toEqual(jasmine.any(Logger)); - }); - - it('does inherit injection without own autoinject', function() { - expect(app3.service).toEqual(jasmine.any(Service)); - expect(app3.logger).toEqual(jasmine.any(Logger)); - }); - - it('does allow a changed constructor parameter order', function() { - expect(app4.subService1).toEqual(jasmine.any(SubService1)); - expect(app4.service).toEqual(jasmine.any(Service)); - expect(app4.logger).toEqual(jasmine.any(Logger)); - }); - - it('not fail with inherited inject() method', function() { - class ParentApp { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - Reflect.metadata(ParentApp, 'design:paramtypes', [Logger]); - - class App { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let ChildApp = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Service, Logger])).on( - class extends ParentApp { - constructor(service, ...rest) { - super(...rest); - this.service = service; - } - }); - - let container = new Container(); - - let app1 = container.get(ParentApp); - expect(app1.logger).toEqual(jasmine.any(Logger)); - - let app2 = container.get(ChildApp); - expect(app2.logger).toEqual(jasmine.any(Logger)); - expect(app2.service).toEqual(jasmine.any(Service)); - }); - - it('test variadic arguments (TypeScript metadata)', function() { - const container = new Container(); - const VariadicArg = Object; // TypeScript emits "Object" type for "...rest" param - - class Dep$1 {} - class Dep$2 {} - class Dep$3 {} - class Dep$4 {} - class Dep$5 {} - - const ParentOneDep = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$1])).on( - class ParentOneDep { - constructor(dep1: Dep$1) { - this.dep1 = dep1; - } - } - ); - - const ParentTwoDeps = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$1, Dep$2])).on( - class ParentTwoDeps { - constructor(dep1: Dep$1, dep2: Dep$2) { - this.dep1 = dep1; - this.dep2 = dep2; - } - } - ); - - class ChildZeroDeps$1 extends ParentOneDep {} - class ChildZeroDeps$2 extends ParentTwoDeps {} - - const ChildOneDep$1 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$3, VariadicArg])).on( - class ChildOneDep$1 extends ParentOneDep { - constructor(dep3: Dep$3, ...rest) { - super(...rest); - this.dep3 = dep3; - } - } - ); - { - const a = container.get(ChildOneDep$1); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - } - - const ChildOneDep$2 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$3, VariadicArg])).on( - class ChildOneDep$2 extends ParentTwoDeps { - constructor(dep3: Dep$3, ...rest) { - super(...rest); - this.dep3 = dep3; - } - } - ); - { - const a = container.get(ChildOneDep$2); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep2).toEqual(jasmine.any(Dep$2)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - } - - const ChildTwoDeps$1 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$3, Dep$4, VariadicArg])).on( - class ChildTwoDeps$1 extends ParentOneDep { - constructor(dep3: Dep$3, dep4: Dep$4, ...rest) { - super(...rest); - this.dep3 = dep3; - this.dep4 = dep4; - } - } - ); - const ChildTwoDeps$2 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$3, Dep$4, VariadicArg])).on( - class ChildTwoDeps$2 extends ParentTwoDeps { - constructor(dep3: Dep$3, dep4: Dep$4, ...rest) { - super(...rest); - this.dep3 = dep3; - this.dep4 = dep4; - } - } - ); - - class GrandChildZeroDeps$01 extends ChildZeroDeps$1 {} - { - const a = container.get(GrandChildZeroDeps$01); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - } - - class GrandChildZeroDeps$02 extends ChildZeroDeps$2 {} - { - const a = container.get(GrandChildZeroDeps$02); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep2).toEqual(jasmine.any(Dep$2)); - } - - class GrandChildZeroDeps$11 extends ChildOneDep$1 {} - { - const a = container.get(GrandChildZeroDeps$11); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - } - - class GrandChildZeroDeps$12 extends ChildOneDep$2 {} - { - const a = container.get(GrandChildZeroDeps$12); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep2).toEqual(jasmine.any(Dep$2)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - } - - class GrandChildZeroDeps$21 extends ChildTwoDeps$1 {} - { - const a = container.get(GrandChildZeroDeps$21); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - expect(a.dep4).toEqual(jasmine.any(Dep$4)); - } - - class GrandChildZeroDeps$22 extends ChildTwoDeps$2 {} - { - const a = container.get(GrandChildZeroDeps$22); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep2).toEqual(jasmine.any(Dep$2)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - expect(a.dep4).toEqual(jasmine.any(Dep$4)); - } - - const GrandChildOneDep$01 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$5, VariadicArg])).on( - class GrandChildOneDep$01 extends ChildZeroDeps$1 { - constructor(dep5: Dep$5, ...rest) { - super(...rest); - this.dep5 = dep5; - } - } - ); - { - const a = container.get(GrandChildOneDep$01); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep5).toEqual(jasmine.any(Dep$5)); - } - - const GrandChildOneDep$02 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$5, VariadicArg])).on( - class GrandChildOneDep$02 extends ChildZeroDeps$2 { - constructor(dep5: Dep$5, ...rest) { - super(...rest); - this.dep5 = dep5; - } - } - ); - { - const a = container.get(GrandChildOneDep$02); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep2).toEqual(jasmine.any(Dep$2)); - expect(a.dep5).toEqual(jasmine.any(Dep$5)); - } - - const GrandChildOneDep$11 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$5, VariadicArg])).on( - class GrandChildOneDep$11 extends ChildOneDep$1 { - constructor(dep5: Dep$5, ...rest) { - super(...rest); - this.dep5 = dep5; - } - } - ); - { - const a = container.get(GrandChildOneDep$11); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - expect(a.dep5).toEqual(jasmine.any(Dep$5)); - } - - const GrandChildOneDep$12 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$5, VariadicArg])).on( - class GrandChildOneDep$12 extends ChildOneDep$2 { - constructor(dep5: Dep$5, ...rest) { - super(...rest); - this.dep5 = dep5; - } - } - ); - { - const a = container.get(GrandChildOneDep$12); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep2).toEqual(jasmine.any(Dep$2)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - expect(a.dep5).toEqual(jasmine.any(Dep$5)); - } - - const GrandChildOneDep$21 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$5, VariadicArg])).on( - class GrandChildOneDep$21 extends ChildTwoDeps$1 { - constructor(dep5: Dep$5, ...rest) { - super(...rest); - this.dep5 = dep5; - } - } - ); - { - const a = container.get(GrandChildOneDep$21); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - expect(a.dep4).toEqual(jasmine.any(Dep$4)); - expect(a.dep5).toEqual(jasmine.any(Dep$5)); - } - - const GrandChildOneDep$22 = decorators(autoinject(), Reflect.metadata('design:paramtypes', [Dep$5, VariadicArg])).on( - class GrandChildOneDep$22 extends ChildTwoDeps$2 { - constructor(dep5: Dep$5, ...rest) { - super(...rest); - this.dep5 = dep5; - } - } - ); - { - const a = container.get(GrandChildOneDep$22); - expect(a.dep1).toEqual(jasmine.any(Dep$1)); - expect(a.dep2).toEqual(jasmine.any(Dep$2)); - expect(a.dep3).toEqual(jasmine.any(Dep$3)); - expect(a.dep4).toEqual(jasmine.any(Dep$4)); - expect(a.dep5).toEqual(jasmine.any(Dep$5)); - } - }); - }); - }); - - describe('inject as param decorator', ()=> { - it('a simple dependency (Typescript)', () => { - class Logger {} - - class App1 { - constructor(logger) { - this.logger = logger; - } - } - - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App1); - inject()(App1, null, 0); - decorators( autoinject() ).on(App1); - - let container = new Container(); - let app1 = container.get(App1); - - let logger = app1.logger; - - expect(logger).toEqual(jasmine.any(Logger)); - }); - - // not very useful maybe, but allowed in the current implementation - it('a simple dependency (ES6)', () => { - class Logger {} - - class App1 { - constructor(logger) { - this.logger = logger; - } - } - - inject(Logger)(App1, null, 0); - - let container = new Container(); - let app1 = container.get(App1); - - let logger = app1.logger; - - expect(logger).toEqual(jasmine.any(Logger)); - }); - - it('fixes the dependency derived from metadata (Typescript)', () => { - class LoggerBase {} - class Logger extends LoggerBase {} - - class App1 { - constructor(logger) { - this.logger = logger; - } - } - - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App1); - inject(LoggerBase)(App1, null, 0); - decorators( autoinject() ).on(App1); - - let container = new Container(); - let app1 = container.get(App1); - - let logger = app1.logger; - - expect(logger).not.toEqual(jasmine.any(Logger)); - expect(logger).toEqual(jasmine.any(LoggerBase)); - }); - - // not sure if that's useful, but current implementation allows it - it('on a member function', () => { - class Logger {} - - /* - class App1 { - @inject(Logger) - member(logger){ - this.logger=logger; - } - } - */ - class App1 { - member(logger) { - this.logger = logger; - } - } - decorators(inject(Logger)).on(App1.prototype.member); - - let container = new Container(); - let app1 = container.get(App1); - let member = container.get(app1.member); - - let logger = member.logger; - - expect(logger).toEqual(jasmine.any(Logger)); - }); - }); -}); - diff --git a/test/injection.spec.ts b/test/injection.spec.ts new file mode 100644 index 0000000..07798f2 --- /dev/null +++ b/test/injection.spec.ts @@ -0,0 +1,598 @@ +import './setup'; +import { Container } from '../src/container'; +import { inject, autoinject } from '../src/injection'; + +describe('injection', () => { + it('instantiates class without injected services', () => { + class App { } + + const container = new Container(); + const app = container.get(App); + + expect(app).toEqual(jasmine.any(App)); + }); + + describe('inject', () => { + it('uses public static inject method (ES6)', () => { + class Logger { } + + class App { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app = container.get(App); + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + + it('uses public static inject property (TypeScript,CoffeeScript,ES5)', () => { + class Logger { } + + class App { + public static inject: Logger[]; + constructor(public logger: Logger) { + this.logger = logger; + } + } + + App.inject = [Logger]; + + const container = new Container(); + const app = container.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + + it('uses inject decorator', () => { + class Logger { } + + @inject(Logger) + class App { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app = container.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + + it('uses inject as param decorator', () => { + + class Logger { } + + @inject(Logger) + @autoinject() + class App1 { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + + const logger = app1.logger; + + expect(logger).toEqual(jasmine.any(Logger)); + }); + + describe('inheritance', () => { + class Logger { } + class Service { } + + it('loads dependencies for the parent class', () => { + class ParentApp { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + class ChildApp extends ParentApp { + constructor(...rest) { + // @ts-ignore + super(...rest); + } + } + + const container = new Container(); + const app = container.get(ChildApp); + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + + it('loads dependencies for the child class', () => { + class ParentApp { + } + + class ChildApp extends ParentApp { + public static inject() { return [Service]; } + constructor(public service: Service, ...rest) { + // @ts-ignore + super(...rest); + this.service = service; + } + } + + const container = new Container(); + const app = container.get(ChildApp); + expect(app.service).toEqual(jasmine.any(Service)); + }); + + it('loads dependencies for both classes', () => { + class ParentApp { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + class ChildApp extends ParentApp { + public static inject() { return [Service]; } + constructor(public service: Service, ...rest) { + // @ts-ignore + super(...rest); + this.service = service; + } + } + + const container = new Container(); + const app = container.get(ChildApp); + expect(app.service).toEqual(jasmine.any(Service)); + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + }); + }); + + describe('autoinject', () => { + class Logger { } + class Service { } + class SubService1 { } + class SubService2 { } + + it('injects using design:paramtypes metadata', () => { + + @autoinject() + class App { + constructor(public logger: Logger, public service: Service) { + } + } + + const container = new Container(); + const app = container.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + expect(app.service).toEqual(jasmine.any(Service)); + }); + + describe('inheritance', () => { + @autoinject() + class ParentApp { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + @autoinject() + class ChildApp extends ParentApp { + constructor(public service: Service, ...rest) { + // @ts-ignore + super(...rest); + this.service = service; + } + } + + @autoinject() + class SubChildApp1 extends ChildApp { + constructor(public subService1: SubService1, ...rest) { + // @ts-ignore + super(...rest); + this.subService1 = subService1; + } + } + + @autoinject() + class SubChildApp2 extends ChildApp { + constructor(public subService2: SubService2, ...rest) { + // @ts-ignore + super(...rest); + this.subService2 = subService2; + } + } + + class SubChildApp3 extends ChildApp { + } + + @autoinject() + class SubChildApp4 extends ChildApp { + constructor(public logger: Logger, public subService1: SubService1, public service: Service) { + super(service, logger); + this.subService1 = subService1; + } + } + + const container = new Container(); + + const app1 = container.get(SubChildApp1); + const app2 = container.get(SubChildApp2); + const app3 = container.get(SubChildApp3); + const app4 = container.get(SubChildApp4); + + it('loads dependencies in tree classes', () => { + expect(app1.subService1).toEqual(jasmine.any(SubService1)); + expect(app1.service).toEqual(jasmine.any(Service)); + expect(app1.logger).toEqual(jasmine.any(Logger)); + }); + + it('does not effect other child classes with different parameters', () => { + expect(app2.subService2).toEqual(jasmine.any(SubService2)); + expect(app2.service).toEqual(jasmine.any(Service)); + expect(app2.logger).toEqual(jasmine.any(Logger)); + }); + + it('does inherit injection without own autoinject', () => { + expect(app3.service).toEqual(jasmine.any(Service)); + expect(app3.logger).toEqual(jasmine.any(Logger)); + }); + + it('does allow a changed constructor parameter order', () => { + expect(app4.subService1).toEqual(jasmine.any(SubService1)); + expect(app4.service).toEqual(jasmine.any(Service)); + expect(app4.logger).toEqual(jasmine.any(Logger)); + }); + + it('not fail with inherited inject() method', () => { + class ParentApp { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + Reflect.set(ParentApp, 'design:paramtypes', [Logger]); + + @inject(Logger) + class App { + public static inject() { return [Logger]; } + constructor(public logger: Logger) { + this.logger = logger; + } + } + + @autoinject() + class ChildApp extends ParentApp { + constructor(public service: Service, ...rest) { + // @ts-ignore + super(...rest); + this.service = service; + } + } + + const container = new Container(); + + const app1 = container.get(ParentApp); + expect(app1.logger).toEqual(jasmine.any(Logger)); + + const app2 = container.get(ChildApp); + expect(app2.logger).toEqual(jasmine.any(Logger)); + expect(app2.service).toEqual(jasmine.any(Service)); + }); + + it('test variadic arguments (TypeScript metadata)', () => { + const container = new Container(); + const VariadicArg = Object; // TypeScript emits "Object" type for "...rest" param + + class Dep$1 { } + class Dep$2 { } + class Dep$3 { } + class Dep$4 { } + class Dep$5 { } + + @autoinject() + class ParentOneDep { + constructor(public dep1: Dep$1) { + this.dep1 = dep1; + } + } + + @autoinject() + class ParentTwoDeps { + constructor(public dep1: Dep$1, public dep2: Dep$2) { + this.dep1 = dep1; + this.dep2 = dep2; + } + } + + class ChildZeroDeps$1 extends ParentOneDep { } + class ChildZeroDeps$2 extends ParentTwoDeps { } + + @autoinject() + class ChildOneDep$1 extends ParentOneDep { + constructor(public dep3: Dep$3, ...rest) { + // @ts-ignore + super(...rest); + this.dep3 = dep3; + } + } + + { + const a = container.get(ChildOneDep$1); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + } + + @autoinject() + class ChildOneDep$2 extends ParentTwoDeps { + constructor(public dep3: Dep$3, ...rest) { + // @ts-ignore + super(...rest); + this.dep3 = dep3; + } + } + + { + const a = container.get(ChildOneDep$2); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep2).toEqual(jasmine.any(Dep$2)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + } + + @autoinject() + class ChildTwoDeps$1 extends ParentOneDep { + constructor(public dep3: Dep$3, public dep4: Dep$4, ...rest) { + // @ts-ignore + super(...rest); + this.dep3 = dep3; + this.dep4 = dep4; + } + } + + @autoinject() + class ChildTwoDeps$2 extends ParentTwoDeps { + constructor(public dep3: Dep$3, public dep4: Dep$4, ...rest) { + // @ts-ignore + super(...rest); + this.dep3 = dep3; + this.dep4 = dep4; + } + } + + class GrandChildZeroDeps$01 extends ChildZeroDeps$1 { } + { + const a = container.get(GrandChildZeroDeps$01); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + } + + class GrandChildZeroDeps$02 extends ChildZeroDeps$2 { } + { + const a = container.get(GrandChildZeroDeps$02); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep2).toEqual(jasmine.any(Dep$2)); + } + + class GrandChildZeroDeps$11 extends ChildOneDep$1 { } + { + const a = container.get(GrandChildZeroDeps$11); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + } + + class GrandChildZeroDeps$12 extends ChildOneDep$2 { } + { + const a = container.get(GrandChildZeroDeps$12); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep2).toEqual(jasmine.any(Dep$2)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + } + + class GrandChildZeroDeps$21 extends ChildTwoDeps$1 { } + { + const a = container.get(GrandChildZeroDeps$21); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + expect(a.dep4).toEqual(jasmine.any(Dep$4)); + } + + class GrandChildZeroDeps$22 extends ChildTwoDeps$2 { } + { + const a = container.get(GrandChildZeroDeps$22); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep2).toEqual(jasmine.any(Dep$2)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + expect(a.dep4).toEqual(jasmine.any(Dep$4)); + } + + @autoinject() + class GrandChildOneDep$01 extends ChildZeroDeps$1 { + constructor(public dep5: Dep$5, ...rest) { + // @ts-ignore + super(...rest); + this.dep5 = dep5; + } + } + + { + const a = container.get(GrandChildOneDep$01); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep5).toEqual(jasmine.any(Dep$5)); + } + + @autoinject() + class GrandChildOneDep$02 extends ChildZeroDeps$2 { + constructor(public dep5: Dep$5, ...rest) { + // @ts-ignore + super(...rest); + this.dep5 = dep5; + } + } + { + const a = container.get(GrandChildOneDep$02); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep2).toEqual(jasmine.any(Dep$2)); + expect(a.dep5).toEqual(jasmine.any(Dep$5)); + } + + @autoinject() + class GrandChildOneDep$11 extends ChildOneDep$1 { + constructor(public dep5: Dep$5, ...rest) { + // @ts-ignore + super(...rest); + this.dep5 = dep5; + } + } + { + const a = container.get(GrandChildOneDep$11); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + expect(a.dep5).toEqual(jasmine.any(Dep$5)); + } + + @autoinject() + class GrandChildOneDep$12 extends ChildOneDep$2 { + constructor(public dep5: Dep$5, ...rest) { + // @ts-ignore + super(...rest); + this.dep5 = dep5; + } + } + { + const a = container.get(GrandChildOneDep$12); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep2).toEqual(jasmine.any(Dep$2)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + expect(a.dep5).toEqual(jasmine.any(Dep$5)); + } + + @autoinject() + class GrandChildOneDep$21 extends ChildTwoDeps$1 { + constructor(public dep5: Dep$5, ...rest) { + // @ts-ignore + super(...rest); + this.dep5 = dep5; + } + } + { + const a = container.get(GrandChildOneDep$21); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + expect(a.dep4).toEqual(jasmine.any(Dep$4)); + expect(a.dep5).toEqual(jasmine.any(Dep$5)); + } + + @autoinject() + class GrandChildOneDep$22 extends ChildTwoDeps$2 { + constructor(public dep5: Dep$5, ...rest) { + // @ts-ignore + super(...rest); + this.dep5 = dep5; + } + } + + { + const a = container.get(GrandChildOneDep$22); + expect(a.dep1).toEqual(jasmine.any(Dep$1)); + expect(a.dep2).toEqual(jasmine.any(Dep$2)); + expect(a.dep3).toEqual(jasmine.any(Dep$3)); + expect(a.dep4).toEqual(jasmine.any(Dep$4)); + expect(a.dep5).toEqual(jasmine.any(Dep$5)); + } + }); + }); + }); + + describe('inject as param decorator', () => { + it('a simple dependency (Typescript)', () => { + class Logger { } + + @inject(Logger) + @autoinject() + class App1 { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + + const logger = app1.logger; + + expect(logger).toEqual(jasmine.any(Logger)); + }); + + // not very useful maybe, but allowed in the current implementation + it('a simple dependency (ES6)', () => { + class Logger { } + + class App1 { + constructor(public logger: Logger) { + this.logger = logger; + } + } + + inject(Logger)(App1, null, 0); + + const container = new Container(); + const app1 = container.get(App1); + + const logger = app1.logger; + + expect(logger).toEqual(jasmine.any(Logger)); + }); + + it('fixes the dependency derived from metadata (Typescript)', () => { + class LoggerBase { } + class Logger extends LoggerBase { } + @inject(LoggerBase) + @autoinject() + class App1 { + constructor(public logger: LoggerBase) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + + const logger = app1.logger; + + expect(logger).not.toEqual(jasmine.any(Logger)); + expect(logger).toEqual(jasmine.any(LoggerBase)); + }); + + // not sure if that's useful, but current implementation allows it + it('on a member function', () => { + class Logger { } + + /* + class App1 { + @inject(Logger) + member(logger){ + this.logger=logger; + } + } + */ + class App1 { + public logger; + @inject(Logger) + public member(logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + // @ts-ignore + const member: App1 = container.get(app1.member); + + const logger = member.logger; + + expect(logger).toEqual(jasmine.any(Logger)); + }); + }); +}); diff --git a/test/jasmine.d.ts b/test/jasmine.d.ts new file mode 100644 index 0000000..3daf8c6 --- /dev/null +++ b/test/jasmine.d.ts @@ -0,0 +1,7 @@ +declare var beforeAll: (fn: () => void) => void; +declare var beforeEach: (fn: () => void) => void; +declare var afterEach: (fn: () => void) => void; +declare var describe: (name: string, fn: () => void) => void; +declare var it: (name: string, fn: (done?: () => void) => void) => void; +declare var expect: (x: any) => any; +declare var jasmine: { any: (x: any) => any, createSpy: () => any; }; diff --git a/test/main.ts b/test/main.ts new file mode 100644 index 0000000..f86ce0c --- /dev/null +++ b/test/main.ts @@ -0,0 +1,50 @@ +let allTestFiles: string[] = []; +let TEST_REGEXP = /^\/base\/dist\/test\/test\/[^\/]+\.js$/i; + +interface Window { + __karma__: any; + require: any; +} + +// Get a list of all the test files to include +Object.keys(window.__karma__.files).forEach(file => { + if (TEST_REGEXP.test(file) && file !== '/base/dist/test/test/main.js') { + // Normalize paths to RequireJS module names. + // If you require sub-dependencies of test files to be loaded as-is (requiring file extension) + // then do not normalize the paths + const normalizedTestModule = file.replace(/^\/base\/|\.js$/g, ''); + allTestFiles.push(normalizedTestModule); + } +}); + +let started = false; + +window.require.config({ + // Karma serves files under /base, which is the basePath from your config file + baseUrl: '/base', + + deps: ['aurelia-pal-browser', 'aurelia-polyfills'], + + // we have to kickoff jasmine, as it is asynchronous + callback: (pal: { initialize: () => void; }) => { + if (started) { + return; + } + started = true; + pal.initialize(); + window.require(allTestFiles, () => window.__karma__.start()); + }, + paths: { + /* tslint:disable:max-line-length */ + 'aurelia-metadata': '/base/node_modules/aurelia-metadata/dist/amd/aurelia-metadata', + 'aurelia-pal': '/base/node_modules/aurelia-pal/dist/amd/aurelia-pal', + 'aurelia-pal-browser': '/base/node_modules/aurelia-pal-browser/dist/amd/aurelia-pal-browser', + 'aurelia-polyfills': '/base/node_modules/aurelia-polyfills/dist/amd/aurelia-polyfills', + 'tslib': '/base/node_modules/tslib/tslib', + /* tslint:enable:max-line-length */ + /* tslint:disable */ + 'text': '/base/node_modules/requirejs-text/text', + /* tslint:enable */ + }, + packages: [ ] +}); diff --git a/test/metadata.spec.js b/test/metadata.spec.ts similarity index 55% rename from test/metadata.spec.js rename to test/metadata.spec.ts index 29914fc..4726ca3 100644 --- a/test/metadata.spec.js +++ b/test/metadata.spec.ts @@ -1,28 +1,28 @@ import './setup'; -import {Parent} from '../src/resolvers'; -import {Container} from '../src/container'; +import { Container } from '../src/container'; +import { Parent } from '../src/resolvers'; describe('Parent', () => { it('should return the key from the parent container when present', () => { - let sut = new Parent('test'); - let parent = new Container(); - let childContainer = parent.createChild(); - let instance = {}; - let wrongInstance = {}; + const sut = new Parent('test'); + const parent = new Container(); + const childContainer = parent.createChild(); + const instance = {}; + const wrongInstance = {}; parent.registerInstance('test', instance); childContainer.registerInstance('test', wrongInstance); - let result = sut.get(childContainer); + const result = sut.get(childContainer); expect(result).toBe(instance); expect(result).not.toBe(wrongInstance); }); it('should return null when the parent container is not present', () => { - let sut = new Parent('test'); - let childContainer = new Container(); - let instance = {}; + const sut = new Parent('test'); + const childContainer = new Container(); + const instance = {}; childContainer.registerInstance('test', instance); expect(sut.get(childContainer)).toBe(null); diff --git a/test/reflect.d.ts b/test/reflect.d.ts new file mode 100644 index 0000000..1c22e99 --- /dev/null +++ b/test/reflect.d.ts @@ -0,0 +1,4 @@ +// tslint:disable-next-line:no-namespace +declare namespace Reflect { + function metadata(...rest: any[]): any; +} diff --git a/test/registration.spec.js b/test/registration.spec.js deleted file mode 100644 index ffc14d0..0000000 --- a/test/registration.spec.js +++ /dev/null @@ -1,137 +0,0 @@ -import './setup'; -import {Container} from '../src/container'; -import {transient, singleton} from '../src/registrations'; -import {decorators} from 'aurelia-metadata'; - -describe('registration', () => { - it('configures singleton via decorators helper (ES5/6)', () => { - let Logger = decorators(singleton()).on(class {}); - - class App1 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class App2 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).toBe(app2.logger); - }); - - it('configures transient (non singleton) via metadata method (ES5/6)', () => { - let Logger = decorators(transient()).on(class { }); - - class App1 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class App2 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).not.toBe(app2.logger); - }); - - it('uses base metadata method (ES5/6) when derived does not specify', () => { - let LoggerBase = decorators(transient()).on(class {}); - - class Logger extends LoggerBase { - - } - - class App1 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class App2 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).not.toBe(app2.logger); - }); - - it('overrides base metadata method (ES5/6) with derived configuration', () => { - let LoggerBase = decorators(singleton()).on(class { }); - let Logger = decorators(transient()).on(class extends LoggerBase {}); - - class App1 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class App2 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).not.toBe(app2.logger); - }); - - it('doesn\'t get hidden when a super class adds metadata which doesn\'t include the base registration type', () => { - let LoggerBase = decorators(transient()).on(class {}); - - class Logger extends LoggerBase { - } - - Reflect.defineMetadata('something', 'test', Logger); - - class App1 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - class App2 { - static inject() { return [Logger]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let app1 = container.get(App1); - let app2 = container.get(App2); - - expect(app1.logger).not.toBe(app2.logger); - }); -}); - diff --git a/test/registration.spec.ts b/test/registration.spec.ts new file mode 100644 index 0000000..07d15cf --- /dev/null +++ b/test/registration.spec.ts @@ -0,0 +1,142 @@ +import './setup'; +import { Container } from '../src/container'; +import { transient, singleton } from '../src/registrations'; + +describe('registration', () => { + it('configures singleton via decorators helper (ES5/6)', () => { + @singleton() + class Logger { } + + class App1 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + class App2 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).toBe(app2.logger); + }); + + it('configures transient (non singleton) via metadata method (ES5/6)', () => { + @transient() + class Logger { } + + class App1 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + class App2 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).not.toBe(app2.logger); + }); + + it('uses base metadata method (ES5/6) when derived does not specify', () => { + @transient() + class LoggerBase { } + + class Logger extends LoggerBase { + + } + + class App1 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + class App2 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).not.toBe(app2.logger); + }); + + it('overrides base metadata method (ES5/6) with derived configuration', () => { + @singleton() + class LoggerBase { } + @transient() + class Logger extends LoggerBase { } + + class App1 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + class App2 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).not.toBe(app2.logger); + }); + + it('doesn\'t get hidden when a super class adds metadata which doesn\'t include the base registration type', () => { + @transient() + class LoggerBase { } + + class Logger extends LoggerBase { + } + + // @ts-ignore + Reflect.defineMetadata('something', 'test', Logger); + + class App1 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + class App2 { + public static inject() { return [Logger]; } + constructor(public logger) { + this.logger = logger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + const app2 = container.get(App2); + + expect(app1.logger).not.toBe(app2.logger); + }); +}); diff --git a/test/resolver.spec.js b/test/resolver.spec.js deleted file mode 100644 index f2be0a8..0000000 --- a/test/resolver.spec.js +++ /dev/null @@ -1,786 +0,0 @@ -import './setup'; -import {Container} from '../src/container'; -import {Lazy, All, Optional, Parent, Factory, NewInstance, lazy, all, optional, parent, factory, newInstance} from '../src/resolvers'; -import {inject, autoinject} from '../src/injection'; -import {decorators} from 'aurelia-metadata'; - -describe('resolver', () => { - describe('Custom resolvers', () => { - describe('Lazy', () => { - it('provides a function which, when called, will return the instance', () => { - class Logger {} - - class App1 { - static inject() { return [Lazy.of(Logger)]; } - constructor(getLogger) { - this.getLogger = getLogger; - } - } - - let container = new Container(); - let app1 = container.get(App1); - - let logger = app1.getLogger; - - expect(logger()).toEqual(jasmine.any(Logger)); - }); - - it('provides a function which, when called, will return the instance using decorator', () => { - class Logger {} - - class App { - constructor(getLogger: () => Logger) { - this.getLogger = getLogger; - } - } - decorators( Reflect.metadata('design:paramtypes', [()=>Logger]) ).on(App); - lazy(Logger)(App, null, 0); - decorators( autoinject() ).on(App); - - let container = new Container(); - let app = container.get(App); - - let logger = app.getLogger; - expect(logger()).toEqual(jasmine.any(Logger)); - }); - }); - - describe('All', ()=> { - it('resolves all matching dependencies as an array of instances', () => { - class LoggerBase {} - - class VerboseLogger extends LoggerBase {} - - class Logger extends LoggerBase {} - - class App { - static inject() { return [All.of(LoggerBase)]; } - constructor(loggers) { - this.loggers = loggers; - } - } - - let container = new Container(); - container.registerSingleton(LoggerBase, VerboseLogger); - container.registerTransient(LoggerBase, Logger); - let app = container.get(App); - - expect(app.loggers).toEqual(jasmine.any(Array)); - expect(app.loggers.length).toBe(2); - expect(app.loggers[0]).toEqual(jasmine.any(VerboseLogger)); - expect(app.loggers[1]).toEqual(jasmine.any(Logger)); - }); - - it('resolves all matching dependencies as an array of instances using decorator', () => { - class LoggerBase {} - - class VerboseLogger extends LoggerBase {} - - class Logger extends LoggerBase {} - - class App { - constructor(loggers) { - this.loggers = loggers; - } - } - decorators( Reflect.metadata('design:paramtypes', [LoggerBase]) ).on(App); - all(LoggerBase)(App, null, 0); - decorators( autoinject() ).on(App); - - let container = new Container(); - container.registerSingleton(LoggerBase, VerboseLogger); - container.registerTransient(LoggerBase, Logger); - let app = container.get(App); - - expect(app.loggers).toEqual(jasmine.any(Array)); - expect(app.loggers.length).toBe(2); - expect(app.loggers[0]).toEqual(jasmine.any(VerboseLogger)); - expect(app.loggers[1]).toEqual(jasmine.any(Logger)); - }); - }); - - describe('Optional', ()=> { - it('injects the instance if its registered in the container', () => { - class Logger {} - - class App { - static inject() { return [Optional.of(Logger)]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - container.registerSingleton(Logger, Logger); - let app = container.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - - it('injects the instance if its registered in the container using decorator', () => { - class Logger {} - - class App { - constructor(logger) { - this.logger = logger; - } - } - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App); - optional()(App, null, 0); - decorators( autoinject() ).on(App); - - let container = new Container(); - container.registerSingleton(Logger, Logger); - let app = container.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - - it('injects null if key is not registered in the container', () => { - class VerboseLogger {} - class Logger {} - - class App { - static inject() { return [Optional.of(Logger)]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - container.registerSingleton(VerboseLogger, Logger); - let app = container.get(App); - - expect(app.logger).toBe(null); - }); - - it('injects null if key is not registered in the container using decorator', () => { - class VerboseLogger {} - class Logger {} - - class App { - constructor(logger) { - this.logger = logger; - } - } - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App); - optional()(App, null, 0); - decorators( autoinject() ).on(App); - - let container = new Container(); - container.registerSingleton(VerboseLogger, Logger); - let app = container.get(App); - - expect(app.logger).toBe(null); - }); - - it('injects null if key nor function is registered in the container', () => { - class VerboseLogger {} - class Logger {} - - class App { - static inject() { return [Optional.of(Logger)]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let app = container.get(App); - - expect(app.logger).toBe(null); - }); - - it('doesn\'t check the parent container hierarchy when checkParent is false', () => { - class Logger {} - - class App { - static inject() { return [Optional.of(Logger, false)]; } - constructor(logger) { - this.logger = logger; - } - } - - let parentContainer = new Container(); - parentContainer.registerSingleton(Logger, Logger); - - let childContainer = parentContainer.createChild(); - childContainer.registerSingleton(App, App); - - let app = childContainer.get(App); - - expect(app.logger).toBe(null); - }); - - it('doesn\'t check the parent container hierarchy when checkParent is false using decorator', () => { - class Logger {} - - class App { - constructor(logger) { - this.logger = logger; - } - } - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App); - optional(false)(App, null, 0); - decorators( autoinject() ).on(App); - - let parentContainer = new Container(); - parentContainer.registerSingleton(Logger, Logger); - - let childContainer = parentContainer.createChild(); - childContainer.registerSingleton(App, App); - - let app = childContainer.get(App); - - expect(app.logger).toBe(null); - }); - - it('checks the parent container hierarchy when checkParent is true or default', () => { - class Logger {} - - class App { - static inject() { return [Optional.of(Logger)]; } - constructor(logger) { - this.logger = logger; - } - } - - let parentContainer = new Container(); - parentContainer.registerSingleton(Logger, Logger); - - let childContainer = parentContainer.createChild(); - childContainer.registerSingleton(App, App); - - let app = childContainer.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - - it('checks the parent container hierarchy when checkParent is true or default using decorator', () => { - class Logger {} - - class App { - constructor(logger) { - this.logger = logger; - } - } - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App); - optional()(App, null, 0); - decorators( autoinject() ).on(App); - - let parentContainer = new Container(); - parentContainer.registerSingleton(Logger, Logger); - - let childContainer = parentContainer.createChild(); - childContainer.registerSingleton(App, App); - - let app = childContainer.get(App); - - expect(app.logger).toEqual(jasmine.any(Logger)); - }); - }); - - describe('Parent', ()=> { - it('bypasses the current container and injects instance from parent container', () =>{ - class Logger {} - - class App { - static inject() { return [Parent.of(Logger)]; } - constructor(logger) { - this.logger = logger; - } - } - - let parentContainer = new Container(); - let parentInstance = new Logger(); - parentContainer.registerInstance(Logger, parentInstance); - - let childContainer = parentContainer.createChild(); - let childInstance = new Logger(); - childContainer.registerInstance(Logger, childInstance); - childContainer.registerSingleton(App, App); - - let app = childContainer.get(App); - - expect(app.logger).toBe(parentInstance); - }); - - it('bypasses the current container and injects instance from parent container using decorator', () =>{ - class Logger {} - - class App { - constructor(logger) { - this.logger = logger; - } - } - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App); - parent(App, null, 0); - decorators( autoinject() ).on(App); - - let parentContainer = new Container(); - let parentInstance = new Logger(); - parentContainer.registerInstance(Logger, parentInstance); - - let childContainer = parentContainer.createChild(); - let childInstance = new Logger(); - childContainer.registerInstance(Logger, childInstance); - childContainer.registerSingleton(App, App); - - let app = childContainer.get(App); - - expect(app.logger).toBe(parentInstance); - }); - - it('returns null when no parent container exists', () =>{ - class Logger {} - - class App { - static inject() { return [Parent.of(Logger)]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let instance = new Logger(); - container.registerInstance(Logger, instance); - - let app = container.get(App); - - expect(app.logger).toBe(null); - }); - - it('returns null when no parent container exists using decorator', () =>{ - class Logger {} - - class App { - constructor(logger) { - this.logger = logger; - } - } - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App); - parent(App, null, 0); - decorators( autoinject() ).on(App); - - let container = new Container(); - let instance = new Logger(); - container.registerInstance(Logger, instance); - - let app = container.get(App); - - expect(app.logger).toBe(null); - }); - }); - - describe('Factory', () => { - let container; - let app; - let logger; - let service; - let data = 'test'; - - class Logger {} - - class Service { - static inject() { return [Factory.of(Logger)]; } - constructor(getLogger, data) { - this.getLogger = getLogger; - this.data = data; - } - } - - class App { - static inject() { return [Factory.of(Service)]; } - constructor(GetService) { - this.GetService = GetService; - this.service = new GetService(data); - } - } - - beforeEach(() => { - container = new Container(); - }); - - it('provides a function which, when called, will return the instance', () => { - app = container.get(App); - service = app.GetService; - expect(service()).toEqual(jasmine.any(Service)); - }); - - it('passes data in to the constructor as the second argument', () => { - app = container.get(App); - expect(app.service.data).toEqual(data); - }); - }); - - describe('Factory decorator', () => { - let container; - let app; - let logger; - let service; - let data = 'test'; - - class Logger {} - - class Service { - constructor(getLogger, data) { - this.getLogger = getLogger; - this.data = data; - } - } - decorators( Reflect.metadata('design:paramtypes', [() => Logger]) ).on(Service); - factory(Logger)(Service, null, 0); - decorators( autoinject() ).on(Service); - - class App { - constructor(GetService) { - this.GetService = GetService; - this.service = new GetService(data); - } - } - decorators( Reflect.metadata('design:paramtypes', [() => Service]) ).on(App); - factory(Service)(App, null, 0); - decorators( autoinject() ).on(App); - - beforeEach(() => { - container = new Container(); - }); - - it('provides a function which, when called, will return the instance', () => { - app = container.get(App); - service = app.GetService; - expect(service()).toEqual(jasmine.any(Service)); - }); - - it('passes data in to the constructor as the second argument', () => { - app = container.get(App); - expect(app.service.data).toEqual(data); - }); - }); - - describe('NewInstance', () => { - class Logger { - constructor(dep?) { - this.dep = dep; - } - } - - class Dependency {} - - it('inject a new instance of a dependency, without regard for existing instances in the container', () => { - class App1 { - static inject() { return [NewInstance.of(Logger)]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let logger = container.get(Logger); - let app1 = container.get(App1); - - expect(app1.logger).toEqual(jasmine.any(Logger)); - expect(app1.logger).not.toBe(logger); - }); - - it('decorate to inject a new instance of a dependency', () => { - class App1 { - constructor(logger) { - this.logger = logger; - } - } - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App1); - newInstance()(App1, null, 0); - decorators( autoinject() ).on(App1); - - let container = new Container(); - let logger = container.get(Logger); - let app1 = container.get(App1); - - expect(app1.logger).toEqual(jasmine.any(Logger)); - expect(app1.logger).not.toBe(logger); - }); - - it('decorate to inject a new instance of a dependency under a new key', () => { - class App1 { - constructor(logger) { - this.logger = logger; - } - } - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App1); - newInstance('aKey')(App1, null, 0); - decorators( autoinject() ).on(App1); - - let container = new Container(); - let logger = container.get('akey'); - let app1 = container.get(App1); - - expect(app1.logger).toEqual(jasmine.any(Logger)); - expect(app1.logger).not.toBe(logger); - }); - - it('inject a new instance of a dependency, with instance dynamic dependency', () => { - class App1 { - static inject() { return [NewInstance.of(Logger, Dependency)]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let logger = container.get(Logger); - let app1 = container.get(App1); - - expect(app1.logger).toEqual(jasmine.any(Logger)); - expect(app1.logger).not.toBe(logger); - expect(app1.logger.dep).toEqual(jasmine.any(Dependency)); - }); - - it('decorate to inject a new instance of a dependency, with instance dynamic dependency', () => { - class App1 { - constructor(logger) { - this.logger = logger; - } - } - - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App1); - newInstance(Logger, Dependency)(App1, null, 0); - decorators( autoinject() ).on(App1); - - let container = new Container(); - let logger = container.get(Logger); - let app1 = container.get(App1); - - expect(app1.logger).toEqual(jasmine.any(Logger)); - expect(app1.logger).not.toBe(logger); - expect(app1.logger.dep).toEqual(jasmine.any(Dependency)); - }); - - it('inject a new instance of a dependency, with resolver dynamic dependency', () => { - class App1 { - static inject() { return [NewInstance.of(Logger, Lazy.of(Dependency))]; } - constructor(logger) { - this.logger = logger; - } - } - - let container = new Container(); - let logger = container.get(Logger); - let app1 = container.get(App1); - - expect(app1.logger).toEqual(jasmine.any(Logger)); - expect(app1.logger).not.toBe(logger); - expect(app1.logger.dep()).toEqual(jasmine.any(Dependency)); - }); - - it('decorate to inject a new instance of a dependency, with resolver dynamic dependency', () => { - class App1 { - constructor(logger) { - this.logger = logger; - } - } - - decorators( Reflect.metadata('design:paramtypes', [Logger]) ).on(App1); - newInstance(Logger, Lazy.of(Dependency))(App1, null, 0); - decorators( autoinject() ).on(App1); - - let container = new Container(); - let logger = container.get(Logger); - let app1 = container.get(App1); - - expect(app1.logger).toEqual(jasmine.any(Logger)); - expect(app1.logger).not.toBe(logger); - expect(app1.logger.dep()).toEqual(jasmine.any(Dependency)); - }); - }); - }); - - describe('inheritance with parameter decorators', () => { - class Dependency {} - class LoggerBase { - constructor(dep?) { - this.dep = dep; - } - } - class VerboseLogger extends LoggerBase {} - class Logger extends LoggerBase {} - class Service {} - class SubService1 {} - class SubService2 {} - - class ParentApp { - constructor(logger) { - this.logger = logger; - } - } - decorators(Reflect.metadata('design:paramtypes', [()=>Logger])).on(ParentApp); - lazy(Logger)(ParentApp, null, 0); - decorators( autoinject() ).on(ParentApp); - - class ChildApp extends ParentApp { - constructor(service, ...rest) { - super(...rest); - this.service = service; - } - } - decorators(Reflect.metadata('design:paramtypes', [Service, ()=>Logger])).on(ChildApp); - lazy(Logger)(ChildApp, null, 1); - decorators( autoinject() ).on(ChildApp); - - class SubChildApp1 extends ChildApp { - constructor(subService1, ...rest) { - super(...rest); - this.subService1 = subService1; - } - } - decorators(Reflect.metadata('design:paramtypes', [()=>SubService1, Service, ()=>Logger])).on(SubChildApp1); - lazy(SubService1)(SubChildApp1, null, 0); - lazy(Logger)(SubChildApp1, null, 2); - decorators( autoinject() ).on(SubChildApp1); - - class SubChildApp2 extends ChildApp { - constructor(subService2, ...rest) { - super(...rest); - this.subService2 = subService2; - } - } - decorators(Reflect.metadata('design:paramtypes', [()=>SubService2, Service, ()=>Logger])).on(SubChildApp2); - lazy(SubService2)(SubChildApp2, null, 0); - newInstance(Service)(SubChildApp2, null, 1); - lazy(Logger)(SubChildApp2, null, 2); - decorators( autoinject() ).on(SubChildApp2); - - class SubChildApp3 extends ChildApp { - } - - class SubChildApp4 extends ChildApp { - constructor(logger, subService1, service) { - super(service, logger); - this.subService1 = subService1; - } - } - decorators(Reflect.metadata('design:paramtypes', [()=>Logger, ()=>SubService1, Service])).on(SubChildApp4); - lazy(SubService1)(SubChildApp4, null, 1); - lazy(Logger)(SubChildApp4, null, 0); - decorators( autoinject() ).on(SubChildApp4); - - let container = new Container(); - - let app1 = container.get(SubChildApp1); - let app2 = container.get(SubChildApp2); - let app3 = container.get(SubChildApp3); - let app4 = container.get(SubChildApp4); - - it('loads dependencies in tree classes', function() { - expect(app1.subService1()).toEqual(jasmine.any(SubService1)); - expect(app1.service).toEqual(jasmine.any(Service)); - expect(app1.logger()).toEqual(jasmine.any(Logger)); - }); - - it('does not effect other child classes with different parameters', function() { - let app2 = container.get(SubChildApp2); - let service = container.get(Service); - expect(app2.subService2()).toEqual(jasmine.any(SubService2)); - expect(app2.service).toEqual(jasmine.any(Service)); - expect(app2.service).not.toBe(service); - expect(app2.logger()).toEqual(jasmine.any(Logger)); - }); - - it('does inherit injection without own autoinject', function() { - expect(app3.service).toEqual(jasmine.any(Service)); - expect(app3.logger()).toEqual(jasmine.any(Logger)); - }); - - it('does allow a changed constructor parameter order', function() { - expect(app4.subService1()).toEqual(jasmine.any(SubService1)); - expect(app4.service).toEqual(jasmine.any(Service)); - expect(app4.logger()).toEqual(jasmine.any(Logger)); - }); - }); - - describe('autoinject', () => { - it('allows multiple parameter decorators', () => { - let data = 'test'; - class Dependency {} - class LoggerBase { - constructor(dep?) { - this.dep = dep; - } - } - class VerboseLogger extends LoggerBase {} - class Logger extends LoggerBase {} - class Service {} - - class MyService { - constructor(getLogger, data) { - this.getLogger = getLogger; - this.data = data; - } - } - decorators( Reflect.metadata('design:paramtypes', [() => Logger]) ).on(MyService); - factory(Logger)(MyService, null, 0); - decorators( autoinject() ).on(MyService); - - class App { - constructor(getLogger: () => Logger, loggers, optionalLogger, parentLogger, newLogger, GetService, otherNewLogger) { - this.getLogger = getLogger; - this.loggers = loggers; - this.optionalLogger = optionalLogger; - this.parentLogger = parentLogger; - this.newLogger = newLogger; - this.GetService = GetService; - this.service = new GetService(data); - this.otherNewLogger = otherNewLogger; - } - } - - decorators( Reflect.metadata('design:paramtypes', [()=>Logger, LoggerBase, Logger, Logger, Logger, MyService, Logger]) ).on(App); - lazy(Logger)(App, null, 0); - all(LoggerBase)(App, null, 1); - optional()(App, null, 2); - parent(App, null, 3); - newInstance(Logger, Dependency)(App, null, 4); - factory(MyService)(App, null, 5); - inject(NewInstance.of(Logger))(App, null, 6); - decorators( autoinject() ).on(App); - - let parentContainer = new Container(); - let parentInstance = new Logger(); - parentContainer.registerInstance(Logger, parentInstance); - - let container = parentContainer.createChild(); - let childInstance = new Logger(); - container.registerSingleton(LoggerBase, VerboseLogger); - container.registerTransient(LoggerBase, Logger); - container.registerSingleton(Logger, Logger); - container.registerInstance(Logger, childInstance); - container.registerSingleton(App, App); - - let app = container.get(App); - - let logger = app.getLogger; - expect(logger()).toEqual(jasmine.any(Logger)); - - expect(app.loggers).toEqual(jasmine.any(Array)); - expect(app.loggers.length).toBe(2); - expect(app.loggers[0]).toEqual(jasmine.any(VerboseLogger)); - expect(app.loggers[1]).toEqual(jasmine.any(Logger)); - - expect(app.optionalLogger).toEqual(jasmine.any(Logger)); - - expect(app.parentLogger).toBe(parentInstance); - - expect(app.newLogger).toEqual(jasmine.any(Logger)); - expect(app.newLogger).not.toBe(logger); - expect(app.newLogger.dep).toEqual(jasmine.any(Dependency)); - - let service = app.GetService; - expect(service()).toEqual(jasmine.any(MyService)); - expect(app.service.data).toEqual(data); - - expect(app.otherNewLogger).toEqual(jasmine.any(Logger)); - expect(app.otherNewLogger).not.toBe(logger); - expect(app.otherNewLogger).not.toBe(app.newLogger); - }); - }); -}); diff --git a/test/resolver.spec.ts b/test/resolver.spec.ts new file mode 100644 index 0000000..d867249 --- /dev/null +++ b/test/resolver.spec.ts @@ -0,0 +1,701 @@ +import { Container } from '../src/container'; +import { + Lazy, All, Optional, Parent, + Factory, NewInstance, lazy, all, optional, + parent, factory, newInstance +} from '../src/resolvers'; +import { inject, autoinject } from '../src/injection'; +import { DependencyCtorOrFunctor, DependencyCtor, DependencyFunctor } from '../src/types'; + +describe('resolver', () => { + describe('Custom resolvers', () => { + describe('Lazy', () => { + it('provides a which=>, when called, will return the instance', () => { + class Logger { } + class App1 { + public static inject() { return [Lazy.of(Logger)]; } + constructor(@lazy(Logger) public getLogger: () => Logger) { + this.getLogger = getLogger; + } + } + + const container = new Container(); + const app1 = container.get(App1); + + const logger = app1.getLogger; + + expect(logger()).toEqual(jasmine.any(Logger)); + }); + + it('provides a which=>, when called, will return the instance using decorator', () => { + class Logger { } + + @autoinject() + class App { + constructor(@lazy(Logger) public getLogger: () => Logger) { + this.getLogger = getLogger; + } + } + + const container = new Container(); + const app = container.get(App); + + const logger = app.getLogger; + expect(logger()).toEqual(jasmine.any(Logger)); + }); + }); + + describe('All', () => { + it('resolves all matching dependencies as an array of instances', () => { + class LoggerBase { } + + class VerboseLogger extends LoggerBase { } + + class Logger extends LoggerBase { } + + class App { + public static inject() { return [All.of(LoggerBase)]; } + constructor(public loggers) { + this.loggers = loggers; + } + } + + const container = new Container(); + container.registerSingleton(LoggerBase, VerboseLogger); + container.registerTransient(LoggerBase, Logger); + const app = container.get(App); + + expect(app.loggers).toEqual(jasmine.any(Array)); + expect(app.loggers.length).toBe(2); + expect(app.loggers[0]).toEqual(jasmine.any(VerboseLogger)); + expect(app.loggers[1]).toEqual(jasmine.any(Logger)); + }); + + it('resolves all matching dependencies as an array of instances using decorator', () => { + class LoggerBase { } + + class VerboseLogger extends LoggerBase { } + + class Logger extends LoggerBase { } + + @autoinject() + class App { + constructor(@all(LoggerBase) public loggers) { + this.loggers = loggers; + } + } + + const container = new Container(); + container.registerSingleton(LoggerBase, VerboseLogger); + container.registerTransient(LoggerBase, Logger); + const app = container.get(App); + + expect(app.loggers).toEqual(jasmine.any(Array)); + expect(app.loggers.length).toBe(2); + expect(app.loggers[0]).toEqual(jasmine.any(VerboseLogger)); + expect(app.loggers[1]).toEqual(jasmine.any(Logger)); + }); + }); + + describe('Optional', () => { + it('injects the instance if its registered in the container', () => { + class Logger { } + + class App { + public static inject() { return [Optional.of(Logger)]; } + constructor(public logger: Logger) { + } + } + + const container = new Container(); + container.registerSingleton(Logger, Logger); + const app = container.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + + it('injects the instance if its registered in the container using decorator', () => { + class Logger { } + + @autoinject() + class App { + constructor(@optional() public logger?: Logger) { + } + } + const container = new Container(); + container.registerSingleton(Logger, Logger); + const app = container.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + + it('injects null if key is not registered in the container', () => { + class VerboseLogger { } + class Logger { } + + class App { + public static inject() { return [Optional.of(Logger)]; } + constructor(public logger: Logger) { + } + } + + const container = new Container(); + container.registerSingleton(VerboseLogger, Logger); + const app = container.get(App); + + expect(app.logger).toBe(null); + }); + + it('injects null if key is not registered in the container using decorator', () => { + class VerboseLogger { } + class Logger { } + + @autoinject() + class App { + constructor(@optional() public logger: Logger) { + } + } + + const container = new Container(); + container.registerSingleton(VerboseLogger, Logger); + const app = container.get(App); + + expect(app.logger).toBe(null); + }); + + it('injects null if key nor is=> registered in the container', () => { + class VerboseLogger { } + class Logger { } + + class App { + public static inject() { return [Optional.of(Logger)]; } + constructor(public logger: Logger) { + } + } + + const container = new Container(); + const app = container.get(App); + + expect(app.logger).toBe(null); + }); + + it('doesn\'t check the parent container hierarchy when checkParent is false', () => { + class Logger { } + + class App { + public static inject() { return [Optional.of(Logger, false)]; } + constructor(public logger: Logger) { + } + } + + const parentContainer = new Container(); + parentContainer.registerSingleton(Logger, Logger); + + const childContainer = parentContainer.createChild(); + childContainer.registerSingleton(App, App); + + const app = childContainer.get(App); + + expect(app.logger).toBe(null); + }); + + it('doesn\'t check the parent container hierarchy when checkParent is false using decorator', () => { + class Logger { } + + @autoinject() + class App { + constructor(@optional(false) public logger: Logger) { + } + } + const parentContainer = new Container(); + parentContainer.registerSingleton(Logger, Logger); + + const childContainer = parentContainer.createChild(); + childContainer.registerSingleton(App, App); + + const app = childContainer.get(App); + + expect(app.logger).toBe(null); + }); + + it('checks the parent container hierarchy when checkParent is true or default', () => { + class Logger { } + + class App { + public static inject() { return [Optional.of(Logger)]; } + constructor(public logger: Logger) { + } + } + + const parentContainer = new Container(); + parentContainer.registerSingleton(Logger, Logger); + + const childContainer = parentContainer.createChild(); + childContainer.registerSingleton(App, App); + + const app = childContainer.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + + it('checks the parent container hierarchy when checkParent is true or default using decorator', () => { + class Logger { } + + @autoinject() + class App { + constructor(@optional() public logger: Logger) { + } + } + const parentContainer = new Container(); + parentContainer.registerSingleton(Logger, Logger); + + const childContainer = parentContainer.createChild(); + childContainer.registerSingleton(App, App); + + const app = childContainer.get(App); + + expect(app.logger).toEqual(jasmine.any(Logger)); + }); + }); + + describe('Parent', () => { + it('bypasses the current container and injects instance from parent container', () => { + class Logger { } + + class App { + public static inject() { return [Parent.of(Logger)]; } + constructor(public logger: Logger) { + } + } + + const parentContainer = new Container(); + const parentInstance = new Logger(); + parentContainer.registerInstance(Logger, parentInstance); + + const childContainer = parentContainer.createChild(); + const childInstance = new Logger(); + childContainer.registerInstance(Logger, childInstance); + childContainer.registerSingleton(App, App); + + const app = childContainer.get(App); + + expect(app.logger).toBe(parentInstance); + }); + + it('bypasses the current container and injects instance from parent container using decorator', () => { + class Logger { } + + @autoinject() + class App { + constructor(@parent public logger: Logger) { + } + } + const parentContainer = new Container(); + const parentInstance = new Logger(); + parentContainer.registerInstance(Logger, parentInstance); + + const childContainer = parentContainer.createChild(); + const childInstance = new Logger(); + childContainer.registerInstance(Logger, childInstance); + childContainer.registerSingleton(App, App); + + const app = childContainer.get(App); + + expect(app.logger).toBe(parentInstance); + }); + + it('returns null when no parent container exists', () => { + class Logger { } + + class App { + public static inject() { return [Parent.of(Logger)]; } + constructor(public logger: Logger) { + } + } + + const container = new Container(); + const instance = new Logger(); + container.registerInstance(Logger, instance); + + const app = container.get(App); + + expect(app.logger).toBe(null); + }); + + it('returns null when no parent container exists using decorator', () => { + class Logger { } + + @autoinject() + class App { + constructor(@parent public logger: Logger) { + } + } + + const container = new Container(); + const instance = new Logger(); + container.registerInstance(Logger, instance); + + const app = container.get(App); + + expect(app.logger).toBe(null); + }); + }); + + describe('Factory', () => { + let container: Container; + let app: App; + let service: (data?: string) => Service; + const data = 'test'; + + class Logger { } + + class Service { + public static inject() { return [Factory.of(Logger)]; } + constructor(public getLogger: () => Logger, public data: string) { + } + } + + class App { + public static inject() { return [Factory.of(Service)]; } + public service: Service; + constructor(public GetService: (data?: string) => Service) { + this.service = GetService(data); + } + } + + beforeEach(() => { + container = new Container(); + }); + + it('provides a function which, when called, will return the instance', () => { + app = container.get(App); + service = app.GetService; + expect(service()).toEqual(jasmine.any(Service)); + }); + + it('passes data in to the constructor as the second argument', () => { + app = container.get(App); + expect(app.service.data).toEqual(data); + }); + }); + + describe('Factory decorator', () => { + let container; + let app; + let service; + const data = 'test'; + + class Logger { } + + @inject(Logger) + class Service { + constructor(public getLogger: Logger, public data: string) { + } + } + + @autoinject() + class App { + public service: Service; + constructor(@factory(Service) public GetService: (data?: string) => Service) { + this.service = GetService(data); + } + } + + beforeEach(() => { + container = new Container(); + }); + + it('provides a which=>, when called, will return the instance', () => { + app = container.get(App); + service = app.GetService; + expect(service()).toEqual(jasmine.any(Service)); + }); + + it('passes data in to the constructor as the second argument', () => { + app = container.get(App); + expect(app.service.data).toEqual(data); + }); + }); + + describe('NewInstance', () => { + class Logger { + constructor(public dep?) { + this.dep = dep; + } + } + + class Dependency { } + + it('inject a new instance of a dependency, without regard for existing instances in the container', () => { + class App1 { + public static inject() { return [NewInstance.of(Logger)]; } + constructor(public logger: Logger) { + } + } + + const container = new Container(); + const logger = container.get(Logger); + const app1 = container.get(App1); + + expect(app1.logger).toEqual(jasmine.any(Logger)); + expect(app1.logger).not.toBe(logger); + }); + + it('decorate to inject a new instance of a dependency', () => { + @autoinject() + class App1 { + constructor(@newInstance() public logger: Logger) { + } + } + + const container = new Container(); + const logger = container.get(Logger); + const app1 = container.get(App1); + + expect(app1.logger).toEqual(jasmine.any(Logger)); + expect(app1.logger).not.toBe(logger); + }); + + it('decorate to inject a new instance of a dependency under a new key', () => { + @autoinject() + class App1 { + constructor(@newInstance('aKey') public logger: Logger) { + } + } + + const container = new Container(); + const logger = container.get('akey'); + const app1 = container.get(App1); + + expect(app1.logger).toEqual(jasmine.any(Logger)); + expect(app1.logger).not.toEqual(logger); + }); + + it('inject a new instance of a dependency, with instance dynamic dependency', () => { + class App1 { + public static inject() { return [NewInstance.of(Logger, Dependency)]; } + constructor(public logger: Logger) { + } + } + + const container = new Container(); + const logger = container.get(Logger); + const app1 = container.get(App1); + + expect(app1.logger).toEqual(jasmine.any(Logger)); + expect(app1.logger).not.toBe(logger); + expect(app1.logger.dep).toEqual(jasmine.any(Dependency)); + }); + + it('decorate to inject a new instance of a dependency, with instance dynamic dependency', () => { + @autoinject() + class App1 { + constructor(@newInstance(Logger, Dependency) public logger: Logger) { + } + } + + const container = new Container(); + const logger = container.get(Logger); + const app1 = container.get(App1); + + expect(app1.logger).toEqual(jasmine.any(Logger)); + expect(app1.logger).not.toBe(logger); + expect(app1.logger.dep).toEqual(jasmine.any(Dependency)); + }); + + it('inject a new instance of a dependency, with resolver dynamic dependency', () => { + class App1 { + public static inject() { return [NewInstance.of(Logger, Lazy.of(Dependency))]; } + constructor(public logger: Logger) { + } + } + + const container = new Container(); + const logger = container.get(Logger); + const app1 = container.get(App1); + + expect(app1.logger).toEqual(jasmine.any(Logger)); + expect(app1.logger).not.toBe(logger); + expect(app1.logger.dep()).toEqual(jasmine.any(Dependency)); + }); + + it('decorate to inject a new instance of a dependency, with resolver dynamic dependency', () => { + class App1 { + constructor(@newInstance(Logger, Lazy.of(Dependency)) public logger: Logger) { + } + } + + const container = new Container(); + const logger = container.get(Logger); + const app1 = container.get(App1); + + expect(app1.logger).toEqual(jasmine.any(Logger)); + expect(app1.logger).not.toBe(logger); + expect(app1.logger.dep()).toEqual(jasmine.any(Dependency)); + }); + }); + }); + + describe('inheritance with parameter decorators', () => { + class Dependency { } + class LoggerBase { + public dep: any; + constructor(dep?) { + this.dep = dep; + } + } + class VerboseLogger extends LoggerBase { } + class Logger extends LoggerBase { } + class Service { } + class SubService1 { } + class SubService2 { } + + @autoinject() + class ParentApp { + constructor(@lazy(Logger) public logger: () => Logger) { } + } + + @autoinject() + class ChildApp extends ParentApp { + constructor(public service: Service, @lazy(Logger) ...rest: [() => Logger]) { + super(...rest); + } + } + + @autoinject() + class SubChildApp1 extends ChildApp { + constructor(@lazy(SubService1) public subService1: () => SubService1, + service: Service, @lazy(Logger) ...rest: [() => Logger]) { + super(service, ...rest); + } + } + + @autoinject() + class SubChildApp2 extends ChildApp { + constructor(@lazy(SubService2) public subService2: () => SubService2, + @newInstance(Service) service: Service, + @lazy(Logger) ...rest: [() => Logger]) { + super(service, ...rest); + } + } + + class SubChildApp3 extends ChildApp { + } + + @autoinject() + class SubChildApp4 extends ChildApp { + constructor(@lazy(Logger) logger: () => Logger, + @lazy(SubService1) public subService1: () => SubService1, service: Service) { + super(service, logger); + this.subService1 = subService1; + } + } + + const container = new Container(); + + const app1 = container.get(SubChildApp1); + const app2 = container.get(SubChildApp2); + const app3 = container.get(SubChildApp3); + const app4 = container.get(SubChildApp4); + + it('loads dependencies in tree classes', () => { + expect(app1.subService1()).toEqual(jasmine.any(SubService1)); + expect(app1.service).toEqual(jasmine.any(Service)); + expect(app1.logger()).toEqual(jasmine.any(Logger)); + }); + + it('does not effect other child classes with different parameters', () => { + const app2 = container.get(SubChildApp2); + const service = container.get(Service); + expect(app2.subService2()).toEqual(jasmine.any(SubService2)); + expect(app2.service).toEqual(jasmine.any(Service)); + expect(app2.service).not.toBe(service); + expect(app2.logger()).toEqual(jasmine.any(Logger)); + }); + + it('does inherit injection without own autoinject', () => { + expect(app3.service).toEqual(jasmine.any(Service)); + expect(app3.logger()).toEqual(jasmine.any(Logger)); + }); + + it('does allow a changed constructor parameter order', () => { + expect(app4.subService1()).toEqual(jasmine.any(SubService1)); + expect(app4.service).toEqual(jasmine.any(Service)); + expect(app4.logger()).toEqual(jasmine.any(Logger)); + }); + }); + + describe('autoinject', () => { + it('allows multiple parameter decorators', () => { + const data = 'test'; + class Dependency { } + class LoggerBase { + constructor(public dep?) { + this.dep = dep; + } + } + class VerboseLogger extends LoggerBase { } + class Logger extends LoggerBase { } + class Service { } + + @autoinject() + class MyService { + constructor(@factory(Logger) public getLogger: (data) => Logger, public data) { + } + } + + @autoinject() + class App { + public service: Service & { data: string }; + constructor( + @lazy(Logger) public getLogger: () => Logger, + @all(LoggerBase) public loggers: Logger[], + @optional() public optionalLogger: Logger, + @parent public parentLogger: Logger, + @newInstance(Logger, Dependency) public newLogger: Logger, + @factory(MyService) public GetService: (data?: string) => (Service & { data: string }), + @inject(NewInstance.of(Logger)) public otherNewLogger: Logger) { + this.service = GetService(data); + } + } + + const parentContainer = new Container(); + const parentInstance = new Logger(); + parentContainer.registerInstance(Logger, parentInstance); + + const container = parentContainer.createChild(); + const childInstance = new Logger(); + container.registerSingleton(LoggerBase, VerboseLogger); + container.registerTransient(LoggerBase, Logger); + container.registerSingleton(Logger, Logger); + container.registerInstance(Logger, childInstance); + container.registerSingleton(App, App); + + const app = container.get(App); + + const logger = app.getLogger; + expect(logger()).toEqual(jasmine.any(Logger)); + + expect(app.loggers).toEqual(jasmine.any(Array)); + expect(app.loggers.length).toBe(2); + expect(app.loggers[0]).toEqual(jasmine.any(VerboseLogger)); + expect(app.loggers[1]).toEqual(jasmine.any(Logger)); + + expect(app.optionalLogger).toEqual(jasmine.any(Logger)); + + expect(app.parentLogger).toBe(parentInstance); + + expect(app.newLogger).toEqual(jasmine.any(Logger)); + expect(app.newLogger).not.toBe(logger); + expect(app.newLogger.dep).toEqual(jasmine.any(Dependency)); + + const service = app.GetService; + expect(service()).toEqual(jasmine.any(MyService)); + expect(app.service.data).toEqual(data); + + expect(app.otherNewLogger).toEqual(jasmine.any(Logger)); + expect(app.otherNewLogger).not.toBe(logger); + expect(app.otherNewLogger).not.toBe(app.newLogger); + }); + }); +}); diff --git a/test/setup.js b/test/setup.ts similarity index 100% rename from test/setup.js rename to test/setup.ts diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..a99cf67 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "module": "amd", + "moduleResolution": "node", + "target": "es5", + "lib": [ + "es2017", + "dom" + ], + "outDir": "dist/amd", + "declaration": false, + "noImplicitAny": false, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowJs": true, + "checkJs": true, + "allowSyntheticDefaultImports": false, + "esModuleInterop": true, + }, + "exclude": [ + ".vscode", + "dist", + "doc", + "node_modules" + ] +} diff --git a/tsconfig.json b/tsconfig.json index 4adcc86..08a7238 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,25 +1,27 @@ { "compilerOptions": { - "target": "es2015", - "module": "es2015", - "experimentalDecorators": true, - "emitDecoratorMetadata": false, + "module": "amd", "moduleResolution": "node", - "stripInternal": true, - "preserveConstEnums": true, - "listFiles": true, - "declaration": true, + "target": "es5", + "lib": [ + "es2017", + "dom" + ], + "outDir": "dist/test", + "declaration": false, + "noImplicitAny": false, "removeComments": true, - "lib": ["es2015", "dom"] + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowJs": true, + "checkJs": true, + "allowSyntheticDefaultImports": false, + "esModuleInterop": 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 0000000..897655b --- /dev/null +++ b/tslint.json @@ -0,0 +1,21 @@ +{ + "extends": "tslint:latest", + "rules": { + "quotemark": [true, "single"], + "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, + "trailing-comma": [false], + "member-ordering": ["fields-first"], + "array-type": ["array-simple"], + "arrow-parens": false, + "max-classes-per-file": [false], + "prefer-for-of": false, + "prefer-conditional-expression": false, + "no-implicit-dependencies": false, + "variable-name": false + } +}