diff --git a/CHANGELOG.md b/CHANGELOG.md index 781b43013..d671d60ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,11 @@ # Changelog -### 4.0.0-beta.1 - - Fix missing transform in NPM package. - -### 4.0.0-beta.0 - - Convert to V2 Addon (#551) +### 4.0.0 (unreleased) + - Ember Concurrency is now a V2 Embroider Addon (#551) + - BREAKING CHANGE: you must now register the Babel transform used by Ember Concurrency within consuming apps and addons + - See upgrade docs: https://ember-concurrency.com/docs/v4-upgrade + - The guides have been updated to reflect modern/best practices: + - Instead of using the `(perform)` helper, it is now recommended that the bound `.perform()` method on each Task be directly invoked in the template, e.g. `{{on "click" this.myTask.perform}}`, or, when arguments are present, `{{on "click" (fn this.myTask.perform 123 'foo')}}` ### 3.1.1 - Add ember 5 as peerDependencies (#542) diff --git a/packages/test-app/app/components/events-example/component.js b/packages/test-app/app/components/events-example/component.js index 9da1cd00e..cfe1e377b 100644 --- a/packages/test-app/app/components/events-example/component.js +++ b/packages/test-app/app/components/events-example/component.js @@ -25,8 +25,6 @@ export default class EventsExampleComponent extends Component.extend(Evented) { } }); - jQueryEvent = null; - jQueryEventLoop = task(async () => { let $body = $('body'); while (true) { @@ -35,8 +33,6 @@ export default class EventsExampleComponent extends Component.extend(Evented) { } }); - emberEvent = null; - emberEventedLoop = task(async () => { while (true) { let event = await waitForEvent(this, 'fooEvent'); diff --git a/packages/test-app/app/components/task-function-syntax-2/component.js b/packages/test-app/app/components/task-function-syntax-2/component.js index 9acb453e3..ae5b74473 100644 --- a/packages/test-app/app/components/task-function-syntax-2/component.js +++ b/packages/test-app/app/components/task-function-syntax-2/component.js @@ -1,9 +1,10 @@ import Component from '@ember/component'; +import { tracked } from '@glimmer/tracking'; import { task } from 'ember-concurrency'; export default class TaskFunctionSyntaxComponent2 extends Component { tagName = ''; - status = null; + @tracked status = null; // BEGIN-SNIPPET task-function-syntax-2 pickRandomNumbers = task(async () => { @@ -12,7 +13,7 @@ export default class TaskFunctionSyntaxComponent2 extends Component { nums.push(Math.floor(Math.random() * 10)); } - this.set('status', `My favorite numbers: ${nums.join(', ')}`); + this.status = `My favorite numbers: ${nums.join(', ')}`; }); // END-SNIPPET } diff --git a/packages/test-app/app/components/task-function-syntax-3/component.js b/packages/test-app/app/components/task-function-syntax-3/component.js index e1419cb10..86054fa2a 100644 --- a/packages/test-app/app/components/task-function-syntax-3/component.js +++ b/packages/test-app/app/components/task-function-syntax-3/component.js @@ -1,16 +1,17 @@ import Component from '@ember/component'; +import { tracked } from '@glimmer/tracking'; import { task, timeout } from 'ember-concurrency'; export default class TaskFunctionSyntaxComponent3 extends Component { tagName = ''; - status = null; + @tracked status = null; // BEGIN-SNIPPET task-function-syntax-3 myTask = task(async () => { - this.set('status', `Thinking...`); + this.status = `Thinking...`; let promise = timeout(1000).then(() => 123); let resolvedValue = await promise; - this.set('status', `The value is ${resolvedValue}`); + this.status = `The value is ${resolvedValue}`; }); // END-SNIPPET } diff --git a/packages/test-app/app/components/task-function-syntax-4/component.js b/packages/test-app/app/components/task-function-syntax-4/component.js index 18050dce9..42b005f1f 100644 --- a/packages/test-app/app/components/task-function-syntax-4/component.js +++ b/packages/test-app/app/components/task-function-syntax-4/component.js @@ -1,20 +1,21 @@ import Component from '@ember/component'; +import { tracked } from '@glimmer/tracking'; import { task, timeout } from 'ember-concurrency'; export default class TaskFunctionSyntaxComponent4 extends Component { tagName = ''; - status = null; + @tracked status = null; // BEGIN-SNIPPET task-function-syntax-4 myTask = task(async () => { - this.set('status', `Thinking...`); + this.status = `Thinking...`; try { await timeout(1000).then(() => { throw 'Ahhhhh!!!!'; }); - this.set('status', `This does not get used!`); + this.status = `This does not get used!`; } catch (e) { - this.set('status', `Caught value: ${e}`); + this.status = `Caught value: ${e}`; } }); // END-SNIPPET diff --git a/packages/test-app/app/components/task-function-syntax-5/component.js b/packages/test-app/app/components/task-function-syntax-5/component.js deleted file mode 100644 index 010b11d86..000000000 --- a/packages/test-app/app/components/task-function-syntax-5/component.js +++ /dev/null @@ -1,25 +0,0 @@ -// BEGIN-SNIPPET task-function-syntax-5 -import Component from '@ember/component'; -import { computed } from '@ember/object'; -import { task } from 'ember-concurrency'; - -export default Component.extend({ - tagName: '', - status: null, - - favoriteNumbers: computed('pickRandomNumbers.last.value', function () { - return this.pickRandomNumbers?.last?.value || []; - }), - - pickRandomNumbers: task(function () { - let nums = []; - for (let i = 0; i < 3; i++) { - nums.push(Math.floor(Math.random() * 10)); - } - - this.set('status', `My favorite numbers: ${nums.join(', ')}`); - - return nums; - }).restartable(), -}); -// END-SNIPPET diff --git a/packages/test-app/app/components/task-lifecycle-events-example/component.js b/packages/test-app/app/components/task-lifecycle-events-example/component.js index ac6a1c2c2..b42c6d728 100644 --- a/packages/test-app/app/components/task-lifecycle-events-example/component.js +++ b/packages/test-app/app/components/task-lifecycle-events-example/component.js @@ -1,5 +1,6 @@ import Component from '@ember/component'; import { addListener, removeListener } from '@ember/object/events'; +import { tracked } from '@glimmer/tracking'; import { task, timeout } from 'ember-concurrency'; // BEGIN-SNIPPET task-lifecycle-events @@ -30,7 +31,7 @@ function loopingAjaxTask(id) { export default class TaskLifecycleEventsExample extends Component { tagName = ''; - logs = []; + @tracked logs = []; constructor() { super(...arguments); @@ -91,9 +92,7 @@ export default class TaskLifecycleEventsExample extends Component { @task({ on: 'init' }) task7 = loopingAjaxTask(7); log(color, message) { - let logs = this.logs; - logs.push({ color, message }); - this.set('logs', logs.slice(-7)); + this.logs = [...this.logs, { color, message }].slice(-7); } } // END-SNIPPET diff --git a/packages/test-app/app/docs/cancelation/controller.js b/packages/test-app/app/docs/cancelation/controller.js index 3fb68500a..9112a30cf 100644 --- a/packages/test-app/app/docs/cancelation/controller.js +++ b/packages/test-app/app/docs/cancelation/controller.js @@ -1,20 +1,22 @@ import Controller from '@ember/controller'; import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; import { forever, task } from 'ember-concurrency'; // BEGIN-SNIPPET cancelation export default class CancelationController extends Controller { - count = 0; - mostRecent = null; + @tracked count = 0; + @tracked mostRecent = null; myTask = task(async () => { try { - this.incrementProperty('count'); + this.count += 1; await forever; } finally { // finally blocks always get called, // even when the task is being canceled this.decrementProperty('count'); + this.count -= 1; } }); @@ -22,7 +24,7 @@ export default class CancelationController extends Controller { performTask() { let task = this.myTask; let taskInstance = task.perform(); - this.set('mostRecent', taskInstance); + this.mostRecent = taskInstance; } @action diff --git a/packages/test-app/app/docs/child-tasks/controller.js b/packages/test-app/app/docs/child-tasks/controller.js index f84b92c73..07d493960 100644 --- a/packages/test-app/app/docs/child-tasks/controller.js +++ b/packages/test-app/app/docs/child-tasks/controller.js @@ -1,30 +1,31 @@ import Controller from '@ember/controller'; +import { tracked } from '@glimmer/tracking'; import { restartableTask, task, timeout } from 'ember-concurrency'; // BEGIN-SNIPPET child-tasks export default class ChildTasksController extends Controller { - status = 'Waiting to start'; + @tracked status = 'Waiting to start'; parentTask = restartableTask(async () => { - this.set('status', '1. Parent: one moment...'); + this.status = '1. Parent: one moment...'; await timeout(1000); let value = await this.childTask.perform(); - this.set('status', `5. Parent: child says "${value}"`); + this.status = `5. Parent: child says "${value}"`; await timeout(1000); - this.set('status', '6. Done!'); + this.status = '6. Done!'; }); childTask = task(async () => { - this.set('status', '2. Child: one moment...'); + this.status = '2. Child: one moment...'; await timeout(1000); let value = await this.grandchildTask.perform(); - this.set('status', `4. Child: grandchild says "${value}"`); + this.status = `4. Child: grandchild says "${value}"`; await timeout(1000); return "What's up"; }); grandchildTask = task(async () => { - this.set('status', '3. Grandchild: one moment...'); + this.status = '3. Grandchild: one moment...'; await timeout(1000); return 'Hello'; }); diff --git a/packages/test-app/app/docs/examples/joining-tasks/controller.js b/packages/test-app/app/docs/examples/joining-tasks/controller.js index d68f89310..c287b9dd4 100644 --- a/packages/test-app/app/docs/examples/joining-tasks/controller.js +++ b/packages/test-app/app/docs/examples/joining-tasks/controller.js @@ -4,12 +4,15 @@ import { randomWord } from 'test-app/utils'; // BEGIN-SNIPPET joining-tasks import { task, timeout, all, race } from 'ember-concurrency'; +import { tracked } from '@glimmer/tracking'; const methods = { all, race }; export default class JoiningTasksController extends Controller { - childTasks = null; - colors = ['#ff8888', '#88ff88', '#8888ff']; - status = 'Waiting...'; + @tracked childTasks = null; + @tracked colors = ['#ff8888', '#88ff88', '#8888ff']; + @tracked status = 'Waiting...'; + @tracked id = null; + @tracked percent = null; parent = task({ restartable: true }, async (methodName) => { let allOrRace = methods[methodName]; @@ -19,10 +22,10 @@ export default class JoiningTasksController extends Controller { childTasks.push(this.child.perform(id)); } - this.set('childTasks', childTasks); - this.set('status', 'Waiting for child tasks to complete...'); + this.childTasks = childTasks; + this.status = 'Waiting for child tasks to complete...'; let words = await allOrRace(childTasks); - this.set('status', `Done: ${makeArray(words).join(', ')}`); + this.status = `Done: ${makeArray(words).join(', ')}`; }); @task({ enqueue: true, maxConcurrency: 3 }) @@ -31,14 +34,14 @@ export default class JoiningTasksController extends Controller { id: null, *perform(id) { - this.set('id', id); + this.id = id; while (this.percent < 100) { yield timeout(Math.random() * 100 + 100); let newPercent = Math.min( 100, Math.floor(this.percent + Math.random() * 20), ); - this.set('percent', newPercent); + this.percent = newPercent; } return randomWord(); }, diff --git a/packages/test-app/app/docs/tutorial/refactor/template.hbs b/packages/test-app/app/docs/tutorial/refactor/template.hbs index e8beaf570..567421764 100644 --- a/packages/test-app/app/docs/tutorial/refactor/template.hbs +++ b/packages/test-app/app/docs/tutorial/refactor/template.hbs @@ -122,8 +122,8 @@ call right when the user navigates away, the component will be destroyed and the findStores - task will stop right where it is and will never hit the line of code with the - this.set(), thus avoiding the + task will stop right where it is and will never hit the line of code with + this.result = result, thus avoiding the "set on destroyed object" error.

