@goodie-forms/core 1.1.5-alpha → 1.2.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/LICENSE +426 -426
  2. package/dist/field/FieldPath.d.ts +32 -0
  3. package/dist/field/FieldPath.d.ts.map +1 -0
  4. package/dist/field/FieldPathBuilder.d.ts +25 -0
  5. package/dist/field/FieldPathBuilder.d.ts.map +1 -0
  6. package/dist/field/Reconcile.d.ts +9 -0
  7. package/dist/field/Reconcile.d.ts.map +1 -0
  8. package/dist/form/FormController.d.ts +35 -39
  9. package/dist/form/FormController.d.ts.map +1 -1
  10. package/dist/form/FormField.d.ts +12 -10
  11. package/dist/form/FormField.d.ts.map +1 -1
  12. package/dist/form/NonullFormField.d.ts +3 -4
  13. package/dist/form/NonullFormField.d.ts.map +1 -1
  14. package/dist/index.d.ts +7 -3
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +615 -881
  17. package/dist/index.js.map +1 -1
  18. package/dist/validation/CustomValidation.d.ts +10 -0
  19. package/dist/validation/CustomValidation.d.ts.map +1 -0
  20. package/package.json +1 -1
  21. package/src/field/FieldPath.ts +292 -0
  22. package/src/field/FieldPathBuilder.ts +132 -0
  23. package/src/field/Reconcile.ts +99 -0
  24. package/src/form/FormController.ts +342 -310
  25. package/src/form/FormField.ts +200 -202
  26. package/src/form/NonullFormField.ts +15 -21
  27. package/src/index.ts +12 -5
  28. package/src/types/DeepPartial.ts +7 -7
  29. package/src/types/Mixin.ts +2 -2
  30. package/src/utils/ensureImmerability.ts +30 -30
  31. package/src/utils/getId.ts +5 -5
  32. package/src/utils/removeBy.ts +11 -11
  33. package/src/{form → validation}/CustomValidation.ts +52 -52
  34. package/tsconfig.json +8 -7
  35. package/vite.config.ts +18 -18
  36. package/dist/form/CustomValidation.d.ts +0 -10
  37. package/dist/form/CustomValidation.d.ts.map +0 -1
  38. package/dist/form/Field.d.ts +0 -31
  39. package/dist/form/Field.d.ts.map +0 -1
  40. package/src/form/Field.ts +0 -334
