osury 0.10.0 → 0.11.0
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 +1 -1
- package/src/Codegen.res.mjs +14 -3
package/package.json
CHANGED
package/src/Codegen.res.mjs
CHANGED
|
@@ -96,8 +96,9 @@ function generateType(schema) {
|
|
|
96
96
|
} else {
|
|
97
97
|
switch (schema._tag) {
|
|
98
98
|
case "Optional" :
|
|
99
|
-
case "Nullable" :
|
|
100
99
|
return `option<` + generateType(schema._0) + `>`;
|
|
100
|
+
case "Nullable" :
|
|
101
|
+
return `null<` + generateType(schema._0) + `>`;
|
|
101
102
|
case "Object" :
|
|
102
103
|
return generateRecord(schema._0);
|
|
103
104
|
case "Array" :
|
|
@@ -145,7 +146,7 @@ function generateRecord(fields) {
|
|
|
145
146
|
let fieldStrs = fields.map(field => {
|
|
146
147
|
let typeStr = generateType(field.type);
|
|
147
148
|
let optionalType = field.required || isOptionalType(field.type) ? typeStr : `option<` + typeStr + `>`;
|
|
148
|
-
let finalType = isNullableType(field.type) ? `@s.
|
|
149
|
+
let finalType = isNullableType(field.type) ? `@s.null ` + optionalType : optionalType;
|
|
149
150
|
let asAttr = reservedKeywords.includes(field.name) ? `@as("` + field.name + `") ` : "";
|
|
150
151
|
let fieldName = reservedKeywords.includes(field.name) ? field.name + `_` : field.name;
|
|
151
152
|
return asAttr + fieldName + `: ` + finalType;
|
|
@@ -775,7 +776,10 @@ function generateModule(schemas) {
|
|
|
775
776
|
let sorted = topologicalSort(allSchemas);
|
|
776
777
|
let skipSet = {};
|
|
777
778
|
let typeDefs = sorted.map(s => generateTypeDefWithSkipSet(s, skipSet, schemasDict, tagsDict)).join("\n\n");
|
|
778
|
-
return "
|
|
779
|
+
return `@genType.import(("./Null.gen.ts", "t"))
|
|
780
|
+
type null<'a> = option<'a>
|
|
781
|
+
|
|
782
|
+
` + "module S = Sury\n\n" + typeDefs;
|
|
779
783
|
}
|
|
780
784
|
|
|
781
785
|
function generateDictShim() {
|
|
@@ -784,6 +788,12 @@ export type t<T> = { [key: string]: T };
|
|
|
784
788
|
`;
|
|
785
789
|
}
|
|
786
790
|
|
|
791
|
+
function generateNullShim() {
|
|
792
|
+
return `// Generated by osury - Null type shim for @genType
|
|
793
|
+
export type t<T> = T | null;
|
|
794
|
+
`;
|
|
795
|
+
}
|
|
796
|
+
|
|
787
797
|
export {
|
|
788
798
|
reservedKeywords,
|
|
789
799
|
isReservedKeyword,
|
|
@@ -816,5 +826,6 @@ export {
|
|
|
816
826
|
collectUnionWarnings,
|
|
817
827
|
generateModule,
|
|
818
828
|
generateDictShim,
|
|
829
|
+
generateNullShim,
|
|
819
830
|
}
|
|
820
831
|
/* No side effect */
|