@teamnovu/kit-vue-forms 0.0.7 → 0.0.9

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.
@@ -4,8 +4,6 @@ import { ValidationErrors } from '../types/validation';
4
4
  export interface UseFieldOptions<T, K extends string> {
5
5
  value?: MaybeRef<T>;
6
6
  initialValue?: MaybeRefOrGetter<Readonly<T>>;
7
- type?: MaybeRef<string>;
8
- required?: MaybeRef<boolean>;
9
7
  path: K;
10
8
  errors?: MaybeRef<ValidationErrors>;
11
9
  }
@@ -3,17 +3,17 @@ import { Paths, PickProps } from '../types/util';
3
3
  import { UseFieldOptions } from './useField';
4
4
  type FieldRegistryCache<T> = Record<Paths<T>, FormField<any, string>>;
5
5
  export type ResolvedFormField<T, K extends Paths<T>> = FormField<PickProps<T, K>, K>;
6
- export type DefineFieldOptions<F, K extends string> = Pick<UseFieldOptions<F, K>, 'path' | 'type' | 'required'>;
6
+ export type DefineFieldOptions<F, K extends string> = Pick<UseFieldOptions<F, K>, 'path'>;
7
7
  interface FormState<T extends FormDataDefault, TIn extends FormDataDefault = T> {
8
8
  data: T;
9
9
  initialData: TIn;
10
10
  }
11
11
  export declare function useFieldRegistry<T extends FormDataDefault>(formState: FormState<T>): {
12
12
  fields: FieldRegistryCache<T>;
13
- getField: <K extends Paths<T>>(path: K) => ResolvedFormField<T, K> | undefined;
13
+ getField: <K extends Paths<T>>(path: K) => ResolvedFormField<T, K>;
14
14
  getFields: () => ResolvedFormField<T, Paths<T>>[];
15
15
  registerField: <K extends Paths<T>>(field: ResolvedFormField<T, K>) => void;
16
- defineField: <K extends Paths<T>>(options: DefineFieldOptions<PickProps<T, K>, K>) => FormField<PickProps<any, K>, K>;
16
+ defineField: <K extends Paths<T>>(options: DefineFieldOptions<PickProps<T, K>, K>) => FormField<K extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_1 ? T_1 extends TRest ? T_1 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_2 ? T_2 extends TRest ? T_2 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_3 ? T_3 extends TRest ? T_3 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_4 ? T_4 extends TRest ? T_4 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_5 ? T_5 extends TRest ? T_5 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_6 ? T_6 extends TRest ? T_6 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_7 ? T_7 extends TRest ? T_7 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_8 ? T_8 extends TRest ? T_8 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_9 ? T_9 extends TRest ? T_9 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? TRest extends infer T_10 ? T_10 extends TRest ? T_10 extends `${infer TRoot}.${infer TRest}` ? TRoot extends string | number | symbol ? TRest extends string ? /*elided*/ any : never : TRoot extends `${number}` ? never : never : T_10 extends string | number | symbol ? Required<any>[T_10] : T_10 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_9 extends string | number | symbol ? Required<any>[T_9] : T_9 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_8 extends string | number | symbol ? Required<any>[T_8] : T_8 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_7 extends string | number | symbol ? Required<any>[T_7] : T_7 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_6 extends string | number | symbol ? Required<any>[T_6] : T_6 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_5 extends string | number | symbol ? Required<any>[T_5] : T_5 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_4 extends string | number | symbol ? Required<any>[T_4] : T_4 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_3 extends string | number | symbol ? Required<any>[T_3] : T_3 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_2 extends string | number | symbol ? Required<any>[T_2] : T_2 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : T_1 extends string | number | symbol ? Required<any>[T_1] : T_1 extends `${number}` ? never : never : never : never : never : TRoot extends `${number}` ? never : never : K extends string | number | symbol ? any : K extends `${number}` ? never : never, K>;
17
17
  };
