diff --git a/.eslintignore b/.eslintignore index 72df373..f5db330 100644 --- a/.eslintignore +++ b/.eslintignore @@ -12,6 +12,7 @@ # misc /coverage/ +/config/addon-docs.js !.* # ember-try diff --git a/.travis.yml b/.travis.yml index c8cec19..a7df254 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ language: node_js node_js: # we recommend testing addons with the same minimum supported node version as Ember CLI # so that your addon works for all apps - - "6" + - "8" sudo: false dist: trusty @@ -28,6 +28,7 @@ branches: jobs: fail_fast: true allow_failures: + - env: EMBER_TRY_SCENARIO=ember-lts-2.18 - env: EMBER_TRY_SCENARIO=ember-canary include: diff --git a/README.md b/README.md index 84a96d6..0232c34 100644 --- a/README.md +++ b/README.md @@ -1,286 +1,372 @@ -ember-oo-modifiers +ember-class-based-modifier ============================================================================== -This addon provides a [`useLayoutEffect`-like](https://reactjs.org/docs/hooks-reference.html#useeffect) API for adding modifiers to elements in Ember. +[![Build Status](https://travis-ci.org/sukima/ember-class-based-modifier.svg?branch=master)](https://travis-ci.org/chancancode/ember-class-based-modifier) -For more information on modifiers, please check out @pzuraq's wonderful [blog post](https://www.pzuraq.com/coming-soon-in-ember-octane-part-4-modifiers/). +> This is the next iteration of [ember-oo-modifiers](https://github.com/sukima/ember-class-based-modifier/tree/maintenance/ember-oo-modifiers) with some breaking changes to the API. If you are looking for the previous documentation, select the version you are using in the tags dropdown at the top of the page. For a list of API differences, see [here](#api-differences-from-ember-oo-modifiers) + +This addon provides a class-based API for authoring [element modifiers](https://blog.emberjs.com/2019/03/06/coming-soon-in-ember-octane-part-4.html) in Ember, similar to the [class-based helper](https://octane-guides-preview.emberjs.com/release/templates/writing-helpers/#toc_class-based-helpers) API. Compatibility ------------------------------------------------------------------------------ This is currently compatible with: -* Ember.js v3.8 or above -* Ember CLI v2.13 or above - -In the future, it will be supported with: - -* Ember.js v2.18 or above +* Ember.js v3.4 or above * Ember CLI v2.13 or above -(Support for v2.18 is blocked by: https://github.com/rwjblue/ember-modifier-manager-polyfill/issues/6) - +(Support for v2.18 is blocked by: https://github.com/rwjblue/ember-modifier-manager-polyfill/pull/11) Installation ------------------------------------------------------------------------------ ``` -ember install ember-oo-modifiers +ember install ember-class-based-modifier ``` - Usage ------------------------------------------------------------------------------ -This addon does not provide any modifiers out of the box; instead (like Helpers), this library allows you to write your own. - -Much of this addon was inspired (and some copied) from [ember-functional-modifiers](https://github.com/spencer516/ember-functional-modifiers) by @spencer516 +This addon does not provide any modifiers out of the box; instead, this library allows you to write your own. -The difference between the two is that ember-functional-modifiers exposes a **functional** style API while this addon exposes an **Object Oriented** API. +Much of this addon was based on [ember-oo-modifiers](https://github.com/sukima/ember-class-based-modifier/tree/maintenance/ember-oo-modifiers), and, in turn, [ember-functional-modifiers](https://github.com/spencer516/ember-functional-modifiers). ## Example without Cleanup -For example, if you wanted to implement your own `scrollTop` modifier (similar to [this](https://github.com/emberjs/ember-render-modifiers#example-scrolling-an-element-to-a-position)), you may do something like this: +For example, let's say you want to implement your own `{{scroll-position}}` modifier (similar to [this](https://github.com/emberjs/ember-render-modifiers#example-scrolling-an-element-to-a-position)). -### Ember Object +This modifier can be attached to any element and accepts a single positional argument. When the element is inserted, and whenever the argument is updated, it will set the element's `scrollTop` property to the value of its argument. ```js -// app/modifiers/scroll-top.js -import { Modifier } from 'ember-oo-modifiers'; - -const ScrollTopModifier = Modifier.extend({ - didReceiveArguments([scrollPosition]) { - this.element.scrollTop = scrollPosition; +// app/modifiers/scroll-position.js + +import Modifier from 'ember-class-based-modifier'; + +export default class ScrollPositionModifier extends Modifier { + get scrollPosition() { + // get the first positional argument passed to the modifier + // + // {{scoll-position @someNumber}} + // ~~~~~~~~~~~ + // + return this.args.positional[0]; } -}); -export default ScrollTopModifier; + didReceiveArguments() { + this.element.scrollTop = this.scrollPosition; + } +} ``` -Then, use it in your template: +Usage: -```hbs -
- {{yield}} +```handlebars +{{!-- app/components/scroll-container.hbs --}} + +
+ {{yield this.scrollToTop}}
``` -## Native Class - ```js -// app/modifiers/scroll-top.js -import Modifier from 'ember-oo-modifiers'; +// app/components/scroll-container.js -export default class ScrollTopModifier extends Modifier { - didReceiveArguments([scrollPosition]) { - this.element.scrollTop = scrollPosition; - } -} -``` +import Component from '@glimmer/component'; +import { tracked } from '@glimmer/tracking'; +import { action } from '@ember/object'; -Then, use it in your template: +export default class ScrollContainerComponent extends Component { + @tracked scrollPosition = 0; -```hbs -
- {{yield}} -
+ @action scrollToTop() { + this.scrollPosition = 0; + } +} ``` -### `modifier` function +```handlebars +{{!-- app/templates/application.hbs --}} -The native class example can be implemented using `modifier` function, which calls passed function argument on `didReceiveArguments` with these arguments + + A lot of content... -- `element` on which is the modifier installed, -- `array` of positional arguments passed on the modifier, -- `object` of named arguments passed on the modifier. - -```js -// app/modifiers/scroll-top.js -import { modifier } from 'ember-oo-modifiers'; - -export default modifier(function scrollTop(element, [scrollPosition]) { - element.scrollTop = scrollPosition; -}) + + ``` ## Example with Cleanup -If the functionality you add in the modifier needs to be torn down when the element is removed, you can return a function for the teardown method. +If the functionality you add in the modifier needs to be torn down when the modifier is removed, you can use the `willRemove` hook. -For example, if you wanted to have your elements dance randomly on the page using `setInterval`, but you wanted to make sure that was canceled when the element was removed, you could do: - -### Ember Object +For example, if you want to have your elements dance randomly on the page using `setInterval`, but you wanted to make sure that was canceled when the modifier was removed, you could do this: ```js // app/modifiers/move-randomly.js -import { Modifier } from 'ember-oo-modifiers'; + +import { action } from '@ember/object'; +import Modifier from 'ember-class-based-modifier'; const { random, round } = Math; -const INTERVAL_DELAY = 1000; +const DEFAULT_DELAY = 1000; + +export default class MoveRandomlyModifier extends Modifier { + setIntervalId = null; + + get delay() { + // get the named argument "delay" passed to the modifier + // + // {{move-randomly delay=@someNumber}} + // ~~~~~~~~~~~ + // + return this.args.named.delay || DEFAULT_DELAY; + } -const MoveRandomlyModifier = Modifier.extend({ - updateTransform() { + @action moveElement() { let top = round(random() * 500); let left = round(random() * 500); this.element.style.transform = `translate(${left}px, ${top}px)`; - }, + } - didInsertElement() { - this.timer = setInterval(() => this.updateTransform(), INTERVAL_DELAY); - }, + didReceiveArguments() { + if (this.setIntervalId !== null) { + clearInterval(this.setIntervalId); + } - willDestroyElement() { - clearInterval(this.timer); - this.timer = null; + this.setIntervalId = setInterval(this.moveElement, this.delay); } -}); -export default MoveRandomlyModifier; + willRemove() { + clearInterval(this.setIntervalId); + this.setIntervalId = null; + } +} ``` +Usage: + ```hbs -
- Try to catch me! +
+ Catch me if you can!
``` -### Native Class +## Example with Service Injection + +You can also use services into your modifier, just like any other class in Ember. + +For example, suppose you wanted to track click events with `ember-metrics`: ```js -// app/modifiers/move-randomly.js -import Modifier from 'ember-oo-modifiers'; +// app/modifiers/track-click.js -const { random, round } = Math; -const INTERVAL_DELAY = 1000; +import { action } from '@ember/object'; +import { inject as service } from '@ember/service'; +import Modifier from 'ember-class-based-modifier'; -export default class MoveRandomlyModifier extends Modifier { - updateTransform() { - let top = round(random() * 500); - let left = round(random() * 500); - this.element.style.transform = `translate(${left}px, ${top}px)`; +export default class TrackClickModifier extends Modifier { + @service metrics; + + get eventName() { + // get the first positional argument passed to the modifier + // + // {{track-click "like-button-click" page="some page" title="some title"}} + // ~~~~~~~~~~~~~~~~~~~ + // + return this.args.positional[0]; } - didInsertElement() { - this.timer = setInterval(() => this.updateTransform(), INTERVAL_DELAY); + get options() { + // get the named arguments passed to the modifier + // + // {{track-click "like-button-click" page="some page" title="some title"}} + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // + return this.args.named; } - willDestroyElement() { - clearInterval(this.timer); - this.timer = null; + @action onClick() { + this.metrics.trackEvent(this.eventName, this.options); + } + + didInstall() { + this.element.addEventListener('click', this.onClick, true); + } + + willRemove() { + this.element.removeEventListener('click', this.onClick, true); } } ``` +Usage: + ```hbs -
- Try to catch me! -
+ ``` -## Example with Service Injection +## Classic API -You may also want to inject a service into your modifier. +If you would like to use `Ember.Object` based APIs, such as `this.get`, `this.set`, `this.setProperties`, etc, you can import the "classic" base class instead, located at the import path `ember-class-based-modifier/classic`. -You can do that by supplying an injection object before the the modifier function. For example, suppose you wanted to track click events with `ember-metrics`: +The examples above can be rewritten using the classic API: -### Ember Object +```js +// app/modifiers/scroll-position.js + +import { computed } from '@ember/object'; +import Modifier from 'ember-class-based-modifier/classic'; + +export default Modifier.extend({ + scrollPosition: computed('args.positional.[]', function() { + // get the first positional argument passed to the modifier + // + // {{scoll-position @someNumber}} + // ~~~~~~~~~~~ + // + return this.args.positional[0]; + }), + + didReceiveArguments() { + this.element.scrollTop = this.get('scrollPosition'); + } +}); +``` ```js -// app/modifiers/track-click.js -import { inject as service } from '@ember/service'; -import { Modifier } from 'ember-oo-modifiers'; +// app/modifiers/move-randomly.js -const TrackClickModifier = Modifier.extend({ - metrics: service(), +import { action, computed } from '@ember/object'; +import Modifier from 'ember-class-based-modifier/classic'; - didInsertElement([eventName], options) { - this.trackingCallback = () => this.metrics.trackEvent(eventName, options); - this.element.addEventListener('click', this.trackingCallback, true); +const { random, round } = Math; +const DEFAULT_DELAY = 1000; + +export default Modifier.extend({ + init() { + this._super(...arguments); + this.set('setIntervalId', null); }, - willDestroyElement() { - this.element.removeEventListener('click', this.trackingCallback, true); - this.trackingCallback = null; - } -}); + delay: computed('args.named.delay', function() { + // get the named argument "delay" passed to the modifier + // + // {{move-randomly delay=@someNumber}} + // ~~~~~~~~~~~ + // + return this.args.named.delay || DEFAULT_DELAY; + }), -export default TrackClickModifier; -``` + moveElement: action(function() { + let top = round(random() * 500); + let left = round(random() * 500); + this.element.style.transform = `translate(${left}px, ${top}px)`; + }), -Then, you could use this in your template: + didReceiveArguments() { + let setIntervalId = this.get('setIntervalId'); -```hbs - -``` + if (setIntervalId !== null) { + clearInterval(setIntervalId); + } + + setIntervalId = setInterval(this.moveElement, this.get('delay')); -### Native Class + this.set('setIntervalId', setIntervalId); + }, + + willRemove() { + clearInterval(this.setIntervalId); + this.setIntervalId = null; + } +}); +``` ```js // app/modifiers/track-click.js -import { inject as service } from '@ember-decorators/service'; -import Modifier from 'ember-oo-modifiers'; -export default class TrackClickModifier extends Modifier { - @service metrics +import { action, computed } from '@ember/object'; +import { inject as service } from '@ember/service'; +import Modifier from 'ember-class-based-modifier/classic'; - didInsertElement([eventName], options) { - this.trackingCallback = () => this.metrics.trackEvent(eventName, options); - this.element.addEventListener('click', this.trackingCallback, true); - } +export default Modifier.extend({ + metrics: service(), - willDestroyElement() { - this.element.removeEventListener('click', this.trackingCallback, true); - this.trackingCallback = null; + eventName: computed('args.positional.[]', function() { + // get the first positional argument passed to the modifier + // + // {{track-click "like-button-click" page="some page" title="some title"}} + // ~~~~~~~~~~~~~~~~~~~ + // + return this.args.positional[0]; + }), + + options: computed('args.named', function() { + // get the named arguments passed to the modifier + // + // {{track-click "like-button-click" page="some page" title="some title"}} + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // + return this.args.named; + }), + + onClick: action(function() { + this.metrics.trackEvent(this.get('eventName'), this.get('options')); + }), + + didInstall() { + this.element.addEventListener('click', this.onClick, true); } -} -``` - -Then, you could use this in your template: -```hbs - + willRemove() { + this.element.removeEventListener('click', this.onClick, true); + } +}); ``` -*NOTE*: Because we are not observing the properties in the service in any way, if we are _reading_ a property on a service, the modifier will not recompute if that value changes. If that's the behavior you need, you probably want to pass that value into the modifier as an argument, rather than injecting it. +Whenever possible, it is recommended that you use the default "modern" API instead of the classic API. ## API
element
-
the DOM element the modifier is attached to.
-
didInsertElement(positional: Array, named: Object)
-
Called when the modifier is installed on the DOM element.
-
didReceiveArguments(positional: Array, named: Object)
+
The DOM element the modifier is attached to.
+
args: { positional: Array, named: Object }
+
The arguments passed to the modifier. args.positional is an array of positional arguments, and args.named is an object containing the named arguments.
+
isDestroying
+
true if the modifier is in the process of being destroyed, or has already been destroyed.
+
isDestroyed
+
true if the modifier has already been destroyed.
+
constructor(owner, args) (or init() in classic API)
+
Constructor for the modifier. You must call super(...arguments) (or this._super(...arguments) in classic API) before performing other initialization. The element is not yet available at this point (i.e. its value is null during construction).
+
didReceiveArguments()
Called when the modifier is installed and anytime the arguments are updated.
-
didUpdateArguments(positional: Array, named: Object)
-
Called anytime the arguments are updated but not on the initial install.
-
willDestroyElement(positional: Array, named: Object)
-
Called when the modifier is about to be destroyed; use for teardown code.
+
didUpdateArguments()
+
Called anytime the arguments are updated but not on the initial install. Called before didReceiveArguments.
+
didInstall()
+
Called when the modifier is installed on the DOM element. Called after didReceiveArguments.
+
willRemove()
+
Called when the DOM element is about to be destroyed; use for removing event listeners on the element and other similar clean-up tasks.
+
willDestroy()
+
Called when the modifier itself is about to be destroyed; use for teardown code. Called after willRemove. The element is no longer available at this point (i.e. its value is null during teardown).
-#### Ember Object Import - -```js -import { Modifier } from 'ember-oo-modifiers'; - -const MyModifier = Modifier.extend({ -}); - -export default MyModifier; -``` - -#### Native Class Import - -```js -import Modifier from 'ember-oo-modifiers'; - -export default class MyModifier extends Modifier { -} -``` +## API differences from [ember-oo-modifiers](https://github.com/sukima/ember-class-based-modifier/tree/maintenance/ember-oo-modifiers) + +* Renamed package to `ember-class-based-modifier`. +* No `Modifier.modifier()` function. +* Classic API is located at `ember-class-based-modifier/classic`. +* Arguments, both positional and named, are available on `this.args`. +* Named arguments do not become properties on the modifier instance. +* Arguments are not passed to life-cycle hooks. +* Renamed `didInsertElement` to `didInstall` and `willDestroyElement` to `willRemove`. This is to emphasize that when the modifier is installed or removed, the underlying element may not be freshly inserted or about to go away. Therefore, it is important to perform clean-up work in the `willRemove` to reverse any modifications you made to the element. +* Changed life-cycle hook order: `didReceiveArguments` fires before `didInstall`, and `didUpdateArguments` fires before `didReceiveArguments`, mirroring the classic component life-cycle hooks ordering. +* Added `willDestroy`, `isDestroying` and `isDestroyed` with the same semantics as Ember objects and Glimmer components. Contributing ------------------------------------------------------------------------------ diff --git a/addon/-private/create-manager.js b/addon/-private/create-manager.js deleted file mode 100644 index 06a855e..0000000 --- a/addon/-private/create-manager.js +++ /dev/null @@ -1,11 +0,0 @@ -import ModifierManager from './modifier-manager'; - -const MANAGERS = new WeakMap(); - -export default function createManager(owner) { - let manager = MANAGERS.get(owner); - if (manager === undefined) { - manager = new ModifierManager(owner); - } - return manager; -} diff --git a/addon/-private/modifier-classic.js b/addon/-private/modifier-classic.js index fa0513d..0a35c3d 100644 --- a/addon/-private/modifier-classic.js +++ b/addon/-private/modifier-classic.js @@ -1,23 +1,21 @@ import EmberObject from '@ember/object'; -import createManager from './create-manager'; -import { deprecate } from '@ember/application/deprecations'; import { setModifierManager } from '@ember/modifier'; +import Manager from './modifier-manager'; -const Modifier = EmberObject.extend({ - element: null, - didInsertElement() {}, - didRecieveArguments() {}, - didUpdateArguments() {}, - willDestroyElement() {} -}); +const ClassBasedModifier = EmberObject.extend({ + args: null, -Modifier.reopenClass({ - modifier(Klass) { - deprecate("Modifier.modifier is deprecated. Export the class directly. See https://github.com/sukima/ember-oo-modifiers/pull/8", false, { id: 'modifier-call', until: "1.0.0" }); - return Klass; - } + init() { + this._super(...arguments); + this.element = null; + }, + + didReceiveArguments() {}, + didUpdateArguments() {}, + didInstall() {}, + willRemove() {} }); -setModifierManager(createManager, Modifier); +setModifierManager(() => Manager, ClassBasedModifier); -export default Modifier; +export default ClassBasedModifier; diff --git a/addon/-private/modifier-manager.js b/addon/-private/modifier-manager.js index 900043c..f8240a0 100644 --- a/addon/-private/modifier-manager.js +++ b/addon/-private/modifier-manager.js @@ -1,44 +1,37 @@ import { capabilities } from '@ember/modifier'; +import { set } from '@ember/object'; +import { destroy, isNative } from './modifier-native' -function triggerLifecycleHook(instance, hookName, args) { - // Checking for undefined as a style choice came from - // https://emberjs.github.io/rfcs/0373-Element-Modifier-Managers.html - if (instance[hookName] !== undefined) { - return instance[hookName](args.positional, args.named); - } -} - -export default class ModifierManager { +class ClassBasedModifierManager { capabilities = capabilities('3.13'); - constructor(owner) { - this.owner = owner; - } - - createModifier(Klass, args) { - let isEmberObject = Klass.class.create !== undefined; - - if (isEmberObject) { - return Klass.create(args.named); - } else { - let Constructor = Klass.class; - return new Constructor(args.named, this.owner); - } + createModifier(factory, args) { + return factory.create({ args }); } - installModifier(instance, element, args) { + installModifier(instance, element) { instance.element = element; - triggerLifecycleHook(instance, 'didInsertElement', args); - triggerLifecycleHook(instance, 'didReceiveArguments', args); + instance.didReceiveArguments(); + instance.didInstall(); } updateModifier(instance, args) { - triggerLifecycleHook(instance, 'didReceiveArguments', args); - triggerLifecycleHook(instance, 'didUpdateArguments', args); + // TODO: this should be an args proxy + set(instance, 'args', args); + instance.didUpdateArguments(); + instance.didReceiveArguments(); } - destroyModifier(instance, args) { - triggerLifecycleHook(instance, 'willDestroyElement', args); + destroyModifier(instance) { + instance.willRemove(); instance.element = null; + + if (isNative(instance)) { + destroy(instance); + } else { + instance.destroy(); + } } } + +export default new ClassBasedModifierManager(); diff --git a/addon/-private/modifier-native.js b/addon/-private/modifier-native.js index 0a40f59..8c63680 100644 --- a/addon/-private/modifier-native.js +++ b/addon/-private/modifier-native.js @@ -1,40 +1,72 @@ -import createManager from './create-manager'; -import { setOwner } from '@ember/application'; -import { setProperties } from '@ember/object'; -import { deprecate } from '@ember/application/deprecations'; +import Ember from 'ember'; +import { getOwner, setOwner } from '@ember/application'; import { setModifierManager } from '@ember/modifier'; -import { assert } from '@ember/debug'; +import { schedule } from '@ember/runloop'; +import Manager from './modifier-manager'; -class Modifier { - constructor(attrs = {}, _owner) { - setOwner(this, _owner); - setProperties(this, attrs); +const IS_NATIVE = Symbol('native'); +const DESTROYING = Symbol('destroying'); +const DESTROYED = Symbol('destroyed'); + +export default class ClassBasedModifier { + static create(options) { + let owner = getOwner(options); + let { args } = options; + return new this(owner, args); + } + + [IS_NATIVE] = true; + [DESTROYING] = false; + [DESTROYED] = false; + + constructor(owner, args) { + setOwner(this, owner); + this.element = null; + this.args = args; } - didInsertElement() {} - didRecieveArguments() {} + didReceiveArguments() {} didUpdateArguments() {} - willDestroyElement() {} + didInstall() {} + willRemove() {} + willDestroy() {} - static modifier(Klass) { - deprecate("Modifier.modifier is deprecated. Export the class directly. See https://github.com/sukima/ember-oo-modifiers/pull/8", false, { id: 'modifier-call', until: "1.0.0" }); - return Klass; + get isDestroying() { + return this[DESTROYING]; + } + + get isDestroyed() { + return this[DESTROYED]; } } -setModifierManager(createManager, Modifier); +setModifierManager(() => Manager, ClassBasedModifier); -export function modifier(modifierFn) { - assert( - 'You must pass a function as the first argument to the `modifier` function', - modifierFn !== undefined && typeof modifierFn === 'function' - ); +export function isNative(modifier) { + return modifier[IS_NATIVE] === true; +} - return class extends Modifier { - didReceiveArguments(positional, named) { - modifierFn(this.element, positional, named); - } +export function destroy(modifier) { + if (modifier[DESTROYING]) { + return; } + + let meta = Ember.meta(modifier); + + meta.setSourceDestroying(); + modifier[DESTROYING] = true; + + schedule('actions', modifier, modifier.willDestroy); + schedule('destroy', undefined, scheduleDestroy, modifier, meta); } -export default Modifier; +function scheduleDestroy(modifier, meta) { + if (modifier[DESTROYED]) { + return; + } + + Ember.destroy(modifier); + + meta.setSourceDestroyed() + modifier[DESTROYED] = true; +} diff --git a/addon/classic.js b/addon/classic.js new file mode 100644 index 0000000..4d66610 --- /dev/null +++ b/addon/classic.js @@ -0,0 +1 @@ +export { default } from './-private/modifier-classic'; diff --git a/addon/index.js b/addon/index.js index 09846ec..92d1377 100644 --- a/addon/index.js +++ b/addon/index.js @@ -1,5 +1 @@ -import ModifierNative, { modifier } from './-private/modifier-native'; -import ModifierClassic from './-private/modifier-classic'; - -export default ModifierNative; -export { modifier, ModifierClassic as Modifier }; +export { default } from './-private/modifier-native'; diff --git a/index.js b/index.js index 937758d..2e1d1d8 100644 --- a/index.js +++ b/index.js @@ -1,11 +1,5 @@ 'use strict'; -const chalk = require('chalk'); module.exports = { - name: require('./package').name, - - included: function() { - this.ui.writeLine(chalk.yellow('DEPRECATION: ember-oo-modifiers has been renamed to ember-class-based-modifier. Updates will continue there.')); - return this._super.included.call(this, ...arguments); - } + name: require('./package').name }; diff --git a/package.json b/package.json index 9be744a..0879949 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { - "name": "ember-oo-modifiers", - "version": "0.5.2", - "description": "The default blueprint for ember-cli addons.", + "name": "ember-class-based-modifier", + "version": "0.9.0", + "description": "A class-based API for authoring element modifiers in Ember.", "keywords": [ "ember-addon" ], - "repository": "https://github.com/sukima/ember-oo-modifiers", + "repository": "https://github.com/sukima/ember-class-based-modifier", "license": "MIT", "author": "", "directories": { @@ -63,7 +63,7 @@ "release-it": "^10.2.0" }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": "8.* || >= 10.*" }, "ember-addon": { "configPath": "tests/dummy/config" diff --git a/tests/dummy/app/modifiers/click.js b/tests/dummy/app/modifiers/click.js index e07b825..6924288 100644 --- a/tests/dummy/app/modifiers/click.js +++ b/tests/dummy/app/modifiers/click.js @@ -1,16 +1,15 @@ -import Modifier from 'ember-oo-modifiers'; +import Modifier from 'ember-class-based-modifier'; -const ClickModifier = Modifier.extend({ - didInsertElement() { - this._super(...arguments); - this.callback = () => alert('You clicked me!'); +export default class ClickModifier extends Modifier { + callback() { + alert('You clicked me!'); + } + + didInstall() { this.element.addEventListener('click', this.callback); - }, + } - willDestroyElement() { - this._super(...arguments); + willRemove() { this.element.removeEventListener('click', this.callback); } -}); - -export default Modifier.modifier(ClickModifier); +} diff --git a/tests/integration/modifier-managers/classic-test.js b/tests/integration/modifier-managers/classic-test.js new file mode 100644 index 0000000..1ec92d2 --- /dev/null +++ b/tests/integration/modifier-managers/classic-test.js @@ -0,0 +1,72 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import Service, { inject as service } from '@ember/service'; +import hbs from 'htmlbars-inline-precompile'; +import Modifier from 'ember-class-based-modifier/classic'; +import { testHooks } from './shared'; + +module('Integration | Modifier Manager | class-based modifier (classic class)', function(hooks) { + setupRenderingTest(hooks); + + testHooks(callback => Modifier.extend({ + init() { + this._super(...arguments); + callback('constructor', this); + }, + + didReceiveArguments() { + callback('didReceiveArguments', this); + }, + + didUpdateArguments() { + callback('didUpdateArguments', this); + }, + + didInstall() { + callback('didInstall', this); + }, + + willRemove() { + callback('willRemove', this); + }, + + willDestroy() { + callback('willDestroy', this); + } + })); + + module('service injection', function() { + test('can participate in ember dependency injection', async function(assert) { + this.owner.register( + 'service:foo', + Service.extend({ isFooService: true }) + ); + + this.owner.register( + 'service:bar', + Service.extend({ isBarService: true }) + ); + + this.owner.register( + 'modifier:songbird', + Modifier.extend({ + foo: service(), + baz: service('bar'), + + init() { + this._super(...arguments); + + assert.step('constructor called'); + assert.strictEqual(this.foo.isFooService, true, 'this.foo.isFooService'); + assert.strictEqual(this.baz.isBarService, true, 'this.baz.isBarService'); + } + }) + ); + + await render(hbs`

