ballerina-core 1.0.191 → 1.0.193

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/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.191",
5
+ "version": "1.0.193",
6
6
  "main": "main.ts",
7
7
  "scripts": {
8
8
  "prettier": "prettier --write ."
@@ -1324,30 +1324,15 @@ export const dispatchFromAPIRawValue =
1324
1324
  )}`,
1325
1325
  );
1326
1326
 
1327
- if (caseType.kind != "record" && caseType.kind != "lookup")
1328
- return ValueOrErrors.Default.throwOne(
1329
- `union case ${
1330
- result.caseName
1331
- } expected record or lookup type, got ${JSON.stringify(caseType)}`,
1332
- );
1333
-
1334
1327
  return dispatchFromAPIRawValue(
1335
1328
  caseType,
1336
1329
  types,
1337
1330
  converters,
1338
1331
  injectedPrimitives,
1339
1332
  )(result.fields).Then((value) =>
1340
- PredicateValue.Operations.IsRecord(value)
1341
- ? ValueOrErrors.Default.return(
1342
- PredicateValue.Default.unionCase(result.caseName, value),
1343
- )
1344
- : ValueOrErrors.Default.throwOne(
1345
- `union case ${
1346
- result.caseName
1347
- } expected record, got ${PredicateValue.Operations.GetKind(
1348
- value,
1349
- )}`,
1350
- ),
1333
+ ValueOrErrors.Default.return(
1334
+ PredicateValue.Default.unionCase(result.caseName, value),
1335
+ ),
1351
1336
  );
1352
1337
  }
1353
1338
 
@@ -191,6 +191,8 @@ export const SerializedType = {
191
191
  SerializedType.isApplication(_) &&
192
192
  _.fun == "ReadOnly" &&
193
193
  _.args.length == 1,
194
+ isRecordFields: (_: unknown) =>
195
+ typeof _ == "object" && _ != null && !("fun" in _) && !("args" in _),
194
196
  };
195
197
 
196
198
  export type StringSerializedType = string;
@@ -1042,41 +1044,25 @@ export const DispatchParsedType = {
1042
1044
  return ValueOrErrors.Operations.All(
1043
1045
  List<ValueOrErrors<[string, DispatchParsedType<T>], string>>(
1044
1046
  rawType.args.map((unionCase) =>
1045
- typeof unionCase.fields == "string" // lookup case
1046
- ? serializedTypes[unionCase.fields] == undefined // probably dont need this
1047
- ? ValueOrErrors.Default.throwOne(
1048
- `Cannot find union case type: ${JSON.stringify(
1049
- unionCase.fields,
1050
- )} in types`,
1051
- )
1052
- : DispatchParsedType.Operations.ParseRawType(
1053
- `Union:Case ${unionCase.caseName}`,
1054
- unionCase.fields,
1055
- typeNames,
1056
- serializedTypes,
1057
- alreadyParsedTypes,
1058
- injectedPrimitives,
1059
- ).Then((parsedType) =>
1060
- ValueOrErrors.Default.return([
1061
- unionCase.caseName,
1062
- parsedType[0],
1063
- ]),
1064
- )
1065
- : DispatchParsedType.Operations.ParseRawType(
1066
- `Union:Case ${unionCase.caseName}`,
1067
- unionCase.fields == undefined
1068
- ? { fields: {} }
1069
- : unionCase,
1070
- typeNames,
1071
- serializedTypes,
1072
- alreadyParsedTypes,
1073
- injectedPrimitives,
1074
- ).Then((parsedType) =>
1075
- ValueOrErrors.Default.return([
1076
- unionCase.caseName,
1077
- parsedType[0],
1078
- ]),
1079
- ),
1047
+ DispatchParsedType.Operations.ParseRawType(
1048
+ `Union:Case ${unionCase.caseName}`,
1049
+ unionCase.fields == undefined
1050
+ ? { fields: {} }
1051
+ : // we allow the record fields to be defined directly in the spec instead of
1052
+ // inside a fields key
1053
+ SerializedType.isRecordFields(unionCase.fields)
1054
+ ? { fields: unionCase.fields }
1055
+ : unionCase.fields,
1056
+ typeNames,
1057
+ serializedTypes,
1058
+ alreadyParsedTypes,
1059
+ injectedPrimitives,
1060
+ ).Then((parsedType) =>
1061
+ ValueOrErrors.Default.return([
1062
+ unionCase.caseName,
1063
+ parsedType[0],
1064
+ ]),
1065
+ ),
1080
1066
  ),
1081
1067
  ),
1082
1068
  ).Then((parsedUnionCases) =>
@@ -504,9 +504,6 @@ export const TableAbstractRenderer = <
504
504
  .flatMap((_, column) => {
505
505
  const EmbeddedCell = EmbeddedCellTemplates.get(column);
506
506
  if (EmbeddedCell == undefined) {
507
- console.error(
508
- `Cannot find column ${column} in fields ${rowData.fields.keySeq().toArray()}, this is likely due to a mismatch between the data we are trying to parse and the specs.`,
509
- );
510
507
  return [];
511
508
  }
512
509
  return [
@@ -78,31 +78,77 @@ export const RendererTraversal = {
78
78
 
79
79
  if (
80
80
  renderer.kind == "lookupType-lookupRenderer" ||
81
- renderer.kind == "inlinedType-lookupRenderer" ||
82
- renderer.kind == "lookupType-inlinedRenderer"
81
+ renderer.kind == "lookupType-inlinedRenderer" ||
82
+ renderer.kind == "inlinedType-lookupRenderer"
83
83
  ) {
84
84
  if (
85
85
  renderer.kind == "lookupType-lookupRenderer" ||
86
- renderer.kind == "inlinedType-lookupRenderer"
86
+ renderer.kind == "lookupType-inlinedRenderer"
87
87
  ) {
88
- // renderer.renderer.renderer is the form name
89
- // this is a form lookup, so "local" changes here to the traversed value
90
88
  return LookupRenderer.Operations.ResolveRenderer(
91
89
  renderer,
92
90
  traversalContext.forms,
93
91
  ).Then((resolvedRenderer) =>
94
92
  rec(resolvedRenderer, traversalContext).Then(
95
93
  (valueTraversal: Option<ValueTraversal<T, Res>>) =>
96
- ValueOrErrors.Default.return(
97
- mapEvalContext((ctx) => ({
98
- ...ctx,
99
- local: ctx.traversalIterator,
100
- }))(valueTraversal),
101
- ),
94
+ ValueOrErrors.Default.return<
95
+ Option<ValueTraversal<T, Res>>,
96
+ string
97
+ >(
98
+ // reassign local if it's a lookup renderer
99
+ renderer.kind == "lookupType-lookupRenderer"
100
+ ? mapEvalContext((ctx) => ({
101
+ ...ctx,
102
+ local: ctx.traversalIterator,
103
+ }))(valueTraversal)
104
+ : valueTraversal,
105
+ ).Then((resolvedTraversal) => {
106
+ if (
107
+ traverseNode.kind == "l" &&
108
+ resolvedTraversal.kind == "l"
109
+ ) {
110
+ return ValueOrErrors.Default.return(Option.Default.none());
111
+ }
112
+
113
+ if (traverseNode.kind == "l") {
114
+ return ValueOrErrors.Default.return(resolvedTraversal);
115
+ }
116
+
117
+ if (resolvedTraversal.kind == "l") {
118
+ return ValueOrErrors.Default.return(
119
+ Option.Default.some((evalContext: EvalContext<T, Res>) =>
120
+ traverseNode
121
+ .value(evalContext)
122
+ .Then((nodeResult) =>
123
+ ValueOrErrors.Default.return(nodeResult),
124
+ ),
125
+ ),
126
+ );
127
+ }
128
+
129
+ return ValueOrErrors.Default.return(
130
+ Option.Default.some((evalContext: EvalContext<T, Res>) => {
131
+ return resolvedTraversal
132
+ .value(evalContext)
133
+ .Then((resolvedTraversal) =>
134
+ traverseNode
135
+ .value(evalContext)
136
+ .Then((nodeResult) =>
137
+ ValueOrErrors.Default.return<Res, string>(
138
+ traversalContext.joinRes([
139
+ nodeResult,
140
+ resolvedTraversal,
141
+ ]),
142
+ ),
143
+ ),
144
+ );
145
+ }),
146
+ );
147
+ }),
102
148
  ),
103
149
  );
104
150
  }
105
- // otherwise the form is inlined, so the local doesn't change
151
+
106
152
  return LookupRenderer.Operations.ResolveRenderer(
107
153
  renderer,
108
154
  traversalContext.forms,
@@ -113,6 +159,54 @@ export const RendererTraversal = {
113
159
  ),
114
160
  );
115
161
  }
162
+
163
+ if (
164
+ renderer.type.kind == "readOnly" &&
165
+ renderer.kind == "readOnlyRenderer"
166
+ ) {
167
+ return rec(renderer.childRenderer.renderer, traversalContext).Then(
168
+ (valueTraversal: Option<ValueTraversal<T, Res>>) => {
169
+ if (valueTraversal.kind == "l" && traverseNode.kind == "l") {
170
+ return ValueOrErrors.Default.return(Option.Default.none());
171
+ }
172
+ return ValueOrErrors.Default.return(
173
+ Option.Default.some((evalContext: EvalContext<T, Res>) => {
174
+ const iterator = evalContext.traversalIterator;
175
+ if (!PredicateValue.Operations.IsReadOnly(iterator)) {
176
+ return ValueOrErrors.Default.throwOne<Res, string>(
177
+ `Error: traversal iterator is not read only, got ${JSON.stringify(
178
+ iterator,
179
+ undefined,
180
+ 2,
181
+ )}`,
182
+ );
183
+ }
184
+ return (
185
+ valueTraversal.kind == "r"
186
+ ? valueTraversal.value({
187
+ ...evalContext,
188
+ traversalIterator: iterator.ReadOnly,
189
+ })
190
+ : ValueOrErrors.Default.return<Res, string>(
191
+ traversalContext.zeroRes(unit),
192
+ )
193
+ ).Then((valueResult) =>
194
+ traverseNode.kind == "r"
195
+ ? traverseNode
196
+ .value(evalContext)
197
+ .Then((nodeResult) =>
198
+ ValueOrErrors.Default.return(
199
+ traversalContext.joinRes([valueResult, nodeResult]),
200
+ ),
201
+ )
202
+ : ValueOrErrors.Default.return(valueResult),
203
+ );
204
+ }),
205
+ );
206
+ },
207
+ );
208
+ }
209
+
116
210
  if (renderer.type.kind == "record" && renderer.kind == "recordRenderer") {
117
211
  return ValueOrErrors.Operations.All(
118
212
  List(
@@ -425,7 +425,7 @@ export const PredicateValue = {
425
425
  kind: "record",
426
426
  fields,
427
427
  }),
428
- unionCase: (caseName: string, fields: ValueRecord): ValueUnionCase => ({
428
+ unionCase: (caseName: string, fields: PredicateValue): ValueUnionCase => ({
429
429
  kind: "unionCase",
430
430
  caseName,
431
431
  fields,