@glitchproof/form-field-generator 1.0.0 → 1.0.1
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.
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/type.d.ts +37 -47
- package/dist/type.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GenerateFields } from './type.js';
|
|
2
|
-
export declare const generateFields: <const Fields extends
|
|
1
|
+
import type { DICT, GenerateFields } from './type.js';
|
|
2
|
+
export declare const generateFields: <const Fields extends DICT>(fields: Fields) => GenerateFields<Fields>;
|
|
3
3
|
export default generateFields;
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAItD,eAAO,MAAM,cAAc,GAAI,KAAK,CAAC,MAAM,SAAS,IAAI,EACtD,QAAQ,MAAM,KACb,cAAc,CAAC,MAAM,CAA8C,CAAC;AAEvE,eAAe,cAAc,CAAC"}
|
package/dist/type.d.ts
CHANGED
|
@@ -1,61 +1,51 @@
|
|
|
1
1
|
export type Context = {
|
|
2
2
|
path: string;
|
|
3
3
|
};
|
|
4
|
-
type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
4
|
+
type ArrayNumberPattern = `.${number}`;
|
|
5
|
+
type DICT_VALUE = string | readonly {
|
|
6
|
+
readonly [key: string]: DICT_VALUE;
|
|
7
|
+
}[] | {
|
|
8
|
+
readonly [key: string]: DICT_VALUE;
|
|
9
|
+
};
|
|
10
|
+
type DICT_OBJECT_VALUE = {
|
|
11
|
+
readonly [key: string]: DICT_VALUE;
|
|
12
|
+
};
|
|
13
|
+
type DICT_ARRAY_VALUE = readonly {
|
|
14
|
+
readonly [key: string]: DICT_VALUE;
|
|
15
|
+
}[];
|
|
16
|
+
type DICT_NESTED_VALUES = DICT_ARRAY_VALUE | DICT_OBJECT_VALUE;
|
|
17
|
+
export type DICT = Record<string, DICT_VALUE>;
|
|
18
|
+
type CamelToSnakeCase<S extends string> = S extends `${infer T}${infer U}` ? `${T extends Capitalize<T> ? '_' : ''}${Lowercase<T>}${CamelToSnakeCase<U>}` : S;
|
|
19
|
+
type BuildTuple<Type, Length extends number, Acc extends Type[] = []> = Acc['length'] extends Length ? Acc : BuildTuple<Type, Length, [...Acc, Type]>;
|
|
20
|
+
type CountOccurrences<S extends string, Acc extends unknown[] = []> = S extends `${ArrayNumberPattern}${infer Rest}` ? CountOccurrences<Rest, [...Acc, 0]> : S extends `${infer _}${infer Rest}` ? CountOccurrences<Rest, Acc> : Acc['length'];
|
|
21
|
+
type CountArrayIndices<Path extends string> = CountOccurrences<Path>;
|
|
22
|
+
type TO_NAME<KEY> = Uppercase<CamelToSnakeCase<KEY & string>>;
|
|
23
|
+
type TO_FIELD_NAME<KEY> = `${TO_NAME<KEY>}_FIELD`;
|
|
24
|
+
type TO_OBJECT_FIELD_NAME<KEY> = `$${TO_NAME<KEY>}`;
|
|
25
|
+
type ListFieldAccessor<Path extends string> = (...args: BuildTuple<number, CountArrayIndices<Path>>) => Path;
|
|
26
|
+
type SubArrayElement<Arr extends DICT_NESTED_VALUES> = Arr extends readonly (infer Obj)[] ? Obj : never;
|
|
27
|
+
type PathGenerator<Path extends string> = CountArrayIndices<Path> extends 0 ? Path : ListFieldAccessor<Path>;
|
|
28
|
+
type ObjectFieldNameGenerator<Key extends string, Field extends DICT_OBJECT_VALUE> = Field[Key] extends string ? TO_FIELD_NAME<Key> : TO_OBJECT_FIELD_NAME<Key>;
|
|
29
|
+
type IsListedBefore<Path extends string> = CountArrayIndices<Path> extends 0 ? false : true;
|
|
30
|
+
type ExceptNumber<Key, Result> = Key extends `${number}` ? never : Result;
|
|
31
|
+
type FieldsGroup<Field extends DICT_NESTED_VALUES, Path extends string, FieldName extends string> = {
|
|
24
32
|
readonly KEY: FieldName;
|
|
25
|
-
|
|
26
|
-
* The path of the deeply nested fields.
|
|
27
|
-
* If Path is listed it generate function for naming
|
|
28
|
-
* Example { country: { place: { name: "nameOfPlace" } } } => { $COUNTRY: { PATH: () => `country`, NAME: 'nameOfCountry', $PLACE: { PATH: 'country.place', NAME: 'nameOfPlace' } } }
|
|
29
|
-
* Example {country: { name: "nameOfCountry", city: { name: "nameOfCity" } }} to { $COUNTRY: { PATH: () => `country.${number}`, NAME: 'nameOfCountry', $CITIES: { PATH: () => `path.to.country.cities`, NAME: 'nameOfCity', $CITY: { PATH: () => `path.to.country.cities.${number}`, NAME: 'nameOfCity' } } } }
|
|
30
|
-
*/
|
|
31
|
-
readonly PATH: Utils.PathGenerator<Path>;
|
|
33
|
+
readonly PATH: PathGenerator<Path>;
|
|
32
34
|
} & {
|
|
33
|
-
[KEY in keyof Field as Field[KEY] extends string ?
|
|
35
|
+
[KEY in keyof Field as Field[KEY] extends string ? TO_NAME<KEY> : never]: Field[KEY];
|
|
34
36
|
} & {
|
|
35
|
-
[KEY in keyof
|
|
36
|
-
/**
|
|
37
|
-
* The type of the sub array element for get inside object
|
|
38
|
-
*/
|
|
39
|
-
Utils.SubArrayElement<Field>> /**
|
|
40
|
-
* If the sub array element is an object, generate the fields for the object.
|
|
41
|
-
* Otherwise generate the fields path for the array.
|
|
42
|
-
*/]: Utils.SubArrayElement<Field>[KEY] extends Object.DICT_NESTED_VALUES ? FieldsGroup<Utils.SubArrayElement<Field>[KEY], `${Path}.${number}.${KEY & string}`, KEY & string> : Utils.ListFieldAccessor<`${Path}.${number}.${KEY & string}`>;
|
|
37
|
+
[KEY in keyof SubArrayElement<Field> as ObjectFieldNameGenerator<KEY & string, SubArrayElement<Field>>]: SubArrayElement<Field>[KEY] extends DICT_NESTED_VALUES ? FieldsGroup<SubArrayElement<Field>[KEY], `${Path}.${number}.${KEY & string}`, KEY & string> : ListFieldAccessor<`${Path}.${number}.${KEY & string}`>;
|
|
43
38
|
} & {
|
|
44
|
-
[KEY in keyof Field as Field[KEY] extends
|
|
45
|
-
* If the key is an object, generate the fields for the object.
|
|
46
|
-
*/]: Field[KEY] extends Object.DICT_OBJECT_VALUE ? FieldsGroup<Field[KEY], `${Path}.${KEY & string}`, KEY & string> : Field[KEY] extends Object.DICT_ARRAY_VALUE ? FieldsGroup<Field[KEY], `${Path}.${KEY & string}`, KEY & string> : never;
|
|
39
|
+
[KEY in keyof Field as Field[KEY] extends DICT_NESTED_VALUES ? ExceptNumber<KEY, TO_OBJECT_FIELD_NAME<KEY>> : never]: Field[KEY] extends DICT_OBJECT_VALUE ? FieldsGroup<Field[KEY], `${Path}.${KEY & string}`, KEY & string> : Field[KEY] extends DICT_ARRAY_VALUE ? FieldsGroup<Field[KEY], `${Path}.${KEY & string}`, KEY & string> : never;
|
|
47
40
|
} & {
|
|
48
|
-
[KEY in keyof Field as Field[KEY] extends string ?
|
|
49
|
-
* If the path is listed before, generate the fields for the array.
|
|
50
|
-
* else generate the fields path for the object.
|
|
51
|
-
*/]: Utils.IsListedBefore<Path> extends true ? Utils.ListFieldAccessor<`${Path}.${Field[KEY] & string}`> : `${Path}.${Field[KEY] & string}`;
|
|
41
|
+
[KEY in keyof Field as Field[KEY] extends string ? TO_FIELD_NAME<KEY> : never]: IsListedBefore<Path> extends true ? ListFieldAccessor<`${Path}.${Field[KEY] & string}`> : `${Path}.${Field[KEY] & string}`;
|
|
52
42
|
};
|
|
53
|
-
export type GenerateFields<Fields extends
|
|
54
|
-
[KEY in keyof Fields as Fields[KEY] extends string ?
|
|
43
|
+
export type GenerateFields<Fields extends DICT> = {
|
|
44
|
+
[KEY in keyof Fields as Fields[KEY] extends string ? TO_FIELD_NAME<KEY> : never]: Fields[KEY];
|
|
55
45
|
} & {
|
|
56
|
-
[KEY in keyof Fields as Fields[KEY] extends string ?
|
|
46
|
+
[KEY in keyof Fields as Fields[KEY] extends string ? TO_NAME<KEY> : never]: Fields[KEY];
|
|
57
47
|
} & {
|
|
58
|
-
[KEY in keyof Fields as Fields[KEY] extends
|
|
48
|
+
[KEY in keyof Fields as Fields[KEY] extends DICT_NESTED_VALUES ? TO_OBJECT_FIELD_NAME<KEY> : never]: Fields[KEY] extends DICT_NESTED_VALUES ? FieldsGroup<Fields[KEY], KEY & string, KEY & string> : never;
|
|
59
49
|
};
|
|
60
50
|
export {};
|
|
61
51
|
//# sourceMappingURL=type.d.ts.map
|
package/dist/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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"}
|