Hello

`); + + assert.verifySteps(['constructor called']); + }); + }); +}); diff --git a/tests/integration/modifier-managers/native-test.js b/tests/integration/modifier-managers/native-test.js new file mode 100644 index 0000000..9c90861 --- /dev/null +++ b/tests/integration/modifier-managers/native-test.js @@ -0,0 +1,75 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render } from '@ember/test-helpers'; +import Service, { inject as service } from '@ember/service'; +import hbs from 'htmlbars-inline-precompile'; +import Modifier from 'ember-class-based-modifier'; +import { testHooks } from './shared'; + +module('Integration | Modifier Manager | class-based modifier (native class)', function(hooks) { + setupRenderingTest(hooks); + + testHooks(callback => class NativeModifier extends Modifier { + constructor() { + super(...arguments); + callback('constructor', this); + } + + didReceiveArguments() { + callback('didReceiveArguments', this); + } + + didUpdateArguments() { + callback('didUpdateArguments', this); + } + + didInstall() { + callback('didInstall', this); + } + + willRemove() { + callback('willRemove', this); + } + + willDestroy() { + callback('willDestroy', this); + } + }); + + module('service injection', function() { + test('can participate in ember dependency injection', async function(assert) { + let called = false; + + this.owner.register( + 'service:foo', + Service.extend({ isFooService: true }) + ); + + this.owner.register( + 'service:bar', + Service.extend({ isBarService: true }) + ); + + this.owner.register( + 'modifier:songbird', + class NativeModifier extends Modifier { + @service foo; + @service('bar') baz; + + constructor() { + super(...arguments); + + called = true; + + assert.strictEqual(this.foo.isFooService, true, 'this.foo.isFooService'); + assert.strictEqual(this.baz.isBarService, true, 'this.baz.isBarService'); + } + } + ); + + await render(hbs`

Hello

`); + + assert.strictEqual(called, true, 'constructor called'); + }); + }); +}); diff --git a/tests/integration/modifier-managers/oo-modifiers-classic-test.js b/tests/integration/modifier-managers/oo-modifiers-classic-test.js deleted file mode 100644 index 1343541..0000000 --- a/tests/integration/modifier-managers/oo-modifiers-classic-test.js +++ /dev/null @@ -1,525 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, settled } from '@ember/test-helpers'; -import Service, { inject as service } from '@ember/service'; -import hbs from 'htmlbars-inline-precompile'; -import { Modifier } from 'ember-oo-modifiers'; -import { registerDeprecationHandler } from '@ember/debug'; - -let isRegistered = false; -let deprecations; - -module('Integration | Modifier Manager | oo modifier (classic)', function(hooks) { - setupRenderingTest(hooks); - - hooks.beforeEach(function() { - deprecations = []; - if (!isRegistered) { - registerDeprecationHandler((message, options, next) => { - deprecations.push(message); - next(message, options); - }); - isRegistered = true; - } - - this.registerModifier = (name, modifier) => { - this.owner.register(`modifier:${name}`, modifier); - }; - this.registerModifierClass = (name, ModifierClass) => { - this.registerModifier(name, ModifierClass); - }; - }); - - module('didInsertElement with calling deprecated Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didInsertElement() { assert.equal(this.element.tagName, 'H1'); } - }) - ) - ); - await render(hbs`

