diff --git a/addons/api/README.md b/addons/api/README.md index 3e942bc54a..91d6835fad 100644 --- a/addons/api/README.md +++ b/addons/api/README.md @@ -23,15 +23,45 @@ This addon contains the API data access layer for Boundary. Add this addon to an Ember application's `devDependencies` as: `"api": "workspace:*"`, for applications included in this monorepo. -Since this addon also includes Mirage mocks, be sure to install -`ember-cli-mirage` and add the following config to your UI project: +This addon also includes Mirage mocks. To include the `miragejs` dependency and this addon's mirage handlers configure the consuming app's `config/environment.js` ```js -'ember-cli-mirage': { - directory: '../../addons/api/mirage' +mirage: { + enabled: true } ``` +To have mirage start and intercept requests when the application starts: +1. Add the `@embroider/macros` dependency to your application +2. Configure `@embroider/macros` with `startMirageWithApp` based on app's config within `ember-cli-build.js`: + +```js +// ember-cli-build.js +module.exports = async function (defaults) { + // load the app's config + const { EMBER_ENV } = process.env; + var config = require('./config/environment')(EMBER_ENV); + + const app = new EmberApp(defaults, { + '@embroider/macros': { + setOwnConfig: { + startMirageWithApp: config.mirage?.enabled ?? false + }, + }, + }); +} +``` + +3. Finally, use the `@embroider/macros` config value for `startMirageWithApp` in `app/app.js` to conditionally start mirage: + +```js +import { macroCondition, importSync, getOwnConfig, isTesting } from '@embroider/macros'; + +if (macroCondition(getOwnConfig().startMirageWithApp && !isTesting())) { + const startServer = importSync('api/mirage/config').default; + startServer({}); +} +``` ## Installation See monorepo README for installation instructions. diff --git a/addons/api/addon-test-support/helpers/mirage.js b/addons/api/addon-test-support/helpers/mirage.js new file mode 100644 index 0000000000..96c2ad8c4f --- /dev/null +++ b/addons/api/addon-test-support/helpers/mirage.js @@ -0,0 +1,33 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: BUSL-1.1 + */ + +import { settled } from '@ember/test-helpers'; +import startMirage from 'api/mirage/config'; + +export function setupMirage(hooks) { + hooks.beforeEach(function () { + if (!this.owner) { + throw new Error( + 'Must call one of the ember-qunit setupTest() / setupRenderingTest() / setupApplicationTest() first', + ); + } + + // the environment property here is configuration to the mirage server: + // https://github.com/miragejs/miragejs/blob/7ff4f3f6fe56bf0cb1648f5af3f5210fcb07e20b/types/index.d.ts#L383 + // It is not related to ember's build environment. In this case for mirage the "test" environment does + // not load the default scenario: + // https://github.com/miragejs/miragejs/blob/7ff4f3f6fe56bf0cb1648f5af3f5210fcb07e20b/lib/server.js#L302 + this.server = startMirage({ environment: 'test' }); + }); + + hooks.afterEach(function () { + return settled().then(() => { + if (this.server) { + this.server.shutdown(); + delete this.server; + } + }); + }); +} diff --git a/addons/api/addon/abilities/role.js b/addons/api/addon/abilities/role.js index ef0e1053cf..bc55455a5b 100644 --- a/addons/api/addon/abilities/role.js +++ b/addons/api/addon/abilities/role.js @@ -16,7 +16,7 @@ class InvalidRolePrincipalTypeError extends Error { export default class RoleAbility extends ModelAbility { // =services - @service can; + @service abilities; // =permissions @@ -64,6 +64,6 @@ export default class RoleAbility extends ModelAbility { `Expected a role principal of type 'user', 'group', or 'managed-group'. Got '${type}'.`, ); } - return this.can.can(`read ${type}`, this.model); + return this.abilities.can(`read ${type}`, this.model); } } diff --git a/addons/api/mirage/config.js b/addons/api/addon/mirage/config.js similarity index 78% rename from addons/api/mirage/config.js rename to addons/api/addon/mirage/config.js index f608d69423..e0469fc351 100644 --- a/addons/api/mirage/config.js +++ b/addons/api/addon/mirage/config.js @@ -3,12 +3,7 @@ * SPDX-License-Identifier: BUSL-1.1 */ -import { - discoverEmberDataModels, - applyEmberDataSerializers, -} from 'ember-cli-mirage'; import { createServer, Response } from 'miragejs'; -import environmentConfig from '../config/environment'; import { authHandler, deauthHandler } from './route-handlers/auth'; import { targetHandler } from './route-handlers/target'; import { pickRandomStatusString } from './factories/session'; @@ -18,18 +13,176 @@ import { faker } from '@faker-js/faker'; import { asciicasts } from './data/asciicasts'; import { TYPE_WORKER_PKI } from 'api/models/worker'; -const isTesting = environmentConfig.environment === 'test'; +// mirage models (alphabetical) +import accountModel from './models/account'; +import aliasModel from './models/alias'; +import authMethodModel from './models/auth-method'; +import baseModel from './models/base'; +import channelRecordingModel from './models/channel-recording'; +import connectionRecordingModel from './models/connection-recording'; +import credentialLibraryModel from './models/credential-library'; +import credentialStoreModel from './models/credential-store'; +import credentialModel from './models/credential'; +import groupModel from './models/group'; +import hostCatalogModel from './models/host-catalog'; +import hostSetModel from './models/host-set'; +import hostModel from './models/host'; +import managedGroupModel from './models/managed-group'; +import policyModel from './models/policy'; +import roleModel from './models/role'; +import scopeModel from './models/scope'; +import sessionRecordingModel from './models/session-recording'; +import sessionModel from './models/session'; +import storageBucketModel from './models/storage-bucket'; +import targetModel from './models/target'; +import userModel from './models/user'; +import workerModel from './models/worker'; + +// mirage serializers (alphabetical) +import accountSerializer from './serializers/account'; +import aliasSerializer from './serializers/alias'; +import applicationSerializer from './serializers/application'; +import authMethodSerializer from './serializers/auth-method'; +import channelRecordingSerializer from './serializers/channel-recording'; +import connectionRecordingSerializer from './serializers/connection-recording'; +import credentialLibrarySerializer from './serializers/credential-library'; +import credentialStoreSerializer from './serializers/credential-store'; +import credentialSerializer from './serializers/credential'; +import groupSerializer from './serializers/group'; +import hostCatalogSerializer from './serializers/host-catalog'; +import hostSetSerializer from './serializers/host-set'; +import hostSerializer from './serializers/host'; +import managedGroupSerializer from './serializers/managed-group'; +import policySerializer from './serializers/policy'; +import roleSerializer from './serializers/role'; +import scopeSerializer from './serializers/scope'; +import sessionRecordingSerializer from './serializers/session-recording'; +import sessionSerializer from './serializers/session'; +import storageBucketSerializer from './serializers/storage-bucket'; +import targetSerializer from './serializers/target'; +import userSerializer from './serializers/user'; +import workerSerializer from './serializers/worker'; + +// mirage scenarios (alphabetical) +import defaultScenario from './scenarios/default'; +import ipcScenario from './scenarios/ipc'; + +// mirage factories (alphabetical) +import accountFactory from './factories/account'; +import aliasFactory from './factories/alias'; +import authMethodFactory from './factories/auth-method'; +import channelRecordingFactory from './factories/channel-recording'; +import connectionRecordingFactory from './factories/connection-recording'; +import credentialLibraryFactory from './factories/credential-library'; +import credentialStoreFactory from './factories/credential-store'; +import credentialFactory from './factories/credential'; +import groupFactory from './factories/group'; +import hostCatalogFactory from './factories/host-catalog'; +import hostSetFactory from './factories/host-set'; +import hostFactory from './factories/host'; +import managedGroupFactory from './factories/managed-group'; +import policyFactory from './factories/policy'; +import roleFactory from './factories/role'; +import scopeFactory from './factories/scope'; +import sessionRecordingFactory from './factories/session-recording'; +import storageBucketFactory from './factories/storage-bucket'; +import sessionFactory from './factories/session'; +import targetFactory from './factories/target'; +import userFactory from './factories/user'; +import workerFactory from './factories/worker'; + +const environmentConfig = {}; +const isTesting = false; // environmentConfig.environment === 'test'; // Main function -// More info about server configuration https://www.ember-cli-mirage.com/docs/advanced/server-configuration +// More info about server configuration: +// https://github.com/miragejs/miragejs/blob/7ff4f3f6fe56bf0cb1648f5af3f5210fcb07e20b/types/index.d.ts#L375-L404 export default function (mirageConfig) { let finalConfig = { ...mirageConfig, + + scenarios: { + default: defaultScenario, + ipcScenario: ipcScenario, + }, + + factories: { + account: accountFactory, + alias: aliasFactory, + authMethod: authMethodFactory, + channelRecording: channelRecordingFactory, + connectionRecording: connectionRecordingFactory, + credentialLibrary: credentialLibraryFactory, + credentialStore: credentialStoreFactory, + credential: credentialFactory, + group: groupFactory, + hostCatalog: hostCatalogFactory, + hostSet: hostSetFactory, + host: hostFactory, + managedGroup: managedGroupFactory, + policy: policyFactory, + role: roleFactory, + scope: scopeFactory, + sessionRecording: sessionRecordingFactory, + session: sessionFactory, + storageBucket: storageBucketFactory, + target: targetFactory, + user: userFactory, + worker: workerFactory, + }, + models: { - ...discoverEmberDataModels(mirageConfig.store), - ...mirageConfig.models, + account: accountModel, + alias: aliasModel, + authMethod: authMethodModel, + base: baseModel, + channelRecording: channelRecordingModel, + connectionRecording: connectionRecordingModel, + credentialLibrary: credentialLibraryModel, + credentialStore: credentialStoreModel, + credential: credentialModel, + group: groupModel, + hostCatalog: hostCatalogModel, + hostSet: hostSetModel, + host: hostModel, + managedGroup: managedGroupModel, + policy: policyModel, + role: roleModel, + scope: scopeModel, + sessionRecording: sessionRecordingModel, + session: sessionModel, + storageBucket: storageBucketModel, + target: targetModel, + user: userModel, + worker: workerModel, + }, + + serializers: { + account: accountSerializer, + alias: aliasSerializer, + application: applicationSerializer, + authMethod: authMethodSerializer, + channelRecording: channelRecordingSerializer, + connectionRecording: connectionRecordingSerializer, + credentialLibrary: credentialLibrarySerializer, + credentialStore: credentialStoreSerializer, + credential: credentialSerializer, + group: groupSerializer, + hostCatalog: hostCatalogSerializer, + hostSet: hostSetSerializer, + host: hostSerializer, + managedGroup: managedGroupSerializer, + policy: policySerializer, + role: roleSerializer, + scope: scopeSerializer, + sessionRecording: sessionRecordingSerializer, + session: sessionSerializer, + storageBucket: storageBucketSerializer, + target: targetSerializer, + user: userSerializer, + worker: workerSerializer, }, - serializers: applyEmberDataSerializers(mirageConfig.serializers), + routes, }; return createServer(finalConfig); @@ -57,8 +210,9 @@ function routes() { return metadata; }); + debugger; // make this `/api`, for example, if your API is namespaced - this.namespace = environmentConfig.api.namespace; + this.namespace = '/v1'; // delay for each request, automatically set to 0 during testing this.timing = 1; diff --git a/addons/api/mirage/data/asciicasts.js b/addons/api/addon/mirage/data/asciicasts.js similarity index 100% rename from addons/api/mirage/data/asciicasts.js rename to addons/api/addon/mirage/data/asciicasts.js diff --git a/addons/api/mirage/factories/account.js b/addons/api/addon/mirage/factories/account.js similarity index 100% rename from addons/api/mirage/factories/account.js rename to addons/api/addon/mirage/factories/account.js diff --git a/addons/api/mirage/factories/alias.js b/addons/api/addon/mirage/factories/alias.js similarity index 100% rename from addons/api/mirage/factories/alias.js rename to addons/api/addon/mirage/factories/alias.js diff --git a/addons/api/mirage/factories/auth-method.js b/addons/api/addon/mirage/factories/auth-method.js similarity index 100% rename from addons/api/mirage/factories/auth-method.js rename to addons/api/addon/mirage/factories/auth-method.js diff --git a/addons/api/mirage/factories/channel-recording.js b/addons/api/addon/mirage/factories/channel-recording.js similarity index 100% rename from addons/api/mirage/factories/channel-recording.js rename to addons/api/addon/mirage/factories/channel-recording.js diff --git a/addons/api/mirage/factories/connection-recording.js b/addons/api/addon/mirage/factories/connection-recording.js similarity index 100% rename from addons/api/mirage/factories/connection-recording.js rename to addons/api/addon/mirage/factories/connection-recording.js diff --git a/addons/api/mirage/factories/credential-library.js b/addons/api/addon/mirage/factories/credential-library.js similarity index 100% rename from addons/api/mirage/factories/credential-library.js rename to addons/api/addon/mirage/factories/credential-library.js diff --git a/addons/api/mirage/factories/credential-store.js b/addons/api/addon/mirage/factories/credential-store.js similarity index 100% rename from addons/api/mirage/factories/credential-store.js rename to addons/api/addon/mirage/factories/credential-store.js diff --git a/addons/api/mirage/factories/credential.js b/addons/api/addon/mirage/factories/credential.js similarity index 100% rename from addons/api/mirage/factories/credential.js rename to addons/api/addon/mirage/factories/credential.js diff --git a/addons/api/mirage/factories/group.js b/addons/api/addon/mirage/factories/group.js similarity index 100% rename from addons/api/mirage/factories/group.js rename to addons/api/addon/mirage/factories/group.js diff --git a/addons/api/mirage/factories/host-catalog.js b/addons/api/addon/mirage/factories/host-catalog.js similarity index 100% rename from addons/api/mirage/factories/host-catalog.js rename to addons/api/addon/mirage/factories/host-catalog.js diff --git a/addons/api/mirage/factories/host-set.js b/addons/api/addon/mirage/factories/host-set.js similarity index 100% rename from addons/api/mirage/factories/host-set.js rename to addons/api/addon/mirage/factories/host-set.js diff --git a/addons/api/mirage/factories/host.js b/addons/api/addon/mirage/factories/host.js similarity index 100% rename from addons/api/mirage/factories/host.js rename to addons/api/addon/mirage/factories/host.js diff --git a/addons/api/mirage/factories/managed-group.js b/addons/api/addon/mirage/factories/managed-group.js similarity index 100% rename from addons/api/mirage/factories/managed-group.js rename to addons/api/addon/mirage/factories/managed-group.js diff --git a/addons/api/mirage/factories/policy.js b/addons/api/addon/mirage/factories/policy.js similarity index 100% rename from addons/api/mirage/factories/policy.js rename to addons/api/addon/mirage/factories/policy.js diff --git a/addons/api/mirage/factories/role.js b/addons/api/addon/mirage/factories/role.js similarity index 100% rename from addons/api/mirage/factories/role.js rename to addons/api/addon/mirage/factories/role.js diff --git a/addons/api/mirage/factories/scope.js b/addons/api/addon/mirage/factories/scope.js similarity index 100% rename from addons/api/mirage/factories/scope.js rename to addons/api/addon/mirage/factories/scope.js diff --git a/addons/api/mirage/factories/session-recording.js b/addons/api/addon/mirage/factories/session-recording.js similarity index 100% rename from addons/api/mirage/factories/session-recording.js rename to addons/api/addon/mirage/factories/session-recording.js diff --git a/addons/api/mirage/factories/session.js b/addons/api/addon/mirage/factories/session.js similarity index 100% rename from addons/api/mirage/factories/session.js rename to addons/api/addon/mirage/factories/session.js diff --git a/addons/api/mirage/factories/storage-bucket.js b/addons/api/addon/mirage/factories/storage-bucket.js similarity index 100% rename from addons/api/mirage/factories/storage-bucket.js rename to addons/api/addon/mirage/factories/storage-bucket.js diff --git a/addons/api/mirage/factories/target.js b/addons/api/addon/mirage/factories/target.js similarity index 100% rename from addons/api/mirage/factories/target.js rename to addons/api/addon/mirage/factories/target.js diff --git a/addons/api/mirage/factories/user.js b/addons/api/addon/mirage/factories/user.js similarity index 100% rename from addons/api/mirage/factories/user.js rename to addons/api/addon/mirage/factories/user.js diff --git a/addons/api/mirage/factories/worker.js b/addons/api/addon/mirage/factories/worker.js similarity index 100% rename from addons/api/mirage/factories/worker.js rename to addons/api/addon/mirage/factories/worker.js diff --git a/addons/api/mirage/generated/factories/account.js b/addons/api/addon/mirage/generated/factories/account.js similarity index 100% rename from addons/api/mirage/generated/factories/account.js rename to addons/api/addon/mirage/generated/factories/account.js diff --git a/addons/api/mirage/generated/factories/alias.js b/addons/api/addon/mirage/generated/factories/alias.js similarity index 100% rename from addons/api/mirage/generated/factories/alias.js rename to addons/api/addon/mirage/generated/factories/alias.js diff --git a/addons/api/mirage/generated/factories/auth-method.js b/addons/api/addon/mirage/generated/factories/auth-method.js similarity index 100% rename from addons/api/mirage/generated/factories/auth-method.js rename to addons/api/addon/mirage/generated/factories/auth-method.js diff --git a/addons/api/mirage/generated/factories/channel-recording.js b/addons/api/addon/mirage/generated/factories/channel-recording.js similarity index 100% rename from addons/api/mirage/generated/factories/channel-recording.js rename to addons/api/addon/mirage/generated/factories/channel-recording.js diff --git a/addons/api/mirage/generated/factories/connection-recording.js b/addons/api/addon/mirage/generated/factories/connection-recording.js similarity index 100% rename from addons/api/mirage/generated/factories/connection-recording.js rename to addons/api/addon/mirage/generated/factories/connection-recording.js diff --git a/addons/api/mirage/generated/factories/credential-library.js b/addons/api/addon/mirage/generated/factories/credential-library.js similarity index 100% rename from addons/api/mirage/generated/factories/credential-library.js rename to addons/api/addon/mirage/generated/factories/credential-library.js diff --git a/addons/api/mirage/generated/factories/credential-store.js b/addons/api/addon/mirage/generated/factories/credential-store.js similarity index 100% rename from addons/api/mirage/generated/factories/credential-store.js rename to addons/api/addon/mirage/generated/factories/credential-store.js diff --git a/addons/api/mirage/generated/factories/credential.js b/addons/api/addon/mirage/generated/factories/credential.js similarity index 100% rename from addons/api/mirage/generated/factories/credential.js rename to addons/api/addon/mirage/generated/factories/credential.js diff --git a/addons/api/mirage/generated/factories/group.js b/addons/api/addon/mirage/generated/factories/group.js similarity index 100% rename from addons/api/mirage/generated/factories/group.js rename to addons/api/addon/mirage/generated/factories/group.js diff --git a/addons/api/mirage/generated/factories/host-catalog.js b/addons/api/addon/mirage/generated/factories/host-catalog.js similarity index 100% rename from addons/api/mirage/generated/factories/host-catalog.js rename to addons/api/addon/mirage/generated/factories/host-catalog.js diff --git a/addons/api/mirage/generated/factories/host-set.js b/addons/api/addon/mirage/generated/factories/host-set.js similarity index 100% rename from addons/api/mirage/generated/factories/host-set.js rename to addons/api/addon/mirage/generated/factories/host-set.js diff --git a/addons/api/mirage/generated/factories/host.js b/addons/api/addon/mirage/generated/factories/host.js similarity index 100% rename from addons/api/mirage/generated/factories/host.js rename to addons/api/addon/mirage/generated/factories/host.js diff --git a/addons/api/mirage/generated/factories/managed-group.js b/addons/api/addon/mirage/generated/factories/managed-group.js similarity index 100% rename from addons/api/mirage/generated/factories/managed-group.js rename to addons/api/addon/mirage/generated/factories/managed-group.js diff --git a/addons/api/mirage/generated/factories/org.js b/addons/api/addon/mirage/generated/factories/org.js similarity index 100% rename from addons/api/mirage/generated/factories/org.js rename to addons/api/addon/mirage/generated/factories/org.js diff --git a/addons/api/mirage/generated/factories/policy.js b/addons/api/addon/mirage/generated/factories/policy.js similarity index 100% rename from addons/api/mirage/generated/factories/policy.js rename to addons/api/addon/mirage/generated/factories/policy.js diff --git a/addons/api/mirage/generated/factories/project.js b/addons/api/addon/mirage/generated/factories/project.js similarity index 100% rename from addons/api/mirage/generated/factories/project.js rename to addons/api/addon/mirage/generated/factories/project.js diff --git a/addons/api/mirage/generated/factories/role.js b/addons/api/addon/mirage/generated/factories/role.js similarity index 100% rename from addons/api/mirage/generated/factories/role.js rename to addons/api/addon/mirage/generated/factories/role.js diff --git a/addons/api/mirage/generated/factories/scope.js b/addons/api/addon/mirage/generated/factories/scope.js similarity index 100% rename from addons/api/mirage/generated/factories/scope.js rename to addons/api/addon/mirage/generated/factories/scope.js diff --git a/addons/api/mirage/generated/factories/session-recording.js b/addons/api/addon/mirage/generated/factories/session-recording.js similarity index 100% rename from addons/api/mirage/generated/factories/session-recording.js rename to addons/api/addon/mirage/generated/factories/session-recording.js diff --git a/addons/api/mirage/generated/factories/session.js b/addons/api/addon/mirage/generated/factories/session.js similarity index 100% rename from addons/api/mirage/generated/factories/session.js rename to addons/api/addon/mirage/generated/factories/session.js diff --git a/addons/api/mirage/generated/factories/storage-bucket.js b/addons/api/addon/mirage/generated/factories/storage-bucket.js similarity index 100% rename from addons/api/mirage/generated/factories/storage-bucket.js rename to addons/api/addon/mirage/generated/factories/storage-bucket.js diff --git a/addons/api/mirage/generated/factories/target.js b/addons/api/addon/mirage/generated/factories/target.js similarity index 100% rename from addons/api/mirage/generated/factories/target.js rename to addons/api/addon/mirage/generated/factories/target.js diff --git a/addons/api/mirage/generated/factories/user.js b/addons/api/addon/mirage/generated/factories/user.js similarity index 100% rename from addons/api/mirage/generated/factories/user.js rename to addons/api/addon/mirage/generated/factories/user.js diff --git a/addons/api/mirage/generated/factories/worker.js b/addons/api/addon/mirage/generated/factories/worker.js similarity index 100% rename from addons/api/mirage/generated/factories/worker.js rename to addons/api/addon/mirage/generated/factories/worker.js diff --git a/addons/api/mirage/helpers/bexpr-filter.js b/addons/api/addon/mirage/helpers/bexpr-filter.js similarity index 100% rename from addons/api/mirage/helpers/bexpr-filter.js rename to addons/api/addon/mirage/helpers/bexpr-filter.js diff --git a/addons/api/mirage/helpers/id.js b/addons/api/addon/mirage/helpers/id.js similarity index 100% rename from addons/api/mirage/helpers/id.js rename to addons/api/addon/mirage/helpers/id.js diff --git a/addons/api/mirage/helpers/permissions.js b/addons/api/addon/mirage/helpers/permissions.js similarity index 100% rename from addons/api/mirage/helpers/permissions.js rename to addons/api/addon/mirage/helpers/permissions.js diff --git a/addons/api/mirage/models/account.js b/addons/api/addon/mirage/models/account.js similarity index 100% rename from addons/api/mirage/models/account.js rename to addons/api/addon/mirage/models/account.js diff --git a/addons/api/mirage/models/alias.js b/addons/api/addon/mirage/models/alias.js similarity index 100% rename from addons/api/mirage/models/alias.js rename to addons/api/addon/mirage/models/alias.js diff --git a/addons/api/mirage/models/auth-method.js b/addons/api/addon/mirage/models/auth-method.js similarity index 100% rename from addons/api/mirage/models/auth-method.js rename to addons/api/addon/mirage/models/auth-method.js diff --git a/addons/api/mirage/models/base.js b/addons/api/addon/mirage/models/base.js similarity index 100% rename from addons/api/mirage/models/base.js rename to addons/api/addon/mirage/models/base.js diff --git a/addons/api/mirage/models/channel-recording.js b/addons/api/addon/mirage/models/channel-recording.js similarity index 100% rename from addons/api/mirage/models/channel-recording.js rename to addons/api/addon/mirage/models/channel-recording.js diff --git a/addons/api/mirage/models/connection-recording.js b/addons/api/addon/mirage/models/connection-recording.js similarity index 100% rename from addons/api/mirage/models/connection-recording.js rename to addons/api/addon/mirage/models/connection-recording.js diff --git a/addons/api/mirage/models/credential-library.js b/addons/api/addon/mirage/models/credential-library.js similarity index 100% rename from addons/api/mirage/models/credential-library.js rename to addons/api/addon/mirage/models/credential-library.js diff --git a/addons/api/mirage/models/credential-store.js b/addons/api/addon/mirage/models/credential-store.js similarity index 100% rename from addons/api/mirage/models/credential-store.js rename to addons/api/addon/mirage/models/credential-store.js diff --git a/addons/api/mirage/models/credential.js b/addons/api/addon/mirage/models/credential.js similarity index 100% rename from addons/api/mirage/models/credential.js rename to addons/api/addon/mirage/models/credential.js diff --git a/addons/api/mirage/models/group.js b/addons/api/addon/mirage/models/group.js similarity index 100% rename from addons/api/mirage/models/group.js rename to addons/api/addon/mirage/models/group.js diff --git a/addons/api/mirage/models/host-catalog.js b/addons/api/addon/mirage/models/host-catalog.js similarity index 100% rename from addons/api/mirage/models/host-catalog.js rename to addons/api/addon/mirage/models/host-catalog.js diff --git a/addons/api/mirage/models/host-set.js b/addons/api/addon/mirage/models/host-set.js similarity index 100% rename from addons/api/mirage/models/host-set.js rename to addons/api/addon/mirage/models/host-set.js diff --git a/addons/api/mirage/models/host.js b/addons/api/addon/mirage/models/host.js similarity index 100% rename from addons/api/mirage/models/host.js rename to addons/api/addon/mirage/models/host.js diff --git a/addons/api/mirage/models/managed-group.js b/addons/api/addon/mirage/models/managed-group.js similarity index 100% rename from addons/api/mirage/models/managed-group.js rename to addons/api/addon/mirage/models/managed-group.js diff --git a/addons/api/mirage/models/policy.js b/addons/api/addon/mirage/models/policy.js similarity index 100% rename from addons/api/mirage/models/policy.js rename to addons/api/addon/mirage/models/policy.js diff --git a/addons/api/mirage/models/role.js b/addons/api/addon/mirage/models/role.js similarity index 100% rename from addons/api/mirage/models/role.js rename to addons/api/addon/mirage/models/role.js diff --git a/addons/api/mirage/models/scope.js b/addons/api/addon/mirage/models/scope.js similarity index 100% rename from addons/api/mirage/models/scope.js rename to addons/api/addon/mirage/models/scope.js diff --git a/addons/api/mirage/models/session-recording.js b/addons/api/addon/mirage/models/session-recording.js similarity index 100% rename from addons/api/mirage/models/session-recording.js rename to addons/api/addon/mirage/models/session-recording.js diff --git a/addons/api/mirage/models/session.js b/addons/api/addon/mirage/models/session.js similarity index 100% rename from addons/api/mirage/models/session.js rename to addons/api/addon/mirage/models/session.js diff --git a/addons/api/mirage/models/storage-bucket.js b/addons/api/addon/mirage/models/storage-bucket.js similarity index 100% rename from addons/api/mirage/models/storage-bucket.js rename to addons/api/addon/mirage/models/storage-bucket.js diff --git a/addons/api/mirage/models/target.js b/addons/api/addon/mirage/models/target.js similarity index 100% rename from addons/api/mirage/models/target.js rename to addons/api/addon/mirage/models/target.js diff --git a/addons/api/mirage/models/user.js b/addons/api/addon/mirage/models/user.js similarity index 100% rename from addons/api/mirage/models/user.js rename to addons/api/addon/mirage/models/user.js diff --git a/addons/api/mirage/models/worker.js b/addons/api/addon/mirage/models/worker.js similarity index 100% rename from addons/api/mirage/models/worker.js rename to addons/api/addon/mirage/models/worker.js diff --git a/addons/api/mirage/route-handlers/auth.js b/addons/api/addon/mirage/route-handlers/auth.js similarity index 100% rename from addons/api/mirage/route-handlers/auth.js rename to addons/api/addon/mirage/route-handlers/auth.js diff --git a/addons/api/mirage/route-handlers/target.js b/addons/api/addon/mirage/route-handlers/target.js similarity index 100% rename from addons/api/mirage/route-handlers/target.js rename to addons/api/addon/mirage/route-handlers/target.js diff --git a/addons/api/mirage/scenarios/default.js b/addons/api/addon/mirage/scenarios/default.js similarity index 100% rename from addons/api/mirage/scenarios/default.js rename to addons/api/addon/mirage/scenarios/default.js diff --git a/addons/api/mirage/scenarios/ipc.js b/addons/api/addon/mirage/scenarios/ipc.js similarity index 98% rename from addons/api/mirage/scenarios/ipc.js rename to addons/api/addon/mirage/scenarios/ipc.js index 0339764c85..423a88e732 100644 --- a/addons/api/mirage/scenarios/ipc.js +++ b/addons/api/addon/mirage/scenarios/ipc.js @@ -22,6 +22,14 @@ export default function initializeMockIPC(server, config) { clusterUrl = null; + checkOS() { + return { + isLinux: false, + isMac: true, + isWindows: false, + }; + } + getClusterUrl() { return this.clusterUrl; } @@ -273,7 +281,7 @@ export default function initializeMockIPC(server, config) { * We mock certain functions even in electron (e.g. hasMacOSChrome) when running * locally which will force a certain appearance regardless of platform */ - if (config['ember-cli-mirage'].enabled && !isTesting) { + if (config.mirage?.enabled && !isTesting) { const mockIPC = new MockIPC(); window.addEventListener('message', async function (event) { diff --git a/addons/api/mirage/serializers/account.js b/addons/api/addon/mirage/serializers/account.js similarity index 100% rename from addons/api/mirage/serializers/account.js rename to addons/api/addon/mirage/serializers/account.js diff --git a/addons/api/mirage/serializers/alias.js b/addons/api/addon/mirage/serializers/alias.js similarity index 100% rename from addons/api/mirage/serializers/alias.js rename to addons/api/addon/mirage/serializers/alias.js diff --git a/addons/api/mirage/serializers/application.js b/addons/api/addon/mirage/serializers/application.js similarity index 100% rename from addons/api/mirage/serializers/application.js rename to addons/api/addon/mirage/serializers/application.js diff --git a/addons/api/mirage/serializers/auth-method.js b/addons/api/addon/mirage/serializers/auth-method.js similarity index 100% rename from addons/api/mirage/serializers/auth-method.js rename to addons/api/addon/mirage/serializers/auth-method.js diff --git a/addons/api/mirage/serializers/channel-recording.js b/addons/api/addon/mirage/serializers/channel-recording.js similarity index 100% rename from addons/api/mirage/serializers/channel-recording.js rename to addons/api/addon/mirage/serializers/channel-recording.js diff --git a/addons/api/mirage/serializers/connection-recording.js b/addons/api/addon/mirage/serializers/connection-recording.js similarity index 100% rename from addons/api/mirage/serializers/connection-recording.js rename to addons/api/addon/mirage/serializers/connection-recording.js diff --git a/addons/api/mirage/serializers/credential-library.js b/addons/api/addon/mirage/serializers/credential-library.js similarity index 100% rename from addons/api/mirage/serializers/credential-library.js rename to addons/api/addon/mirage/serializers/credential-library.js diff --git a/addons/api/mirage/serializers/credential-store.js b/addons/api/addon/mirage/serializers/credential-store.js similarity index 100% rename from addons/api/mirage/serializers/credential-store.js rename to addons/api/addon/mirage/serializers/credential-store.js diff --git a/addons/api/mirage/serializers/credential.js b/addons/api/addon/mirage/serializers/credential.js similarity index 100% rename from addons/api/mirage/serializers/credential.js rename to addons/api/addon/mirage/serializers/credential.js diff --git a/addons/api/mirage/serializers/group.js b/addons/api/addon/mirage/serializers/group.js similarity index 100% rename from addons/api/mirage/serializers/group.js rename to addons/api/addon/mirage/serializers/group.js diff --git a/addons/api/mirage/serializers/host-catalog.js b/addons/api/addon/mirage/serializers/host-catalog.js similarity index 100% rename from addons/api/mirage/serializers/host-catalog.js rename to addons/api/addon/mirage/serializers/host-catalog.js diff --git a/addons/api/mirage/serializers/host-set.js b/addons/api/addon/mirage/serializers/host-set.js similarity index 100% rename from addons/api/mirage/serializers/host-set.js rename to addons/api/addon/mirage/serializers/host-set.js diff --git a/addons/api/mirage/serializers/host.js b/addons/api/addon/mirage/serializers/host.js similarity index 100% rename from addons/api/mirage/serializers/host.js rename to addons/api/addon/mirage/serializers/host.js diff --git a/addons/api/mirage/serializers/managed-group.js b/addons/api/addon/mirage/serializers/managed-group.js similarity index 100% rename from addons/api/mirage/serializers/managed-group.js rename to addons/api/addon/mirage/serializers/managed-group.js diff --git a/addons/api/mirage/serializers/policy.js b/addons/api/addon/mirage/serializers/policy.js similarity index 100% rename from addons/api/mirage/serializers/policy.js rename to addons/api/addon/mirage/serializers/policy.js diff --git a/addons/api/mirage/serializers/role.js b/addons/api/addon/mirage/serializers/role.js similarity index 100% rename from addons/api/mirage/serializers/role.js rename to addons/api/addon/mirage/serializers/role.js diff --git a/addons/api/mirage/serializers/scope.js b/addons/api/addon/mirage/serializers/scope.js similarity index 100% rename from addons/api/mirage/serializers/scope.js rename to addons/api/addon/mirage/serializers/scope.js diff --git a/addons/api/mirage/serializers/session-recording.js b/addons/api/addon/mirage/serializers/session-recording.js similarity index 100% rename from addons/api/mirage/serializers/session-recording.js rename to addons/api/addon/mirage/serializers/session-recording.js diff --git a/addons/api/mirage/serializers/session.js b/addons/api/addon/mirage/serializers/session.js similarity index 100% rename from addons/api/mirage/serializers/session.js rename to addons/api/addon/mirage/serializers/session.js diff --git a/addons/api/mirage/serializers/storage-bucket.js b/addons/api/addon/mirage/serializers/storage-bucket.js similarity index 100% rename from addons/api/mirage/serializers/storage-bucket.js rename to addons/api/addon/mirage/serializers/storage-bucket.js diff --git a/addons/api/mirage/serializers/target.js b/addons/api/addon/mirage/serializers/target.js similarity index 100% rename from addons/api/mirage/serializers/target.js rename to addons/api/addon/mirage/serializers/target.js diff --git a/addons/api/mirage/serializers/user.js b/addons/api/addon/mirage/serializers/user.js similarity index 100% rename from addons/api/mirage/serializers/user.js rename to addons/api/addon/mirage/serializers/user.js diff --git a/addons/api/mirage/serializers/worker.js b/addons/api/addon/mirage/serializers/worker.js similarity index 100% rename from addons/api/mirage/serializers/worker.js rename to addons/api/addon/mirage/serializers/worker.js diff --git a/addons/api/index.js b/addons/api/index.js index 9b305a68d5..677b633bf9 100644 --- a/addons/api/index.js +++ b/addons/api/index.js @@ -24,12 +24,36 @@ module.exports = { }, }, + included() { + this._super.included.apply(this, arguments); + const includeMirage = this._includeMirageInBuild(); + + // these are dependencies used our mirage code within the + // api addon and should not be included in production builds, + // after this addon has been migrated to a v2 addon this can + // be removed as the addon's dependencies will be statically + // analyzable + if (!includeMirage) { + // exclude mirage and dependencies from this addon that are used by mirage + this.options.autoImport.exclude.push( + 'miragejs', + 'sinon', + '@faker-js/faker', + 'js-bexpr', + ); + } + }, + treeForAddon() { + const includeMirage = this._includeMirageInBuild(); + // Exclude anything in the workers folder from being bundled in the final // build as we're manually bundling the files ourselves below. const tree = this._super.treeForAddon.apply(this, arguments); return funnel(tree, { - exclude: ['api/workers/**/*'], + exclude: ['api/workers/**/*', !includeMirage && 'api/mirage/**/*'].filter( + Boolean, + ), }); }, @@ -70,4 +94,10 @@ module.exports = { return merge(trees); }, + + _includeMirageInBuild() { + const env = this.parent.app?.env ?? 'production'; + const config = this.project.config(env); + return Boolean(config.mirage?.enabled); + }, }; diff --git a/addons/api/package.json b/addons/api/package.json index 76dcb6904e..7ebe9d1b37 100644 --- a/addons/api/package.json +++ b/addons/api/package.json @@ -33,13 +33,13 @@ "broccoli-plugin": "^4.0.7", "broccoli-source": "^3.0.1", "ember-auto-import": "^2.10.0", - "ember-can": "^4.2.0", + "ember-can": "^8.0.0", "ember-cli-babel": "^8.2.0", "ember-cli-htmlbars": "^6.3.0", - "ember-cli-mirage": "^3.0.3", "ember-data": "~5.3.12", + "ember-inflector": "^6.0.0", "esbuild": "^0.25.4", - "miragejs": "^0.1.48", + "js-bexpr": "hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1", "promise-worker-bi": "^5.0.1", "tracked-built-ins": "^4.0.0", "uuid": "^11.0.3" @@ -51,7 +51,6 @@ "@ember/test-helpers": "^5.2.1", "@ember/test-waiters": "^4.1.0", "@embroider/test-setup": "^4.0.0", - "@faker-js/faker": "^8.0.2", "@glimmer/component": "^2.0.0", "@glimmer/tracking": "^1.1.2", "broccoli-asset-rev": "^3.0.0", @@ -67,7 +66,7 @@ "ember-load-initializers": "^2.1.2", "ember-page-title": "^8.2.3", "ember-qunit": "^8.1.0", - "ember-resolver": "^12.0.1", + "ember-resolver": "^13.1.1", "ember-source": "~5.12.0", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^6.0.0", @@ -77,16 +76,16 @@ "eslint-plugin-ember": "^12.2.1", "eslint-plugin-n": "^16.6.2", "eslint-plugin-qunit": "^8.1.2", - "js-bexpr": "hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1", "loader.js": "^4.7.0", "prettier": "^3.3.3", "qunit": "^2.22.0", "qunit-dom": "^3.2.1", - "sinon": "^19.0.2", "webpack": "^5.95.0" }, "peerDependencies": { + "@faker-js/faker": "^8.0.2", "ember-source": ">= 4.0.0", + "miragejs": "^0.1.48", "sinon": "^19.0.2" }, "engines": { diff --git a/addons/api/tests/dummy/config/environment.js b/addons/api/tests/dummy/config/environment.js index 565340d1e8..d4d3a031fa 100644 --- a/addons/api/tests/dummy/config/environment.js +++ b/addons/api/tests/dummy/config/environment.js @@ -29,8 +29,8 @@ module.exports = function (environment) { namespace: 'v1', }, - 'ember-cli-mirage': { - directory: './mirage', + mirage: { + enabled: true }, }; diff --git a/addons/api/tests/helpers/index.js b/addons/api/tests/helpers/index.js index b4c7ee08da..45e41214e9 100644 --- a/addons/api/tests/helpers/index.js +++ b/addons/api/tests/helpers/index.js @@ -29,7 +29,6 @@ function setupApplicationTest(hooks, options) { // from other addons: // // setupIntl(hooks, 'en-us'); // ember-intl - // setupMirage(hooks); // ember-cli-mirage } function setupRenderingTest(hooks, options) { diff --git a/addons/api/tests/unit/abilities/account-test.js b/addons/api/tests/unit/abilities/account-test.js index 812e33a6af..a817dfad13 100644 --- a/addons/api/tests/unit/abilities/account-test.js +++ b/addons/api/tests/unit/abilities/account-test.js @@ -14,11 +14,11 @@ import { module('Unit | Abilities | Account', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); }); @@ -26,9 +26,9 @@ module('Unit | Abilities | Account', function (hooks) { const account = store.createRecord('auth-method', { authorized_actions: ['set-password'], }); - assert.true(canService.can('setPassword account', account)); + assert.true(abilitiesService.can('setPassword account', account)); account.authorized_actions = []; - assert.false(canService.can('setPassword account', account)); + assert.false(abilitiesService.can('setPassword account', account)); }); test('can read known account types when authorized', function (assert) { @@ -36,13 +36,13 @@ module('Unit | Abilities | Account', function (hooks) { authorized_actions: ['read'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('read account', account)); + assert.true(abilitiesService.can('read account', account)); account.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('read account', account)); + assert.true(abilitiesService.can('read account', account)); account.type = TYPE_AUTH_METHOD_LDAP; - assert.true(canService.can('read account', account)); + assert.true(abilitiesService.can('read account', account)); account.type = 'no-such-type'; - assert.false(canService.can('read account', account)); + assert.false(abilitiesService.can('read account', account)); }); test('cannot read accounts when unauthorized', function (assert) { @@ -50,13 +50,13 @@ module('Unit | Abilities | Account', function (hooks) { authorized_actions: [], type: TYPE_AUTH_METHOD_OIDC, }); - assert.false(canService.can('read account', account)); + assert.false(abilitiesService.can('read account', account)); account.type = TYPE_AUTH_METHOD_PASSWORD; - assert.false(canService.can('read account', account)); + assert.false(abilitiesService.can('read account', account)); account.type = TYPE_AUTH_METHOD_LDAP; - assert.false(canService.can('read account', account)); + assert.false(abilitiesService.can('read account', account)); account.type = 'no-such-type'; - assert.false(canService.can('read account', account)); + assert.false(abilitiesService.can('read account', account)); }); test('can delete known account types when authorized', function (assert) { @@ -64,13 +64,13 @@ module('Unit | Abilities | Account', function (hooks) { authorized_actions: ['delete'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('delete account', account)); + assert.true(abilitiesService.can('delete account', account)); account.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('delete account', account)); + assert.true(abilitiesService.can('delete account', account)); account.type = TYPE_AUTH_METHOD_LDAP; - assert.true(canService.can('delete account', account)); + assert.true(abilitiesService.can('delete account', account)); account.type = 'no-such-type'; - assert.false(canService.can('delete account', account)); + assert.false(abilitiesService.can('delete account', account)); }); test('cannot delete accounts when unauthorized', function (assert) { @@ -78,13 +78,13 @@ module('Unit | Abilities | Account', function (hooks) { authorized_actions: ['delete'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('delete account', account)); + assert.true(abilitiesService.can('delete account', account)); account.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('delete account', account)); + assert.true(abilitiesService.can('delete account', account)); account.type = TYPE_AUTH_METHOD_LDAP; - assert.true(canService.can('delete account', account)); + assert.true(abilitiesService.can('delete account', account)); account.type = 'no-such-type'; - assert.false(canService.can('delete account', account)); + assert.false(abilitiesService.can('delete account', account)); }); test('can update known account types when authorized', function (assert) { @@ -92,13 +92,13 @@ module('Unit | Abilities | Account', function (hooks) { authorized_actions: ['update'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('update account', account)); + assert.true(abilitiesService.can('update account', account)); account.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('update account', account)); + assert.true(abilitiesService.can('update account', account)); account.type = TYPE_AUTH_METHOD_LDAP; - assert.true(canService.can('update account', account)); + assert.true(abilitiesService.can('update account', account)); account.type = 'no-such-type'; - assert.false(canService.can('update account', account)); + assert.false(abilitiesService.can('update account', account)); }); test('cannot update accounts when unauthorized', function (assert) { @@ -106,12 +106,12 @@ module('Unit | Abilities | Account', function (hooks) { authorized_actions: [], type: TYPE_AUTH_METHOD_OIDC, }); - assert.false(canService.can('update account', account)); + assert.false(abilitiesService.can('update account', account)); account.type = TYPE_AUTH_METHOD_PASSWORD; - assert.false(canService.can('update account', account)); + assert.false(abilitiesService.can('update account', account)); account.type = TYPE_AUTH_METHOD_LDAP; - assert.false(canService.can('update account', account)); + assert.false(abilitiesService.can('update account', account)); account.type = 'no-such-type'; - assert.false(canService.can('update account', account)); + assert.false(abilitiesService.can('update account', account)); }); }); diff --git a/addons/api/tests/unit/abilities/auth-method-test.js b/addons/api/tests/unit/abilities/auth-method-test.js index 5d820e83b7..cad21a4503 100644 --- a/addons/api/tests/unit/abilities/auth-method-test.js +++ b/addons/api/tests/unit/abilities/auth-method-test.js @@ -14,11 +14,11 @@ import { module('Unit | Abilities | Auth Method', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); }); @@ -27,13 +27,13 @@ module('Unit | Abilities | Auth Method', function (hooks) { authorized_actions: ['read'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('read auth-method', authMethod)); + assert.true(abilitiesService.can('read auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('read auth-method', authMethod)); + assert.true(abilitiesService.can('read auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_LDAP; - assert.true(canService.can('read auth-method', authMethod)); + assert.true(abilitiesService.can('read auth-method', authMethod)); authMethod.type = 'no-such-type'; - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); }); test('cannot read auth methods when unauthorized', function (assert) { @@ -41,13 +41,13 @@ module('Unit | Abilities | Auth Method', function (hooks) { authorized_actions: [], type: TYPE_AUTH_METHOD_OIDC, }); - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_LDAP; - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); authMethod.type = 'no-such-type'; - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); }); test('can delete known auth method types when authorized', function (assert) { @@ -55,13 +55,13 @@ module('Unit | Abilities | Auth Method', function (hooks) { authorized_actions: ['delete'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('delete auth-method', authMethod)); + assert.true(abilitiesService.can('delete auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('delete auth-method', authMethod)); + assert.true(abilitiesService.can('delete auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_LDAP; - assert.true(canService.can('delete auth-method', authMethod)); + assert.true(abilitiesService.can('delete auth-method', authMethod)); authMethod.type = 'no-such-type'; - assert.false(canService.can('delete auth-method', authMethod)); + assert.false(abilitiesService.can('delete auth-method', authMethod)); }); test('cannot delete auth methods when unauthorized', function (assert) { @@ -69,13 +69,13 @@ module('Unit | Abilities | Auth Method', function (hooks) { authorized_actions: ['delete'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('delete auth-method', authMethod)); + assert.true(abilitiesService.can('delete auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('delete auth-method', authMethod)); + assert.true(abilitiesService.can('delete auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_LDAP; - assert.true(canService.can('delete auth-method', authMethod)); + assert.true(abilitiesService.can('delete auth-method', authMethod)); authMethod.type = 'no-such-type'; - assert.false(canService.can('delete auth-method', authMethod)); + assert.false(abilitiesService.can('delete auth-method', authMethod)); }); test('can update known auth method types when authorized', function (assert) { @@ -83,13 +83,13 @@ module('Unit | Abilities | Auth Method', function (hooks) { authorized_actions: ['update'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('update auth-method', authMethod)); + assert.true(abilitiesService.can('update auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('update auth-method', authMethod)); + assert.true(abilitiesService.can('update auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_LDAP; - assert.true(canService.can('update auth-method', authMethod)); + assert.true(abilitiesService.can('update auth-method', authMethod)); authMethod.type = 'no-such-type'; - assert.false(canService.can('update auth-method', authMethod)); + assert.false(abilitiesService.can('update auth-method', authMethod)); }); test('cannot update auth methods when unauthorized', function (assert) { @@ -97,12 +97,12 @@ module('Unit | Abilities | Auth Method', function (hooks) { authorized_actions: [], type: TYPE_AUTH_METHOD_OIDC, }); - assert.false(canService.can('update auth-method', authMethod)); + assert.false(abilitiesService.can('update auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.false(canService.can('update auth-method', authMethod)); + assert.false(abilitiesService.can('update auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_LDAP; - assert.false(canService.can('update auth-method', authMethod)); + assert.false(abilitiesService.can('update auth-method', authMethod)); authMethod.type = 'no-such-type'; - assert.false(canService.can('update auth-method', authMethod)); + assert.false(abilitiesService.can('update auth-method', authMethod)); }); }); diff --git a/addons/api/tests/unit/abilities/channel-recording-test.js b/addons/api/tests/unit/abilities/channel-recording-test.js index 13d58ce80d..decf665e45 100644 --- a/addons/api/tests/unit/abilities/channel-recording-test.js +++ b/addons/api/tests/unit/abilities/channel-recording-test.js @@ -11,11 +11,11 @@ import { TYPE_SESSION_RECORDING_SSH } from 'api/models/session-recording'; module('Unit | Ability | channel-recording', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); }); @@ -41,7 +41,10 @@ module('Unit | Ability | channel-recording', function (hooks) { }); assert.true( - canService.can('getAsciicast channel-recording', channelRecordingModel), + abilitiesService.can( + 'getAsciicast channel-recording', + channelRecordingModel, + ), ); }); @@ -62,7 +65,10 @@ module('Unit | Ability | channel-recording', function (hooks) { }); assert.false( - canService.can('getAsciicast channel-recording', channelRecordingModel), + abilitiesService.can( + 'getAsciicast channel-recording', + channelRecordingModel, + ), ); }); }); diff --git a/addons/api/tests/unit/abilities/group-test.js b/addons/api/tests/unit/abilities/group-test.js index 8913f86b24..3683255cbc 100644 --- a/addons/api/tests/unit/abilities/group-test.js +++ b/addons/api/tests/unit/abilities/group-test.js @@ -10,7 +10,7 @@ module('Unit | Abilities | Group', function (hooks) { setupTest(hooks); test('it reflects when a given group resource may add members based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['add-members'], }; @@ -20,7 +20,7 @@ module('Unit | Abilities | Group', function (hooks) { }); test('it reflects when a given group resource may remove members based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['remove-members'], }; diff --git a/addons/api/tests/unit/abilities/host-set-test.js b/addons/api/tests/unit/abilities/host-set-test.js index 108ba62797..bf2a51f4ff 100644 --- a/addons/api/tests/unit/abilities/host-set-test.js +++ b/addons/api/tests/unit/abilities/host-set-test.js @@ -10,7 +10,7 @@ module('Unit | Abilities | Host Set', function (hooks) { setupTest(hooks); test('it reflects when a given host set resource may add hosts based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['add-hosts'], }; @@ -20,7 +20,7 @@ module('Unit | Abilities | Host Set', function (hooks) { }); test('it reflects when a given hostSet resource may remove hosts based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['remove-hosts'], }; diff --git a/addons/api/tests/unit/abilities/model-test.js b/addons/api/tests/unit/abilities/model-test.js index 3930742317..79ff1a4c1a 100644 --- a/addons/api/tests/unit/abilities/model-test.js +++ b/addons/api/tests/unit/abilities/model-test.js @@ -10,7 +10,7 @@ module('Unit | Abilities | Model', function (hooks) { setupTest(hooks); test('it reflects when a given model may be read based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['read'], }; @@ -20,7 +20,7 @@ module('Unit | Abilities | Model', function (hooks) { }); test('it reflects when a given model may be updated based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['update'], }; @@ -30,7 +30,7 @@ module('Unit | Abilities | Model', function (hooks) { }); test('it reflects when a given model may be saved based on isNew and authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); let model = { isNew: false, authorized_actions: ['update'], @@ -58,7 +58,7 @@ module('Unit | Abilities | Model', function (hooks) { }); test('it reflects when a given model may be deleted based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['delete'], }; @@ -70,7 +70,7 @@ module('Unit | Abilities | Model', function (hooks) { // =collections test('it reflects when a resource may be listed based on authorized_collection_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_collection_actions: { foobars: ['list'], @@ -82,7 +82,7 @@ module('Unit | Abilities | Model', function (hooks) { }); test('it reflects when a resource may be created based on authorized_collection_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_collection_actions: { foobars: ['create'], diff --git a/addons/api/tests/unit/abilities/role-test.js b/addons/api/tests/unit/abilities/role-test.js index e601bcc1bc..a85df2afd0 100644 --- a/addons/api/tests/unit/abilities/role-test.js +++ b/addons/api/tests/unit/abilities/role-test.js @@ -10,7 +10,7 @@ module('Unit | Abilities | Role', function (hooks) { setupTest(hooks); test('it reflects when a given role may set grants based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['set-grants'], }; @@ -20,7 +20,7 @@ module('Unit | Abilities | Role', function (hooks) { }); test('it reflects when a given role may add principals based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['add-principals'], }; @@ -30,7 +30,7 @@ module('Unit | Abilities | Role', function (hooks) { }); test('it reflects when a given role may remove principals based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['remove-principals'], }; @@ -40,7 +40,7 @@ module('Unit | Abilities | Role', function (hooks) { }); test('it proxies role principal read ability to the appropriate ability type', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const user = { constructor: { modelName: 'user' }, authorized_actions: [], @@ -65,7 +65,7 @@ module('Unit | Abilities | Role', function (hooks) { }); test('it throws an error for unknown principal types on principal read check', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const account = { constructor: { modelName: 'account' }, authorized_actions: ['read'], @@ -77,7 +77,7 @@ module('Unit | Abilities | Role', function (hooks) { }); test('can set grant scopes based on authorized_actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_actions: ['set-grant-scopes'], }; diff --git a/addons/api/tests/unit/abilities/scope-test.js b/addons/api/tests/unit/abilities/scope-test.js index a9d48614b6..12d9c062f9 100644 --- a/addons/api/tests/unit/abilities/scope-test.js +++ b/addons/api/tests/unit/abilities/scope-test.js @@ -9,10 +9,10 @@ import { setupTest } from 'ember-qunit'; module('Unit | Abilities | Scope', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); }); test('it exists', function (assert) { const ability = this.owner.lookup('ability:scope'); @@ -23,9 +23,9 @@ module('Unit | Abilities | Scope', function (hooks) { const model = { authorized_actions: ['attach-storage-policy'], }; - assert.true(canService.can('attachStoragePolicy scope', model)); + assert.true(abilitiesService.can('attachStoragePolicy scope', model)); model.authorized_actions = []; - assert.false(canService.can('attachStoragePolicy scope', model)); + assert.false(abilitiesService.can('attachStoragePolicy scope', model)); }); test('it reflects when a given scope may remove a policy in org scope', function (assert) { @@ -33,8 +33,8 @@ module('Unit | Abilities | Scope', function (hooks) { authorized_actions: ['detach-storage-policy'], }; - assert.true(canService.can('detachStoragePolicy scope', model)); + assert.true(abilitiesService.can('detachStoragePolicy scope', model)); model.authorized_actions = []; - assert.false(canService.can('detachStoragePolicy scope', model)); + assert.false(abilitiesService.can('detachStoragePolicy scope', model)); }); }); diff --git a/addons/api/tests/unit/abilities/session-recording-test.js b/addons/api/tests/unit/abilities/session-recording-test.js index 816578ea84..e46500f5d7 100644 --- a/addons/api/tests/unit/abilities/session-recording-test.js +++ b/addons/api/tests/unit/abilities/session-recording-test.js @@ -14,11 +14,11 @@ import { module('Unit | Ability | session-recording', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); }); @@ -42,13 +42,13 @@ module('Unit | Ability | session-recording', function (hooks) { ); assert.true( - canService.can( + abilitiesService.can( 'download session-recording', recordingWithAuthorizedAction, ), ); assert.false( - canService.can( + abilitiesService.can( 'download session-recording', recordingWithoutAuthorizedAction, ), @@ -70,10 +70,16 @@ module('Unit | Ability | session-recording', function (hooks) { state: STATE_SESSION_RECORDING_AVAILABLE, }); assert.false( - canService.can('delete session-recording', recordingNotinAvaialableState), + abilitiesService.can( + 'delete session-recording', + recordingNotinAvaialableState, + ), ); assert.true( - canService.can('delete session-recording', recordingInAvailableState), + abilitiesService.can( + 'delete session-recording', + recordingInAvailableState, + ), ); }); @@ -83,7 +89,7 @@ module('Unit | Ability | session-recording', function (hooks) { }); assert.true( - canService.can('reapplyStoragePolicy session-recording', recording), + abilitiesService.can('reapplyStoragePolicy session-recording', recording), ); }); }); diff --git a/addons/api/tests/unit/abilities/session-test.js b/addons/api/tests/unit/abilities/session-test.js index d454c9d83e..a53c0ea629 100644 --- a/addons/api/tests/unit/abilities/session-test.js +++ b/addons/api/tests/unit/abilities/session-test.js @@ -15,11 +15,11 @@ import { module('Unit | Ability | session', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); }); @@ -34,7 +34,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_ACTIVE, }); - assert.true(canService.can('read session', session)); + assert.true(abilitiesService.can('read session', session)); }); test('can read a session that is pending', function (assert) { @@ -43,7 +43,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_PENDING, }); - assert.true(canService.can('read session', session)); + assert.true(abilitiesService.can('read session', session)); }); test('cannot read a session that is not authorized', function (assert) { @@ -64,10 +64,10 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_TERMINATED, }); - assert.false(canService.can('read session', activeSession)); - assert.false(canService.can('read session', pendingSession)); - assert.false(canService.can('read session', cancelingSession)); - assert.false(canService.can('read session', terminatedSession)); + assert.false(abilitiesService.can('read session', activeSession)); + assert.false(abilitiesService.can('read session', pendingSession)); + assert.false(abilitiesService.can('read session', cancelingSession)); + assert.false(abilitiesService.can('read session', terminatedSession)); }); test('cannot read a session that is canceling', function (assert) { @@ -76,7 +76,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_CANCELING, }); - assert.false(canService.can('read session', session)); + assert.false(abilitiesService.can('read session', session)); }); test('cannot read a session that is terminated', function (assert) { @@ -85,7 +85,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_TERMINATED, }); - assert.false(canService.can('read session', session)); + assert.false(abilitiesService.can('read session', session)); }); test('can read a session that has read:self', function (assert) { @@ -94,7 +94,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_ACTIVE, }); - assert.true(canService.can('read session', session)); + assert.true(abilitiesService.can('read session', session)); }); test('can cancel a session that is active', function (assert) { @@ -103,7 +103,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_ACTIVE, }); - assert.true(canService.can('cancel session', session)); + assert.true(abilitiesService.can('cancel session', session)); }); test('can cancel a session that has cancel:self', function (assert) { @@ -112,7 +112,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_ACTIVE, }); - assert.true(canService.can('cancel session', session)); + assert.true(abilitiesService.can('cancel session', session)); }); test('can cancel a session that is pending', function (assert) { @@ -121,7 +121,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_PENDING, }); - assert.true(canService.can('cancel session', session)); + assert.true(abilitiesService.can('cancel session', session)); }); test('cannot cancel a session that is canceling', function (assert) { @@ -130,7 +130,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_CANCELING, }); - assert.false(canService.can('cancel session', session)); + assert.false(abilitiesService.can('cancel session', session)); }); test('cannot cancel a session that is terminated', function (assert) { @@ -139,7 +139,7 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_TERMINATED, }); - assert.false(canService.can('cancel session', session)); + assert.false(abilitiesService.can('cancel session', session)); }); test('cannot cancel a session that is not authorized', function (assert) { @@ -160,9 +160,9 @@ module('Unit | Ability | session', function (hooks) { status: STATUS_SESSION_TERMINATED, }); - assert.false(canService.can('cancel session', activeSession)); - assert.false(canService.can('cancel session', pendingSession)); - assert.false(canService.can('cancel session', cancelingSession)); - assert.false(canService.can('cancel session', terminatedSession)); + assert.false(abilitiesService.can('cancel session', activeSession)); + assert.false(abilitiesService.can('cancel session', pendingSession)); + assert.false(abilitiesService.can('cancel session', cancelingSession)); + assert.false(abilitiesService.can('cancel session', terminatedSession)); }); }); diff --git a/addons/api/tests/unit/abilities/target-test.js b/addons/api/tests/unit/abilities/target-test.js index 1f4386da00..96d9b5f1da 100644 --- a/addons/api/tests/unit/abilities/target-test.js +++ b/addons/api/tests/unit/abilities/target-test.js @@ -9,55 +9,59 @@ import { setupTest } from 'ember-qunit'; module('Unit | Abilities | Target', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); }); test('it reflects when a given target may connect based on authorized_actions', function (assert) { const model = { authorized_actions: ['authorize-session'], }; - assert.true(canService.can('connect target', model)); + assert.true(abilitiesService.can('connect target', model)); model.authorized_actions = []; - assert.false(canService.can('connect target', model)); + assert.false(abilitiesService.can('connect target', model)); }); test('it reflects when a given target may add host sources', function (assert) { const model = { authorized_actions: ['add-host-sources'], }; - assert.true(canService.can('addHostSources target', model)); + assert.true(abilitiesService.can('addHostSources target', model)); model.authorized_actions = []; - assert.false(canService.can('addHostSources target', model)); + assert.false(abilitiesService.can('addHostSources target', model)); }); test('it reflects when a given target may remove host sources', function (assert) { const model = { authorized_actions: ['remove-host-sources'], }; - assert.true(canService.can('removeHostSources target', model)); + assert.true(abilitiesService.can('removeHostSources target', model)); model.authorized_actions = []; - assert.false(canService.can('removeHostSources target', model)); + assert.false(abilitiesService.can('removeHostSources target', model)); }); test('it reflects when a given target may add brokered credential sources', function (assert) { const model = { authorized_actions: ['add-credential-sources'], }; - assert.true(canService.can('addBrokeredCredentialSources target', model)); + assert.true( + abilitiesService.can('addBrokeredCredentialSources target', model), + ); model.authorized_actions = []; - assert.false(canService.can('addBrokeredCredentialSources target', model)); + assert.false( + abilitiesService.can('addBrokeredCredentialSources target', model), + ); }); test('it reflects when a given target may remove credential sources', function (assert) { const model = { authorized_actions: ['remove-credential-sources'], }; - assert.true(canService.can('removeCredentialSources target', model)); + assert.true(abilitiesService.can('removeCredentialSources target', model)); model.authorized_actions = []; - assert.false(canService.can('removeCredentialSources target', model)); + assert.false(abilitiesService.can('removeCredentialSources target', model)); }); test('it reflects when a given ssh target may add injected application credential sources', function (assert) { @@ -74,16 +78,19 @@ module('Unit | Abilities | Target', function (hooks) { }; assert.true( - canService.can('addInjectedApplicationCredentialSources target', model), + abilitiesService.can( + 'addInjectedApplicationCredentialSources target', + model, + ), ); assert.false( - canService.can( + abilitiesService.can( 'addInjectedApplicationCredentialSources target', modelWithoutAuthorizedActions, ), ); assert.false( - canService.can( + abilitiesService.can( 'addInjectedApplicationCredentialSources target', modelWithoutSSHType, ), diff --git a/addons/api/tests/unit/abilities/user-test.js b/addons/api/tests/unit/abilities/user-test.js index 814f368c61..9e6eba83db 100644 --- a/addons/api/tests/unit/abilities/user-test.js +++ b/addons/api/tests/unit/abilities/user-test.js @@ -14,7 +14,7 @@ import { module('Unit | Abilities | User', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; const instances = { @@ -23,7 +23,7 @@ module('Unit | Abilities | User', function (hooks) { }; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); instances.user = store.createRecord('user'); instances.account = store.createRecord('account'); @@ -31,28 +31,28 @@ module('Unit | Abilities | User', function (hooks) { test('can add accounts to user when authorized and given a known account type', function (assert) { instances.user.authorized_actions = ['add-accounts']; - assert.true(canService.can('addAccounts user', instances.user)); + assert.true(abilitiesService.can('addAccounts user', instances.user)); instances.account.type = TYPE_AUTH_METHOD_OIDC; assert.true( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_PASSWORD; assert.true( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_LDAP; assert.true( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); instances.account.type = 'no-such-type'; assert.false( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); @@ -60,28 +60,28 @@ module('Unit | Abilities | User', function (hooks) { test('cannot add accounts to user when unauthorized', function (assert) { instances.user.authorized_actions = []; - assert.false(canService.can('addAccounts user', instances.user)); + assert.false(abilitiesService.can('addAccounts user', instances.user)); instances.account.type = TYPE_AUTH_METHOD_OIDC; assert.false( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_PASSWORD; assert.false( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_LDAP; assert.false( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); instances.account.type = 'no-such-type'; assert.false( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); @@ -89,28 +89,28 @@ module('Unit | Abilities | User', function (hooks) { test('can remove accounts from user when authorized and given a known account type', function (assert) { instances.user.authorized_actions = ['remove-accounts']; - assert.true(canService.can('removeAccounts user', instances.user)); + assert.true(abilitiesService.can('removeAccounts user', instances.user)); instances.account.type = TYPE_AUTH_METHOD_OIDC; assert.true( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_PASSWORD; assert.true( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_LDAP; assert.true( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); instances.account.type = 'no-such-type'; assert.false( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); @@ -118,28 +118,28 @@ module('Unit | Abilities | User', function (hooks) { test('cannot remove accounts from user when unauthorized', function (assert) { instances.user.authorized_actions = []; - assert.false(canService.can('removeAccounts user', instances.user)); + assert.false(abilitiesService.can('removeAccounts user', instances.user)); instances.account.type = TYPE_AUTH_METHOD_OIDC; assert.false( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_PASSWORD; assert.false( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_LDAP; assert.false( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); instances.account.type = 'no-such-type'; assert.false( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); diff --git a/addons/api/tests/unit/abilities/worker-test.js b/addons/api/tests/unit/abilities/worker-test.js index 7a8fe37ed2..52071cd687 100644 --- a/addons/api/tests/unit/abilities/worker-test.js +++ b/addons/api/tests/unit/abilities/worker-test.js @@ -9,7 +9,7 @@ import { setupTest } from 'ember-qunit'; module('Unit | Abilities | Worker', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; const instances = { @@ -17,7 +17,7 @@ module('Unit | Abilities | Worker', function (hooks) { }; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); instances.worker = store.createRecord('worker'); }); @@ -27,7 +27,7 @@ module('Unit | Abilities | Worker', function (hooks) { authorized_collection_actions: { workers: ['create:worker-led'] }, }; assert.true( - canService.can('createWorkerLed worker', model, { + abilitiesService.can('createWorkerLed worker', model, { collection: 'workers', }), ); @@ -38,7 +38,7 @@ module('Unit | Abilities | Worker', function (hooks) { authorized_collection_actions: { workers: [] }, }; assert.true( - canService.cannot('createWorkerLed worker', model, { + abilitiesService.cannot('createWorkerLed worker', model, { collection: 'workers', }), ); @@ -46,11 +46,13 @@ module('Unit | Abilities | Worker', function (hooks) { test('can set worker tags', function (assert) { instances.worker.authorized_actions = ['set-worker-tags']; - assert.true(canService.can('setWorkerTags worker', instances.worker)); + assert.true(abilitiesService.can('setWorkerTags worker', instances.worker)); }); test('cannot set worker tags', function (assert) { instances.worker.authorized_actions = []; - assert.true(canService.cannot('setWorkerTags worker', instances.worker)); + assert.true( + abilitiesService.cannot('setWorkerTags worker', instances.worker), + ); }); }); diff --git a/addons/api/tests/unit/adapters/application-test.js b/addons/api/tests/unit/adapters/application-test.js index f6cfec180f..adda813bab 100644 --- a/addons/api/tests/unit/adapters/application-test.js +++ b/addons/api/tests/unit/adapters/application-test.js @@ -7,7 +7,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import RESTAdapter from '@ember-data/adapter/rest'; import { InvalidError } from '@ember-data/adapter/error'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { Response } from 'miragejs'; module('Unit | Adapter | application', function (hooks) { diff --git a/addons/api/tests/unit/handlers/sqlite-handler-test.js b/addons/api/tests/unit/handlers/sqlite-handler-test.js index 456daccc3d..a0e9537b98 100644 --- a/addons/api/tests/unit/handlers/sqlite-handler-test.js +++ b/addons/api/tests/unit/handlers/sqlite-handler-test.js @@ -7,7 +7,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import SqliteHandler from 'api/handlers/sqlite-handler'; import RequestManager from '@ember-data/request'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { faker } from '@faker-js/faker'; import sinon from 'sinon'; import { assert } from '@ember/debug'; diff --git a/addons/api/tests/unit/models/auth-method-test.js b/addons/api/tests/unit/models/auth-method-test.js index 11c19af704..651452c59f 100644 --- a/addons/api/tests/unit/models/auth-method-test.js +++ b/addons/api/tests/unit/models/auth-method-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { TYPE_AUTH_METHOD_PASSWORD, TYPE_AUTH_METHOD_OIDC, diff --git a/addons/api/tests/unit/models/base-test.js b/addons/api/tests/unit/models/base-test.js index 8b628e44f7..40c962697e 100644 --- a/addons/api/tests/unit/models/base-test.js +++ b/addons/api/tests/unit/models/base-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; module('Unit | Model | base', function (hooks) { setupTest(hooks); diff --git a/addons/api/tests/unit/models/group-test.js b/addons/api/tests/unit/models/group-test.js index 12261009f0..daf4427345 100644 --- a/addons/api/tests/unit/models/group-test.js +++ b/addons/api/tests/unit/models/group-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; module('Unit | Model | group', function (hooks) { setupTest(hooks); diff --git a/addons/api/tests/unit/models/host-set-test.js b/addons/api/tests/unit/models/host-set-test.js index 4f473bbdb2..04a0e621f9 100644 --- a/addons/api/tests/unit/models/host-set-test.js +++ b/addons/api/tests/unit/models/host-set-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; module('Unit | Model | host set', function (hooks) { setupTest(hooks); diff --git a/addons/api/tests/unit/models/role-test.js b/addons/api/tests/unit/models/role-test.js index 6636753027..6a8095fdef 100644 --- a/addons/api/tests/unit/models/role-test.js +++ b/addons/api/tests/unit/models/role-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { GRANT_SCOPE_THIS, GRANT_SCOPE_CHILDREN, diff --git a/addons/api/tests/unit/models/scope-test.js b/addons/api/tests/unit/models/scope-test.js index 809e77c677..abf9263fbe 100644 --- a/addons/api/tests/unit/models/scope-test.js +++ b/addons/api/tests/unit/models/scope-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; module('Unit | Model | scope', function (hooks) { setupTest(hooks); diff --git a/addons/api/tests/unit/models/session-recording-test.js b/addons/api/tests/unit/models/session-recording-test.js index 266e495413..351b48f09b 100644 --- a/addons/api/tests/unit/models/session-recording-test.js +++ b/addons/api/tests/unit/models/session-recording-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { TYPE_SESSION_RECORDING_SSH } from 'api/models/session-recording'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { STATE_SESSION_RECORDING_AVAILABLE, STATE_SESSION_RECORDING_STARTED, diff --git a/addons/api/tests/unit/models/target-test.js b/addons/api/tests/unit/models/target-test.js index f625f4c721..06bccfa3d3 100644 --- a/addons/api/tests/unit/models/target-test.js +++ b/addons/api/tests/unit/models/target-test.js @@ -5,12 +5,12 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; import { TYPE_TARGET_TCP, TYPE_TARGET_SSH, TYPE_TARGET_RDP, } from 'api/models/target'; +import { setupMirage } from 'api/test-support/helpers/mirage'; module('Unit | Model | target', function (hooks) { setupTest(hooks); diff --git a/addons/api/tests/unit/models/user-test.js b/addons/api/tests/unit/models/user-test.js index 8c33530ca2..460d8cd84c 100644 --- a/addons/api/tests/unit/models/user-test.js +++ b/addons/api/tests/unit/models/user-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; module('Unit | Model | user', function (hooks) { setupTest(hooks); diff --git a/addons/api/tests/unit/models/worker-test.js b/addons/api/tests/unit/models/worker-test.js index dc22a60dfd..b54d57e367 100644 --- a/addons/api/tests/unit/models/worker-test.js +++ b/addons/api/tests/unit/models/worker-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { TYPE_WORKER_PKI } from 'api/models/worker'; module('Unit | Model | worker', function (hooks) { diff --git a/addons/api/tests/unit/serializers/auth-method-test.js b/addons/api/tests/unit/serializers/auth-method-test.js index 99578e7a35..677b2a3382 100644 --- a/addons/api/tests/unit/serializers/auth-method-test.js +++ b/addons/api/tests/unit/serializers/auth-method-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { TYPE_AUTH_METHOD_PASSWORD, diff --git a/addons/auth/package.json b/addons/auth/package.json index e334117336..71dd4d1d3a 100644 --- a/addons/auth/package.json +++ b/addons/auth/package.json @@ -53,7 +53,7 @@ "ember-load-initializers": "^2.1.2", "ember-page-title": "^8.2.3", "ember-qunit": "^8.1.0", - "ember-resolver": "^12.0.1", + "ember-resolver": "^13.1.1", "ember-source": "~5.12.0", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^6.0.0", diff --git a/addons/auth/tests/helpers/index.js b/addons/auth/tests/helpers/index.js index b4c7ee08da..45e41214e9 100644 --- a/addons/auth/tests/helpers/index.js +++ b/addons/auth/tests/helpers/index.js @@ -29,7 +29,6 @@ function setupApplicationTest(hooks, options) { // from other addons: // // setupIntl(hooks, 'en-us'); // ember-intl - // setupMirage(hooks); // ember-cli-mirage } function setupRenderingTest(hooks, options) { diff --git a/addons/core/addon/decorators/confirm.js b/addons/core/addon/decorators/confirm.js index d4c2e32e1e..b2e7094736 100644 --- a/addons/core/addon/decorators/confirm.js +++ b/addons/core/addon/decorators/confirm.js @@ -29,3 +29,4 @@ export function confirm(confirmationTextKey, options) { }; }; } + diff --git a/addons/core/addon/decorators/debounce.js b/addons/core/addon/decorators/debounce.js index a64d3f21df..8313693afa 100644 --- a/addons/core/addon/decorators/debounce.js +++ b/addons/core/addon/decorators/debounce.js @@ -24,3 +24,5 @@ export function debounce(timeToWait, options) { ); }; } + +export default debounce; diff --git a/addons/core/addon/decorators/notify.js b/addons/core/addon/decorators/notify.js index ee6454b95b..87a787ab0a 100644 --- a/addons/core/addon/decorators/notify.js +++ b/addons/core/addon/decorators/notify.js @@ -116,3 +116,5 @@ export function notifyError( }; }; } + +export default notifySuccess; diff --git a/addons/core/addon/decorators/resource-filter.js b/addons/core/addon/decorators/resource-filter.js index e31437a30e..6353d9446b 100644 --- a/addons/core/addon/decorators/resource-filter.js +++ b/addons/core/addon/decorators/resource-filter.js @@ -272,3 +272,5 @@ export function resourceFilter({ }; }; } + +export default resourceFilter; diff --git a/addons/core/app/decorators/confirm.js b/addons/core/app/decorators/confirm.js index 70def98309..059bbe9d48 100644 --- a/addons/core/app/decorators/confirm.js +++ b/addons/core/app/decorators/confirm.js @@ -3,4 +3,4 @@ * SPDX-License-Identifier: BUSL-1.1 */ -export { default } from 'core/decorators/confirm'; +export { confirm, confirm as default } from 'core/decorators/confirm'; diff --git a/addons/core/app/decorators/debounce.js b/addons/core/app/decorators/debounce.js index aef2d2aa24..7520a18132 100644 --- a/addons/core/app/decorators/debounce.js +++ b/addons/core/app/decorators/debounce.js @@ -4,3 +4,4 @@ */ export { default } from 'core/decorators/debounce'; +export { default as debounce } from 'core/decorators/debounce'; diff --git a/addons/core/app/decorators/notify.js b/addons/core/app/decorators/notify.js index d8533a1d79..e34afef52e 100644 --- a/addons/core/app/decorators/notify.js +++ b/addons/core/app/decorators/notify.js @@ -4,3 +4,4 @@ */ export { default } from 'core/decorators/notify'; +export { notifySuccess, notifyError } from 'core/decorators/notify'; diff --git a/addons/core/app/utils/seconds-to-duration.js b/addons/core/app/utils/seconds-to-duration.js index e9862f594f..64dd69b1ae 100644 --- a/addons/core/app/utils/seconds-to-duration.js +++ b/addons/core/app/utils/seconds-to-duration.js @@ -3,4 +3,4 @@ * SPDX-License-Identifier: BUSL-1.1 */ -export { default } from 'core/utils/seconds-to-duration'; +export { secondsToDuration as default } from 'core/utils/seconds-to-duration'; diff --git a/addons/core/index.js b/addons/core/index.js index 684173c848..7446f57ecf 100644 --- a/addons/core/index.js +++ b/addons/core/index.js @@ -38,7 +38,7 @@ module.exports = { if (this.isDevelopingAddon()) app.options.svg.paths.push(dummyPublicPath); this.addons.forEach((addon) => { - if (addon.name === 'ember-inline-svg') addon.included(app); + // if (addon.name === 'ember-inline-svg') addon.included(app); }); }, diff --git a/addons/core/package.json b/addons/core/package.json index 0f42275a92..951e62f002 100644 --- a/addons/core/package.json +++ b/addons/core/package.json @@ -71,7 +71,7 @@ "ember-load-initializers": "^2.1.2", "ember-page-title": "^8.2.3", "ember-qunit": "^8.1.0", - "ember-resolver": "^12.0.1", + "ember-resolver": "^13.1.1", "ember-source": "~5.12.0", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^6.0.0", @@ -108,4 +108,4 @@ "*.hbs": "ember-template-lint --fix", "*.{scss,yaml}": "prettier --write" } -} \ No newline at end of file +} diff --git a/addons/core/tests/dummy/config/environment.js b/addons/core/tests/dummy/config/environment.js index f9bc418c30..edd6b848f4 100644 --- a/addons/core/tests/dummy/config/environment.js +++ b/addons/core/tests/dummy/config/environment.js @@ -41,8 +41,8 @@ module.exports = function (environment) { namespace: 'v1', }, - 'ember-cli-mirage': { - directory: '../api/mirage', + mirage: { + enabled: true, }, enableConfirmService: false, diff --git a/addons/core/tests/helpers/index.js b/addons/core/tests/helpers/index.js index b4c7ee08da..45e41214e9 100644 --- a/addons/core/tests/helpers/index.js +++ b/addons/core/tests/helpers/index.js @@ -29,7 +29,6 @@ function setupApplicationTest(hooks, options) { // from other addons: // // setupIntl(hooks, 'en-us'); // ember-intl - // setupMirage(hooks); // ember-cli-mirage } function setupRenderingTest(hooks, options) { diff --git a/addons/core/tests/unit/authenticators/password-test.js b/addons/core/tests/unit/authenticators/password-test.js index a0fda881a0..15dda3eec0 100644 --- a/addons/core/tests/unit/authenticators/password-test.js +++ b/addons/core/tests/unit/authenticators/password-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { Response } from 'miragejs'; module('Unit | Authenticator | password', function (hooks) { diff --git a/addons/rose/addon/components/rose/code-editor/toolbar/index.hbs b/addons/rose/addon/components/rose/code-editor/toolbar/index.hbs index 04e94a7d5b..a8066f92a8 100644 --- a/addons/rose/addon/components/rose/code-editor/toolbar/index.hbs +++ b/addons/rose/addon/components/rose/code-editor/toolbar/index.hbs @@ -21,14 +21,12 @@ data-test-code-editor-toolbar-menu-divider > {{/if}} - Copy code - + \ No newline at end of file diff --git a/addons/rose/addon/components/rose/form/index.hbs b/addons/rose/addon/components/rose/form/index.hbs index b4f40b6e3f..8bcf31fdb3 100644 --- a/addons/rose/addon/components/rose/form/index.hbs +++ b/addons/rose/addon/components/rose/form/index.hbs @@ -26,16 +26,22 @@ 'rose/form/checkbox/group' disabled=this.disabled ) fieldset=(component 'rose/form/fieldset') - actions=(component - (if - this.showEditToggleButton + actions=(if + this.showEditToggleButton + (component 'rose/form/actions/edit-toggle' + submitDisabled=this.disabled + cancelDisabled=(if @showEditToggle @disabled this.disabled) + cancel=this.handleCancel + enableEdit=this.enableEdit + ) + (component 'rose/form/actions' + submitDisabled=this.disabled + cancelDisabled=(if @showEditToggle @disabled this.disabled) + cancel=this.handleCancel + enableEdit=this.enableEdit ) - submitDisabled=this.disabled - cancelDisabled=(if @showEditToggle @disabled this.disabled) - cancel=this.handleCancel - enableEdit=this.enableEdit ) isEditable=this.isEditable disabled=this.disabled diff --git a/addons/rose/package.json b/addons/rose/package.json index 56e010139b..830e68548f 100644 --- a/addons/rose/package.json +++ b/addons/rose/package.json @@ -30,7 +30,7 @@ }, "dependencies": { "@babel/core": "^7.26.10", - "@hashicorp/design-system-components": "^4.24.1", + "@hashicorp/design-system-components": "^5", "@hashicorp/design-system-tokens": "^2.3.0", "@hashicorp/flight-icons": "^3.10.0", "@nullvoxpopuli/ember-composable-helpers": "^5.2.10", @@ -68,10 +68,10 @@ "ember-inline-svg": "^1.0.1", "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^1.0.0", - "ember-modifier": "^3.2.7", + "ember-modifier": "^4.2.0", "ember-page-title": "^8.2.3", "ember-qunit": "^8.1.0", - "ember-resolver": "^12.0.1", + "ember-resolver": "^13.1.1", "ember-source": "~5.12.0", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^6.0.0", diff --git a/addons/rose/tests/helpers/index.js b/addons/rose/tests/helpers/index.js index b4c7ee08da..45e41214e9 100644 --- a/addons/rose/tests/helpers/index.js +++ b/addons/rose/tests/helpers/index.js @@ -29,7 +29,6 @@ function setupApplicationTest(hooks, options) { // from other addons: // // setupIntl(hooks, 'en-us'); // ember-intl - // setupMirage(hooks); // ember-cli-mirage } function setupRenderingTest(hooks, options) { diff --git a/package.json b/package.json index 46328e6b85..f71d05a0e6 100755 --- a/package.json +++ b/package.json @@ -56,7 +56,8 @@ "ember-try-config>package-json": "^10.0.1", "ember-stargate@^0.6.0>@glimmer/component": "^2.0.0", "ember-loading>ember-concurrency": "^4.0.0", - "tmp": "^0.2.5" + "tmp": "^0.2.5", + "ember-resolver": "^13.1.1" }, "ignoredBuiltDependencies": [ "@parcel/watcher", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80067e7616..07fa950a8f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,6 +18,7 @@ overrides: ember-stargate@^0.6.0>@glimmer/component: ^2.0.0 ember-loading>ember-concurrency: ^4.0.0 tmp: ^0.2.5 + ember-resolver: ^13.1.1 patchedDependencies: ember-loading: @@ -58,6 +59,9 @@ importers: '@ember/string': specifier: ^4.0.0 version: 4.0.1 + '@faker-js/faker': + specifier: ^8.0.2 + version: 8.4.1 '@sqlite.org/sqlite-wasm': specifier: ^3.49.1-build4 version: 3.49.1-build4 @@ -77,29 +81,35 @@ importers: specifier: ^2.10.0 version: 2.10.0(@glint/template@1.5.2)(webpack@5.99.8(esbuild@0.25.9)) ember-can: - specifier: ^4.2.0 - version: 4.2.0(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + specifier: ^8.0.0 + version: 8.0.0(@babel/core@7.27.1)(@ember/string@4.0.1)(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-resolver@13.1.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) ember-cli-babel: specifier: ^8.2.0 version: 8.2.0(@babel/core@7.27.1) ember-cli-htmlbars: specifier: ^6.3.0 version: 6.3.0 - ember-cli-mirage: - specifier: ^3.0.3 - version: 3.0.4(4aae64382352ae0e9635b2848df9b5e9) ember-data: specifier: ~5.3.12 - version: 5.3.13(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) + version: 5.3.13(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) + ember-inflector: + specifier: ^6.0.0 + version: 6.0.0(@babel/core@7.27.1) esbuild: specifier: ^0.25.4 version: 0.25.9 + js-bexpr: + specifier: hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1 + version: https://codeload.github.com/hashicorp/js-bexpr/tar.gz/9b4a4b54d85eba67fdfc0990133d1518d890b1e1 miragejs: specifier: ^0.1.48 version: 0.1.48 promise-worker-bi: specifier: ^5.0.1 version: 5.0.1 + sinon: + specifier: ^19.0.2 + version: 19.0.5 tracked-built-ins: specifier: ^4.0.0 version: 4.0.0(@babel/core@7.27.1) @@ -125,9 +135,6 @@ importers: '@embroider/test-setup': specifier: ^4.0.0 version: 4.0.0 - '@faker-js/faker': - specifier: ^8.0.2 - version: 8.4.1 '@glimmer/component': specifier: ^2.0.0 version: 2.0.0 @@ -174,8 +181,8 @@ importers: specifier: ^8.1.0 version: 8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) ember-resolver: - specifier: ^12.0.1 - version: 12.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + specifier: ^13.1.1 + version: 13.1.1 ember-source: specifier: ~5.12.0 version: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -203,9 +210,6 @@ importers: eslint-plugin-qunit: specifier: ^8.1.2 version: 8.1.2(eslint@8.57.1) - js-bexpr: - specifier: hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1 - version: https://codeload.github.com/hashicorp/js-bexpr/tar.gz/9b4a4b54d85eba67fdfc0990133d1518d890b1e1 loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -218,9 +222,6 @@ importers: qunit-dom: specifier: ^3.2.1 version: 3.4.0 - sinon: - specifier: ^19.0.2 - version: 19.0.5 webpack: specifier: ^5.95.0 version: 5.99.8(esbuild@0.25.9) @@ -307,8 +308,8 @@ importers: specifier: ^8.1.0 version: 8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) ember-resolver: - specifier: ^12.0.1 - version: 12.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + specifier: ^13.1.1 + version: 13.1.1 ember-source: specifier: ~5.12.0 version: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -482,8 +483,8 @@ importers: specifier: ^8.1.0 version: 8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) ember-resolver: - specifier: ^12.0.1 - version: 12.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + specifier: ^13.1.1 + version: 13.1.1 ember-source: specifier: ~5.12.0 version: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -545,8 +546,8 @@ importers: specifier: ^7.26.10 version: 7.27.1 '@hashicorp/design-system-components': - specifier: ^4.24.1 - version: 4.24.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + specifier: ^5 + version: 5.0.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-engines@0.12.0(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@hashicorp/design-system-tokens': specifier: ^2.3.0 version: 2.3.0 @@ -654,8 +655,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 ember-modifier: - specifier: ^3.2.7 - version: 3.2.7(@babel/core@7.27.1) + specifier: ^4.2.0 + version: 4.2.2(@babel/core@7.27.1) ember-page-title: specifier: ^8.2.3 version: 8.2.4(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) @@ -663,8 +664,8 @@ importers: specifier: ^8.1.0 version: 8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) ember-resolver: - specifier: ^12.0.1 - version: 12.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + specifier: ^13.1.1 + version: 13.1.1 ember-source: specifier: ~5.12.0 version: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -770,12 +771,24 @@ importers: '@babel/runtime': specifier: 7.27.6 version: 7.27.6 + api: + specifier: workspace:* + version: link:../../addons/api + core: + specifier: workspace:* + version: link:../../addons/core + ember-engines: + specifier: ^0.12.0 + version: 0.12.0(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) ember-named-blocks-polyfill: specifier: ^0.2.5 version: 0.2.5 lodash: specifier: ^4.17.21 version: 4.17.21 + miragejs: + specifier: ^0.1.48 + version: 0.1.48 uuid: specifier: ^11.0.3 version: 11.1.0 @@ -789,6 +802,9 @@ importers: '@babel/plugin-proposal-decorators': specifier: ^7.24.7 version: 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-runtime': + specifier: ^7.26.9 + version: 7.27.1(@babel/core@7.27.1) '@ember/optional-features': specifier: ^2.1.0 version: 2.2.0 @@ -801,9 +817,21 @@ importers: '@ember/test-helpers': specifier: ^5.2.1 version: 5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2) + '@embroider/compat': + specifier: ^4.0.3 + version: 4.1.10(@embroider/core@4.2.8(@glint/template@1.5.2))(@glint/template@1.5.2) + '@embroider/config-meta-loader': + specifier: ^1.0.0 + version: 1.0.0 + '@embroider/core': + specifier: ^4.0.3 + version: 4.2.8(@glint/template@1.5.2) '@embroider/macros': specifier: ^1.18.0 version: 1.18.0(@glint/template@1.5.2) + '@embroider/vite': + specifier: ^1.1.1 + version: 1.4.2(@embroider/core@4.2.8(@glint/template@1.5.2))(@glint/template@1.5.2)(rollup@4.53.3)(vite@6.4.1(@types/node@22.15.17)(jiti@2.4.2)(sass@1.88.0)(terser@5.39.1)(yaml@2.5.1)) '@faker-js/faker': specifier: ^8.0.2 version: 8.4.1 @@ -816,18 +844,21 @@ importers: '@hashicorp/ember-asciinema-player': specifier: https://github.com/hashicorp/ember-asciinema-player.git#e047a096039cff70234c232efe75dcad74c6358a version: https://codeload.github.com/hashicorp/ember-asciinema-player/tar.gz/e047a096039cff70234c232efe75dcad74c6358a(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(webpack@5.99.8(esbuild@0.25.9)) + '@rollup/plugin-babel': + specifier: ^6.0.4 + version: 6.1.0(@babel/core@7.27.1)(rollup@4.53.3) '@warp-drive/build-config': specifier: ^0.0.2 version: 0.0.2(@glint/template@1.5.2) - broccoli-asset-rev: - specifier: ^3.0.0 - version: 3.0.0 + babel-plugin-ember-template-compilation: + specifier: ^2.3.0 + version: 2.4.1 concurrently: specifier: ^9.1.0 version: 9.1.0 - core: - specifier: workspace:* - version: link:../../addons/core + decorator-transforms: + specifier: ^2.3.0 + version: 2.3.0(@babel/core@7.27.1) doctoc: specifier: ^2.2.0 version: 2.2.0 @@ -843,54 +874,51 @@ importers: ember-basic-dropdown: specifier: ^8.8.0 version: 8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + ember-browser-services: + specifier: ^4.0.3 + version: 4.0.4 + ember-can: + specifier: ^8.0.0 + version: 8.0.0(@babel/core@7.27.1)(@ember/string@4.0.1)(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-resolver@13.1.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) ember-cli: specifier: ~5.12.0 version: 5.12.0(handlebars@4.7.8)(underscore@1.13.7) ember-cli-babel: specifier: ^8.2.0 version: 8.2.0(@babel/core@7.27.1) - ember-cli-clean-css: - specifier: ^3.0.0 - version: 3.0.0 ember-cli-code-coverage: specifier: ^1.0.3 version: 1.0.3 ember-cli-content-security-policy: specifier: ^2.0.3 version: 2.0.3 - ember-cli-dependency-checker: - specifier: ^3.3.2 - version: 3.3.3(ember-cli@5.12.0(handlebars@4.7.8)(underscore@1.13.7)) ember-cli-flash: specifier: ^6.0.0 version: 6.0.0(@ember/string@4.0.1)(@embroider/macros@1.18.0(@glint/template@1.5.2))(ember-modifier@4.2.2(@babel/core@7.27.1)) ember-cli-htmlbars: specifier: ^6.3.0 version: 6.3.0 - ember-cli-inject-live-reload: - specifier: ^2.1.0 - version: 2.1.0 ember-cli-sass: specifier: ^11.0.1 version: 11.0.1 - ember-cli-sri: - specifier: ^2.1.1 - version: 2.1.1 - ember-cli-terser: - specifier: ^4.0.2 - version: 4.0.2 ember-concurrency: specifier: ^4.0.3 version: 4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2) ember-exam: specifier: ^8.0.0 - version: 8.0.0(@glint/template@1.5.2)(ember-qunit@8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1))(qunit@2.24.1)(webpack@5.99.8(esbuild@0.25.9)) + version: 8.0.0(@glint/template@1.5.2)(ember-qunit@9.0.4(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(qunit@2.24.1))(qunit@2.24.1)(webpack@5.99.8(esbuild@0.25.9)) ember-inline-svg: specifier: ^1.0.1 version: 1.0.1 + ember-intl: + specifier: ^7.1.8 + version: 7.1.8(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(typescript@5.8.3)(webpack@5.99.8(esbuild@0.25.9)) ember-load-initializers: - specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.27.1) + specifier: ^3.0.0 + version: 3.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + ember-loading: + specifier: ^2.0.0 + version: 2.0.0(patch_hash=7d97519ce1955a5130edf885afb18c05d7253e2055b1b60cdcf6efc64cbdbff3)(@babel/core@7.27.1)(@glint/template@1.5.2) ember-modifier: specifier: ^4.2.0 version: 4.2.2(@babel/core@7.27.1) @@ -901,11 +929,14 @@ importers: specifier: ^8.11.0 version: 8.12.0(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-concurrency@4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) ember-qunit: - specifier: ^8.1.0 - version: 8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) + specifier: ^9.0.0 + version: 9.0.4(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(qunit@2.24.1) ember-resolver: - specifier: ^12.0.1 - version: 12.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + specifier: ^13.1.1 + version: 13.1.1 + ember-simple-auth: + specifier: ^6.1.0 + version: 6.1.0(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(eslint@8.57.1) ember-source: specifier: ~5.12.0 version: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -933,9 +964,6 @@ importers: js-bexpr: specifier: hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1 version: https://codeload.github.com/hashicorp/js-bexpr/tar.gz/9b4a4b54d85eba67fdfc0990133d1518d890b1e1 - loader.js: - specifier: ^4.7.0 - version: 4.7.0 postcss: specifier: ^8.4.31 version: 8.5.3 @@ -966,9 +994,9 @@ importers: tracked-built-ins: specifier: ^4.0.0 version: 4.0.0(@babel/core@7.27.1) - webpack: - specifier: ^5.95.0 - version: 5.99.8(esbuild@0.25.9) + vite: + specifier: ^6.0.0 + version: 6.4.1(@types/node@22.15.17)(jiti@2.4.2)(sass@1.88.0)(terser@5.39.1)(yaml@2.5.1) ui/desktop: dependencies: @@ -1109,8 +1137,8 @@ importers: specifier: ^8.1.0 version: 8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) ember-resolver: - specifier: ^12.0.1 - version: 12.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + specifier: ^13.1.1 + version: 13.1.1 ember-source: specifier: ~5.12.0 version: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -1193,6 +1221,9 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@asamuzakjp/css-color@3.2.0': + resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -1373,6 +1404,11 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.27.1': resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} engines: {node: '>=6.9.0'} @@ -1739,6 +1775,10 @@ packages: resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -1805,16 +1845,44 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms@2.7.1': resolution: {integrity: sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==} engines: {node: ^14 || ^16 || >=18} peerDependencies: '@csstools/css-tokenizer': ^2.4.1 + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-tokenizer@2.4.1': resolution: {integrity: sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==} engines: {node: ^14 || ^16 || >=18} + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + '@csstools/media-query-list-parser@2.1.13': resolution: {integrity: sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==} engines: {node: ^14 || ^16 || >=18} @@ -2060,6 +2128,16 @@ packages: '@glint/template': optional: true + '@ember/render-modifiers@3.0.0': + resolution: {integrity: sha512-gJztS8dI7Jt8ohFQptEDJAgpl9DG84IpqwQoR1JDpVIBy2uLbf8KFD6S3h3LfyMsgJce6G38cOvyQv6BDgcnsA==} + engines: {node: '>= 18'} + peerDependencies: + '@glint/template': ^1.0.2 + ember-source: '>= 4.0.0' + peerDependenciesMeta: + '@glint/template': + optional: true + '@ember/string@4.0.1': resolution: {integrity: sha512-VWeng8BSWrIsdPfffOQt/bKwNKJL7+37gPFh/6iZZ9bke+S83kKqkS30poo4bTGfRcMnvAE0ie7txom+iDu81Q==} @@ -2077,6 +2155,20 @@ packages: resolution: {integrity: sha512-gcJuHiXgnrzaU8NyU+2bMbtS6PNOr5v5B8OXBqaBvTCsMpXLvKo8OBOQFCoUN0rPX2J6VaFqrbi/371sMvzZug==} engines: {node: 12.* || 14.* || >= 16} + '@embroider/compat@4.1.10': + resolution: {integrity: sha512-GtANRyjHuU8FQoBukPBqATWHb8Ck92FLqWc8uWGNyVHX86aInvXJyh947/rpVGi0vzrFJv5u3AEsp5a6/JPg1g==} + engines: {node: 12.* || 14.* || >= 16} + peerDependencies: + '@embroider/core': ^4.2.7 + + '@embroider/config-meta-loader@1.0.0': + resolution: {integrity: sha512-qznkdjgEGPe6NM94hZNXvOm/WhrJwBh8FtSQZ+nGjh9TOjY42tOiTEevFuM0onNXUn6bpdGzmjwKo2xY2jxQxQ==} + engines: {node: 12.* || 14.* || >= 16} + + '@embroider/core@4.2.8': + resolution: {integrity: sha512-sz7FQLhqeMK1KOx7F+MobMYD6VXURfMZsDDqVxDkeGefdtCiJF+JklMKQLJJH91kxnOkTS+y3MuFTeiOr/ZQuw==} + engines: {node: 12.* || 14.* || >= 16} + '@embroider/macros@1.18.0': resolution: {integrity: sha512-KanP80XxNK4bmQ1HKTcUjy/cdCt9n7knPMLK1vzHdOFymACHo+GbhgUjXjYdOCuBTv+ZwcjL2P2XDmBcYS9r8g==} engines: {node: 12.* || 14.* || >= 16} @@ -2095,6 +2187,19 @@ packages: '@glint/template': optional: true + '@embroider/macros@1.19.4': + resolution: {integrity: sha512-x4wrnkE6fPN6mOyJeJv2I+lpKE2pHPq25S8bCiRJJb3H3RyiTm2LjSeB4AOVTi8YUjiWToI4PBgZOtx44hM4LA==} + engines: {node: 12.* || 14.* || >= 16} + peerDependencies: + '@glint/template': ^1.0.0 + peerDependenciesMeta: + '@glint/template': + optional: true + + '@embroider/reverse-exports@0.2.0': + resolution: {integrity: sha512-WFsw8nQpHZiWGEDYpa/A79KEFfTisqteXbY+jg9eZiww1r1G+LZvsmdszDp86TkotUSCqrMbK/ewn0jR1CJmqg==} + engines: {node: 12.* || 14.* || >= 16} + '@embroider/shared-internals@2.9.0': resolution: {integrity: sha512-8untWEvGy6av/oYibqZWMz/yB+LHsKxEOoUZiLvcpFwWj2Sipc0DcXeTJQZQZ++otNkLCWyDrDhOLrOkgjOPSg==} engines: {node: 12.* || 14.* || >= 16} @@ -2135,6 +2240,12 @@ packages: '@glint/template': optional: true + '@embroider/vite@1.4.2': + resolution: {integrity: sha512-tYxaQKmi9cA+Jwy5nwtVe6KUEhkIWrd/0WUVORfLDTWna2DjYOMezmUEvAJA0raINCYrRu+yotdri3Bj+p/veA==} + peerDependencies: + '@embroider/core': ^4.2.8 + vite: '>= 5.2.0' + '@esbuild/aix-ppc64@0.25.9': resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} @@ -2465,11 +2576,12 @@ packages: '@handlebars/parser@2.0.0': resolution: {integrity: sha512-EP9uEDZv/L5Qh9IWuMUGJRfwhXJ4h1dqKTT4/3+tY0eu7sPis7xh23j61SYUnNF4vqCQvvUXpDo9Bh/+q1zASA==} - '@hashicorp/design-system-components@4.24.1': - resolution: {integrity: sha512-rcRbBKc9MWngtVTRKr1i0ixbQypj4tEF8ZnsFrUVZLm7CMS8R5/+cfSu3pgbPriOOqZDCx7qAhNqAeTim4AYag==} + '@hashicorp/design-system-components@5.0.0': + resolution: {integrity: sha512-e9EJo62qgHFYsm1b7pWMZFXnLoTM+nosLbxAlg8K0My34Ns1x5f29rPov5nyXF8NR+aGU6UmKOOPOjksstFmVg==} engines: {node: '>= 18'} peerDependencies: '@ember/string': ^3.1.1 || ^4.0.0 + ember-basic-dropdown: ^7.3.0 || ^8.6.1 ember-engines: '>= 0.11.0' ember-intl: ^7.3.0 peerDependenciesMeta: @@ -2494,8 +2606,8 @@ packages: '@hashicorp/flight-icons@3.10.0': resolution: {integrity: sha512-wtufYZ5Ntihmy+vbR0dM+Q7X56xPX/dtpcfVs4nCRgvYZZic5ayqE8tefs2FGtxauH6zuzzVk48s5S6psv9g+g==} - '@hashicorp/flight-icons@3.14.0': - resolution: {integrity: sha512-nyLDApaZsAHpAf2sRNwYX1MnJQU9UI3euiwE6wHPl2l/+Yt8wba1oXkmWL/Ptc4QgJxxnRUUhf66jGcB/AIOyQ==} + '@hashicorp/flight-icons@4.0.0': + resolution: {integrity: sha512-N7AqnArvNZtMEzKTcrne2rfjspq8DdUGSye4b12cUgplMH+2trQd/XErHEu+ycY3Dt6ssS/sQFpP8m7WNn/nSg==} '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} @@ -2810,6 +2922,138 @@ packages: peerDependencies: prettier: ^3.0.0 + '@rollup/plugin-babel@6.1.0': + resolution: {integrity: sha512-dFZNuFD2YRcoomP4oYf+DvQNSUA9ih+A3vUqopQx5EdtPGo3WBnQcI/S8pwpz91UsGfL0HsMSOlaMld8HrbubA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + rollup: + optional: true + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + cpu: [x64] + os: [win32] + '@scalvert/ember-setup-middleware-reporter@0.1.1': resolution: {integrity: sha512-C5DHU6YlKaISB5utGQ+jpsMB57ZtY0uZ8UkD29j855BjqG6eJ98lhA2h/BoJbyPw89RKLP1EEXroy9+5JPoyVw==} engines: {node: 12.* || >= 14} @@ -2871,6 +3115,9 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@types/babel__code-frame@7.0.6': + resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} + '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -2901,6 +3148,9 @@ packages: '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} @@ -3120,6 +3370,11 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn@5.7.4: + resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} @@ -3170,6 +3425,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + amd-name-resolver@0.0.6: + resolution: {integrity: sha512-W2trar3LgeKV/yB6ZRD3Iw7MlhrKjLMVSNAatWNNYsn4w+iSfbmA66VB+jQjVIfvzHPZicnHObAvflMkoVtjAQ==} + amd-name-resolver@1.3.1: resolution: {integrity: sha512-26qTEWqZQ+cxSYygZ4Cf8tsjDBLceJahhtewxtKZA3SRa4PluuqYCuheemDQD+7Mf5B7sr+zhTDWAHDh02a1Dw==} engines: {node: 6.* || 8.* || >= 10.*} @@ -3379,6 +3637,9 @@ packages: '@babel/core': ^7.0.0 webpack: '>=2' + babel-plugin-compact-reexports@1.1.0: + resolution: {integrity: sha512-+KgjNJ5yMeZzJxYZdLEy9m82m92aL7FLvNJcK6dYJbW06t+UTpFJ2FVSs35zMfURcPnrQELYhLG4VC+kt/4gvw==} + babel-plugin-debug-macros@0.2.0: resolution: {integrity: sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA==} engines: {node: '>=4'} @@ -3391,6 +3652,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + babel-plugin-debug-macros@2.0.0: + resolution: {integrity: sha512-7ZaLtXIY01PAPhLyjV3OACePnl+X5iQO7F4O/sOJHTfMf/36zyu14uVUxNiZmOUntYBsyT/VVplf1LrH6NcwvQ==} + engines: {node: '>=16'} + peerDependencies: + '@babel/core': ^7.0.0 + babel-plugin-ember-data-packages-polyfill@0.1.2: resolution: {integrity: sha512-kTHnOwoOXfPXi00Z8yAgyD64+jdSXk3pknnS7NlqnCKAU6YDkXZ4Y7irl66kaZjZn0FBBt0P4YOZFZk85jYOww==} engines: {node: 6.* || 8.* || 10.* || >= 12.*} @@ -3403,6 +3670,10 @@ packages: resolution: {integrity: sha512-n+ktQ3JeyWrpRutSyPn2PsHeH+A94SVm+iUoogzf9VUqpP47FfWem24gpQXhn+p6+x5/BpuFJXMLXWt7ZoYAKA==} engines: {node: '>= 12.*'} + babel-plugin-ember-template-compilation@3.0.1: + resolution: {integrity: sha512-3fUgnv+azabsl2PMd+SpkV8E7vvp7oRLaXv+OJIe36G3niSVYDKJ+7n6WaPyh+z7gqeAKSBj7Bdc5dYbhEMsgQ==} + engines: {node: '>= 18.*'} + babel-plugin-htmlbars-inline-precompile@3.2.0: resolution: {integrity: sha512-IUeZmgs9tMUGXYu1vfke5I18yYJFldFGdNFQOWslXTnDWXzpwPih7QFduUqvT+awDpDuNtXpdt5JAf43Q1Hhzg==} engines: {node: 8.* || 10.* || >= 12.*} @@ -3440,6 +3711,10 @@ packages: babel-plugin-syntax-dynamic-import@6.18.0: resolution: {integrity: sha512-MioUE+LfjCEz65Wf7Z/Rm4XCP5k2c+TbMd2Z2JKc7U9uwjBhAfNPE48KC4GTGKhppMeYVepwDBNO/nGY6NYHBA==} + babylon@6.18.0: + resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} + hasBin: true + backbone@1.6.1: resolution: {integrity: sha512-YQzWxOrIgL6BoFnZjThVN99smKYhyEXXFyJJ2lsF1wJLyo4t+QjmkLrH8/fN22FZ4ykF70Xq7PgTugJVR4zS9Q==} @@ -3481,6 +3756,9 @@ packages: resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==} engines: {node: '>=0.8'} + bind-decorator@1.0.11: + resolution: {integrity: sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -3556,6 +3834,10 @@ packages: broccoli-debug@0.6.5: resolution: {integrity: sha512-RIVjHvNar9EMCLDW/FggxFRXqpjhncM/3qq87bn/y+/zR9tqEkHvTqbyOc4QnB97NO2m6342w4wGkemkaeOuWg==} + broccoli-dependency-funnel@2.1.2: + resolution: {integrity: sha512-k6b0OnNuRcUnJ9TXA0o6RvqXOkTQ6APKoLsZeMJHAe/YjLjE1uTlfw4Z88GfGmi8gwtLHdnkrhBoJ7YdIkcVZA==} + engines: {node: '>= 6.0.0'} + broccoli-file-creator@2.1.1: resolution: {integrity: sha512-YpjOExWr92C5vhnK0kmD81kM7U09kdIRZk9w4ZDCDHuHXW+VE/x6AGEOQQW3loBQQ6Jk+k+TSm8dESy4uZsnjw==} engines: {node: ^4.5 || 6.* || >= 7.*} @@ -3672,6 +3954,13 @@ packages: resolution: {integrity: sha512-sWi3b3fTUSVPDsz5KsQ5eCQNVAtLgkIE/HYFkEZXR/07clqmd4E/gFiuwSaqa9b+QTXc1Uemfb7TVWbEIURWDg==} engines: {node: 8.* || >= 10.*} + browserslist-to-esbuild@2.1.1: + resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + browserslist: '*' + browserslist@4.24.5: resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3781,6 +4070,10 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-legacy@1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} @@ -4345,6 +4638,10 @@ packages: resolution: {integrity: sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==} engines: {node: '>=0.10.0'} + cssstyle@4.6.0: + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} + engines: {node: '>=18'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -4355,6 +4652,10 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -4600,15 +4901,16 @@ packages: electron-to-chromium@1.5.152: resolution: {integrity: sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==} - ember-a11y-refocus@4.1.4: - resolution: {integrity: sha512-51tGk30bskObL1LsGZRxzqIxgZhIE8ZvvDYcT1OWphxZlq00+Arz57aMLS4Vz4qhSE40BfeN2qFYP/gXtp9qDA==} - engines: {node: 16.* || >= 18.*} - ember-a11y-refocus@5.0.0: resolution: {integrity: sha512-0PH/iZNeTkuhZjvE5Y3CllEGnh8Ej8KYrTcatdyDWzV8pQOZO/Meo/JppKNUsISAyfuENMJafREHWdNBvS6g5w==} peerDependencies: ember-source: '>= 4.12.0' + ember-a11y-refocus@5.1.0: + resolution: {integrity: sha512-Z6wl3bAMvDuFxQQnppbsT4RY5tUAlKRQo1PVqsFYRYE8gyRWDlLqR2Stspp4rdkXaaFn2JpNA3zzbIy1aTG5GA==} + peerDependencies: + ember-source: '>= 4.12.0' + ember-a11y-testing@7.1.2: resolution: {integrity: sha512-V30dZgfj3itq+4/H78livBN1X4wvYeCJnsPTnQFqZfgrQyEfCYLL6d96W0T4UoahQao+PFzJcR2P/CpMU9j5nw==} engines: {node: 16.* || >= 18} @@ -4623,6 +4925,10 @@ packages: resolution: {integrity: sha512-hWpUz0eiNkWzi3FgHW5QU6LyCDyUlTWwuIROHluEKZoa9m6LJVXbb/EVFgIG3FkAib6a5Ie00WvkXEZFXxh3+A==} engines: {node: 14.* || >= 16} + ember-asset-loader@1.0.0: + resolution: {integrity: sha512-JXr9bEkkzXiamW2kMk36U2VugLzo4MeoTQGRxvpNFqU1oldUMzm/yFPVvtjsVOjishH4pVwQuOK9Sjrx9E2xZg==} + engines: {node: 14.* || 16.* || >= 17} + ember-assign-helper@0.5.1: resolution: {integrity: sha512-dXHbwlBTJWVjG7k4dhVrT3Gh4nQt6rC2LjyltuPztIhQ+YcPYHMqAPJRJYLGZu16aPSJbaGF8K+u51i7CLzqlQ==} @@ -4639,9 +4945,13 @@ packages: ember-browser-services@4.0.4: resolution: {integrity: sha512-ZjQPD7wlqMhHIq+uuesW+SWYCN+TsQtyY2Fy7QpluxEQff/j2JHiQAk3K0GUtEwef1gJ8/dRsBqSnaG2/Fxhmg==} - ember-can@4.2.0: - resolution: {integrity: sha512-hiaWZspmI4zWeWmmFWgyw1+yEStSo6edGRHHUXCUPR+vBoqlT/hEfmndlfDGso2GFP8IV59DORMVY0KReMcO+w==} - engines: {node: 12.* || 14.* || >= 16} + ember-can@8.0.0: + resolution: {integrity: sha512-JsS7tJ7sg52p8jPY2ND9uqHdEpAB+RpJLN8+lo7t5j65JgBX5gWXCCJ8seJ28AE278Im2ok0OoQBv5VXWqkvOw==} + peerDependencies: + '@ember/string': '>= 3.0.1' + ember-inflector: '>= 5.0.1' + ember-resolver: ^13.1.1 + ember-source: '>= 4.12.0' ember-cli-babel-plugin-helpers@1.1.1: resolution: {integrity: sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw==} @@ -4714,26 +5024,6 @@ packages: resolution: {integrity: sha512-QkLGcYv1WRK35g4MWu/uIeJ5Suk2eJXKtZ+8s+qE7C9INmpCPyPxzaqZABquYzcWNzIdw6kYwz3NWAFdKYFxwg==} engines: {node: ^4.5 || 6.* || >= 7.*} - ember-cli-mirage@3.0.4: - resolution: {integrity: sha512-JpfZJIrvUAcwOVQ44aAzlYSbGiO4/nqnVAbzAKU4kztqgYvYGBa27FX5WxfpIGZMBdnt6OKh78rsimChWo6f/Q==} - engines: {node: 16.* || >= 18} - peerDependencies: - '@ember-data/model': '*' - '@ember/test-helpers': '*' - ember-data: '*' - ember-qunit: '*' - ember-source: '>= 3.28.0' - miragejs: ^0.1.43 - peerDependenciesMeta: - '@ember-data/model': - optional: true - '@ember/test-helpers': - optional: true - ember-data: - optional: true - ember-qunit: - optional: true - ember-cli-normalize-entity-name@1.0.0: resolution: {integrity: sha512-rF4P1rW2P1gVX1ynZYPmuIf7TnAFDiJmIUFI1Xz16VYykUAyiOCme0Y22LeZq8rTzwBMiwBwoE3RO4GYWehXZA==} @@ -4861,6 +5151,16 @@ packages: resolution: {integrity: sha512-3slTltQV5ke53t3YVP2GYoswsQ6y+lhuVzKmt09tbEx91DapG8I/xa8W5OA0StvcQlavL3/vHrz/vCQEFs8bBA==} engines: {node: 14.* || 16.* || >= 18} + ember-engines@0.12.0: + resolution: {integrity: sha512-AsABgJpkrCoC2y/F1cNmcQI5Ia2VhlW2jyw5pAU1g3/XpeIJGV/4xRMbqNGwvs1KRxu78tW/ll20zVNl58N2jg==} + engines: {node: 16.* || 18.* || >= 20} + peerDependencies: + ember-engines-router-service: '>=0.5.0' + ember-source: ^3.28 || >= 4.0.0 + peerDependenciesMeta: + ember-engines-router-service: + optional: true + ember-eslint-parser@0.5.9: resolution: {integrity: sha512-IW4/3cEiFp49M2LiKyzi7VcT1egogOe8UxQ9eUKTooenC7Q4qNhzTD6rOZ8j51m8iJC+8hCzjbNCa3K4CN0Hhg==} engines: {node: '>=16.0.0'} @@ -4908,11 +5208,8 @@ packages: resolution: {integrity: sha512-uNmv1cPG/4qsac8oIf5txJ2FZ8p88LEpG4P3dNcjsJS98Y8hd0GPMFwVqpnzI78Lz7VYRGQWY4jnE4qm5R3j4g==} engines: {node: 12.* || 14.* || >= 16} - ember-inflector@4.0.3: - resolution: {integrity: sha512-E+NnmzybMRWn1JyEfDxY7arjOTJLIcGjcXnUxizgjD4TlvO1s3O65blZt+Xq2C2AFSPeqHLC6PXd6XHYM8BxdQ==} - engines: {node: 14.* || 16.* || >= 18} - peerDependencies: - ember-source: ^3.16.0 || ^4.0.0 || ^5.0.0 + ember-inflector@6.0.0: + resolution: {integrity: sha512-g6trqBhQHRwlq9bBmoyxhAl0tD0/CaTKK0xWPUgi3BfxFOgGG1bbiwAx+tjyiAkLzDqU+ihyjtT+sd41y6K1hA==} ember-inline-svg@1.0.1: resolution: {integrity: sha512-dRf6zRpFunXms8ba095vT4pppTItwYZGy9fjpd9zq5Eqx+97bukv+NffM+shtah1WHrMLj/j8XnxEalENAOiag==} @@ -4930,19 +5227,16 @@ packages: typescript: optional: true - ember-lifeline@7.0.0: - resolution: {integrity: sha512-2l51NzgH5vjN972zgbs+32rnXnnEFKB7qsSpJF+lBI4V5TG6DMy4SfowC72ZEuAtS58OVfwITbOO+RnM21EdpA==} - engines: {node: 16.* || >= 18} - peerDependencies: - '@ember/test-helpers': '>= 1.0.0' - peerDependenciesMeta: - '@ember/test-helpers': - optional: true - ember-load-initializers@2.1.2: resolution: {integrity: sha512-CYR+U/wRxLbrfYN3dh+0Tb6mFaxJKfdyz+wNql6cqTrA0BBi9k6J3AaKXj273TqvEpyyXegQFFkZEiuZdYtgJw==} engines: {node: 6.* || 8.* || >= 10.*} + ember-load-initializers@3.0.1: + resolution: {integrity: sha512-qV3vxJKw5+7TVDdtdLPy8PhVsh58MlK8jwzqh5xeOwJPNP7o0+BlhvwoIlLYTPzGaHdfjEIFCgVSyMRGd74E1g==} + engines: {node: '>= 18.*'} + peerDependencies: + ember-source: '>= 5' + ember-loading@2.0.0: resolution: {integrity: sha512-aGFZszIwmrIZ5XINv9TXQGWrfpKIiPwYiakEmRXx0Jvr5ZnUyKtCO84+FaKMyezrbDWsq0UjYqmdiqSAXhIkIA==} engines: {node: 12.* || 14.* || >= 16} @@ -4955,10 +5249,6 @@ packages: resolution: {integrity: sha512-bnaKF1LLKMkBNeDoetvIJ4vhwRPKIIumWr6dbVuW6W6p4QV8ZiO+GdF8J7mxDNlog9CeL9Z/7wam4YS86G8BYA==} engines: {node: 6.* || 8.* || >= 10.*} - ember-modifier@3.2.7: - resolution: {integrity: sha512-ezcPQhH8jUfcJQbbHji4/ZG/h0yyj1jRDknfYue/ypQS8fM8LrGcCMo0rjDZLzL1Vd11InjNs3BD7BdxFlzGoA==} - engines: {node: 12.* || >= 14} - ember-modifier@4.2.2: resolution: {integrity: sha512-pPYBAGyczX0hedGWQFQOEiL9s45KS9efKxJxUQkMLjQyh+1Uef1mcmAGsdw2KmvNupITkE/nXxmVO1kZ9tt3ag==} @@ -4980,14 +5270,6 @@ packages: ember-basic-dropdown: ^8.7.0 ember-concurrency: ^4.0.4 || ^5.1.0 - ember-power-select@8.7.1: - resolution: {integrity: sha512-TbTv+P3QnSZc2Diq74qSO732R0dCo9wtlNUILMpGu6KWvbuTCyIB5CqfL7BpRtf7Iy6gXijYCWvraDBr5xs1aQ==} - peerDependencies: - '@ember/test-helpers': ^2.9.4 || ^3.2.1 || ^4.0.2 || ^5.0.0 - '@glimmer/component': ^1.1.2 || ^2.0.0 - ember-basic-dropdown: ^8.5.1 - ember-concurrency: ^4.0.4 - ember-qunit@8.1.1: resolution: {integrity: sha512-nT+6s74j3BKNn+QQY/hINC3Xw3kn0NF0cU9zlgVQmCBWoyis1J24xWrY2LFOMThPmF6lHqcrUb5JwvBD4BXEXg==} peerDependencies: @@ -4995,14 +5277,15 @@ packages: ember-source: '>=4.0.0' qunit: ^2.13.0 - ember-resolver@12.0.1: - resolution: {integrity: sha512-U+ZBdbEHMhmvcZly1xhZKwqeH5/igjT93p9bbD6x+mQVg7hm4jrsQA4jsxHu3BqgL5MmqOVx0gtAuYEWV1x2MQ==} - engines: {node: 14.* || 16.* || >= 18} + ember-qunit@9.0.4: + resolution: {integrity: sha512-rv6gKvrdXdPBTdSZC5co82eIcDWWVR7RjafU/c+5TTz290oXhIHPoVuZbcO2F5RiAqkTW0jKzwkCP8y+2tCjFw==} peerDependencies: - ember-source: ^4.12.0 || >= 5.0.0 - peerDependenciesMeta: - ember-source: - optional: true + '@ember/test-helpers': '>=3.0.3' + qunit: ^2.13.0 + + ember-resolver@13.1.1: + resolution: {integrity: sha512-rA4RDuTm/F9AzYX2+g7EY3QWU48kyF9+Ck8IE8VQipnlwv2Q42kdRWiw7hfeQbRxx6XoSZCak6nzAG9ePd/+Ug==} + engines: {node: 14.* || 16.* || >= 18} ember-resources@7.0.4: resolution: {integrity: sha512-x/KJrfQCq8hrnOHDzdpSteUXdeqP4iAjeS4xWTxxtWDeP2KqOZYpAz4CvigzzBktWGZByPp+Y1Ysvlvl99SnFA==} @@ -5042,12 +5325,6 @@ packages: ember-stargate@0.6.0: resolution: {integrity: sha512-oNMZj+eS6a82aQ8rbxlCjQwg+mK0lAIOQEylSGqBXhivi9smXPYVVnpN0vrC5SALa9C0S1EOvA2qc/59a+0w9w==} - ember-style-modifier@4.4.0: - resolution: {integrity: sha512-gT1ckbhl1KSj5sWTo/8UChj98eZeE+mUmYoXw8VjwJgWP0wiTCibGZjVbC0WlIUd7umxuG61OQ/ivfF+sAiOEQ==} - peerDependencies: - '@ember/string': ^3.1.1 || ^4.0.0 - ember-source: ^3.28.0 || ^4.0.0 || >=5.0.0 - ember-style-modifier@4.5.1: resolution: {integrity: sha512-ReVGW9fZmDIsCWsuJGH4joiiHOv9aF9Yv4lUZUjXjQyR9SEAae7RWjZcjPgmEJwpN7yDSyy4PIwdJa0smT2A3g==} engines: {node: 18.* || >= 20, pnpm: '>= 10.*'} @@ -5156,6 +5433,10 @@ packages: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -5352,6 +5633,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -5475,6 +5759,15 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -5642,6 +5935,9 @@ packages: resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} + fs-extra@3.0.1: + resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==} + fs-extra@4.0.3: resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} @@ -5689,6 +5985,11 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -5979,6 +6280,10 @@ packages: resolution: {integrity: sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -6093,6 +6398,9 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -6323,6 +6631,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -6478,6 +6789,24 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -6529,6 +6858,9 @@ packages: jsonfile@2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + jsonfile@3.0.1: + resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==} + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -6873,6 +7205,10 @@ packages: resolution: {integrity: sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==} engines: {node: '>=8'} + mem@8.1.1: + resolution: {integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==} + engines: {node: '>=10'} + memory-streams@0.1.3: resolution: {integrity: sha512-qVQ/CjkMyMInPaaRMrwWNDvf6boRZXaT/DbQeMYcCWuXPEBf1v8qChOc9OlEVQp2uOvRXa1Qu30fLmKhY6NipA==} @@ -6880,6 +7216,10 @@ packages: resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -6956,6 +7296,10 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + mimic-fn@3.1.0: + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -7081,6 +7425,9 @@ packages: resolution: {integrity: sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==} engines: {node: '>= 0.8.0'} + mr-dep-walk@1.4.0: + resolution: {integrity: sha512-UaDUqkLsd0ep3jAx2+A7BIpfw8wKxhthDj3yPNLBnevipK1CUFJJiz24jRVLw18q7R2aEiRq13WwUBlnwfbQqQ==} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -7241,6 +7588,9 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nwsapi@2.2.22: + resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -7445,6 +7795,9 @@ packages: parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -7535,6 +7888,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -8048,6 +8405,11 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + route-recognizer@0.3.4: resolution: {integrity: sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==} @@ -8058,6 +8420,12 @@ packages: route-recognizer: ^0.3.4 rsvp: ^4.8.5 + rrweb-cssom@0.7.1: + resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + rsvp@3.2.1: resolution: {integrity: sha512-Rf4YVNYpKjZ6ASAmibcwTNciQ5Co5Ztq6iZPEykHpkoflnD/K5ryE/rHehFsTm4NJj8nKDhbi3eKBWGogmNnkg==} @@ -8137,6 +8505,10 @@ packages: sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + schema-utils@2.7.1: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} @@ -8168,6 +8540,10 @@ packages: engines: {node: '>=10'} hasBin: true + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} @@ -8356,6 +8732,10 @@ packages: resolution: {integrity: sha512-QU4fa0D6aSOmrT+7OHpUXw+jS84T0MLaQNtFs8xzLNe6Arj44Magd7WEbyVW5LNYoAPVV35aKs4azxIfVJrToQ==} deprecated: See https://github.com/lydell/source-map-url#deprecated + source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + source-map@0.4.4: resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==} engines: {node: '>=0.8.0'} @@ -8645,6 +9025,9 @@ packages: deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. hasBin: true + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + symlink-or-copy@1.3.1: resolution: {integrity: sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA==} @@ -8739,9 +9122,20 @@ packages: tiny-lr@2.0.0: resolution: {integrity: sha512-f6nh0VMRvhGx4KCeK1lQ/jaL0Zdb5WdR+Jk8q9OSUQnaSDxAEGH1fgqLZ+cMl5EW3F2MGnCsalBO1IsnnogW1Q==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + tippy.js@6.3.7: resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true + tmp@0.2.5: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} @@ -8761,9 +9155,17 @@ packages: resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} engines: {node: '>=14.16'} + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + tracked-built-ins@4.0.0: resolution: {integrity: sha512-0Jl43A1SDZd+yYCJvXfgDSn4Wk/zcawkyFTBPqOETU5UJRngnVEnQ8oOjawqPRg6qja3sKjIQ8z6X9xJzcUTUA==} @@ -9042,9 +9444,53 @@ packages: vfile@4.2.1: resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + vite@6.4.1: + resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + walk-sync@0.2.7: resolution: {integrity: sha512-OH8GdRMowEFr0XSHQeX5fGweO6zSVHo7bG/0yJQx6LAj9Oukz0C8heI3/FYectT66gY0IPGe89kOvU410/UNpg==} @@ -9086,6 +9532,10 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} @@ -9108,6 +9558,18 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -9190,14 +9652,33 @@ packages: utf-8-validate: optional: true + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xdg-basedir@4.0.0: resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} engines: {node: '>=8'} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + xmlbuilder@15.1.1: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -9257,6 +9738,14 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + '@asamuzakjp/css-color@3.2.0': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 10.4.3 + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -9500,6 +9989,11 @@ snapshots: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 @@ -9963,6 +10457,8 @@ snapshots: '@babel/runtime@7.27.6': {} + '@babel/runtime@7.28.4': {} + '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 @@ -10109,12 +10605,32 @@ snapshots: '@colors/colors@1.5.0': optional: true + '@csstools/color-helpers@5.1.0': {} + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1)': dependencies: '@csstools/css-tokenizer': 2.4.1 + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-tokenizer@2.4.1': {} + '@csstools/css-tokenizer@3.0.4': {} + '@csstools/media-query-list-parser@2.1.13(@csstools/css-parser-algorithms@2.7.1(@csstools/css-tokenizer@2.4.1))(@csstools/css-tokenizer@2.4.1)': dependencies: '@csstools/css-parser-algorithms': 2.7.1(@csstools/css-tokenizer@2.4.1) @@ -10331,7 +10847,7 @@ snapshots: debug: 4.4.1 extract-zip: 2.0.1 filenamify: 4.3.0 - fs-extra: 11.3.0 + fs-extra: 11.3.2 galactus: 1.0.0 get-package-info: 1.0.0 junk: 3.1.0 @@ -10386,13 +10902,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@ember-data/adapter@5.3.13(f79584e2a43e7fa7f2fa6f50769f3d4f)': + '@ember-data/adapter@5.3.13(7a51331a0920f630676c8e22d85ff6c7)': dependencies: - '@ember-data/legacy-compat': 5.3.13(d093e34993e2152be38be09e6e7bf597) - '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/legacy-compat': 5.3.13(31b5488ac9d0025d272f8d4f509f52f4) + '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-cli-path-utils: 1.0.0 @@ -10403,13 +10919,13 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/debug@5.3.13(3df0b72a55d456c6198ca2b3255a76b8)': + '@ember-data/debug@5.3.13(c42cc26afc7ceb0b48b7a2cf91fefa61)': dependencies: - '@ember-data/model': 5.3.13(7234f3c6c8908f8ca3320dc27c62478e) - '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/model': 5.3.13(56d2d2dd12edb428a55c9aaf90fbf94c) + '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -10417,10 +10933,10 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/graph@5.3.13(62aa5be71c8e28cbbe1a1ab9964e415b)': + '@ember-data/graph@5.3.13(0710080a6a021c5f2f3a73f31e0b5dd8)': dependencies: - '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -10428,12 +10944,12 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/json-api@5.3.13(52e030c892a5d4807e397bddac9ddd14)': + '@ember-data/json-api@5.3.13(07524c7a1b7d83e7e8d38d70ef605af9)': dependencies: - '@ember-data/graph': 5.3.13(62aa5be71c8e28cbbe1a1ab9964e415b) - '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@ember-data/graph': 5.3.13(0710080a6a021c5f2f3a73f31e0b5dd8) + '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) fuse.js: 7.1.0 @@ -10442,31 +10958,31 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/legacy-compat@5.3.13(d093e34993e2152be38be09e6e7bf597)': + '@ember-data/legacy-compat@5.3.13(31b5488ac9d0025d272f8d4f509f52f4)': dependencies: '@ember-data/request': 5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)) - '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember/test-waiters': 4.1.0(@glint/template@1.5.2) - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) optionalDependencies: - '@ember-data/graph': 5.3.13(62aa5be71c8e28cbbe1a1ab9964e415b) - '@ember-data/json-api': 5.3.13(52e030c892a5d4807e397bddac9ddd14) + '@ember-data/graph': 5.3.13(0710080a6a021c5f2f3a73f31e0b5dd8) + '@ember-data/json-api': 5.3.13(07524c7a1b7d83e7e8d38d70ef605af9) transitivePeerDependencies: - '@glint/template' - supports-color - '@ember-data/model@5.3.13(7234f3c6c8908f8ca3320dc27c62478e)': + '@ember-data/model@5.3.13(56d2d2dd12edb428a55c9aaf90fbf94c)': dependencies: - '@ember-data/legacy-compat': 5.3.13(d093e34993e2152be38be09e6e7bf597) - '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/legacy-compat': 5.3.13(31b5488ac9d0025d272f8d4f509f52f4) + '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember-data/tracking': 5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-cli-string-utils: 1.1.0 @@ -10474,21 +10990,21 @@ snapshots: ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) inflection: 3.0.2 optionalDependencies: - '@ember-data/graph': 5.3.13(62aa5be71c8e28cbbe1a1ab9964e415b) - '@ember-data/json-api': 5.3.13(52e030c892a5d4807e397bddac9ddd14) + '@ember-data/graph': 5.3.13(0710080a6a021c5f2f3a73f31e0b5dd8) + '@ember-data/json-api': 5.3.13(07524c7a1b7d83e7e8d38d70ef605af9) transitivePeerDependencies: - '@glint/template' - supports-color - '@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))': + '@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))': dependencies: - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) optionalDependencies: '@ember/string': 4.0.1 - ember-inflector: 4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + ember-inflector: 6.0.0(@babel/core@7.27.1) transitivePeerDependencies: - '@glint/template' - supports-color @@ -10496,7 +11012,7 @@ snapshots: '@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))': dependencies: '@ember/test-waiters': 4.1.0(@glint/template@1.5.2) - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) transitivePeerDependencies: @@ -10505,13 +11021,13 @@ snapshots: '@ember-data/rfc395-data@0.0.4': {} - '@ember-data/serializer@5.3.13(f79584e2a43e7fa7f2fa6f50769f3d4f)': + '@ember-data/serializer@5.3.13(7a51331a0920f630676c8e22d85ff6c7)': dependencies: - '@ember-data/legacy-compat': 5.3.13(d093e34993e2152be38be09e6e7bf597) - '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/legacy-compat': 5.3.13(31b5488ac9d0025d272f8d4f509f52f4) + '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-cli-path-utils: 1.0.0 @@ -10522,12 +11038,12 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/store@5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))': + '@ember-data/store@5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))': dependencies: '@ember-data/request': 5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)) - '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember-data/tracking': 5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -10537,7 +11053,7 @@ snapshots: '@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))': dependencies: - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) '@warp-drive/core-types': 0.0.3(@glint/template@1.5.2) ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) @@ -10570,6 +11086,18 @@ snapshots: - '@babel/core' - supports-color + '@ember/render-modifiers@3.0.0(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))': + dependencies: + '@babel/core': 7.27.1 + '@embroider/macros': 1.19.4(@glint/template@1.5.2) + ember-cli-babel: 8.2.0(@babel/core@7.27.1) + ember-modifier-manager-polyfill: 1.2.0(@babel/core@7.27.1) + ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) + optionalDependencies: + '@glint/template': 1.5.2 + transitivePeerDependencies: + - supports-color + '@ember/string@4.0.1': {} '@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2)': @@ -10611,6 +11139,97 @@ snapshots: transitivePeerDependencies: - supports-color + '@embroider/compat@4.1.10(@embroider/core@4.2.8(@glint/template@1.5.2))(@glint/template@1.5.2)': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/core': 7.27.1 + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-runtime': 7.27.1(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/runtime': 7.28.4 + '@babel/traverse': 7.27.1 + '@embroider/core': 4.2.8(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) + '@types/babel__code-frame': 7.0.6 + assert-never: 1.4.0 + babel-import-util: 3.0.1 + babel-plugin-debug-macros: 2.0.0(@babel/core@7.27.1) + babel-plugin-ember-template-compilation: 3.0.1 + babel-plugin-ember-template-compilation-2: babel-plugin-ember-template-compilation@2.4.1 + babel-plugin-syntax-dynamic-import: 6.18.0 + babylon: 6.18.0 + bind-decorator: 1.0.11 + broccoli: 3.5.2 + broccoli-concat: 4.2.5 + broccoli-file-creator: 2.1.1 + broccoli-funnel: 3.0.8 + broccoli-merge-trees: 4.2.0 + broccoli-persistent-filter: 3.1.3 + broccoli-plugin: 4.0.7 + broccoli-source: 3.0.1 + chalk: 4.1.2 + debug: 4.4.1 + fast-sourcemap-concat: 2.1.1 + fs-extra: 9.1.0 + fs-tree-diff: 2.0.1 + jsdom: 26.1.0 + lodash: 4.17.21 + pkg-up: 3.1.0 + resolve: 1.22.10 + resolve-package-path: 4.0.3 + resolve.exports: 2.0.3 + semver: 7.7.2 + symlink-or-copy: 1.3.1 + tree-sync: 2.1.0 + typescript-memoize: 1.1.1 + walk-sync: 3.0.0 + transitivePeerDependencies: + - '@glint/template' + - bufferutil + - canvas + - supports-color + - utf-8-validate + + '@embroider/config-meta-loader@1.0.0': {} + + '@embroider/core@4.2.8(@glint/template@1.5.2)': + dependencies: + '@babel/core': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/traverse': 7.27.1 + '@embroider/macros': 1.19.4(@glint/template@1.5.2) + '@embroider/reverse-exports': 0.2.0 + '@embroider/shared-internals': 3.0.1 + assert-never: 1.4.0 + babel-plugin-ember-template-compilation: 3.0.1 + broccoli-node-api: 1.7.0 + broccoli-persistent-filter: 3.1.3 + broccoli-plugin: 4.0.7 + broccoli-source: 3.0.1 + debug: 4.4.1 + escape-string-regexp: 4.0.0 + fast-sourcemap-concat: 2.1.1 + fs-extra: 9.1.0 + fs-tree-diff: 2.0.1 + handlebars: 4.7.8 + js-string-escape: 1.0.1 + jsdom: 25.0.1 + lodash: 4.17.21 + resolve: 1.22.10 + resolve-package-path: 4.0.3 + resolve.exports: 2.0.3 + semver: 7.7.2 + typescript-memoize: 1.1.1 + walk-sync: 3.0.0 + transitivePeerDependencies: + - '@glint/template' + - bufferutil + - canvas + - supports-color + - utf-8-validate + '@embroider/macros@1.18.0(@glint/template@1.5.2)': dependencies: '@embroider/shared-internals': 3.0.0 @@ -10641,6 +11260,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@embroider/macros@1.19.4(@glint/template@1.5.2)': + dependencies: + '@embroider/shared-internals': 3.0.1 + assert-never: 1.4.0 + babel-import-util: 3.0.1 + ember-cli-babel: 7.26.11 + find-up: 5.0.0 + lodash: 4.17.21 + resolve: 1.22.10 + semver: 7.7.2 + optionalDependencies: + '@glint/template': 1.5.2 + transitivePeerDependencies: + - supports-color + + '@embroider/reverse-exports@0.2.0': + dependencies: + mem: 8.1.1 + resolve.exports: 2.0.3 + '@embroider/shared-internals@2.9.0': dependencies: babel-import-util: 2.1.1 @@ -10710,6 +11349,34 @@ snapshots: transitivePeerDependencies: - supports-color + '@embroider/vite@1.4.2(@embroider/core@4.2.8(@glint/template@1.5.2))(@glint/template@1.5.2)(rollup@4.53.3)(vite@6.4.1(@types/node@22.15.17)(jiti@2.4.2)(sass@1.88.0)(terser@5.39.1)(yaml@2.5.1))': + dependencies: + '@babel/core': 7.27.1 + '@embroider/core': 4.2.8(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) + '@embroider/reverse-exports': 0.2.0 + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) + assert-never: 1.4.0 + browserslist: 4.24.5 + browserslist-to-esbuild: 2.1.1(browserslist@4.24.5) + chalk: 5.6.2 + content-tag: 3.1.3 + debug: 4.4.1 + fast-glob: 3.3.3 + fs-extra: 10.1.0 + jsdom: 25.0.1 + send: 0.18.0 + source-map-url: 0.4.1 + terser: 5.39.1 + vite: 6.4.1(@types/node@22.15.17)(jiti@2.4.2)(sass@1.88.0)(terser@5.39.1)(yaml@2.5.1) + transitivePeerDependencies: + - '@glint/template' + - bufferutil + - canvas + - rollup + - supports-color + - utf-8-validate + '@esbuild/aix-ppc64@0.25.9': optional: true @@ -11090,7 +11757,7 @@ snapshots: '@handlebars/parser@2.0.0': {} - '@hashicorp/design-system-components@4.24.1(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))': + '@hashicorp/design-system-components@5.0.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-engines@0.12.0(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))': dependencies: '@codemirror/commands': 6.8.1 '@codemirror/lang-go': 6.0.1 @@ -11104,44 +11771,43 @@ snapshots: '@codemirror/lint': 6.8.5 '@codemirror/state': 6.5.2 '@codemirror/view': 6.36.8 - '@ember/render-modifiers': 2.1.0(@babel/core@7.27.1)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember/render-modifiers': 3.0.0(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember/string': 4.0.1 '@ember/test-waiters': 3.1.0 '@embroider/addon-shim': 1.10.0 - '@embroider/macros': 1.19.3(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@embroider/util': 1.13.4(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@floating-ui/dom': 1.7.0 '@hashicorp/design-system-tokens': 3.0.0 - '@hashicorp/flight-icons': 3.14.0 + '@hashicorp/flight-icons': 4.0.0 '@lezer/highlight': 1.2.1 '@nullvoxpopuli/ember-composable-helpers': 5.3.0(@babel/core@7.27.1) clipboard-polyfill: 4.1.1 codemirror-lang-hcl: 0.0.0-beta.2 decorator-transforms: 2.3.0(@babel/core@7.27.1) - ember-a11y-refocus: 4.1.4 - ember-cli-sass: 11.0.1 + ember-a11y-refocus: 5.1.0(@babel/core@7.27.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + ember-basic-dropdown: 8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) ember-concurrency: 4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2) ember-element-helper: 0.8.8 ember-focus-trap: 1.1.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - ember-get-config: 2.1.1(@glint/template@1.5.2) ember-modifier: 4.2.2(@babel/core@7.27.1) - ember-power-select: 8.7.1(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-concurrency@4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + ember-power-select: 8.12.0(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-concurrency@4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) ember-stargate: 0.6.0(@babel/core@7.27.1)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - ember-style-modifier: 4.4.0(@babel/core@7.27.1)(@ember/string@4.0.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + ember-style-modifier: 4.5.1(@babel/core@7.27.1)(@ember/string@4.0.1) ember-truth-helpers: 4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) luxon: 3.6.1 prismjs: 1.30.0 - sass: 1.88.0 tabbable: 6.2.0 tippy.js: 6.3.7 tracked-built-ins: 4.0.0(@babel/core@7.27.1) + optionalDependencies: + ember-engines: 0.12.0(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) transitivePeerDependencies: - '@babel/core' - '@ember/test-helpers' - '@glimmer/component' - '@glint/environment-ember-loose' - '@glint/template' - - ember-basic-dropdown - ember-source - supports-color @@ -11163,7 +11829,7 @@ snapshots: '@hashicorp/flight-icons@3.10.0': {} - '@hashicorp/flight-icons@3.14.0': {} + '@hashicorp/flight-icons@4.0.0': {} '@humanwhocodes/config-array@0.13.0': dependencies: @@ -11505,6 +12171,90 @@ snapshots: dependencies: prettier: 3.6.2 + '@rollup/plugin-babel@6.1.0(@babel/core@7.27.1)(rollup@4.53.3)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) + optionalDependencies: + rollup: 4.53.3 + transitivePeerDependencies: + - supports-color + + '@rollup/pluginutils@5.3.0(rollup@4.53.3)': + dependencies: + '@types/estree': 1.0.7 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.53.3 + + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true + + '@rollup/rollup-android-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-x64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.3': + optional: true + '@scalvert/ember-setup-middleware-reporter@0.1.1': dependencies: '@types/fs-extra': 9.0.13 @@ -11577,6 +12327,8 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} + '@types/babel__code-frame@7.0.6': {} + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 @@ -11620,6 +12372,8 @@ snapshots: '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} + '@types/express-serve-static-core@4.19.6': dependencies: '@types/node': 22.15.17 @@ -11795,7 +12549,7 @@ snapshots: '@warp-drive/build-config@0.0.3(@glint/template@1.5.2)': dependencies: '@embroider/addon-shim': 1.10.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) babel-import-util: 2.1.1 semver: 7.7.2 transitivePeerDependencies: @@ -11804,7 +12558,7 @@ snapshots: '@warp-drive/core-types@0.0.3(@glint/template@1.5.2)': dependencies: - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@warp-drive/build-config': 0.0.3(@glint/template@1.5.2) transitivePeerDependencies: - '@glint/template' @@ -11915,6 +12669,8 @@ snapshots: dependencies: acorn: 8.15.0 + acorn@5.7.4: {} + acorn@8.14.1: {} acorn@8.15.0: {} @@ -11963,6 +12719,10 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + amd-name-resolver@0.0.6: + dependencies: + ensure-posix-path: 1.1.1 + amd-name-resolver@1.3.1: dependencies: ensure-posix-path: 1.1.1 @@ -12168,6 +12928,8 @@ snapshots: schema-utils: 2.7.1 webpack: 5.99.8(esbuild@0.25.9) + babel-plugin-compact-reexports@1.1.0: {} + babel-plugin-debug-macros@0.2.0(@babel/core@7.27.1): dependencies: '@babel/core': 7.27.1 @@ -12178,6 +12940,12 @@ snapshots: '@babel/core': 7.27.1 semver: 5.7.2 + babel-plugin-debug-macros@2.0.0(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 + babel-import-util: 2.1.1 + semver: 7.7.2 + babel-plugin-ember-data-packages-polyfill@0.1.2: dependencies: '@ember-data/rfc395-data': 0.0.4 @@ -12191,6 +12959,12 @@ snapshots: '@glimmer/syntax': 0.94.9 babel-import-util: 3.0.1 + babel-plugin-ember-template-compilation@3.0.1: + dependencies: + '@glimmer/syntax': 0.94.9 + babel-import-util: 3.0.1 + import-meta-resolve: 4.2.0 + babel-plugin-htmlbars-inline-precompile@3.2.0: {} babel-plugin-htmlbars-inline-precompile@5.3.1: @@ -12253,6 +13027,8 @@ snapshots: babel-plugin-syntax-dynamic-import@6.18.0: {} + babylon@6.18.0: {} + backbone@1.6.1: dependencies: underscore: 1.13.7 @@ -12283,6 +13059,8 @@ snapshots: binaryextensions@2.3.0: {} + bind-decorator@1.0.11: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -12461,6 +13239,20 @@ snapshots: transitivePeerDependencies: - supports-color + broccoli-dependency-funnel@2.1.2: + dependencies: + broccoli-plugin: 1.3.1 + fs-tree-diff: 0.5.9 + heimdalljs: 0.2.6 + heimdalljs-logger: 0.1.10 + mkdirp: 0.5.6 + mr-dep-walk: 1.4.0 + path-posix: 1.0.0 + rimraf: 2.7.1 + symlink-or-copy: 1.3.1 + transitivePeerDependencies: + - supports-color + broccoli-file-creator@2.1.1: dependencies: broccoli-plugin: 1.3.1 @@ -12757,6 +13549,11 @@ snapshots: transitivePeerDependencies: - supports-color + browserslist-to-esbuild@2.1.1(browserslist@4.24.5): + dependencies: + browserslist: 4.24.5 + meow: 13.2.0 + browserslist@4.24.5: dependencies: caniuse-lite: 1.0.30001718 @@ -12892,6 +13689,8 @@ snapshots: chalk@5.3.0: {} + chalk@5.6.2: {} + character-entities-legacy@1.1.4: {} character-entities@1.2.4: {} @@ -13276,12 +14075,22 @@ snapshots: dependencies: css-tree: 1.0.0-alpha.29 + cssstyle@4.6.0: + dependencies: + '@asamuzakjp/css-color': 3.2.0 + rrweb-cssom: 0.8.0 + csstype@3.1.3: {} dag-map@2.0.2: {} data-uri-to-buffer@6.0.2: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -13506,14 +14315,18 @@ snapshots: electron-to-chromium@1.5.152: {} - ember-a11y-refocus@4.1.4: + ember-a11y-refocus@5.0.0(@babel/core@7.27.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): dependencies: - ember-cli-babel: 7.26.11 - ember-cli-htmlbars: 6.3.0 + '@embroider/addon-shim': 1.10.0 + '@glimmer/component': 2.0.0 + '@glimmer/tracking': 1.1.2 + decorator-transforms: 2.3.0(@babel/core@7.27.1) + ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) transitivePeerDependencies: + - '@babel/core' - supports-color - ember-a11y-refocus@5.0.0(@babel/core@7.27.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): + ember-a11y-refocus@5.1.0(@babel/core@7.27.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): dependencies: '@embroider/addon-shim': 1.10.0 '@glimmer/component': 2.0.0 @@ -13548,7 +14361,7 @@ snapshots: ember-arg-types@1.1.0(@glint/template@1.5.2)(webpack@5.99.8(esbuild@0.25.9)): dependencies: - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) ember-auto-import: 2.10.0(@glint/template@1.5.2)(webpack@5.99.8(esbuild@0.25.9)) ember-cli-babel: 7.26.11 ember-cli-typescript: 5.3.0 @@ -13559,6 +14372,17 @@ snapshots: - supports-color - webpack + ember-asset-loader@1.0.0: + dependencies: + broccoli-caching-writer: 3.0.3 + broccoli-funnel: 3.0.8 + broccoli-merge-trees: 4.2.0 + ember-cli-babel: 7.26.11 + fs-extra: 10.1.0 + walk-sync: 3.0.0 + transitivePeerDependencies: + - supports-color + ember-assign-helper@0.5.1: dependencies: '@embroider/addon-shim': 1.10.0 @@ -13635,13 +14459,16 @@ snapshots: transitivePeerDependencies: - supports-color - ember-can@4.2.0(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): + ember-can@8.0.0(@babel/core@7.27.1)(@ember/string@4.0.1)(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-resolver@13.1.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): dependencies: - ember-cli-babel: 7.26.11 - ember-cli-htmlbars: 6.3.0 - ember-inflector: 4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember/string': 4.0.1 + '@embroider/addon-shim': 1.10.0 + decorator-transforms: 2.3.0(@babel/core@7.27.1) + ember-inflector: 6.0.0(@babel/core@7.27.1) + ember-resolver: 13.1.1 + ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) transitivePeerDependencies: - - ember-source + - '@babel/core' - supports-color ember-cli-babel-plugin-helpers@1.1.1: {} @@ -13851,29 +14678,6 @@ snapshots: ember-cli-lodash-subset@2.0.1: {} - ember-cli-mirage@3.0.4(4aae64382352ae0e9635b2848df9b5e9): - dependencies: - '@babel/core': 7.27.1 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) - broccoli-file-creator: 2.1.1 - broccoli-funnel: 3.0.8 - broccoli-merge-trees: 4.2.0 - ember-auto-import: 2.10.0(@glint/template@1.5.2)(webpack@5.99.8(esbuild@0.25.9)) - ember-cli-babel: 8.2.0(@babel/core@7.27.1) - ember-get-config: 2.1.1(@glint/template@1.5.2) - ember-inflector: 4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) - miragejs: 0.1.48 - optionalDependencies: - '@ember-data/model': 5.3.13(7234f3c6c8908f8ca3320dc27c62478e) - '@ember/test-helpers': 5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2) - ember-data: 5.3.13(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) - ember-qunit: 8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1) - transitivePeerDependencies: - - '@glint/template' - - supports-color - - webpack - ember-cli-normalize-entity-name@1.0.0: dependencies: silent-error: 1.1.1 @@ -13885,7 +14689,7 @@ snapshots: ember-cli-preprocess-registry@5.0.1: dependencies: broccoli-funnel: 3.0.8 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -13951,7 +14755,7 @@ snapshots: dependencies: ansi-to-html: 0.6.15 broccoli-stew: 3.0.0 - debug: 4.4.0 + debug: 4.4.1 execa: 4.1.0 fs-extra: 9.1.0 resolve: 1.22.10 @@ -14196,18 +15000,18 @@ snapshots: transitivePeerDependencies: - supports-color - ember-data@5.3.13(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1): + ember-data@5.3.13(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1): dependencies: - '@ember-data/adapter': 5.3.13(f79584e2a43e7fa7f2fa6f50769f3d4f) - '@ember-data/debug': 5.3.13(3df0b72a55d456c6198ca2b3255a76b8) - '@ember-data/graph': 5.3.13(62aa5be71c8e28cbbe1a1ab9964e415b) - '@ember-data/json-api': 5.3.13(52e030c892a5d4807e397bddac9ddd14) - '@ember-data/legacy-compat': 5.3.13(d093e34993e2152be38be09e6e7bf597) - '@ember-data/model': 5.3.13(7234f3c6c8908f8ca3320dc27c62478e) + '@ember-data/adapter': 5.3.13(7a51331a0920f630676c8e22d85ff6c7) + '@ember-data/debug': 5.3.13(c42cc26afc7ceb0b48b7a2cf91fefa61) + '@ember-data/graph': 5.3.13(0710080a6a021c5f2f3a73f31e0b5dd8) + '@ember-data/json-api': 5.3.13(07524c7a1b7d83e7e8d38d70ef605af9) + '@ember-data/legacy-compat': 5.3.13(31b5488ac9d0025d272f8d4f509f52f4) + '@ember-data/model': 5.3.13(56d2d2dd12edb428a55c9aaf90fbf94c) '@ember-data/request': 5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)) - '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@ember-data/serializer': 5.3.13(f79584e2a43e7fa7f2fa6f50769f3d4f) - '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/request-utils': 5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@ember-data/serializer': 5.3.13(7a51331a0920f630676c8e22d85ff6c7) + '@ember-data/store': 5.3.13(@ember-data/request-utils@5.3.13(@ember/string@4.0.1)(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-inflector@6.0.0(@babel/core@7.27.1))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@ember-data/request@5.3.13(@ember/test-waiters@4.1.0(@glint/template@1.5.2))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2)))(@ember-data/tracking@5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember-data/tracking': 5.3.13(@glint/template@1.5.2)(@warp-drive/core-types@0.0.3(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) '@ember/edition-utils': 1.2.0 '@embroider/macros': 1.18.0(@glint/template@1.5.2) @@ -14252,6 +15056,32 @@ snapshots: transitivePeerDependencies: - supports-color + ember-engines@0.12.0(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): + dependencies: + '@babel/core': 7.27.1 + '@embroider/macros': 1.19.4(@glint/template@1.5.2) + amd-name-resolver: 1.3.1 + babel-plugin-compact-reexports: 1.1.0 + broccoli-babel-transpiler: 7.8.1 + broccoli-concat: 4.2.5 + broccoli-debug: 0.6.5 + broccoli-dependency-funnel: 2.1.2 + broccoli-file-creator: 2.1.1 + broccoli-funnel: 3.0.8 + broccoli-merge-trees: 4.2.0 + calculate-cache-key-for-tree: 2.0.0 + ember-asset-loader: 1.0.0 + ember-cli-babel: 7.26.11 + ember-cli-htmlbars: 6.3.0 + ember-cli-preprocess-registry: 5.0.1 + ember-cli-string-utils: 1.1.0 + ember-cli-version-checker: 5.1.2 + ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) + lodash: 4.17.21 + transitivePeerDependencies: + - '@glint/template' + - supports-color + ember-eslint-parser@0.5.9(@babel/core@7.27.1)(@typescript-eslint/parser@8.34.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1): dependencies: '@babel/core': 7.27.1 @@ -14291,6 +15121,30 @@ snapshots: - supports-color - webpack + ember-exam@8.0.0(@glint/template@1.5.2)(ember-qunit@9.0.4(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(qunit@2.24.1))(qunit@2.24.1)(webpack@5.99.8(esbuild@0.25.9)): + dependencies: + '@embroider/macros': 1.18.0(@glint/template@1.5.2) + chalk: 4.1.2 + cli-table3: 0.6.5 + debug: 4.4.0 + ember-auto-import: 2.10.0(@glint/template@1.5.2)(webpack@5.99.8(esbuild@0.25.9)) + ember-cli-babel: 7.26.11 + ember-cli-version-checker: 5.1.2 + execa: 4.1.0 + fs-extra: 10.1.0 + js-yaml: 4.1.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.7.2 + silent-error: 1.1.1 + optionalDependencies: + ember-qunit: 9.0.4(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(qunit@2.24.1) + qunit: 2.24.1 + transitivePeerDependencies: + - '@glint/template' + - supports-color + - webpack + ember-feature-flags@7.0.0(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(webpack@5.99.8(esbuild@0.25.9)): dependencies: '@babel/core': 7.27.1 @@ -14324,17 +15178,18 @@ snapshots: ember-get-config@2.1.1(@glint/template@1.5.2): dependencies: - '@embroider/macros': 1.18.0(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) ember-cli-babel: 7.26.11 transitivePeerDependencies: - '@glint/template' - supports-color - ember-inflector@4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): + ember-inflector@6.0.0(@babel/core@7.27.1): dependencies: - ember-cli-babel: 7.26.11 - ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) + '@embroider/addon-shim': 1.10.0 + decorator-transforms: 2.3.0(@babel/core@7.27.1) transitivePeerDependencies: + - '@babel/core' - supports-color ember-inline-svg@1.0.1: @@ -14379,14 +15234,6 @@ snapshots: - supports-color - webpack - ember-lifeline@7.0.0(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2)): - dependencies: - '@embroider/addon-shim': 1.10.0 - optionalDependencies: - '@ember/test-helpers': 5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2) - transitivePeerDependencies: - - supports-color - ember-load-initializers@2.1.2(@babel/core@7.27.1): dependencies: ember-cli-babel: 7.26.11 @@ -14395,6 +15242,10 @@ snapshots: - '@babel/core' - supports-color + ember-load-initializers@3.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): + dependencies: + ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) + ember-loading@2.0.0(patch_hash=7d97519ce1955a5130edf885afb18c05d7253e2055b1b60cdcf6efc64cbdbff3)(@babel/core@7.27.1)(@glint/template@1.5.2): dependencies: ember-cli-babel: 7.26.11 @@ -14426,17 +15277,6 @@ snapshots: - '@babel/core' - supports-color - ember-modifier@3.2.7(@babel/core@7.27.1): - dependencies: - ember-cli-babel: 7.26.11 - ember-cli-normalize-entity-name: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-typescript: 5.3.0 - ember-compatibility-helpers: 1.2.7(@babel/core@7.27.1) - transitivePeerDependencies: - - '@babel/core' - - supports-color - ember-modifier@4.2.2(@babel/core@7.27.1): dependencies: '@embroider/addon-shim': 1.10.0 @@ -14482,51 +15322,40 @@ snapshots: - ember-source - supports-color - ember-power-select@8.7.1(@babel/core@7.27.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-basic-dropdown@8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))))(ember-concurrency@4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2))(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): + ember-qunit@8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1): dependencies: '@ember/test-helpers': 5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2) '@embroider/addon-shim': 1.10.0 - '@embroider/util': 1.13.4(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - '@glimmer/component': 2.0.0 - decorator-transforms: 2.3.0(@babel/core@7.27.1) - ember-assign-helper: 0.5.1 - ember-basic-dropdown: 8.8.0(@babel/core@7.27.1)(@ember/string@4.0.1)(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glimmer/component@2.0.0)(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) - ember-concurrency: 4.0.4(@babel/core@7.27.1)(@glint/template@1.5.2) - ember-lifeline: 7.0.0(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2)) - ember-modifier: 4.2.2(@babel/core@7.27.1) - ember-truth-helpers: 4.0.3(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))) + '@embroider/macros': 1.18.0(@glint/template@1.5.2) + ember-cli-test-loader: 3.1.0 + ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) + qunit: 2.24.1 + qunit-theme-ember: 1.0.0 transitivePeerDependencies: - - '@babel/core' - - '@glint/environment-ember-loose' - '@glint/template' - - ember-source - supports-color - ember-qunit@8.1.1(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)))(qunit@2.24.1): + ember-qunit@9.0.4(@ember/test-helpers@5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2))(@glint/template@1.5.2)(qunit@2.24.1): dependencies: '@ember/test-helpers': 5.2.2(@babel/core@7.27.1)(@glint/template@1.5.2) '@embroider/addon-shim': 1.10.0 - '@embroider/macros': 1.18.0(@glint/template@1.5.2) - ember-cli-test-loader: 3.1.0 - ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) + '@embroider/macros': 1.19.3(@glint/template@1.5.2) qunit: 2.24.1 qunit-theme-ember: 1.0.0 transitivePeerDependencies: - '@glint/template' - supports-color - ember-resolver@12.0.1(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): + ember-resolver@13.1.1: dependencies: ember-cli-babel: 7.26.11 - optionalDependencies: - ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) transitivePeerDependencies: - supports-color ember-resources@7.0.4(@glimmer/component@2.0.0)(@glint/template@1.5.2): dependencies: '@embroider/addon-shim': 1.10.0 - '@embroider/macros': 1.19.3(@glint/template@1.5.2) + '@embroider/macros': 1.19.4(@glint/template@1.5.2) '@glint/template': 1.5.2 optionalDependencies: '@glimmer/component': 2.0.0 @@ -14630,18 +15459,6 @@ snapshots: - ember-source - supports-color - ember-style-modifier@4.4.0(@babel/core@7.27.1)(@ember/string@4.0.1)(ember-source@5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9))): - dependencies: - '@ember/string': 4.0.1 - '@embroider/addon-shim': 1.10.0 - csstype: 3.1.3 - decorator-transforms: 2.3.0(@babel/core@7.27.1) - ember-modifier: 4.2.2(@babel/core@7.27.1) - ember-source: 5.12.0(@glimmer/component@2.0.0)(@glint/template@1.5.2)(rsvp@4.8.5)(webpack@5.99.8(esbuild@0.25.9)) - transitivePeerDependencies: - - '@babel/core' - - supports-color - ember-style-modifier@4.5.1(@babel/core@7.27.1)(@ember/string@4.0.1): dependencies: '@ember/string': 4.0.1 @@ -14829,6 +15646,8 @@ snapshots: entities@3.0.1: {} + entities@6.0.1: {} + env-paths@2.2.1: {} environment@1.1.0: {} @@ -15129,6 +15948,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@2.0.2: {} + esutils@2.0.3: {} etag@1.8.1: {} @@ -15313,6 +16134,10 @@ snapshots: dependencies: pend: 1.2.0 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fflate@0.8.2: {} figures@2.0.0: @@ -15532,6 +16357,12 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-extra@3.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 3.0.1 + universalify: 0.1.2 + fs-extra@4.0.3: dependencies: graceful-fs: 4.2.11 @@ -15617,6 +16448,9 @@ snapshots: fsevents@2.3.2: optional: true + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} function.prototype.name@1.1.8: @@ -15977,6 +16811,10 @@ snapshots: dependencies: lru-cache: 7.18.3 + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + html-escaper@2.0.2: {} html-tags@3.3.1: {} @@ -16070,7 +16908,6 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - optional: true iconv-lite@0.7.0: dependencies: @@ -16097,6 +16934,8 @@ snapshots: import-lazy@4.0.0: {} + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} include-path-searcher@0.1.0: {} @@ -16338,6 +17177,8 @@ snapshots: is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -16483,6 +17324,61 @@ snapshots: jsbn@1.1.0: {} + jsdom@25.0.1: + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + decimal.js: 10.5.0 + form-data: 4.0.4 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.22 + parse5: 7.3.0 + rrweb-cssom: 0.7.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.18.3 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsdom@26.1.0: + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + decimal.js: 10.5.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.22 + parse5: 7.3.0 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.18.3 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -16527,6 +17423,10 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonfile@3.0.1: + optionalDependencies: + graceful-fs: 4.2.11 + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -16947,6 +17847,11 @@ snapshots: mimic-fn: 2.1.0 p-is-promise: 2.1.0 + mem@8.1.1: + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 3.1.0 + memory-streams@0.1.3: dependencies: readable-stream: 1.0.34 @@ -16966,6 +17871,8 @@ snapshots: type-fest: 1.4.0 yargs-parser: 20.2.9 + meow@13.2.0: {} + merge-descriptors@1.0.3: {} merge-stream@2.0.0: {} @@ -17056,6 +17963,8 @@ snapshots: mimic-fn@2.1.0: {} + mimic-fn@3.1.0: {} + mimic-fn@4.0.0: {} mimic-function@5.0.1: {} @@ -17175,6 +18084,12 @@ snapshots: transitivePeerDependencies: - supports-color + mr-dep-walk@1.4.0: + dependencies: + acorn: 5.7.4 + amd-name-resolver: 0.0.6 + fs-extra: 3.0.1 + ms@2.0.0: {} ms@2.1.3: {} @@ -17326,6 +18241,8 @@ snapshots: dependencies: boolbase: 1.0.0 + nwsapi@2.2.22: {} + object-assign@4.1.1: {} object-hash@1.3.1: {} @@ -17556,6 +18473,10 @@ snapshots: parse5@6.0.1: {} + parse5@7.3.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} path-exists@3.0.0: {} @@ -17614,6 +18535,8 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.3: {} + pidtree@0.6.0: {} pify@2.3.0: {} @@ -18154,6 +19077,34 @@ snapshots: sprintf-js: 1.1.3 optional: true + rollup@4.53.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 + fsevents: 2.3.3 + route-recognizer@0.3.4: {} router_js@8.0.6(route-recognizer@0.3.4)(rsvp@4.8.5): @@ -18162,6 +19113,10 @@ snapshots: route-recognizer: 0.3.4 rsvp: 4.8.5 + rrweb-cssom@0.7.1: {} + + rrweb-cssom@0.8.0: {} + rsvp@3.2.1: {} rsvp@3.6.2: {} @@ -18251,6 +19206,10 @@ snapshots: sax@1.2.4: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + schema-utils@2.7.1: dependencies: '@types/json-schema': 7.0.15 @@ -18281,6 +19240,24 @@ snapshots: semver@7.7.2: {} + send@0.18.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + send@0.19.0: dependencies: debug: 2.6.9 @@ -18535,6 +19512,8 @@ snapshots: source-map-url@0.3.0: {} + source-map-url@0.4.1: {} + source-map@0.4.4: dependencies: amdefine: 1.0.1 @@ -18867,6 +19846,8 @@ snapshots: unquote: 1.1.1 util.promisify: 1.0.1 + symbol-tree@3.2.4: {} + symlink-or-copy@1.3.1: {} sync-disk-cache@1.3.4: @@ -19077,10 +20058,21 @@ snapshots: transitivePeerDependencies: - supports-color + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + tippy.js@6.3.7: dependencies: '@popperjs/core': 2.11.8 + tldts-core@6.1.86: {} + + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 + tmp@0.2.5: {} tmpl@1.0.5: {} @@ -19096,8 +20088,16 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.86 + tr46@0.0.3: {} + tr46@5.1.1: + dependencies: + punycode: 2.3.1 + tracked-built-ins@4.0.0(@babel/core@7.27.1): dependencies: '@embroider/addon-shim': 1.10.0 @@ -19381,8 +20381,28 @@ snapshots: unist-util-stringify-position: 2.0.3 vfile-message: 2.0.4 + vite@6.4.1(@types/node@22.15.17)(jiti@2.4.2)(sass@1.88.0)(terser@5.39.1)(yaml@2.5.1): + dependencies: + esbuild: 0.25.9 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.3 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 22.15.17 + fsevents: 2.3.3 + jiti: 2.4.2 + sass: 1.88.0 + terser: 5.39.1 + yaml: 2.5.1 + w3c-keyname@2.2.8: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + walk-sync@0.2.7: dependencies: ensure-posix-path: 1.1.1 @@ -19444,6 +20464,8 @@ snapshots: webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} + webpack-sources@3.2.3: {} webpack@5.99.8(esbuild@0.25.9): @@ -19485,6 +20507,17 @@ snapshots: websocket-extensions@0.1.4: {} + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -19597,10 +20630,16 @@ snapshots: ws@8.17.1: {} + ws@8.18.3: {} + xdg-basedir@4.0.0: {} + xml-name-validator@5.0.0: {} + xmlbuilder@15.1.1: {} + xmlchars@2.2.0: {} + y18n@5.0.8: {} yallist@3.1.1: {} diff --git a/ui/admin/.gitignore b/ui/admin/.gitignore index 6aee20f802..ece7d0fb9e 100644 --- a/ui/admin/.gitignore +++ b/ui/admin/.gitignore @@ -1,3 +1,5 @@ +/tmp/ + # compiled output /dist/ /declarations/ diff --git a/ui/admin/app/app.js b/ui/admin/app/app.js index e9a333fa75..085a900f26 100644 --- a/ui/admin/app/app.js +++ b/ui/admin/app/app.js @@ -6,12 +6,25 @@ import Application from '@ember/application'; import Resolver from 'ember-resolver'; import loadInitializers from 'ember-load-initializers'; -import config from 'admin/config/environment'; +import config from "./config/environment"; +import { + macroCondition, + importSync, + getOwnConfig, + isTesting, +} from '@embroider/macros'; + +import compatModules from "@embroider/virtual/compat-modules"; export default class App extends Application { modulePrefix = config.modulePrefix; podModulePrefix = config.podModulePrefix; - Resolver = Resolver; + Resolver = Resolver.withModules(compatModules); } -loadInitializers(App, config.modulePrefix); +loadInitializers(App, config.modulePrefix, compatModules); + +if (macroCondition(getOwnConfig().startMirageWithApp && !isTesting())) { + const startServer = importSync('api/mirage/config').default; + startServer({}); +} diff --git a/ui/admin/app/components/form/credential/index.js b/ui/admin/app/components/form/credential/index.js index 2b9153d119..a016e24211 100644 --- a/ui/admin/app/components/form/credential/index.js +++ b/ui/admin/app/components/form/credential/index.js @@ -10,21 +10,18 @@ import { TYPE_CREDENTIAL_USERNAME_PASSWORD, TYPE_CREDENTIAL_SSH_PRIVATE_KEY, TYPE_CREDENTIAL_JSON, - TYPE_CREDENTIAL_USERNAME_PASSWORD_DOMAIN, TYPE_CREDENTIAL_PASSWORD, } from 'api/models/credential'; import usernamePasswordFormComponent from './username_password'; import sshPrivateKeyFormComponent from './ssh_private_key'; import jsonFormComponent from './json'; -import usernamePasswordDomainFormComponent from './username_password_domain'; +// import usernamePasswordDomainFormComponent from './username_password_domain'; import passwordFormComponent from './password'; const modelTypeToComponent = { [TYPE_CREDENTIAL_USERNAME_PASSWORD]: usernamePasswordFormComponent, [TYPE_CREDENTIAL_SSH_PRIVATE_KEY]: sshPrivateKeyFormComponent, [TYPE_CREDENTIAL_JSON]: jsonFormComponent, - [TYPE_CREDENTIAL_USERNAME_PASSWORD_DOMAIN]: - usernamePasswordDomainFormComponent, [TYPE_CREDENTIAL_PASSWORD]: passwordFormComponent, }; diff --git a/ui/admin/app/components/form/host-set/index.hbs b/ui/admin/app/components/form/host-set/index.hbs index 9e36eb9e9d..696ba7b018 100644 --- a/ui/admin/app/components/form/host-set/index.hbs +++ b/ui/admin/app/components/form/host-set/index.hbs @@ -3,10 +3,9 @@ SPDX-License-Identifier: BUSL-1.1 }} -{{component - (concat 'form/host-set/' @model.compositeType) - model=@model - edit=@edit - submit=@submit - cancel=@cancel -}} \ No newline at end of file + \ No newline at end of file diff --git a/ui/admin/app/components/form/host-set/index.js b/ui/admin/app/components/form/host-set/index.js new file mode 100644 index 0000000000..b7704cecce --- /dev/null +++ b/ui/admin/app/components/form/host-set/index.js @@ -0,0 +1,28 @@ +import Component from '@glimmer/component'; +import { assert } from '@ember/debug'; +import awsFormComponent from './aws'; +import azureFormComponent from './azure'; +import gcpFormComponent from './gcp'; +import staticFormComponent from './static'; + +const modelCompositeTypeToComponent = { + aws: awsFormComponent, + azure: azureFormComponent, + gcp: gcpFormComponent, + static: staticFormComponent, +}; + +export default class FormHostSetIndex extends Component { + /** + * returns the associated host set form component for the model's composite type + */ + get hostSetForm() { + const component = + modelCompositeTypeToComponent[this.args.model.compositeType]; + assert( + `Mapped component must exist for host set composite type: ${this.args.model.compositeType}`, + component, + ); + return component; + } +} diff --git a/ui/admin/app/components/form/managed-group/index.hbs b/ui/admin/app/components/form/managed-group/index.hbs index a48d5068f0..9a2b2e894a 100644 --- a/ui/admin/app/components/form/managed-group/index.hbs +++ b/ui/admin/app/components/form/managed-group/index.hbs @@ -4,13 +4,12 @@ }} {{#if @model.type}} - {{component - (concat 'form/managed-group/' @model.type) - model=@model - edit=@edit - submit=@submit - cancel=@cancel - removeItemByIndex=@removeItemByIndex - addStringItem=@addStringItem - }} + {{/if}} \ No newline at end of file diff --git a/ui/admin/app/components/form/managed-group/index.js b/ui/admin/app/components/form/managed-group/index.js new file mode 100644 index 0000000000..6b2a88e52d --- /dev/null +++ b/ui/admin/app/components/form/managed-group/index.js @@ -0,0 +1,23 @@ +import Component from '@glimmer/component'; +import { assert } from '@ember/debug'; +import ldapFormComponent from './ldap'; +import oidcFormComponent from './oidc'; + +const modelTypeToComponent = { + ldap: ldapFormComponent, + oidc: oidcFormComponent, +}; + +export default class FormManagedGroupIndex extends Component { + /** + * returns the associated managed group form component for the model's type + */ + get managedGroupForm() { + const component = modelTypeToComponent[this.args.model.type]; + assert( + `Mapped component must exist for account type: ${this.args.model.type}`, + component, + ); + return component; + } +} diff --git a/ui/admin/app/components/form/storage-bucket/index.hbs b/ui/admin/app/components/form/storage-bucket/index.hbs index c0c814d3a4..aef78d9b6d 100644 --- a/ui/admin/app/components/form/storage-bucket/index.hbs +++ b/ui/admin/app/components/form/storage-bucket/index.hbs @@ -3,17 +3,16 @@ SPDX-License-Identifier: BUSL-1.1 }} {{#if @model.type}} - {{component - (concat 'form/storage-bucket/' @model.compositeType) - model=@model - submit=@submit - cancel=@cancel - updateScope=this.updateScope - scopes=@scopes - pluginTypes=this.pluginTypes - changePluginType=@changePluginType - changeCredentialType=@changeCredentialType - rollbackSecretAttrs=this.rollbackSecretAttrs - toggleDisableCredentialRotation=this.toggleDisableCredentialRotation - }} + {{/if}} \ No newline at end of file diff --git a/ui/admin/app/components/form/storage-bucket/index.js b/ui/admin/app/components/form/storage-bucket/index.js index ba174e2078..288d09278a 100644 --- a/ui/admin/app/components/form/storage-bucket/index.js +++ b/ui/admin/app/components/form/storage-bucket/index.js @@ -7,11 +7,18 @@ import Component from '@glimmer/component'; import { action } from '@ember/object'; import { service } from '@ember/service'; import { set } from '@ember/object'; - +import { assert } from '@ember/debug'; import { TYPE_CREDENTIAL_DYNAMIC, TYPES_STORAGE_BUCKET_PLUGIN, } from 'api/models/storage-bucket'; +import awsFormComponent from './aws'; +import minioFormComponent from './minio'; + +const modelCompositeTypeToComponent = { + aws: awsFormComponent, + minio: minioFormComponent, +}; export default class FormStorageBucketComponent extends Component { // =attributes @@ -24,6 +31,19 @@ export default class FormStorageBucketComponent extends Component { return TYPES_STORAGE_BUCKET_PLUGIN; } + /** + * returns the associated storage bucket form component for the model's composite type + */ + get storageBucketFormComponent() { + const component = + modelCompositeTypeToComponent[this.args.model.compositeType]; + assert( + `Mapped component must exist for storage bucket composite type: ${this.args.model.compositeType}`, + component, + ); + return component; + } + // =actions @action updateScope(event) { diff --git a/ui/admin/app/components/form/target/index.hbs b/ui/admin/app/components/form/target/index.hbs index 167fdf6605..b325cdd8f9 100644 --- a/ui/admin/app/components/form/target/index.hbs +++ b/ui/admin/app/components/form/target/index.hbs @@ -4,12 +4,11 @@ }} {{#if @model.type}} - {{component - (concat 'form/target/' @model.type) - model=@model - submit=@submit - cancel=@cancel - globalScope=@globalScope - changeType=@changeType - }} + {{/if}} \ No newline at end of file diff --git a/ui/admin/app/components/form/target/index.js b/ui/admin/app/components/form/target/index.js new file mode 100644 index 0000000000..e66c50cd94 --- /dev/null +++ b/ui/admin/app/components/form/target/index.js @@ -0,0 +1,22 @@ +import Component from '@glimmer/component'; +import { assert } from '@ember/debug'; +import rdpTargetForm from './rdp'; +import sshTargetForm from './ssh'; +import tcpTargetForm from './tcp'; + +const modelTypeToComponent = { + rdp: rdpTargetForm, + ssh: sshTargetForm, + tcp: tcpTargetForm, +}; + +export default class FormTargetIndex extends Component { + get targetFormComponent() { + const component = modelTypeToComponent[this.args.model.type]; + assert( + `Mapped component must exist for target type: ${this.args.model.type}`, + component, + ); + return component; + } +} diff --git a/ui/admin/app/components/form/user/add-accounts/index.js b/ui/admin/app/components/form/user/add-accounts/index.js index 8ed6da9845..3242ef7c59 100644 --- a/ui/admin/app/components/form/user/add-accounts/index.js +++ b/ui/admin/app/components/form/user/add-accounts/index.js @@ -10,7 +10,7 @@ import { service } from '@ember/service'; export default class FormUserAddAccountsComponent extends Component { // =properties - @service can; + @service abilities; /** * Array of selected account IDs. * @type {EmberArray} @@ -36,7 +36,7 @@ export default class FormUserAddAccountsComponent extends Component { const notAddedAccounts = this.args.accounts.filter( (account) => !alreadyAddedAccountIDs.includes(account.id) && - this.can.can('addAccount user', this.args.model, { account }), + this.abilities.can('addAccount user', this.args.model, { account }), ); return notAddedAccounts; } diff --git a/ui/admin/app/config/environment.js b/ui/admin/app/config/environment.js new file mode 100644 index 0000000000..7b34c2017b --- /dev/null +++ b/ui/admin/app/config/environment.js @@ -0,0 +1,27 @@ +import loadConfigFromMeta from '@embroider/config-meta-loader'; +import { assert } from '@ember/debug'; + +const config = loadConfigFromMeta('admin'); + +assert( + 'config is not an object', + typeof config === 'object' && config !== null +); +assert( + 'modulePrefix was not detected on your config', + 'modulePrefix' in config && typeof config.modulePrefix === 'string' +); +assert( + 'locationType was not detected on your config', + 'locationType' in config && typeof config.locationType === 'string' +); +assert( + 'rootURL was not detected on your config', + 'rootURL' in config && typeof config.rootURL === 'string' +); +assert( + 'APP was not detected on your config', + 'APP' in config && typeof config.APP === 'object' +); + +export default config; diff --git a/ui/admin/app/controllers/account/change-password.js b/ui/admin/app/controllers/account/change-password.js index e3b68ad599..e531973145 100644 --- a/ui/admin/app/controllers/account/change-password.js +++ b/ui/admin/app/controllers/account/change-password.js @@ -6,7 +6,7 @@ import Controller from '@ember/controller'; import { service } from '@ember/service'; import { action } from '@ember/object'; -import { notifySuccess, notifyError } from 'core/decorators/notify'; +import { notifyError } from 'core/decorators/notify'; export default class AccountChangePasswordController extends Controller { // =services @@ -24,7 +24,6 @@ export default class AccountChangePasswordController extends Controller { */ @action @notifyError(({ message }) => message, { catch: true }) - @notifySuccess('notifications.save-success') async changePassword(account, currentPassword, newPassword) { await account.changePassword(currentPassword, newPassword); // Transition to index after success. We ignore errors in the transition, diff --git a/ui/admin/app/controllers/scopes/scope/aliases/index.js b/ui/admin/app/controllers/scopes/scope/aliases/index.js index 5a1a72640f..1684f08b55 100644 --- a/ui/admin/app/controllers/scopes/scope/aliases/index.js +++ b/ui/admin/app/controllers/scopes/scope/aliases/index.js @@ -14,7 +14,7 @@ import { confirm } from 'core/decorators/confirm'; export default class ScopesScopeAliasesIndexController extends Controller { // =services - @service can; + @service abilities; @service intl; @service router; @@ -41,10 +41,10 @@ export default class ScopesScopeAliasesIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scope, { + const canList = this.abilities.can('list model', this.scope, { collection: 'aliases', }); - const canCreate = this.can.can('create model', this.scope, { + const canCreate = this.abilities.can('create model', this.scope, { collection: 'aliases', }); const resource = this.intl.t('resources.alias.title_plural'); @@ -84,7 +84,7 @@ export default class ScopesScopeAliasesIndexController extends Controller { ) async save(alias) { await alias.save(); - if (this.can.can('read model', alias)) { + if (this.abilities.can('read model', alias)) { await this.router.transitionTo('scopes.scope.aliases.alias', alias); } else { this.router.transitionTo('scopes.scope.aliases'); diff --git a/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/index.js b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/index.js index fbde5892cf..c2e74d0b5e 100644 --- a/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/index.js +++ b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/accounts/index.js @@ -15,7 +15,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsIndexController ext // =services - @service can; + @service abilities; @service intl; @service router; @@ -28,10 +28,10 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsIndexController ext * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.authMethod, { + const canList = this.abilities.can('list model', this.authMethod, { collection: 'accounts', }); - const canCreate = this.can.can('create model', this.authMethod, { + const canCreate = this.abilities.can('create model', this.authMethod, { collection: 'accounts', }); const resource = this.intl.t('resources.account.title_plural'); @@ -80,7 +80,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsIndexController ext adapterOptions.password = password; } await account.save({ adapterOptions }); - if (this.can.can('read model', account)) { + if (this.abilities.can('read model', account)) { await this.router.transitionTo( 'scopes.scope.auth-methods.auth-method.accounts.account', account, diff --git a/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/managed-groups/index.js b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/managed-groups/index.js index 3087ad48b5..c60ef18e64 100644 --- a/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/managed-groups/index.js +++ b/ui/admin/app/controllers/scopes/scope/auth-methods/auth-method/managed-groups/index.js @@ -15,7 +15,7 @@ export default class ScopesScopeAuthMethodsAuthMethodManagedGroupsIndexControlle // =services - @service can; + @service abilities; @service intl; @service router; @@ -28,10 +28,10 @@ export default class ScopesScopeAuthMethodsAuthMethodManagedGroupsIndexControlle * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.authMethod, { + const canList = this.abilities.can('list model', this.authMethod, { collection: 'managed-groups', }); - const canCreate = this.can.can('create model', this.authMethod, { + const canCreate = this.abilities.can('create model', this.authMethod, { collection: 'managed-groups', }); const resource = this.intl.t('resources.managed-group.title_plural'); @@ -75,7 +75,7 @@ export default class ScopesScopeAuthMethodsAuthMethodManagedGroupsIndexControlle ) async save(managedGroup) { await managedGroup.save(); - if (this.can.can('read model', managedGroup)) { + if (this.abilities.can('read model', managedGroup)) { await this.router.transitionTo( 'scopes.scope.auth-methods.auth-method.managed-groups.managed-group', managedGroup, diff --git a/ui/admin/app/controllers/scopes/scope/auth-methods/index.js b/ui/admin/app/controllers/scopes/scope/auth-methods/index.js index fb00a0fd71..0eb6d46867 100644 --- a/ui/admin/app/controllers/scopes/scope/auth-methods/index.js +++ b/ui/admin/app/controllers/scopes/scope/auth-methods/index.js @@ -16,7 +16,7 @@ export default class ScopesScopeAuthMethodsIndexController extends Controller { // =services @service router; - @service can; + @service abilities; @service intl; @service store; @@ -82,10 +82,10 @@ export default class ScopesScopeAuthMethodsIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scopeModel, { + const canList = this.abilities.can('list model', this.scopeModel, { collection: 'auth-methods', }); - const canCreate = this.can.can('create model', this.scopeModel, { + const canCreate = this.abilities.can('create model', this.scopeModel, { collection: 'auth-methods', }); const resource = this.intl.t('resources.auth-method.title_plural'); @@ -148,7 +148,7 @@ export default class ScopesScopeAuthMethodsIndexController extends Controller { ) async save(authMethod) { await authMethod.save(); - if (this.can.can('read model', authMethod)) { + if (this.abilities.can('read model', authMethod)) { await this.router.transitionTo( 'scopes.scope.auth-methods.auth-method', authMethod, diff --git a/ui/admin/app/controllers/scopes/scope/credential-stores/credential-store/credential-libraries/index.js b/ui/admin/app/controllers/scopes/scope/credential-stores/credential-store/credential-libraries/index.js index 34e554bcbb..37c76c5bd1 100644 --- a/ui/admin/app/controllers/scopes/scope/credential-stores/credential-store/credential-libraries/index.js +++ b/ui/admin/app/controllers/scopes/scope/credential-stores/credential-store/credential-libraries/index.js @@ -15,7 +15,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialLibrari // =services - @service can; + @service abilities; @service intl; @service router; @@ -28,10 +28,10 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialLibrari * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.credentialStore, { + const canList = this.abilities.can('list model', this.credentialStore, { collection: 'credential-libraries', }); - const canCreate = this.can.can('create model', this.credentialStore, { + const canCreate = this.abilities.can('create model', this.credentialStore, { collection: 'credential-libraries', }); const resource = this.intl.t('resources.credential-library.title_plural'); @@ -75,7 +75,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialLibrari ) async save(credentialLibrary) { await credentialLibrary.save(); - if (this.can.can('read model', credentialLibrary)) { + if (this.abilities.can('read model', credentialLibrary)) { await this.router.transitionTo( 'scopes.scope.credential-stores.credential-store.credential-libraries.credential-library', credentialLibrary, diff --git a/ui/admin/app/controllers/scopes/scope/credential-stores/credential-store/credentials/index.js b/ui/admin/app/controllers/scopes/scope/credential-stores/credential-store/credentials/index.js index dad3d9a101..201644f323 100644 --- a/ui/admin/app/controllers/scopes/scope/credential-stores/credential-store/credentials/index.js +++ b/ui/admin/app/controllers/scopes/scope/credential-stores/credential-store/credentials/index.js @@ -15,7 +15,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialsIndexC // =services - @service can; + @service abilities; @service intl; @service router; @@ -28,10 +28,10 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialsIndexC * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.credentialStore, { + const canList = this.abilities.can('list model', this.credentialStore, { collection: 'credentials', }); - const canCreate = this.can.can('create model', this.credentialStore, { + const canCreate = this.abilities.can('create model', this.credentialStore, { collection: 'credentials', }); const resource = this.intl.t('resources.credential.title_plural'); @@ -75,7 +75,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialsIndexC ) async save(credential) { await credential.save(); - if (this.can.can('read credential', credential)) { + if (this.abilities.can('read credential', credential)) { await this.router.transitionTo( 'scopes.scope.credential-stores.credential-store.credentials.credential', credential, diff --git a/ui/admin/app/controllers/scopes/scope/credential-stores/index.js b/ui/admin/app/controllers/scopes/scope/credential-stores/index.js index f2ddbe3b3d..1b9c9c362b 100644 --- a/ui/admin/app/controllers/scopes/scope/credential-stores/index.js +++ b/ui/admin/app/controllers/scopes/scope/credential-stores/index.js @@ -15,7 +15,7 @@ import { TYPES_CREDENTIAL_STORE } from 'api/models/credential-store'; export default class ScopesScopeCredentialStoresIndexController extends Controller { // =services - @service can; + @service abilities; @service router; @service intl; @@ -58,10 +58,10 @@ export default class ScopesScopeCredentialStoresIndexController extends Controll * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scope, { + const canList = this.abilities.can('list model', this.scope, { collection: 'credential-stores', }); - const canCreate = this.can.can('create model', this.scope, { + const canCreate = this.abilities.can('create model', this.scope, { collection: 'credential-stores', }); const resource = this.intl.t('resources.credential-store.title_plural'); @@ -88,7 +88,7 @@ export default class ScopesScopeCredentialStoresIndexController extends Controll @notifySuccess('notifications.save-success') async save(credentialStore) { await credentialStore.save(); - if (this.can.can('read model', credentialStore)) { + if (this.abilities.can('read model', credentialStore)) { await this.router.transitionTo( 'scopes.scope.credential-stores.credential-store', credentialStore, diff --git a/ui/admin/app/controllers/scopes/scope/groups/index.js b/ui/admin/app/controllers/scopes/scope/groups/index.js index 110e994a2f..eb76be6994 100644 --- a/ui/admin/app/controllers/scopes/scope/groups/index.js +++ b/ui/admin/app/controllers/scopes/scope/groups/index.js @@ -14,7 +14,7 @@ import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeGroupsIndexController extends Controller { // =services - @service can; + @service abilities; @service intl; @service router; @@ -41,10 +41,10 @@ export default class ScopesScopeGroupsIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scope, { + const canList = this.abilities.can('list model', this.scope, { collection: 'groups', }); - const canCreate = this.can.can('create model', this.scope, { + const canCreate = this.abilities.can('create model', this.scope, { collection: 'groups', }); const resource = this.intl.t('resources.group.title_plural'); @@ -84,7 +84,7 @@ export default class ScopesScopeGroupsIndexController extends Controller { ) async save(group) { await group.save(); - if (this.can.can('read model', group)) { + if (this.abilities.can('read model', group)) { await this.router.transitionTo('scopes.scope.groups.group', group); } else { this.router.transitionTo('scopes.scope.groups'); diff --git a/ui/admin/app/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/index.js b/ui/admin/app/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/index.js index 1dca4d144b..68538cfa7b 100644 --- a/ui/admin/app/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/index.js +++ b/ui/admin/app/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/index.js @@ -15,7 +15,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsIndexController e // =services - @service can; + @service abilities; @service intl; @service router; @service store; @@ -29,10 +29,10 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsIndexController e * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.hostCatalog, { + const canList = this.abilities.can('list model', this.hostCatalog, { collection: 'host-sets', }); - const canCreate = this.can.can('create model', this.hostCatalog, { + const canCreate = this.abilities.can('create model', this.hostCatalog, { collection: 'host-sets', }); const resource = this.intl.t('resources.host-set.title_plural'); @@ -79,7 +79,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsIndexController e // Fetch newest host set as updates to host set attributes cause an async db update which // updates the version again and can cause a version mismatch if the host set is updated // again and we haven't fetched the newest version. - if (this.can.can('read host-set', hostSet)) { + if (this.abilities.can('read host-set', hostSet)) { const newestHostSet = await this.store.findRecord( 'host-set', hostSet.id, @@ -93,7 +93,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsIndexController e await hostSet.save(); - if (this.can.can('read host-set', hostSet)) { + if (this.abilities.can('read host-set', hostSet)) { await this.router.transitionTo( 'scopes.scope.host-catalogs.host-catalog.host-sets.host-set', hostSet, diff --git a/ui/admin/app/controllers/scopes/scope/host-catalogs/host-catalog/hosts/index.js b/ui/admin/app/controllers/scopes/scope/host-catalogs/host-catalog/hosts/index.js index 2b78ba840c..547a78e2c7 100644 --- a/ui/admin/app/controllers/scopes/scope/host-catalogs/host-catalog/hosts/index.js +++ b/ui/admin/app/controllers/scopes/scope/host-catalogs/host-catalog/hosts/index.js @@ -15,7 +15,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostsIndexController exte // =services - @service can; + @service abilities; @service intl; @service router; @@ -28,10 +28,10 @@ export default class ScopesScopeHostCatalogsHostCatalogHostsIndexController exte * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.hostCatalog, { + const canList = this.abilities.can('list model', this.hostCatalog, { collection: 'hosts', }); - const canCreate = this.can.can('create model', this.hostCatalog, { + const canCreate = this.abilities.can('create model', this.hostCatalog, { collection: 'hosts', }); const resource = this.intl.t('resources.host.title_plural'); @@ -74,7 +74,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostsIndexController exte ) async save(host) { await host.save(); - if (this.can.can('read model', host)) { + if (this.abilities.can('read model', host)) { await this.router.transitionTo( 'scopes.scope.host-catalogs.host-catalog.hosts.host', host, diff --git a/ui/admin/app/controllers/scopes/scope/host-catalogs/index.js b/ui/admin/app/controllers/scopes/scope/host-catalogs/index.js index 6ec122c8ea..9920317f49 100644 --- a/ui/admin/app/controllers/scopes/scope/host-catalogs/index.js +++ b/ui/admin/app/controllers/scopes/scope/host-catalogs/index.js @@ -15,7 +15,7 @@ import { TYPE_CREDENTIAL_STATIC } from 'api/models/host-catalog'; export default class ScopesScopeHostCatalogsIndexController extends Controller { // =services - @service can; + @service abilities; @service intl; @service router; @@ -42,10 +42,10 @@ export default class ScopesScopeHostCatalogsIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scope, { + const canList = this.abilities.can('list model', this.scope, { collection: 'host-catalogs', }); - const canCreate = this.can.can('create model', this.scope, { + const canCreate = this.abilities.can('create model', this.scope, { collection: 'host-catalogs', }); const resource = this.intl.t('resources.host-catalog.title_plural'); @@ -101,7 +101,7 @@ export default class ScopesScopeHostCatalogsIndexController extends Controller { hostCatalog.credentialType = TYPE_CREDENTIAL_STATIC; } await hostCatalog.save(); - if (this.can.can('read host-catalog', hostCatalog)) { + if (this.abilities.can('read host-catalog', hostCatalog)) { await this.router.transitionTo( 'scopes.scope.host-catalogs.host-catalog', hostCatalog, diff --git a/ui/admin/app/controllers/scopes/scope/policies/index.js b/ui/admin/app/controllers/scopes/scope/policies/index.js index bfac3659f4..e75e5d1ac4 100644 --- a/ui/admin/app/controllers/scopes/scope/policies/index.js +++ b/ui/admin/app/controllers/scopes/scope/policies/index.js @@ -13,7 +13,7 @@ import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopePoliciesIndexController extends Controller { // =services - @service can; + @service abilities; @service intl; @service router; @@ -26,10 +26,10 @@ export default class ScopesScopePoliciesIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scope, { + const canList = this.abilities.can('list model', this.scope, { collection: 'policies', }); - const canCreate = this.can.can('create model', this.scope, { + const canCreate = this.abilities.can('create model', this.scope, { collection: 'policies', }); const resource = this.intl.t('resources.policy.title_plural'); @@ -67,7 +67,7 @@ export default class ScopesScopePoliciesIndexController extends Controller { @notifySuccess('notifications.save-success') async save(policy) { await policy.save(); - if (this.can.can('read model', policy)) { + if (this.abilities.can('read model', policy)) { await this.router.transitionTo('scopes.scope.policies.policy', policy); } else { await this.router.transitionTo('scopes.scope.policies'); diff --git a/ui/admin/app/controllers/scopes/scope/roles/index.js b/ui/admin/app/controllers/scopes/scope/roles/index.js index 8a621c14f6..bf1da4c4a3 100644 --- a/ui/admin/app/controllers/scopes/scope/roles/index.js +++ b/ui/admin/app/controllers/scopes/scope/roles/index.js @@ -15,7 +15,7 @@ import { GRANT_SCOPE_THIS } from 'api/models/role'; export default class ScopesScopeRolesIndexController extends Controller { // =services - @service can; + @service abilities; @service intl; @service router; @@ -44,10 +44,10 @@ export default class ScopesScopeRolesIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scope, { + const canList = this.abilities.can('list model', this.scope, { collection: 'roles', }); - const canCreate = this.can.can('create model', this.scope, { + const canCreate = this.abilities.can('create model', this.scope, { collection: 'roles', }); const resource = this.intl.t('resources.role.title_plural'); @@ -98,7 +98,7 @@ export default class ScopesScopeRolesIndexController extends Controller { ) async save(role) { await role.save(); - if (this.can.can('read model', role)) { + if (this.abilities.can('read model', role)) { await this.router.transitionTo('scopes.scope.roles.role', role); } else { this.router.transitionTo('scopes.scope.roles'); diff --git a/ui/admin/app/controllers/scopes/scope/storage-buckets/index.js b/ui/admin/app/controllers/scopes/scope/storage-buckets/index.js index 1566e63805..7c13dd960c 100644 --- a/ui/admin/app/controllers/scopes/scope/storage-buckets/index.js +++ b/ui/admin/app/controllers/scopes/scope/storage-buckets/index.js @@ -14,7 +14,7 @@ import { TYPE_CREDENTIAL_STATIC } from 'api/models/storage-bucket'; export default class ScopesScopeStorageBucketsIndexController extends Controller { // =services - @service can; + @service abilities; @service intl; @service router; @@ -27,10 +27,10 @@ export default class ScopesScopeStorageBucketsIndexController extends Controller * @type {string} */ get messageDescription() { - const canList = this.can.can('list scope', this.scope, { + const canList = this.abilities.can('list scope', this.scope, { collection: 'storage-buckets', }); - const canCreate = this.can.can('create scope', this.scope, { + const canCreate = this.abilities.can('create scope', this.scope, { collection: 'storage-buckets', }); const resource = this.intl.t('resources.storage-bucket.title_plural'); diff --git a/ui/admin/app/controllers/scopes/scope/targets/index.js b/ui/admin/app/controllers/scopes/scope/targets/index.js index 1ef0d70e4a..7ec3d299f2 100644 --- a/ui/admin/app/controllers/scopes/scope/targets/index.js +++ b/ui/admin/app/controllers/scopes/scope/targets/index.js @@ -20,7 +20,7 @@ export default class ScopesScopeTargetsIndexController extends Controller { // =services @service intl; - @service can; + @service abilities; @service router; @service confirm; @service features; @@ -80,10 +80,10 @@ export default class ScopesScopeTargetsIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scope, { + const canList = this.abilities.can('list model', this.scope, { collection: 'targets', }); - const canCreate = this.can.can('create model', this.scope, { + const canCreate = this.abilities.can('create model', this.scope, { collection: 'targets', }); const resource = this.intl.t('resources.target.title_plural'); @@ -187,7 +187,7 @@ export default class ScopesScopeTargetsIndexController extends Controller { ) async save(target) { await target.save(); - if (this.can.can('read model', target)) { + if (this.abilities.can('read model', target)) { await this.router.transitionTo('scopes.scope.targets.target', target); } else { this.router.transitionTo('scopes.scope.targets'); diff --git a/ui/admin/app/controllers/scopes/scope/targets/target/index.js b/ui/admin/app/controllers/scopes/scope/targets/target/index.js index a43cc396d0..7697755fe4 100644 --- a/ui/admin/app/controllers/scopes/scope/targets/target/index.js +++ b/ui/admin/app/controllers/scopes/scope/targets/target/index.js @@ -13,7 +13,7 @@ export default class ScopesScopeTargetsTargetIndexController extends Controller // =services - @service can; + @service abilities; @service router; // =attributes diff --git a/ui/admin/app/controllers/scopes/scope/users/index.js b/ui/admin/app/controllers/scopes/scope/users/index.js index 32d72f34a2..9283158eab 100644 --- a/ui/admin/app/controllers/scopes/scope/users/index.js +++ b/ui/admin/app/controllers/scopes/scope/users/index.js @@ -14,7 +14,7 @@ import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeUsersIndexController extends Controller { // =services - @service can; + @service abilities; @service intl; @service router; @tracked sortAttribute; @@ -41,10 +41,10 @@ export default class ScopesScopeUsersIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list model', this.scope, { + const canList = this.abilities.can('list model', this.scope, { collection: 'users', }); - const canCreate = this.can.can('create model', this.scope, { + const canCreate = this.abilities.can('create model', this.scope, { collection: 'users', }); const resource = this.intl.t('resources.user.title_plural'); @@ -98,7 +98,7 @@ export default class ScopesScopeUsersIndexController extends Controller { ) async save(user) { await user.save(); - if (this.can.can('read model', user)) { + if (this.abilities.can('read model', user)) { await this.router.transitionTo('scopes.scope.users.user', user); } else { this.router.transitionTo('scopes.scope.users'); diff --git a/ui/admin/app/controllers/scopes/scope/workers/index.js b/ui/admin/app/controllers/scopes/scope/workers/index.js index b72442ba75..3ef925965d 100644 --- a/ui/admin/app/controllers/scopes/scope/workers/index.js +++ b/ui/admin/app/controllers/scopes/scope/workers/index.js @@ -14,7 +14,7 @@ import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeWorkersIndexController extends Controller { // =services - @service can; + @service abilities; @service intl; @service router; @@ -79,12 +79,16 @@ export default class ScopesScopeWorkersIndexController extends Controller { * @type {string} */ get messageDescription() { - const canList = this.can.can('list worker', this.scope, { - collection: 'workers', - }); - const canCreate = this.can.can('create worker led worker', this.scope, { + const canList = this.abilities.can('list worker', this.scope, { collection: 'workers', }); + const canCreate = this.abilities.can( + 'create worker led worker', + this.scope, + { + collection: 'workers', + }, + ); const resource = this.intl.t('titles.workers'); let description = 'descriptions.neither-list-nor-create'; @@ -159,7 +163,7 @@ export default class ScopesScopeWorkersIndexController extends Controller { ) async save(worker) { await worker.save(); - if (this.can.can('read model', worker)) { + if (this.abilities.can('read model', worker)) { await this.router.transitionTo('scopes.scope.workers.worker', worker); } else { this.router.transitionTo('scopes.scope.workers'); diff --git a/ui/admin/app/routes/scopes/scope/aliases/index.js b/ui/admin/app/routes/scopes/scope/aliases/index.js index d4231eaa65..ed6caa7104 100644 --- a/ui/admin/app/routes/scopes/scope/aliases/index.js +++ b/ui/admin/app/routes/scopes/scope/aliases/index.js @@ -11,7 +11,7 @@ export default class ScopesScopeAliasesIndexRoute extends Route { // =services @service store; - @service can; + @service abilities; // =attributes @@ -69,7 +69,7 @@ export default class ScopesScopeAliasesIndexRoute extends Route { let totalItems = 0; if ( - this.can.can('list model', scope, { + this.abilities.can('list model', scope, { collection: 'aliases', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/aliases/new.js b/ui/admin/app/routes/scopes/scope/aliases/new.js index af8925b4de..eb4867e3c5 100644 --- a/ui/admin/app/routes/scopes/scope/aliases/new.js +++ b/ui/admin/app/routes/scopes/scope/aliases/new.js @@ -11,7 +11,7 @@ export default class ScopesScopeAliasesNewRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -22,7 +22,9 @@ export default class ScopesScopeAliasesNewRoute extends Route { beforeModel() { const scopeModel = this.modelFor('scopes.scope'); if ( - this.can.cannot('create model', scopeModel, { collection: 'aliases' }) + this.abilities.cannot('create model', scopeModel, { + collection: 'aliases', + }) ) { this.router.replaceWith('scopes.scope.aliases'); } diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method.js index 68d3eb6345..e22ee7f25e 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method.js @@ -11,7 +11,7 @@ export default class ScopesScopeAuthMethodsAuthMethodRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts.js index 70f4b89169..dd8b011c3f 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts.js @@ -10,7 +10,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route // =services @service store; - @service can; + @service abilities; // =methods @@ -24,7 +24,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsRoute extends Route let accounts; if ( - this.can.can('list model', authMethod, { + this.abilities.can('list model', authMethod, { collection: 'accounts', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account.js index da60edc07f..6280a615ee 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account.js @@ -10,7 +10,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountRoute extend // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/new.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/new.js index df0ddadadb..d22ee658f4 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/new.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/new.js @@ -10,7 +10,7 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsNewRoute extends Ro // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -21,7 +21,9 @@ export default class ScopesScopeAuthMethodsAuthMethodAccountsNewRoute extends Ro beforeModel() { const authMethod = this.modelFor('scopes.scope.auth-methods.auth-method'); if ( - this.can.cannot('create model', authMethod, { collection: 'accounts' }) + this.abilities.cannot('create model', authMethod, { + collection: 'accounts', + }) ) { this.router.replaceWith('scopes.scope.auth-methods.auth-method.accounts'); } diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/managed-groups.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/managed-groups.js index 34999d3425..146da87339 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/managed-groups.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/managed-groups.js @@ -10,7 +10,7 @@ export default class ScopesScopeAuthMethodsAuthMethodManagedGroupsRoute extends // =services @service store; - @service can; + @service abilities; //=methods @@ -21,7 +21,7 @@ export default class ScopesScopeAuthMethodsAuthMethodManagedGroupsRoute extends async model() { const authMethod = this.modelFor('scopes.scope.auth-methods.auth-method'); const { id: auth_method_id } = authMethod; - const canListManagedGroups = this.can.can('list model', authMethod, { + const canListManagedGroups = this.abilities.can('list model', authMethod, { collection: 'managed-groups', }); let managedGroups; diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/managed-groups/new.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/managed-groups/new.js index 2d810f3789..44119b1cef 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/managed-groups/new.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/managed-groups/new.js @@ -10,7 +10,7 @@ export default class ScopesScopeAuthMethodsAuthMethodManagedGroupsNewRoute exten // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -21,7 +21,7 @@ export default class ScopesScopeAuthMethodsAuthMethodManagedGroupsNewRoute exten beforeModel() { const authMethod = this.modelFor('scopes.scope.auth-methods.auth-method'); if ( - this.can.cannot('create model', authMethod, { + this.abilities.cannot('create model', authMethod, { collection: 'managed-groups', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/index.js b/ui/admin/app/routes/scopes/scope/auth-methods/index.js index dd52715ee7..9a85ad07be 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/index.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/index.js @@ -11,7 +11,7 @@ export default class ScopesScopeAuthMethodsIndexRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =attributes @@ -101,7 +101,9 @@ export default class ScopesScopeAuthMethodsIndexRoute extends Route { let authMethods; let totalItems = 0; let doAuthMethodsExist = false; - if (this.can.can('list model', scope, { collection: 'auth-methods' })) { + if ( + this.abilities.can('list model', scope, { collection: 'auth-methods' }) + ) { // TODO: Remove storeToken option as this is a temporary fix for auth-methods. const options = { storeToken: false }; authMethods = await this.store.query( diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/new.js b/ui/admin/app/routes/scopes/scope/auth-methods/new.js index d29b43ddae..d8e6f23426 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/new.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/new.js @@ -10,7 +10,7 @@ export default class ScopesScopeAuthMethodsNewRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =attributes @@ -29,7 +29,7 @@ export default class ScopesScopeAuthMethodsNewRoute extends Route { beforeModel() { const scopeModel = this.modelFor('scopes.scope'); if ( - this.can.cannot('create model', scopeModel, { + this.abilities.cannot('create model', scopeModel, { collection: 'auth-methods', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store.js b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store.js index 97d06f026b..0011e7f0f0 100644 --- a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store.js +++ b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store.js @@ -11,7 +11,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreRoute extends Rou // =services @service store; - @service can; + @service abilities; @service router; /** diff --git a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credential-libraries.js b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credential-libraries.js index 3aa356fac3..570147686c 100644 --- a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credential-libraries.js +++ b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credential-libraries.js @@ -10,7 +10,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialLibrari // =services @service store; - @service can; + @service abilities; // =methods @@ -24,7 +24,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialLibrari ); const { id: credential_store_id } = credentialStore; if ( - this.can.can('list model', credentialStore, { + this.abilities.can('list model', credentialStore, { collection: 'credential-libraries', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credential-libraries/new.js b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credential-libraries/new.js index fe59b0e313..030e9e7436 100644 --- a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credential-libraries/new.js +++ b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credential-libraries/new.js @@ -16,7 +16,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialLibrari @service store; @service router; @service features; - @service can; + @service abilities; // =attributes @@ -36,7 +36,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialLibrari 'scopes.scope.credential-stores.credential-store', ); if ( - this.can.cannot('create model', credentialStore, { + this.abilities.cannot('create model', credentialStore, { collection: 'credential-libraries', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials.js b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials.js index efbeec581b..5eafbcc127 100644 --- a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials.js +++ b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials.js @@ -10,7 +10,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialsRoute // =services @service store; - @service can; + @service abilities; // =methods @@ -24,7 +24,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialsRoute ); const { id: credential_store_id } = credentialStore; if ( - this.can.can('list model', credentialStore, { + this.abilities.can('list model', credentialStore, { collection: 'credentials', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials/credential.js b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials/credential.js index 4afe795885..d26ba83c3e 100644 --- a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials/credential.js +++ b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials/credential.js @@ -10,7 +10,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialsCreden // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials/new.js b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials/new.js index 21a4a971a7..45cdc4127d 100644 --- a/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials/new.js +++ b/ui/admin/app/routes/scopes/scope/credential-stores/credential-store/credentials/new.js @@ -11,7 +11,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialsNewRou @service store; @service router; - @service can; + @service abilities; // =attributes @@ -31,7 +31,7 @@ export default class ScopesScopeCredentialStoresCredentialStoreCredentialsNewRou 'scopes.scope.credential-stores.credential-store', ); if ( - this.can.cannot('create model', credentialStore, { + this.abilities.cannot('create model', credentialStore, { collection: 'credentials', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/credential-stores/index.js b/ui/admin/app/routes/scopes/scope/credential-stores/index.js index 65607b6740..6143947dbc 100644 --- a/ui/admin/app/routes/scopes/scope/credential-stores/index.js +++ b/ui/admin/app/routes/scopes/scope/credential-stores/index.js @@ -11,7 +11,7 @@ export default class ScopesScopeCredentialStoresIndexRoute extends Route { // =services @service store; - @service can; + @service abilities; // =attributes @@ -90,7 +90,7 @@ export default class ScopesScopeCredentialStoresIndexRoute extends Route { let totalItems = 0; let doCredentialStoresExist = false; if ( - this.can.can('list model', scope, { + this.abilities.can('list model', scope, { collection: 'credential-stores', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/credential-stores/new.js b/ui/admin/app/routes/scopes/scope/credential-stores/new.js index 7e29c1681f..ca54c7bce2 100644 --- a/ui/admin/app/routes/scopes/scope/credential-stores/new.js +++ b/ui/admin/app/routes/scopes/scope/credential-stores/new.js @@ -12,7 +12,7 @@ export default class ScopesScopeCredentialStoresNewRoute extends Route { @service store; @service router; @service features; - @service can; + @service abilities; // =attributes @@ -30,7 +30,7 @@ export default class ScopesScopeCredentialStoresNewRoute extends Route { beforeModel() { const scopeModel = this.modelFor('scopes.scope'); if ( - this.can.cannot('create model', scopeModel, { + this.abilities.cannot('create model', scopeModel, { collection: 'credential-stores', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/groups/group.js b/ui/admin/app/routes/scopes/scope/groups/group.js index bf5ee37066..a6efe22672 100644 --- a/ui/admin/app/routes/scopes/scope/groups/group.js +++ b/ui/admin/app/routes/scopes/scope/groups/group.js @@ -10,7 +10,7 @@ export default class ScopesScopeGroupsGroupRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/groups/index.js b/ui/admin/app/routes/scopes/scope/groups/index.js index b120e8a0e2..0137abfcc0 100644 --- a/ui/admin/app/routes/scopes/scope/groups/index.js +++ b/ui/admin/app/routes/scopes/scope/groups/index.js @@ -11,7 +11,7 @@ export default class ScopesScopeGroupsIndexRoute extends Route { // =services @service store; - @service can; + @service abilities; // =attributes @@ -77,7 +77,7 @@ export default class ScopesScopeGroupsIndexRoute extends Route { let groups = []; let totalItems = 0; let doGroupsExist = false; - if (this.can.can('list model', scope, { collection: 'groups' })) { + if (this.abilities.can('list model', scope, { collection: 'groups' })) { groups = await this.store.query('group', { scope_id, query: { filters, search, sort }, diff --git a/ui/admin/app/routes/scopes/scope/groups/new.js b/ui/admin/app/routes/scopes/scope/groups/new.js index d635845200..04ab4fc3a6 100644 --- a/ui/admin/app/routes/scopes/scope/groups/new.js +++ b/ui/admin/app/routes/scopes/scope/groups/new.js @@ -10,7 +10,7 @@ export default class ScopesScopeGroupsNewRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -20,7 +20,11 @@ export default class ScopesScopeGroupsNewRoute extends Route { */ beforeModel() { const scopeModel = this.modelFor('scopes.scope'); - if (this.can.cannot('create model', scopeModel, { collection: 'groups' })) { + if ( + this.abilities.cannot('create model', scopeModel, { + collection: 'groups', + }) + ) { this.router.replaceWith('scopes.scope.groups'); } } diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog.js index 89d6d2f877..d92d7f5e6c 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog.js @@ -11,7 +11,7 @@ export default class ScopesScopeHostCatalogsHostCatalogRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets.js index 82a2e00a34..4829715854 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets.js @@ -10,7 +10,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsRoute extends Rou // =services @service store; - @service can; + @service abilities; // =methods @@ -26,7 +26,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsRoute extends Rou let hostSets; if ( - this.can.can('list model', hostCatalog, { + this.abilities.can('list model', hostCatalog, { collection: 'host-sets', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set.js index 2b432cb4db..1131c9ecb7 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set.js @@ -11,7 +11,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetRoute exte // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host.js index cdc7ecc289..d010bf4b7e 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host.js @@ -11,7 +11,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetCreateAndA @service store; @service router; - @service can; + @service abilities; // =methods @@ -22,7 +22,11 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetCreateAndA const hostCatalog = this.modelFor( 'scopes.scope.host-catalogs.host-catalog', ); - if (this.can.cannot('create model', hostCatalog, { collection: 'hosts' })) { + if ( + this.abilities.cannot('create model', hostCatalog, { + collection: 'hosts', + }) + ) { this.router.replaceWith( 'scopes.scope.host-catalogs.host-catalog.host-sets.host-set.hosts', ); diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host.js index 3f33524ce5..9dca689aec 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host.js @@ -10,7 +10,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetHostsHostR // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/new.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/new.js index e841be0088..4c2ff6dad1 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/new.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/new.js @@ -11,7 +11,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsNewRoute extends @service store; @service router; - @service can; + @service abilities; // =methods @@ -23,7 +23,9 @@ export default class ScopesScopeHostCatalogsHostCatalogHostSetsNewRoute extends 'scopes.scope.host-catalogs.host-catalog', ); if ( - this.can.cannot('create model', hostCatalog, { collection: 'host-sets' }) + this.abilities.cannot('create model', hostCatalog, { + collection: 'host-sets', + }) ) { this.router.replaceWith( 'scopes.scope.host-catalogs.host-catalog.host-sets', diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts.js index 87add73439..adf93e2789 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts.js @@ -10,7 +10,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostsRoute extends Route // =services @service store; - @service can; + @service abilities; // =methods @@ -26,7 +26,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostsRoute extends Route let hosts; if ( - this.can.can('list model', hostCatalog, { + this.abilities.can('list model', hostCatalog, { collection: 'hosts', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts/host.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts/host.js index 67b71f521f..eb25645b41 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts/host.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts/host.js @@ -10,7 +10,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostsHostRoute extends Ro // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts/new.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts/new.js index 87c0ac7d94..b648735b8e 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts/new.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/hosts/new.js @@ -10,7 +10,7 @@ export default class ScopesScopeHostCatalogsHostCatalogHostsNewRoute extends Rou // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -22,7 +22,11 @@ export default class ScopesScopeHostCatalogsHostCatalogHostsNewRoute extends Rou const hostCatalog = this.modelFor( 'scopes.scope.host-catalogs.host-catalog', ); - if (this.can.cannot('create model', hostCatalog, { collection: 'hosts' })) { + if ( + this.abilities.cannot('create model', hostCatalog, { + collection: 'hosts', + }) + ) { this.router.replaceWith('scopes.scope.host-catalogs.host-catalog.hosts'); } } diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/index.js b/ui/admin/app/routes/scopes/scope/host-catalogs/index.js index e666bcd8ae..28f2d1e350 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/index.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/index.js @@ -11,7 +11,7 @@ export default class ScopesScopeHostCatalogsIndexRoute extends Route { // =services @service store; - @service can; + @service abilities; // =attributes @@ -82,7 +82,9 @@ export default class ScopesScopeHostCatalogsIndexRoute extends Route { let hostCatalogs; let totalItems = 0; let doHostCatalogsExist = false; - if (this.can.can('list model', scope, { collection: 'host-catalogs' })) { + if ( + this.abilities.can('list model', scope, { collection: 'host-catalogs' }) + ) { hostCatalogs = await this.store.query('host-catalog', { scope_id, query: { search, filters, sort }, diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/new.js b/ui/admin/app/routes/scopes/scope/host-catalogs/new.js index 0c8b21d979..bac62638cb 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/new.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/new.js @@ -11,7 +11,7 @@ export default class ScopesScopeHostCatalogsNewRoute extends Route { @service store; @service router; - @service can; + @service abilities; // =attributes @@ -29,7 +29,7 @@ export default class ScopesScopeHostCatalogsNewRoute extends Route { beforeModel() { const scopeModel = this.modelFor('scopes.scope'); if ( - this.can.cannot('create model', scopeModel, { + this.abilities.cannot('create model', scopeModel, { collection: 'host-catalogs', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/policies.js b/ui/admin/app/routes/scopes/scope/policies.js index 58adb8b4d8..37ea12e4b3 100644 --- a/ui/admin/app/routes/scopes/scope/policies.js +++ b/ui/admin/app/routes/scopes/scope/policies.js @@ -11,7 +11,7 @@ export default class ScopesScopePoliciesRoute extends Route { @service store; @service session; - @service can; + @service abilities; @service router; // =methods @@ -32,7 +32,7 @@ export default class ScopesScopePoliciesRoute extends Route { const { id: scope_id } = scope; if ( - this.can.can('list model', scope, { + this.abilities.can('list model', scope, { collection: 'policies', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/policies/new.js b/ui/admin/app/routes/scopes/scope/policies/new.js index 75e3e3f216..8668310306 100644 --- a/ui/admin/app/routes/scopes/scope/policies/new.js +++ b/ui/admin/app/routes/scopes/scope/policies/new.js @@ -10,7 +10,7 @@ export default class ScopesScopePoliciesNewRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -21,7 +21,9 @@ export default class ScopesScopePoliciesNewRoute extends Route { beforeModel() { const scopeModel = this.modelFor('scopes.scope'); if ( - this.can.cannot('create model', scopeModel, { collection: 'policies' }) + this.abilities.cannot('create model', scopeModel, { + collection: 'policies', + }) ) { this.router.replaceWith('scopes.scope.policies'); } diff --git a/ui/admin/app/routes/scopes/scope/policies/policy.js b/ui/admin/app/routes/scopes/scope/policies/policy.js index 5a18b265ac..f1fc074b7f 100644 --- a/ui/admin/app/routes/scopes/scope/policies/policy.js +++ b/ui/admin/app/routes/scopes/scope/policies/policy.js @@ -8,7 +8,7 @@ import { service } from '@ember/service'; export default class ScopesScopePoliciesPolicyRoute extends Route { @service store; - @service can; + @service abilities; // =methods diff --git a/ui/admin/app/routes/scopes/scope/roles/index.js b/ui/admin/app/routes/scopes/scope/roles/index.js index c08c5dcf50..ebf2b39587 100644 --- a/ui/admin/app/routes/scopes/scope/roles/index.js +++ b/ui/admin/app/routes/scopes/scope/roles/index.js @@ -33,7 +33,7 @@ export default class ScopesScopeRolesIndexRoute extends Route { // =services - @service can; + @service abilities; @service store; // =methods @@ -79,7 +79,7 @@ export default class ScopesScopeRolesIndexRoute extends Route { let roles; let totalItems = 0; let doRolesExist = false; - if (this.can.can('list model', scope, { collection: 'roles' })) { + if (this.abilities.can('list model', scope, { collection: 'roles' })) { roles = await this.store.query('role', { scope_id, query: { search, filters, sort }, diff --git a/ui/admin/app/routes/scopes/scope/roles/new.js b/ui/admin/app/routes/scopes/scope/roles/new.js index e3ff8f9ed6..6026514172 100644 --- a/ui/admin/app/routes/scopes/scope/roles/new.js +++ b/ui/admin/app/routes/scopes/scope/roles/new.js @@ -10,7 +10,7 @@ export default class ScopesScopeRolesNewRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -20,7 +20,9 @@ export default class ScopesScopeRolesNewRoute extends Route { */ beforeModel() { const scopeModel = this.modelFor('scopes.scope'); - if (this.can.cannot('create model', scopeModel, { collection: 'roles' })) { + if ( + this.abilities.cannot('create model', scopeModel, { collection: 'roles' }) + ) { this.router.replaceWith('scopes.scope.roles'); } } diff --git a/ui/admin/app/routes/scopes/scope/roles/role.js b/ui/admin/app/routes/scopes/scope/roles/role.js index bc772c8576..22b36f5caa 100644 --- a/ui/admin/app/routes/scopes/scope/roles/role.js +++ b/ui/admin/app/routes/scopes/scope/roles/role.js @@ -11,7 +11,7 @@ export default class ScopesScopeRolesRoleRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/scopes/index.js b/ui/admin/app/routes/scopes/scope/scopes/index.js index bcbcc5b2ff..af98308213 100644 --- a/ui/admin/app/routes/scopes/scope/scopes/index.js +++ b/ui/admin/app/routes/scopes/scope/scopes/index.js @@ -33,7 +33,7 @@ export default class ScopesScopeScopesIndexRoute extends Route { // =services - @service can; + @service abilities; @service store; // =methods diff --git a/ui/admin/app/routes/scopes/scope/session-recordings/index.js b/ui/admin/app/routes/scopes/scope/session-recordings/index.js index 74ae99c0da..990744027c 100644 --- a/ui/admin/app/routes/scopes/scope/session-recordings/index.js +++ b/ui/admin/app/routes/scopes/scope/session-recordings/index.js @@ -16,7 +16,7 @@ export default class ScopesScopeSessionRecordingsIndexRoute extends Route { // =services @service store; @service router; - @service can; + @service abilities; @service intl; // =attributes @@ -124,7 +124,7 @@ export default class ScopesScopeSessionRecordingsIndexRoute extends Route { : { attributes: [sortAttribute], direction: sortDirection }; if ( - this.can.can('list scope', scope, { + this.abilities.can('list scope', scope, { collection: 'session-recordings', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording.js b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording.js index d6db610424..63659e54b4 100644 --- a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording.js +++ b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording.js @@ -12,7 +12,7 @@ export default class ScopesScopeSessionRecordingsSessionRecordingRoute extends R @service store; @service session; @service router; - @service can; + @service abilities; // =methods diff --git a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel.js b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel.js index 1f21cd03f1..356808ed5f 100644 --- a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel.js +++ b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel.js @@ -9,7 +9,7 @@ import { service } from '@ember/service'; export default class ScopesScopeSessionRecordingsSessionRecordingChannelsByConnectionChannelRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; @service flashMessages; @service intl; diff --git a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.js b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.js index e0e6d7297a..dd2e7e1857 100644 --- a/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.js +++ b/ui/admin/app/routes/scopes/scope/session-recordings/session-recording/channels-by-connection/channel/index.js @@ -8,7 +8,7 @@ import { service } from '@ember/service'; export default class ScopesScopeSessionRecordingsSessionRecordingChannelsByConnectionChannelIndexRoute extends Route { // =services - @service can; + @service abilities; @service flashMessages; @service intl; @@ -22,7 +22,9 @@ export default class ScopesScopeSessionRecordingsSessionRecordingChannelsByConne 'scopes.scope.session-recordings.session-recording.channels-by-connection.channel', ); - if (this.can.can('getAsciicast channel-recording', channelRecording)) { + if ( + this.abilities.can('getAsciicast channel-recording', channelRecording) + ) { try { asciicast = await channelRecording.getAsciicast(); } catch (e) { diff --git a/ui/admin/app/routes/scopes/scope/sessions/index.js b/ui/admin/app/routes/scopes/scope/sessions/index.js index 159bce03ac..0e24b402f7 100644 --- a/ui/admin/app/routes/scopes/scope/sessions/index.js +++ b/ui/admin/app/routes/scopes/scope/sessions/index.js @@ -10,7 +10,7 @@ import { restartableTask, timeout } from 'ember-concurrency'; export default class ScopesScopeSessionsIndexRoute extends Route { // =services - @service can; + @service abilities; @service store; // =attributes @@ -134,7 +134,7 @@ export default class ScopesScopeSessionsIndexRoute extends Route { // Preload the associated targets and users into the cache let refreshUsersPromise, refreshTargetsPromise; - const canListTargets = this.can.can('list model', scope, { + const canListTargets = this.abilities.can('list model', scope, { collection: 'targets', }); if (canListTargets) { @@ -152,8 +152,10 @@ export default class ScopesScopeSessionsIndexRoute extends Route { const orgScope = await this.store.findRecord('scope', scope.scope.id); const globalScope = await this.store.findRecord('scope', 'global'); const canListUsers = - this.can.can('list model', globalScope, { collection: 'users' }) || - this.can.can('list model', orgScope, { collection: 'users' }); + this.abilities.can('list model', globalScope, { + collection: 'users', + }) || + this.abilities.can('list model', orgScope, { collection: 'users' }); if (canListUsers) { refreshUsersPromise = this.store.query( diff --git a/ui/admin/app/routes/scopes/scope/storage-buckets.js b/ui/admin/app/routes/scopes/scope/storage-buckets.js index a0246b369c..139eec25d5 100644 --- a/ui/admin/app/routes/scopes/scope/storage-buckets.js +++ b/ui/admin/app/routes/scopes/scope/storage-buckets.js @@ -11,7 +11,7 @@ export default class ScopesScopeStorageBucketsRoute extends Route { @service store; @service session; - @service can; + @service abilities; @service router; // =methods @@ -31,7 +31,7 @@ export default class ScopesScopeStorageBucketsRoute extends Route { const scope = this.modelFor('scopes.scope'); const { id: scope_id } = scope; if ( - this.can.can('list scope', scope, { + this.abilities.can('list scope', scope, { collection: 'storage-buckets', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/storage-buckets/new.js b/ui/admin/app/routes/scopes/scope/storage-buckets/new.js index 272fb1faef..1ac768bcbf 100644 --- a/ui/admin/app/routes/scopes/scope/storage-buckets/new.js +++ b/ui/admin/app/routes/scopes/scope/storage-buckets/new.js @@ -14,7 +14,7 @@ export default class ScopesScopeStorageBucketsNewRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =attributes @@ -32,7 +32,7 @@ export default class ScopesScopeStorageBucketsNewRoute extends Route { beforeModel() { const scopeModel = this.modelFor('scopes.scope'); if ( - this.can.cannot('create scope', scopeModel, { + this.abilities.cannot('create scope', scopeModel, { collection: 'storage-buckets', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/storage-buckets/storage-bucket.js b/ui/admin/app/routes/scopes/scope/storage-buckets/storage-bucket.js index 07735b0009..a0878817f8 100644 --- a/ui/admin/app/routes/scopes/scope/storage-buckets/storage-bucket.js +++ b/ui/admin/app/routes/scopes/scope/storage-buckets/storage-bucket.js @@ -10,7 +10,7 @@ export default class ScopesScopeStorageBucketsStorageBucketRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/targets/index.js b/ui/admin/app/routes/scopes/scope/targets/index.js index 2139df29a2..41f97edec2 100644 --- a/ui/admin/app/routes/scopes/scope/targets/index.js +++ b/ui/admin/app/routes/scopes/scope/targets/index.js @@ -17,7 +17,7 @@ import { TYPE_TARGET_SSH, TYPE_TARGET_TCP } from 'api/models/target'; export default class ScopesScopeTargetsIndexRoute extends Route { // =services - @service can; + @service abilities; @service store; @service session; @service intl; @@ -93,7 +93,7 @@ export default class ScopesScopeTargetsIndexRoute extends Route { filters.type.push({ equals: type }); }); - if (this.can.can('list model', scope, { collection: 'sessions' })) { + if (this.abilities.can('list model', scope, { collection: 'sessions' })) { await this.store.query( 'session', { @@ -133,7 +133,7 @@ export default class ScopesScopeTargetsIndexRoute extends Route { let targets; let totalItems = 0; let doTargetsExist = false; - if (this.can.can('list model', scope, { collection: 'targets' })) { + if (this.abilities.can('list model', scope, { collection: 'targets' })) { targets = await this.store.query('target', { scope_id, query: { search, filters, sort }, diff --git a/ui/admin/app/routes/scopes/scope/targets/new.js b/ui/admin/app/routes/scopes/scope/targets/new.js index 4cce182161..63661de5e3 100644 --- a/ui/admin/app/routes/scopes/scope/targets/new.js +++ b/ui/admin/app/routes/scopes/scope/targets/new.js @@ -13,7 +13,7 @@ export default class ScopesScopeTargetsNewRoute extends Route { @service store; @service router; @service features; - @service can; + @service abilities; // =attributes queryParams = { @@ -30,7 +30,9 @@ export default class ScopesScopeTargetsNewRoute extends Route { beforeModel() { const scopeModel = this.modelFor('scopes.scope'); if ( - this.can.cannot('create model', scopeModel, { collection: 'targets' }) + this.abilities.cannot('create model', scopeModel, { + collection: 'targets', + }) ) { this.router.replaceWith('scopes.scope.targets'); } diff --git a/ui/admin/app/routes/scopes/scope/targets/target.js b/ui/admin/app/routes/scopes/scope/targets/target.js index f27afac519..5fcb83acbb 100644 --- a/ui/admin/app/routes/scopes/scope/targets/target.js +++ b/ui/admin/app/routes/scopes/scope/targets/target.js @@ -10,7 +10,7 @@ export default class ScopesScopeTargetsTargetRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/users/index.js b/ui/admin/app/routes/scopes/scope/users/index.js index 95d70a3b92..17ac75c9d8 100644 --- a/ui/admin/app/routes/scopes/scope/users/index.js +++ b/ui/admin/app/routes/scopes/scope/users/index.js @@ -34,7 +34,7 @@ export default class ScopesScopeUsersIndexRoute extends Route { // =services @service store; - @service can; + @service abilities; // =methods @@ -80,7 +80,7 @@ export default class ScopesScopeUsersIndexRoute extends Route { let users; let totalItems = 0; let doUsersExist = false; - if (this.can.can('list model', scope, { collection: 'users' })) { + if (this.abilities.can('list model', scope, { collection: 'users' })) { users = await this.store.query('user', { scope_id, query: { search, filters, sort }, diff --git a/ui/admin/app/routes/scopes/scope/users/new.js b/ui/admin/app/routes/scopes/scope/users/new.js index 53dc1a3245..67878aaa5d 100644 --- a/ui/admin/app/routes/scopes/scope/users/new.js +++ b/ui/admin/app/routes/scopes/scope/users/new.js @@ -10,7 +10,7 @@ export default class ScopesScopeUsersNewRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -20,7 +20,9 @@ export default class ScopesScopeUsersNewRoute extends Route { */ beforeModel() { const scopeModel = this.modelFor('scopes.scope'); - if (this.can.cannot('create model', scopeModel, { collection: 'users' })) { + if ( + this.abilities.cannot('create model', scopeModel, { collection: 'users' }) + ) { this.router.replaceWith('scopes.scope.users'); } } diff --git a/ui/admin/app/routes/scopes/scope/users/user.js b/ui/admin/app/routes/scopes/scope/users/user.js index 36465052bf..932c402ebe 100644 --- a/ui/admin/app/routes/scopes/scope/users/user.js +++ b/ui/admin/app/routes/scopes/scope/users/user.js @@ -10,7 +10,7 @@ export default class ScopesScopeUsersUserRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/routes/scopes/scope/workers.js b/ui/admin/app/routes/scopes/scope/workers.js index 1a5ac72859..9df43f7ac9 100644 --- a/ui/admin/app/routes/scopes/scope/workers.js +++ b/ui/admin/app/routes/scopes/scope/workers.js @@ -10,7 +10,7 @@ export default class ScopesScopeWorkersRoute extends Route { // =services @service store; - @service can; + @service abilities; @service session; @service router; @@ -30,7 +30,7 @@ export default class ScopesScopeWorkersRoute extends Route { model() { const scope = this.modelFor('scopes.scope'); const { id: scope_id } = scope; - if (this.can.can('list worker', scope, { collection: 'workers' })) { + if (this.abilities.can('list worker', scope, { collection: 'workers' })) { return this.store.query('worker', { scope_id }); } } diff --git a/ui/admin/app/routes/scopes/scope/workers/new.js b/ui/admin/app/routes/scopes/scope/workers/new.js index 611a559f2a..11eaebe035 100644 --- a/ui/admin/app/routes/scopes/scope/workers/new.js +++ b/ui/admin/app/routes/scopes/scope/workers/new.js @@ -10,7 +10,7 @@ export default class ScopesScopeWorkersNewRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods @@ -21,7 +21,7 @@ export default class ScopesScopeWorkersNewRoute extends Route { beforeModel() { const scopeModel = this.modelFor('scopes.scope'); if ( - this.can.cannot('create worker led worker', scopeModel, { + this.abilities.cannot('create worker led worker', scopeModel, { collection: 'workers', }) ) { diff --git a/ui/admin/app/routes/scopes/scope/workers/worker.js b/ui/admin/app/routes/scopes/scope/workers/worker.js index 529a4b6577..3ec15d1d9e 100644 --- a/ui/admin/app/routes/scopes/scope/workers/worker.js +++ b/ui/admin/app/routes/scopes/scope/workers/worker.js @@ -10,7 +10,7 @@ export default class ScopesScopeWorkersWorkerRoute extends Route { // =services @service store; - @service can; + @service abilities; @service router; // =methods diff --git a/ui/admin/app/svgs.json b/ui/admin/app/svgs.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/ui/admin/app/svgs.json @@ -0,0 +1 @@ +{} diff --git a/ui/admin/babel.config.cjs b/ui/admin/babel.config.cjs new file mode 100644 index 0000000000..419088afff --- /dev/null +++ b/ui/admin/babel.config.cjs @@ -0,0 +1,42 @@ +const { + babelCompatSupport, + templateCompatSupport, +} = require('@embroider/compat/babel'); + +module.exports = { + plugins: [ + [ + 'babel-plugin-ember-template-compilation', + { + compilerPath: 'ember-source/dist/ember-template-compiler.js', + enableLegacyModules: [ + 'ember-cli-htmlbars', + 'ember-cli-htmlbars-inline-precompile', + 'htmlbars-inline-precompile', + ], + transforms: [...templateCompatSupport()], + }, + ], + [ + 'module:decorator-transforms', + { + runtime: { + import: require.resolve('decorator-transforms/runtime-esm'), + }, + }, + ], + [ + '@babel/plugin-transform-runtime', + { + absoluteRuntime: __dirname, + useESModules: true, + regenerator: false, + }, + ], + ...babelCompatSupport(), + ], + + generatorOpts: { + compact: false, + }, +}; diff --git a/ui/admin/config/environment.js b/ui/admin/config/environment.js index cb3a04d750..1beb157751 100644 --- a/ui/admin/config/environment.js +++ b/ui/admin/config/environment.js @@ -139,10 +139,6 @@ module.exports = function (environment) { }, }, - 'ember-cli-mirage': { - directory: '../../addons/api/mirage', - }, - flashMessageDefaults: { timeout: 4000, }, @@ -157,9 +153,11 @@ module.exports = function (environment) { // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; // ENV.APP.LOG_VIEW_LOOKUPS = true; - ENV['ember-cli-mirage'].enabled = process.env.ENABLE_MIRAGE - ? JSON.parse(process.env.ENABLE_MIRAGE) - : true; + ENV.mirage = { + enabled: process.env.ENABLE_MIRAGE + ? JSON.parse(process.env.ENABLE_MIRAGE) + : true, + }; // Default edition in development ENV.features.defaultEdition = 'enterprise'; @@ -197,6 +195,12 @@ module.exports = function (environment) { ENV.ENABLE_A11Y_AUDIT = ENABLE_A11Y_AUDIT; ENV.COLOR_THEME = COLOR_THEME; + + ENV.mirage = { + enabled: process.env.ENABLE_MIRAGE + ? JSON.parse(process.env.ENABLE_MIRAGE) + : true, + }; } if (environment === 'production') { diff --git a/ui/admin/ember-cli-build.js b/ui/admin/ember-cli-build.js index 7a98767e1c..3e1ae101b6 100644 --- a/ui/admin/ember-cli-build.js +++ b/ui/admin/ember-cli-build.js @@ -3,12 +3,21 @@ * SPDX-License-Identifier: BUSL-1.1 */ -'use strict'; - +'use strict';; const EmberApp = require('ember-cli/lib/broccoli/ember-app'); +const { + compatBuild +} = require("@embroider/compat"); + module.exports = async function (defaults) { + const { + buildOnce + } = await import("@embroider/vite"); + const { setConfig } = await import('@warp-drive/build-config'); + const { EMBER_ENV } = process.env; + var config = require('./config/environment')(EMBER_ENV); const app = new EmberApp(defaults, { hinting: false, @@ -31,6 +40,11 @@ module.exports = async function (defaults) { api: { enableSqlite: true, }, + '@embroider/macros': { + setOwnConfig: { + startMirageWithApp: config.mirage?.enabled ?? false, + }, + }, }); // TODO: The deprecations object can be removed in ember-data 6.0. @@ -57,5 +71,5 @@ module.exports = async function (defaults) { // please specify an object with the list of modules as keys // along with the exports of each module as its value. - return app.toTree(); + return compatBuild(app, buildOnce); }; diff --git a/ui/admin/app/index.html b/ui/admin/index.html similarity index 60% rename from ui/admin/app/index.html rename to ui/admin/index.html index f5cc44780c..7f359d6e89 100644 --- a/ui/admin/app/index.html +++ b/ui/admin/index.html @@ -14,8 +14,8 @@ {{content-for "head"}} - - + + @@ -24,8 +24,13 @@ {{content-for "body"}} - - + + {{content-for "body-footer"}} diff --git a/ui/admin/package.json b/ui/admin/package.json index 12cf34b858..c4cd482d7b 100644 --- a/ui/admin/package.json +++ b/ui/admin/package.json @@ -12,7 +12,7 @@ "scripts": { "doc:toc": "doctoc README.md", "build:development": "ember build", - "build": "ember build --environment=production", + "build": "vite build", "build:oss": "EDITION=oss ember build --environment=production", "build:enterprise": "EDITION=enterprise ember build --environment=production", "build:hcp": "EDITION=hcp ember build --environment=production", @@ -28,64 +28,74 @@ "format:hbs": "prettier --write 'app/**/*.hbs'", "format:js": "prettier --write '{app,config,stories,tests}/**/*.js' *.js", "format:sass": "prettier --write app/**/*.scss", - "start": "ember serve", + "start": "vite", "clean:coverage": "rm -rf coverage_* || true", "test": "pnpm clean:coverage && pnpm test:ember && pnpm test:finalize", "test-a11y": "concurrently \"pnpm:test-a11y:*\" --names \"test-a11y:\"", "test-a11y:light": "ENABLE_A11Y_AUDIT=true ember test --test-port 0 --filter='acceptance'", "test-a11y:dark": "COLOR_THEME=dark pnpm test-a11y:light", - "test:ember": "COVERAGE=true ember exam --test-port 0 --split=4 --parallel=1 --random", + "test:ember": "vite build --mode development && ember test --path dist", "test:finalize": "ember coverage-merge && pnpm clean:coverage" }, "dependencies": { "@babel/runtime": "7.27.6", + "api": "workspace:*", + "core": "workspace:*", + "ember-engines": "^0.12.0", "ember-named-blocks-polyfill": "^0.2.5", "lodash": "^4.17.21", + "miragejs": "^0.1.48", "uuid": "^11.0.3" }, "devDependencies": { "@babel/core": "^7.26.10", "@babel/eslint-parser": "^7.25.1", "@babel/plugin-proposal-decorators": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.26.9", "@ember/optional-features": "^2.1.0", "@ember/render-modifiers": "^2.0.4", "@ember/string": "^4.0.0", "@ember/test-helpers": "^5.2.1", + "@embroider/compat": "^4.0.3", + "@embroider/config-meta-loader": "^1.0.0", + "@embroider/core": "^4.0.3", "@embroider/macros": "^1.18.0", + "@embroider/vite": "^1.1.1", "@faker-js/faker": "^8.0.2", "@glimmer/component": "^2.0.0", "@glimmer/tracking": "^1.1.2", "@hashicorp/ember-asciinema-player": "https://github.com/hashicorp/ember-asciinema-player.git#e047a096039cff70234c232efe75dcad74c6358a", + "@rollup/plugin-babel": "^6.0.4", "@warp-drive/build-config": "^0.0.2", - "broccoli-asset-rev": "^3.0.0", + "babel-plugin-ember-template-compilation": "^2.3.0", "concurrently": "^9.1.0", - "core": "workspace:*", + "decorator-transforms": "^2.3.0", "doctoc": "^2.2.0", "ember-a11y-refocus": "^5.0.0", "ember-a11y-testing": "^7.1.2", "ember-auto-import": "^2.10.0", "ember-basic-dropdown": "^8.8.0", + "ember-browser-services": "^4.0.3", + "ember-can": "^8.0.0", "ember-cli": "~5.12.0", "ember-cli-babel": "^8.2.0", - "ember-cli-clean-css": "^3.0.0", "ember-cli-code-coverage": "^1.0.3", "ember-cli-content-security-policy": "^2.0.3", - "ember-cli-dependency-checker": "^3.3.2", "ember-cli-flash": "^6.0.0", "ember-cli-htmlbars": "^6.3.0", - "ember-cli-inject-live-reload": "^2.1.0", "ember-cli-sass": "^11.0.1", - "ember-cli-sri": "^2.1.1", - "ember-cli-terser": "^4.0.2", "ember-concurrency": "^4.0.3", "ember-exam": "^8.0.0", "ember-inline-svg": "^1.0.1", - "ember-load-initializers": "^2.1.2", + "ember-intl": "^7.1.8", + "ember-load-initializers": "^3.0.0", + "ember-loading": "^2.0.0", "ember-modifier": "^4.2.0", "ember-page-title": "^8.2.3", "ember-power-select": "^8.11.0", - "ember-qunit": "^8.1.0", - "ember-resolver": "^12.0.1", + "ember-qunit": "^9.0.0", + "ember-resolver": "^13.1.1", + "ember-simple-auth": "^6.1.0", "ember-source": "~5.12.0", "ember-template-lint": "^6.0.0", "ember-template-lint-plugin-prettier": "^5.0.0", @@ -95,7 +105,6 @@ "eslint-plugin-n": "^16.6.2", "eslint-plugin-qunit": "^8.1.2", "js-bexpr": "hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1", - "loader.js": "^4.7.0", "postcss": "^8.4.31", "prettier": "^3.3.3", "qunit": "^2.22.0", @@ -106,7 +115,7 @@ "stylelint-config-prettier-scss": "^0.0.1", "stylelint-config-standard-scss": "^11.0.0", "tracked-built-ins": "^4.0.0", - "webpack": "^5.95.0" + "vite": "^6.0.0" }, "engines": { "node": "20.* || 22.*" @@ -121,5 +130,13 @@ ], "*.hbs": "ember-template-lint --fix", "*.{scss,yaml}": "prettier --write" + }, + "ember-addon": { + "type": "app", + "version": 2 + }, + "exports": { + "./tests/*": "./tests/*", + "./*": "./app/*" } } diff --git a/ui/admin/testem.js b/ui/admin/testem.js index 552b07b13c..d1ec11fac2 100644 --- a/ui/admin/testem.js +++ b/ui/admin/testem.js @@ -11,39 +11,41 @@ if (!['dark', 'light'].includes(COLOR_THEME)) { ); } -module.exports = { - test_page: 'tests/index.html?hidepassed', - disable_watching: true, - launch_in_ci: ['Chrome'], - launch_in_dev: ['Chrome', 'Firefox'], - browser_start_timeout: 120, - browser_args: { - Chrome: { - all: [ - COLOR_THEME === 'dark' - ? '--enable-features=WebContentsForceDark' - : null, - COLOR_THEME === 'dark' ? '--force-dark-mode' : '--force-light-mode', - ].filter(Boolean), - ci: [ - // --no-sandbox is needed when running Chrome inside a container - process.env.CI ? '--no-sandbox' : null, - '--headless', - // Disable backgrounding renders for occluded windows - '--disable-backgrounding-occluded-windows', - // Disable renderer process backgrounding - '--disable-renderer-backgrounding', - // Disable task throttling of timer tasks from background pages - '--disable-background-timer-throttling', - '--disable-dev-shm-usage', - '--disable-gpu', - //'--disable-software-rasterizer', - '--mute-audio', - '--remote-debugging-port=0', - '--window-size=1440,900', - ].filter(Boolean), +if (typeof module !== "undefined") { + module.exports = { + test_page: 'tests/index.html?hidepassed', + disable_watching: true, + launch_in_ci: ['Chrome'], + launch_in_dev: ['Chrome', 'Firefox'], + browser_start_timeout: 120, + browser_args: { + Chrome: { + all: [ + COLOR_THEME === 'dark' + ? '--enable-features=WebContentsForceDark' + : null, + COLOR_THEME === 'dark' ? '--force-dark-mode' : '--force-light-mode', + ].filter(Boolean), + ci: [ + // --no-sandbox is needed when running Chrome inside a container + process.env.CI ? '--no-sandbox' : null, + '--headless', + // Disable backgrounding renders for occluded windows + '--disable-backgrounding-occluded-windows', + // Disable renderer process backgrounding + '--disable-renderer-backgrounding', + // Disable task throttling of timer tasks from background pages + '--disable-background-timer-throttling', + '--disable-dev-shm-usage', + '--disable-gpu', + //'--disable-software-rasterizer', + '--mute-audio', + '--remote-debugging-port=0', + '--window-size=1440,900', + ].filter(Boolean), + }, + Firefox: ['-headless', '--window-size=1440,900'], }, - Firefox: ['-headless', '--window-size=1440,900'], - }, - parallel: process.env.EMBER_EXAM_SPLIT_COUNT || 1, -}; + parallel: process.env.EMBER_EXAM_SPLIT_COUNT || 1, + }; +} diff --git a/ui/admin/tests/helpers/index.js b/ui/admin/tests/helpers/index.js index 31e6d0d349..94c0a1a6cc 100644 --- a/ui/admin/tests/helpers/index.js +++ b/ui/admin/tests/helpers/index.js @@ -9,7 +9,7 @@ import { setupTest as upstreamSetupTest, } from 'ember-qunit'; import { authenticateSession } from 'ember-simple-auth/test-support'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; // This file exists to provide wrappers around ember-qunit's // test setup functions. This way, you can easily extend the setup that is diff --git a/ui/admin/tests/index.html b/ui/admin/tests/index.html index 29683588b6..7684b9a59f 100644 --- a/ui/admin/tests/index.html +++ b/ui/admin/tests/index.html @@ -14,9 +14,9 @@ {{content-for "head"}} {{content-for "test-head"}} - - - + + + {{content-for "head-footer"}} {{content-for "test-head-footer"}} @@ -33,12 +33,17 @@ - - - - + + + + + {{content-for "body-footer"}} - {{content-for "test-body-footer"}} + diff --git a/ui/admin/tests/integration/components/form/credential/username-password-domain-test.js b/ui/admin/tests/integration/components/form/credential/username-password-domain-test.js deleted file mode 100644 index 2b1adf108c..0000000000 --- a/ui/admin/tests/integration/components/form/credential/username-password-domain-test.js +++ /dev/null @@ -1,232 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: BUSL-1.1 - */ - -import { module, test } from 'qunit'; -import { setupRenderingTest } from 'admin/tests/helpers'; -import { click, fillIn, render, blur } from '@ember/test-helpers'; -import { hbs } from 'ember-cli-htmlbars'; -import { setupIntl } from 'ember-intl/test-support'; -import sinon from 'sinon'; - -module( - 'Integration | Component | form/credential/username-password-domain', - function (hooks) { - setupRenderingTest(hooks); - setupIntl(hooks, 'en-us'); - - test('it renders', async function (assert) { - this.model = {}; - this.submit = () => {}; - this.cancel = () => {}; - await render( - hbs``, - ); - - assert.dom('[name=domain]').exists(); - assert.dom('[name=username]').exists(); - assert.dom('[name=password]').doesNotExist(); - assert.dom('[name=type]').doesNotExist(); - assert.dom('.info-field').exists(); - assert.dom('[name=name]').exists(); - assert.dom('[name=description]').exists(); - }); - - test('it splits the username and domain when the value contains delimiters such as `@` or `\\` on `onBlur`', async function (assert) { - this.model = { username: '', domain: '', authorized_actions: ['update'] }; - this.submit = () => {}; - this.cancel = () => {}; - await render(hbs` - `); - - await click('button'); - await fillIn('[name=username]', 'username@domain.com'); - await blur('[name=username]'); - - assert.strictEqual(this.model.username, 'username'); - assert.strictEqual(this.model.domain, 'domain.com'); - - // Test with a different delimiter `\` - await fillIn('[name=username]', `domain.com\\username`); - await blur('[name=username]'); - - assert.strictEqual(this.model.username, 'username'); - assert.strictEqual(this.model.domain, 'domain.com'); - }); - - test('it splits the username and domain when the value contains delimiters such as `@` or `\\` when submit is clicked', async function (assert) { - this.model = { username: '', domain: '', authorized_actions: ['update'] }; - this.submit = () => {}; - this.cancel = () => {}; - await render(hbs` - `); - - await click('button'); - await fillIn('[name=username]', 'username@domain.com'); - await click('button'); - - assert.strictEqual(this.model.username, 'username'); - assert.strictEqual(this.model.domain, 'domain.com'); - }); - - test('it does not split the username and domain when the value does not contain a delimiter', async function (assert) { - this.model = { username: '', domain: '', authorized_actions: ['update'] }; - this.submit = () => {}; - this.cancel = () => {}; - await render(hbs` - `); - - await click('button'); - - await fillIn('[name=username]', 'username'); - await blur('[name=username]'); - - assert.strictEqual(this.model.username, 'username'); - assert.strictEqual(this.model.domain, ''); - }); - - test('it does not split if the username or domain is empty', async function (assert) { - this.model = { username: '', domain: '', authorized_actions: ['update'] }; - this.submit = () => {}; - this.cancel = () => {}; - await render(hbs` - `); - - await click('button'); - - // Test with username ending with a delimiter - await fillIn('[name=username]', 'username@'); - await blur('[name=username]'); - assert.strictEqual(this.model.username, 'username@'); - assert.strictEqual(this.model.domain, ''); - - // Check for empty username with domain - await fillIn('[name=username]', '@domain.com'); - await blur('[name=username]'); - assert.strictEqual(this.model.username, '@domain.com'); - assert.strictEqual(this.model.domain, ''); - }); - - test('it does not split when the username is empty or contains multiple delimiters', async function (assert) { - this.model = { username: '', domain: '', authorized_actions: ['update'] }; - this.submit = () => {}; - this.cancel = () => {}; - await render(hbs` - `); - - await click('button'); - - // Check for an empty username - await fillIn('[name=username]', ''); - await blur('[name=username]'); - - assert.strictEqual(this.model.username, ''); - assert.strictEqual(this.model.domain, ''); - - // Check for a username containing multiple delimiters - await fillIn('[name=username]', 'hello@world@again'); - await blur('[name=username]'); - - assert.strictEqual(this.model.username, 'hello@world@again'); - assert.strictEqual(this.model.domain, ''); - }); - - test('it does not update the model when the username remains unchanged', async function (assert) { - this.model = { - username: 'username', - domain: 'domain.com', - authorized_actions: ['update'], - }; - this.submit = () => {}; - this.cancel = () => {}; - await render(hbs` - `); - - await click('button'); - - await fillIn('[name=username]', 'username@domain.com'); - await blur('[name=username]'); - - assert.strictEqual(this.model.username, 'username'); - assert.strictEqual(this.model.domain, 'domain.com'); - }); - - test('it allows the username and domain to be updated', async function (assert) { - this.model = { - username: 'username', - domain: 'domain.com', - authorized_actions: ['update'], - }; - this.submit = () => {}; - this.cancel = () => {}; - await render(hbs` - `); - - await click('button'); - - await fillIn('[name=username]', 'newname'); - await blur('[name=username]'); - await fillIn('[name=domain]', 'newdomain.com'); - - assert.strictEqual(this.model.username, 'newname'); - assert.strictEqual(this.model.domain, 'newdomain.com'); - }); - - test('it updates the username and domain when the submit action is triggered', async function (assert) { - this.model = { - username: 'username', - domain: 'domain.com', - authorized_actions: ['update'], - }; - const submitSpy = sinon.spy(); - this.submit = submitSpy; - this.cancel = () => {}; - - await render(hbs` - `); - - await click('button'); - - await fillIn('[name=username]', 'username2@domain2.com'); - await click('[type=submit]'); - - assert.ok(submitSpy.calledOnce); - assert.deepEqual(submitSpy.firstCall.args, []); - assert.strictEqual(this.model.username, 'username2'); - assert.strictEqual(this.model.domain, 'domain2.com'); - }); - }, -); diff --git a/ui/admin/tests/integration/components/scope-picker/index-test.js b/ui/admin/tests/integration/components/scope-picker/index-test.js index 3e3566383a..df88f631f7 100644 --- a/ui/admin/tests/integration/components/scope-picker/index-test.js +++ b/ui/admin/tests/integration/components/scope-picker/index-test.js @@ -8,7 +8,7 @@ import { setupRenderingTest } from 'admin/tests/helpers'; import { render } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; import { click } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; diff --git a/ui/admin/tests/unit/abilities/auth-method-test.js b/ui/admin/tests/unit/abilities/auth-method-test.js index 66f878222e..f9f0e5f383 100644 --- a/ui/admin/tests/unit/abilities/auth-method-test.js +++ b/ui/admin/tests/unit/abilities/auth-method-test.js @@ -14,12 +14,12 @@ import { module('Unit | Abilities | auth-method', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; let features; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); features = this.owner.lookup('service:features'); }); @@ -30,9 +30,9 @@ module('Unit | Abilities | auth-method', function (hooks) { authorized_actions: ['read'], type: TYPE_AUTH_METHOD_LDAP, }); - assert.true(canService.can('read auth-method', authMethod)); + assert.true(abilitiesService.can('read auth-method', authMethod)); authMethod.authorized_actions = []; - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); }); test('cannot read LDAP auth-method when authorized and feature flag disabled', function (assert) { @@ -40,9 +40,9 @@ module('Unit | Abilities | auth-method', function (hooks) { authorized_actions: ['read'], type: TYPE_AUTH_METHOD_LDAP, }); - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); authMethod.authorized_actions = []; - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); }); test('can read non-LDAP auth-method when authorized', function (assert) { @@ -50,9 +50,9 @@ module('Unit | Abilities | auth-method', function (hooks) { authorized_actions: ['read'], type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('read auth-method', authMethod)); + assert.true(abilitiesService.can('read auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('read auth-method', authMethod)); + assert.true(abilitiesService.can('read auth-method', authMethod)); }); test('cannot read non-LDAP auth-method when unauthorized', function (assert) { @@ -60,16 +60,16 @@ module('Unit | Abilities | auth-method', function (hooks) { authorized_actions: [], type: TYPE_AUTH_METHOD_OIDC, }); - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.false(canService.can('read auth-method', authMethod)); + assert.false(abilitiesService.can('read auth-method', authMethod)); }); test('cannot make LDAP auth-method primary when feature flag disabled', function (assert) { const authMethod = store.createRecord('auth-method', { type: TYPE_AUTH_METHOD_LDAP, }); - assert.false(canService.can('makePrimary auth-method', authMethod)); + assert.false(abilitiesService.can('makePrimary auth-method', authMethod)); }); test('can make LDAP auth-method primary when feature flag enabled', function (assert) { @@ -77,15 +77,15 @@ module('Unit | Abilities | auth-method', function (hooks) { const authMethod = store.createRecord('auth-method', { type: TYPE_AUTH_METHOD_LDAP, }); - assert.true(canService.can('makePrimary auth-method', authMethod)); + assert.true(abilitiesService.can('makePrimary auth-method', authMethod)); }); test('can make non-LDAP auth-method primary', function (assert) { const authMethod = store.createRecord('auth-method', { type: TYPE_AUTH_METHOD_OIDC, }); - assert.true(canService.can('makePrimary auth-method', authMethod)); + assert.true(abilitiesService.can('makePrimary auth-method', authMethod)); authMethod.type = TYPE_AUTH_METHOD_PASSWORD; - assert.true(canService.can('makePrimary auth-method', authMethod)); + assert.true(abilitiesService.can('makePrimary auth-method', authMethod)); }); }); diff --git a/ui/admin/tests/unit/abilities/channel-recording-test.js b/ui/admin/tests/unit/abilities/channel-recording-test.js index f92a38fd9c..411f9d45b2 100644 --- a/ui/admin/tests/unit/abilities/channel-recording-test.js +++ b/ui/admin/tests/unit/abilities/channel-recording-test.js @@ -11,7 +11,7 @@ import { MIME_TYPE_ASCIICAST } from 'api/models/channel-recording'; module('Unit | Abilities | channel-recording', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; let sessionRecording; let connectionRecording; @@ -19,7 +19,7 @@ module('Unit | Abilities | channel-recording', function (hooks) { let noneAsciicastChannel; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); sessionRecording = store.createRecord('session-recording', { @@ -39,18 +39,20 @@ module('Unit | Abilities | channel-recording', function (hooks) { }); test('returns true if session recording complete and channel mime type is asciicast', function (assert) { - assert.true(canService.can('play channel-recording', asciicastChannel)); + assert.true( + abilitiesService.can('play channel-recording', asciicastChannel), + ); assert.false( - canService.can('play channel-recording', noneAsciicastChannel), + abilitiesService.can('play channel-recording', noneAsciicastChannel), ); }); test('returns false if session recording complete and channel mime type is not asciicast', function (assert) { assert.true( - canService.can('viewOnly channel-recording', noneAsciicastChannel), + abilitiesService.can('viewOnly channel-recording', noneAsciicastChannel), ); assert.false( - canService.can('viewOnly channel-recording', asciicastChannel), + abilitiesService.can('viewOnly channel-recording', asciicastChannel), ); }); }); diff --git a/ui/admin/tests/unit/abilities/collection-test.js b/ui/admin/tests/unit/abilities/collection-test.js index c3daff34e4..aa26ccd7b4 100644 --- a/ui/admin/tests/unit/abilities/collection-test.js +++ b/ui/admin/tests/unit/abilities/collection-test.js @@ -10,7 +10,7 @@ module('Unit | Abilities | model', function (hooks) { setupTest(hooks); test('it reflects when a resource may be navigated to based on list and create actions', function (assert) { - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_collection_actions: { foobars: [] }, }; diff --git a/ui/admin/tests/unit/abilities/credential-library-test.js b/ui/admin/tests/unit/abilities/credential-library-test.js index da5177ea58..f957b4f6d1 100644 --- a/ui/admin/tests/unit/abilities/credential-library-test.js +++ b/ui/admin/tests/unit/abilities/credential-library-test.js @@ -21,32 +21,40 @@ module('Unit | Abilities | credential-library', function (hooks) { test('can read credential library type when authorized and feature is enabled', function (assert) { features.enable('ssh-target'); - const canService = this.owner.lookup('service:can'); + const abilitiesService = this.owner.lookup('service:abilities'); const store = this.owner.lookup('service:store'); const credentialLibrary = store.createRecord('credential-library', { authorized_actions: ['read'], type: TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE, }); - assert.true(canService.can('read credential-library', credentialLibrary)); + assert.true( + abilitiesService.can('read credential-library', credentialLibrary), + ); credentialLibrary.type = TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC; - assert.true(canService.can('read credential-library', credentialLibrary)); + assert.true( + abilitiesService.can('read credential-library', credentialLibrary), + ); }); test('cannot read credential library type when unauthorized and feature is enabled', function (assert) { features.enable('ssh-target'); - const canService = this.owner.lookup('service:can'); + const abilitiesService = this.owner.lookup('service:abilities'); const store = this.owner.lookup('service:store'); const credentialLibrary = store.createRecord('credential-library', { authorized_actions: [], type: TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE, }); - assert.false(canService.can('read credential-library', credentialLibrary)); + assert.false( + abilitiesService.can('read credential-library', credentialLibrary), + ); credentialLibrary.type = TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC; - assert.false(canService.can('read credential-library', credentialLibrary)); + assert.false( + abilitiesService.can('read credential-library', credentialLibrary), + ); }); test('cannot read credential library type when unauthorized and feature is disabled', function (assert) { - const canService = this.owner.lookup('service:can'); + const abilitiesService = this.owner.lookup('service:abilities'); const store = this.owner.lookup('service:store'); const featuresService = this.owner.lookup('service:features'); const credentialLibrary = store.createRecord('credential-library', { @@ -54,13 +62,17 @@ module('Unit | Abilities | credential-library', function (hooks) { type: TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE, }); assert.false(featuresService.isEnabled('ssh-target')); - assert.false(canService.can('read credential-library', credentialLibrary)); + assert.false( + abilitiesService.can('read credential-library', credentialLibrary), + ); credentialLibrary.type = TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC; - assert.false(canService.can('read credential-library', credentialLibrary)); + assert.false( + abilitiesService.can('read credential-library', credentialLibrary), + ); }); test('can read vault-generic but not vault-ssh-certificate when authorized and feature is disabled', function (assert) { - const canService = this.owner.lookup('service:can'); + const abilitiesService = this.owner.lookup('service:abilities'); const store = this.owner.lookup('service:store'); const featuresService = this.owner.lookup('service:features'); const credentialLibrary = store.createRecord('credential-library', { @@ -68,8 +80,12 @@ module('Unit | Abilities | credential-library', function (hooks) { type: TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE, }); assert.false(featuresService.isEnabled('ssh-target')); - assert.false(canService.can('read credential-library', credentialLibrary)); + assert.false( + abilitiesService.can('read credential-library', credentialLibrary), + ); credentialLibrary.type = TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC; - assert.true(canService.can('read credential-library', credentialLibrary)); + assert.true( + abilitiesService.can('read credential-library', credentialLibrary), + ); }); }); diff --git a/ui/admin/tests/unit/abilities/role-test.js b/ui/admin/tests/unit/abilities/role-test.js index 4c803f4740..a9fadd7aef 100644 --- a/ui/admin/tests/unit/abilities/role-test.js +++ b/ui/admin/tests/unit/abilities/role-test.js @@ -9,11 +9,11 @@ import { setupTest } from 'ember-qunit'; module('Unit | Abilities | role', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); }); @@ -23,9 +23,9 @@ module('Unit | Abilities | role', function (hooks) { authorized_actions: ['set-grant-scopes'], scope: globalScope, }); - assert.true(canService.can('setGrantScopes role', role)); + assert.true(abilitiesService.can('setGrantScopes role', role)); role.authorized_actions = []; - assert.false(canService.can('setGrantScopes role', role)); + assert.false(abilitiesService.can('setGrantScopes role', role)); }); test('can setGrantScopes on role when authorized and scope is org type', function (assert) { @@ -38,9 +38,9 @@ module('Unit | Abilities | role', function (hooks) { authorized_actions: ['set-grant-scopes'], scope: orgScope, }); - assert.true(canService.can('setGrantScopes role', role)); + assert.true(abilitiesService.can('setGrantScopes role', role)); role.authorized_actions = []; - assert.false(canService.can('setGrantScopes role', role)); + assert.false(abilitiesService.can('setGrantScopes role', role)); }); test('cannot setGrantScopes on role when authorized and scope is project type', function (assert) { @@ -57,8 +57,8 @@ module('Unit | Abilities | role', function (hooks) { authorized_actions: ['set-grant-scopes'], scope: projectScope, }); - assert.false(canService.can('setGrantScopes role', role)); + assert.false(abilitiesService.can('setGrantScopes role', role)); role.authorized_actions = []; - assert.false(canService.can('setGrantScopes role', role)); + assert.false(abilitiesService.can('setGrantScopes role', role)); }); }); diff --git a/ui/admin/tests/unit/abilities/scope-test.js b/ui/admin/tests/unit/abilities/scope-test.js index b3d022e287..2235f3fd57 100644 --- a/ui/admin/tests/unit/abilities/scope-test.js +++ b/ui/admin/tests/unit/abilities/scope-test.js @@ -10,12 +10,12 @@ module('Unit | Abilities | Scope', function (hooks) { setupTest(hooks); let features; - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { store = this.owner.lookup('service:store'); - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); features = this.owner.lookup('service:features'); }); @@ -25,7 +25,7 @@ module('Unit | Abilities | Scope', function (hooks) { const scopeModel = store.createRecord('scope', { authorized_actions: ['attach-storage-policy'], }); - assert.true(canService.can('attachStoragePolicy scope', scopeModel)); + assert.true(abilitiesService.can('attachStoragePolicy scope', scopeModel)); }); test('cannot attach storage policy when unauthorized', function (assert) { @@ -35,7 +35,7 @@ module('Unit | Abilities | Scope', function (hooks) { authorized_actions: [], }); - assert.false(canService.can('attachStoragePolicy scope', scopeModel)); + assert.false(abilitiesService.can('attachStoragePolicy scope', scopeModel)); }); test('can detach storage policy when authorized', function (assert) { @@ -44,6 +44,6 @@ module('Unit | Abilities | Scope', function (hooks) { const scopeModel = store.createRecord('scope', { authorized_actions: ['detach-storage-policy'], }); - assert.true(canService.can('detachStoragePolicy scope', scopeModel)); + assert.true(abilitiesService.can('detachStoragePolicy scope', scopeModel)); }); }); diff --git a/ui/admin/tests/unit/abilities/session-recording-test.js b/ui/admin/tests/unit/abilities/session-recording-test.js index ab1bc819f8..eb848bd272 100644 --- a/ui/admin/tests/unit/abilities/session-recording-test.js +++ b/ui/admin/tests/unit/abilities/session-recording-test.js @@ -15,12 +15,12 @@ module('Unit | Abilities | session-recording', function (hooks) { setupTest(hooks); let features; - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { features = this.owner.lookup('service:features'); - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); }); @@ -43,10 +43,13 @@ module('Unit | Abilities | session-recording', function (hooks) { ); assert.true( - canService.can('read session-recording', recordingWithAuthorizedAction), + abilitiesService.can( + 'read session-recording', + recordingWithAuthorizedAction, + ), ); assert.false( - canService.can( + abilitiesService.can( 'read session-recording', recordingWithoutAuthorizedAction, ), @@ -70,10 +73,13 @@ module('Unit | Abilities | session-recording', function (hooks) { ); assert.false( - canService.can('read session-recording', recordingWithAuthorizedAction), + abilitiesService.can( + 'read session-recording', + recordingWithAuthorizedAction, + ), ); assert.false( - canService.can( + abilitiesService.can( 'read session-recording', recordingWithoutAuthorizedAction, ), @@ -95,12 +101,12 @@ module('Unit | Abilities | session-recording', function (hooks) { }); assert.true( - canService.can('list scope', scopeModelWithAuthorizedAction, { + abilitiesService.can('list scope', scopeModelWithAuthorizedAction, { collection: 'session-recordings', }), ); assert.false( - canService.can('list scope', scopeModelWithoutAuthorizedAction, { + abilitiesService.can('list scope', scopeModelWithoutAuthorizedAction, { collection: 'session-recordings', }), ); @@ -121,12 +127,12 @@ module('Unit | Abilities | session-recording', function (hooks) { }); assert.true( - canService.can('list scope', scopeModelWithAuthorizedAction, { + abilitiesService.can('list scope', scopeModelWithAuthorizedAction, { collection: 'session-recordings', }), ); assert.false( - canService.can('list scope', scopeModelWithoutAuthorizedAction, { + abilitiesService.can('list scope', scopeModelWithoutAuthorizedAction, { collection: 'session-recordings', }), ); @@ -147,14 +153,18 @@ module('Unit | Abilities | session-recording', function (hooks) { }); assert.true( - canService.can('navigate scope', scopeModelWithAuthorizedAction, { + abilitiesService.can('navigate scope', scopeModelWithAuthorizedAction, { collection: 'session-recordings', }), ); assert.false( - canService.can('navigate scope', scopeModelWithoutAuthorizedAction, { - collection: 'session-recordings', - }), + abilitiesService.can( + 'navigate scope', + scopeModelWithoutAuthorizedAction, + { + collection: 'session-recordings', + }, + ), ); }); @@ -171,14 +181,18 @@ module('Unit | Abilities | session-recording', function (hooks) { }); assert.false( - canService.can('navigate scope', scopeModelWithAuthorizedAction, { + abilitiesService.can('navigate scope', scopeModelWithAuthorizedAction, { collection: 'session-recordings', }), ); assert.false( - canService.can('navigate scope', scopeModelWithoutAuthorizedAction, { - collection: 'session-recordings', - }), + abilitiesService.can( + 'navigate scope', + scopeModelWithoutAuthorizedAction, + { + collection: 'session-recordings', + }, + ), ); }); @@ -204,10 +218,13 @@ module('Unit | Abilities | session-recording', function (hooks) { ); assert.true( - canService.can('delete session-recording', recordingWithAuthorizedAction), + abilitiesService.can( + 'delete session-recording', + recordingWithAuthorizedAction, + ), ); assert.false( - canService.can( + abilitiesService.can( 'delete session-recording', recordingWithoutAuthorizedAction, ), @@ -236,10 +253,13 @@ module('Unit | Abilities | session-recording', function (hooks) { ); assert.false( - canService.can('delete session-recording', recordingWithAuthorizedAction), + abilitiesService.can( + 'delete session-recording', + recordingWithAuthorizedAction, + ), ); assert.false( - canService.can( + abilitiesService.can( 'delete session-recording', recordingWithoutAuthorizedAction, ), diff --git a/ui/admin/tests/unit/abilities/storage-bucket-test.js b/ui/admin/tests/unit/abilities/storage-bucket-test.js index 141b0d2d39..1a9b4bf88d 100644 --- a/ui/admin/tests/unit/abilities/storage-bucket-test.js +++ b/ui/admin/tests/unit/abilities/storage-bucket-test.js @@ -14,12 +14,12 @@ module('Unit | Abilities | storage-bucket', function (hooks) { setupTest(hooks); let features; - let canService; + let abilitiesService; let store; hooks.beforeEach(function () { store = this.owner.lookup('service:store'); - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); features = this.owner.lookup('service:features'); }); @@ -32,7 +32,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { compositeType: TYPE_STORAGE_BUCKET_PLUGIN_AWS_S3, }); - assert.true(canService.can('read storage-bucket', storageBucket)); + assert.true(abilitiesService.can('read storage-bucket', storageBucket)); }); test('cannot read storage bucket when unauthorized and feature is enabled', function (assert) { @@ -44,7 +44,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { compositeType: TYPE_STORAGE_BUCKET_PLUGIN_AWS_S3, }); - assert.false(canService.can('read storage-bucket', storageBucket)); + assert.false(abilitiesService.can('read storage-bucket', storageBucket)); }); test('cannot read storage bucket when authorized and feature is disabled', function (assert) { @@ -54,7 +54,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { compositeType: TYPE_STORAGE_BUCKET_PLUGIN_AWS_S3, }); - assert.false(canService.can('read storage-bucket', storageBucket)); + assert.false(abilitiesService.can('read storage-bucket', storageBucket)); }); test('cannot read storage bucket when unauthorized and feature is disabled', function (assert) { @@ -64,7 +64,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { compositeType: TYPE_STORAGE_BUCKET_PLUGIN_AWS_S3, }); - assert.false(canService.can('read storage-bucket', storageBucket)); + assert.false(abilitiesService.can('read storage-bucket', storageBucket)); }); test('can list storage bucket when authorized and in global scope', function (assert) { @@ -77,7 +77,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.true( - canService.can('list scope', scopeModel, { + abilitiesService.can('list scope', scopeModel, { collection: 'storage-buckets', }), ); @@ -93,7 +93,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.false( - canService.can('list scope', scopeModel, { + abilitiesService.can('list scope', scopeModel, { collection: 'storage-buckets', }), ); @@ -109,7 +109,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.true( - canService.can('list scope', scopeModel, { + abilitiesService.can('list scope', scopeModel, { collection: 'storage-buckets', }), ); @@ -125,7 +125,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.true( - canService.can('create scope', scopeModel, { + abilitiesService.can('create scope', scopeModel, { collection: 'storage-buckets', }), ); @@ -141,7 +141,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.true( - canService.can('create scope', scopeModel, { + abilitiesService.can('create scope', scopeModel, { collection: 'storage-buckets', }), ); @@ -157,7 +157,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.true( - canService.can('create scope', scopeModel, { + abilitiesService.can('create scope', scopeModel, { collection: 'storage-buckets', }), ); @@ -173,7 +173,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.false( - canService.can('create scope', scopeModel, { + abilitiesService.can('create scope', scopeModel, { collection: 'storage-buckets', }), ); @@ -189,7 +189,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.true( - canService.can('navigate scope', scopeModel, { + abilitiesService.can('navigate scope', scopeModel, { collection: 'storage-buckets', }), ); @@ -203,7 +203,7 @@ module('Unit | Abilities | storage-bucket', function (hooks) { }); assert.false( - canService.can('navigate scope', scopeModel, { + abilitiesService.can('navigate scope', scopeModel, { collection: 'storage-buckets', }), ); diff --git a/ui/admin/tests/unit/abilities/user-test.js b/ui/admin/tests/unit/abilities/user-test.js index db1cbb57fd..70c0feaa01 100644 --- a/ui/admin/tests/unit/abilities/user-test.js +++ b/ui/admin/tests/unit/abilities/user-test.js @@ -14,7 +14,7 @@ import { module('Unit | Abilities | user', function (hooks) { setupTest(hooks); - let canService; + let abilitiesService; let store; let features; @@ -24,7 +24,7 @@ module('Unit | Abilities | user', function (hooks) { }; hooks.beforeEach(function () { - canService = this.owner.lookup('service:can'); + abilitiesService = this.owner.lookup('service:abilities'); store = this.owner.lookup('service:store'); features = this.owner.lookup('service:features'); instances.user = store.createRecord('user', { @@ -37,7 +37,7 @@ module('Unit | Abilities | user', function (hooks) { features.enable('ldap-auth-methods'); instances.account.type = TYPE_AUTH_METHOD_LDAP; assert.true( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); @@ -46,13 +46,13 @@ module('Unit | Abilities | user', function (hooks) { test('can add non-ldap account to user', function (assert) { instances.account.type = TYPE_AUTH_METHOD_OIDC; assert.true( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_PASSWORD; assert.true( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); @@ -61,7 +61,7 @@ module('Unit | Abilities | user', function (hooks) { test('cannot add ldap account to user when feature flag disabled', function (assert) { instances.account.type = TYPE_AUTH_METHOD_LDAP; assert.false( - canService.can('addAccount user', instances.user, { + abilitiesService.can('addAccount user', instances.user, { account: instances.account, }), ); @@ -71,7 +71,7 @@ module('Unit | Abilities | user', function (hooks) { features.enable('ldap-auth-methods'); instances.account.type = TYPE_AUTH_METHOD_LDAP; assert.true( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); @@ -80,7 +80,7 @@ module('Unit | Abilities | user', function (hooks) { test('cannot remove ldap account from user when feature flag disabled', function (assert) { instances.account.type = TYPE_AUTH_METHOD_LDAP; assert.false( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); @@ -89,13 +89,13 @@ module('Unit | Abilities | user', function (hooks) { test('can remove non-ldap account from user', function (assert) { instances.account.type = TYPE_AUTH_METHOD_OIDC; assert.true( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); instances.account.type = TYPE_AUTH_METHOD_PASSWORD; assert.true( - canService.can('removeAccount user', instances.user, { + abilitiesService.can('removeAccount user', instances.user, { account: instances.account, }), ); diff --git a/ui/admin/tests/unit/controllers/account/change-password-test.js b/ui/admin/tests/unit/controllers/account/change-password-test.js index 20369c7e42..0c0e9704f8 100644 --- a/ui/admin/tests/unit/controllers/account/change-password-test.js +++ b/ui/admin/tests/unit/controllers/account/change-password-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/onboarding/index-test.js b/ui/admin/tests/unit/controllers/onboarding/index-test.js index bc9670b15e..52735730ed 100644 --- a/ui/admin/tests/unit/controllers/onboarding/index-test.js +++ b/ui/admin/tests/unit/controllers/onboarding/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { currentURL, waitUntil, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { TYPE_TARGET_TCP } from 'api/models/target'; diff --git a/ui/admin/tests/unit/controllers/onboarding/success-test.js b/ui/admin/tests/unit/controllers/onboarding/success-test.js index d4851b08dd..9eab0afb37 100644 --- a/ui/admin/tests/unit/controllers/onboarding/success-test.js +++ b/ui/admin/tests/unit/controllers/onboarding/success-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { currentURL, waitUntil, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/add-storage-policy/create-test.js b/ui/admin/tests/unit/controllers/scopes/scope/add-storage-policy/create-test.js index bc07d9f316..e93f725be0 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/add-storage-policy/create-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/add-storage-policy/create-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; module( diff --git a/ui/admin/tests/unit/controllers/scopes/scope/add-storage-policy/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/add-storage-policy/index-test.js index ee24fbb5b2..aee5a0b0a1 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/add-storage-policy/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/add-storage-policy/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; module( diff --git a/ui/admin/tests/unit/controllers/scopes/scope/aliases/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/aliases/index-test.js index f008be8c30..400f8a77de 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/aliases/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/aliases/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit, waitUntil } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password-test.js index 5cb405eb8a..c1a2caa037 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/account/set-password-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { TYPE_AUTH_METHOD_PASSWORD } from 'api/models/auth-method'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/index-test.js index 5b607c6d7a..f5558ae80b 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/accounts/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/managed-groups/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/managed-groups/index-test.js index d8930ea688..3a1b5d52c9 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/managed-groups/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method/managed-groups/index-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { visit } from '@ember/test-helpers'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js index ee192a053d..69299c4133 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/index-test.js @@ -7,7 +7,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { waitUntil } from '@ember/test-helpers'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/authenticate/method/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/authenticate/method/index-test.js index 6926255c4e..e0269b6597 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/authenticate/method/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/authenticate/method/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit, currentURL, settled } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; module( 'Unit | Controller | scopes/scope/authenticate/method/index', diff --git a/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/credential-store/credential-libraries/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/credential-store/credential-libraries/index-test.js index 63184481db..88245ade8c 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/credential-store/credential-libraries/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/credential-store/credential-libraries/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/credential-store/credentials/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/credential-store/credentials/index-test.js index bdd98687d2..ccbd307aa1 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/credential-store/credentials/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/credential-store/credentials/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/index-test.js index 158907e580..291aa3cb1c 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/credential-stores/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { setupIntl } from 'ember-intl/test-support'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { waitUntil, visit } from '@ember/test-helpers'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js index 85d1f94112..586c21b654 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js index b64defcacd..6a12dddc3c 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { waitUntil, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/add-hosts-test.js b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/add-hosts-test.js index 8821ea9fa4..24b5d9e594 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/add-hosts-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/add-hosts-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host-test.js b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host-test.js index ba584d7b26..5955a753fb 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/index-test.js index d9c218e3e5..a4d208a13e 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/host-sets/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/hosts/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/hosts/index-test.js index c25faf3b41..dced9d23a6 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/hosts/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog/hosts/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { TYPE_HOST_CATALOG_STATIC } from 'api/models/host-catalog'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/index-test.js index 0ac661a031..6521a80163 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/index-test.js @@ -7,7 +7,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { setupIntl } from 'ember-intl/test-support'; import { waitUntil, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/index-test.js index f385088f91..9bc1794851 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/policies/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/policies/index-test.js index 106089b30d..31698ad4e7 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/policies/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/policies/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/index-test.js index e97d09f5a7..5d0afbb534 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { waitUntil, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/add-principals-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/add-principals-test.js index d6f34ae87a..663bfde0df 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/add-principals-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/add-principals-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/grants-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/grants-test.js index 74fb73978b..da6f195f22 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/grants-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/grants-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; module('Unit | Controller | scopes/scope/roles/role/grants', function (hooks) { diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/index-test.js index 8c123a5612..a1adae46d9 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit, currentURL, waitUntil } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { GRANT_SCOPE_THIS } from 'api/models/role'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/manage-custom-scopes-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/manage-custom-scopes-test.js index 57db1f8f44..8e9c2a61e2 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/manage-custom-scopes-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/manage-custom-scopes-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit, currentURL, waitUntil } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/manage-org-projects-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/manage-org-projects-test.js index b9731e1bda..19f92c4080 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/manage-org-projects-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/manage-scopes/manage-org-projects-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { currentURL, visit, waitUntil } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/scopes-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/scopes-test.js index deb2b9549e..74d4933094 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/scopes-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/scopes-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit, waitUntil } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/session-recordings/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/session-recordings/index-test.js index 58c913d419..8c1bb21bbd 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/session-recordings/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/session-recordings/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { waitUntil } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import sinon from 'sinon'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/session-recordings/session-recording/channels-by-connection/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/session-recordings/session-recording/channels-by-connection/index-test.js index e8a8909977..4082108e47 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/session-recordings/session-recording/channels-by-connection/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/session-recordings/session-recording/channels-by-connection/index-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { diff --git a/ui/admin/tests/unit/controllers/scopes/scope/storage-buckets/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/storage-buckets/index-test.js index e7a2b3444c..f07d35f407 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/storage-buckets/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/storage-buckets/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/targets/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/targets/index-test.js index 75a7a48539..afe915f53b 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/targets/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/targets/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit, waitUntil } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-brokered-credential-sources-test.js b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-brokered-credential-sources-test.js index db3ff4a1cb..bc1b611cd9 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-brokered-credential-sources-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-brokered-credential-sources-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { currentURL, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { diff --git a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-host-sources-test.js b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-host-sources-test.js index 5e2e8aeacf..e3b2847e3c 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-host-sources-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-host-sources-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { currentURL, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-injected-application-credential-sources-test.js b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-injected-application-credential-sources-test.js index 8c3e47ff56..e435591f0b 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-injected-application-credential-sources-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/add-injected-application-credential-sources-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { currentURL, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { diff --git a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/enable-session-recording/create-storage-bucket-test.js b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/enable-session-recording/create-storage-bucket-test.js index 8856543c27..5154bf935e 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/enable-session-recording/create-storage-bucket-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/enable-session-recording/create-storage-bucket-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/enable-session-recording/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/enable-session-recording/index-test.js index 107a2956f3..37e0837d4b 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/enable-session-recording/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/enable-session-recording/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/users/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/users/index-test.js index 1416498cc4..8026cddcec 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/users/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/users/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { waitUntil, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupSqlite } from 'api/test-support/helpers/sqlite'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/users/user/add-accounts-test.js b/ui/admin/tests/unit/controllers/scopes/scope/users/user/add-accounts-test.js index 9e787ac96c..253a70ccc2 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/users/user/add-accounts-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/users/user/add-accounts-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; module( diff --git a/ui/admin/tests/unit/controllers/scopes/scope/workers/index-test.js b/ui/admin/tests/unit/controllers/scopes/scope/workers/index-test.js index 47cad4448a..adfb59e178 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/workers/index-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/workers/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/admin/tests/unit/controllers/scopes/scope/workers/new-test.js b/ui/admin/tests/unit/controllers/scopes/scope/workers/new-test.js index a7328b4c08..9df1c2895a 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/workers/new-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/workers/new-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; module('Unit | Controller | scopes/scope/workers/new', function (hooks) { diff --git a/ui/admin/tests/unit/controllers/scopes/scope/workers/worker/create-tags-test.js b/ui/admin/tests/unit/controllers/scopes/scope/workers/worker/create-tags-test.js index 50d89d20ac..21b5d1c121 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/workers/worker/create-tags-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/workers/worker/create-tags-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { currentURL, visit } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { authenticateSession } from 'ember-simple-auth/test-support'; module( diff --git a/ui/admin/tests/unit/controllers/scopes/scope/workers/worker/tags-test.js b/ui/admin/tests/unit/controllers/scopes/scope/workers/worker/tags-test.js index 291b87c9fa..c84180b104 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/workers/worker/tags-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/workers/worker/tags-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { visit } from '@ember/test-helpers'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { setupIntl } from 'ember-intl/test-support'; import { authenticateSession } from 'ember-simple-auth/test-support'; import { HCP_MANAGED_KEY } from 'api/models/worker'; diff --git a/ui/admin/vite.config.mjs b/ui/admin/vite.config.mjs new file mode 100644 index 0000000000..219253dbea --- /dev/null +++ b/ui/admin/vite.config.mjs @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite'; +import { extensions, classicEmberSupport, ember } from '@embroider/vite'; +import { babel } from '@rollup/plugin-babel'; + +export default defineConfig({ + plugins: [ + classicEmberSupport(), + ember(), + // extra plugins here + babel({ + babelHelpers: 'runtime', + extensions, + }), + ], +}); diff --git a/ui/desktop/app/app.js b/ui/desktop/app/app.js index 43db29bdd3..da6c45930a 100644 --- a/ui/desktop/app/app.js +++ b/ui/desktop/app/app.js @@ -7,6 +7,12 @@ import Application from '@ember/application'; import Resolver from 'ember-resolver'; import loadInitializers from 'ember-load-initializers'; import config from './config/environment'; +import { + macroCondition, + getOwnConfig, + importSync, + isTesting, +} from '@embroider/macros'; export default class App extends Application { modulePrefix = config.modulePrefix; @@ -15,3 +21,8 @@ export default class App extends Application { } loadInitializers(App, config.modulePrefix); + +if (macroCondition(getOwnConfig().startMirageWithApp && !isTesting())) { + const startServer = importSync('api/mirage/config').default; + startServer({}); +} diff --git a/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js b/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js index ea5d4a1b45..dba80af2bd 100644 --- a/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js +++ b/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js @@ -25,7 +25,7 @@ export default class ScopesScopeProjectsSessionsIndexController extends Controll @service ipc; @service session; @service router; - @service can; + @service abilities; // =attributes @@ -129,7 +129,7 @@ export default class ScopesScopeProjectsSessionsIndexController extends Controll async cancelSession(session) { let updatedSession = session; // fetch session from API to verify we have most up to date record - if (this.can.can('read session', session)) { + if (this.abilities.can('read session', session)) { updatedSession = await this.store.findRecord('session', session.id, { reload: true, }); diff --git a/ui/desktop/app/controllers/scopes/scope/projects/targets/index.js b/ui/desktop/app/controllers/scopes/scope/projects/targets/index.js index 7634255882..5b9be15261 100644 --- a/ui/desktop/app/controllers/scopes/scope/projects/targets/index.js +++ b/ui/desktop/app/controllers/scopes/scope/projects/targets/index.js @@ -24,7 +24,7 @@ export default class ScopesScopeProjectsTargetsIndexController extends Controlle @service router; @service session; @service store; - @service can; + @service abilities; @service intl; @service rdp; @@ -296,7 +296,7 @@ export default class ScopesScopeProjectsTargetsIndexController extends Controlle async cancelSession(session) { let updatedSession = session; // fetch session from API to verify we have most up to date record - if (this.can.can('read session', session)) { + if (this.abilities.can('read session', session)) { updatedSession = await this.store.findRecord('session', session.id, { reload: true, }); diff --git a/ui/desktop/app/routes/scopes/scope/projects/targets/index.js b/ui/desktop/app/routes/scopes/scope/projects/targets/index.js index 072f415989..29bb66853c 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/targets/index.js +++ b/ui/desktop/app/routes/scopes/scope/projects/targets/index.js @@ -17,7 +17,7 @@ const { __electronLog } = globalThis; export default class ScopesScopeProjectsTargetsIndexRoute extends Route { // =services - @service can; + @service abilities; @service clusterUrl; @service resourceFilterStore; @service router; @@ -138,7 +138,7 @@ export default class ScopesScopeProjectsTargetsIndexRoute extends Route { const { totalItems, isLoadIncomplete, isCacheRefreshing } = targets.meta; // Filter out targets to which users do not have the connect ability targets = targets.filter((target) => - this.can.can('connect target', target), + this.abilities.can('connect target', target), ); const aliasPromise = this.store.query('alias', { diff --git a/ui/desktop/config/environment.js b/ui/desktop/config/environment.js index fce1ed8fab..7702899734 100644 --- a/ui/desktop/config/environment.js +++ b/ui/desktop/config/environment.js @@ -33,11 +33,6 @@ module.exports = function (environment) { ? JSON.parse(process.env.EMBER_CLI_ELECTRON) : false, - 'ember-cli-mirage': { - //enabled: ENABLE_MIRAGE, - directory: '../../addons/api/mirage', - }, - api: { // there is no default API host in desktop //host: API_HOST, @@ -79,9 +74,11 @@ module.exports = function (environment) { // usually the same as the application origin. ENV.autoOrigin = true; - ENV['ember-cli-mirage'].enabled = process.env.ENABLE_MIRAGE - ? JSON.parse(process.env.ENABLE_MIRAGE) - : true; + ENV.mirage = { + enabled: process.env.ENABLE_MIRAGE + ? JSON.parse(process.env.ENABLE_MIRAGE) + : true, + }; ENV.ENABLE_A11Y_AUDIT = ENABLE_A11Y_AUDIT; ENV.COLOR_THEME = COLOR_THEME; @@ -114,6 +111,12 @@ module.exports = function (environment) { ENV.ENABLE_A11Y_AUDIT = ENABLE_A11Y_AUDIT; ENV.COLOR_THEME = COLOR_THEME; + + ENV.mirage = { + enabled: process.env.ENABLE_MIRAGE + ? JSON.parse(process.env.ENABLE_MIRAGE) + : true, + }; } if (environment === 'production') { diff --git a/ui/desktop/ember-cli-build.js b/ui/desktop/ember-cli-build.js index 2f8b4b8fa5..acd7cd7029 100644 --- a/ui/desktop/ember-cli-build.js +++ b/ui/desktop/ember-cli-build.js @@ -9,6 +9,8 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); module.exports = async function (defaults) { const { setConfig } = await import('@warp-drive/build-config'); + const { EMBER_ENV } = process.env; + var config = require('./config/environment')(EMBER_ENV); const app = new EmberApp(defaults, { hinting: false, @@ -28,6 +30,11 @@ module.exports = async function (defaults) { svg: { paths: ['../../addons/core/public'], }, + '@embroider/macros': { + setOwnConfig: { + startMirageWithApp: config.mirage?.enabled ?? false, + }, + }, }); // TODO: The deprecations object removed in ember-data 6.0. diff --git a/ui/desktop/package.json b/ui/desktop/package.json index f178f5f32a..5ebf27cd8f 100644 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -88,7 +88,7 @@ "ember-modifier": "^4.2.0", "ember-page-title": "^8.2.3", "ember-qunit": "^8.1.0", - "ember-resolver": "^12.0.1", + "ember-resolver": "^13.1.1", "ember-source": "~5.12.0", "ember-template-lint": "^6.0.0", "ember-template-lint-plugin-prettier": "^5.0.0", diff --git a/ui/desktop/tests/helpers/index.js b/ui/desktop/tests/helpers/index.js index fd622411e9..b9726cb81f 100644 --- a/ui/desktop/tests/helpers/index.js +++ b/ui/desktop/tests/helpers/index.js @@ -9,7 +9,7 @@ import { setupTest as upstreamSetupTest, } from 'ember-qunit'; import { authenticateSession } from 'ember-simple-auth/test-support'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; // This file exists to provide wrappers around ember-qunit's // test setup functions. This way, you can easily extend the setup that is diff --git a/ui/desktop/tests/integration/components/hidden-secret-test.js b/ui/desktop/tests/integration/components/hidden-secret-test.js index afbc8c044e..e0f5cf6f14 100644 --- a/ui/desktop/tests/integration/components/hidden-secret-test.js +++ b/ui/desktop/tests/integration/components/hidden-secret-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render, click } from '@ember/test-helpers'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { hbs } from 'ember-cli-htmlbars'; import { setupIntl } from 'ember-intl/test-support'; module('Integration | Component | hidden-secret', function (hooks) { diff --git a/ui/desktop/tests/unit/abilities/collection-test.js b/ui/desktop/tests/unit/abilities/collection-test.js index f2fddd8df6..a3ffee54ab 100644 --- a/ui/desktop/tests/unit/abilities/collection-test.js +++ b/ui/desktop/tests/unit/abilities/collection-test.js @@ -11,7 +11,7 @@ module('Unit | Abilities | model', function (hooks) { test('it reflects when a resource may be navigated to based on list and create actions', function (assert) { assert.expect(4); - const service = this.owner.lookup('service:can'); + const service = this.owner.lookup('service:abilities'); const model = { authorized_collection_actions: { foobars: [] }, }; diff --git a/ui/desktop/tests/unit/controllers/scopes/scope/authenticate/method/index-test.js b/ui/desktop/tests/unit/controllers/scopes/scope/authenticate/method/index-test.js index 4acf3a9e65..fd0822ba96 100644 --- a/ui/desktop/tests/unit/controllers/scopes/scope/authenticate/method/index-test.js +++ b/ui/desktop/tests/unit/controllers/scopes/scope/authenticate/method/index-test.js @@ -5,7 +5,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import { visit, currentURL, settled } from '@ember/test-helpers'; import { setupIntl } from 'ember-intl/test-support'; import WindowMockIPC from '../../../../../../helpers/window-mock-ipc'; diff --git a/ui/desktop/tests/unit/controllers/scopes/scope/projects/sessions/index-test.js b/ui/desktop/tests/unit/controllers/scopes/scope/projects/sessions/index-test.js index 39e3e55a4c..839886658c 100644 --- a/ui/desktop/tests/unit/controllers/scopes/scope/projects/sessions/index-test.js +++ b/ui/desktop/tests/unit/controllers/scopes/scope/projects/sessions/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { setupIntl } from 'ember-intl/test-support'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import setupStubs from 'api/test-support/handlers/cache-daemon-search'; import { visit } from '@ember/test-helpers'; import { authenticateSession } from 'ember-simple-auth/test-support'; diff --git a/ui/desktop/tests/unit/controllers/scopes/scope/projects/targets/index-test.js b/ui/desktop/tests/unit/controllers/scopes/scope/projects/targets/index-test.js index 4261f64245..bfa769b830 100644 --- a/ui/desktop/tests/unit/controllers/scopes/scope/projects/targets/index-test.js +++ b/ui/desktop/tests/unit/controllers/scopes/scope/projects/targets/index-test.js @@ -6,7 +6,7 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { setupIntl } from 'ember-intl/test-support'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'api/test-support/helpers/mirage'; import setupStubs from 'api/test-support/handlers/cache-daemon-search'; import { waitUntil, visit } from '@ember/test-helpers'; import { authenticateSession } from 'ember-simple-auth/test-support';