* chore: 🤖 import explicit mirage references * chore: 🤖 add mirage setupMirage helper * chore: 🤖 working example with application adapter test * chore: 🤖 use internal setupMirage test helper from api addon * chore: 🤖 conditionally load mirage * chore: 🤖 filter mirage folder inclusion in production builds * chore: 🤖 drop ember-mirage and use our own test helpers * chore: 🤖 collapse reference to import declaration * docs: ✏️ add comment better explaining the mirage test env * chore: 🤖 update configuration and manage mirage-related deps * fix: 🐛 restore ipc mock and add missing checkOS handler * chore: 🤖 add comment explaining omitting mirage deps in build * chore: 🤖 allow mirage.enabled to include deps and handlers * chore: 🤖 re-enable mirage for core dummy app * Add missing copyright headers * chore: 🤖 use embroider macros to conditionally start mirage * docs: ✏️ update api readme for mirage changes * chore: 🤖 replace remaining ember-cli-mirage references * chore: 🤖 add mirage to test builds * fix: 🐛 ensure that auto mirage start doesn't happen in test env * chore: 🤖 use const instead of var Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com> * refactor: 💡 use cleaner logic for excluded api build modules * fix: 🐛 handle issue where importSync was too eager This was fixed by bumping the @embroider/macros dependency that includes a fix to this issue: https://github.com/embroider-build/embroider/pull/2511 * refactor: 💡 move mirage from addon to app directory * refactor: 💡 update mirage test helper to be a factory * chore: 🤖 exclude mirage directory when necessary at build time * chore: 🤖 add miragejs as admin dev dependency * refactor: 💡 update reference to startMirage * chore: 🤖 update local mirage test helper * chore: 🤖 change import path for mirage on desktop * chore: 🤖 update imports in tests for startMirage * chore: 🤖 update startMirage imports for api addon tests * chore: 🤖 add miragejs dev dep to desktop * docs: ✏️ update README * chore: 🤖 set up setupMirage for core tests * chore: 🤖 fix copyright header * Add missing copyright headers --------- Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
/**
|
|
* Copyright IBM Corp. 2021, 2026
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
/**
|
|
* Allows development-time toggling of resource permissions via the window
|
|
* querystring. Pass a JSON object into the query to toggle permissions.
|
|
* Note that the value must be a valid JSON object in order to be parsed.
|
|
*
|
|
* @example
|
|
* ?authorized_actions={"account": ["read"]}
|
|
*
|
|
* Within a Mirage factory, pass the actions into the mock:
|
|
*
|
|
* @example
|
|
* import { Factory } from 'miragejs';
|
|
* import permissions from '../helpers/permissions';
|
|
*
|
|
* export default Factory.extend({
|
|
* authorized_actions: () =>
|
|
* permissions.authorizedActionsFor('account') ||
|
|
* ['no-op', 'read', 'update', 'delete']
|
|
* });
|
|
*/
|
|
class ToggledCapabilities {
|
|
// =attributes
|
|
|
|
// Get the query string and drop the leading '?'
|
|
#rawQuery = window.location.search.substring(1);
|
|
|
|
// Split the querystring into key/value pairs
|
|
#queryPairs = this.#rawQuery.split('&').map((item) => item.split('='));
|
|
|
|
// Find the value of a pair with key `authorized_actions`
|
|
// Safe-ish when the item is not present
|
|
#rawAuthorizedActions = (this.#queryPairs.find(
|
|
(item) => item[0] === 'authorized_actions',
|
|
) || [])[1];
|
|
|
|
// Safe-ish when the value is not present
|
|
#authorizedActions =
|
|
JSON.parse(
|
|
decodeURIComponent(this.#rawAuthorizedActions || '') || 'null',
|
|
) || {};
|
|
|
|
// =methods
|
|
|
|
/**
|
|
* Returns authorized actions for the specified field, if any are defined
|
|
* in the `authorized_actions` query. Returns undefined otherwise.
|
|
* @return {?string[]}
|
|
*/
|
|
authorizedActionsFor(field) {
|
|
if (this.#authorizedActions[field]) {
|
|
return structuredClone(this.#authorizedActions[field]);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default new ToggledCapabilities();
|