osury 0.24.0 → 0.26.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/bin/osury.mjs CHANGED
@@ -358,6 +358,9 @@ function generate(inputPath, outputPath) {
358
358
  const dictShimPath = path.join(outputDir || ".", "Dict.gen.ts");
359
359
  fs.writeFileSync(dictShimPath, Codegen.generateDictShim());
360
360
 
361
+ const jsonShimPath = path.join(outputDir || ".", "JSON.gen.ts");
362
+ fs.writeFileSync(jsonShimPath, Codegen.generateJsonShim());
363
+
361
364
  const nullableResPath = path.join(outputDir || ".", "Nullable.res");
362
365
  fs.writeFileSync(nullableResPath, Codegen.generateNullableModule());
363
366
 
@@ -371,6 +374,7 @@ function generate(inputPath, outputPath) {
371
374
  log(` ${c.dim("Files written:")}`);
372
375
  log(` ${sym.bullet} ${c.cyan(outputPath)} ${c.dim("(main module)")}`);
373
376
  log(` ${sym.bullet} ${c.cyan(dictShimPath)} ${c.dim("(TS shim)")}`);
377
+ log(` ${sym.bullet} ${c.cyan(jsonShimPath)} ${c.dim("(TS shim)")}`);
374
378
  log(` ${sym.bullet} ${c.cyan(nullableResPath)} ${c.dim("(ReScript module)")}`);
375
379
  log(` ${sym.bullet} ${c.cyan(nullableShimPath)} ${c.dim("(TS shim)")}`);
376
380
  blank();
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.24.0",
5
+ "version": "0.26.0",
6
6
  "license": "MIT",
7
7
  "bin": {
8
8
  "osury": "bin/osury.mjs"
@@ -100,6 +100,8 @@ let generateInlineRecord = CodegenTypes.generateInlineRecord;
100
100
 
101
101
  let generateDictShim = CodegenShims.generateDictShim;
102
102
 
103
+ let generateJsonShim = CodegenShims.generateJsonShim;
104
+
103
105
  let generateNullableShim = CodegenShims.generateNullableShim;
104
106
 
105
107
  let generateNullableModule = CodegenShims.generateNullableModule;
@@ -134,6 +136,7 @@ export {
134
136
  generateInlineVariantBody,
135
137
  generateInlineRecord,
136
138
  generateDictShim,
139
+ generateJsonShim,
137
140
  generateNullableShim,
138
141
  generateNullableModule,
139
142
  generateModuleWithDiagnostics,
@@ -21,6 +21,12 @@ export type t<T> = T | null;
21
21
  `;
22
22
  }
23
23
 
24
+ function generateJsonShim() {
25
+ return `// Generated by osury - JSON type shim for @genType
26
+ export type t = unknown;
27
+ `;
28
+ }
29
+
24
30
  function generateNullableModule() {
25
31
  return `// Generated by osury - Nullable type for JSON null values
26
32
  // This is option<T> internally but maps to T | null in TypeScript via shim
@@ -32,6 +38,7 @@ type t<'a> = option<'a>
32
38
  export {
33
39
  generateDictShim,
34
40
  generateNullableShim,
41
+ generateJsonShim,
35
42
  generateNullableModule,
36
43
  }
37
44
  /* No side effect */
package/src/IRGen.res.mjs CHANGED
@@ -48,10 +48,15 @@ function convertType(schema) {
48
48
  _0: convertType(schema._0)
49
49
  };
50
50
  case "Object" :
51
- return {
52
- TAG: "InlineRecord",
53
- _0: schema._0.map(convertField)
54
- };
51
+ let fields = schema._0;
52
+ if (fields.length === 0) {
53
+ return "JSON";
54
+ } else {
55
+ return {
56
+ TAG: "InlineRecord",
57
+ _0: fields.map(convertField)
58
+ };
59
+ }
55
60
  case "Array" :
56
61
  return {
57
62
  TAG: "Array",
@@ -258,13 +263,21 @@ function convertToIrTypeDef(namedSchema, schemasDict, tagsDict, skipSchemaSet) {
258
263
  }
259
264
  let fields = namedSchema.schema;
260
265
  let kind;
261
- kind = typeof fields !== "object" || fields._tag !== "Object" ? ({
266
+ if (typeof fields !== "object" || fields._tag !== "Object") {
267
+ kind = {
262
268
  TAG: "AliasDef",
263
269
  _0: convertType(namedSchema.schema)
264
- }) : ({
265
- TAG: "RecordDef",
266
- _0: fields._0.map(convertField)
267
- });
270
+ };
271
+ } else {
272
+ let fields$1 = fields._0;
273
+ kind = fields$1.length > 0 ? ({
274
+ TAG: "RecordDef",
275
+ _0: fields$1.map(convertField)
276
+ }) : ({
277
+ TAG: "AliasDef",
278
+ _0: convertType(namedSchema.schema)
279
+ });
280
+ }
268
281
  let annotations = shouldSkipSchema ? ["GenType"] : [
269
282
  "GenType",
270
283
  "Schema"