{"version":3,"file":"ngx-formly-core-testing.mjs","sources":["../../../../src/core/testing/src/component-factory.ts","../../../../src/core/testing/src/ngx-formly-core-testing.ts"],"sourcesContent":["import { TestBed, ComponentFixture } from '@angular/core/testing';\nimport { Component, DebugElement, NgModule } from '@angular/core';\nimport { FormlyModule, FormlyFormBuilder, FormlyFieldConfig, ConfigOption } from '@ngx-formly/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { By } from '@angular/platform-browser';\n\nfunction setInputs<T>(fixture: ComponentFixture<T>, inputs: T, detectChanges = true) {\n  (Object.keys(inputs) as (keyof T)[]).forEach((input) => {\n    fixture.componentInstance[input] = inputs[input];\n  });\n\n  if (detectChanges !== false) {\n    fixture.detectChanges();\n  }\n}\n\ninterface IComponentOptions<T> extends NgModule {\n  template?: string;\n  inputs?: T;\n  config?: ConfigOption;\n  detectChanges?: boolean;\n}\ninterface IFormlyDebugElement<E> extends DebugElement {\n  readonly nativeElement: E;\n}\n\nexport function createComponent<T>({\n  template,\n  inputs,\n  config,\n  detectChanges,\n  imports,\n  declarations,\n  providers,\n}: IComponentOptions<T>) {\n  TestBed.configureTestingModule({\n    declarations: [TestComponent, ...(declarations || [])],\n    imports: [ReactiveFormsModule, FormlyModule.forRoot(config), ...(imports || [])],\n    providers: providers || [],\n    teardown: { destroyAfterEach: false },\n  }).overrideComponent(TestComponent, {\n    set: {\n      template,\n      inputs: Object.keys(inputs),\n    },\n  });\n\n  const fixture = TestBed.createComponent(TestComponent) as ComponentFixture<T>;\n  (Object.keys(inputs) as (keyof T)[]).forEach((input) => {\n    fixture.componentInstance[input] = inputs[input];\n  });\n\n  setInputs(fixture, inputs, detectChanges);\n\n  type FixtureUtils = T & {\n    fixture: ComponentFixture<T>;\n    detectChanges: (typeof fixture)['detectChanges'];\n    setInputs: (inputs: Partial<T>) => void;\n    query: <E extends Element = Element>(selector: string) => IFormlyDebugElement<E>;\n    queryAll: <E extends Element = Element>(selector: string) => IFormlyDebugElement<E>[];\n  };\n\n  const utils = {\n    fixture,\n    detectChanges: () => fixture.detectChanges(),\n    setInputs: (props) => setInputs(fixture, props),\n    query: (selector: string) => fixture.debugElement.query(By.css(selector)),\n    queryAll: (selector: string) => fixture.debugElement.queryAll(By.css(selector)),\n  } as FixtureUtils;\n\n  (Object.keys(inputs) as (keyof T)[]).forEach((input) => {\n    Object.defineProperty(utils, input, {\n      get: () => fixture.componentInstance[input],\n    });\n  });\n\n  return utils;\n}\n\nexport function createFieldComponent(\n  field: FormlyFieldConfig,\n  config: IComponentOptions<{ field: FormlyFieldConfig }> = {},\n) {\n  const model = field?.model || {};\n  const options = field?.options || {};\n  delete (field as any)?.model;\n  delete (field as any)?.options;\n\n  const utils = createComponent<{ field: FormlyFieldConfig }>({\n    template: '<formly-field [field]=\"field\"></formly-field>',\n    inputs: { field },\n    ...config,\n    detectChanges: false,\n  });\n  const builder = (utils.fixture.componentRef.instance as any).builder;\n  builder.build({ model, options, fieldGroup: [field] });\n  utils.detectChanges();\n\n  const setInputs = utils.setInputs;\n  utils.setInputs = (props) => {\n    if (props.field) {\n      builder.build(props.field);\n    }\n\n    setInputs(props);\n  };\n\n  return utils;\n}\n\n@Component({\n  selector: 'formly-test-component',\n  template: '',\n  providers: [FormlyFormBuilder],\n  standalone: false,\n})\nclass TestComponent {\n  constructor(public builder?: FormlyFormBuilder) {}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}