cogfy-data-exchange 1.0.14 → 1.0.16

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.
@@ -1,3 +1,7 @@
1
+ import type { FlowJson } from './flow-json';
2
+ import type { FromSchema } from './schema';
3
+ import type { ScreenName } from './screen';
4
+ import type { AllTriggers } from './trigger';
1
5
  type ExtractScreenById<T, Id extends string> = T extends {
2
6
  screens: infer Screens;
3
7
  } ? Screens extends readonly unknown[] ? Extract<Screens[number], {
@@ -20,6 +24,33 @@ type ExtractChildByTrigger<Children, Trigger extends string> = Children extends
20
24
  };
21
25
  };
22
26
  } ? Children : never;
23
- export type PayloadByScreenId<T, Id extends string> = ExtractPayload<ExtractChildren<ExtractScreenById<T, Id>>>;
24
- export type PayloadByTrigger<T, Trigger extends string, ScreenId extends string> = ExtractPayload<ExtractChildByTrigger<ExtractChildren<ExtractScreenById<T, ScreenId>>, Trigger>>;
27
+ type ExtractScreenData<T> = T extends {
28
+ data: infer D;
29
+ } ? D : never;
30
+ type ExtractDataSourceIds<DS> = DS extends readonly {
31
+ id: infer Id;
32
+ }[] ? Id : string;
33
+ type ComponentFormValue<C> = C extends {
34
+ type: 'RadioButtonsGroup' | 'Dropdown';
35
+ 'data-source': infer DS;
36
+ } ? ExtractDataSourceIds<DS> : C extends {
37
+ type: 'CheckboxGroup';
38
+ 'data-source': infer DS;
39
+ } ? ExtractDataSourceIds<DS>[] : C extends {
40
+ type: 'TextInput' | 'TextArea' | 'DatePicker';
41
+ } ? string : C extends {
42
+ type: 'OptIn';
43
+ } ? boolean : string;
44
+ type ResolvePayloadValue<V, Children, ScreenData> = V extends `$${'{'}form.${infer FieldName}}` ? [Extract<Children, {
45
+ name: FieldName;
46
+ }>] extends [never] ? string : ComponentFormValue<Extract<Children, {
47
+ name: FieldName;
48
+ }>> : V extends `$${'{'}data}` ? {
49
+ [K in keyof ScreenData]: FromSchema<ScreenData[K]>;
50
+ } : V extends `$${'{'}data.${infer DataField}}` ? DataField extends keyof ScreenData ? FromSchema<ScreenData[DataField]> : unknown : V;
51
+ type ResolvePayload<P, Children, ScreenData> = P extends unknown ? {
52
+ [K in keyof P]: ResolvePayloadValue<P[K], Children, ScreenData>;
53
+ } : never;
54
+ export type PayloadByScreenId<T extends FlowJson, Id extends ScreenName<T>> = ResolvePayload<ExtractPayload<ExtractChildByTrigger<ExtractChildren<ExtractScreenById<T, Id>>, `screen.${Id}`>>, ExtractChildren<ExtractScreenById<T, Id>>, ExtractScreenData<ExtractScreenById<T, Id>>>;
55
+ export type PayloadByTrigger<T extends FlowJson, Trigger extends AllTriggers<T>, ScreenId extends ScreenName<T>> = ResolvePayload<ExtractPayload<ExtractChildByTrigger<ExtractChildren<ExtractScreenById<T, ScreenId>>, Trigger>>, ExtractChildren<ExtractScreenById<T, ScreenId>>, ExtractScreenData<ExtractScreenById<T, ScreenId>>>;
25
56
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cogfy-data-exchange",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,3 +1,8 @@
1
+ import type { FlowJson } from './flow-json'
2
+ import type { FromSchema } from './schema'
3
+ import type { ScreenName } from './screen'
4
+ import type { AllTriggers } from './trigger'
5
+
1
6
  type ExtractScreenById<T, Id extends string> = T extends {
2
7
  screens: infer Screens
3
8
  }
@@ -20,8 +25,54 @@ type ExtractChildByTrigger<Children, Trigger extends string> = Children extends
20
25
  ? Children
21
26
  : never
22
27
 
23
- export type PayloadByScreenId<T, Id extends string> = ExtractPayload<ExtractChildren<ExtractScreenById<T, Id>>>
28
+ type ExtractScreenData<T> = T extends { data: infer D } ? D : never
29
+
30
+ type ExtractDataSourceIds<DS> = DS extends readonly { id: infer Id }[] ? Id : string
31
+
32
+ type ComponentFormValue<C> = C extends {
33
+ type: 'RadioButtonsGroup' | 'Dropdown'
34
+ 'data-source': infer DS
35
+ }
36
+ ? ExtractDataSourceIds<DS>
37
+ : C extends {
38
+ type: 'CheckboxGroup'
39
+ 'data-source': infer DS
40
+ }
41
+ ? ExtractDataSourceIds<DS>[]
42
+ : C extends { type: 'TextInput' | 'TextArea' | 'DatePicker' }
43
+ ? string
44
+ : C extends { type: 'OptIn' }
45
+ ? boolean
46
+ : string
47
+
48
+ type ResolvePayloadValue<V, Children, ScreenData> = V extends `$${'{'}form.${infer FieldName}}`
49
+ ? [Extract<Children, { name: FieldName }>] extends [never]
50
+ ? string
51
+ : ComponentFormValue<Extract<Children, { name: FieldName }>>
52
+ : V extends `$${'{'}data}`
53
+ ? { [K in keyof ScreenData]: FromSchema<ScreenData[K]> }
54
+ : V extends `$${'{'}data.${infer DataField}}`
55
+ ? DataField extends keyof ScreenData
56
+ ? FromSchema<ScreenData[DataField]>
57
+ : unknown
58
+ : V
59
+
60
+ type ResolvePayload<P, Children, ScreenData> = P extends unknown
61
+ ? { [K in keyof P]: ResolvePayloadValue<P[K], Children, ScreenData> }
62
+ : never
63
+
64
+ export type PayloadByScreenId<T extends FlowJson, Id extends ScreenName<T>> = ResolvePayload<
65
+ ExtractPayload<ExtractChildByTrigger<ExtractChildren<ExtractScreenById<T, Id>>, `screen.${Id}`>>,
66
+ ExtractChildren<ExtractScreenById<T, Id>>,
67
+ ExtractScreenData<ExtractScreenById<T, Id>>
68
+ >
24
69
 
25
- export type PayloadByTrigger<T, Trigger extends string, ScreenId extends string> = ExtractPayload<
26
- ExtractChildByTrigger<ExtractChildren<ExtractScreenById<T, ScreenId>>, Trigger>
70
+ export type PayloadByTrigger<
71
+ T extends FlowJson,
72
+ Trigger extends AllTriggers<T>,
73
+ ScreenId extends ScreenName<T>,
74
+ > = ResolvePayload<
75
+ ExtractPayload<ExtractChildByTrigger<ExtractChildren<ExtractScreenById<T, ScreenId>>, Trigger>>,
76
+ ExtractChildren<ExtractScreenById<T, ScreenId>>,
77
+ ExtractScreenData<ExtractScreenById<T, ScreenId>>
27
78
  >