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 CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "osury",
3
3
  "type": "module",
4
4
  "description": "Generate ReScript types with Sury schemas from OpenAPI specifications",
5
- "version": "0.10.0",
5
+ "version": "0.11.0",
6
6
  "license": "MIT",
7
7
  "bin": {
8
8
  "osury": "./bin/osury.mjs"
@@ -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.nullable ` + optionalType : optionalType;
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 "module S = Sury\n\n" + typeDefs;
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 */