All files / framework/featureStore FeaturesFactory.ts

75% Statements 6/8
100% Branches 0/0
66.67% Functions 4/6
75% Lines 6/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58                                                              13x     6x       7x                       5x       13x   13x  
/*
 * Copyright 2022 Harness Inc. All rights reserved.
 * Use of this source code is governed by the PolyForm Shield 1.0.0 license
 * that can be found in the licenses directory at the root of this repository, also available at
 * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt.
 */
 
import type { BannerType } from '@common/layouts/Constants'
import type { StringsMap } from 'stringTypes'
import type { UsageAndLimitReturn } from '@common/hooks/useGetUsageAndLimit'
import type { FeatureIdentifier } from './FeatureIdentifier'
import type { CheckFeaturesReturn } from './featureStoreUtil'
 
import type { Module } from '../types/ModuleName'
 
export interface FeatureProps {
  features: FeatureIdentifier[]
  renderMessage(
    props: CheckFeaturesReturn,
    getString: (key: keyof StringsMap, vars?: Record<string, any> | undefined) => string,
    additionalLicenseProps?: Record<string, any>,
    usageAndLimitInfo?: UsageAndLimitReturn
  ): {
    message: () => React.ReactNode
    bannerType: BannerType
  }
}
 
export type FeatureRegistry = Partial<Record<Module, FeatureProps>>
 
class FeatureFactory {
  private featureRegistry: FeatureRegistry = {}
 
  registerFeaturesByModule(module: Module, props: FeatureProps): void {
    this.featureRegistry[module] = props
  }
 
  getFeaturesByModule(module: Module): FeatureProps | undefined {
    return this.featureRegistry[module]
  }
 
  getAllFeatures(): FeatureRegistry {
    return this.featureRegistry
  }
 
  unregisterFeaturesByModule(module: Module): void {
    delete this.featureRegistry[module]
  }
 
  unregisterAllFeatures(): void {
    this.featureRegistry = {}
  }
}
 
const featureFactory = new FeatureFactory()
 
export default featureFactory