diff --git a/addons/api/.eslintrc.js b/addons/api/.eslintrc.js
index 85a190092..b705ae52d 100644
--- a/addons/api/.eslintrc.js
+++ b/addons/api/.eslintrc.js
@@ -21,7 +21,8 @@ module.exports = {
browser: true
},
rules: {
- 'ember/no-jquery': 'error'
+ 'ember/no-jquery': 'error',
+ 'ember/no-new-mixins': 0
},
overrides: [
// node files
diff --git a/addons/api/addon/mixins/scope-adapter.js b/addons/api/addon/mixins/scope-adapter.js
new file mode 100644
index 000000000..705e5f1c0
--- /dev/null
+++ b/addons/api/addon/mixins/scope-adapter.js
@@ -0,0 +1,53 @@
+import Mixin from '@ember/object/mixin';
+import { inject as service } from '@ember/service';
+
+/**
+ * Add this mixin to resource adapters which should be accessed via an
+ * org/project-scoped URL. This mixin appends a scope path based on the scope
+ * reported by `ScopeService`.
+ */
+export default Mixin.create({
+ // =services
+
+ scope: service(),
+
+ // =properties
+
+ /**
+ * If true and the current scope has a project, will include the project in
+ * the resource path. Set to false for resources that are scoped exclusively
+ * to org.
+ * @type {boolean}
+ */
+ includeProject: true,
+
+ // =methods
+
+ /**
+ * Appends a scope path to the URL prefix, if a scope is set.
+ * @override
+ * @return {string}
+ */
+ urlPrefix() {
+ const prefix = this._super(...arguments);
+ let scopePath = this.scopePath;
+ // Ensure a slash is added between prefix + scope path if needed.
+ if (scopePath && prefix.charAt(prefix.length - 1) !== '/') {
+ scopePath = `/${scopePath}`;
+ }
+ return `${prefix}${scopePath}`;
+ },
+
+ /**
+ * Generates a scope path for the current scope as reported by `ScopeService`.
+ * If no scope is set, returns empty string.
+ * @return {string}
+ */
+ get scopePath() {
+ const { org, project } = this.scope;
+ const scopePath = [];
+ if (org) scopePath.push('orgs', org.id);
+ if (project && this.includeProject) scopePath.push('projects', project.id);
+ return scopePath.join('/');
+ },
+});
diff --git a/addons/api/addon/services/scope.js b/addons/api/addon/services/scope.js
new file mode 100644
index 000000000..370bdfb8c
--- /dev/null
+++ b/addons/api/addon/services/scope.js
@@ -0,0 +1,123 @@
+import Service from '@ember/service';
+import { tracked } from '@glimmer/tracking';
+import { computed } from '@ember/object';
+
+/**
+ * This module includes two parts:
+ *
+ * - `Scope` class: a data structure representing an org/project tuple
+ * - `ScopeService`: manages the scope and exposes it to the application
+ */
+
+/**
+ * Represents a _scope_, which is defined as an organization/project tuple.
+ * This class is intended as a simple data structure and is used by the
+ * scope service (see below).
+ * Immutable.
+ */
+class Scope {
+ /**
+ * @type {?object}
+ * @private
+ */
+ #org = null;
+
+ /**
+ * @type {?object}
+ * @private
+ */
+ #project = null;
+
+ /**
+ * Initializes an instance of `Scope` with optional org and project.
+ * A scope with only project is invalid and in thi scenario, project will
+ * be null.
+ * @param {?object} org
+ * @param {?object} project
+ */
+ constructor(org = null, project = null) {
+ if (org) this.#org = org;
+ if (org && project) this.#project = project;
+ }
+
+ /**
+ * Org for this scope. Immutable.
+ * @type {?object}
+ */
+ get org() {
+ return this.#org;
+ }
+
+ /**
+ * Project for this scope.
+ * @type {?object}
+ */
+ get project() {
+ return this.#project;
+ }
+
+ /**
+ * Returns the JSON representation of this scope.
+ * @return {?object}
+ */
+ toJSON() {
+ const { org, project } = this;
+ return { org, project };
+ }
+}
+
+export { Scope };
+
+/**
+ * The scope service manages the current scope, making it available throughout
+ * the Ember application. Use `service.org` and `service.project` directly,
+ * rather than interacting with the internal `scope` member.
+ *
+ * @example
+ * // inject the scope service
+ * import { inject as service } from '@ember/service';
+ * class MyClass {
+ * @service scope;
+ * }
+ *
+ * // set an org, project, or both
+ * this.scope.org = {id: 1};
+ * this.scope.project = {id: 2};
+ *
+ * // retrieve the org and/or project
+ * const org = this.scope.org;
+ * const project = this.scope.project;
+ */
+export default class ScopeService extends Service {
+ /**
+ * The currently selected scope. This is an internal member only.
+ * @type {?Scope}
+ */
+ @tracked scope = new Scope();
+
+ /**
+ * When setting org, `service.org = {...}`, a new scope is instantiated,
+ * since scopes are immutable.
+ * @type {?object}
+ */
+ @computed('scope.org')
+ get org() {
+ return this.scope ? this.scope.org : null;
+ }
+ set org(org) {
+ this.scope = new Scope(org, this.project);
+ }
+
+ /**
+ * When setting project, `service.project = {...}`, a new scope is
+ * instantiated, since scopes are immutable.
+ * @type {?object}
+ */
+ @computed('scope.project')
+ get project() {
+ return this.scope ? this.scope.project : null;
+ }
+ set project(project) {
+ this.scope = new Scope(this.org, project);
+ }
+}
diff --git a/addons/api/addon/services/storage.js b/addons/api/addon/services/storage.js
new file mode 100644
index 000000000..3f4be864f
--- /dev/null
+++ b/addons/api/addon/services/storage.js
@@ -0,0 +1,130 @@
+import Service from '@ember/service';
+import { getOwner } from '@ember/application';
+import { get } from '@ember/object';
+
+/**
+ * A dead simple memory storage class used by `StorageService` when it
+ * is configued for memory-only.
+ */
+class MemoryStorage {
+ /**
+ * Internal storage object.
+ * @type {object}
+ * @private
+ */
+ #storage = {};
+
+ /**
+ * Gets a value from storage.
+ * @param {string} key
+ * @return {any}
+ */
+ getItem(key) {
+ return this.#storage[key];
+ }
+
+ /**
+ * Sets a value to storage.
+ * @param {string} key
+ */
+ setItem(key, value) {
+ this.#storage[key] = value;
+ }
+
+ /**
+ * Removes a value from storage.
+ * @param {string} key
+ */
+ removeItem(key) {
+ delete this.#storage[key];
+ }
+}
+
+/**
+ * The storage service provides a simple way to persist data in the browser.
+ * Most of the time localStorage is used. Appplications may specify in-memory
+ * storage via the config, for example:
+ *
+ * ENV.storage = {
+ * memory: true
+ * };
+ *
+ * @example
+ * import Route from '@ember/routing/route';
+ * import { inject as service } from '@ember/service';
+ * export default class ApplicationRoute extends Route {
+ * @service storage;
+ * afterModel() {
+ * this.storage.setItem('key', 'value');
+ * }
+ * }
+ */
+export default class StorageService extends Service {
+ /**
+ * @type {MemoryStorage}
+ * @private
+ */
+ #memoryStorage = new MemoryStorage();
+
+ /**
+ * Gets the underlying storage mechanism.
+ * @return {Storage}
+ */
+ get storage() {
+ // Get the application config to determine if memory storage is enabled
+ const config = getOwner(this).resolveRegistration('config:environment');
+ const inMemory = get(config, 'storage.memory');
+ // Get the global context object (window) via service lookup,
+ // because just reaching for a global is icky
+ const globalContext = getOwner(this).lookup('service:-document')
+ .documentElement.parentNode.defaultView;
+ // If memory storage enabled, return the memory storage instance,
+ // otherwise return localStorage.
+ return inMemory ? this.#memoryStorage : globalContext.localStorage;
+ }
+
+ /**
+ * Returns the storage namespace, which is the application's `modulePrefix`.
+ * @return {string}
+ */
+ get namespace() {
+ const config = getOwner(this).resolveRegistration('config:environment');
+ return config.modulePrefix;
+ }
+
+ /**
+ * Returns a fully qualified key from the passed string. A fully qualified
+ * key includes the namespace.
+ * @param {string} key
+ * @return {string} fully qualified key
+ */
+ qualifiedKey(key) {
+ return `${this.namespace}:${key}`;
+ }
+
+ /**
+ * Gets a value from storage.
+ * @param {string} key
+ * @return {any}
+ */
+ getItem(key) {
+ const value = this.storage.getItem(this.qualifiedKey(key));
+ if (value) return JSON.parse(value);
+ }
+
+ /**
+ * Sets a value to storage.
+ * @param {string} key
+ */
+ setItem(key, value) {
+ this.storage.setItem(this.qualifiedKey(key), JSON.stringify(value));
+ }
+
+ /**
+ * Removes a value from storage.
+ * @param {string} key
+ */
+ removeItem(key) {
+ this.storage.removeItem(this.qualifiedKey(key));
+ }
+}
diff --git a/addons/api/app/services/scope.js b/addons/api/app/services/scope.js
new file mode 100644
index 000000000..6c4b4d6c8
--- /dev/null
+++ b/addons/api/app/services/scope.js
@@ -0,0 +1 @@
+export { default, Scope } from 'api/services/scope';
diff --git a/addons/api/app/services/storage.js b/addons/api/app/services/storage.js
new file mode 100644
index 000000000..51cbec2c0
--- /dev/null
+++ b/addons/api/app/services/storage.js
@@ -0,0 +1 @@
+export { default } from 'api/services/storage';
diff --git a/addons/api/package.json b/addons/api/package.json
index 453611318..46be73f6e 100644
--- a/addons/api/package.json
+++ b/addons/api/package.json
@@ -38,6 +38,7 @@
"ember-cli-sri": "^2.1.1",
"ember-cli-template-lint": "^1.0.0-beta.3",
"ember-cli-uglify": "^3.0.0",
+ "ember-data": "^3.16.0",
"ember-disable-prototype-extensions": "^1.1.3",
"ember-export-application-global": "^2.0.1",
"ember-load-initializers": "^2.1.1",
diff --git a/addons/api/tests/dummy/app/routes/application.js b/addons/api/tests/dummy/app/routes/application.js
new file mode 100644
index 000000000..62946d66d
--- /dev/null
+++ b/addons/api/tests/dummy/app/routes/application.js
@@ -0,0 +1,10 @@
+import Route from '@ember/routing/route';
+import { inject as service } from '@ember/service';
+
+export default class ApplicationRoute extends Route {
+ @service scope;
+
+ afterModel() {
+ //console.log(this.scope);
+ }
+}
diff --git a/addons/api/tests/dummy/app/templates/application.hbs b/addons/api/tests/dummy/app/templates/application.hbs
index 5230580f8..f8bc38e7b 100644
--- a/addons/api/tests/dummy/app/templates/application.hbs
+++ b/addons/api/tests/dummy/app/templates/application.hbs
@@ -1,3 +1,3 @@
Welcome to Ember
-{{outlet}}
\ No newline at end of file
+{{outlet}}
diff --git a/addons/api/tests/dummy/app/templates/index.hbs b/addons/api/tests/dummy/app/templates/index.hbs
new file mode 100644
index 000000000..9015a7a32
--- /dev/null
+++ b/addons/api/tests/dummy/app/templates/index.hbs
@@ -0,0 +1 @@
+index
diff --git a/addons/api/tests/dummy/config/environment.js b/addons/api/tests/dummy/config/environment.js
index ba4e8cb76..1b05a0196 100644
--- a/addons/api/tests/dummy/config/environment.js
+++ b/addons/api/tests/dummy/config/environment.js
@@ -41,6 +41,10 @@ module.exports = function (environment) {
ENV.APP.rootElement = '#ember-testing';
ENV.APP.autoboot = false;
+
+ ENV.storage = {
+ memory: true,
+ };
}
if (environment === 'production') {
diff --git a/addons/api/tests/unit/mixins/scope-adapter-test.js b/addons/api/tests/unit/mixins/scope-adapter-test.js
new file mode 100644
index 000000000..5e042ae93
--- /dev/null
+++ b/addons/api/tests/unit/mixins/scope-adapter-test.js
@@ -0,0 +1,68 @@
+import RESTAdapter from '@ember-data/adapter/rest';
+import ScopeAdapterMixin from 'api/mixins/scope-adapter';
+import { module, test } from 'qunit';
+import { setupTest } from 'ember-qunit';
+
+module('Unit | Mixin | scope-adapter', function (hooks) {
+ setupTest(hooks);
+
+ test('it does not interfere with basic URLs', function (assert) {
+ assert.expect(1);
+ //const service = this.owner.lookup('service:scope');
+ const ScopeAdapter = RESTAdapter.extend(ScopeAdapterMixin);
+ this.owner.register('adapter:scope', ScopeAdapter);
+ const adapter = this.owner.lookup('adapter:scope');
+ const url = adapter._buildURL('model', 1);
+ assert.equal(url, '/models/1');
+ });
+
+ test('it does not interfere with namespaced URLs', function (assert) {
+ assert.expect(1);
+ //const service = this.owner.lookup('service:scope');
+ const ScopeAdapter = RESTAdapter.extend(ScopeAdapterMixin, {
+ namespace: 'api/v1',
+ });
+ this.owner.register('adapter:scope', ScopeAdapter);
+ const adapter = this.owner.lookup('adapter:scope');
+ const url = adapter._buildURL('model', 1);
+ assert.equal(url, '/api/v1/models/1');
+ });
+
+ test('it adds a scope to basic URLs when scope is set', function (assert) {
+ assert.expect(4);
+ const service = this.owner.lookup('service:scope');
+ service.org = { id: 1 };
+ const ScopeAdapter = RESTAdapter.extend(ScopeAdapterMixin, {
+ namespace: 'api/v1',
+ });
+ this.owner.register('adapter:scope', ScopeAdapter);
+ const adapter = this.owner.lookup('adapter:scope');
+ let url = adapter._buildURL('model', 1);
+ assert.equal(url, '/api/v1/orgs/1/models/1');
+ service.project = { id: 2 };
+ url = adapter._buildURL('model', 1);
+ assert.equal(url, '/api/v1/orgs/1/projects/2/models/1');
+ service.org = { id: 'foobar' };
+ url = adapter._buildURL('model', 1);
+ assert.equal(url, '/api/v1/orgs/foobar/projects/2/models/1');
+ // can't have a project without an org
+ service.org = null;
+ url = adapter._buildURL('model', 1);
+ assert.equal(url, '/api/v1/models/1');
+ });
+
+ test('it does not add a project scope to basic URLs when includeProject is false', function (assert) {
+ assert.expect(1);
+ const service = this.owner.lookup('service:scope');
+ service.org = { id: 1 };
+ service.project = { id: 2 };
+ const ScopeAdapter = RESTAdapter.extend(ScopeAdapterMixin, {
+ namespace: 'api/v1',
+ includeProject: false,
+ });
+ this.owner.register('adapter:scope', ScopeAdapter);
+ const adapter = this.owner.lookup('adapter:scope');
+ let url = adapter._buildURL('model', 1);
+ assert.equal(url, '/api/v1/orgs/1/models/1');
+ });
+});
diff --git a/addons/api/tests/unit/services/scope-test.js b/addons/api/tests/unit/services/scope-test.js
new file mode 100644
index 000000000..c94b1bfd5
--- /dev/null
+++ b/addons/api/tests/unit/services/scope-test.js
@@ -0,0 +1,66 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'ember-qunit';
+import { Scope } from '../../../services/scope';
+
+module('Unit | Service | scope class', function (hooks) {
+ setupTest(hooks);
+
+ test('it provides a scope class', function (assert) {
+ assert.expect(1);
+ assert.ok(Scope);
+ });
+
+ test('it has initializable org and project members', function (assert) {
+ assert.expect(2);
+ const org = { id: 1 };
+ const project = { id: 2 };
+ const scope = new Scope(org, project);
+ assert.equal(scope.org.id, 1);
+ assert.equal(scope.project.id, 2);
+ });
+
+ test('it has a null project if org is null, even if project was initialized to non-null', function (assert) {
+ assert.expect(2);
+ const org = null;
+ const project = { id: 2 };
+ const scope = new Scope(org, project);
+ assert.notOk(scope.org);
+ assert.notOk(scope.project);
+ });
+
+ test('it serializes to JSON', function (assert) {
+ assert.expect(2);
+ let scope = new Scope({ id: 1 });
+ assert.deepEqual(scope.toJSON(), {
+ org: { id: 1 },
+ project: null,
+ });
+ scope = new Scope({ id: 1 }, { id: 2 });
+ assert.deepEqual(scope.toJSON(), {
+ org: { id: 1 },
+ project: { id: 2 },
+ });
+ });
+});
+
+module('Unit | Service | scope', function (hooks) {
+ setupTest(hooks);
+
+ test('it returns nulls when scope is not set', function (assert) {
+ assert.expect(2);
+ const service = this.owner.lookup('service:scope');
+ assert.equal(service.org, null);
+ assert.equal(service.project, null);
+ });
+
+ test('it aliases org and project to a scope instance', function (assert) {
+ assert.expect(2);
+ const service = this.owner.lookup('service:scope');
+ const org = { id: 1 };
+ const project = { id: 2 };
+ service.org = org;
+ service.project = project;
+ assert.equal(service.org, service.scope.org);
+ assert.equal(service.project, service.scope.project);
+ });
+});
diff --git a/addons/api/tests/unit/services/storage-test.js b/addons/api/tests/unit/services/storage-test.js
new file mode 100644
index 000000000..61702c765
--- /dev/null
+++ b/addons/api/tests/unit/services/storage-test.js
@@ -0,0 +1,38 @@
+import { module, test } from 'qunit';
+import { setupTest } from 'ember-qunit';
+
+module('Unit | Service | storage', function (hooks) {
+ setupTest(hooks);
+
+ test('it can persist values', function (assert) {
+ assert.expect(1);
+ const service = this.owner.lookup('service:storage');
+ service.setItem('foo', 'bar');
+ assert.equal(service.getItem('foo'), 'bar');
+ });
+
+ test('it can remove persisted values', function (assert) {
+ assert.expect(2);
+ const service = this.owner.lookup('service:storage');
+ service.setItem('foo', 'bar');
+ assert.equal(service.getItem('foo'), 'bar');
+ service.removeItem('foo');
+ assert.notOk(service.getItem('foo'));
+ });
+
+ // NOTE: the following tests are order-dependent, so may be invalidated
+ // if we switch to random test ordering
+
+ test("it's in-memory storage is implicitly refreshed for every test case", function (assert) {
+ assert.expect(1);
+ const service = this.owner.lookup('service:storage');
+ service.setItem('foo', 'bar');
+ assert.equal(service.getItem('foo'), 'bar');
+ });
+
+ test("it's in-memory storage is implicitly refreshed for every test case", function (assert) {
+ assert.expect(1);
+ const service = this.owner.lookup('service:storage');
+ assert.notOk(service.getItem('foo'));
+ });
+});
diff --git a/addons/rose/app/controllers/index.js b/addons/rose/app/controllers/index.js
index d311e73a0..3b56b102a 100644
--- a/addons/rose/app/controllers/index.js
+++ b/addons/rose/app/controllers/index.js
@@ -3,8 +3,8 @@ import { action } from '@ember/object';
export default class IndexController extends Controller {
@action
- selectChange(value) {
+ selectChange(/*value*/) {
// eslint-disable-next-line no-console
- console.log(value);
+ //console.log(value);
}
}
diff --git a/yarn.lock b/yarn.lock
index 7d58252e0..9b37bbb9d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -389,7 +389,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-json-strings" "^7.8.0"
-"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3":
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.4.4", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2"
integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==
@@ -431,7 +431,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
-"@babel/plugin-proposal-optional-chaining@^7.9.0":
+"@babel/plugin-proposal-optional-chaining@^7.6.0", "@babel/plugin-proposal-optional-chaining@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58"
integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==
@@ -871,6 +871,15 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-typescript" "^7.2.0"
+"@babel/plugin-transform-typescript@~7.8.0":
+ version "7.8.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.7.tgz#48bccff331108a7b3a28c3a4adc89e036dc3efda"
+ integrity sha512-7O0UsPQVNKqpHeHLpfvOG4uXmlw+MOxYvUv6Otc9uH5SYMIxvF6eBdjkWvC3f9G+VXe0RsNExyAQBeTRug/wqQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-typescript" "^7.8.3"
+
"@babel/plugin-transform-unicode-regex@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad"
@@ -1112,7 +1121,7 @@
lodash "^4.17.13"
to-fast-properties "^2.0.0"
-"@babel/types@^7.4.0", "@babel/types@^7.6.0", "@babel/types@^7.9.6":
+"@babel/types@^7.4.0", "@babel/types@^7.6.0", "@babel/types@^7.7.2", "@babel/types@^7.9.6":
version "7.9.6"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7"
integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==
@@ -1179,11 +1188,127 @@
resolved "https://registry.yarnpkg.com/@egoist/vue-to-react/-/vue-to-react-1.1.0.tgz#83c884b8608e8ee62e76c03e91ce9c26063a91ad"
integrity sha512-MwfwXHDh6ptZGLEtNLPXp2Wghteav7mzpT2Mcwl3NZWKF814i5hhHnNkVrcQQEuxUroSWQqzxLkMKSb+nhPang==
+"@ember-data/adapter@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@ember-data/adapter/-/adapter-3.18.0.tgz#0e25af9357d632bccb90df3109c679e922a64a25"
+ integrity sha512-fNFbnHF+QM9QAwd+AF131QRUM9P2W5mE5hycVyaHVfBPdNSDCJI85Ca+nwFF1GfwzImlUojUAyW5z+MzJCXhEw==
+ dependencies:
+ "@ember-data/private-build-infra" "3.18.0"
+ "@ember-data/store" "3.18.0"
+ "@ember/edition-utils" "^1.2.0"
+ ember-cli-babel "^7.18.0"
+ ember-cli-test-info "^1.0.0"
+ ember-cli-typescript "^3.1.3"
+
+"@ember-data/canary-features@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@ember-data/canary-features/-/canary-features-3.18.0.tgz#cc94867a8d6309d7dff48143c79497c43fd301d2"
+ integrity sha512-NRddFSlqdN5D86MKBgJ4MQzAzKHGQasDOWCEoGJHMF/Muh3I1NqAVAtI/I68wPr/k1j5hP1wMT6/tBsBMJXb/Q==
+ dependencies:
+ ember-cli-babel "^7.18.0"
+ ember-cli-typescript "^3.1.3"
+
+"@ember-data/debug@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@ember-data/debug/-/debug-3.18.0.tgz#3ce284ce89e83b05ceae81a5be03248a341591fb"
+ integrity sha512-9g/ghkq8SLmbOG0UUTyeX0ZAmQ3j3us2Ajkg8u3pVDKEpNdbQLhU5Npd9rf5gJe1TKmLcH7AcDpu85ZPLbb69w==
+ dependencies:
+ "@ember-data/private-build-infra" "3.18.0"
+ "@ember/edition-utils" "^1.2.0"
+ ember-cli-babel "^7.18.0"
+ ember-cli-test-info "^1.0.0"
+ ember-cli-typescript "^3.1.3"
+
+"@ember-data/model@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@ember-data/model/-/model-3.18.0.tgz#f2aebb34005dd2926cf11810d3b3cf7f2cc6c5ff"
+ integrity sha512-faFCpBl6VBzPl6tcJKi7FVEnC9xcx3qnle70tJWTAC++MK+GHlpQofNPWVu6cCebfDojHrLszfxjrDzmjvizqQ==
+ dependencies:
+ "@ember-data/canary-features" "3.18.0"
+ "@ember-data/private-build-infra" "3.18.0"
+ "@ember-data/store" "3.18.0"
+ "@ember/edition-utils" "^1.2.0"
+ ember-cli-babel "^7.18.0"
+ ember-cli-string-utils "^1.1.0"
+ ember-cli-test-info "^1.0.0"
+ ember-cli-typescript "^3.1.3"
+ ember-compatibility-helpers "^1.2.0"
+ inflection "1.12.0"
+
+"@ember-data/private-build-infra@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@ember-data/private-build-infra/-/private-build-infra-3.18.0.tgz#4420c375fa2462946ad6f9c62f73b79bba4d0e87"
+ integrity sha512-iQ4TzYdDCm0awv7S0Xg0AfQCDfwkl5pTCk7G8DfzbA3IIGJ0sFR19cq1IZkNKxqTUzU5ecb+394YybHjz81hMQ==
+ dependencies:
+ "@babel/plugin-transform-block-scoping" "^7.8.3"
+ "@ember-data/canary-features" "3.18.0"
+ "@ember/edition-utils" "^1.2.0"
+ babel-plugin-debug-macros "^0.3.3"
+ babel-plugin-filter-imports "^4.0.0"
+ babel6-plugin-strip-class-callcheck "^6.0.0"
+ broccoli-debug "^0.6.5"
+ broccoli-file-creator "^2.1.1"
+ broccoli-funnel "^2.0.2"
+ broccoli-merge-trees "^4.1.0"
+ broccoli-rollup "^4.1.1"
+ calculate-cache-key-for-tree "^2.0.0"
+ chalk "^3.0.0"
+ ember-cli-babel "^7.18.0"
+ ember-cli-path-utils "^1.0.0"
+ ember-cli-string-utils "^1.1.0"
+ ember-cli-typescript "^3.1.3"
+ ember-cli-version-checker "^4.1.0"
+ esm "^3.2.25"
+ git-repo-info "^2.1.1"
+ glob "^7.1.6"
+ npm-git-info "^1.0.3"
+ rimraf "^3.0.2"
+ rsvp "^4.8.5"
+ semver "^7.1.3"
+ silent-error "^1.1.1"
+
+"@ember-data/record-data@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@ember-data/record-data/-/record-data-3.18.0.tgz#c98e55e74950c3383080a5deb5b32a7210c2919e"
+ integrity sha512-WRrqBjFbD5tHeKnda+lvN9+3cPV/tJE0dkZIebheCvnkqueeGgp0+CW8ASp2iFySqRsBjlSxt1g46YrRdKVJtA==
+ dependencies:
+ "@ember-data/canary-features" "3.18.0"
+ "@ember-data/private-build-infra" "3.18.0"
+ "@ember-data/store" "3.18.0"
+ "@ember/edition-utils" "^1.2.0"
+ "@ember/ordered-set" "^2.0.3"
+ ember-cli-babel "^7.18.0"
+ ember-cli-test-info "^1.0.0"
+ ember-cli-typescript "^3.1.3"
+
"@ember-data/rfc395-data@^0.0.4":
version "0.0.4"
resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843"
integrity sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==
+"@ember-data/serializer@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.18.0.tgz#d61fa2a11f6875f73bfdb492d316f052aa12b6ad"
+ integrity sha512-YBDHtGBxsHTIkk3c5ok3TrM3JCD2iW1n427Qe0v3/QMQCxX3eKT4rS8p0PP/orT5sUZ05zNOw6HlKfdEUKqAhA==
+ dependencies:
+ "@ember-data/private-build-infra" "3.18.0"
+ "@ember-data/store" "3.18.0"
+ ember-cli-babel "^7.18.0"
+ ember-cli-test-info "^1.0.0"
+ ember-cli-typescript "^3.1.3"
+
+"@ember-data/store@3.18.0":
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/@ember-data/store/-/store-3.18.0.tgz#04f7734a1f654c4eaf999f94f5a1451e763b7670"
+ integrity sha512-FBfXqRct3khpUsdusdFVFt8qNrWDPpqT/V0wFnwjSje5uX+DSwZ247SrtCYkwf6OziSzOfWR/w286O+0nawAyQ==
+ dependencies:
+ "@ember-data/canary-features" "3.18.0"
+ "@ember-data/private-build-infra" "3.18.0"
+ ember-cli-babel "^7.18.0"
+ ember-cli-path-utils "^1.0.0"
+ ember-cli-typescript "^3.1.3"
+ heimdalljs "^0.3.0"
+
"@ember/edition-utils@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6"
@@ -1202,6 +1327,14 @@
silent-error "^1.1.1"
util.promisify "^1.0.0"
+"@ember/ordered-set@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@ember/ordered-set/-/ordered-set-2.0.3.tgz#2ac1ca73b3bd116063cae814898832ef434a57f9"
+ integrity sha512-F4yfVk6WMc4AUHxeZsC3CaKyTvO0qSZJy7WWHCFTlVDQw6vubn+FvnGdhzpN1F00EiXMI4Tv1tJdSquHcCnYrA==
+ dependencies:
+ ember-cli-babel "^6.16.0"
+ ember-compatibility-helpers "^1.1.1"
+
"@ember/test-helpers@^1.7.0", "@ember/test-helpers@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-1.7.1.tgz#cc22a954b3b46856518f034bd492a74e0482389f"
@@ -2073,6 +2206,11 @@
"@types/connect" "*"
"@types/node" "*"
+"@types/broccoli-plugin@^1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@types/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz#38f8462fecaebc4e09a32e4d4ed1b9808f75bbca"
+ integrity sha512-SLk4/hFc2kGvgwNFrpn2O1juxFOllcHAywvlo7VwxfExLzoz1GGJ0oIZCwj5fwSpvHw4AWpZjJ1fUvb62PDayQ==
+
"@types/chai-as-promised@^7.1.2":
version "7.1.2"
resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.2.tgz#2f564420e81eaf8650169e5a3a6b93e096e5068b"
@@ -2097,6 +2235,11 @@
dependencies:
"@types/node" "*"
+"@types/estree@*":
+ version "0.0.44"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.44.tgz#980cc5a29a3ef3bea6ff1f7d021047d7ea575e21"
+ integrity sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g==
+
"@types/events@*":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
@@ -3565,6 +3708,14 @@ babel-plugin-filter-imports@^3.0.0:
"@babel/types" "^7.4.0"
lodash "^4.17.11"
+babel-plugin-filter-imports@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-4.0.0.tgz#068f8da15236a96a9602c36dc6f4a6eeca70a4f4"
+ integrity sha512-jDLlxI8QnfKd7PtieH6pl4tZJzymzfCDCPGdTq/grgbiYAikwDPp/oL0IlFJn0HQjLpcLkyYhPKkUVneRESw5w==
+ dependencies:
+ "@babel/types" "^7.7.2"
+ lodash "^4.17.15"
+
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"
@@ -4130,6 +4281,11 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
lodash "^4.17.4"
to-fast-properties "^1.0.3"
+babel6-plugin-strip-class-callcheck@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/babel6-plugin-strip-class-callcheck/-/babel6-plugin-strip-class-callcheck-6.0.0.tgz#de841c1abebbd39f78de0affb2c9a52ee228fddf"
+ integrity sha1-3oQcGr6705943gr/ssmlLuIo/d8=
+
babylon@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
@@ -4679,7 +4835,7 @@ broccoli-merge-trees@^3.0.0, broccoli-merge-trees@^3.0.1, broccoli-merge-trees@^
broccoli-plugin "^1.3.0"
merge-trees "^2.0.0"
-broccoli-merge-trees@^4.2.0:
+broccoli-merge-trees@^4.1.0, broccoli-merge-trees@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-4.2.0.tgz#692d3c163ecea08c5714a9434d664e628919f47c"
integrity sha512-nTrQe5AQtCrW4enLRvbD/vTLHqyW2tz+vsLXQe4IEaUhepuMGVKJJr+I8n34Vu6fPjmPLwTjzNC8izMIDMtHPw==
@@ -4806,7 +4962,7 @@ broccoli-plugin@^1.0.0, broccoli-plugin@^1.1.0, broccoli-plugin@^1.2.0, broccoli
rimraf "^2.3.4"
symlink-or-copy "^1.1.8"
-broccoli-plugin@^2.1.0:
+broccoli-plugin@^2.0.0, broccoli-plugin@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-2.1.0.tgz#2fab6c578219cfcc64f773e9616073313fc8b334"
integrity sha512-ElE4caljW4slapyEhSD9jU9Uayc8SoSABWdmY9SqbV8DHNxU6xg1jJsPcMm+cXOvggR3+G+OXAYQeFjWVnznaw==
@@ -4842,6 +4998,21 @@ broccoli-plugin@^4.0.1, broccoli-plugin@^4.0.2:
rimraf "^3.0.0"
symlink-or-copy "^1.3.0"
+broccoli-rollup@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/broccoli-rollup/-/broccoli-rollup-4.1.1.tgz#7531a24d88ddab9f1bace1c6ee6e6ca74a38d36f"
+ integrity sha512-hkp0dB5chiemi32t6hLe5bJvxuTOm1TU+SryFlZIs95KT9+94uj0C8w6k6CsZ2HuIdIZg6D252t4gwOlcTXrpA==
+ dependencies:
+ "@types/broccoli-plugin" "^1.3.0"
+ broccoli-plugin "^2.0.0"
+ fs-tree-diff "^2.0.1"
+ heimdalljs "^0.2.6"
+ node-modules-path "^1.0.1"
+ rollup "^1.12.0"
+ rollup-pluginutils "^2.8.1"
+ symlink-or-copy "^1.2.0"
+ walk-sync "^1.1.3"
+
broccoli-sass-source-maps@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/broccoli-sass-source-maps/-/broccoli-sass-source-maps-4.0.0.tgz#1ee4c10a810b10955b0502e28f85ab672f5961a2"
@@ -7026,7 +7197,7 @@ ember-cli-sri@^2.1.1:
dependencies:
broccoli-sri-hash "^2.1.0"
-ember-cli-string-utils@^1.1.0:
+ember-cli-string-utils@^1.0.0, ember-cli-string-utils@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1"
integrity sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=
@@ -7048,6 +7219,13 @@ ember-cli-template-lint@^1.0.0-beta.3:
strip-ansi "^4.0.0"
walk-sync "^1.1.3"
+ember-cli-test-info@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ember-cli-test-info/-/ember-cli-test-info-1.0.0.tgz#ed4e960f249e97523cf891e4aed2072ce84577b4"
+ integrity sha1-7U6WDySel1I8+JHkrtIHLOhFd7Q=
+ dependencies:
+ ember-cli-string-utils "^1.0.0"
+
ember-cli-test-loader@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/ember-cli-test-loader/-/ember-cli-test-loader-2.2.0.tgz#3fb8d5d1357e4460d3f0a092f5375e71b6f7c243"
@@ -7090,6 +7268,26 @@ ember-cli-typescript@^2.0.2:
stagehand "^1.0.0"
walk-sync "^1.0.0"
+ember-cli-typescript@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-3.1.3.tgz#a2c7ec6a8a5e57c38eb52d83e36d8e18c7071e60"
+ integrity sha512-bFi15H60L9TLYfn9XUzi+RAP1gTWHFtVdSy9IHvxXHlCvTlFZ+2rfuugr/f8reQLz9gvJccKc5TyRD7v+uhx0Q==
+ dependencies:
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.4.4"
+ "@babel/plugin-proposal-optional-chaining" "^7.6.0"
+ "@babel/plugin-transform-typescript" "~7.8.0"
+ ansi-to-html "^0.6.6"
+ broccoli-stew "^3.0.0"
+ debug "^4.0.0"
+ ember-cli-babel-plugin-helpers "^1.0.0"
+ execa "^3.0.0"
+ fs-extra "^8.0.0"
+ resolve "^1.5.0"
+ rsvp "^4.8.1"
+ semver "^6.3.0"
+ stagehand "^1.0.0"
+ walk-sync "^2.0.0"
+
ember-cli-uglify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-3.0.0.tgz#8819665b2cc5fe70e3ba9fe7a94645209bc42fd6"
@@ -7227,7 +7425,7 @@ ember-cli@~3.16.1:
watch-detector "^1.0.0"
yam "^1.0.0"
-ember-compatibility-helpers@^1.1.2:
+ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.1.tgz#87c92c4303f990ff455c28ca39fb3ee11441aa16"
integrity sha512-6wzYvnhg1ihQUT5yGqnLtleq3Nv5KNv79WhrEuNU9SwR4uIxCO+KpyC7r3d5VI0EM7/Nmv9Nd0yTkzmTMdVG1A==
@@ -7236,6 +7434,26 @@ ember-compatibility-helpers@^1.1.2:
ember-cli-version-checker "^2.1.1"
semver "^5.4.1"
+ember-data@^3.16.0:
+ version "3.18.0"
+ resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.18.0.tgz#e7c27e311b62f986e55075dc61ca581e7c74a4d3"
+ integrity sha512-8P5A6Il7X0QQJRJA4OXdX7yOc8A5/befxfbFBNTzi2Ptq+m2zNBfdW98lfPb9M6h3GMjwsZCmVlNVK6ic8dmMA==
+ dependencies:
+ "@ember-data/adapter" "3.18.0"
+ "@ember-data/debug" "3.18.0"
+ "@ember-data/model" "3.18.0"
+ "@ember-data/private-build-infra" "3.18.0"
+ "@ember-data/record-data" "3.18.0"
+ "@ember-data/serializer" "3.18.0"
+ "@ember-data/store" "3.18.0"
+ "@ember/edition-utils" "^1.2.0"
+ "@ember/ordered-set" "^2.0.3"
+ "@glimmer/env" "^0.1.7"
+ broccoli-merge-trees "^4.1.0"
+ ember-cli-babel "^7.18.0"
+ ember-cli-typescript "^3.1.3"
+ ember-inflector "^3.0.1"
+
ember-disable-prototype-extensions@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/ember-disable-prototype-extensions/-/ember-disable-prototype-extensions-1.1.3.tgz#1969135217654b5e278f9fe2d9d4e49b5720329e"
@@ -7246,6 +7464,13 @@ ember-export-application-global@^2.0.1:
resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-2.0.1.tgz#b120a70e322ab208defc9e2daebe8d0dfc2dcd46"
integrity sha512-B7wiurPgsxsSGzJuPFkpBWnaeuCu2PGpG2BjyrfA1VcL7//o+5RSnZqiCEY326y7qmxb2GoCgo0ft03KBU0rRw==
+ember-inflector@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-3.0.1.tgz#04be6df4d7e4000f6d6bd70787cdc995f77be4ab"
+ integrity sha512-fngrwMsnhkBt51KZgwNwQYxgURwV4lxtoHdjxf7RueGZ5zM7frJLevhHw7pbQNGqXZ3N+MRkhfNOLkdDK9kFdA==
+ dependencies:
+ ember-cli-babel "^6.6.0"
+
ember-inline-svg@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ember-inline-svg/-/ember-inline-svg-1.0.0.tgz#d8c243667a9277b0fef06eb63e4f1c4cf1e8013e"
@@ -7890,7 +8115,7 @@ eslint@^5.6.0:
table "^5.2.3"
text-table "^0.2.0"
-esm@^3.2.4:
+esm@^3.2.25, esm@^3.2.4:
version "3.2.25"
resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
@@ -7951,6 +8176,11 @@ estraverse@^5.1.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
+estree-walker@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
+ integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
+
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@@ -8032,6 +8262,22 @@ execa@^2.0.0:
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
+execa@^3.0.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
+ integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ p-finally "^2.0.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
exists-sync@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879"
@@ -9486,6 +9732,13 @@ heimdalljs@^0.2.0, heimdalljs@^0.2.1, heimdalljs@^0.2.3, heimdalljs@^0.2.5, heim
dependencies:
rsvp "~3.2.1"
+heimdalljs@^0.3.0:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/heimdalljs/-/heimdalljs-0.3.3.tgz#e92d2c6f77fd46d5bf50b610d28ad31755054d0b"
+ integrity sha1-6S0sb3f9RtW/ULYQ0orTF1UFTQs=
+ dependencies:
+ rsvp "~3.2.1"
+
highlight.js@~9.13.0:
version "9.13.1"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e"
@@ -9690,6 +9943,11 @@ https@^1.0.0:
resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4"
integrity sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q=
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -9794,7 +10052,7 @@ infer-owner@^1.0.3, infer-owner@^1.0.4:
resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
-inflection@^1.12.0:
+inflection@1.12.0, inflection@^1.12.0:
version "1.12.0"
resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416"
integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=
@@ -11936,7 +12194,7 @@ node-libs-browser@^2.0.0, node-libs-browser@^2.2.1:
util "^0.11.0"
vm-browserify "^1.0.1"
-node-modules-path@^1.0.0:
+node-modules-path@^1.0.0, node-modules-path@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/node-modules-path/-/node-modules-path-1.0.2.tgz#e3acede9b7baf4bc336e3496b58e5b40d517056e"
integrity sha512-6Gbjq+d7uhkO7epaKi5DNgUJn7H0gEyA4Jg0Mo1uQOi3Rk50G83LtmhhFyw0LxnAFhtlspkiiw52ISP13qzcBg==
@@ -12023,6 +12281,11 @@ normalize-url@2.0.1:
query-string "^5.0.1"
sort-keys "^2.0.0"
+npm-git-info@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/npm-git-info/-/npm-git-info-1.0.3.tgz#a933c42ec321e80d3646e0d6e844afe94630e1d5"
+ integrity sha1-qTPELsMh6A02RuDW6ESv6UYw4dU=
+
npm-normalize-package-bin@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
@@ -12052,6 +12315,13 @@ npm-run-path@^3.0.0:
dependencies:
path-key "^3.0.0"
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
npmlog@^4.0.0, npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
@@ -14251,6 +14521,22 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^3.0.0"
inherits "^2.0.1"
+rollup-pluginutils@^2.8.1:
+ version "2.8.2"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
+ integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
+ dependencies:
+ estree-walker "^0.6.1"
+
+rollup@^1.12.0:
+ version "1.32.1"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4"
+ integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==
+ dependencies:
+ "@types/estree" "*"
+ "@types/node" "*"
+ acorn "^7.1.0"
+
rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0:
version "3.6.2"
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a"
@@ -14443,6 +14729,11 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+semver@^7.1.3:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
send@0.17.1:
version "0.17.1"
resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"