From 5a83fd0af0a4aaf5dc07580e97f6734c4150e6cd Mon Sep 17 00:00:00 2001 From: Mike North Date: Wed, 22 Aug 2018 23:27:35 -0700 Subject: [PATCH] fix: convert a bunch of stuff to TypeScript --- .eslintrc.js | 51 -- .vscode/settings.json | 8 +- .../{resize-aware.js => resize-aware.ts} | 50 +- addon/services/resize.js | 98 --- addon/services/resize.ts | 115 ++++ app/config/environment.d.ts | 7 + app/initializers/{resize.js => resize.ts} | 22 +- .../{resize-aware.js => resize-aware.ts} | 0 app/services/resize.js | 1 - app/services/resize.ts | 1 + package.json | 9 +- tests/acceptance/injection-factories-test.js | 21 - tests/acceptance/injection-factories-test.ts | 30 + tests/unit/initializers/resize-test.js | 36 - tests/unit/initializers/resize-test.ts | 52 ++ ...ize-aware-test.js => resize-aware-test.ts} | 8 +- .../{resize-test.js => resize-test.ts} | 24 +- tsconfig.json | 5 +- tslint.json | 16 + yarn.lock | 650 ++++++++---------- 20 files changed, 590 insertions(+), 614 deletions(-) delete mode 100644 .eslintrc.js rename addon/mixins/{resize-aware.js => resize-aware.ts} (55%) delete mode 100644 addon/services/resize.js create mode 100644 addon/services/resize.ts create mode 100644 app/config/environment.d.ts rename app/initializers/{resize.js => resize.ts} (65%) rename app/mixins/{resize-aware.js => resize-aware.ts} (100%) delete mode 100644 app/services/resize.js create mode 100644 app/services/resize.ts delete mode 100644 tests/acceptance/injection-factories-test.js create mode 100644 tests/acceptance/injection-factories-test.ts delete mode 100644 tests/unit/initializers/resize-test.js create mode 100644 tests/unit/initializers/resize-test.ts rename tests/unit/mixins/{resize-aware-test.js => resize-aware-test.ts} (75%) rename tests/unit/services/{resize-test.js => resize-test.ts} (81%) create mode 100644 tslint.json diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 06d0526d..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,51 +0,0 @@ -module.exports = { - root: true, - parserOptions: { - ecmaVersion: 2017, - sourceType: 'module' - }, - plugins: [ - 'ember' - ], - extends: [ - 'eslint:recommended', - 'plugin:ember/recommended' - ], - env: { - browser: true - }, - rules: { - 'ember/no-jquery': 2 - }, - overrides: [ - // node files - { - files: [ - 'ember-cli-build.js', - 'index.js', - 'testem.js', - 'blueprints/*/index.js', - 'config/**/*.js', - 'tests/dummy/config/**/*.js' - ], - excludedFiles: [ - 'addon/**', - 'addon-test-support/**', - 'app/**', - 'tests/dummy/app/**' - ], - parserOptions: { - sourceType: 'script', - ecmaVersion: 2015 - }, - env: { - browser: false, - node: true - }, - plugins: ['node'], - rules: Object.assign({}, require('eslint-plugin-node').configs.recommended.rules, { - // add your custom rules and overrides for node files here - }) - } - ] -}; diff --git a/.vscode/settings.json b/.vscode/settings.json index 458b80d1..f53e931c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,7 @@ { - "javascript.implicitProjectConfig.checkJs": true -} \ No newline at end of file + "javascript.implicitProjectConfig.checkJs": true, + "eslint.validate": [ + "javascript", + "typescript" + ] +} diff --git a/addon/mixins/resize-aware.js b/addon/mixins/resize-aware.ts similarity index 55% rename from addon/mixins/resize-aware.js rename to addon/mixins/resize-aware.ts index 9ef04ae8..4a4e6063 100644 --- a/addon/mixins/resize-aware.js +++ b/addon/mixins/resize-aware.ts @@ -1,49 +1,55 @@ -import Mixin from '@ember/object/mixin'; import { readOnly } from '@ember/object/computed'; +import Mixin from '@ember/object/mixin'; +import ResizeService from 'dummy/services/resize'; const { floor } = Math; -export default Mixin.create({ - resizeEventsEnabled: true, +// tslint:disable-next-line:variable-name +const ResizeAwareMixin = Mixin.create({ resizeDebouncedEventsEnabled: true, + resizeEventsEnabled: true, - screenWidth: readOnly('resizeService.screenWidth'), screenHeight: readOnly('resizeService.screenHeight'), + screenWidth: readOnly('resizeService.screenWidth'), - _oldViewWidth: null, - _oldViewHeight: null, - _oldViewWidthDebounced: null, - _oldViewHeightDebounced: null, - resizeWidthSensitive: true, + _oldViewHeight: null as number | null, + _oldViewHeightDebounced: null as number | null, + _oldViewWidth: null as number | null, + _oldViewWidthDebounced: null as number | null, resizeHeightSensitive: true, + resizeWidthSensitive: true, didInsertElement() { this._super(...arguments); + const resizeService: ResizeService = (this as any).get('resizeService'); if (this.get('resizeEventsEnabled')) { - this.get('resizeService').on('didResize', this, this._handleResizeEvent); + resizeService.on('didResize', this, this._handleResizeEvent); } if (this.get('resizeDebouncedEventsEnabled')) { - this.get('resizeService').on('debouncedDidResize', this, this._handleDebouncedResizeEvent); + resizeService.on('debouncedDidResize', this, this._handleDebouncedResizeEvent); } }, willDestroyElement() { this._super(...arguments); + const resizeService: ResizeService = (this as any).get('resizeService'); if (this.get('resizeEventsEnabled')) { - this.get('resizeService').off('didResize', this, this._handleResizeEvent); + resizeService.off('didResize', this, this._handleResizeEvent); } if (this.get('resizeDebouncedEventsEnabled')) { - this.get('resizeService').off('debouncedDidResize', this, this._handleDebouncedResizeEvent); + resizeService.off('debouncedDidResize', this, this._handleDebouncedResizeEvent); } }, - didResize(/*width, height, evt*/) {}, // Overridden in subclass - debouncedDidResize(/*width, height, evt*/) {}, // Overridden in subclass + // tslint:disable-next-line:no-empty + didResize(_width: number, _height: number, _evt: UIEvent) {}, // Overridden in subclass + // tslint:disable-next-line:no-empty + debouncedDidResize(_width: number, _height: number, _evt: UIEvent) {}, // Overridden in subclass - _getComponentSize() { + _getComponentSize(this: any) { return this.element.getClientRects()[0]; }, - _handleResizeEvent(evt) { + _handleResizeEvent(evt: UIEvent) { const w = floor(this._getComponentSize().width); const h = floor(this._getComponentSize().height); if ( @@ -52,13 +58,13 @@ export default Mixin.create({ ) { this.didResize(w, h, evt); this.setProperties({ + _oldViewHeight: h, _oldViewWidth: w, - _oldViewHeight: h }); } }, - _handleDebouncedResizeEvent(evt) { + _handleDebouncedResizeEvent(evt: UIEvent) { const w = floor(this._getComponentSize().width); const h = floor(this._getComponentSize().height); if ( @@ -67,9 +73,11 @@ export default Mixin.create({ ) { this.debouncedDidResize(w, h, evt); this.setProperties({ + _oldViewHeightDebounced: h, _oldViewWidthDebounced: w, - _oldViewHeightDebounced: h }); } - } + }, }); + +export default ResizeAwareMixin; diff --git a/addon/services/resize.js b/addon/services/resize.js deleted file mode 100644 index 8ec25145..00000000 --- a/addon/services/resize.js +++ /dev/null @@ -1,98 +0,0 @@ -import { keys as emberKeys } from '@ember/polyfills'; -import Service from '@ember/service'; -import Evented from '@ember/object/evented'; -import { classify } from '@ember/string'; -import { oneWay, readOnly } from '@ember/object/computed'; -import { debounce, cancel } from '@ember/runloop'; -import EmberObject, { set, getWithDefault } from '@ember/object'; - -// jscs:disable disallowDirectPropertyAccess -const Base = Service || EmberObject; -const keys = Object.keys || emberKeys; - -export default Base.extend(Evented, { - _oldWidth: window.innerWidth, - _oldHeight: window.innerHeight, - _oldWidthDebounced: window.innerWidth, - _oldHeightDebounced: window.innerHeight, - debounceTimeout: oneWay('defaultDebounceTimeout'), - widthSensitive: oneWay('defaultWidthSensitive'), - heightSensitive: oneWay('defaultHeightSensitive'), - - screenWidth: readOnly('_oldWidth'), - screenHeight: readOnly('_oldHeight'), - - init() { - this._super(...arguments); - this._setDefaults(); - this._onResizeHandler = evt => { - this._fireResizeNotification(evt); - let scheduledDebounce = debounce(this, this._fireDebouncedResizeNotification, evt, this.get('debounceTimeout')); - this._scheduledDebounce = scheduledDebounce; - }; - if (typeof FastBoot === 'undefined') { - this._installResizeListener(); - } - }, - - destroy() { - this._super(...arguments); - if (typeof FastBoot === 'undefined') { - this._uninstallResizeListener(); - } - this._cancelScheduledDebounce(); - }, - - _setDefaults() { - const defaults = getWithDefault(this, 'resizeServiceDefaults', {}); - - keys(defaults).map(key => { - const classifiedKey = classify(key); - const defaultKey = `default${classifiedKey}`; - return set(this, defaultKey, defaults[key]); - }); - }, - - _hasWindowSizeChanged(w, h, debounced = false) { - return ( - (this.get('widthSensitive') && w !== this.get(`_oldWidth${debounced ? 'Debounced' : ''}`)) || - (this.get('heightSensitive') && h !== this.get(`_oldHeight${debounced ? 'Debounced' : ''}`)) - ); - }, - - _updateCachedWindowSize(w, h, debounced = false) { - const wKey = `_oldWidth${debounced ? 'Debounced' : ''}`; - const hKey = `_oldHeight${debounced ? 'Debounced' : ''}`; - let props = {}; - props[wKey] = w; - props[hKey] = h; - this.setProperties(props); - }, - - _installResizeListener() { - window.addEventListener('resize', this._onResizeHandler); - }, - - _uninstallResizeListener() { - window.removeEventListener('resize', this._onResizeHandler); - }, - - _cancelScheduledDebounce() { - cancel(this._scheduledDebounce); - }, - - _fireResizeNotification(evt) { - const { innerWidth, innerHeight } = window; - if (this._hasWindowSizeChanged(innerWidth, innerHeight)) { - this.trigger('didResize', evt); - this._updateCachedWindowSize(innerWidth, innerHeight); - } - }, - _fireDebouncedResizeNotification(evt) { - const { innerWidth, innerHeight } = window; - if (this._hasWindowSizeChanged(innerWidth, innerHeight, true)) { - this.trigger('debouncedDidResize', evt); - this._updateCachedWindowSize(innerWidth, innerHeight, true); - } - } -}); diff --git a/addon/services/resize.ts b/addon/services/resize.ts new file mode 100644 index 00000000..7feeaa0d --- /dev/null +++ b/addon/services/resize.ts @@ -0,0 +1,115 @@ +import { oneWay, readOnly } from '@ember-decorators/object/computed'; +import { getWithDefault, set } from '@ember/object'; +import Evented from '@ember/object/evented'; +import { cancel, debounce } from '@ember/runloop'; +import Service from '@ember/service'; +import { classify } from '@ember/string'; + +declare global { + // tslint:disable-next-line:variable-name + const FastBoot: {} | undefined; +} + +export interface ResizeDefaults { + widthSensitive?: boolean; + heightSensitive?: boolean; + debounceTimeout?: number ; + injectionFactories?: string[]; +} + +class ResizeService extends Service.extend(Evented) { + public _oldWidth = window.innerWidth; + public _oldHeight = window.innerHeight; + public _oldWidthDebounced = window.innerWidth; + public _oldHeightDebounced = window.innerHeight; + + @oneWay('defaultDebounceTimeout') public debounceTimeout!: number; + @oneWay('defaultWidthSensitive') public widthSensitive!: boolean; + @oneWay('defaultHeightSensitive') public heightSensitive!: boolean; + + public resizeServiceDefaults!: ResizeDefaults; + + @readOnly('_oldWidth') public screenWidth!: number; + @readOnly('_oldHeight') public screenHeight!: number; + public _onResizeHandler?: (this: Window, evt: UIEvent) => void; + public _scheduledDebounce?: ReturnType; + constructor() { + super(...arguments); + this._setDefaults(); + this._onResizeHandler = (evt) => { + this._fireResizeNotification(evt); + const scheduledDebounce = debounce(this, this._fireDebouncedResizeNotification, evt, this.get('debounceTimeout')); + this._scheduledDebounce = scheduledDebounce; + }; + if (typeof FastBoot === 'undefined') { + this._installResizeListener(); + } + } + + public destroy() { + this._super(...arguments); + if (typeof FastBoot === 'undefined') { + this._uninstallResizeListener(); + } + this._cancelScheduledDebounce(); + return this; + } + + public _setDefaults() { + const defaults = getWithDefault(this, 'resizeServiceDefaults', {}); + + Object.keys(defaults).map((key: keyof ResizeDefaults ) => { + const classifiedKey = classify(key); + const defaultKey = `default${classifiedKey}`; + return set(this as any, defaultKey, defaults[key]); + }); + } + + public _hasWindowSizeChanged(w: number, h: number, debounced = false) { + const wKey = debounced ? '_oldWidthDebounced' : '_oldWidth'; + const hKey = debounced ? '_oldHeightDebounced' : '_oldHeight'; + return ( + (this.get('widthSensitive') && w !== this.get(wKey)) || + (this.get('heightSensitive') && h !== this.get(hKey)) + ); + } + + public _updateCachedWindowSize(w: number, h: number, debounced = false) { + const wKey = debounced ? '_oldWidthDebounced' : '_oldWidth'; + const hKey = debounced ? '_oldHeightDebounced' : '_oldHeight'; + this.set(wKey, w); + this.set(hKey, h); + } + + public _installResizeListener() { + if (!this._onResizeHandler) { return; } + window.addEventListener('resize', this._onResizeHandler); + } + + public _uninstallResizeListener() { + if (!this._onResizeHandler) { return; } + window.removeEventListener('resize', this._onResizeHandler); + } + + public _cancelScheduledDebounce() { + if (!this._scheduledDebounce) { return; } + cancel(this._scheduledDebounce); + } + + public _fireResizeNotification(evt: UIEvent) { + const { innerWidth, innerHeight } = window; + if (this._hasWindowSizeChanged(innerWidth, innerHeight)) { + this.trigger('didResize', evt); + this._updateCachedWindowSize(innerWidth, innerHeight); + } + } + public _fireDebouncedResizeNotification(evt: UIEvent) { + const { innerWidth, innerHeight } = window; + if (this._hasWindowSizeChanged(innerWidth, innerHeight, true)) { + this.trigger('debouncedDidResize', evt); + this._updateCachedWindowSize(innerWidth, innerHeight, true); + } + } +} + +export default ResizeService; diff --git a/app/config/environment.d.ts b/app/config/environment.d.ts new file mode 100644 index 00000000..77287ffa --- /dev/null +++ b/app/config/environment.d.ts @@ -0,0 +1,7 @@ +import { ResizeDefaults } from 'ember-resize/services/resize'; + +interface IEnvironment { + resizeServiceDefaults: ResizeDefaults; +} +declare const env: IEnvironment; +export = env; diff --git a/app/initializers/resize.js b/app/initializers/resize.ts similarity index 65% rename from app/initializers/resize.js rename to app/initializers/resize.ts index 1053a119..9c6afcb9 100644 --- a/app/initializers/resize.js +++ b/app/initializers/resize.ts @@ -1,16 +1,20 @@ +// eslint-disable-next-line no-unused-vars +import ApplicationInstance from '@ember/application/instance'; +import { getWithDefault } from '@ember/object'; import ResizeService from 'ember-resize/services/resize'; import config from '../config/environment'; -import { getWithDefault } from '@ember/object'; - -export function initialize() { - let application = arguments[1] || arguments[0]; +export function initialize(application: { + register: ApplicationInstance['register'], + unregister: ApplicationInstance['unregister'], + inject: ApplicationInstance['inject'], +}) { const resizeServiceDefaults = getWithDefault(config, 'resizeServiceDefaults', { - widthSensitive: true, + debounceTimeout: 200, heightSensitive: true, - debounceTimeout: 200 + widthSensitive: true, }); - const injectionFactories = getWithDefault(resizeServiceDefaults, 'injectionFactories', ['view', 'component']) ; + const injectionFactories = getWithDefault(resizeServiceDefaults, 'injectionFactories', ['view', 'component']) || []; application.unregister('config:resize-service'); application.unregister('service:resize'); @@ -19,12 +23,12 @@ export function initialize() { application.register('service:resize', ResizeService); application.inject('service:resize', 'resizeServiceDefaults', 'config:resize-service'); - injectionFactories.forEach(factory => { + injectionFactories.forEach((factory) => { application.inject(factory, 'resizeService', 'service:resize'); }); } export default { + initialize, name: 'resize', - initialize: initialize }; diff --git a/app/mixins/resize-aware.js b/app/mixins/resize-aware.ts similarity index 100% rename from app/mixins/resize-aware.js rename to app/mixins/resize-aware.ts diff --git a/app/services/resize.js b/app/services/resize.js deleted file mode 100644 index 17d3e4de..00000000 --- a/app/services/resize.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from 'ember-resize/services/resize'; \ No newline at end of file diff --git a/app/services/resize.ts b/app/services/resize.ts new file mode 100644 index 00000000..bbcecda2 --- /dev/null +++ b/app/services/resize.ts @@ -0,0 +1 @@ +export { default } from 'ember-resize/services/resize'; diff --git a/package.json b/package.json index ebf5973b..66ad0ec4 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "homepage": "https://github.com/mike-north/ember-resize", "devDependencies": { + "@ember-decorators/babel-transforms": "^2.0.0", "@mike-north/js-lib-semantic-release-config": "^0.0.0-development", "@types/ember": "^2.8.32", "@types/ember-qunit": "^3.0.3", @@ -26,19 +27,21 @@ "@types/ember__test-helpers": "^0.7.0", "@types/qunit": "^2.5.2", "@types/rsvp": "^4.0.2", + "babel-eslint": "^8.0.0", "broccoli-asset-rev": "^2.7.0", "ember-cli": "^3.3.0", "ember-cli-app-version": "^3.1.3", "ember-cli-dependency-checker": "^2.1.0", - "ember-cli-eslint": "^4.2.1", "ember-cli-github-pages": "0.1.3", "ember-cli-htmlbars-inline-precompile": "^1.0.2", "ember-cli-inject-live-reload": "^1.4.0", "ember-cli-qunit": "^4.3.2", "ember-cli-release": "1.0.0-beta.2", "ember-cli-shims": "^1.2.0", + "ember-cli-tslint": "^0.1.4", "ember-cli-typescript": "^1.4.0", "ember-cli-uglify": "^2.0.0", + "ember-decorators": "^2.3.1", "ember-disable-prototype-extensions": "^1.1.2", "ember-disable-proxy-controllers": "^1.0.1", "ember-export-application-global": "^2.0.0", @@ -51,11 +54,13 @@ "ember-try": "^0.2.23", "eslint-plugin-ember": "^5.0.0", "eslint-plugin-node": "^6.0.1", + "eslint-plugin-typescript": "^0.12.0", "loader.js": "^4.2.3", "qunit-dom": "^0.6.2", "semantic-release": "^15.9.9", "travis-deploy-once": "^5.0.2", - "typescript": "^3.0.1" + "typescript": "^3.0.1", + "typescript-eslint-parser": "^18.0.0" }, "keywords": [ "ember-addon", diff --git a/tests/acceptance/injection-factories-test.js b/tests/acceptance/injection-factories-test.js deleted file mode 100644 index 59826439..00000000 --- a/tests/acceptance/injection-factories-test.js +++ /dev/null @@ -1,21 +0,0 @@ -import { module, test } from 'qunit'; -import { setupApplicationTest } from 'ember-qunit'; -import { currentURL, visit, find } from '@ember/test-helpers'; - -function getViewById(viewId) { - return this.owner.lookup('-view-registry:main')[viewId]; -} - -module('Acceptance | injection factories', function(hooks) { - setupApplicationTest(hooks); - - test('Testing whether service has been injected onto views and components', async function(assert) { - await visit('/injection-factories'); - - assert.equal(currentURL(), '/injection-factories', 'Test page loads'); - let viewId = find('.mike-view').id; - assert.ok(getViewById.call(this, viewId).get('resizeService'), 'resizeService has been injected onto views'); - let componentId = find('.test-component').id; - assert.ok(getViewById.call(this, componentId).get('resizeService'), 'resizeService has been injected onto components'); - }); -}); diff --git a/tests/acceptance/injection-factories-test.ts b/tests/acceptance/injection-factories-test.ts new file mode 100644 index 00000000..ccb073f1 --- /dev/null +++ b/tests/acceptance/injection-factories-test.ts @@ -0,0 +1,30 @@ +import ApplicationInstance from '@ember/application/instance'; +import { currentURL, find, visit } from '@ember/test-helpers'; +import { EmberApplicationTest } from 'ember-qunit-decorators/test-support'; +import { suite, test } from 'qunit-decorators'; + +function getViewById(this: { owner: ApplicationInstance}, viewId: string) { + return this.owner.lookup('-view-registry:main')[viewId]; +} + +@suite('Acceptance | injection factories') +export class InjectionFactoriesAcceptanceTest extends EmberApplicationTest { + + @test public async 'visiting /injection-factories'(assert: Assert) { + await visit('/injection-factories'); + + assert.equal(currentURL(), '/injection-factories', 'Test page loads'); + const view = find('.mike-view'); + assert.ok(view, '.mike-view found'); + if (!view) { throw new Error(''); } + const viewId = view.id; + assert.ok(getViewById.call(this, viewId).get('resizeService'), 'resizeService has been injected onto views'); + const component = find('.test-component'); + assert.ok(component, '.test-component found'); + if (!component) { throw new Error(''); } + const componentId = component.id; + // tslint:disable-next-line:max-line-length + assert.ok(getViewById.call(this, componentId).get('resizeService'), 'resizeService has been injected onto components'); + + } +} diff --git a/tests/unit/initializers/resize-test.js b/tests/unit/initializers/resize-test.js deleted file mode 100644 index 5a235ffc..00000000 --- a/tests/unit/initializers/resize-test.js +++ /dev/null @@ -1,36 +0,0 @@ -import { run } from '@ember/runloop'; -import Application from '@ember/application'; -import { initialize } from '../../../initializers/resize'; -import { module, test } from 'qunit'; - -let container, application; - -module('Unit | Initializer | resize', { - needs: ['service:resize'], - beforeEach() { - run(function() { - application = Application.create(); - container = application.__container__; - application.deferReadiness(); - }); - } -}); - -test('service is registered to the container', function(assert) { - assert.ok(!application.__container__.lookup('service:resize'), 'not registered as service:resize in the container before initializer'); - initialize(container, application); - assert.ok(application.__container__.lookup('service:resize'), 'registered as service:resize in the container after initializer'); -}); - -test('service configuration is registered to the container', function(assert) { - assert.ok(!application.__container__.lookup('config:resize-service'), 'not registered as config:resize-service in the container before initializer'); - initialize(container, application); - assert.ok(application.__container__.lookup('config:resize-service'), 'registered as config:resize-service in the container after initializer'); -}); - -test('service configuration is injected onto the resize service', function(assert) { - initialize(container, application); - let resize = application.__container__.lookup('service:resize'); - assert.deepEqual(resize.get('resizeServiceDefaults'), application.__container__.lookup('config:resize-service'), 'defaults are registered to service as "resizeServiceDefaults"'); -}); - diff --git a/tests/unit/initializers/resize-test.ts b/tests/unit/initializers/resize-test.ts new file mode 100644 index 00000000..aceb97c3 --- /dev/null +++ b/tests/unit/initializers/resize-test.ts @@ -0,0 +1,52 @@ +import Application from '@ember/application'; + +import ApplicationInstance from '@ember/application/instance'; +import { run } from '@ember/runloop'; +import { initialize } from 'dummy/initializers/resize'; +import { EmberTest } from 'ember-qunit-decorators/test-support'; +import { suite, test } from 'qunit-decorators'; + +@suite('Unit | Initializer | resize') +export class ResizeInitializerTest extends EmberTest { + private testApplication!: typeof Application; + private application!: Application; + private instance!: ApplicationInstance; + + public async beforeEach() { + this.testApplication = Application.extend(); + + this.application = this.testApplication.create({ autoboot: false }); + this.instance = (this.application as any).buildInstance(); + initialize(this.instance); + } + public afterEach() { + run(this.application, 'destroy'); + } + + @test + public 'service is registered to the container'(assert: Assert) { + // tslint:disable-next-line:no-debugger + assert.ok( + this.instance.lookup('service:resize'), + 'registered as service:resize in the container after initializer', + ); + } + + @test + public 'service configuration is registered to the container'(assert: Assert) { + assert.ok( + this.instance.lookup('config:resize-service'), + 'registered as config:resize-service in the container after initializer', + ); + } + + @test + public 'service configuration is injected onto the resize service'(assert: Assert) { + const resize = this.instance.lookup('service:resize'); + assert.deepEqual( + resize.get('resizeServiceDefaults'), + this.instance.lookup('config:resize-service'), + 'defaults are registered to service as "resizeServiceDefaults"', + ); + } +} diff --git a/tests/unit/mixins/resize-aware-test.js b/tests/unit/mixins/resize-aware-test.ts similarity index 75% rename from tests/unit/mixins/resize-aware-test.js rename to tests/unit/mixins/resize-aware-test.ts index 1f212b16..855e5e35 100644 --- a/tests/unit/mixins/resize-aware-test.js +++ b/tests/unit/mixins/resize-aware-test.ts @@ -1,15 +1,15 @@ import EObj from '@ember/object'; -import ResizeAwareMixin from '../../../mixins/resize-aware'; +import ResizeAwareMixin from 'ember-resize/mixins/resize-aware'; import { module, test } from 'qunit'; // jscs:enable disallowDirectPropertyAccess module('Unit | Mixin | resize aware'); -test('didResize and debouncedDidResize hooks are on the object', function(assert) { +test('didResize and debouncedDidResize hooks are on the object', (assert: Assert) => { - let ResizeAwareObject = EObj.extend(ResizeAwareMixin); - let subject = ResizeAwareObject.create(); + const resizeAwareObject = EObj.extend(ResizeAwareMixin); + const subject = resizeAwareObject.create(); assert.ok(subject.didResize, 'didResize hook is present on the subject'); assert.equal(typeof subject.didResize, 'function', 'didResize hook is a function'); diff --git a/tests/unit/services/resize-test.js b/tests/unit/services/resize-test.ts similarity index 81% rename from tests/unit/services/resize-test.js rename to tests/unit/services/resize-test.ts index 6ef56714..25e24c95 100644 --- a/tests/unit/services/resize-test.js +++ b/tests/unit/services/resize-test.ts @@ -8,16 +8,16 @@ moduleFor('service:resize', 'Unit | Service | resize', { test('it fires "didResize" when the window is resized', function(assert) { - let service = this.subject({ + const service = this.subject({ + heightSensitive: true, widthSensitive: false, - heightSensitive: true }); let didResizeCallCount = 0; - service.on('didResize', function() { + service.on('didResize', () => { didResizeCallCount++; }); - let evt = new window.Event('resize'); + const evt = new Event('resize'); window.dispatchEvent(evt); assert.equal(didResizeCallCount, 0, 'didResize called 0 time on event firing'); @@ -33,12 +33,12 @@ test('it fires "didResize" when the window is resized', function(assert) { test('screenHeight is bound to the non debounced resize', function(assert) { - let service = this.subject({ + const service = this.subject({ + heightSensitive: true, widthSensitive: false, - heightSensitive: true }); - let evt = new window.Event('resize'); + const evt = new Event('resize'); window.dispatchEvent(evt); assert.equal(service.get('screenHeight'), window.innerHeight); @@ -47,19 +47,19 @@ test('screenHeight is bound to the non debounced resize', function(assert) { test('it fires "debouncedDidResize" when the window is resized', function(assert) { - let done = assert.async(); + const done = assert.async(); - let service = this.subject({ + const service = this.subject({ + heightSensitive: true, widthSensitive: false, - heightSensitive: true }); let debouncedDidResizeCallCount = 0; - service.on('debouncedDidResize', function() { + service.on('debouncedDidResize', () => { debouncedDidResizeCallCount++; }); - let evt = new window.Event('resize'); + const evt = new Event('resize'); function triggerEvent() { window.dispatchEvent(evt); diff --git a/tsconfig.json b/tsconfig.json index 92116a70..9758d03b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -42,7 +42,8 @@ "*": [ "types/*" ] - } + }, + "experimentalDecorators": true }, "include": [ "app/**/*", @@ -52,4 +53,4 @@ "test-support/**/*", "addon-test-support/**/*" ] -} +} \ No newline at end of file diff --git a/tslint.json b/tslint.json new file mode 100644 index 00000000..cad5f133 --- /dev/null +++ b/tslint.json @@ -0,0 +1,16 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": { + "quotemark": [true, "single"], + "variable-name": [true, "allow-leading-underscore"] + }, + "rules": { + "quotemark": [true, "single"], + "variable-name": [true, "allow-leading-underscore"], + "interface-name": false + }, + "rulesDirectory": [] +} diff --git a/yarn.lock b/yarn.lock index 9036269e..9997e45b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,134 @@ # yarn lockfile v1 +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + dependencies: + "@babel/highlight" "7.0.0-beta.44" + +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + dependencies: + "@babel/types" "7.0.0-beta.44" + +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + +"@ember-decorators/babel-transforms@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@ember-decorators/babel-transforms/-/babel-transforms-2.0.2.tgz#f73b4af32bc9aa2253cc8d2e72b984ab85e432db" + dependencies: + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators-legacy "^1.3.4" + ember-cli-babel "^6.6.0" + ember-cli-version-checker "^2.1.0" + +"@ember-decorators/component@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/component/-/component-2.3.1.tgz#4e692c78f4ce69ba107759e5f8e2ed59c55dc232" + dependencies: + "@ember-decorators/utils" "^2.3.1" + ember-cli-babel "^6.6.0" + +"@ember-decorators/controller@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/controller/-/controller-2.3.1.tgz#0b64320b037d413d5a351129fb1269e0b9f955f8" + dependencies: + "@ember-decorators/utils" "^2.3.1" + ember-cli-babel "^6.6.0" + +"@ember-decorators/data@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/data/-/data-2.3.1.tgz#a2f28a56f0190217b863846808fbee9ec14c2fd9" + dependencies: + "@ember-decorators/utils" "^2.3.1" + ember-cli-babel "^6.6.0" + +"@ember-decorators/object@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/object/-/object-2.3.1.tgz#1886911154a58e1d5e5bd1be883249d05d52c918" + dependencies: + "@ember-decorators/utils" "^2.3.1" + ember-cli-babel "^6.6.0" + ember-compatibility-helpers "^1.0.0" + +"@ember-decorators/service@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/service/-/service-2.3.1.tgz#84734f22ba295929ba5d506971535358e9e2a432" + dependencies: + "@ember-decorators/utils" "^2.3.1" + ember-cli-babel "^6.6.0" + +"@ember-decorators/utils@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/utils/-/utils-2.3.1.tgz#1da06a8f11062b0176dac5b427b27b4eabff3604" + dependencies: + ember-cli-babel "^6.6.0" + ember-compatibility-helpers "^1.0.0" + "@ember/test-helpers@^0.7.18": version "0.7.25" resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-0.7.25.tgz#b4014c108b40ffaf74f3c4d5918800917541541d" @@ -257,17 +385,7 @@ accepts@~1.3.4, accepts@~1.3.5: mime-types "~2.1.18" negotiator "0.6.1" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^5.2.1, acorn@^5.5.0: +acorn@^5.2.1: version "5.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" @@ -294,11 +412,7 @@ aggregate-error@^1.0.0: clean-stack "^1.0.0" indent-string "^3.0.0" -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - -ajv@^5.2.3, ajv@^5.3.0: +ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -341,10 +455,6 @@ ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -495,7 +605,7 @@ arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" -arrify@^1.0.0, arrify@^1.0.1: +arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -687,6 +797,17 @@ babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.7" +babel-eslint@^8.0.0: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" @@ -821,7 +942,7 @@ babel-plugin-dead-code-elimination@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz#5f7c451274dcd7cccdbfbb3e0b85dd28121f0f65" -babel-plugin-debug-macros@^0.1.10: +babel-plugin-debug-macros@^0.1.10, babel-plugin-debug-macros@^0.1.11: version "0.1.11" resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.1.11.tgz#6c562bf561fccd406ce14ab04f42c218cf956605" dependencies: @@ -893,6 +1014,14 @@ babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.1.18: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" @@ -913,6 +1042,23 @@ babel-plugin-transform-async-to-generator@^6.22.0: babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + 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-legacy@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz#0e492dffa0edd70529072887f8aa86d4dd8b40a1" + dependencies: + babel-plugin-syntax-decorators "^6.1.18" + babel-runtime "^6.2.0" + babel-template "^6.3.0" + babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" @@ -1174,14 +1320,14 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.24.1, babel-template@^6.26.0: +babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.3.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: @@ -1214,6 +1360,10 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + babylon@^5.8.38: version "5.8.38" resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" @@ -1608,18 +1758,6 @@ broccoli-kitchen-sink-helpers@^0.3.1: glob "^5.0.10" mkdirp "^0.5.1" -broccoli-lint-eslint@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/broccoli-lint-eslint/-/broccoli-lint-eslint-4.2.1.tgz#f780dc083a7357a9746a9cfa8f76feb092777477" - dependencies: - aot-test-generators "^0.1.0" - broccoli-concat "^3.2.2" - broccoli-persistent-filter "^1.4.3" - eslint "^4.0.0" - json-stable-stringify "^1.0.1" - lodash.defaultsdeep "^4.6.0" - md5-hex "^2.0.0" - broccoli-merge-trees@^1.0.0: version "1.2.4" resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz#a001519bb5067f06589d91afa2942445a2d0fdb5" @@ -1668,7 +1806,7 @@ broccoli-node-info@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-1.1.0.tgz#3aa2e31e07e5bdb516dd25214f7c45ba1c459412" -broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.4.2, broccoli-persistent-filter@^1.4.3: +broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.2.0, broccoli-persistent-filter@^1.4.2, broccoli-persistent-filter@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.3.tgz#3511bc52fc53740cda51621f58a28152d9911bc1" dependencies: @@ -1724,6 +1862,15 @@ broccoli-stew@^1.2.0, broccoli-stew@^1.4.0, broccoli-stew@^1.5.0: symlink-or-copy "^1.2.0" walk-sync "^0.3.0" +broccoli-tslinter@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/broccoli-tslinter/-/broccoli-tslinter-3.0.1.tgz#f30b167356cd2b96c604e8a56f1557de1e2048ed" + dependencies: + aot-test-generators "^0.1.0" + broccoli-persistent-filter "^1.2.0" + chalk "^2.0.1" + exists-sync "0.0.4" + broccoli-uglify-sourcemap@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/broccoli-uglify-sourcemap/-/broccoli-uglify-sourcemap-2.2.0.tgz#2ff49389bdf342a550c3596750ba2dde95a8f7d4" @@ -1776,7 +1923,7 @@ buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" -builtin-modules@^1.0.0: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -1893,20 +2040,10 @@ call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1998,10 +2135,6 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3 escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - charm@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.2.tgz#8add367153a6d9a581331052c4090991da995e35" @@ -2041,10 +2174,6 @@ cidr-regex@^2.0.8: dependencies: ip-regex "^2.1.0" -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2229,7 +2358,7 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.5.0, commander@^2.6.0, commander@^2.9.0: +commander@^2.12.1, commander@^2.5.0, commander@^2.6.0, commander@^2.9.0: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -2296,7 +2425,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0: +concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -2464,7 +2593,7 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -2569,10 +2698,6 @@ deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -2617,18 +2742,6 @@ defs@~1.1.0: tryor "~0.1.2" yargs "~3.27.0" -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - 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@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2704,12 +2817,6 @@ dir-glob@^2.0.0: arrify "^1.0.1" path-type "^3.0.0" -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" @@ -2785,7 +2892,7 @@ ember-cli-babel@^5.0.0, ember-cli-babel@^5.1.3: ember-cli-version-checker "^1.0.2" resolve "^1.1.2" -ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2: +ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2: version "6.16.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.16.0.tgz#623b4a2764ece72b65f1572fc8aeb5714a450228" dependencies: @@ -2823,15 +2930,6 @@ ember-cli-dependency-checker@^2.1.0: resolve "^1.5.0" semver "^5.3.0" -ember-cli-eslint@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/ember-cli-eslint/-/ember-cli-eslint-4.2.3.tgz#2844d3f5e8184f19b2d7132ba99eb0b370b55598" - dependencies: - broccoli-lint-eslint "^4.2.1" - ember-cli-version-checker "^2.1.0" - rsvp "^4.6.1" - walk-sync "^0.3.0" - ember-cli-get-component-path-option@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ember-cli-get-component-path-option/-/ember-cli-get-component-path-option-1.0.0.tgz#0d7b595559e2f9050abed804f1d8eff1b08bc771" @@ -2952,6 +3050,16 @@ ember-cli-test-loader@^2.2.0: dependencies: ember-cli-babel "^6.8.1" +ember-cli-tslint@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/ember-cli-tslint/-/ember-cli-tslint-0.1.4.tgz#704980595e90caf8c080845737bc97663cdbe729" + dependencies: + broccoli-funnel "^2.0.1" + broccoli-tslinter "^3.0.1" + rsvp "^4.7.0" + tslint "^5.5.0" + walk-sync "^0.3.2" + ember-cli-typescript@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-1.4.0.tgz#ae989180b7cd6dfba71b7fc89c619d2c6b2d1987" @@ -3006,7 +3114,7 @@ ember-cli-version-checker@^1.0.2, ember-cli-version-checker@^1.1.6: dependencies: semver "^5.3.0" -ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.0, ember-cli-version-checker@^2.1.2: +ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.0, ember-cli-version-checker@^2.1.1, ember-cli-version-checker@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-2.1.2.tgz#305ce102390c66e4e0f1432dea9dc5c7c19fed98" dependencies: @@ -3192,6 +3300,26 @@ ember-cli@~3.1.4: watch-detector "^0.1.0" yam "^0.0.24" +ember-compatibility-helpers@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.0.2.tgz#a7eb8969747d063720fe44658af5448589b437ba" + dependencies: + babel-plugin-debug-macros "^0.1.11" + ember-cli-version-checker "^2.1.1" + semver "^5.4.1" + +ember-decorators@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ember-decorators/-/ember-decorators-2.3.1.tgz#aef98f6a3e15666bd414576d07cbfc15d39cfe97" + dependencies: + "@ember-decorators/component" "^2.3.1" + "@ember-decorators/controller" "^2.3.1" + "@ember-decorators/data" "^2.3.1" + "@ember-decorators/object" "^2.3.1" + "@ember-decorators/service" "^2.3.1" + ember-cli-babel "^6.0.0" + semver "^5.5.0" + ember-disable-prototype-extensions@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/ember-disable-prototype-extensions/-/ember-disable-prototype-extensions-1.1.3.tgz#1969135217654b5e278f9fe2d9d4e49b5720329e" @@ -3463,9 +3591,15 @@ eslint-plugin-node@^6.0.1: resolve "^1.3.3" semver "^5.4.1" -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" +eslint-plugin-typescript@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-typescript/-/eslint-plugin-typescript-0.12.0.tgz#e23d58cb27fe28e89fc641a1f20e8d862cb99aef" + dependencies: + requireindex "~1.1.0" + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -3474,56 +3608,6 @@ eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" -eslint@^4.0.0: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - -espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - esprima-fb@~15001.1001.0-dev-harmony-fb: version "15001.1001.0-dev-harmony-fb" resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659" @@ -3544,19 +3628,13 @@ esprima@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" -esquery@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - dependencies: - estraverse "^4.0.0" - esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -3720,14 +3798,6 @@ external-editor@^1.1.0: spawn-sync "^1.0.15" tmp "^0.0.29" -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -3768,10 +3838,6 @@ fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - fast-ordered-set@^1.0.0, fast-ordered-set@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz#3fbb36634f7be79e4f7edbdb4a357dee25d184eb" @@ -3813,13 +3879,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - filesize@^3.1.3: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -3905,15 +3964,6 @@ fireworm@^0.7.0: lodash.flatten "^3.0.2" minimatch "^3.0.2" -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - flush-write-stream@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" @@ -4093,10 +4143,6 @@ fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.8: mkdirp ">=0.5 0" rimraf "2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - gauge@~1.2.0, gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" @@ -4294,7 +4340,7 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -globals@^11.0.1: +globals@^11.1.0: version "11.7.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" @@ -4306,17 +4352,6 @@ globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - 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" - globby@^8.0.0, globby@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" @@ -4640,7 +4675,7 @@ iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@^0.4.5, iconv-lite@~0.4.13: +iconv-lite@^0.4.4, iconv-lite@^0.4.5, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: @@ -4660,7 +4695,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.3, ignore@^3.3.5, ignore@^3.3.6: +ignore@^3.3.5, ignore@^3.3.6: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -4766,25 +4801,6 @@ inquirer@^2: strip-ansi "^3.0.0" through "^2.3.6" -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - into-stream@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" @@ -4792,7 +4808,7 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" -invariant@^2.2.2: +invariant@^2.2.0, invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: @@ -4981,16 +4997,6 @@ is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" @@ -5019,10 +5025,6 @@ is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -5141,15 +5143,15 @@ js-tokens@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae" +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + "js-tokens@^3.0.0 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.6.1, js-yaml@^3.9.0, js-yaml@^3.9.1: +js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.6.1, js-yaml@^3.7.0, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: @@ -5164,7 +5166,7 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" -jsesc@^2.5.0: +jsesc@^2.5.0, jsesc@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" @@ -5192,10 +5194,6 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -5317,13 +5315,6 @@ leven@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - libcipm@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-2.0.2.tgz#4f38c2b37acf2ec156936cef1cbf74636568fc7b" @@ -5870,6 +5861,10 @@ lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + lodash.union@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-3.1.0.tgz#a4a3066fc15d6a7f8151cce9bdfe63dce7f5bcff" @@ -5921,7 +5916,7 @@ lodash@^3.10.0, lodash@^3.10.1, lodash@^3.9.3: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.17.10, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: +lodash@^4.17.10, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -6077,16 +6072,6 @@ matcher-collection@^1.0.0, matcher-collection@^1.0.5: dependencies: minimatch "^3.0.2" -md5-hex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" - dependencies: - md5-o-matic "^0.1.1" - -md5-o-matic@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" - mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -6368,7 +6353,7 @@ mute-stream@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" -mute-stream@0.0.7, mute-stream@~0.0.4: +mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -6392,10 +6377,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - needle@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.2.tgz#1120ca4c41f2fcc6976fd28a8968afe239929418" @@ -7041,17 +7022,6 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - ora@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" @@ -7085,7 +7055,7 @@ os-shim@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -7370,10 +7340,6 @@ pkg-conf@^2.1.0: find-up "^2.0.0" load-json-file "^4.0.0" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - portfinder@^1.0.7: version "1.0.17" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a" @@ -7386,10 +7352,6 @@ posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -7424,10 +7386,6 @@ process-relative-require@^1.0.0: dependencies: node-modules-path "^1.0.0" -progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - promise-inflight@^1.0.1, promise-inflight@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -7869,10 +7827,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -8000,12 +7954,9 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" +requireindex@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" requires-port@^1.0.0: version "1.0.0" @@ -8018,10 +7969,6 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -8040,7 +7987,7 @@ resolve@1.5.0: dependencies: path-parse "^1.0.5" -resolve@^1.1.2, resolve@^1.1.6, resolve@^1.3.0, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: +resolve@^1.1.2, resolve@^1.1.6, resolve@^1.3.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: @@ -8108,7 +8055,7 @@ rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.2.1 version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" -rsvp@^4.6.1, rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.3: +rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.3: version "4.8.3" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.3.tgz#25d4b9fdd0f95e216eb5884d9b3767d3fbfbe2cd" @@ -8128,16 +8075,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - rx@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" @@ -8229,6 +8166,10 @@ semver-regex@^1.0.0: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + semver@^4.3.1: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" @@ -8357,12 +8298,6 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - slide@^1.1.3, slide@^1.1.5, slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -8750,7 +8685,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -8851,17 +8786,6 @@ symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink- version "1.2.0" resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#5d49108e2ab824a34069b68974486c290020b393" -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - tap-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721" @@ -8997,12 +8921,6 @@ tmp@^0.0.29: dependencies: os-tmpdir "~1.0.1" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -9015,6 +8933,10 @@ to-fast-properties@^1.0.0, to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -9107,6 +9029,33 @@ tryor@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" +tslib@^1.8.0, tslib@^1.8.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + +tslint@^5.5.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.7.0" + minimatch "^3.0.4" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.27.2" + +tsutils@^2.27.2: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -9121,12 +9070,6 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - type-is@~1.6.15, type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -9138,6 +9081,13 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +typescript-eslint-parser@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-18.0.0.tgz#3e5055a44980d69e4154350fc5d8b1ab4e2332a8" + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + typescript@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.1.tgz#43738f29585d3a87575520a4b93ab6026ef11fdb" @@ -9459,10 +9409,6 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - worker-farm@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" @@ -9502,12 +9448,6 @@ write-file-atomic@~1.1.4: imurmurhash "^0.1.4" slide "^1.1.5" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - ws@~3.3.1: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"