{"version":3,"file":"ngx-typed-form-builder.mjs","sources":["../../../projects/ngx-typed-form-builder/src/lib/ngx-typed-form-builder.service.ts","../../../projects/ngx-typed-form-builder/src/lib/ngx-typed-form-builder.module.ts","../../../projects/ngx-typed-form-builder/src/public-api.ts","../../../projects/ngx-typed-form-builder/src/ngx-typed-form-builder.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, AbstractControl, AbstractControlOptions, ValidatorFn, AsyncValidatorFn, UntypedFormControl, UntypedFormArray } from '@angular/forms';\n\ntype UnpackArrayType<T> = T extends (infer R)[] ? R : T;\n\ntype TypedControllerValue<T> = (\n  T extends TypedFormGroup<unknown> ? T['value'] :\n  T extends TypedFormArray<unknown> ? T['value'] :\n  T\n);\n\ntype TypedController<T> = (\n  T extends UntypedFormArray ? TypedFormArray<UnpackArrayType<T['value']>> : (\n    T extends UntypedFormGroup ? TypedFormGroup<T['value']> :\n    TypedAbstractControl<T>\n  )\n);\n\nexport declare abstract class TypedAbstractControl<T> extends AbstractControl {\n  readonly value: T;\n  abstract setValue(value: T, options?: Object): void;\n  abstract patchValue(value: T, options?: Object): void;\n  abstract reset(value?: T, options?: Object): void;\n}\n\nexport declare abstract class TypedFormControl<T> extends UntypedFormControl {\n  readonly value: T\n  reset(value: Parameters<TypedAbstractControl<T>['reset']>[0], options?: Parameters<UntypedFormControl['reset']>[1]): void;\n  patchValue(value: Parameters<TypedAbstractControl<T>['patchValue']>[0], options?: Parameters<UntypedFormControl['patchValue']>[1]): void;\n  setValue(value: Parameters<TypedAbstractControl<T>['setValue']>[0], options?: Parameters<UntypedFormControl['setValue']>[1]): void\n}\n\n\nexport declare abstract class TypedFormGroup<T> extends UntypedFormGroup {\n  readonly value: { [P in keyof T]: TypedControllerValue<T[P]> };\n  controls: { [P in keyof T]: TypedController<T[P]> };\n  patchValue(value: { [P in keyof Partial<T>]: TypedAbstractControl<T[P]> }, options?: { onlySelf?: boolean; emitEvent?: boolean; }): void;\n  setValue(value: { [P in keyof Partial<T>]: TypedAbstractControl<T[P]> }, options?: { onlySelf?: boolean; emitEvent?: boolean; }): void;\n}\n\nexport declare abstract class TypedFormArray<T> extends UntypedFormArray {\n  readonly value: TypedControllerValue<T>[];\n  controls: TypedController<T>[];\n  reset(value: Parameters<TypedAbstractControl<T>['reset']>[0], options?: Parameters<UntypedFormControl['reset']>[1]): void;\n  push(control: TypedAbstractControl<T>, options?: { emitEvent?: boolean; }): void;\n  insert(index: number, control: TypedAbstractControl<T>, options?: { emitEvent?: boolean; }): void;\n  setControl(index: number, control: TypedAbstractControl<T>, options?: { emitEvent?: boolean; }): void;\n  setValue(value: Parameters<TypedAbstractControl<T>['setValue']>[0][], options?: Parameters<UntypedFormControl['setValue']>[1]): void\n  patchValue(value: Parameters<TypedAbstractControl<T>['patchValue']>[0][], options?: Parameters<UntypedFormControl['patchValue']>[1]): void;\n  getRawValue(): T[];\n}\n\n@Injectable()\nexport class NgxTypedFormBuilderService {\n  constructor(public fb: UntypedFormBuilder) {\n  }\n  control<T>(formState: any, validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null): TypedFormControl<T> {\n    return (<any>this.fb.control(formState, validatorOrOpts, asyncValidator)) as TypedFormControl<T>;\n  }\n  group<T>(controlsConfig: { [key in keyof T]: any; }, options?: AbstractControlOptions | { [key: string]: any; } | null): TypedFormGroup<T> {\n    return (<any>this.fb.group(controlsConfig, options)) as TypedFormGroup<T>;\n  }\n  array(controlsConfig: any[], validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null): UntypedFormArray {\n    return this.fb.array(controlsConfig, validatorOrOpts, asyncValidator)\n  }\n}\n// let x: NgxTypedFormBuilderService\n\n// const z = x.group<{ a: string, b: TypedFormArray<string>, bb: TypedFormArray<TypedFormArray<string>>, c: TypedFormGroup<{ cc1: TypedFormGroup<{ ccc1: TypedFormGroup<{ cccc1: string, cccc2: number }> }>, cc2: number }> }>({ a: [], b: [], c: [] })\n// z.value\n// z.controls.b.value\n// z.controls.bb.value\n// z.controls.c.value.cc1.ccc1.cccc1\n// z.controls.c.value","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxTypedFormBuilderService } from './ngx-typed-form-builder.service';\n\n\n\n@NgModule({\n  imports:[\n    FormsModule,\n    ReactiveFormsModule\n  ],\n  providers: [\n    NgxTypedFormBuilderService\n  ],\n})\nexport class NgxTypedFormBuilderModule { }\n","/*\n * Public API Surface of ngx-typed-form-builder\n */\n\nexport * from './lib/ngx-typed-form-builder.service';\nexport * from './lib/ngx-typed-form-builder.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAqDa,0BAA0B,CAAA;AACrC,IAAA,WAAA,CAAmB,EAAsB,EAAA;QAAtB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAoB;KACxC;AACD,IAAA,OAAO,CAAI,SAAc,EAAE,eAA6E,EAAE,cAA6D,EAAA;AACrK,QAAA,OAAa,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,cAAc,CAAyB,CAAC;KAClG;IACD,KAAK,CAAI,cAA0C,EAAE,OAAiE,EAAA;QACpH,OAAa,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO,CAAuB,CAAC;KAC3E;AACD,IAAA,KAAK,CAAC,cAAqB,EAAE,eAA6E,EAAE,cAA6D,EAAA;AACvK,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC,CAAA;KACtE;;uHAXU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;2HAA1B,0BAA0B,EAAA,CAAA,CAAA;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;;;MCrCE,yBAAyB,CAAA;;sHAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YAPlC,WAAW;QACX,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAMV,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,EAJzB,SAAA,EAAA;QACT,0BAA0B;AAC3B,KAAA,EAAA,OAAA,EAAA,CALC,WAAW;QACX,mBAAmB,CAAA,EAAA,CAAA,CAAA;2FAMV,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBATrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAC;wBACN,WAAW;wBACX,mBAAmB;AACpB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,0BAA0B;AAC3B,qBAAA;AACF,iBAAA,CAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}