Hello

`); - }); - - test('positional arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didInsertElement([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ) - ); - await render(hbs`

Hey

`); - }); - - test('named arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didInsertElement(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ) - ); - await render(hbs`

Hey

`); - }); - }); - - module('didInsertElement without calling Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didInsertElement() { assert.equal(this.element.tagName, 'H1'); } - }) - ); - await render(hbs`

Hello

`); - }); - - test('positional arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didInsertElement([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ); - await render(hbs`

Hey

`); - }); - - test('named arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didInsertElement(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ); - await render(hbs`

Hey

`); - }); - }); - - module('didRecieveArguments with calling deprecated Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didReceiveArguments() { assert.equal(this.element.tagName, 'H1'); } - }) - ) - ); - await render(hbs`

Hello

`); - }); - - test('positional arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didReceiveArguments([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ) - ); - await render(hbs`

Hey

`); - }); - - test('named arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didReceiveArguments(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ) - ); - await render(hbs`

Hey

`); - }); - }); - - module('didRecieveArguments without calling Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didReceiveArguments() { assert.equal(this.element.tagName, 'H1'); } - }) - ); - await render(hbs`

Hello

`); - }); - - test('positional arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didReceiveArguments([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ); - await render(hbs`

Hey

`); - }); - - test('named arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didReceiveArguments(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ); - await render(hbs`

Hey

`); - }); - }); - - module('didUpdateArguments with calling deprecated Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didUpdateArguments() { assert.equal(this.element.tagName, 'H1'); } - }) - ) - ); - await render(hbs`

Hello

`); - this.set('value', 1); - }); - - test('positional arguments are passed', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didUpdateArguments([, a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ) - ); - await render(hbs`

Hey

`); - this.set('value', 1); - }); - - test('named arguments are passed', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didUpdateArguments(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ) - ); - await render(hbs`

Hey

`); - this.set('value', 1); - }); - }); - - module('didUpdateArguments without calling Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didUpdateArguments() { assert.equal(this.element.tagName, 'H1'); } - }) - ); - await render(hbs`

Hello

`); - this.set('value', 1); - }); - - test('positional arguments are passed', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didUpdateArguments([, a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ); - await render(hbs`

Hey

`); - this.set('value', 1); - }); - - test('named arguments are passed', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didUpdateArguments(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ); - await render(hbs`

Hey