18
18
  export type FieldRegistry<T extends FormDataDefault> = ReturnType<typeof useFieldRegistry<T>>;
19
19
  export {};
package/dist/index.d.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  export { useForm } from './composables/useForm';
2
2
  export type { UseFormOptions } from './composables/useForm';
3
- export { useField } from './composables/useField';
4
3
  export type { UseFieldOptions } from './composables/useField';
5
4
  export type { ValidationStrategy, ValidationErrorMessage as ErrorMessage, ValidationResult, ErrorBag, Validator, ValidationFunction, ValidationErrors } from './types/validation';
6
5
  export type { DeepPartial } from './utils/type-helpers';
7
6
  export type { Form, FormField } from './types/form';
8
- export type { SplitPath, Paths, PickProps } from './types/util';
7
+ export type { SplitPath, Paths, PickProps, ObjectOf, EntityPaths } from './types/util';
9
8
  export { default as Field } from './components/Field.vue';
10
9
  export type { FieldProps } from './components/Field.vue';
package/dist/index.mjs CHANGED
@@ -1,10 +1,10 @@
1
- var q = Object.defineProperty;
2
- var x = (e, r, t) => r in e ? q(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
3
- var R = (e, r, t) => x(e, typeof r != "symbol" ? r + "" : r, t);
4
- import { toValue as K, toRaw as W, computed as d, unref as c, reactive as b, watch as F, toRefs as O, toRef as S, ref as A, isRef as _, getCurrentScope as I, onBeforeUnmount as J, defineComponent as T, renderSlot as B, normalizeProps as G, guardReactiveProps as L } from "vue";
1
+ var x = Object.defineProperty;
2
+ var K = (e, r, t) => r in e ? x(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
3
+ var R = (e, r, t) => K(e, typeof r != "symbol" ? r + "" : r, t);
4
+ import { toValue as W, toRaw as q, computed as d, unref as c, reactive as b, watch as F, toRefs as O, toRef as S, ref as A, isRef as _, getCurrentScope as I, onBeforeUnmount as J, defineComponent as T, renderSlot as B, normalizeProps as G, guardReactiveProps as L } from "vue";
5
5
  import "zod";
6
6
  function y(e) {
7
- const r = K(e), t = W(r);
7
+ const r = W(e), t = q(r);
8
8
  return structuredClone(t);
9
9
  }
10
10
  function N(e) {
@@ -97,7 +97,7 @@ function H(e) {
97
97
  };
98
98
  return {
99
99
  fields: r,
100
- getField: (u) => r[u],
100
+ getField: (u) => r[u] ?? {},
101
101
  getFields: () => Object.values(r),
102
102
  registerField: t,
103
103
  defineField: (u) => {
@@ -411,8 +411,6 @@ const pr = /* @__PURE__ */ T({
411
411
  form: {},
412
412
  value: {},
413
413
  initialValue: {},
414
- type: {},
415
- required: {},
416
414
  path: {},
417
415
  errors: {}
418
416
  },
@@ -426,6 +424,5 @@ const pr = /* @__PURE__ */ T({
426
424
  });
427
425
  export {
428
426
  pr as Field,
429
- k as useField,
430
427
  vr as useForm
431
428
  };
@@ -6,7 +6,7 @@ export type SplitPath<TPath extends string> = TPath extends `${infer T1}.${infer
6
6
  /**
7
7
  * Picks the exact type of the Entity at the nested PropertyKeys path.
8
8
  */
9
- export type PickProps<Entity, PropertyKeys extends string> = PropertyKeys extends `${infer TRoot}.${infer TRest}` ? TRoot extends keyof Entity ? TRest extends string ? Entity[TRoot] extends object ? PickProps<Entity[TRoot], TRest> : never : never : TRoot extends `${number}` ? Entity extends unknown[] ? TRest extends string ? Entity[number] extends object ? PickProps<Entity[number], TRest> : never : never : never : never : PropertyKeys extends keyof Entity ? Entity[PropertyKeys] : PropertyKeys extends `${number}` ? Entity extends unknown[] ? Entity[number] : never : never;
9
+ export type PickProps<Entity, PropertyKeys extends string> = Entity extends NonNullable<infer NonNullEntity> ? Required<NonNullEntity> extends infer RequiredEntity ? PropertyKeys extends `${infer TRoot}.${infer TRest}` ? TRoot extends keyof RequiredEntity ? TRest extends string ? RequiredEntity[TRoot] extends object ? PickProps<RequiredEntity[TRoot], TRest> : never : never : TRoot extends `${number}` ? RequiredEntity extends unknown[] ? TRest extends string ? RequiredEntity[number] extends object ? PickProps<RequiredEntity[number], TRest> : never : never : never : never : PropertyKeys extends keyof Required<RequiredEntity> ? RequiredEntity[PropertyKeys] : PropertyKeys extends `${number}` ? RequiredEntity extends unknown[] ? RequiredEntity[number] : never : never : never : never;
10
10
  /**
11
11
  * Resolves to a union of dot-connected paths of all nested properties of T.
12
12
  */
@@ -24,3 +24,7 @@ export type ButLast<T extends string> = T extends `${infer Rest}.${infer Last}`
24
24
  export type EntityPaths<T> = ButLast<Paths<T>> & Paths<T>;
25
25
  export type PickEntity<Entity, PropertyKeys extends string> = PropertyKeys extends unknown ? PickProps<Entity, EntityPaths<Entity> & PropertyKeys> & FormDataDefault : never;
26
26
  export type RestPath<T extends string, P extends string> = P extends `${T}.${infer Rest}` ? Rest : never;
27
+ export type RootPath<P extends string> = P extends `${infer TRoot}.${string}` ? TRoot : P;
28
+ export type ObjectOf<TPath extends string, T> = {
29
+ [K in RootPath<TPath>]: RestPath<K, TPath> extends never ? T : ObjectOf<RestPath<K, TPath>, T>;
30
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teamnovu/kit-vue-forms",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "exports": {
@@ -6,8 +6,6 @@ import { cloneRefValue } from '../utils/general'
6
6
  export interface UseFieldOptions<T, K extends string> {
7
7
  value?: MaybeRef<T>
8
8
  initialValue?: MaybeRefOrGetter<Readonly<T>>
9
- type?: MaybeRef<string>
10
- required?: MaybeRef<boolean>
11
9
  path: K
12
10
  errors?: MaybeRef<ValidationErrors>
13
11
  }
@@ -9,7 +9,7 @@ type FieldRegistryCache<T> = Record<Paths<T>, FormField<any, string>>
9
9
 
10
10
  export type ResolvedFormField<T, K extends Paths<T>> = FormField<PickProps<T, K>, K>
11
11
 
12
- export type DefineFieldOptions<F, K extends string> = Pick<UseFieldOptions<F, K>, 'path' | 'type' | 'required'>
12
+ export type DefineFieldOptions<F, K extends string> = Pick<UseFieldOptions<F, K>, 'path'>
13
13
 
14
14
  interface FormState<T extends FormDataDefault, TIn extends FormDataDefault = T> {
15
15
  data: T
@@ -27,7 +27,7 @@ export function useFieldRegistry<T extends FormDataDefault>(
27
27
  }
28
28
 
29
29
  const getField = <K extends Paths<T>>(path: K) => {
30
- return fields[path] as ResolvedFormField<T, K> | undefined
30
+ return (fields[path] ?? {}) as ResolvedFormField<T, K>
31
31
  }
32
32
 
33
33
  const getFields = () => {
package/src/index.ts CHANGED
@@ -3,7 +3,6 @@ export { useForm } from './composables/useForm'
3
3
  export type { UseFormOptions } from './composables/useForm'
4
4
 
5
5
  // Field composable
6
- export { useField } from './composables/useField'
7
6
  export type { UseFieldOptions } from './composables/useField'
8
7
 
9
8
  // Types
@@ -11,7 +10,7 @@ export type { ValidationStrategy, ValidationErrorMessage as ErrorMessage, Valida
11
10
  export type { DeepPartial } from './utils/type-helpers'
12
11
 
13
12
  export type { Form, FormField } from './types/form'
14
- export type { SplitPath, Paths, PickProps } from './types/util'
13
+ export type { SplitPath, Paths, PickProps, ObjectOf, EntityPaths } from './types/util'
15
14
 
16
15
  export { default as Field } from './components/Field.vue'
17
16
  export type { FieldProps } from './components/Field.vue'
package/src/types/util.ts CHANGED
@@ -12,31 +12,35 @@ export type SplitPath<TPath extends string> =
12
12
  * Picks the exact type of the Entity at the nested PropertyKeys path.
13
13
  */
14
14
  export type PickProps<Entity, PropertyKeys extends string> =
15
- PropertyKeys extends `${infer TRoot}.${infer TRest}`
16
- ? TRoot extends keyof Entity
17
- ? TRest extends string
18
- ? Entity[TRoot] extends object
19
- ? PickProps<Entity[TRoot], TRest>
20
- : never
21
- : never
22
- // We might have an array at hand but the key is a string with a number in it
23
- : TRoot extends `${number}`
24
- ? Entity extends unknown[]
15
+ Entity extends NonNullable<infer NonNullEntity>
16
+ ? Required<NonNullEntity> extends infer RequiredEntity
17
+ ? PropertyKeys extends `${infer TRoot}.${infer TRest}`
18
+ ? TRoot extends keyof RequiredEntity
25
19
  ? TRest extends string
26
- ? Entity[number] extends object
27
- ? PickProps<Entity[number], TRest>
20
+ ? RequiredEntity[TRoot] extends object
21
+ ? PickProps<RequiredEntity[TRoot], TRest>
28
22
  : never
29
23
  : never
30
- : never
31
- : never
32
- // We might have an array at hand but the key is a string with a number in it
33
- : PropertyKeys extends keyof Entity
34
- ? Entity[PropertyKeys]
35
- : PropertyKeys extends `${number}`
36
- ? Entity extends unknown[]
37
- ? Entity[number]
38
- : never
39
- : never
24
+ // We might have an array at hand but the key is a string with a number in it
25
+ : TRoot extends `${number}`
26
+ ? RequiredEntity extends unknown[]
27
+ ? TRest extends string
28
+ ? RequiredEntity[number] extends object
29
+ ? PickProps<RequiredEntity[number], TRest>
30
+ : never
31
+ : never
32
+ : never
33
+ : never
34
+ // We might have an array at hand but the key is a string with a number in it
35
+ : PropertyKeys extends keyof Required<RequiredEntity>
36
+ ? RequiredEntity[PropertyKeys]
37
+ : PropertyKeys extends `${number}`
38
+ ? RequiredEntity extends unknown[]
39
+ ? RequiredEntity[number]
40
+ : never
41
+ : never
42
+ : never
43
+ : never
40
44
 
41
45
  /**
42
46
  * Resolves to a union of dot-connected paths of all nested properties of T.
@@ -71,3 +75,10 @@ export type PickEntity<Entity, PropertyKeys extends string> =
71
75
 
72
76
  export type RestPath<T extends string, P extends string> =
73
77
  P extends `${T}.${infer Rest}` ? Rest : never
78
+
79
+ export type RootPath<P extends string> =
80
+ P extends `${infer TRoot}.${string}` ? TRoot : P
81
+
82
+ export type ObjectOf<TPath extends string, T> = {
83
+ [K in RootPath<TPath>]: RestPath<K, TPath> extends never ? T : ObjectOf<RestPath<K, TPath>, T>
84
+ }