@@ -0,0 +1,32 @@
1
+ export declare namespace FieldPath {
2
+ export type Segments = readonly PropertyKey[];
3
+ export type CanonicalPath = string;
4
+ export type StringPath = string;
5
+ export function toCanonicalPath(path: Segments): CanonicalPath;
6
+ export function toStringPath(path: Segments): string;
7
+ export function fromStringPath<TStrPath extends string>(stringPath: TStrPath): FieldPath.ParseStringPath<TStrPath>;
8
+ export function normalize<T extends readonly any[] | undefined>(path: T): Segments;
9
+ export function equals(path1?: Segments, path2?: Segments): boolean;
10
+ export function isDescendant(parentPath: Segments, childPath: Segments): boolean;
11
+ type Unfoldable<T> = T & {
12
+ _____foldMark?: never;
13
+ } & {};
14
+ export type Resolve<TObject, TPath extends readonly PropertyKey[]> = TPath extends [] ? TObject : TPath extends readonly [infer Prop, ...infer Rest] ? Rest extends readonly PropertyKey[] ? Resolve<ResolveStep<TObject, Prop>, Rest> : never : never;
15
+ type ResolveStep<TObject, TKey> = NonNullable<TObject> extends infer U ? U extends readonly unknown[] ? number extends U["length"] ? TKey extends number | `${number}` ? U[number] : never : TKey extends keyof U ? U[TKey] : TKey extends `${infer N extends number}` ? U[N] : never : TKey extends keyof U ? U[TKey] : never : never;
16
+ export type StringPaths<TObject extends object> = StringPathsImpl<CanonicalStringPaths<TObject>>;
17
+ type StringPathsImpl<TCanonicalStringPaths extends string> = TCanonicalStringPaths extends `${string}[*]${string}` ? ReplaceAll<TCanonicalStringPaths, "[*]", "[0]"> | Unfoldable<ReplaceAll<TCanonicalStringPaths, "[*]", `[${number}]`>> : TCanonicalStringPaths;
18
+ type CanonicalStringPaths<TObject extends object> = {
19
+ [K in keyof TObject & string]: NonNullable<TObject[K]> extends (...args: any[]) => any ? never : NonNullable<TObject[K]> extends (infer U)[] ? U extends object ? K | `${K}[*]` | `${K}[*].${CanonicalStringPaths<NonNullable<U>>}` : K | `${K}[*]` : NonNullable<TObject[K]> extends object ? K | `${K}.${CanonicalStringPaths<NonNullable<TObject[K]>>}` : K;
20
+ }[keyof TObject & string];
21
+ type ReplaceAll<TString extends string, TMatch extends string, TReplace extends string | number> = TString extends `${infer A}${TMatch}${infer B}` ? `${A}${TReplace}${ReplaceAll<B, TMatch, TReplace>}` : TString;
22
+ export type ParseStringPath<TStrPath extends string> = string extends TStrPath ? never : ParseStringPathImpl<NormalizeStrPath<TStrPath>, []>;
23
+ type ParseStringPathImpl<TStrPath extends string, TPath extends PropertyKey[]> = TStrPath extends "" ? TPath : TStrPath extends `.${infer Rest}` ? ParseStringPathImpl<Rest, TPath> : TStrPath extends `[${infer Bracket}]${infer Rest}` ? ParseStringPathImpl<Rest, [...TPath, ParseBracket<Bracket>]> : TStrPath extends `${infer Head}.${infer Rest}` ? ParseStringPathImpl<Rest, [...TPath, Head]> : TStrPath extends `${infer Head}[${infer Tail}` ? ParseStringPathImpl<`[${Tail}`, [...TPath, Head]> : [...TPath, TStrPath];
24
+ type NormalizeStrPath<TStringPath extends string> = TStringPath extends `${infer A}[${infer B}]${infer Rest}` ? NormalizeStrPath<`${A}.${B}${Rest}`> : TStringPath extends `.${infer R}` ? NormalizeStrPath<R> : TStringPath;
25
+ type ParseBracket<TString extends string> = TString extends `${infer N extends number}` ? N : TString extends `"${infer K}"` ? K : TString extends `'${infer K}'` ? K : never;
26
+ export function getValue<TObject extends object, const TPath extends readonly PropertyKey[]>(object: TObject, path: TPath): FieldPath.Resolve<TObject, TPath> | undefined;
27
+ export function setValue<TObject extends object, const TPath extends readonly PropertyKey[]>(object: TObject, key: TPath, value: FieldPath.Resolve<TObject, TPath>): void;
28
+ export function modifyValue<TObject extends object, const TPath extends readonly PropertyKey[]>(object: TObject, path: TPath, modifier: (currentValue: FieldPath.Resolve<TObject, TPath>) => FieldPath.Resolve<TObject, TPath> | void): void;
29
+ export function deleteValue<TObject extends object, TPath extends readonly PropertyKey[]>(object: TObject, path: TPath): void;
30
+ export {};
31
+ }
32
+ //# sourceMappingURL=FieldPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldPath.d.ts","sourceRoot":"","sources":["../../src/field/FieldPath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { FieldPath } from './FieldPath';
2
+ declare const resolverCall: unique symbol;
3
+ export declare namespace FieldPathBuilder {
4
+ type Proxy<TObject, TPath extends readonly PropertyKey[]> = NonNullable<TObject> extends readonly (infer E)[] ? {
5
+ [K in number]: Proxy<NonNullable<E>, [...TPath, K]>;
6
+ } & {
7
+ [resolverCall]: TPath;
8
+ } : NonNullable<TObject> extends object ? {
9
+ [K in keyof TObject]-?: Proxy<NonNullable<TObject[K]>, [
10
+ ...TPath,
11
+ K
12
+ ]>;
13
+ } & {
14
+ [resolverCall]: TPath;
15
+ } : {
16
+ [resolverCall]: TPath;
17
+ };
18
+ }
19
+ export declare class FieldPathBuilder<TOutput extends object> {
20
+ protected static wrap<TObject extends object, TPath extends readonly PropertyKey[]>(paths: TPath): FieldPathBuilder.Proxy<TObject, TPath>;
21
+ fromStringPath<TStrPath extends FieldPath.StringPaths<TOutput>>(stringPath: TStrPath): FieldPath.ParseStringPath<TStrPath>;
22
+ fromProxy<TProxy extends FieldPathBuilder.Proxy<any, any>>(consumer: (data: FieldPathBuilder.Proxy<TOutput, []>) => TProxy): TProxy[typeof resolverCall];
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=FieldPathBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldPathBuilder.d.ts","sourceRoot":"","sources":["../../src/field/FieldPathBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,QAAA,MAAM,YAAY,eAAyB,CAAC;AAE5C,yBAAiB,gBAAgB,CAAC;IAChC,KAAY,KAAK,CAAC,OAAO,EAAE,KAAK,SAAS,SAAS,WAAW,EAAE,IAC7D,WAAW,CAAC,OAAO,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC7C;SACG,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;KACpD,GAAG;QACF,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;KACvB,GACD,WAAW,CAAC,OAAO,CAAC,SAAS,MAAM,GACjC;SACG,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,GAAG,KAAK,CAC3B,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACvB;YAAC,GAAG,KAAK;YAAE,CAAC;SAAC,CACd;KACF,GAAG;QACF,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;KACvB,GACD;QACE,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;KACvB,CAAC;CACX;AAED,qBAAa,gBAAgB,CAAC,OAAO,SAAS,MAAM;IAClD,SAAS,CAAC,MAAM,CAAC,IAAI,CACnB,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,SAAS,WAAW,EAAE,EACpC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;IAgBhD,cAAc,CAAC,QAAQ,SAAS,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EACnE,UAAU,EAAE,QAAQ,GAIJ,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC;IAG9C,SAAS,CAAC,MAAM,SAAS,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9D,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,MAAM,GAC9D,MAAM,CAAC,OAAO,YAAY,CAAC;CAG/B"}
@@ -0,0 +1,9 @@
1
+ export declare namespace Reconsile {
2
+ function deepEqual(a: any, b: any, customComparator?: (a: any, b: any) => boolean | undefined): boolean;
3
+ function diff<T>(prev: readonly T[], next: readonly T[], equals: (a: T, b: T) => boolean, filter?: (a: T) => boolean): {
4
+ added: T[];
5
+ removed: T[];
6
+ unchanged: T[];
7
+ };
8
+ }
9
+ //# sourceMappingURL=Reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Reconcile.d.ts","sourceRoot":"","sources":["../../src/field/Reconcile.ts"],"names":[],"mappings":"AAAA,yBAAiB,SAAS,CAAC;IACzB,SAAgB,SAAS,CACvB,CAAC,EAAE,GAAG,EACN,CAAC,EAAE,GAAG,EACN,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,OAAO,GAAG,SAAS,WAkE3D;IAED,SAAgB,IAAI,CAAC,CAAC,EACpB,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,EAC/B,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO;;;;MAqB3B;CACF"}