All files / modules/75-cf/constants index.ts

89.29% Statements 25/28
10% Branches 1/10
62.5% Functions 5/8
91.67% Lines 22/24

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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108              43x 43x                     43x         97x 97x                 97x 1x             97x 97x   97x     43x                       43x 97x 583x     43x                   43x   43x 43x         43x                             43x           43x   43x  
/*
 * Copyright 2021 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 { StringKeys, useStrings } from 'framework/strings'
import SideNav from '@cf/components/SideNav/SideNav'
import type { SidebarContext } from '@common/navigation/SidebarProvider'
 
export type OperatorOption = {
  label: string
  value: string
  single?: boolean
}
 
export type IsSingleValued = (operatorValue: string) => boolean
 
export const useOperators = (
  i18nFn: (key: StringKeys) => string,
  keyMapper: (key: string) => StringKeys = x => x as StringKeys,
  extraOperators: OperatorOption[] = []
): [OperatorOption[], IsSingleValued] => {
  const getString = i18nFn
  const base = [
    { label: getString(keyMapper('startsWith')), value: 'starts_with', single: true },
    { label: getString(keyMapper('endsWith')), value: 'ends_with', single: true },
    { label: getString(keyMapper('contains')), value: 'contains', single: false },
    { label: getString(keyMapper('equal')), value: 'equal', single: true },
    { label: getString(keyMapper('equalSensitive')), value: 'equal_sensitive', single: true },
    { label: getString(keyMapper('in')), value: 'in', single: false }
  ]
 
  const extra = extraOperators.map(({ label, value, single = false }) => {
    return {
      label: getString(keyMapper(label)),
      value,
      single
    }
  })
 
  const opList = base.concat(extra)
  const isSingleValued: IsSingleValued = (operatorValue: string) =>
    opList.find(op => op.value === operatorValue)?.single || false
  return [opList, isSingleValued]
}
 
const operatorStringMap: Record<string, StringKeys> = {
  and: 'cf.clause.operators.and',
  in: 'cf.clause.operators.in',
  startsWith: 'cf.clause.operators.startsWith',
  endsWith: 'cf.clause.operators.endsWith',
  match: 'cf.clause.operators.match',
  contains: 'cf.clause.operators.contains',
  equal: 'cf.clause.operators.equal',
  equalSensitive: 'cf.clause.operators.equalSensitive',
  matchSegment: 'cf.clause.operators.matchSegment'
}
 
export const useOperatorsFromYaml = (extraOperators: OperatorOption[] = []): [OperatorOption[], IsSingleValued] => {
  const { getString } = useStrings()
  return useOperators(getString, key => operatorStringMap[key], extraOperators)
}
 
export const extraOperatorReference: Record<string, Record<string, OperatorOption>> = {
  customRules: {
    matchSegment: {
      label: 'matchSegment',
      value: 'segmentMatch',
      single: false
    }
  }
}
 
export const extraOperators: Record<string, OperatorOption[]> = Object.entries(extraOperatorReference).reduce(
  (acc: Record<string, OperatorOption[]>, [key, value]: [string, Record<string, OperatorOption>]) => {
    acc[key] = Object.values(value)
    return acc
  },
  {} as Record<string, OperatorOption[]>
)
 
export const CFVariationColors = [
  '#4065A0',
  '#65DEF2',
  '#E3B14F',
  '#42AB45',
  '#D9DAE5',
  '#00ADE4',
  '#f78383',
  '#e59c0b',
  '#7c8d9f',
  '#8c78ed',
  '#ff8f3f',
  '#ed61b5'
]
 
export const CFSideNavProps: SidebarContext = {
  navComponent: SideNav,
  title: 'Feature Flags',
  icon: 'cf-main'
}
 
export const DEFAULT_FLAG_GIT_REPO_PATH = '/flags.yaml'
 
export const PERCENTAGE_ROLLOUT_VALUE = 'Percentage Rollout'