diff --git a/packages/test-app/app/helpers-test/controller.js b/packages/test-app/app/helpers-test/controller.js index 7ccb9d7a3..951f26f8c 100644 --- a/packages/test-app/app/helpers-test/controller.js +++ b/packages/test-app/app/helpers-test/controller.js @@ -1,17 +1,18 @@ import Controller from '@ember/controller'; import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; import { forever, task } from 'ember-concurrency'; export default class HelpersTestController extends Controller { - maybeNullTask = null; - status = null; + @tracked maybeNullTask = null; + @tracked status = null; myTask = task(async (...args) => { try { - this.set('status', args.join('-')); + this.status = args.join('-'); await forever; } finally { - this.set('status', 'canceled'); + this.status = 'canceled'; } }); @@ -27,11 +28,11 @@ export default class HelpersTestController extends Controller { }); someTask = task(async () => { - this.set('status', 'someTask'); + this.status = 'someTask'; }); @action setupTask() { - this.set('maybeNullTask', this.someTask); + this.maybeNullTask = this.someTask; } } diff --git a/packages/test-app/app/testing-ergo/foo/controller.js b/packages/test-app/app/testing-ergo/foo/controller.js index 9519571e2..d9ff8d608 100644 --- a/packages/test-app/app/testing-ergo/foo/controller.js +++ b/packages/test-app/app/testing-ergo/foo/controller.js @@ -1,20 +1,21 @@ import Controller from '@ember/controller'; import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; import { task, timeout } from 'ember-concurrency'; export default class FooController extends Controller { - isShowingButton = false; + @tracked isShowingButton = false; showButtonSoon = task(async () => { - this.set('isShowingButton', false); + this.isShowingButton = false; await timeout(200); - this.set('isShowingButton', true); + this.isShowingButton = true; }); value = 0; @action setValue() { - this.set('value', 123); + this.value = 123; } } diff --git a/packages/test-app/package.json b/packages/test-app/package.json index 3e68cd2c1..10bee3e88 100644 --- a/packages/test-app/package.json +++ b/packages/test-app/package.json @@ -62,14 +62,13 @@ "ember-cli-terser": "^4.0.2", "ember-code-snippet": "^3.0.0", "ember-concurrency": "workspace:*", - "ember-data": "~4.11.3", "ember-fetch": "^8.1.2", "ember-load-initializers": "^2.1.2", "ember-modifier": "^4.1.0", "ember-page-title": "^7.0.0", "ember-prism": "^0.13.0", "ember-qunit": "^6.2.0", - "ember-resolver": "^10.0.0", + "ember-resolver": "^11.0.0", "ember-sinon-qunit": "^7.4.0", "ember-source": "~4.11.0", "ember-source-channel-url": "^3.0.0", diff --git a/packages/test-app/snippets/task-cancelation-example-1.js b/packages/test-app/snippets/task-cancelation-example-1.js index 3d4c936b5..af8e45ac3 100644 --- a/packages/test-app/snippets/task-cancelation-example-1.js +++ b/packages/test-app/snippets/task-cancelation-example-1.js @@ -1,8 +1,11 @@ import Component from '@ember/component'; import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; import { task, timeout } from 'ember-concurrency'; export default class TaskCancelationExampleComponent extends Component { + @tracked results = null; + queryServer = task(async () => { await timeout(10000); return 123; @@ -11,6 +14,6 @@ export default class TaskCancelationExampleComponent extends Component { @action async fetchResults() { let results = await this.queryServer.perform(); - this.set('results', results); + this.results = results; } } diff --git a/packages/test-app/snippets/task-cancelation-example-2.js b/packages/test-app/snippets/task-cancelation-example-2.js index 729a9c996..787e0244a 100644 --- a/packages/test-app/snippets/task-cancelation-example-2.js +++ b/packages/test-app/snippets/task-cancelation-example-2.js @@ -1,8 +1,11 @@ import Component from '@ember/component'; import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; import { didCancel, task, timeout } from 'ember-concurrency'; export default class TaskCancelationExampleComponent extends Component { + @tracked results = null; + queryServer = task(async () => { await timeout(10000); return 123; @@ -12,8 +15,8 @@ export default class TaskCancelationExampleComponent extends Component { async fetchResults() { try { let results = await this.queryServer.perform(); - this.set('results', results); - } catch(e) { + this.results = results; + } catch (e) { if (!didCancel(e)) { // re-throw the non-cancelation error throw e; diff --git a/packages/test-app/snippets/task-cancelation-example-3.js b/packages/test-app/snippets/task-cancelation-example-3.js index 6b2532f22..36aa58622 100644 --- a/packages/test-app/snippets/task-cancelation-example-3.js +++ b/packages/test-app/snippets/task-cancelation-example-3.js @@ -1,7 +1,10 @@ import Component from '@ember/component'; +import { tracked } from '@glimmer/tracking'; import { task, timeout } from 'ember-concurrency'; export default class TaskCancelationExampleComponent extends Component { + @tracked results = null; + queryServer = task(async () => { await timeout(10000); return 123; @@ -9,6 +12,6 @@ export default class TaskCancelationExampleComponent extends Component { fetchResults = task(async () => { let results = await this.queryServer.perform(); - this.set('results', results); + this.results = results; }); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf2bbca50..791594022 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -192,9 +192,6 @@ importers: ember-concurrency: specifier: workspace:* version: link:../ember-concurrency - ember-data: - specifier: ~4.11.3 - version: 4.11.3(@babel/core@7.23.9)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@4.11.0)(webpack@5.90.1) ember-fetch: specifier: ^8.1.2 version: 8.1.2 @@ -214,8 +211,8 @@ importers: specifier: ^6.2.0 version: 6.2.0(@ember/test-helpers@2.9.4)(@glint/template@1.3.0)(ember-source@4.11.0)(qunit@2.20.0)(webpack@5.90.1) ember-resolver: - specifier: ^10.0.0 - version: 10.1.1(@ember/string@3.1.1)(ember-source@4.11.0) + specifier: ^11.0.0 + version: 11.0.1(ember-source@4.11.0) ember-sinon-qunit: specifier: ^7.4.0 version: 7.4.0(ember-source@4.11.0)(qunit@2.20.0)(sinon@15.2.0) @@ -1507,219 +1504,9 @@ packages: dev: true optional: true - /@ember-data/adapter@4.11.3(@ember-data/store@4.11.3)(@ember/string@3.1.1)(@glint/template@1.3.0)(ember-inflector@4.0.2)(webpack@5.90.1): - resolution: {integrity: sha512-G7dbaPnYMW8VYxIT75KAkzax2mkWTs2TYxS7+qbphs6esXpO9Y/iNp5fTqLaACb9JqUypwEA/rlfC7/zkcGbBw==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - peerDependencies: - '@ember-data/store': 4.11.3 - '@ember/string': ^3.0.1 - ember-inflector: ^4.0.2 - dependencies: - '@ember-data/private-build-infra': 4.11.3(@glint/template@1.3.0) - '@ember-data/store': 4.11.3(@babel/core@7.23.9)(@ember-data/model@4.11.3)(@ember-data/record-data@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@4.11.0)(webpack@5.90.1) - '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1 - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.1) - ember-cli-babel: 7.26.11 - ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2 - transitivePeerDependencies: - - '@glint/template' - - supports-color - - webpack - dev: true - - /@ember-data/canary-features@4.11.3(@glint/template@1.3.0): - resolution: {integrity: sha512-RTLY2N9t1SXr4e90VBKi+3PIitwjTMBU8BcEhnKovT//sGlywohHq7T36H6nJuITRtki3On9PpbJOhhQZuyAlQ==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - dependencies: - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - '@glint/template' - - supports-color - dev: true - - /@ember-data/debug@4.11.3(@ember/string@3.1.1)(@glint/template@1.3.0)(webpack@5.90.1): - resolution: {integrity: sha512-3pA5u3qy+pjtwcoyMzs7WijRrSQz5z+Vgn9b5Y4cEOHn8loS9riLCMScnFaQT3HjxQgq+3NkNb52sJafHPzs4Q==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - peerDependencies: - '@ember/string': ^3.0.1 - dependencies: - '@ember-data/private-build-infra': 4.11.3(@glint/template@1.3.0) - '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1 - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.1) - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - '@glint/template' - - supports-color - - webpack - dev: true - - /@ember-data/model@4.11.3(@babel/core@7.23.9)(@ember-data/record-data@4.11.3)(@ember-data/store@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glint/template@1.3.0)(ember-inflector@4.0.2)(ember-source@4.11.0)(webpack@5.90.1): - resolution: {integrity: sha512-nkDru5TZmOp4J1xp65D1bR3hBJ3u5KhKKfDpWeGnHW2YDCVUdLORRwW7vfrPnnXDIoJij42DwDVCiTY25Xhrqw==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - peerDependencies: - '@ember-data/record-data': 4.11.3 - '@ember-data/store': 4.11.3 - '@ember-data/tracking': 4.11.3 - '@ember/string': ^3.0.1 - ember-inflector: ^4.0.2 - peerDependenciesMeta: - '@ember-data/record-data': - optional: true - dependencies: - '@ember-data/canary-features': 4.11.3(@glint/template@1.3.0) - '@ember-data/private-build-infra': 4.11.3(@glint/template@1.3.0) - '@ember-data/record-data': 4.11.3(@ember-data/store@4.11.3)(@glint/template@1.3.0)(webpack@5.90.1) - '@ember-data/store': 4.11.3(@babel/core@7.23.9)(@ember-data/model@4.11.3)(@ember-data/record-data@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@4.11.0)(webpack@5.90.1) - '@ember-data/tracking': 4.11.3 - '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1 - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.1) - ember-cached-decorator-polyfill: 1.0.2(@babel/core@7.23.9)(@glint/template@1.3.0)(ember-source@4.11.0) - ember-cli-babel: 7.26.11 - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - ember-compatibility-helpers: 1.2.7(@babel/core@7.23.9) - ember-inflector: 4.0.2 - inflection: 2.0.1 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - ember-source - - supports-color - - webpack - dev: true - - /@ember-data/private-build-infra@4.11.3(@glint/template@1.3.0): - resolution: {integrity: sha512-bXFQMEegUc+vKn/vD7FmAkq7ECE0okZ2sbtv/0RXqYn7TLk44rvGzpqSUXUowpCaGI/87MmaW8JaZMMdqF9wuw==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/runtime': 7.23.9 - '@ember-data/canary-features': 4.11.3(@glint/template@1.3.0) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - babel-import-util: 1.4.1 - babel-plugin-debug-macros: 0.3.4(@babel/core@7.23.9) - 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: 3.0.8 - broccoli-merge-trees: 4.2.0 - broccoli-rollup: 5.0.0 - calculate-cache-key-for-tree: 2.0.0 - chalk: 4.1.2 - ember-cli-babel: 7.26.11 - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-version-checker: 5.1.2 - git-repo-info: 2.1.1 - glob: 8.1.0 - npm-git-info: 1.0.3 - rimraf: 3.0.2 - rsvp: 4.8.5 - semver: 7.5.4 - silent-error: 1.1.1 - transitivePeerDependencies: - - '@glint/template' - - supports-color - dev: true - - /@ember-data/record-data@4.11.3(@ember-data/store@4.11.3)(@glint/template@1.3.0)(webpack@5.90.1): - resolution: {integrity: sha512-8NmeEZJ7or354NLZJgibJ1FuhWL70H6G24tGSEIzM8IV7wr6TreIyaWODaW372QwamWYgFIpfnFwWt5MTlY/gw==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - peerDependencies: - '@ember-data/store': 4.11.3 - dependencies: - '@ember-data/canary-features': 4.11.3(@glint/template@1.3.0) - '@ember-data/private-build-infra': 4.11.3(@glint/template@1.3.0) - '@ember-data/store': 4.11.3(@babel/core@7.23.9)(@ember-data/model@4.11.3)(@ember-data/record-data@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@4.11.0)(webpack@5.90.1) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.1) - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - '@glint/template' - - supports-color - - webpack - dev: true - /@ember-data/rfc395-data@0.0.4: resolution: {integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==} - /@ember-data/serializer@4.11.3(@ember-data/store@4.11.3)(@ember/string@3.1.1)(@glint/template@1.3.0)(ember-inflector@4.0.2)(webpack@5.90.1): - resolution: {integrity: sha512-Qnzrowinz14/onQfwd4TPwNG0sMTAwTWE0RajYo2fysF3CKyAua0nIzmFtXKx0CogD7TYd0C5xf6nMjFesT09Q==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - peerDependencies: - '@ember-data/store': 4.11.3 - '@ember/string': ^3.0.1 - ember-inflector: ^4.0.2 - dependencies: - '@ember-data/private-build-infra': 4.11.3(@glint/template@1.3.0) - '@ember-data/store': 4.11.3(@babel/core@7.23.9)(@ember-data/model@4.11.3)(@ember-data/record-data@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@4.11.0)(webpack@5.90.1) - '@ember/string': 3.1.1 - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.1) - ember-cli-babel: 7.26.11 - ember-cli-test-info: 1.0.0 - ember-inflector: 4.0.2 - transitivePeerDependencies: - - '@glint/template' - - supports-color - - webpack - dev: true - - /@ember-data/store@4.11.3(@babel/core@7.23.9)(@ember-data/model@4.11.3)(@ember-data/record-data@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@4.11.0)(webpack@5.90.1): - resolution: {integrity: sha512-ogwWy+VqMpkCGs4n30pzuB2vqv/dJRL6wdV3fdNKpXrDugffjuMPpLBQYF937qztDUZKxmnbWAZe5PbQOz8b1Q==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - peerDependencies: - '@ember-data/model': 4.11.3 - '@ember-data/record-data': 4.11.3 - '@ember-data/tracking': 4.11.3 - '@ember/string': ^3.0.1 - '@glimmer/tracking': ^1.1.2 - peerDependenciesMeta: - '@ember-data/model': - optional: true - '@ember-data/record-data': - optional: true - dependencies: - '@ember-data/canary-features': 4.11.3(@glint/template@1.3.0) - '@ember-data/model': 4.11.3(@babel/core@7.23.9)(@ember-data/record-data@4.11.3)(@ember-data/store@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glint/template@1.3.0)(ember-inflector@4.0.2)(ember-source@4.11.0)(webpack@5.90.1) - '@ember-data/private-build-infra': 4.11.3(@glint/template@1.3.0) - '@ember-data/record-data': 4.11.3(@ember-data/store@4.11.3)(@glint/template@1.3.0)(webpack@5.90.1) - '@ember-data/tracking': 4.11.3 - '@ember/string': 3.1.1 - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@glimmer/tracking': 1.1.2 - ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.1) - ember-cached-decorator-polyfill: 1.0.2(@babel/core@7.23.9)(@glint/template@1.3.0)(ember-source@4.11.0) - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - ember-source - - supports-color - - webpack - dev: true - - /@ember-data/tracking@4.11.3: - resolution: {integrity: sha512-YZxFTMe2TBL8H8/GrnrvP7Wc/uuAijoSyiP2g6TMNRsL1e/3BWDT0EIl+B/5Wji+dchofY8iuMWfpY7VDvPIzA==} - engines: {node: 14.* || 16.* || >= 18} - dependencies: - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - supports-color - dev: true - /@ember/edition-utils@1.2.0: resolution: {integrity: sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog==} @@ -2475,15 +2262,6 @@ packages: '@types/node': 18.19.14 dev: true - /@types/broccoli-plugin@3.0.0: - resolution: {integrity: sha512-f+TcsARR2PovfFRKFdCX0kfH/QoM3ZVD2h1rl2mNvrKO0fq2uBNCBsTU3JanfU4COCt5cXpTfARyUsERlC8vIw==} - deprecated: This is a stub types definition. broccoli-plugin provides its own type definitions, so you do not need this installed. - dependencies: - broccoli-plugin: 4.0.7 - transitivePeerDependencies: - - supports-color - dev: true - /@types/chai-as-promised@7.1.8: resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} dependencies: @@ -3466,10 +3244,6 @@ packages: /babel-plugin-syntax-dynamic-import@6.18.0: resolution: {integrity: sha512-MioUE+LfjCEz65Wf7Z/Rm4XCP5k2c+TbMd2Z2JKc7U9uwjBhAfNPE48KC4GTGKhppMeYVepwDBNO/nGY6NYHBA==} - /babel6-plugin-strip-class-callcheck@6.0.0: - resolution: {integrity: sha512-biNFJ7JAK4+9BwswDGL0dmYpvXHvswOFR/iKg3Q/f+pNxPEa5bWZkLHI1fW4spPytkHGMe7f/XtYyhzml9hiWg==} - dev: true - /backbone@1.5.0: resolution: {integrity: sha512-RPKlstw5NW+rD2X4PnEnvgLhslRnXOugXw2iBloHkPMgOxvakP1/A+tZIGM3qCm8uvZeEf8zMm0uvcK1JwL+IA==} dependencies: @@ -4067,23 +3841,6 @@ packages: - supports-color dev: true - /broccoli-rollup@5.0.0: - resolution: {integrity: sha512-QdMuXHwsdz/LOS8zu4HP91Sfi4ofimrOXoYP/lrPdRh7lJYD87Lfq4WzzUhGHsxMfzANIEvl/7qVHKD3cFJ4tA==} - engines: {node: '>=12.0'} - dependencies: - '@types/broccoli-plugin': 3.0.0 - broccoli-plugin: 4.0.7 - fs-tree-diff: 2.0.1 - heimdalljs: 0.2.6 - node-modules-path: 1.0.2 - rollup: 2.79.1 - rollup-pluginutils: 2.8.2 - symlink-or-copy: 1.3.1 - walk-sync: 2.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /broccoli-sass-source-maps@4.2.4: resolution: {integrity: sha512-MHwqLkgYW24T9k2OzprdYtERCAaO3wuSGqKna8QcAzCjDxYyoojisg2lfSWj9k2G72PlACUjUg8O39jttE84og==} engines: {node: '>=10.24.1'} @@ -5631,12 +5388,6 @@ packages: - supports-color dev: true - /ember-cli-test-info@1.0.0: - resolution: {integrity: sha512-dEVTIpmUfCzweC97NGf6p7L6XKBwV2GmSM4elmzKvkttEp5P7AvGA9uGyN4GqFq+RwhW+2b0I2qlX00w+skm+A==} - dependencies: - ember-cli-string-utils: 1.1.0 - dev: true - /ember-cli-test-loader@3.1.0: resolution: {integrity: sha512-0aocZV9SIoOHiU3hrH3IuLR6busWhTX6UVXgd490hmJkIymmOXNH2+jJoC7Ebkeo3PiOfAdjqhb765QDlHSJOw==} engines: {node: 10.* || >= 12} @@ -5934,37 +5685,6 @@ packages: - '@babel/core' - supports-color - /ember-data@4.11.3(@babel/core@7.23.9)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@4.11.0)(webpack@5.90.1): - resolution: {integrity: sha512-7vir6Re3M3M6yJoCHy6UxEg3oSY1JEnsuTByY3lJquWPaUamn7qbPQvNr16Tqh8EKrt+e/+X26czFm4kRGhpVg==} - engines: {node: ^14.8.0 || 16.* || >= 18.*} - peerDependencies: - '@ember/string': ^3.0.1 - dependencies: - '@ember-data/adapter': 4.11.3(@ember-data/store@4.11.3)(@ember/string@3.1.1)(@glint/template@1.3.0)(ember-inflector@4.0.2)(webpack@5.90.1) - '@ember-data/debug': 4.11.3(@ember/string@3.1.1)(@glint/template@1.3.0)(webpack@5.90.1) - '@ember-data/model': 4.11.3(@babel/core@7.23.9)(@ember-data/record-data@4.11.3)(@ember-data/store@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glint/template@1.3.0)(ember-inflector@4.0.2)(ember-source@4.11.0)(webpack@5.90.1) - '@ember-data/private-build-infra': 4.11.3(@glint/template@1.3.0) - '@ember-data/record-data': 4.11.3(@ember-data/store@4.11.3)(@glint/template@1.3.0)(webpack@5.90.1) - '@ember-data/serializer': 4.11.3(@ember-data/store@4.11.3)(@ember/string@3.1.1)(@glint/template@1.3.0)(ember-inflector@4.0.2)(webpack@5.90.1) - '@ember-data/store': 4.11.3(@babel/core@7.23.9)(@ember-data/model@4.11.3)(@ember-data/record-data@4.11.3)(@ember-data/tracking@4.11.3)(@ember/string@3.1.1)(@glimmer/tracking@1.1.2)(@glint/template@1.3.0)(ember-source@4.11.0)(webpack@5.90.1) - '@ember-data/tracking': 4.11.3 - '@ember/edition-utils': 1.2.0 - '@ember/string': 3.1.1 - '@embroider/macros': 1.13.5(@glint/template@1.3.0) - '@glimmer/env': 0.1.7 - broccoli-merge-trees: 4.2.0 - ember-auto-import: 2.7.2(@glint/template@1.3.0)(webpack@5.90.1) - ember-cli-babel: 7.26.11 - ember-inflector: 4.0.2 - transitivePeerDependencies: - - '@babel/core' - - '@glimmer/tracking' - - '@glint/template' - - ember-source - - supports-color - - webpack - dev: true - /ember-destroyable-polyfill@2.0.3(@babel/core@7.23.9): resolution: {integrity: sha512-TovtNqCumzyAiW0/OisSkkVK93xnVF4NRU6+FN0ubpfwEOpRrmM2RqDwXI6YAChCgSHON1cz0DfQStpA1Gjuuw==} engines: {node: 10.* || >= 12} @@ -6000,15 +5720,6 @@ packages: - supports-color dev: true - /ember-inflector@4.0.2: - resolution: {integrity: sha512-+oRstEa52mm0jAFzhr51/xtEWpCEykB3SEBr7vUg8YnXUZJ5hKNBppP938q8Zzr9XfJEbzrtDSGjhKwJCJv6FQ==} - engines: {node: 10.* || 12.* || >= 14} - dependencies: - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - supports-color - dev: true - /ember-load-initializers@2.1.2(@babel/core@7.23.9): resolution: {integrity: sha512-CYR+U/wRxLbrfYN3dh+0Tb6mFaxJKfdyz+wNql6cqTrA0BBi9k6J3AaKXj273TqvEpyyXegQFFkZEiuZdYtgJw==} engines: {node: 6.* || 8.* || >= 10.*} @@ -6102,17 +5813,15 @@ packages: - webpack dev: true - /ember-resolver@10.1.1(@ember/string@3.1.1)(ember-source@4.11.0): - resolution: {integrity: sha512-y1zzn6C4YGJui+tJzcCKlsf1oSOSVAkRrvmg8OwqVIKnALKKb9ihx2qLCslHg8x0wJvJgMtDMXgrczvQrZW0Lw==} + /ember-resolver@11.0.1(ember-source@4.11.0): + resolution: {integrity: sha512-ucBk3oM+PR+AfYoSUXeQh8cDQS1sSiEKp4Pcgbew5cFMSqPxJfqd1zyZsfQKNTuyubeGmWxBOyMVSTvX2LeCyg==} engines: {node: 14.* || 16.* || >= 18} peerDependencies: - '@ember/string': ^3.0.1 ember-source: ^4.8.3 || >= 5.0.0 peerDependenciesMeta: ember-source: optional: true dependencies: - '@ember/string': 3.1.1 ember-cli-babel: 7.26.11 ember-source: 4.11.0(@babel/core@7.23.9)(@glimmer/component@1.1.2)(@glint/template@1.3.0)(webpack@5.90.1) transitivePeerDependencies: @@ -9483,10 +9192,6 @@ packages: engines: {node: '>=8'} dev: true - /npm-git-info@1.0.3: - resolution: {integrity: sha512-i5WBdj4F/ULl16z9ZhsJDMl1EQCMQhHZzBwNnKL2LOA+T8IHNeRkLCVz9uVV9SzUdGTbDq+1oXhIYMe+8148vw==} - dev: true - /npm-package-arg@10.1.0: resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -10560,14 +10265,6 @@ packages: sourcemap-codec: 1.4.8 dev: true - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - /rollup@4.9.6: resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'}