{"version":3,"file":"formatString.cjs","sources":["../../../../src/transformations/transformers/formatString.ts"],"sourcesContent":["import { map } from 'rxjs/operators';\n\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo, FieldMatcher, TransformationApplicabilityLevels } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\n\nexport enum FormatStringOutput {\n  UpperCase = 'Upper Case',\n  LowerCase = 'Lower Case',\n  SentenceCase = 'Sentence Case',\n  TitleCase = 'Title Case',\n  PascalCase = 'Pascal Case',\n  CamelCase = 'Camel Case',\n  SnakeCase = 'Snake Case',\n  KebabCase = 'Kebab Case',\n  Trim = 'Trim',\n  Substring = 'Substring',\n}\n\nexport interface FormatStringTransformerOptions {\n  stringField: string;\n  substringStart: number;\n  substringEnd: number;\n  outputFormat: FormatStringOutput;\n}\n\nconst splitToCapitalWords = (input: string) => {\n  const arr = input.split(' ');\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1).toLowerCase();\n  }\n  return arr;\n};\n\nexport const getFormatStringFunction = (options: FormatStringTransformerOptions) => {\n  return (field: Field) =>\n    field.values.map((value: string) => {\n      switch (options.outputFormat) {\n        case FormatStringOutput.UpperCase:\n          return value.toUpperCase();\n        case FormatStringOutput.LowerCase:\n          return value.toLowerCase();\n        case FormatStringOutput.SentenceCase:\n          return value.charAt(0).toUpperCase() + value.slice(1);\n        case FormatStringOutput.TitleCase:\n          return splitToCapitalWords(value).join(' ');\n        case FormatStringOutput.PascalCase:\n          return splitToCapitalWords(value).join('');\n        case FormatStringOutput.CamelCase:\n          value = splitToCapitalWords(value).join('');\n          return value.charAt(0).toLowerCase() + value.slice(1);\n        case FormatStringOutput.SnakeCase:\n          return value.toLowerCase().split(' ').join('_');\n        case FormatStringOutput.KebabCase:\n          return value.toLowerCase().split(' ').join('-');\n        case FormatStringOutput.Trim:\n          return value.trim();\n        case FormatStringOutput.Substring:\n          return value.substring(options.substringStart, options.substringEnd);\n      }\n    });\n};\n\nexport const formatStringTransformer: DataTransformerInfo<FormatStringTransformerOptions> = {\n  id: DataTransformerID.formatString,\n  name: 'Format string',\n  description: 'Manipulate string fields formatting',\n  defaultOptions: { stringField: '', outputFormat: FormatStringOutput.UpperCase },\n  isApplicable: (data: DataFrame[]) => {\n    // Search for a string field\n    // if there is one then we can use this transformation\n    for (const frame of data) {\n      for (const field of frame.fields) {\n        if (field.type === 'string') {\n          return TransformationApplicabilityLevels.Applicable;\n        }\n      }\n    }\n\n    return TransformationApplicabilityLevels.NotApplicable;\n  },\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        if (data.length === 0) {\n          return data;\n        }\n\n        const fieldMatches = fieldMatchers.get(FieldMatcherID.byName).get(options.stringField);\n        const formatStringFunction = getFormatStringFunction(options);\n\n        const formatter = createStringFormatter(fieldMatches, formatStringFunction);\n\n        return data.map((frame) => ({\n          ...frame,\n          fields: formatter(frame, data),\n        }));\n      })\n    ),\n};\n\n/**\n * @internal\n */\nexport const createStringFormatter =\n  (fieldMatches: FieldMatcher, formatStringFunction: (field: Field) => string[]) =>\n  (frame: DataFrame, allFrames: DataFrame[]) => {\n    return frame.fields.map((field) => {\n      // Find the configured field\n      if (fieldMatches(field, frame, allFrames)) {\n        const newVals = formatStringFunction(field);\n\n        return {\n          ...field,\n          type: FieldType.string,\n          values: newVals,\n        };\n      }\n\n      return field;\n    });\n  };\n"],"names":["FormatStringOutput","DataTransformerID","TransformationApplicabilityLevels","map","fieldMatchers","FieldMatcherID","FieldType"],"mappings":"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"}