ballerina-core 1.0.119 → 1.0.121

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 (41) hide show
  1. package/package.json +1 -1
  2. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/apis/state.ts +257 -10
  3. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/domains/renderers/domains/baseRenderer/domains/list/state.ts +14 -3
  4. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/domains/renderers/domains/baseRenderer/domains/map/state.ts +14 -5
  5. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/domains/renderers/domains/baseRenderer/domains/sum/state.ts +17 -6
  6. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/domains/renderers/domains/baseRenderer/domains/tuple/state.ts +23 -4
  7. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/domains/renderers/domains/baseRenderer/domains/union/state.ts +35 -5
  8. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/domains/renderers/domains/baseRenderer/state.ts +105 -4
  9. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/domains/renderers/domains/recordFormRenderer/state.ts +29 -4
  10. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/domains/renderers/domains/tableFormRenderer/state.ts +88 -13
  11. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/form/state.ts +1 -0
  12. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/state.ts +256 -331
  13. package/src/forms/domains/dispatched-forms/deserializer/state.ts +3 -6
  14. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/base-64-file/template.tsx +5 -2
  15. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/boolean/template.tsx +5 -2
  16. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/date/template.tsx +5 -2
  17. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/enum/template.tsx +6 -2
  18. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/list/template.tsx +14 -2
  19. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/map/template.tsx +22 -2
  20. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/record/template.tsx +18 -4
  21. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/searchable-infinite-stream/template.tsx +6 -2
  22. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/searchable-infinite-stream-multiselect/template.tsx +8 -3
  23. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/secret/template.tsx +7 -3
  24. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/string/template.tsx +7 -3
  25. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/sum/template.tsx +19 -3
  26. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/table/coroutines/runner.ts +33 -29
  27. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/table/state.ts +23 -1
  28. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/table/template.tsx +156 -14
  29. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/tuple/template.tsx +21 -3
  30. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/union/template.tsx +17 -4
  31. package/src/forms/domains/dispatched-forms/dispatcher/domains/abstract-renderers/unit/template.tsx +27 -19
  32. package/src/forms/domains/dispatched-forms/dispatcher/domains/nestedDispatcher/state.ts +53 -29
  33. package/src/forms/domains/dispatched-forms/dispatcher/domains/recordFormDispatcher/state.ts +11 -0
  34. package/src/forms/domains/dispatched-forms/dispatcher/domains/runner/coroutines/runner.ts +18 -20
  35. package/src/forms/domains/dispatched-forms/dispatcher/domains/runner/state.ts +3 -4
  36. package/src/forms/domains/dispatched-forms/dispatcher/domains/runner/template.tsx +4 -4
  37. package/src/forms/domains/dispatched-forms/dispatcher/domains/tableFormDispatcher/state.ts +62 -36
  38. package/src/forms/domains/dispatched-forms/dispatcher/state.ts +3 -0
  39. package/src/forms/domains/parser/domains/built-ins/state.ts +0 -3
  40. package/src/forms/domains/parser/domains/predicates/domains/extractor/state.ts +176 -209
  41. package/src/value-infinite-data-stream/state.ts +55 -2
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "ballerina-core",
3
3
  "author": "Dr. Giuseppe Maggiore",
4
4
  "private": false,
5
- "version": "1.0.119",
5
+ "version": "1.0.121",
6
6
  "main": "main.ts",
