scolladon/sfdx-git-delta

View on GitHub
src/service/typeHandlerFactory.ts

Summary

Maintainability
A
0 mins
Test Coverage
'use strict'
import { MetadataRepository } from '../metadata/MetadataRepository'
import { Metadata } from '../types/metadata'
import type { Work } from '../types/work'

import Bot from './botHandler'
import CustomFieldHandler from './customFieldHandler'
import CustomLabel from './customLabelHandler'
import CustomObject from './customObjectHandler'
import Decomposed from './decomposedHandler'
import InBundle from './inBundleHandler'
import InFile from './inFileHandler'
import InFolder from './inFolderHandler'
import InResource from './inResourceHandler'
import Lwc from './lwcHandler'
import ObjectTranslation from './objectTranslationHandler'
import SharedFolder from './sharedFolderHandler'
import Standard from './standardHandler'

const handlerMap = {
  AssignmentRules: InFile,
  AuraDefinitionBundle: Lwc,
  AutoResponseRules: InFile,
  BusinessProcess: Decomposed,
  CompactLayout: Decomposed,
  CustomField: CustomFieldHandler,
  CustomFieldTranslation: ObjectTranslation,
  CustomLabel: CustomLabel,
  CustomObject: CustomObject,
  CustomObjectTranslation: ObjectTranslation,
  Dashboard: InFolder,
  DigitalExperienceBundle: InBundle,
  Document: InFolder,
  EmailTemplate: InFolder,
  EscalationRules: InFile,
  ExperienceBundle: InResource,
  FieldSet: Decomposed,
  GlobalValueSetTranslation: InFile,
  Index: Decomposed,
  LightningComponentBundle: Lwc,
  ListView: Decomposed,
  MarketingAppExtension: InFile,
  MatchingRules: InFile,
  PermissionSet: InResource,
  Profile: InFile,
  RecordType: Decomposed,
  Report: InFolder,
  SharingCriteriaRule: Decomposed,
  SharingGuestRule: Decomposed,
  SharingOwnerRule: Decomposed,
  SharingReason: Decomposed,
  SharingRules: InFile,
  StandardValueSetTranslation: InFile,
  StaticResource: InResource,
  Territory2: Decomposed,
  Territory2Model: CustomObject,
  Territory2Rule: Decomposed,
  Translations: InFile,
  ValidationRule: Decomposed,
  VirtualBot: Bot,
  VirtualDiscovery: SharedFolder,
  VirtualModeration: SharedFolder,
  VirtualWave: SharedFolder,
  WaveTemplateBundle: InResource,
  WebLink: Decomposed,
  Workflow: InFile,
  WorkflowAlert: Decomposed,
  WorkflowFieldUpdate: Decomposed,
  WorkflowKnowledgePublish: Decomposed,
  WorkflowOutboundMessage: Decomposed,
  WorkflowRule: Decomposed,
  WorkflowSend: Decomposed,
  WorkflowTask: Decomposed,
}

export default class TypeHandlerFactory {
  constructor(
    // eslint-disable-next-line no-unused-vars
    protected readonly work: Work,
    // eslint-disable-next-line no-unused-vars
    protected readonly metadata: MetadataRepository
  ) {}

  public getTypeHandler(line: string) {
    const type: Metadata = this.metadata.get(line)!
    const xmlName = type.xmlName as keyof typeof handlerMap
    return xmlName in handlerMap
      ? new handlerMap[xmlName](line, type, this.work, this.metadata)
      : new Standard(line, type, this.work, this.metadata)
  }
}