`); - this.set('value', 1); - }); - }); - - module('willDestroyElement with calling deprecated Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - willDestroyElement() { assert.equal(this.element.tagName, 'H1'); } - }) - ) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hello

- {{/if}} - `); - this.set('shouldRender', false); - }); - - test('positional arguments are passed', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - willDestroyElement([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('shouldRender', false); - }); - - test('named arguments are passed', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - willDestroyElement(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('shouldRender', false); - }); - }); - - module('willDestroyElement without calling Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - Modifier.extend({ - willDestroyElement() { assert.equal(this.element.tagName, 'H1'); } - }) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hello

- {{/if}} - `); - this.set('shouldRender', false); - }); - - test('positional arguments are passed', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - Modifier.extend({ - willDestroyElement([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('shouldRender', false); - }); - - test('named arguments are passed', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - Modifier.extend({ - willDestroyElement(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - }) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('shouldRender', false); - }); - }); - - module('Lifecycle and dependency with calling deprecated Modifier.modifier', function() { - test('has correct lifecycle hooks ordering', async function(assert) { - let callstack = []; - this.value = 0; - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - didInsertElement() { callstack.push('didInsertElement'); }, - didReceiveArguments() { callstack.push('didReceiveArguments'); }, - didUpdateArguments() { callstack.push('didUpdateArguments'); }, - willDestroyElement() { callstack.push('willDestroyElement'); } - }) - ) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('value', 1); - await settled(); - this.set('shouldRender', false); - await settled(); - assert.deepEqual(callstack, [ - 'didInsertElement', - 'didReceiveArguments', - 'didReceiveArguments', - 'didUpdateArguments', - 'willDestroyElement' - ]); - }); - - test('can participate in ember dependency injection', async function(assert) { - this.owner.register( - 'service:test-service', - Service.extend({ value: 'test-service-value' }) - ); - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({ - testService: service(), - didInsertElement() { - assert.equal(this.testService.value, 'test-service-value'); - } - }) - ) - ); - await render(hbs`

Hello

`); - }); - }); - - module('Lifecycle and dependency without calling Modifier.modifier', function() { - test('has correct lifecycle hooks ordering', async function(assert) { - let callstack = []; - this.value = 0; - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - Modifier.extend({ - didInsertElement() { callstack.push('didInsertElement'); }, - didReceiveArguments() { callstack.push('didReceiveArguments'); }, - didUpdateArguments() { callstack.push('didUpdateArguments'); }, - willDestroyElement() { callstack.push('willDestroyElement'); } - }) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('value', 1); - await settled(); - this.set('shouldRender', false); - await settled(); - assert.deepEqual(callstack, [ - 'didInsertElement', - 'didReceiveArguments', - 'didReceiveArguments', - 'didUpdateArguments', - 'willDestroyElement' - ]); - }); - - test('can participate in ember dependency injection', async function(assert) { - this.owner.register( - 'service:test-service', - Service.extend({ value: 'test-service-value' }) - ); - this.registerModifierClass( - 'songbird', - Modifier.extend({ - testService: service(), - didInsertElement() { - assert.equal(this.testService.value, 'test-service-value'); - } - }) - ); - await render(hbs`

Hello

`); - }); - }); - - module('Modifier.modifier deprecations', function() { - test('rendering with Modifier.modifier causes deprecation warning', async function(assert) { - this.registerModifierClass( - 'songbird', - Modifier.modifier( - Modifier.extend({}) - ) - ); - await render(hbs`

Hello

`); - assert.ok( deprecations.includes("Modifier.modifier is deprecated. Export the class directly. See https://github.com/sukima/ember-oo-modifiers/pull/8") ); - }); - }); -}); diff --git a/tests/integration/modifier-managers/oo-modifiers-native-test.js b/tests/integration/modifier-managers/oo-modifiers-native-test.js deleted file mode 100644 index e4fd9e2..0000000 --- a/tests/integration/modifier-managers/oo-modifiers-native-test.js +++ /dev/null @@ -1,554 +0,0 @@ -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'ember-qunit'; -import { render, settled } from '@ember/test-helpers'; -import Service from '@ember/service'; -import { inject as service } from '@ember/service'; -import hbs from 'htmlbars-inline-precompile'; -import Modifier, { modifier } from 'ember-oo-modifiers'; -import { registerDeprecationHandler } from '@ember/debug'; - -let isRegistered = false; -let deprecations; - -module('Integration | Modifier Manager | oo modifier (native)', function(hooks) { - setupRenderingTest(hooks); - - hooks.beforeEach(function() { - deprecations = []; - if (!isRegistered) { - registerDeprecationHandler((message, options, next) => { - deprecations.push(message); - next(message, options); - }); - isRegistered = true; - } - - this.registerModifier = (name, modifier) => { - this.owner.register(`modifier:${name}`, modifier); - }; - this.registerModifierClass = (name, ModifierClass) => { - this.registerModifier(name, ModifierClass); - }; - }); - - module('didInsertElement with calling deprecated Modifier.modfier', function() { - test('it has DOM element on this.element', async function(assert) { - class SongbirdModifier extends Modifier { - didInsertElement() { assert.equal(this.element.tagName, 'H1'); } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hello

`); - }); - - test('positional arguments are passed', async function(assert) { - class SongbirdModifier extends Modifier { - didInsertElement([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hey

`); - }); - - test('named arguments are passed', async function(assert) { - class SongbirdModifier extends Modifier { - didInsertElement(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hey

`); - }); - }); - - module('didInsertElement without calling Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didInsertElement() { assert.equal(this.element.tagName, 'H1'); } - } - ); - await render(hbs`

Hello

`); - }); - - test('positional arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didInsertElement([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - ); - await render(hbs`

Hey

`); - }); - - test('named arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didInsertElement(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - ); - await render(hbs`

Hey

`); - }); - }); - - module('didRecieveArguments with calling deprecated Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - class SongbirdModifier extends Modifier { - didReceiveArguments() { assert.equal(this.element.tagName, 'H1'); } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hello

`); - }); - - test('positional arguments are passed', async function(assert) { - class SongbirdModifier extends Modifier { - didReceiveArguments([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hey

`); - }); - - test('named arguments are passed', async function(assert) { - class SongbirdModifier extends Modifier { - didReceiveArguments(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hey

`); - }); - }); - - module('didRecieveArguments without calling Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didReceiveArguments() { assert.equal(this.element.tagName, 'H1'); } - } - ); - await render(hbs`

Hello

`); - }); - - test('positional arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didReceiveArguments([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - ); - await render(hbs`

Hey

`); - }); - - test('named arguments are passed', async function(assert) { - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didReceiveArguments(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - ); - await render(hbs`

Hey

`); - }); - }); - - module('didUpdateArguments with calling deprecated Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.value = 0; - class SongbirdModifier extends Modifier { - didUpdateArguments() { assert.equal(this.element.tagName, 'H1'); } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hello

`); - this.set('value', 1); - }); - - test('positional arguments are passed', async function(assert) { - this.value = 0; - class SongbirdModifier extends Modifier { - didUpdateArguments([, a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hey

`); - this.set('value', 1); - }); - - test('named arguments are passed', async function(assert) { - this.value = 0; - class SongbirdModifier extends Modifier { - didUpdateArguments(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hey

`); - this.set('value', 1); - }); - }); - - module('didUpdateArguments without calling Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didUpdateArguments() { assert.equal(this.element.tagName, 'H1'); } - } - ); - await render(hbs`

Hello

`); - this.set('value', 1); - }); - - test('positional arguments are passed', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didUpdateArguments([, a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - ); - await render(hbs`

Hey

`); - this.set('value', 1); - }); - - test('named arguments are passed', async function(assert) { - this.value = 0; - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didUpdateArguments(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - ); - await render(hbs`

Hey

`); - this.set('value', 1); - }); - }); - - module('willDestroyElement with calling deprecated Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.shouldRender = true; - class SongbirdModifier extends Modifier { - willDestroyElement() { assert.equal(this.element.tagName, 'H1'); } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hello

- {{/if}} - `); - this.set('shouldRender', false); - }); - - test('positional arguments are passed', async function(assert) { - this.shouldRender = true; - class SongbirdModifier extends Modifier { - willDestroyElement([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('shouldRender', false); - }); - - test('named arguments are passed', async function(assert) { - this.shouldRender = true; - class SongbirdModifier extends Modifier { - willDestroyElement(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('shouldRender', false); - }); - }); - - module('willDestroyElement without calling Modifier.modifier', function() { - test('it has DOM element on this.element', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - willDestroyElement() { assert.equal(this.element.tagName, 'H1'); } - } - ); - await render(hbs` - {{#if this.shouldRender}} -

Hello

- {{/if}} - `); - this.set('shouldRender', false); - }); - - test('positional arguments are passed', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - willDestroyElement([a, b]) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('shouldRender', false); - }); - - test('named arguments are passed', async function(assert) { - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - willDestroyElement(_, { a, b }) { - assert.equal(a, '1'); - assert.equal(b, '2'); - } - } - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('shouldRender', false); - }); - }); - - module('Lifecycle and dependency with calling deprecated Modifier.modifier', function() { - test('has correct lifecycle hooks ordering', async function(assert) { - let callstack = []; - this.value = 0; - this.shouldRender = true; - class SongbirdModifier extends Modifier { - didInsertElement() { callstack.push('didInsertElement'); } - didReceiveArguments() { callstack.push('didReceiveArguments'); } - didUpdateArguments() { callstack.push('didUpdateArguments'); } - willDestroyElement() { callstack.push('willDestroyElement'); } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('value', 1); - await settled(); - this.set('shouldRender', false); - await settled(); - assert.deepEqual(callstack, [ - 'didInsertElement', - 'didReceiveArguments', - 'didReceiveArguments', - 'didUpdateArguments', - 'willDestroyElement' - ]); - }); - - test('can participate in ember dependency injection', async function(assert) { - this.owner.register( - 'service:test-service', - class TestService extends Service { - value = 'test-service-value' - } - ); - class SongbirdModifier extends Modifier { - @service testService - didInsertElement() { - assert.equal(this.testService.value, 'test-service-value'); - } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hello

`); - }); - }); - - module('Lifecycle and dependency without calling Modifier.modifier', function() { - test('has correct lifecycle hooks ordering', async function(assert) { - let callstack = []; - this.value = 0; - this.shouldRender = true; - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - didInsertElement() { callstack.push('didInsertElement'); } - didReceiveArguments() { callstack.push('didReceiveArguments'); } - didUpdateArguments() { callstack.push('didUpdateArguments'); } - willDestroyElement() { callstack.push('willDestroyElement'); } - } - ); - await render(hbs` - {{#if this.shouldRender}} -

Hey

- {{/if}} - `); - this.set('value', 1); - await settled(); - this.set('shouldRender', false); - await settled(); - assert.deepEqual(callstack, [ - 'didInsertElement', - 'didReceiveArguments', - 'didReceiveArguments', - 'didUpdateArguments', - 'willDestroyElement' - ]); - }); - - test('can participate in ember dependency injection', async function(assert) { - this.owner.register( - 'service:test-service', - class TestService extends Service { - value = 'test-service-value' - } - ); - this.registerModifierClass( - 'songbird', - class SongbirdModifier extends Modifier { - @service testService - didInsertElement() { - assert.equal(this.testService.value, 'test-service-value'); - } - } - ); - await render(hbs`

Hello

`); - }); - }); - - module('Modifier.modifier deprecations', function() { - test('rendering with Modifier.modifier causes deprecation warning', async function(assert) { - class SongbirdModifier extends Modifier { - didInsertElement() { assert.equal(this.element.tagName, 'H1'); } - } - this.registerModifierClass( - 'songbird', - Modifier.modifier(SongbirdModifier) - ); - await render(hbs`

Hello

`); - assert.ok( deprecations.includes("Modifier.modifier is deprecated. Export the class directly. See https://github.com/sukima/ember-oo-modifiers/pull/8") ); - }); - }); - - module('modifier function', function() { - test('it calls passed function on `didReceiveArguments`', async function(assert) { - this.positional = '1'; - this.named = 'a'; - - this.registerModifierClass( - 'songbird', - modifier(function songbird(element, [positional], { named }) { - assert.step(element.tagName); - assert.step(positional); - assert.step(named); - }) - ); - - await render(hbs`

Hello

`); - - this.set('positional', '2'); - this.set('named', 'b'); - await settled(); - - assert.verifySteps([ - 'H1', '1', 'a', - 'H1', '2', 'a', - 'H1', '2', 'b' - ]); - }); - - test('it asserts when argument is not a function', function(assert) { - assert.throws(() => { - this.registerModifierClass( - 'songbird', - modifier(true) - ); - }, /You must pass a function as the first argument to the `modifier` function/); - }); - }) -}); diff --git a/tests/integration/modifier-managers/shared.js b/tests/integration/modifier-managers/shared.js new file mode 100644 index 0000000..3d3a2da --- /dev/null +++ b/tests/integration/modifier-managers/shared.js @@ -0,0 +1,406 @@ +import { render, settled } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; +import { module, test } from 'qunit'; + +export function testHooks(factory) { + testHook({ + name: 'constructor', + insert: true, + update: false, + destroy: false, + element: false, + factory + }); + + testHook({ + name: 'didReceiveArguments', + insert: true, + update: true, + destroy: false, + element: true, + factory + }); + + testHook({ + name: 'didUpdateArguments', + insert: false, + update: true, + destroy: false, + element: true, + factory + }); + + testHook({ + name: 'didInstall', + insert: true, + update: false, + destroy: false, + element: true, + factory + }); + + testHook({ + name: 'willRemove', + insert: false, + update: false, + destroy: true, + element: true, + factory + }); + + testHook({ + name: 'willDestroy', + insert: false, + update: false, + destroy: true, + element: false, + factory + }); + + testHooksOrdering(factory); +} + +function testHook({ name, insert, update, destroy, element, factory }) { + module(`\`${name}\` hook`, function(hooks) { + hooks.beforeEach(function(assert) { + this.instance = null; + + let called = () => { + assert.ok(false, `\`${name}\` hook was called unexpectedly`); + }; + + this.hook = assertions => { + let callback = (hookName, instance) => { + this.instance = instance; + + if (hookName === name) { + called(); + + assert.strictEqual(instance.isDestroying, name === 'willDestroy', 'isDestroying'); + assert.strictEqual(instance.isDestroyed, false, 'isDestroyed'); + + assertions(instance); + } + }; + + this.owner.register('modifier:songbird', factory(callback)); + }; + + this.assertCalled = async (shouldCall, callback) => { + let count = 0; + let _called = called; + + if (shouldCall) { + called = () => count++; + } + + try { + await callback(); + } finally { + if (shouldCall) { + assert.equal(count, 1, `Expected \`${name}\` hook to be called exactly once`); + } + + called = _called; + } + }; + }); + + hooks.afterEach(async function(assert) { + await settled(); + + assert.strictEqual(this.instance.isDestroying, true, 'isDestroying'); + assert.strictEqual(this.instance.isDestroyed, true, 'isDestroyed'); + }); + + if (element) { + test('it has access to the DOM element', async function(assert) { + this.hook(instance => { + assert.equal(instance.element.tagName, 'H1', 'this.element.tagName'); + assert.equal(instance.element.id, 'expected', 'this.element.id'); + }); + + assert.step('no-op render'); + + await this.assertCalled(false, async () => { + this.setProperties({ + isShowing: false, + foo: 'foo', + }); + + await render(hbs` + {{#if this.isShowing}} +

Hello

+ {{/if}} + `); + }); + + assert.step('insert'); + + await this.assertCalled(insert, () => { + this.set('isShowing', true); + }); + + assert.step('update'); + + await this.assertCalled(update, () => { + this.set('foo', 'FOO'); + }); + + assert.step('destroy'); + + await this.assertCalled(destroy, () => { + this.set('isShowing', false); + }); + + assert.verifySteps([ + 'no-op render', + 'insert', + 'update', + 'destroy' + ]); + }); + } else { + test('it does not have access to the DOM element', async function(assert) { + this.hook(instance => { + assert.strictEqual(instance.element, null, 'this.element'); + }); + + assert.step('no-op render'); + + await this.assertCalled(false, async () => { + this.setProperties({ + isShowing: false, + foo: 'foo', + }); + + await render(hbs` + {{#if this.isShowing}} +

Hello

+ {{/if}} + `); + }); + + assert.step('insert'); + + await this.assertCalled(insert, () => { + this.set('isShowing', true); + }); + + assert.step('update'); + + await this.assertCalled(update, () => { + this.set('foo', 'FOO'); + }); + + assert.step('destroy'); + + await this.assertCalled(destroy, () => { + this.set('isShowing', false); + }); + + assert.verifySteps([ + 'no-op render', + 'insert', + 'update', + 'destroy' + ]); + }); + } + + test('has access to positional arguments', async function(assert) { + let expected; + + this.hook(instance => { + assert.deepEqual(instance.args.positional, expected, 'this.args.positional'); + }); + + assert.step('no-op render'); + + await this.assertCalled(false, async () => { + this.setProperties({ + isShowing: false, + foo: 'foo', + bar: 'bar', + }); + + await render(hbs` + {{#if this.isShowing}} +

Hello

+ {{/if}} + `); + }); + + assert.step('insert'); + expected = ['foo', 'bar']; + + await this.assertCalled(insert, () => { + this.set('isShowing', true); + }); + + assert.step('update 1'); + expected = ['FOO', 'bar']; + + await this.assertCalled(update, () => { + this.set('foo', 'FOO'); + }); + + assert.step('update 2'); + expected = ['FOO', 'BAR']; + + await this.assertCalled(update, () => { + this.set('bar', 'BAR'); + }); + + assert.step('destroy'); + + await this.assertCalled(destroy, () => { + this.set('isShowing', false); + }); + + assert.verifySteps([ + 'no-op render', + 'insert', + 'update 1', + 'update 2', + 'destroy' + ]); + }); + + test('has access to positional arguments', async function(assert) { + let expected; + + this.hook(instance => { + assert.deepEqual(instance.args.named, expected, 'this.args.named'); + }); + + assert.step('no-op render'); + + await this.assertCalled(false, async () => { + this.setProperties({ + isShowing: false, + foo: 'foo', + bar: 'bar', + }); + + await render(hbs` + {{#if this.isShowing}} +

Hello

+ {{/if}} + `); + }); + + assert.step('insert'); + expected = { foo: 'foo', bar: 'bar' }; + + await this.assertCalled(insert, () => { + this.set('isShowing', true); + }); + + assert.step('update 1'); + expected = { foo: 'FOO', bar: 'bar' }; + + await this.assertCalled(update, () => { + this.set('foo', 'FOO'); + }); + + assert.step('update 2'); + expected = { foo: 'FOO', bar: 'BAR' }; + + await this.assertCalled(update, () => { + this.set('bar', 'BAR'); + }); + + assert.step('destroy'); + + await this.assertCalled(destroy, () => { + this.set('isShowing', false); + }); + + assert.verifySteps([ + 'no-op render', + 'insert', + 'update 1', + 'update 2', + 'destroy' + ]); + }); + }); +} + +function testHooksOrdering(factory) { + module('hooks ordering', function() { + test('hooks are fired in the right order', async function (assert) { + let actualHooks; + + let callback = function(name) { + if (actualHooks) { + actualHooks.push(name); + } else { + assert.ok(false, `\`${name}\` hook was called unexpectedly`); + } + }; + + async function assertHooks(expectedHooks, callback) { + actualHooks = []; + + try { + await callback(); + } finally { + assert.deepEqual(actualHooks, expectedHooks, 'hooks'); + actualHooks = undefined; + } + } + + this.owner.register('modifier:songbird', factory(callback)); + + assert.step('no-op render'); + + await assertHooks([], async () => { + this.setProperties({ + isShowing: false, + foo: 'foo', + bar: 'bar', + }); + + await render(hbs` + {{#if this.isShowing}} +

Hello

+ {{/if}} + `); + }); + + assert.step('insert'); + + await assertHooks(['constructor', 'didReceiveArguments', 'didInstall'], () => { + this.set('isShowing', true); + }); + + assert.step('update 1'); + + await assertHooks(['didUpdateArguments', 'didReceiveArguments'], () => { + this.set('foo', 'FOO'); + }); + + assert.step('update 2'); + + await assertHooks(['didUpdateArguments', 'didReceiveArguments'], () => { + this.set('bar', 'BAR'); + }); + + assert.step('destroy'); + + await assertHooks(['willRemove', 'willDestroy'], () => { + this.set('isShowing', false); + }); + + assert.verifySteps([ + 'no-op render', + 'insert', + 'update 1', + 'update 2', + 'destroy' + ]); + }); + }); +} diff --git a/yarn.lock b/yarn.lock index 74925f3..1e6d483 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,6 +16,13 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + "@babel/core@^7.0.0", "@babel/core@^7.1.6", "@babel/core@^7.3.3": version "7.3.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" @@ -36,6 +43,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.2.2": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" + integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.0" + "@babel/helpers" "^7.6.0" + "@babel/parser" "^7.6.0" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@7.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" @@ -69,6 +96,17 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" + integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA== + dependencies: + "@babel/types" "^7.6.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -278,6 +316,13 @@ dependencies: "@babel/types" "^7.4.0" +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + "@babel/helper-wrap-function@^7.1.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" @@ -297,6 +342,15 @@ "@babel/traverse" "^7.1.5" "@babel/types" "^7.3.0" +"@babel/helpers@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e" + integrity sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ== + dependencies: + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" + "@babel/highlight@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" @@ -325,6 +379,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.3.tgz#eb3ac80f64aa101c907d4ce5406360fe75b7895b" integrity sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ== +"@babel/parser@^7.4.5", "@babel/parser@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" + integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== + "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -406,6 +465,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-dynamic-import@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" + integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" @@ -757,6 +823,15 @@ "@babel/parser" "^7.2.2" "@babel/types" "^7.2.2" +"@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + "@babel/traverse@7.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" @@ -788,6 +863,21 @@ globals "^11.1.0" lodash "^4.17.11" +"@babel/traverse@^7.2.4", "@babel/traverse@^7.4.5", "@babel/traverse@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" + integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/traverse@^7.4.0": version "7.4.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.3.tgz#1a01f078fc575d589ff30c0f71bf3c3d9ccbad84" @@ -821,6 +911,15 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@babel/types@^7.3.2", "@babel/types@^7.4.4", "@babel/types@^7.6.0": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" + integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@babel/types@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" @@ -870,6 +969,52 @@ ember-cli-babel "^6.12.0" ember-cli-htmlbars-inline-precompile "^1.0.0" +"@embroider/core@0.4.3", "@embroider/core@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@embroider/core/-/core-0.4.3.tgz#117973b9761d68aee14d820bbaefeb05d5984ba8" + integrity sha512-n24WU/dGuGDqZrljWoX8raK2wFX3R8iJG0rfCWx+1kW87IvB+ZgS3j4KiZ/S788BA07udrYsrgecYnciG2bBMg== + dependencies: + "@babel/core" "^7.2.2" + "@babel/parser" "^7.3.4" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + "@embroider/macros" "0.4.3" + assert-never "^1.1.0" + babel-plugin-syntax-dynamic-import "^6.18.0" + broccoli-persistent-filter "^2.2.2" + broccoli-plugin "^1.3.0" + broccoli-source "^1.1.0" + debug "^3.1.0" + fast-sourcemap-concat "^1.4.0" + filesize "^4.1.2" + fs-extra "^7.0.1" + fs-tree-diff "^2.0.0" + handlebars "^4.0.11" + js-string-escape "^1.0.1" + jsdom "^12.0.0" + json-stable-stringify "^1.0.1" + lodash "^4.17.10" + pkg-up "^2.0.0" + resolve "^1.8.1" + resolve-package-path "^1.2.2" + semver "^5.5.0" + strip-bom "^3.0.0" + typescript-memoize "^1.0.0-alpha.3" + walk-sync "^1.1.3" + +"@embroider/macros@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.4.3.tgz#ea5604b8bd578520f15886a428a6c4fa9481abc0" + integrity sha512-vq/Ny2ULpKxq60Sv5usSrz651dXFM5phP/O5G5MWDY8YOodIkRLGqtub34sB0OmwxpCuTntUzl9P/I4wkyQ3Kw== + dependencies: + "@babel/core" "^7.2.2" + "@babel/traverse" "^7.2.4" + "@babel/types" "^7.3.2" + "@embroider/core" "0.4.3" + resolve "^1.8.1" + semver "^5.6.0" + "@glimmer/compiler@^0.38.0": version "0.38.1" resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.38.1.tgz#03b43a2a8a04b1ed39517862158e8897d0f6798b" @@ -890,13 +1035,6 @@ resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07" integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc= -"@glimmer/interfaces@^0.36.6": - version "0.36.6" - resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.36.6.tgz#07350f321988fd3cf2c41a96fc787ea84b4886fa" - integrity sha512-JM+oc791Zwo3vyPEh5+MwUOug3Fv7lEa3ty0JdA7GkjSRruZpmMf8DvWAKXna2DJxNLZTPJgcyQ57Xy0ItT7Ow== - dependencies: - "@glimmer/wire-format" "^0.36.6" - "@glimmer/interfaces@^0.38.1": version "0.38.1" resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.38.1.tgz#5b1c174363396b99d6a6bddb35538151e4c4c989" @@ -905,6 +1043,11 @@ "@glimmer/wire-format" "^0.38.1" "@simple-dom/interface" "1.4.0" +"@glimmer/interfaces@^0.42.0": + version "0.42.0" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.42.0.tgz#525f5352dd78011eef7b3eb0e3fb61b981c94319" + integrity sha512-lZlydeRRK3yL6pco0gCstPVuC5XYjBUtql1vSvWTRd+MUO0Chg8kxIvduFVg6f+Xfr1kqWd2YQq1MCMdmfzfvg== + "@glimmer/resolver@^0.4.1": version "0.4.3" resolved "https://registry.yarnpkg.com/@glimmer/resolver/-/resolver-0.4.3.tgz#b1baae5c3291b4621002ccf8d7870466097e841d" @@ -912,16 +1055,6 @@ dependencies: "@glimmer/di" "^0.2.0" -"@glimmer/syntax@^0.36.4": - version "0.36.6" - resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.36.6.tgz#d37b2118b279546b3efc94ab3fa5fc52fe5d92f8" - integrity sha512-VBGUmNMNBK3zYgrSAXzqzTLQx9K1L71ABCaEAreXlKIuYg3NY8p/B5g40tXPhy9gP81Ieyp+fFq7v94XB4Anvw== - dependencies: - "@glimmer/interfaces" "^0.36.6" - "@glimmer/util" "^0.36.6" - handlebars "^4.0.6" - simple-html-tokenizer "^0.5.6" - "@glimmer/syntax@^0.38.1": version "0.38.1" resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.38.1.tgz#625875da5f1e827ad5806fdaa23e2cd00369fda8" @@ -932,22 +1065,25 @@ handlebars "^4.0.6" simple-html-tokenizer "^0.5.6" -"@glimmer/util@^0.36.6": - version "0.36.6" - resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.36.6.tgz#0b36d571ef2f052011f73f379593385ec1abd308" - integrity sha512-ljlXwrtg3yhftH/TX8VXNEpqkoweNRumhRq41Y8diGnd7wFWiuiWZUWghTcpAFtilVCOc2e+9WvdvUWTISM1MA== +"@glimmer/syntax@^0.42.0": + version "0.42.0" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.42.0.tgz#65d38f6f6339e0e00cfbb34bc08ed3ff94f080c6" + integrity sha512-H0vydEQjlSqlVyjUmQxOy9BMBdL8OAII4GQjTXHWOQKmQBreZ05Dpr2EbXusiby6E2lMgbcPOqxGXdB/VVUBew== + dependencies: + "@glimmer/interfaces" "^0.42.0" + "@glimmer/util" "^0.42.0" + handlebars "^4.0.13" + simple-html-tokenizer "^0.5.8" "@glimmer/util@^0.38.1": version "0.38.1" resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.38.1.tgz#41ca0544f95ec980bc492f4f0e5a85564964c028" integrity sha512-WAe+bqJSFBR8EmA/NsxcqWmyi2AfOyW9x1jpWczZHJiBkvssiRF6nre39CJVwwMPlFDtdKzvnRQkWVl8ZBhcNw== -"@glimmer/wire-format@^0.36.6": - version "0.36.6" - resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.36.6.tgz#8a139ef0a686a9d054838c20ff2d53bebd289955" - integrity sha512-WSm5qSVCunDkhzvBEmbDQRtk3vLVbMqkDFb34xBJ8MLWd8Sohirf0ncRoaB5G/q7bPHLOSxzvXOcsSGzV9pNSA== - dependencies: - "@glimmer/util" "^0.36.6" +"@glimmer/util@^0.42.0": + version "0.42.0" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.42.0.tgz#3f3a647ecaa16bbe4fc0545923d3b0a527319d78" + integrity sha512-rvXxKVb7BoQUvdrEQgxyvIeqGRUFM4LZAc7X1OmIpMnoaEh3fyx/e8Bz0blF0Yk6QvHpfV/GKirhlGmfum/ISA== "@glimmer/wire-format@^0.38.1": version "0.38.1" @@ -1216,6 +1352,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.45.tgz#a9e5cfd026a3abaaf17e3c0318a470da9f2f178e" integrity sha512-9scD7xI1kpIoMs3gVFMOWsWDyRIQ1AOZwe56i1CQPE6N/P4POYkn9UtW5F66t8C2AIoPtVfOFycQ2r11t3pcyg== +"@types/q@^1.5.1": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + "@types/rsvp@*", "@types/rsvp@^4.0.2": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/rsvp/-/rsvp-4.0.2.tgz#bf9f72eaa6771292638a85bb8ce1db97e754b371" @@ -1226,6 +1367,11 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== +"@types/symlink-or-copy@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#4151a81b4052c80bc2becbae09f3a9ec010a9c7a" + integrity sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg== + "@webassemblyjs/ast@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" @@ -1402,10 +1548,10 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abortcontroller-polyfill@^1.2.1: - version "1.2.6" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.2.6.tgz#e8cc55ca43dd269723ac02d8d9dd2f34e1c3e229" - integrity sha512-BP/ixRR9LiVr83IItbONoebJK5nRcHVSHasftOTT8v9VVP9xDud1rmvMwd5KXaKL1LG5sIsX6tUpIZcYYdGJlg== +abortcontroller-polyfill@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.3.0.tgz#de69af32ae926c210b7efbcc29bf644ee4838b00" + integrity sha512-lbWQgf+eRvku3va8poBlDBO12FigTQr9Zb7NIjXrePrhxWVKdCP2wbDl1tLDaYa18PWTom3UEWwdH13S46I+yA== accepts@~1.3.4, accepts@~1.3.5: version "1.3.5" @@ -1437,6 +1583,14 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-globals@^4.3.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -1469,6 +1623,11 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +acorn@^6.0.2: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -1593,6 +1752,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.0.tgz#e609350e50a9313b472789b2f14ef35808ee14d6" + integrity sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aot-test-generators@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/aot-test-generators/-/aot-test-generators-0.1.0.tgz#43f0f615f97cb298d7919c1b0b4e6b7310b03cd0" @@ -1724,6 +1891,11 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" +assert-never@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.0.tgz#e6597ed9e357f7e62c074dfa7c71e30ed7b67a8b" + integrity sha512-61QPxh2lfV5j2dBsEtwhz8/sUj+baAIuCpQxeWorGeMxlTkbeyGyq7igxJB8yij1JdzUhyoiekNHMXrMYnkjvA== + assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" @@ -1746,6 +1918,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-types@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" + integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== + ast-types@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -2035,6 +2212,16 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-loader@^8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" @@ -2070,12 +2257,12 @@ babel-plugin-debug-macros@^0.3.0: dependencies: semver "^5.3.0" -babel-plugin-ember-modules-api-polyfill@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.11.0.tgz#3a67bdeb05a929a96776b45fa784bd3798517acc" - integrity sha512-S3bw77LglkWIstoF+hBLyRPyyNAUsdzqK6zLxktuM6EniVt06st/ikhPDUttMWixS2LNA+jnBfGerYO1D/VvDw== +babel-plugin-ember-modules-api-polyfill@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.12.0.tgz#a5e703205ba4e625a7fab9bb1aea64ef3222cf75" + integrity sha512-ZQU4quX0TJ1yYyosPy5PFigKdCFEVHJ6H0b3hwjxekIP9CDwzk0OhQuKhCOPti+d52VWjjCjxu2BrXEih29mFw== dependencies: - ember-rfc176-data "^0.3.11" + ember-rfc176-data "^0.3.12" babel-plugin-ember-modules-api-polyfill@^2.6.0, babel-plugin-ember-modules-api-polyfill@^2.7.0: version "2.7.0" @@ -2102,6 +2289,11 @@ babel-plugin-htmlbars-inline-precompile@^0.2.5: resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-0.2.6.tgz#c00b8a3f4b32ca04bf0f0d5169fcef3b5a66d69d" integrity sha512-H4H75TKGUFij8ukwEYWEERAgrUf16R8NSK1uDPe3QwxT8mnE1K8+/s6DVjUqbM5Pv6lSIcE4XufXdlSX+DTB6g== +babel-plugin-htmlbars-inline-precompile@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-1.0.0.tgz#a9d2f6eaad8a3f3d361602de593a8cbef8179c22" + integrity sha512-4jvKEHR1bAX03hBDZ94IXsYCj3bwk9vYsn6ux6JZNL2U5pvzCWjqyrGahfsGNrhERyxw8IqcirOi9Q6WCo3dkQ== + babel-plugin-module-resolver@^3.1.1: version "3.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" @@ -2577,6 +2769,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1" integrity sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw== +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + "binaryextensions@1 || 2": version "2.1.2" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.2.tgz#c83c3d74233ba7674e4f313cb2a2b70f54e94b7c" @@ -2628,7 +2825,7 @@ body@^5.1.0: raw-body "~1.1.0" safe-json-parse "~1.0.1" -boolbase@~1.0.0: +boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -2701,6 +2898,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + broccoli-amd-funnel@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/broccoli-amd-funnel/-/broccoli-amd-funnel-2.0.1.tgz#dbdbfd28841731342d538126567c25bea3f15310" @@ -2844,6 +3048,24 @@ broccoli-concat@^3.2.2, broccoli-concat@^3.7.1, broccoli-concat@^3.7.3: lodash.uniq "^4.2.0" walk-sync "^0.3.2" +broccoli-concat@^3.7.4: + version "3.7.4" + resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-3.7.4.tgz#7371e846eb7a97cb44ccff10f68582bcadcafacd" + integrity sha512-9gRv1tyCQuq2+48DT9DQyxRNLOuwDtHybDeYuWA3g26HFqZd0PGAOeXcLXHpKRhxzrEbU6Gm28dZ/KolMr04cQ== + dependencies: + broccoli-debug "^0.6.5" + broccoli-kitchen-sink-helpers "^0.3.1" + broccoli-plugin "^1.3.0" + ensure-posix-path "^1.0.2" + fast-sourcemap-concat "^1.4.0" + find-index "^1.1.0" + fs-extra "^4.0.3" + fs-tree-diff "^0.5.7" + lodash.merge "^4.6.2" + lodash.omit "^4.1.0" + lodash.uniq "^4.2.0" + walk-sync "^0.3.2" + broccoli-config-loader@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/broccoli-config-loader/-/broccoli-config-loader-1.0.1.tgz#d10aaf8ebc0cb45c1da5baa82720e1d88d28c80a" @@ -2948,7 +3170,7 @@ broccoli-funnel@^2.0.0, broccoli-funnel@^2.0.1, broccoli-funnel@^2.0.2: symlink-or-copy "^1.0.0" walk-sync "^0.3.1" -broccoli-kitchen-sink-helpers@^0.2.0, broccoli-kitchen-sink-helpers@^0.2.5: +broccoli-kitchen-sink-helpers@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.2.9.tgz#a5e0986ed8d76fb5984b68c3f0450d3a96e36ecc" integrity sha1-peCYbtjXb7WYS2jD8EUNOpbjbsw= @@ -3058,7 +3280,7 @@ broccoli-persistent-filter@^1.1.5, broccoli-persistent-filter@^1.1.6, broccoli-p symlink-or-copy "^1.0.1" walk-sync "^0.3.1" -broccoli-persistent-filter@^2.0.0, broccoli-persistent-filter@^2.1.1, broccoli-persistent-filter@^2.2.1: +broccoli-persistent-filter@^2.1.1, broccoli-persistent-filter@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.2.2.tgz#e0180e75ede5dd05d4c702f24f6c049e93fba915" integrity sha512-PW12RD1yY+x5SASUADuUMJce+dVSmjBO3pV1rLNHmT1C31rp1P++TvX7AgUObFmGhL7qlwviSdhMbBkY1v3G2w== @@ -3077,6 +3299,26 @@ broccoli-persistent-filter@^2.0.0, broccoli-persistent-filter@^2.1.1, broccoli-p symlink-or-copy "^1.0.1" walk-sync "^1.0.0" +broccoli-persistent-filter@^2.2.2, broccoli-persistent-filter@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz#4a052e0e0868b344c3a2977e35a3d497aa9eca72" + integrity sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g== + dependencies: + async-disk-cache "^1.2.1" + async-promise-queue "^1.0.3" + broccoli-plugin "^1.0.0" + fs-tree-diff "^2.0.0" + hash-for-dep "^1.5.0" + heimdalljs "^0.2.1" + heimdalljs-logger "^0.1.7" + mkdirp "^0.5.1" + promise-map-series "^0.2.1" + rimraf "^2.6.1" + rsvp "^4.7.0" + symlink-or-copy "^1.0.1" + sync-disk-cache "^1.3.3" + walk-sync "^1.0.0" + broccoli-plugin@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.1.0.tgz#73e2cfa05f8ea1e3fc1420c40c3d9e7dc724bf02" @@ -3157,16 +3399,7 @@ broccoli-sri-hash@^2.1.0: sri-toolbox "^0.2.0" symlink-or-copy "^1.0.1" -broccoli-static-compiler@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/broccoli-static-compiler/-/broccoli-static-compiler-0.1.4.tgz#713d18f08eb3131530575a0c5ad2951bba10af41" - integrity sha1-cT0Y8I6zExUwV1oMWtKVG7oQr0E= - dependencies: - broccoli-kitchen-sink-helpers "^0.2.0" - broccoli-writer "^0.1.1" - mkdirp "^0.3.5" - -broccoli-stew@^1.4.2, broccoli-stew@^1.5.0: +broccoli-stew@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-1.6.0.tgz#01f6d92806ed6679ddbe48d405066a0e164dfbef" integrity sha512-sUwCJNnYH4Na690By5xcEMAZqKgquUQnMAEuIiL3Z2k63mSw9Xg+7Ew4wCrFrMmXMcLpWjZDOm6Yqnq268N+ZQ== @@ -3206,6 +3439,26 @@ broccoli-stew@^2.0.0: symlink-or-copy "^1.2.0" walk-sync "^0.3.3" +broccoli-stew@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-2.1.0.tgz#ba73add17fda3b9b01d8cfb343a8b613b7136a0a" + integrity sha512-tgCkuTWYl4uf7k7ib2D79KFEj2hCgnTUNPMnrCoAha0/4bywcNccmaZVWtL9Ex37yX5h5eAbnM/ak2ULoMwSSw== + dependencies: + broccoli-debug "^0.6.5" + broccoli-funnel "^2.0.0" + broccoli-merge-trees "^3.0.1" + broccoli-persistent-filter "^2.1.1" + broccoli-plugin "^1.3.1" + chalk "^2.4.1" + debug "^3.1.0" + ensure-posix-path "^1.0.1" + fs-extra "^6.0.1" + minimatch "^3.0.4" + resolve "^1.8.1" + rsvp "^4.8.4" + symlink-or-copy "^1.2.0" + walk-sync "^0.3.3" + broccoli-string-replace@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/broccoli-string-replace/-/broccoli-string-replace-0.1.2.tgz#1ed92f85680af8d503023925e754e4e33676b91f" @@ -3225,27 +3478,16 @@ broccoli-style-manifest@^1.5.2: rsvp "^4.8.2" walk-sync "^0.3.1" -broccoli-svg-optimizer@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/broccoli-svg-optimizer/-/broccoli-svg-optimizer-1.1.0.tgz#5d6e03310298c7a1d22d373508beedc6258590cc" - integrity sha512-cFwZLK4xHreyTPRl1D2yVHnba5UhiS0EE7j42z05Q22aPFOmRrpMIJNiBnrfaPBmskpQYseZLnOYdwWP8Pj6Dw== - dependencies: - broccoli-persistent-filter "^1.2.0" - json-stable-stringify "^1.0.1" - lodash "^4.17.10" - rsvp "^4.8.2" - svgo "0.6.6" - -broccoli-symbolizer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/broccoli-symbolizer/-/broccoli-symbolizer-0.6.0.tgz#1ece00fba329f19ab42d920350a5f2014f8d0b52" - integrity sha512-ZwVDX+kkJ7/TXdhl2ChRZARNAeBiru1+53HHafN5UcnpIzJaE+CbyuSQdxEtnIakSKIZtgI/J6uJIffGDgft3g== +broccoli-svg-optimizer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/broccoli-svg-optimizer/-/broccoli-svg-optimizer-2.0.0.tgz#22b6920bee5e126e86b95ae0cdf8ad6cc4be3735" + integrity sha512-zIbUmBeSxl9r18Mqjl0OArvXyAKuSDd4FFVcH5HmiX2/1SFUofL4JN5g5qhP/GqQnLTEVdwr61LawSGDZHcqOg== dependencies: - broccoli-concat "^3.2.2" - broccoli-persistent-filter "^1.2.0" - cheerio "^0.22.0" + broccoli-persistent-filter "^2.3.1" json-stable-stringify "^1.0.1" - lodash "^4.17.10" + lodash "^4.17.15" + rsvp "^4.8.5" + svgo "1.3.0" broccoli-templater@^2.0.1: version "2.0.2" @@ -3275,14 +3517,6 @@ broccoli-uglify-sourcemap@^2.1.1: walk-sync "^0.3.2" workerpool "^2.3.0" -broccoli-writer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/broccoli-writer/-/broccoli-writer-0.1.1.tgz#d4d71aa8f2afbc67a3866b91a2da79084b96ab2d" - integrity sha1-1NcaqPKvvGejhmuRotp5CEuWqy0= - dependencies: - quick-temp "^0.1.0" - rsvp "^3.0.6" - broccoli@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/broccoli/-/broccoli-2.1.0.tgz#5c896691bd440bdb60afbb56c79d08abfe8aa620" @@ -3552,6 +3786,13 @@ calculate-cache-key-for-tree@^1.1.0: dependencies: json-stable-stringify "^1.0.1" +calculate-cache-key-for-tree@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz#7ac57f149a4188eacb0a45b210689215d3fef8d6" + integrity sha512-Quw8a6y8CPmRd6eU+mwypktYCwUcf8yVFIRbNZ6tPQEckX9yd+EBVEPC/GSZZrMWH9e7Vz4pT7XhpmyApRByLQ== + dependencies: + json-stable-stringify "^1.0.1" + 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" @@ -3742,7 +3983,22 @@ cheerio@0.22.0, cheerio@^0.22.0: lodash.reject "^4.4.0" lodash.some "^4.4.0" -chokidar@^2.0.0, chokidar@^2.0.2: +"chokidar@>=2.0.0 <4.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.1.0.tgz#ff23d077682a90eadd209bfa76eb10ed6d359668" + integrity sha512-6vZfo+7W0EOlbSo0nhVKMz4yyssrwiPbBZ8wj1lq8/+l4ZhGZ2U4Md7PspvmijXp1a26D3B7AHEBmIB7aVtaOQ== + dependencies: + anymatch "^3.1.0" + braces "^3.0.2" + glob-parent "^5.0.0" + is-binary-path "^2.1.0" + is-glob "^4.0.1" + normalize-path "^3.0.0" + readdirp "^3.1.1" + optionalDependencies: + fsevents "^2.0.6" + +chokidar@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" integrity sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg== @@ -3796,13 +4052,6 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== - dependencies: - chalk "^1.1.3" - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -3919,11 +4168,13 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" q "^1.1.2" code-point-at@^1.0.0: @@ -3971,11 +4222,6 @@ colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" @@ -4357,6 +4603,11 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4= + core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: version "2.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" @@ -4508,6 +4759,21 @@ cson-parser@^1.1.0: dependencies: coffee-script "^1.10.0" +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" + integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ== + dependencies: + boolbase "^1.0.0" + css-what "^2.1.2" + domutils "^1.7.0" + nth-check "^1.0.2" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -4518,7 +4784,23 @@ css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" -css-what@2.1: +css-tree@1.0.0-alpha.29: + version "1.0.0-alpha.29" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" + integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== + dependencies: + mdn-data "~1.1.0" + source-map "^0.5.3" + +css-tree@1.0.0-alpha.33: + version "1.0.0-alpha.33" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz#970e20e5a91f7a378ddd0fc58d0b6c8d4f3be93e" + integrity sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w== + dependencies: + mdn-data "2.0.4" + source-map "^0.5.3" + +css-what@2.1, css-what@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== @@ -4528,19 +4810,23 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -csso@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.0.0.tgz#178b43a44621221c27756086f531e02f42900ee8" - integrity sha1-F4tDpEYhIhwndWCG9THgL0KQDug= +csso@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" + integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== dependencies: - clap "^1.0.9" - source-map "^0.5.3" + css-tree "1.0.0-alpha.29" cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0", "cssom@>= 0.3.2 < 0.4.0": version "0.3.6" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== +cssom@^0.3.4: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + "cssstyle@>= 0.2.29 < 0.3.0": version "0.2.37" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" @@ -4555,6 +4841,13 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" +cssstyle@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== + dependencies: + cssom "0.3.x" + ctype@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" @@ -4591,7 +4884,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0: +data-urls@^1.0.0, data-urls@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== @@ -4704,7 +4997,7 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw== -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -4886,7 +5179,7 @@ domutils@1.5, domutils@1.5.1: dom-serializer "0" domelementtype "1" -domutils@^1.5.1: +domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== @@ -4979,7 +5272,7 @@ ember-app-scheduler@^1.0.5: ember-cli-babel "^7.1.3" ember-compatibility-helpers "^1.1.2" -ember-assign-polyfill@^2.5.0: +ember-assign-polyfill@^2.5.0, ember-assign-polyfill@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/ember-assign-polyfill/-/ember-assign-polyfill-2.6.0.tgz#07847e3357ee35b33f886a0b5fbec6873f6860eb" integrity sha512-Y8NzOmHI/g4PuJ+xC14eTYiQbigNYddyHB8FY2kuQMxThTEIDE7SJtgttJrYYcPciOu0Tnb5ff36iO46LeiXkw== @@ -4995,15 +5288,18 @@ ember-assign-polyfill@~2.4.0: ember-cli-babel "^6.6.0" ember-cli-version-checker "^2.0.0" -ember-auto-import@^1.2.19: - version "1.2.21" - resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.2.21.tgz#e02ded183844faba66c3f2af97028ef35175b837" - integrity sha512-coHnqO3mRnlj/JAQSQBEqzX2wL8rH5YrfEJMzk1102X9MdSX1CWeaUYBcyjvI/pG8fHUhv+4VsD6rQuhTUyZUQ== +ember-auto-import@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.5.2.tgz#e97ed96b600caa6090ffed83e4611c3e7ec9bad7" + integrity sha512-skVQpfdc6G5OVRsyemDn3vI1nj/iBBgnoqRLRka0ZbDT2GqelmyJ86bp+Bd/ztJe45Le3we+LXbR7T54RU5A9w== dependencies: "@babel/core" "^7.1.6" + "@babel/preset-env" "^7.0.0" "@babel/traverse" "^7.1.6" "@babel/types" "^7.1.6" + "@embroider/core" "^0.4.3" babel-core "^6.26.3" + babel-loader "^8.0.6" babel-plugin-syntax-dynamic-import "^6.18.0" babel-template "^6.26.0" babylon "^6.18.0" @@ -5014,7 +5310,7 @@ ember-auto-import@^1.2.19: enhanced-resolve "^4.0.0" fs-extra "^6.0.1" fs-tree-diff "^1.0.0" - handlebars "~4.0.13" + handlebars "~4.1.2" js-string-escape "^1.0.1" lodash "^4.17.10" mkdirp "^0.5.1" @@ -5022,6 +5318,7 @@ ember-auto-import@^1.2.19: resolve "^1.7.1" rimraf "^2.6.2" symlink-or-copy "^1.2.0" + typescript-memoize "^1.0.0-alpha.3" walk-sync "^0.3.3" webpack "~4.28" @@ -5042,62 +5339,67 @@ ember-cli-addon-docs-esdoc@^0.2.1: walk-sync "^0.3.2" ember-cli-addon-docs@^0.6.5: - version "0.6.6" - resolved "https://registry.yarnpkg.com/ember-cli-addon-docs/-/ember-cli-addon-docs-0.6.6.tgz#4679296a5f15d701a0f938549874a10116764ce8" - integrity sha512-aU4FM/y2xjlr3C/67lmB8AaWE8svF8FL4yLA8r8WKOnsPMKAGuyVioMdg5fRTU0mjtC6jXUUPWTLGxD94PrSYg== + version "0.6.14" + resolved "https://registry.yarnpkg.com/ember-cli-addon-docs/-/ember-cli-addon-docs-0.6.14.tgz#7d7801f0ffca6df00b86a11d58101c8523e6d44b" + integrity sha512-kfwGcoeNN6ban1ghHdaIqlfvMkj7T9oWoiel7kHknbgcukC5GX67G1w5CaEVMtmAK69kIlJDzo7VB+hAUnCthw== dependencies: - "@glimmer/syntax" "^0.36.4" + "@glimmer/syntax" "^0.42.0" broccoli-bridge "^1.0.0" broccoli-caching-writer "^3.0.3" broccoli-debug "^0.6.4" broccoli-filter "^1.2.4" - broccoli-funnel "^2.0.1" + broccoli-funnel "^2.0.2" broccoli-merge-trees "^3.0.1" - broccoli-persistent-filter "^2.0.0" + broccoli-persistent-filter "^2.3.1" broccoli-plugin "^1.3.1" broccoli-source "^1.1.0" broccoli-stew "^2.0.0" - ember-auto-import "^1.2.19" + chalk "^2.4.2" + ember-assign-polyfill "^2.6.0" + ember-auto-import "^1.5.2" ember-cli-autoprefixer "^0.8.1" - ember-cli-babel "^6.16.0" + ember-cli-babel "^7.7.3" ember-cli-clipboard "^0.11.1" - ember-cli-htmlbars "^3.0.0" - ember-cli-htmlbars-inline-precompile "^1.0.3" + ember-cli-htmlbars "^3.0.1" + ember-cli-htmlbars-inline-precompile "^2.1.0" ember-cli-sass "10.0.0" ember-cli-string-helpers "^1.9.0" + ember-cli-string-utils "^1.1.0" ember-cli-tailwind "^0.6.2" - ember-code-snippet "^2.4.0" - ember-component-css "^0.6.7" - ember-concurrency "^0.8.21" + ember-code-snippet "^2.4.1" + ember-component-css "^0.7.4" + ember-concurrency "^0.9.0 || ^0.10.0 || ^1.0.0" ember-data "2.x - 3.x" - ember-fetch "^6.2.0" + ember-fetch "^6.7.0" ember-fetch-adapter "^0.4.3" ember-href-to "^1.15.1" ember-keyboard "^4.0.0" - ember-modal-dialog "3.0.0-beta.3" - ember-responsive "^3.0.0-beta.1" - ember-router-scroll "^1.0.0" - ember-svg-jar "^1.2.2" + ember-modal-dialog "^3.0.0-beta.4" + ember-responsive "^3.0.5" + ember-router-generator "^2.0.0" + ember-router-scroll "^1.2.1" + ember-svg-jar "^2.1.0" ember-tether "^1.0.0-beta.2" ember-truth-helpers "^2.1.0" - esm "^3.2.4" + esm "^3.2.25" execa "^1.0.0" fs-extra "^7.0.0" - git-repo-info "^2.0.0" + git-repo-info "^2.1.0" highlight.js "^9.14.2" hosted-git-info "^2.7.1" html-entities "^1.2.1" inflected "^2.0.3" jsdom "^11.12.0" json-api-serializer "^1.13.0" - liquid-fire "^0.29.5" - lodash "^4.17.11" - lunr "^2.3.3" + liquid-fire "^0.29.5 || ^0.30.0" + lodash "^4.17.15" + lunr "^2.3.6" marked "^0.5.0" + pad-start "^1.0.2" parse-git-config "^2.0.3" quick-temp "^0.1.8" - resolve "^1.8.1" - sass "^1.17.0" + resolve "^1.12.0" + sass "^1.22.10" semver "^5.5.1" striptags "^3.1.1" walk-sync "^0.3.3" @@ -5140,7 +5442,7 @@ ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6 ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.1.4, ember-cli-babel@^7.2.0: +ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.1.4: version "7.5.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.5.0.tgz#af654dcef23630391d2efe85aaa3bdf8b6ca17b7" integrity sha512-wWXqPPQNRxCtEHvYaLBNiIVgCVCy8YqZ0tM8Dpql1D5nGnPDbaK073sS1vlOYBP7xe5Ab2nXhvQkFwUxFacJ2g== @@ -5164,10 +5466,10 @@ ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cl ensure-posix-path "^1.0.2" semver "^5.5.0" -ember-cli-babel@^7.10.0: - version "7.10.0" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.10.0.tgz#5505254b21f3c98400c91bf565dc1c0cf408b6b4" - integrity sha512-eNgPXobC+Pke5L3XzoJ0BXbb2+eYzZI+LljqbwXNuG4q63pF000aARFpTQ0p/NWkfGQxKi2L6tVIa1ZOYdQS+A== +ember-cli-babel@^7.10.0, ember-cli-babel@^7.2.0, ember-cli-babel@^7.7.3: + version "7.11.0" + resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.11.0.tgz#a2f4e4f123a4690968b512b87b4ff4bfa57ec244" + integrity sha512-ykEsr7XoEPaADCBCJMViycCok1grtBRGvZ1k/atlL/gQYCQ1W4E4OROY/Mm2YBgyLftBv6buH7IZsULyQRZUmg== dependencies: "@babel/core" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.3.4" @@ -5179,7 +5481,7 @@ ember-cli-babel@^7.10.0: "@babel/runtime" "^7.2.0" amd-name-resolver "^1.2.1" babel-plugin-debug-macros "^0.3.0" - babel-plugin-ember-modules-api-polyfill "^2.11.0" + babel-plugin-ember-modules-api-polyfill "^2.12.0" babel-plugin-module-resolver "^3.1.1" broccoli-babel-transpiler "^7.1.2" broccoli-debug "^0.6.4" @@ -5318,6 +5620,17 @@ ember-cli-htmlbars-inline-precompile@^1.0.0, ember-cli-htmlbars-inline-precompil heimdalljs-logger "^0.1.9" silent-error "^1.1.0" +ember-cli-htmlbars-inline-precompile@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-2.1.0.tgz#61b91ff1879d44ae504cadb46fb1f2604995ae08" + integrity sha512-BylIHduwQkncPhnj0ZyorBuljXbTzLgRo6kuHf1W+IHFxThFl2xG+r87BVwsqx4Mn9MTgW9SE0XWjwBJcSWd6Q== + dependencies: + babel-plugin-htmlbars-inline-precompile "^1.0.0" + ember-cli-version-checker "^2.1.2" + hash-for-dep "^1.2.3" + heimdalljs-logger "^0.1.9" + silent-error "^1.1.0" + ember-cli-htmlbars@^2.0.1, ember-cli-htmlbars@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-2.0.5.tgz#b5a105429a6bce4f7c9c97b667e3b8926e31397f" @@ -5338,6 +5651,16 @@ ember-cli-htmlbars@^3.0.0: json-stable-stringify "^1.0.0" strip-bom "^3.0.0" +ember-cli-htmlbars@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-3.1.0.tgz#87806c2a0bca2ab52d4fb8af8e2215c1ca718a99" + integrity sha512-cgvRJM73IT0aePUG7oQ/afB7vSRBV3N0wu9BrWhHX2zkR7A7cUBI7KC9VPk6tbctCXoM7BRGsCC4aIjF7yrfXA== + dependencies: + broccoli-persistent-filter "^2.3.1" + hash-for-dep "^1.5.1" + json-stable-stringify "^1.0.1" + strip-bom "^3.0.0" + ember-cli-inject-live-reload@^1.8.2: version "1.10.2" resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-1.10.2.tgz#43c59f7f1d1e717772da32e5e81d948fb9fe7c94" @@ -5621,15 +5944,16 @@ ember-cli@~3.8.1: watch-detector "^0.1.0" yam "^1.0.0" -ember-code-snippet@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/ember-code-snippet/-/ember-code-snippet-2.4.0.tgz#3ed901ee0c6458019b67733e923056d5b9f74bc2" - integrity sha512-MLnUxsbxoW1njWYrIRB0T0AbH8Ng2IJTUMXSmR/40z4Hnu6ykC7sCFJyzxcmdIj6IVPmOcFN7WpOMEfPWjKmIQ== +ember-code-snippet@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/ember-code-snippet/-/ember-code-snippet-2.4.1.tgz#4f4416bcfbc6c5e4a7c073158aff92748e31f219" + integrity sha512-LQTYH2E2/5cVxEPhL8v1VcXJSd/73735gj3KuRNwCYPK4PS91lpOho6L/1cLACSOg0W2a8YZKgfPAHN7aQGfgw== dependencies: broccoli-flatiron "^0.1.3" broccoli-merge-trees "^1.0.0" - broccoli-static-compiler "^0.1.4" - broccoli-writer "^0.1.1" + broccoli-plugin "^1.3.1" + ember-cli-babel "^7.7.3" + ember-cli-htmlbars "^3.0.1" es6-promise "^1.0.0" glob "^7.1.3" @@ -5642,10 +5966,10 @@ ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-co ember-cli-version-checker "^2.1.1" semver "^5.4.1" -ember-component-css@^0.6.7: - version "0.6.7" - resolved "https://registry.yarnpkg.com/ember-component-css/-/ember-component-css-0.6.7.tgz#dbc6debe5c04a2c0fe8a5edc64303c7324b33945" - integrity sha512-nZbGVHr3TI5uBb6mGqAvB2QJo8VQcmXTLCy/PnJ/Lyq3sKZCjg5dQE66X+TcHPG3IWEMOmCe/1vaK4HPtE8gfA== +ember-component-css@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/ember-component-css/-/ember-component-css-0.7.4.tgz#b8e94b062468721df6c9ea0c8739226c96809c9f" + integrity sha512-dJV6WyvIc4NZ2fSNhMWe4UJaSPLBtjQ4zHJ9bOg6UCMLHfTlwjJsn+rYqddMn65xau7MS8mwxa+otujQij0xEw== dependencies: broccoli-concat "^3.7.3" broccoli-funnel "^2.0.1" @@ -5655,14 +5979,14 @@ ember-component-css@^0.6.7: broccoli-replace "^0.12.0" broccoli-style-manifest "^1.5.2" ember-cli-babel "^7.1.4" - ember-cli-version-checker "^2.1.2" + ember-cli-version-checker "^3.0.1" ember-getowner-polyfill "^2.2.0" - fs-tree-diff "^1.0.2" + fs-tree-diff "^0.5.9" md5 "^2.2.1" postcss "^7.0.6" postcss-less "^3.1.0" postcss-scss "^2.0.0" - postcss-selector-namespace "^1.5.0" + postcss-selector-namespace "^2.0.0" rsvp "^4.8.4" walk-sync "^1.0.1" @@ -5674,13 +5998,14 @@ ember-composable-helpers@^2.1.0: broccoli-funnel "^1.0.1" ember-cli-babel "^7.1.0" -ember-concurrency@^0.8.21: - version "0.8.27" - resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-0.8.27.tgz#6dd1b9928cf5d13d5ae9c8cd3d5869f6ff81a9a9" - integrity sha512-2IujJ0Y79a+sHvEOPhUtZ7Ga8HDrwjbQqO7aZ88b0KCsXPro7birQFB508njQSQ0mxrsR9qzDv/KS5V67Cy5dA== +"ember-concurrency@^0.9.0 || ^0.10.0 || ^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-1.0.0.tgz#3b650672fdd5dc1d45007626119135829076c2b6" + integrity sha512-76aKC0lo2LAPoQYz7vMRlpolWTIQerszr8PPf3JMM5cTOzPwXUtzDcjfso3JAEDdhyUF9fkv2V1DmHagFbC2YQ== dependencies: babel-core "^6.24.1" ember-cli-babel "^6.8.2" + ember-compatibility-helpers "^1.2.0" ember-maybe-import-regenerator "^0.1.5" ember-copy@^1.0.0: @@ -5758,25 +6083,25 @@ ember-fetch-adapter@^0.4.3: dependencies: ember-cli-babel "^6.12.0" -ember-fetch@^6.2.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/ember-fetch/-/ember-fetch-6.4.0.tgz#806b2acfbda07f3b0dd48a9fcdbc575c5519611d" - integrity sha512-/GtJWQiUAAOX2HMGuLrWQMNWO9YRNH9+AiMzZYc5PrTHKdv+Ib5fciysz0+e97Dj9vyvF2mQa49mrosAPW9ziQ== +ember-fetch@^6.7.0: + version "6.7.1" + resolved "https://registry.yarnpkg.com/ember-fetch/-/ember-fetch-6.7.1.tgz#778390bc9993d31cc32d429ae69a591e431e85ac" + integrity sha512-B/s0HZWcIrDDz3wOxvAsWM2SyT4nND274aH3Othzxzax/lOJnGHKbNa+IGLrXKSja+ANeD5P8sVwDaAUw8pzpQ== dependencies: - abortcontroller-polyfill "^1.2.1" + abortcontroller-polyfill "^1.3.0" broccoli-concat "^3.2.2" broccoli-debug "^0.6.5" broccoli-merge-trees "^3.0.0" broccoli-rollup "^2.1.1" - broccoli-stew "^2.0.0" + broccoli-stew "^2.1.0" broccoli-templater "^2.0.1" - calculate-cache-key-for-tree "^1.1.0" + calculate-cache-key-for-tree "^2.0.0" caniuse-api "^3.0.0" ember-cli-babel "^6.8.2" - node-fetch "^2.3.0" + node-fetch "^2.6.0" whatwg-fetch "^3.0.0" -ember-getowner-polyfill@^2.0.1, ember-getowner-polyfill@^2.2.0: +ember-getowner-polyfill@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ember-getowner-polyfill/-/ember-getowner-polyfill-2.2.0.tgz#38e7dccbcac69d5ec694000329ec0b2be651d2b2" integrity sha512-rwGMJgbGzxIAiWYjdpAh04Abvt0s3HuS/VjHzUFhVyVg2pzAuz45B9AzOxYXzkp88vFC7FPaiA4kE8NxNk4A4Q== @@ -5784,14 +6109,6 @@ ember-getowner-polyfill@^2.0.1, ember-getowner-polyfill@^2.2.0: ember-cli-version-checker "^2.1.0" ember-factory-for-polyfill "^1.3.1" -ember-hash-helper-polyfill@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ember-hash-helper-polyfill/-/ember-hash-helper-polyfill-0.2.1.tgz#73b074d8e2f7183d2e68c3df77e951097afa907c" - integrity sha512-bEiKQeWGjswH1ykVY1zXabambolEPDwQCPuYOgUoRyEV4JFR9h91s3c8PNNy2pjoYBLkIYuCk4F4POJJLmDPjw== - dependencies: - ember-cli-babel "^6.8.2" - ember-cli-version-checker "^2.1.0" - ember-href-to@^1.15.1: version "1.15.1" resolved "https://registry.yarnpkg.com/ember-href-to/-/ember-href-to-1.15.1.tgz#1ba20ec201245c7cae7e2aa3eec50eb2aa25b729" @@ -5839,10 +6156,10 @@ ember-maybe-import-regenerator@^0.1.5, ember-maybe-import-regenerator@^0.1.6: ember-cli-babel "^6.0.0-beta.4" regenerator-runtime "^0.9.5" -ember-modal-dialog@3.0.0-beta.3: - version "3.0.0-beta.3" - resolved "https://registry.yarnpkg.com/ember-modal-dialog/-/ember-modal-dialog-3.0.0-beta.3.tgz#8ba00c1a228d62d837f63dc7ce964e48f25d1326" - integrity sha512-R9vo3KftPmNJK89rIipKvoTEvTC3tMEtM4Yhy2gyMX3yrFCcNPlnTXTRyTePUtSVxPNq9lNT1n0YWMBT1xoJxg== +ember-modal-dialog@^3.0.0-beta.4: + version "3.0.0-beta.4" + resolved "https://registry.yarnpkg.com/ember-modal-dialog/-/ember-modal-dialog-3.0.0-beta.4.tgz#2da8b5424cf33fd87117624dcaabfe9727f967e9" + integrity sha512-23kCmH0uPkDh132NbXr4E7x15gF00pGM8f/Q0lCV6IKZOJcW+lb9L6sKgkEEayzGTvgxp4BPU8n8xnIP3go4FA== dependencies: ember-cli-babel "^7.1.3" ember-cli-htmlbars "^3.0.0" @@ -5885,17 +6202,17 @@ ember-resolver@^5.0.1: ember-cli-version-checker "^3.0.0" resolve "^1.10.0" -ember-responsive@^3.0.0-beta.1: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-responsive/-/ember-responsive-3.0.0.tgz#03791da324299a8c8cb461e541a5e1aeca887881" - integrity sha512-5JQ+REBu37M7NNDJOnTjzp5eQzg4cX7VtPcD19V3nBcntRuDwf7N6TndLxmw4Kt3JXuzQL4PkDE2SgVKuNTdWQ== +ember-responsive@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/ember-responsive/-/ember-responsive-3.0.5.tgz#690c96a051dcf7c10a8c3bcfb3b23ecc784e3f7d" + integrity sha512-tQMDxrIsDyfvyLWhyQ2MYpJVkm1pmBKJSQKgdA06EFRrVw5QYX4coXemSZOzBM9gPrkgOUfPp522GaldsAeInw== dependencies: ember-cli-babel "^6.6.0" -ember-rfc176-data@^0.3.11: - version "0.3.11" - resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.11.tgz#9042e96aa4e962bf5bd5433939c92a1cf3a63de8" - integrity sha512-c46uisicHswFHo0R515LPM0L/X/Ju+N7KonJPuHx9C6cWD3AWzkNG9ASv+Bc85mq/9l3LFFsFpljdM1m2YnQ6A== +ember-rfc176-data@^0.3.12: + version "0.3.12" + resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.12.tgz#90d82878e69e2ac9a5438e8ce14d12c6031c5bd2" + integrity sha512-g9HeZj/gU5bfIIrGXkP7MhS2b3Vu5DfNUrYr14hy99TgIvtZETO+96QF4WOEUXGjIJdfTRjerVnQlqngPQSv1g== ember-rfc176-data@^0.3.5, ember-rfc176-data@^0.3.7: version "0.3.7" @@ -5909,14 +6226,23 @@ ember-router-generator@^1.2.3: dependencies: recast "^0.11.3" -ember-router-scroll@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ember-router-scroll/-/ember-router-scroll-1.0.2.tgz#2c0f25c8b800f65fb5eff56e1603e9bd3b3bf9b8" - integrity sha512-v/+wvb+Pwc4AtdTjFkDzAMU7WhVhrG83m/89rK/J/m9tQENYzsWoSa4+04WfRJj5ivWSaA/iWNkSfvseTp84Zg== +ember-router-generator@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-2.0.0.tgz#d04abfed4ba8b42d166477bbce47fccc672dbde0" + integrity sha512-89oVHVJwmLDvGvAUWgS87KpBoRhy3aZ6U0Ql6HOmU4TrPkyaa8pM0W81wj9cIwjYprcQtN9EwzZMHnq46+oUyw== + dependencies: + "@babel/parser" "^7.4.5" + "@babel/traverse" "^7.4.5" + recast "^0.18.1" + +ember-router-scroll@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/ember-router-scroll/-/ember-router-scroll-1.3.2.tgz#d7e49c7214d06c6cdf9fc809a3564ab554cdde35" + integrity sha512-MxBuaPSWvprE3JIeS9Jvp0emfnrhddBSkPRKlcBlUo8Zchi5lxqf7ffWYRxdXfnwoot+CWTYGnoU/iXE2gp9tg== dependencies: ember-app-scheduler "^1.0.5" ember-cli-babel "^7.1.2" - ember-getowner-polyfill "^2.2.0" + ember-compatibility-helpers "^1.1.2" ember-router-service-polyfill@^1.0.2: version "1.0.3" @@ -5933,9 +6259,9 @@ ember-source-channel-url@^1.0.1, ember-source-channel-url@^1.1.0: got "^8.0.1" ember-source@~3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.8.0.tgz#b84ba995d5049514a146c6df20c2fe20de08f211" - integrity sha512-iar9EL0AglbwgsLl8jeh++2mnnpBL2u/JUttP6jjkN/pItHfBGlgBtQ3GH0xyG37DH2SbP5bsj3pBM3xm7rTdA== + version "3.8.3" + resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.8.3.tgz#831a4e792f06d1ff292595fad817eed8f2be9d0c" + integrity sha512-QPeBgszpL9N5TL8Dbq4fIpJyG9uiMP7+tST01/y86ToUHmYuCrEuGeHDWLM3qTG+eKczuqx1b5K18gyM9K5JeA== dependencies: broccoli-funnel "^2.0.1" broccoli-merge-trees "^3.0.2" @@ -5952,21 +6278,23 @@ ember-source@~3.8.0: jquery "^3.3.1" resolve "^1.9.0" -ember-svg-jar@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ember-svg-jar/-/ember-svg-jar-1.2.2.tgz#065d9a462353dbf3b1b4f57fb653859bfbe52022" - integrity sha512-vIB/SyLdsp1PLuz0oPd56CD9U4yUYWv0ghhMlemVM8wwshgopztE0tDFjoIEZjhbZ7kNkLLUt69qMvyMjx5NPg== +ember-svg-jar@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ember-svg-jar/-/ember-svg-jar-2.2.2.tgz#024e298dd65d0e23f98c8be5706035de819a647f" + integrity sha512-AeOG3egRAM6QXNB4LX4coBkyxQjXGIzXY3i5XcaDuf861+e79yD7L9PZwhb7fBWfwwn8ls479x1hfT1Yw5QAWw== dependencies: broccoli-caching-writer "^3.0.3" - broccoli-funnel "^2.0.1" - broccoli-merge-trees "^2.0.0" + broccoli-concat "^3.7.4" + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^3.0.2" + broccoli-persistent-filter "^2.3.1" broccoli-string-replace "^0.1.2" - broccoli-svg-optimizer "1.1.0" - broccoli-symbolizer "^0.6.0" + broccoli-svg-optimizer "2.0.0" cheerio "^0.22.0" ember-assign-polyfill "^2.5.0" - ember-cli-babel "^6.6.0" - lodash "^4.13.1" + ember-cli-babel "^7.7.3" + json-stable-stringify "^1.0.1" + lodash "^4.17.15" mkdirp "^0.5.1" path-posix "^1.0.0" @@ -6150,6 +6478,22 @@ error@^7.0.0: string-template "~0.2.1" xtend "~4.0.0" +es-abstract@^1.12.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" + integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" + es-abstract@^1.5.1, es-abstract@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" @@ -6186,6 +6530,18 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escodegen@^1.11.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" + integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + escodegen@^1.6.1, escodegen@^1.9.1: version "1.11.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" @@ -6330,6 +6686,11 @@ eslint@^4.0.0: table "4.0.2" text-table "~0.2.0" +esm@^3.2.25: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + esm@^3.2.4: version "3.2.14" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.14.tgz#567f65e9433bb0873eb92ed5e92e876c3ec2a212" @@ -6343,17 +6704,12 @@ espree@^3.5.4: acorn "^5.5.0" acorn-jsx "^3.0.0" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - esprima@^3.1.3, esprima@~3.1.0: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -6708,6 +7064,11 @@ filesize@^3.6.1: resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== +filesize@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.2.0.tgz#a8c989a179ca3a895cc32eab4abc64ebf6d34d44" + integrity sha512-bdS2UP98MZzLyTZzhuSH5ctAWyDt81n5xMti9BSdmgPXjjENLDz5Bmbk2R7ATVw/HRysZzWA2JIPgcSAOimWpw== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -6718,6 +7079,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" @@ -6958,7 +7326,7 @@ fs-extra@^6.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.0: +fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -6994,6 +7362,17 @@ fs-tree-diff@^1.0.0, fs-tree-diff@^1.0.2: path-posix "^1.0.0" symlink-or-copy "^1.1.8" +fs-tree-diff@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz#343e4745ab435ec39ebac5f9059ad919cd034afa" + integrity sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A== + dependencies: + "@types/symlink-or-copy" "^1.2.0" + heimdalljs-logger "^0.1.7" + object-assign "^4.1.0" + path-posix "^1.0.0" + symlink-or-copy "^1.1.8" + fs-updater@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/fs-updater/-/fs-updater-1.0.4.tgz#2329980f99ae9176e9a0e84f7637538a182ce63b" @@ -7028,6 +7407,11 @@ fsevents@^1.2.3, fsevents@^1.2.7: nan "^2.9.2" node-pre-gyp "^0.10.0" +fsevents@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.0.7.tgz#382c9b443c6cbac4c57187cdda23aa3bf1ccfc2a" + integrity sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -7156,7 +7540,7 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-repo-info@^2.0.0: +git-repo-info@^2.0.0, git-repo-info@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.0.tgz#13d1f753c75bc2994432e65a71e35377ff563813" integrity sha512-+kigfDB7j3W80f74BoOUX+lKOmf4pR3/i2Ww6baKTCPe2hD4FRdjhV3s4P5Dy0Tak1uY1891QhKoYNtnyX2VvA== @@ -7218,6 +7602,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -7398,12 +7789,23 @@ handlebars@^4.0.11, handlebars@^4.0.4, handlebars@^4.0.6, handlebars@^4.1.0: optionalDependencies: uglify-js "^3.1.4" -handlebars@~4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.13.tgz#89fc17bf26f46fd7f6f99d341d92efaae64f997d" - integrity sha512-uydY0jy4Z3wy/iGXsi64UtLD4t1fFJe16c/NFxsYE4WdQis8ZCzOXUZaPQNG0e5bgtLQV41QTfqBindhEjnpyQ== +handlebars@^4.0.13: + version "4.2.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" + integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== dependencies: - async "^2.5.0" + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +handlebars@~4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== + dependencies: + neo-async "^2.6.0" optimist "^0.6.1" source-map "^0.6.1" optionalDependencies: @@ -7531,6 +7933,18 @@ hash-for-dep@^1.0.2, hash-for-dep@^1.2.3, hash-for-dep@^1.4.7, hash-for-dep@^1.5 resolve "^1.10.0" resolve-package-path "^1.0.11" +hash-for-dep@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.5.1.tgz#497754b39bee2f1c4ade4521bfd2af0a7c1196e3" + integrity sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw== + dependencies: + broccoli-kitchen-sink-helpers "^0.3.1" + heimdalljs "^0.2.3" + heimdalljs-logger "^0.1.7" + path-root "^0.1.1" + resolve "^1.10.0" + resolve-package-path "^1.0.11" + hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -7945,6 +8359,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -8066,6 +8487,13 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -8091,6 +8519,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -8290,9 +8723,9 @@ joi@^12.0.0: topo "2.x.x" jquery@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" - integrity sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg== + version "3.4.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" + integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== js-base64@^2.1.9: version "2.5.1" @@ -8332,13 +8765,13 @@ js-yaml@^3.12.1, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.3.0, js-yaml@^3.9.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@~3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" - integrity sha1-bl/mfYsgXOTSL60Ft3geja3MSzA= +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" - esprima "^2.6.0" + esprima "^4.0.0" jsbn@~0.1.0: version "0.1.1" @@ -8377,6 +8810,37 @@ jsdom@^11.12.0: ws "^5.2.0" xml-name-validator "^3.0.0" +jsdom@^12.0.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-12.2.0.tgz#7cf3f5b5eafd47f8f09ca52315d367ff6e95de23" + integrity sha512-QPOggIJ8fquWPLaYYMoh+zqUmdphDtu1ju0QGTitZT1Yd8I5qenPpXM1etzUegu3MjVp8XPzgZxdn8Yj7e40ig== + dependencies: + abab "^2.0.0" + acorn "^6.0.2" + acorn-globals "^4.3.0" + array-equal "^1.0.0" + cssom "^0.3.4" + cssstyle "^1.1.1" + data-urls "^1.0.1" + domexception "^1.0.1" + escodegen "^1.11.0" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.0.9" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.5" + saxes "^3.1.3" + symbol-tree "^3.2.2" + tough-cookie "^2.4.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + ws "^6.1.0" + xml-name-validator "^3.0.0" + jsdom@^7.0.2: version "7.2.2" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" @@ -8620,22 +9084,20 @@ linkify-it@~1.2.0: dependencies: uc.micro "^1.0.1" -liquid-fire@^0.29.5: - version "0.29.5" - resolved "https://registry.yarnpkg.com/liquid-fire/-/liquid-fire-0.29.5.tgz#da8e3158e3f96c34a8cf371b90b8ae941ea8960d" - integrity sha512-h+KxMaCvavkAfL5duNc5tQikrZxzbGVvUdmBU9mjkInUQQKvTjpD1DwphRKk6qWRRuDY9HT2ecY0Hf6/gMXkJA== +"liquid-fire@^0.29.5 || ^0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/liquid-fire/-/liquid-fire-0.30.0.tgz#20e6673f9db32d503f909592fd2c691452b07d6d" + integrity sha512-5ffmsrPvAzc4EQdjVHouiPc0m+c+wt4YOBgABrPgO+30cSAlYLYuIhQIQ5j+zX87oa61btq0BJVjjtxunG1Nrg== dependencies: - broccoli-funnel "^1.0.1" - broccoli-merge-trees "^1.0.0" - broccoli-stew "^1.4.2" - ember-cli-babel "^6.6.0" - ember-cli-htmlbars "^2.0.1" - ember-cli-version-checker "^2.0.0" + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^3.0.2" + broccoli-stew "^2.1.0" + ember-cli-babel "^7.7.3" + ember-cli-htmlbars "^3.0.1" + ember-cli-version-checker "^3.1.3" ember-copy "^1.0.0" - ember-getowner-polyfill "^2.0.1" - ember-hash-helper-polyfill "^0.2.0" match-media "^0.2.0" - velocity-animate "^1.5.1" + velocity-animate "^1.5.2" livereload-js@^2.3.0: version "2.4.0" @@ -8668,7 +9130,7 @@ loader-runner@^2.3.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.1.0: +loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -9042,6 +9504,11 @@ lodash.merge@^4.3.1, lodash.merge@^4.4.0, lodash.merge@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.noop@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-2.3.0.tgz#3059d628d51bbf937cd2a0b6fc3a7f212a669c2c" @@ -9147,7 +9614,7 @@ lodash.values@~2.3.0: dependencies: lodash.keys "~2.3.0" -lodash@4.17.11, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@4.17.11, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -9157,6 +9624,11 @@ lodash@^3.10.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= +lodash@^4.17.13, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -9209,7 +9681,7 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lunr@^2.3.3: +lunr@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.6.tgz#f278beee7ffd56ad86e6e478ce02ab2b98c78dd5" integrity sha512-swStvEyDqQ85MGpABCMBclZcLI/pBIlu8FFDtmX197+oEgKloJ67QnB+Tidh0340HmLMs39c4GrkPY3cmkXp6Q== @@ -9362,6 +9834,16 @@ md5@^2.2.1: crypt "~0.0.1" is-buffer "~1.1.1" +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdn-data@~1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" + integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== + mdn-links@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/mdn-links/-/mdn-links-0.1.0.tgz#e24c83b97cb4c5886cc39f2f780705fbfe273aa5" @@ -9722,6 +10204,11 @@ neo-async@^2.5.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + nested-error-stacks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" @@ -9744,6 +10231,11 @@ node-fetch@^2.3.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA== +node-fetch@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -9923,7 +10415,7 @@ npmlog@^4.0.0, npmlog@^4.0.2: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@~1.0.1: +nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== @@ -9950,6 +10442,11 @@ nwsapi@^2.0.7: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.1.tgz#08d6d75e69fd791bdea31507ffafe8c843b67e9c" integrity sha512-T5GaA1J/d34AC8mkrFD2O0DR17kwJ702ZOtJOsS8RpbsQZVOC2/xYFb1i/cw+xdM54JIlMuojjDOYct8GIWtwg== +nwsapi@^2.0.9: + version "2.1.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" + integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== + oauth-sign@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" @@ -9989,11 +10486,21 @@ object-hash@^1.3.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + object-keys@^1.0.12: version "1.1.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -10016,6 +10523,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + octokit-pagination-methods@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" @@ -10185,6 +10702,11 @@ package-json@^4.0.0, package-json@^4.0.1: registry-url "^3.0.3" semver "^5.1.0" +pad-start@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pad-start/-/pad-start-1.0.2.tgz#23e5bab3e96446b62816cff6f150975f040d1b14" + integrity sha1-I+W6s+lkRrYoFs/28VCXXwQNGxQ= + pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -10273,6 +10795,11 @@ parse5@4.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" @@ -10414,6 +10941,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" + integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -10551,12 +11083,12 @@ postcss-scss@^2.0.0: dependencies: postcss "^7.0.0" -postcss-selector-namespace@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/postcss-selector-namespace/-/postcss-selector-namespace-1.5.0.tgz#62335de8f1992eae989d1be33ba2298156ab458b" - integrity sha512-tQmqzuqOyH4sCwr+yRmnIKPzNQy1tIVvEZMR9qd82npDJ2X5KwMoeFFjCdupJ00eqMrCYj58wWvSwwZDA3kTmA== +postcss-selector-namespace@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-namespace/-/postcss-selector-namespace-2.0.0.tgz#d784cc24f5f483a301c9148fc7e50f5d7b64845e" + integrity sha512-1Eka6f/6IL08c8gWfslUdwqmURvHYbdI57zOMHeslIuiLaK1nxvQefqAGcr9Em9T0k+4IcwhBTAtJm+6nCz2wQ== dependencies: - postcss "^6.0.14" + postcss "^7.0.0" postcss-selector-parser@^3.1.1: version "3.1.1" @@ -10799,7 +11331,7 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= -quick-temp@^0.1.0, quick-temp@^0.1.2, quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8: +quick-temp@^0.1.2, quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.8.tgz#bab02a242ab8fb0dd758a3c9776b32f9a5d94408" integrity sha1-urAqJCq4+w3XWKPJd2sy+aXZRAg= @@ -10976,6 +11508,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.1.2.tgz#fa85d2d14d4289920e4671dead96431add2ee78a" + integrity sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw== + dependencies: + picomatch "^2.0.4" + recast@^0.11.3: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -10986,6 +11525,16 @@ recast@^0.11.3: private "~0.1.5" source-map "~0.5.0" +recast@^0.18.1: + version "0.18.2" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.2.tgz#ada263677edc70c45408caf20e6ae990958fdea8" + integrity sha512-MbuHc1lzIDIn7bpxaqIAGwwtyaokkzPqINf1Vm/LA0BSyVrTgXNVTTT7RzWC9kP+vqrUoYVpd6wHhI8x75ej8w== + dependencies: + ast-types "0.13.2" + esprima "~4.0.0" + private "^0.1.8" + source-map "~0.6.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -11226,7 +11775,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.55.0, request@^2.87.0: +request@^2.55.0, request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -11316,6 +11865,14 @@ resolve-package-path@^1.0.11, resolve-package-path@^1.1.1: path-root "^0.1.1" resolve "^1.10.0" +resolve-package-path@^1.2.2: + version "1.2.7" + resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" + integrity sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q== + dependencies: + path-root "^0.1.1" + resolve "^1.10.0" + resolve-package-path@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.6.tgz#48f5d69a5b3a0ea68f7b9c7398459dd4125807c7" @@ -11344,13 +11901,20 @@ resolve@1.5.0: dependencies: path-parse "^1.0.5" -resolve@^1.1.3, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1, resolve@^1.9.0: +resolve@^1.1.3, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== dependencies: path-parse "^1.0.6" +resolve@^1.12.0, resolve@^1.9.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + responselike@1.0.2, responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -11446,6 +12010,11 @@ rsvp@^4.6.1, rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.3, rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== +rsvp@^4.8.5: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + rsvp@~3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" @@ -11537,18 +12106,25 @@ sane@^4.0.0: minimist "^1.1.1" walker "~1.0.5" -sass@^1.17.0: - version "1.17.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.17.2.tgz#b5a28f2f13c6a219f28084c03623bb2c8d176323" - integrity sha512-TBNcwSIEXpXAIaFxQnWbHzhciwPKpHRprQ+1ww+g9eHCiY3PINJs6vQTu+LcBt1vIhrtQGRFIoxJO39TfLrptA== +sass@^1.22.10: + version "1.22.12" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.22.12.tgz#5cbdd38720ffd1857da695331faee9f634bcb5d7" + integrity sha512-u5Rxn+dKTPCW5/11kMNxtmqKsxCjcpnqj9CaJoru1NqeJ0DOa9rOM00e0HqmseTAatGkKoLY+jaNecMYevu1gg== dependencies: - chokidar "^2.0.0" + chokidar ">=2.0.0 <4.0.0" -sax@^1.1.4, sax@^1.2.4, sax@~1.2.1: +sax@^1.1.4, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^3.1.3: + version "3.1.11" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + schema-utils@^0.4.4: version "0.4.7" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" @@ -11708,6 +12284,11 @@ simple-html-tokenizer@^0.5.6: resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.7.tgz#8eca336ecfbe2b3c6166cbb31b2682088de79f40" integrity sha512-APW9iYbkJ5cijjX4Ljhf3VG8SwYPUJT5gZrwci/wieMabQxWFiV5VwsrP5c6GMRvXKEQMGkAB1d9dvW66dTqpg== +simple-html-tokenizer@^0.5.8: + version "0.5.8" + resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.8.tgz#3417382f75954ee34515cc4fd32d9918e693f173" + integrity sha512-0Sq4FvLlQEQODVA6PH2MIrc7tzYO0KT2HzzwvaVLYClWgIsuvaNUOrhrAvTi1pZHrcq7GDB4WiI3ukjqBMxcGQ== + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -12004,6 +12585,11 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + stagehand@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stagehand/-/stagehand-1.0.0.tgz#79515e2ad3a02c63f8720c7df9b6077ae14276d9" @@ -12110,6 +12696,22 @@ string.prototype.repeat@^0.2.0: resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" integrity sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8= +string.prototype.trimleft@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@0.10, string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -12232,18 +12834,24 @@ supports-color@^5.3.0, supports-color@^5.4.0: dependencies: has-flag "^3.0.0" -svgo@0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.6.6.tgz#b340889036f20f9b447543077d0f5573ed044c08" - integrity sha1-s0CIkDbyD5tEdUMHfQ9Vc+0ETAg= +svgo@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313" + integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ== dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.0.0" - js-yaml "~3.6.0" + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.33" + csso "^3.5.1" + js-yaml "^3.13.1" mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" "symbol-tree@>= 3.1.0 < 4.0.0", symbol-tree@^3.2.2: version "3.2.2" @@ -12255,6 +12863,17 @@ symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink- resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#5d49108e2ab824a34069b68974486c290020b393" integrity sha512-W31+GLiBmU/ZR02Ii0mVZICuNEN9daZ63xZMPDsYgPgNjMtg+atqLEGI7PPI936jYSQZxoLb/63xos8Adrx4Eg== +sync-disk-cache@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.3.tgz#481933461623fdc2bdf46cfc87872ba215a7e246" + integrity sha512-Kp7DFemXDPRUbFW856CKamtX7bJuThZPa2dwnK2RfNqMew7Ah8xDc52SdooNlfN8oydDdDHlBPLsXTrtmA7HKw== + dependencies: + debug "^2.1.3" + heimdalljs "^0.2.3" + mkdirp "^0.5.0" + rimraf "^2.2.8" + username-sync "^1.0.2" + table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" @@ -12525,6 +13144,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -12556,7 +13182,7 @@ tough-cookie@>=0.12.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^2.2.0, tough-cookie@^2.3.3, tough-cookie@^2.3.4: +tough-cookie@^2.2.0, tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.4.3: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -12662,6 +13288,13 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript-memoize@^1.0.0-alpha.3: + version "1.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.0.0-alpha.3.tgz#699a5415f886694a8d6e2e5451bc28a39a6bc2f9" + integrity sha1-aZpUFfiGaUqNbi5UUbwoo5prwvk= + dependencies: + core-js "2.4.1" + uc.micro@^1.0.0, uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" @@ -12777,6 +13410,11 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -12882,7 +13520,7 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@^1.0.0: +util.promisify@^1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -12934,7 +13572,7 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -velocity-animate@^1.5.1: +velocity-animate@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/velocity-animate/-/velocity-animate-1.5.2.tgz#5a351d75fca2a92756f5c3867548b873f6c32105" integrity sha512-m6EXlCAMetKztO1ppBhGU1/1MR3IiEevO6ESq6rcrSQ3Q77xYSW13jkfXW88o4xMrkXJhy/U7j4wFR/twMB0Eg== @@ -13005,6 +13643,15 @@ walk-sync@^1.0.0, walk-sync@^1.0.1: ensure-posix-path "^1.1.0" matcher-collection "^1.1.1" +walk-sync@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-1.1.4.tgz#81049f3d8095479b49574cfa5f558d7a252b127d" + integrity sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA== + dependencies: + "@types/minimatch" "^3.0.3" + ensure-posix-path "^1.1.0" + matcher-collection "^1.1.1" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -13108,7 +13755,7 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== @@ -13150,11 +13797,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= - which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -13255,6 +13897,13 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" +ws@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@~6.1.0: version "6.1.4" resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" @@ -13277,6 +13926,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xmldom@^0.1.19: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"