diff --git a/packages/core-api/src/apis/definitions/FeatureFlagsApi.ts b/packages/core-api/src/apis/definitions/FeatureFlagsApi.ts index 0f6e83b2ed..76a1e4f9ba 100644 --- a/packages/core-api/src/apis/definitions/FeatureFlagsApi.ts +++ b/packages/core-api/src/apis/definitions/FeatureFlagsApi.ts @@ -15,7 +15,7 @@ */ import { ApiRef, createApiRef } from '../system'; -import { UserFlags, FeatureFlagsRegistry } from '../../app/FeatureFlags'; +import { UserFlags } from '../../app/FeatureFlags'; /** * The feature flags API is used to toggle functionality to users across plugins and Backstage. @@ -46,15 +46,15 @@ export interface FeatureFlagsApi { */ registerFlag(flag: FeatureFlag): void; + /** + * Get a list of all registered flags. + */ + getRegisteredFlags(): FeatureFlag[]; + /** * Get a list of all feature flags from the current user. */ getFlags(): UserFlags; - - /** - * Get a list of all registered flags. - */ - getRegisteredFlags(): FeatureFlagsRegistry; } export const featureFlagsApiRef: ApiRef = createApiRef({ diff --git a/packages/core-api/src/app/FeatureFlags.test.tsx b/packages/core-api/src/app/FeatureFlags.test.tsx index 66dc2593f6..c04e60b069 100644 --- a/packages/core-api/src/app/FeatureFlags.test.tsx +++ b/packages/core-api/src/app/FeatureFlags.test.tsx @@ -141,11 +141,11 @@ describe('FeatureFlags', () => { it('should return an empty list', () => { featureFlags = new FeatureFlagsImpl(); - expect(featureFlags.getRegisteredFlags().toObject()).toEqual([]); + expect(featureFlags.getRegisteredFlags()).toEqual([]); }); it('should return an valid list', () => { - expect(featureFlags.getRegisteredFlags().toObject()).toMatchObject([ + expect(featureFlags.getRegisteredFlags()).toEqual([ { name: 'registered-flag-1', pluginId: 'plugin-one' }, { name: 'registered-flag-2', pluginId: 'plugin-one' }, { name: 'registered-flag-3', pluginId: 'plugin-two' }, @@ -179,7 +179,7 @@ describe('FeatureFlags', () => { pluginId: 'plugin-three', }); - expect(flags.toObject()).toMatchObject([ + expect(flags).toEqual([ { name: 'registered-flag-1', pluginId: 'plugin-one' }, { name: 'registered-flag-2', pluginId: 'plugin-one' }, { name: 'registered-flag-3', pluginId: 'plugin-two' }, diff --git a/packages/core-api/src/app/FeatureFlags.tsx b/packages/core-api/src/app/FeatureFlags.tsx index 22e6a89329..0f794d8c44 100644 --- a/packages/core-api/src/app/FeatureFlags.tsx +++ b/packages/core-api/src/app/FeatureFlags.tsx @@ -126,45 +126,6 @@ export class UserFlags extends Map { } } -/** - * The FeatureFlagsRegistry class. - * - * This acts as a holding data structure for feature flags - * that plugins wish to register for use in Backstage. - */ - -export class FeatureFlagsRegistry extends Array { - static from(entries: FeatureFlag[]) { - Array.from(entries).forEach(entry => validateFlagName(entry.name)); - return new FeatureFlagsRegistry(...entries); - } - - push(...entries: FeatureFlag[]): number { - Array.from(entries).forEach(entry => validateFlagName(entry.name)); - return super.push(...entries); - } - - concat( - ...entries: (FeatureFlag | ConcatArray)[] - ): FeatureFlag[] { - const _concat = super.concat(...entries); - Array.from(_concat).forEach(entry => validateFlagName(entry.name)); - return _concat; - } - - toObject() { - return [...this.values()]; - } - - toJSON() { - return JSON.stringify(this.toObject()); - } - - toString() { - return this.toJSON(); - } -} - /** * Create the FeatureFlags implementation based on the API. */ @@ -177,12 +138,12 @@ export class FeatureFlags implements FeatureFlagsApi { this.registeredFeatureFlags.push(flag); } + getRegisteredFlags(): FeatureFlag[] { + return this.registeredFeatureFlags.slice(); + } + getFlags(): UserFlags { if (!this.userFlags) this.userFlags = UserFlags.load(); return this.userFlags; } - - getRegisteredFlags(): FeatureFlagsRegistry { - return FeatureFlagsRegistry.from(this.registeredFeatureFlags); - } }