7
7
  "scripts": {
8
8
  "prettier": "prettier --write ."
@@ -1,16 +1,263 @@
1
- import { DispatchTypeName } from "../types/state";
1
+ import { List, Map } from "immutable";
2
+ import {
3
+ EntityApi,
4
+ isObject,
5
+ isString,
6
+ ValueOrErrors,
7
+ } from "../../../../../../../../../main";
8
+ import { DispatchIsObject, DispatchTypeName } from "../types/state";
2
9
 
3
10
  export type SerializedEntityApi = {
4
11
  type?: any;
5
12
  methods?: any;
6
13
  };
7
14
 
8
- // Exist already in the main.ts
9
- // export type EntityApi = {
10
- // type: TypeName;
11
- // methods: { create: boolean; get: boolean; update: boolean; default: boolean };
12
- // };
13
- // export type GlobalConfigurationApi = {
14
- // type: TypeName;
15
- // methods: { get: boolean };
16
- // };
15
+ export type SerializedLookupApi = {
16
+ enums?: unknown;
17
+ streams?: unknown;
18
+ one?: unknown;
19
+ many?: unknown;
20
+ tables?: unknown;
21
+ };
22
+
23
+ export type SpecificationApis = {
24
+ entities: Map<string, EntityApi>; // TODO move entity apis out
25
+ enums?: EnumApis;
26
+ streams?: StreamApis;
27
+ tables?: TableApis;
28
+ lookups?: LookupApis;
29
+ };
30
+
31
+ export type EnumApiName = string;
32
+ export type EnumApis = Map<EnumApiName, DispatchTypeName>;
33
+ export const EnumApis = {
34
+ Operations: {
35
+ Deserialize: (
36
+ serializedApiEnums?: unknown,
37
+ ): ValueOrErrors<undefined | EnumApis, string> =>
38
+ serializedApiEnums === undefined
39
+ ? ValueOrErrors.Default.return(undefined)
40
+ : !isObject(serializedApiEnums)
41
+ ? ValueOrErrors.Default.throwOne(
42
+ `serializedApiEnums is not an object`,
43
+ )
44
+ : ValueOrErrors.Operations.All(
45
+ List<ValueOrErrors<[EnumApiName, DispatchTypeName], string>>(
46
+ Object.entries(serializedApiEnums).map(([key, value]) =>
47
+ !isString(key)
48
+ ? ValueOrErrors.Default.throwOne(`key is not a string`)
49
+ : !isString(value)
50
+ ? ValueOrErrors.Default.throwOne(`value is not a string`)
51
+ : ValueOrErrors.Default.return([key, value]),
52
+ ),
53
+ ),
54
+ )
55
+ .Then((entries) =>
56
+ ValueOrErrors.Default.return(
57
+ Map<EnumApiName, DispatchTypeName>(entries),
58
+ ),
59
+ )
60
+ .MapErrors((errors) =>
61
+ errors.map(
62
+ (error) => `${error}\n...When deserializing enum apis`,
63
+ ),
64
+ ),
65
+ },
66
+ };
67
+
68
+ export type StreamApiName = string;
69
+ export type StreamApis = Map<StreamApiName, DispatchTypeName>;
70
+ export const StreamApis = {
71
+ Operations: {
72
+ Deserialize: (
73
+ serializedApiStreams?: unknown,
74
+ ): ValueOrErrors<undefined | StreamApis, string> =>
75
+ serializedApiStreams === undefined
76
+ ? ValueOrErrors.Default.return(undefined)
77
+ : !isObject(serializedApiStreams)
78
+ ? ValueOrErrors.Default.throwOne(
79
+ `serializedApiStreams is not an object`,
80
+ )
81
+ : ValueOrErrors.Operations.All(
82
+ List<ValueOrErrors<[StreamApiName, DispatchTypeName], string>>(
83
+ Object.entries(serializedApiStreams).map(([key, value]) =>
84
+ !isString(key)
85
+ ? ValueOrErrors.Default.throwOne(`key is not a string`)
86
+ : !isString(value)
87
+ ? ValueOrErrors.Default.throwOne(`value is not a string`)
88
+ : ValueOrErrors.Default.return([key, value]),
89
+ ),
90
+ ),
91
+ )
92
+ .Then((entries) =>
93
+ ValueOrErrors.Default.return(
94
+ Map<StreamApiName, DispatchTypeName>(entries),
95
+ ),
96
+ )
97
+ .MapErrors((errors) =>
98
+ errors.map(
99
+ (error) => `${error}\n...When deserializing stream apis`,
100
+ ),
101
+ ),
102
+ },
103
+ };
104
+
105
+ export type TableApiName = string;
106
+ export type TableApis = Map<TableApiName, { type: DispatchTypeName }>;
107
+ export const TableApis = {
108
+ Operations: {
109
+ Deserialize: (
110
+ serializedApiTables?: unknown,
111
+ ): ValueOrErrors<undefined | TableApis, string> =>
112
+ serializedApiTables === undefined
113
+ ? ValueOrErrors.Default.return(undefined)
114
+ : !isObject(serializedApiTables)
115
+ ? ValueOrErrors.Default.throwOne(
116
+ `serializedApiTables is not an object`,
117
+ )
118
+ : ValueOrErrors.Operations.All(
119
+ List<
120
+ ValueOrErrors<
121
+ [TableApiName, { type: DispatchTypeName }],
122
+ string
123
+ >
124
+ >(
125
+ Object.entries(serializedApiTables).map(([key, value]) =>
126
+ !isString(key)
127
+ ? ValueOrErrors.Default.throwOne(`key is not a string`)
128
+ : !isObject(value)
129
+ ? ValueOrErrors.Default.throwOne(`value is not an object`)
130
+ : !("type" in value)
131
+ ? ValueOrErrors.Default.throwOne(
132
+ `type is missing from value`,
133
+ )
134
+ : !isString(value.type)
135
+ ? ValueOrErrors.Default.throwOne(
136
+ `type is not a string`,
137
+ )
138
+ : // TODO: type assertion is safe but would like typescript to know that
139
+ ValueOrErrors.Default.return([
140
+ key,
141
+ value as { type: DispatchTypeName },
142
+ ]),
143
+ ),
144
+ ),
145
+ )
146
+ .Then((entries) =>
147
+ ValueOrErrors.Default.return(
148
+ Map<TableApiName, { type: DispatchTypeName }>(entries),
149
+ ),
150
+ )
151
+ .MapErrors((errors) =>
152
+ errors.map(
153
+ (error) => `${error}\n...When deserializing table apis`,
154
+ ),
155
+ ),
156
+ },
157
+ };
158
+
159
+ export type LookupApiName = string;
160
+ export type LookupApis = Map<LookupApiName, LookupApi>;
161
+ export type LookupApi = {
162
+ enums?: EnumApis;
163
+ streams?: StreamApis;
164
+ tables?: TableApis;
165
+ lookups?: LookupApis;
166
+ one?: Map<
167
+ string,
168
+ {
169
+ type: DispatchTypeName;
170
+ methods: {
171
+ update: boolean;
172
+ getManyUnlinked: boolean;
173
+ create: boolean;
174
+ delete: boolean;
175
+ };
176
+ }
177
+ >;
178
+ many?: Map<
179
+ string,
180
+ {
181
+ type: DispatchTypeName;
182
+ methods: {
183
+ update: boolean;
184
+ getManyUnlinked: boolean;
185
+ create: boolean;
186
+ delete: boolean;
187
+ };
188
+ }
189
+ >;
190
+ };
191
+
192
+ // TODO add one and many deserialization
193
+ export const LookupApis = {
194
+ Operations: {
195
+ isLookupApi: (
196
+ _: unknown,
197
+ ): _ is {
198
+ enums?: unknown;
199
+ streams?: unknown;
200
+ tables?: unknown;
201
+ lookups?: unknown;
202
+ one?: unknown;
203
+ many?: unknown;
204
+ } => DispatchIsObject(_),
205
+ DeserializeOne: (
206
+ serializedLookupApi: unknown,
207
+ ): ValueOrErrors<LookupApi, string> =>
208
+ !LookupApis.Operations.isLookupApi(serializedLookupApi)
209
+ ? ValueOrErrors.Default.throwOne(`serializedLookupApi is not an object`)
210
+ : EnumApis.Operations.Deserialize(serializedLookupApi.enums)
211
+ .Then((enums) =>
212
+ StreamApis.Operations.Deserialize(
213
+ serializedLookupApi.streams,
214
+ ).Then((streams) =>
215
+ TableApis.Operations.Deserialize(
216
+ serializedLookupApi.tables,
217
+ ).Then((tables) =>
218
+ LookupApis.Operations.Deserialize(
219
+ serializedLookupApi.lookups,
220
+ ).Then((lookups) =>
221
+ ValueOrErrors.Default.return({
222
+ enums,
223
+ streams,
224
+ tables,
225
+ lookups,
226
+ }),
227
+ ),
228
+ ),
229
+ ),
230
+ )
231
+ .MapErrors((errors) =>
232
+ errors.map(
233
+ (error) => `${error}\n...When deserializing lookup api`,
234
+ ),
235
+ ),
236
+ Deserialize: (
237
+ serializedApiLookups?: unknown,
238
+ ): ValueOrErrors<undefined | LookupApis, string> =>
239
+ serializedApiLookups === undefined
240
+ ? ValueOrErrors.Default.return(undefined)
241
+ : !isObject(serializedApiLookups)
242
+ ? ValueOrErrors.Default.throwOne(
243
+ `serializedApiLookups is not an object`,
244
+ )
245
+ : ValueOrErrors.Operations.All(
246
+ List<ValueOrErrors<[LookupApiName, LookupApi], string>>(
247
+ Object.entries(serializedApiLookups).map(([key, value]) =>
248
+ ValueOrErrors.Default.return([key, value]),
249
+ ),
250
+ ),
251
+ )
252
+ .Then((entries) =>
253
+ ValueOrErrors.Default.return(
254
+ Map<LookupApiName, LookupApi>(entries),
255
+ ),
256
+ )
257
+ .MapErrors((errors) =>
258
+ errors.map(
259
+ (error) => `${error}\n...When deserializing lookup apis`,
260
+ ),
261
+ ),
262
+ },
263
+ };
@@ -1,14 +1,17 @@
1
+ import { Map } from "immutable";
1
2
  import {
2
3
  Expr,
3
4
  ValueOrErrors,
4
5
  } from "../../../../../../../../../../../../../../../main";
5
- import { ListType } from "../../../../../../../types/state";
6
+ import { DispatchParsedType, ListType } from "../../../../../../../types/state";
6
7
  import {
7
8
  BaseBaseRenderer,
8
9
  BaseSerializedBaseRenderer,
9
10
  ParentContext,
10
11
  BaseRenderer,
11
12
  } from "../../state";
13
+ import { TableFormRenderer } from "../../../tableFormRenderer/state";
14
+ import { RecordFormRenderer } from "../../../recordFormRenderer/state";
12
15
 
13
16
  export type SerializedBaseListRenderer = {
14
17
  elementRenderer?: unknown;
@@ -18,7 +21,10 @@ export type SerializedBaseListRenderer = {
18
21
 
19
22
  export type BaseListRenderer<T> = BaseBaseRenderer & {
20
23
  kind: "baseListRenderer";
21
- elementRenderer: BaseRenderer<T>;
24
+ elementRenderer:
25
+ | BaseRenderer<T>
26
+ | TableFormRenderer<T>
27
+ | RecordFormRenderer<T>;
22
28
  type: ListType<T>;
23
29
  concreteRendererName: string;
24
30
  };
@@ -27,7 +33,10 @@ export const BaseListRenderer = {
27
33
  Default: <T>(
28
34
  type: ListType<T>,
29
35
  concreteRendererName: string,
30
- elementRenderer: BaseRenderer<T>,
36
+ elementRenderer:
37
+ | BaseRenderer<T>
38
+ | TableFormRenderer<T>
39
+ | RecordFormRenderer<T>,
31
40
  visible?: Expr,
32
41
  disabled?: Expr,
33
42
  label?: string,
@@ -96,6 +105,7 @@ export const BaseListRenderer = {
96
105
  serialized: SerializedBaseListRenderer,
97
106
  fieldViews: any,
98
107
  renderingContext: ParentContext,
108
+ types: Map<string, DispatchParsedType<T>>,
99
109
  ): ValueOrErrors<BaseListRenderer<T>, string> =>
100
110
  BaseListRenderer.Operations.tryAsValidBaseListRenderer(serialized)
101
111
  .Then((renderer) =>
@@ -113,6 +123,7 @@ export const BaseListRenderer = {
113
123
  fieldViews,
114
124
  "nested",
115
125
  "Element",
126
+ types,
116
127
  ).Then((elementRenderer) =>
117
128
  ValueOrErrors.Default.return(
118
129
  BaseListRenderer.Default(
@@ -1,8 +1,10 @@
1
+ import { Map } from "immutable";
1
2
  import {
2
3
  Expr,
4
+ TableFormRenderer,
3
5
  ValueOrErrors,
4
6
  } from "../../../../../../../../../../../../../../../main";
5
- import { MapType } from "../../../../../../../types/state";
7
+ import { DispatchParsedType, MapType } from "../../../../../../../types/state";
6
8
  import {
7
9
  BaseBaseRenderer,
8
10
  BaseSerializedBaseRenderer,
@@ -10,6 +12,7 @@ import {
10
12
  ParentContext,
11
13
  BaseRenderer,
12
14
  } from "../../state";
15
+ import { RecordFormRenderer } from "../../../recordFormRenderer/state";
13
16
 
14
17
  export type SerializedBaseMapRenderer = {
15
18
  keyRenderer?: unknown;
@@ -18,8 +21,8 @@ export type SerializedBaseMapRenderer = {
18
21
 
19
22
  export type BaseMapRenderer<T> = BaseBaseRenderer & {
20
23
  kind: "baseMapRenderer";
21
- keyRenderer: BaseRenderer<T>;
22
- valueRenderer: BaseRenderer<T>;
24
+ keyRenderer: BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>;
25
+ valueRenderer: BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>;
23
26
  type: MapType<T>;
24
27
  concreteRendererName: string;
25
28
  };
@@ -28,8 +31,11 @@ export const BaseMapRenderer = {
28
31
  Default: <T>(
29
32
  type: MapType<T>,
30
33
  concreteRendererName: string,
31
- keyRenderer: BaseRenderer<T>,
32
- valueRenderer: BaseRenderer<T>,
34
+ keyRenderer: BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>,
35
+ valueRenderer:
36
+ | BaseRenderer<T>
37
+ | TableFormRenderer<T>
38
+ | RecordFormRenderer<T>,
33
39
  visible?: Expr,
34
40
  disabled?: Expr,
35
41
  label?: string,
@@ -82,6 +88,7 @@ export const BaseMapRenderer = {
82
88
  serialized: SerializedBaseMapRenderer,
83
89
  fieldViews: any,
84
90
  renderingContext: ParentContext,
91
+ types: Map<string, DispatchParsedType<T>>,
85
92
  ): ValueOrErrors<BaseMapRenderer<T>, string> =>
86
93
  BaseMapRenderer.Operations.tryAsValidMapBaseRenderer(serialized)
87
94
  .Then((renderer) =>
@@ -99,6 +106,7 @@ export const BaseMapRenderer = {
99
106
  fieldViews,
100
107
  "nested",
101
108
  "Key",
109
+ types,
102
110
  ).Then((deserializedKeyRenderer) =>
103
111
  BaseRenderer.Operations.DeserializeAs(
104
112
  type.args[1],
@@ -106,6 +114,7 @@ export const BaseMapRenderer = {
106
114
  fieldViews,
107
115
  "nested",
108
116
  "Value",
117
+ types,
109
118
  ).Then((deserializedValueRenderer) =>
110
119
  ValueOrErrors.Default.return(
111
120
  BaseMapRenderer.Default(
@@ -1,4 +1,4 @@
1
- import { List } from "immutable";
1
+ import { Map } from "immutable";
2
2
  import {
3
3
  SerializedBaseRenderer,
4
4
  BaseSerializedBaseRenderer,
@@ -6,11 +6,13 @@ import {
6
6
  BaseBaseRenderer as BaseBaseRenderer,
7
7
  ParentContext,
8
8
  } from "../../state";
9
- import { SumType } from "../../../../../../../types/state";
9
+ import { DispatchParsedType, SumType } from "../../../../../../../types/state";
10
10
  import {
11
11
  Expr,
12
+ TableFormRenderer,
12
13
  ValueOrErrors,
13
14
  } from "../../../../../../../../../../../../../../../main";
15
+ import { RecordFormRenderer } from "../../../recordFormRenderer/state";
14
16
 
15
17
  export type SerializedSumBaseRenderer = {
16
18
  leftRenderer?: unknown;
@@ -19,8 +21,8 @@ export type SerializedSumBaseRenderer = {
19
21
 
20
22
  export type BaseSumRenderer<T> = BaseBaseRenderer & {
21
23
  kind: "baseSumRenderer";
22
- leftRenderer: BaseRenderer<T>;
23
- rightRenderer: BaseRenderer<T>;
24
+ leftRenderer: BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>;
25
+ rightRenderer: BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>;
24
26
  type: SumType<T>;
25
27
  concreteRendererName: string;
26
28
  };
@@ -29,8 +31,14 @@ export const BaseSumRenderer = {
29
31
  Default: <T>(
30
32
  type: SumType<T>,
31
33
  concreteRendererName: string,
32
- leftRenderer: BaseRenderer<T>,
33
- rightRenderer: BaseRenderer<T>,
34
+ leftRenderer:
35
+ | BaseRenderer<T>
36
+ | TableFormRenderer<T>
37
+ | RecordFormRenderer<T>,
38
+ rightRenderer:
39
+ | BaseRenderer<T>
40
+ | TableFormRenderer<T>
41
+ | RecordFormRenderer<T>,
34
42
  visible?: Expr,
35
43
  disabled?: Expr,
36
44
  label?: string,
@@ -83,6 +91,7 @@ export const BaseSumRenderer = {
83
91
  serialized: SerializedSumBaseRenderer,
84
92
  renderingContext: ParentContext,
85
93
  fieldViews: any,
94
+ types: Map<string, DispatchParsedType<T>>,
86
95
  ): ValueOrErrors<BaseSumRenderer<T>, string> =>
87
96
  BaseSumRenderer.Operations.tryAsValidSumBaseRenderer(serialized)
88
97
  .Then((renderer) =>
@@ -100,6 +109,7 @@ export const BaseSumRenderer = {
100
109
  fieldViews,
101
110
  "nested",
102
111
  "Left",
112
+ types,
103
113
  ).Then((deserializedLeftRenderer) =>
104
114
  BaseRenderer.Operations.DeserializeAs(
105
115
  type.args[1],
@@ -107,6 +117,7 @@ export const BaseSumRenderer = {
107
117
  fieldViews,
108
118
  "nested",
109
119
  "Right",
120
+ types,
110
121
  ).Then((deserializedRightRenderer) =>
111
122
  ValueOrErrors.Default.return(
112
123
  BaseSumRenderer.Default(
@@ -1,8 +1,14 @@
1
+ import { Map } from "immutable";
1
2
  import {
2
3
  Expr,
4
+ TableFormRenderer,
3
5
  ValueOrErrors,
4
6
  } from "../../../../../../../../../../../../../../../main";
5
- import { TupleType } from "../../../../../../../types/state";
7
+ import { RecordFormRenderer } from "../../../recordFormRenderer/state";
8
+ import {
9
+ DispatchParsedType,
10
+ TupleType,
11
+ } from "../../../../../../../types/state";
6
12
 
7
13
  import {
8
14
  BaseBaseRenderer,
@@ -19,7 +25,9 @@ export type SerializedBaseTupleRenderer = {
19
25
 
20
26
  export type BaseTupleRenderer<T> = BaseBaseRenderer & {
21
27
  kind: "baseTupleRenderer";
22
- itemRenderers: Array<BaseRenderer<T>>;
28
+ itemRenderers: Array<
29
+ BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>
30
+ >;
23
31
  type: TupleType<T>;
24
32
  concreteRendererName: string;
25
33
  };
@@ -28,7 +36,9 @@ export const BaseTupleRenderer = {
28
36
  Default: <T>(
29
37
  type: TupleType<T>,
30
38
  concreteRendererName: string,
31
- itemRenderers: Array<BaseRenderer<T>>,
39
+ itemRenderers: Array<
40
+ BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>
41
+ >,
32
42
  visible?: Expr,
33
43
  disabled?: Expr,
34
44
  label?: string,
@@ -96,6 +106,7 @@ export const BaseTupleRenderer = {
96
106
  serialized: SerializedBaseTupleRenderer,
97
107
  fieldViews: any,
98
108
  renderingContext: ParentContext,
109
+ types: Map<string, DispatchParsedType<T>>,
99
110
  ): ValueOrErrors<BaseTupleRenderer<T>, string> =>
100
111
  BaseTupleRenderer.Operations.tryAsValidBaseTupleRenderer(serialized)
101
112
  .Then((renderer) =>
@@ -108,7 +119,14 @@ export const BaseTupleRenderer = {
108
119
  renderingContext,
109
120
  ).Then((disabledExpr) =>
110
121
  ValueOrErrors.Operations.All(
111
- List<ValueOrErrors<BaseRenderer<T>, string>>(
122
+ List<
123
+ ValueOrErrors<
124
+ | BaseRenderer<T>
125
+ | TableFormRenderer<T>
126
+ | RecordFormRenderer<T>,
127
+ string
128
+ >
129
+ >(
112
130
  renderer.itemRenderers.map((itemRenderer, index) =>
113
131
  BaseRenderer.Operations.DeserializeAs(
114
132
  type.args[index],
@@ -116,6 +134,7 @@ export const BaseTupleRenderer = {
116
134
  fieldViews,
117
135
  "nested",
118
136
  `Item ${index + 1}`,
137
+ types,
119
138
  ).Then((deserializedItemRenderer) =>
120
139
  ValueOrErrors.Default.return(deserializedItemRenderer),
121
140
  ),
@@ -1,8 +1,13 @@
1
1
  import {
2
2
  Expr,
3
+ TableFormRenderer,
3
4
  ValueOrErrors,
4
5
  } from "../../../../../../../../../../../../../../../main";
5
- import { UnionType } from "../../../../../../../types/state";
6
+ import { RecordFormRenderer } from "../../../recordFormRenderer/state";
7
+ import {
8
+ DispatchParsedType,
9
+ UnionType,
10
+ } from "../../../../../../../types/state";
6
11
 
7
12
  import {
8
13
  BaseBaseRenderer,
@@ -19,7 +24,10 @@ export type SerializedBaseUnionRenderer = {
19
24
 
20
25
  export type BaseUnionRenderer<T> = BaseBaseRenderer & {
21
26
  kind: "baseUnionRenderer";
22
- cases: Map<string, BaseRenderer<T>>;
27
+ cases: Map<
28
+ string,
29
+ BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>
30
+ >;
23
31
  type: UnionType<T>;
24
32
  concreteRendererName: string;
25
33
  };
@@ -28,7 +36,10 @@ export const BaseUnionRenderer = {
28
36
  Default: <T>(
29
37
  type: UnionType<T>,
30
38
  concreteRendererName: string,
31
- cases: Map<string, BaseRenderer<T>>,
39
+ cases: Map<
40
+ string,
41
+ BaseRenderer<T> | TableFormRenderer<T> | RecordFormRenderer<T>
42
+ >,
32
43
  visible?: Expr,
33
44
  disabled?: Expr,
34
45
  label?: string,
@@ -95,6 +106,7 @@ export const BaseUnionRenderer = {
95
106
  serialized: SerializedBaseUnionRenderer,
96
107
  fieldViews: any,
97
108
  renderingContext: ParentContext,
109
+ types: Map<string, DispatchParsedType<T>>,
98
110
  ): ValueOrErrors<BaseUnionRenderer<T>, string> =>
99
111
  BaseUnionRenderer.Operations.tryAsValidBaseUnionRenderer(serialized)
100
112
  .Then((renderer) =>
@@ -107,7 +119,19 @@ export const BaseUnionRenderer = {
107
119
  renderingContext,
108
120
  ).Then((disabledExpr) =>
109
121
  ValueOrErrors.Operations.All(
110
- List<ValueOrErrors<[string, BaseRenderer<T>], string>>(
122
+ List<
123
+ ValueOrErrors<
124
+ [
125
+ string,
126
+ (
127
+ | BaseRenderer<T>
128
+ | TableFormRenderer<T>
129
+ | RecordFormRenderer<T>
130
+ ),
131
+ ],
132
+ string
133
+ >
134
+ >(
111
135
  Object.entries(renderer.cases).map(([caseName, caseProp]) => {
112
136
  const caseType = type.args.get(caseName);
113
137
  if (!caseType) {
@@ -121,6 +145,7 @@ export const BaseUnionRenderer = {
121
145
  fieldViews,
122
146
  "nested",
123
147
  `case ${caseName}`,
148
+ types,
124
149
  ).Then((deserializedCase) =>
125
150
  ValueOrErrors.Default.return([
126
151
  caseName,
@@ -134,7 +159,12 @@ export const BaseUnionRenderer = {
134
159
  BaseUnionRenderer.Default(
135
160
  type,
136
161
  renderer.renderer,
137
- Map<string, BaseRenderer<T>>(deserializedCases),
162
+ Map<
163
+ string,
164
+ | BaseRenderer<T>
165
+ | TableFormRenderer<T>
166
+ | RecordFormRenderer<T>
167
+ >(deserializedCases),
138
168
  visibleExpr,
139
169
  disabledExpr,
140
170
  renderer.label,