@contractspec/lib.contracts-transformers 1.56.0 → 1.57.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.
Files changed (38) hide show
  1. package/dist/common/types.d.ts +0 -1
  2. package/dist/common/types.d.ts.map +1 -1
  3. package/dist/common/utils.d.ts.map +1 -1
  4. package/dist/openapi/differ.d.ts +0 -1
  5. package/dist/openapi/differ.d.ts.map +1 -1
  6. package/dist/openapi/exporter/data-views.d.ts +0 -1
  7. package/dist/openapi/exporter/data-views.d.ts.map +1 -1
  8. package/dist/openapi/exporter/events.d.ts +0 -1
  9. package/dist/openapi/exporter/events.d.ts.map +1 -1
  10. package/dist/openapi/exporter/features.d.ts +0 -1
  11. package/dist/openapi/exporter/features.d.ts.map +1 -1
  12. package/dist/openapi/exporter/forms.d.ts +0 -1
  13. package/dist/openapi/exporter/forms.d.ts.map +1 -1
  14. package/dist/openapi/exporter/operations.d.ts +0 -1
  15. package/dist/openapi/exporter/operations.d.ts.map +1 -1
  16. package/dist/openapi/exporter/presentations.d.ts +0 -1
  17. package/dist/openapi/exporter/presentations.d.ts.map +1 -1
  18. package/dist/openapi/exporter/registries.d.ts +0 -1
  19. package/dist/openapi/exporter/registries.d.ts.map +1 -1
  20. package/dist/openapi/exporter/workflows.d.ts +0 -1
  21. package/dist/openapi/exporter/workflows.d.ts.map +1 -1
  22. package/dist/openapi/exporter.d.ts +0 -1
  23. package/dist/openapi/exporter.d.ts.map +1 -1
  24. package/dist/openapi/importer/grouping.js +0 -1
  25. package/dist/openapi/importer/grouping.js.map +1 -1
  26. package/dist/openapi/importer/index.d.ts +0 -1
  27. package/dist/openapi/importer/index.d.ts.map +1 -1
  28. package/dist/openapi/parser/document.d.ts +0 -1
  29. package/dist/openapi/parser/document.d.ts.map +1 -1
  30. package/dist/openapi/parser/utils.d.ts +0 -1
  31. package/dist/openapi/parser/utils.d.ts.map +1 -1
  32. package/dist/openapi/schema-converter.d.ts +0 -1
  33. package/dist/openapi/schema-converter.d.ts.map +1 -1
  34. package/dist/openapi/schema-generators/index.js +17 -18
  35. package/dist/openapi/schema-generators/index.js.map +1 -1
  36. package/dist/openapi/types.d.ts +1 -3
  37. package/dist/openapi/types.d.ts.map +1 -1
  38. package/package.json +6 -6
@@ -1,7 +1,6 @@
1
1
  import { AnyOperationSpec } from "@contractspec/lib.contracts";
2
2
 
3
3
  //#region src/common/types.d.ts
4
-
5
4
  /**
6
5
  * Source information for imported specs.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/common/types.ts"],"sourcesContent":[],"mappings":";;;;AA0BA;AAoBA;;AAcU,UAnDO,UAAA,CAmDP;EAEQ;EAAc,IAAA,EAAA,SAAA,GAAA,UAAA,GAAA,SAAA,GAAA,UAAA;EAMf;EAyBL,GAAA,CAAA,EAAA,MAAA;EAUK;EAgBA,IAAA,CAAA,EAAA,MAAQ;EAIZ;EAED,QAAA,EAAA,MAAA;EAED;EAAU,UAAA,EA5GP,IA4GO;AAUrB;;;;;AAWqB,UA1HJ,cAAA,CA0HI;EAaJ,IAAA,CAAA,EAAA;;;;;;;;;;;;;;;;;;UAnHA,qBAAA;;;;;;kBAMC;;;;;;;;UAQR;;kBAEQ;;;;;UAMD,YAAA;;kBAEC;;;;;;;;;;;;;;;;;;;;;;KAuBN,cAAA;;;;UAUK,UAAA;;;;QAIT;;;;;;;;;;;UAYS,QAAA;;;;aAIJ;;YAED;;WAED;;;;;;;;;UAUM,UAAA;;SAER;;;UAGC;aACG;;;;;aAKA;;;;;;;;;;;;UAaI,gBAAA;;;;SAIR"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/common/types.ts"],"mappings":";;;;;;UASiB,UAAA;EAIf;EAFA,IAAA;EAMA;EAJA,GAAA;EAMY;EAJZ,IAAA;EAIgB;EAFhB,QAAA;EAS6B;EAP7B,UAAA,EAAY,IAAA;AAAA;;;;;UAOG,cAAA;EACf,IAAA;IACE,MAAA;IACA,IAAA;IACA,MAAA;MACE,IAAA;MACA,KAAA;MACA,MAAA;MACA,MAAA;IAAA;EAAA;EAGJ,OAAA;IACE,IAAA;IACA,SAAA;EAAA;AAAA;;;;UAOa,qBAAA;EAUf;;;;;EAJA,aAAA,GAAgB,gBAAA;EAUc;EAR9B,IAAA;EAce;EAZf,QAAA;;EAEA,WAAA;EAYA;EAVA,MAAA,EAAQ,UAAA;EAYR;EAVA,cAAA,EAAgB,cAAA;AAAA;;;;UAMD,YAAA;EAeb;EAbF,cAAA,EAAgB,qBAAA;EAed;EAbF,OAAA;IACE,QAAA;IACA,MAAA;EAAA;EAmBsB;EAhBxB,MAAA;IACE,QAAA;IACA,KAAA;EAAA;EAwBuB;EArBzB,OAAA;IACE,KAAA;IACA,QAAA;IACA,OAAA;IACA,MAAA;EAAA;AAAA;;;;KAOQ,cAAA;;;;UAUK,UAAA;EAwBN;EAtBT,IAAA;EAsBmB;EApBnB,IAAA,EAAM,cAAA;EAgBN;EAdA,QAAA;EAgBA;EAdA,QAAA;EAgBA;EAdA,WAAA;AAAA;;;;UAMe,QAAA;EAkBU;EAhBzB,WAAA;EAkBO;EAhBP,QAAA,GAAW,gBAAA;EAoBA;EAlBX,QAAA,EAAU,qBAAA;EAuBS;EArBnB,OAAA,EAAS,UAAA;EAYT;EAVA,YAAA;EAYA;EAVA,UAAA;AAAA;;;;UAMe,UAAA;EAWJ;EATX,KAAA,EAAO,qBAAA;EAYL;EAVF,OAAA;IACE,IAAA,EAAM,qBAAA;IACN,OAAA,EAAS,UAAA;EAAA;EAWA;EARX,SAAA;EAe+B;EAb/B,SAAA,EAAW,QAAA;EAiBM;EAfjB,OAAA;IACE,KAAA;IACA,OAAA;IACA,SAAA;IACA,SAAA;EAAA;AAAA;;;;UAOa,gBAAA;;EAEf,KAAA;;EAEA,KAAA,EAAO,UAAA;;EAEP,MAAA;;EAEA,QAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/common/utils.ts"],"sourcesContent":[],"mappings":";;AAOA;AASA;AAQA;AAUA;AAUA;AAagB,iBAlDA,YAAA,CAkDS,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQzB;AAOA;AA4BA;AAiBgB,iBArGA,WAAA,CAqGiB,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQjC;;;iBArGgB,WAAA;;;;iBAUA,WAAA;;;;iBAUA,iBAAA;;;;iBAaA,SAAA;;;;iBAQA,UAAA;;;;iBAOA,SAAA;;;;iBA4BA,SAAA;;;;;iBAiBA,iBAAA;;;;iBAQA,aAAA"}
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/common/utils.ts"],"mappings":";;AAOA;;;;;iBAAgB,YAAA,CAAa,GAAA;;;;iBASb,WAAA,CAAY,GAAA;AAQ5B;;;AAAA,iBAAgB,WAAA,CAAY,GAAA;;AAU5B;;iBAAgB,WAAA,CAAY,GAAA;;;AAU5B;iBAAgB,iBAAA,CAAkB,GAAA;;;;iBAalB,SAAA,CAAU,WAAA,UAAqB,MAAA;;;;iBAQ/B,UAAA,CAAW,QAAA;AAA3B;;;AAAA,iBAOgB,SAAA,CAAU,CAAA,WAAY,CAAA;;AAAtC;;iBA4BgB,SAAA,CAAU,GAAA,WAAc,IAAA;;;AAAxC;;iBAiBgB,iBAAA,CAAkB,IAAA;;;AAAlC;iBAQgB,aAAA,CAAc,IAAA"}
@@ -3,7 +3,6 @@ import { ParsedOperation } from "./types.js";
3
3
  import { AnyOperationSpec } from "@contractspec/lib.contracts";
4
4
 
5
5
  //#region src/openapi/differ.d.ts
6
-
7
6
  /**
8
7
  * Options for diffing specs.
9
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"differ.d.ts","names":[],"sources":["../../src/openapi/differ.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAwIG,UAtHc,WAAA,CAsHd;EAAU;EA2EG,kBAAS,CAAA,EAAA,OAAA;EACd;EACA,UAAA,CAAA,EAAA,OAAA;EACA;EACR,eAAA,CAAA,EAAA,OAAA;EAAU;EA+CG,WAAA,CAAA,EAAA,MAAc,EAAA;;;;;AAKnB,iBAvIK,mBAAA,CAuIL,IAAA,EAtIH,gBAsIG,EAAA,SAAA,EArIE,eAqIF,EAAA,OAAA,CAAA,EApIA,WAoIA,CAAA,EAnIR,UAmIQ,EAAA;AA4CX;;;AAEiB,iBAtGD,SAAA,CAsGC,OAAA,EArGN,gBAqGM,EAAA,OAAA,EApGN,gBAoGM,EAAA,OAAA,CAAA,EAnGN,WAmGM,CAAA,EAlGd,UAkGc,EAAA;;;;AAsDD,iBAzGA,cAAA,CAyG2B,WAAU,EAAA,MAAA,EAAA,QAAA,EAvGzC,gBAuGyC,GAAA,SAAA,EAAA,QAAA,EAtGzC,qBAsGyC,EAAA,OAAA,CAAA,EArG1C,WAqG0C,CAAA,EApGlD,QAoGkD;;;;iBAxDrC,OAAA,gBACC,YAAY,kCACZ,mCACN,cACR;;;;iBAoDa,iBAAA,UAA2B"}
1
+ {"version":3,"file":"differ.d.ts","names":[],"sources":["../../src/openapi/differ.ts"],"mappings":";;;;;;;;UAkBiB,WAAA;EAMf;EAJA,kBAAA;EAMW;EAJX,UAAA;EA8Gc;EA5Gd,eAAA;;EAEA,WAAA;AAAA;;;;iBA0Gc,mBAAA,CACd,IAAA,EAAM,gBAAA,EACN,SAAA,EAAW,eAAA,EACX,OAAA,GAAS,WAAA,GACR,UAAA;;;;iBA2Ea,SAAA,CACd,OAAA,EAAS,gBAAA,EACT,OAAA,EAAS,gBAAA,EACT,OAAA,GAAS,WAAA,GACR,UAAA;;;;iBA+Ca,cAAA,CACd,WAAA,UACA,QAAA,EAAU,gBAAA,cACV,QAAA,EAAU,qBAAA,EACV,OAAA,GAAS,WAAA,GACR,QAAA;;AAxDH;;iBAoGgB,OAAA,CACd,aAAA,EAAe,GAAA,SAAY,gBAAA,GAC3B,aAAA,EAAe,qBAAA,IACf,OAAA,GAAS,WAAA,GACR,QAAA;;;;iBAoDa,iBAAA,CAAkB,OAAA,EAAS,UAAA"}
@@ -2,7 +2,6 @@ import { GeneratedRegistryCode } from "../types.js";
2
2
  import { DataViewRegistry } from "@contractspec/lib.contracts";
3
3
 
4
4
  //#region src/openapi/exporter/data-views.d.ts
5
-
6
5
  /**
7
6
  * Exported data view structure for OpenAPI extensions.
8
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"data-views.d.ts","names":[],"sources":["../../../src/openapi/exporter/data-views.ts"],"sourcesContent":[],"mappings":";;;;;AA0BA;AAkBA;;UAnCiB,gBAAA;;;;;;;;;;;;;;;;;;;;;;iBAiBD,eAAA,WACJ,mBACT;;;;iBAgBa,yBAAA,WACJ,mBACT"}
1
+ {"version":3,"file":"data-views.d.ts","names":[],"sources":["../../../src/openapi/exporter/data-views.ts"],"mappings":";;;;;;;UASiB,gBAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA;EACA,MAAA;EACA,IAAA;EACA,MAAA;IACE,OAAA;MAAW,GAAA;MAAa,OAAA;IAAA;IACxB,IAAA;MAAS,GAAA;MAAa,OAAA;IAAA;EAAA;EAExB,MAAA;AAAA;;;;iBAMc,eAAA,CACd,QAAA,EAAU,gBAAA,GACT,gBAAA;;;AAgBH;iBAAgB,yBAAA,CACd,QAAA,EAAU,gBAAA,GACT,qBAAA"}
@@ -3,7 +3,6 @@ import { EventSpec } from "@contractspec/lib.contracts";
3
3
  import { AnySchemaModel } from "@contractspec/lib.schema";
4
4
 
5
5
  //#region src/openapi/exporter/events.d.ts
6
-
7
6
  type OpenApiSchemaObject = Record<string, unknown>;
8
7
  /**
9
8
  * Exported event structure for OpenAPI extensions.
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","names":[],"sources":["../../../src/openapi/exporter/events.ts"],"sourcesContent":[],"mappings":";;;;;;AAaA,KALK,mBAAA,GAAsB,MAShB,CAAA,MAAA,EAAA,OAAA,CAAA;AAOX;;;AAEG,UAbc,aAAA,CAad;EAAa,IAAA,EAAA,MAAA;EAeA,OAAA,EAAA,MAAA;EACI,WAAA,EAAA,MAAA;EAAV,OAAA,EAzBC,mBAyBD,GAAA,IAAA;EACP,GAAA,CAAA,EAAA,MAAA,EAAA;;;;;iBAnBa,YAAA,SACN,UAAU,oBACjB;;;;iBAea,qBAAA,SACN,UAAU,oBACjB"}
1
+ {"version":3,"file":"events.d.ts","names":[],"sources":["../../../src/openapi/exporter/events.ts"],"mappings":";;;;;KAQK,mBAAA,GAAsB,MAAA;;;;UAKV,aAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,OAAA,EAAS,mBAAA;EACT,GAAA;AAAA;;;;iBAMc,YAAA,CACd,MAAA,EAAQ,SAAA,CAAU,cAAA,MACjB,aAAA;;AAFH;;iBAiBgB,qBAAA,CACd,MAAA,EAAQ,SAAA,CAAU,cAAA,MACjB,qBAAA"}
@@ -2,7 +2,6 @@ import { GeneratedRegistryCode } from "../types.js";
2
2
  import { FeatureRegistry } from "@contractspec/lib.contracts";
3
3
 
4
4
  //#region src/openapi/exporter/features.d.ts
5
-
6
5
  /**
7
6
  * Exported feature structure for OpenAPI extensions.
8
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"features.d.ts","names":[],"sources":["../../../src/openapi/exporter/features.ts"],"sourcesContent":[],"mappings":";;;;;AAsBA;AAeA;;UA5BiB,eAAA;;;;;;;;;;;;;;;;;;;;;iBAaD,cAAA,WAAyB,kBAAkB;;;;iBAe3C,wBAAA,WACJ,kBACT"}
1
+ {"version":3,"file":"features.d.ts","names":[],"sources":["../../../src/openapi/exporter/features.ts"],"mappings":";;;;;;;UASiB,eAAA;EACf,GAAA;EACA,WAAA;EACA,MAAA;EACA,SAAA;EACA,UAAA;IAAe,GAAA;IAAa,OAAA;EAAA;EAC5B,MAAA;IAAW,GAAA;IAAa,OAAA;EAAA;EACxB,aAAA;IAAkB,GAAA;IAAa,OAAA;EAAA;AAAA;;;;iBAMjB,cAAA,CAAe,QAAA,EAAU,eAAA,GAAkB,eAAA;;;AAe3D;iBAAgB,wBAAA,CACd,QAAA,EAAU,eAAA,GACT,qBAAA"}
@@ -2,7 +2,6 @@ import { GeneratedRegistryCode } from "../types.js";
2
2
  import { FormRegistry, Stability } from "@contractspec/lib.contracts";
3
3
 
4
4
  //#region src/openapi/exporter/forms.d.ts
5
-
6
5
  type OpenApiSchemaObject = Record<string, unknown>;
7
6
  /**
8
7
  * Exported form structure for OpenAPI extensions.
@@ -1 +1 @@
1
- {"version":3,"file":"forms.d.ts","names":[],"sources":["../../../src/openapi/exporter/forms.ts"],"sourcesContent":[],"mappings":";;;;;AAaA,KALK,mBAAA,GAAsB,MASd,CAAA,MAAA,EAGJ,OAAA,CAAA;AAOT;AAoBA;;UAlCiB,YAAA;;;;aAIJ;;;SAGJ;;;;;;iBAOO,WAAA,WAAsB,eAAe;;;;iBAoBrC,qBAAA,WACJ,eACT"}
1
+ {"version":3,"file":"forms.d.ts","names":[],"sources":["../../../src/openapi/exporter/forms.ts"],"mappings":";;;;KAQK,mBAAA,GAAsB,MAAA;;;;UAKV,YAAA;EACf,GAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA,EAAW,SAAA;EACX,MAAA;EACA,MAAA;EACA,KAAA,EAAO,mBAAA;EACP,OAAA;AAAA;;;;iBAMc,WAAA,CAAY,QAAA,EAAU,YAAA,GAAe,YAAA;;;AAArD;iBAoBgB,qBAAA,CACd,QAAA,EAAU,YAAA,GACT,qBAAA"}
@@ -3,7 +3,6 @@ import { AnyOperationSpec, OperationSpec, OperationSpecRegistry } from "@contrac
3
3
  import { AnySchemaModel } from "@contractspec/lib.schema";
4
4
 
5
5
  //#region src/openapi/exporter/operations.d.ts
6
-
7
6
  type OpenApiSchemaObject = Record<string, unknown>;
8
7
  /**
9
8
  * Convert a spec name and version to an operationId.
@@ -1 +1 @@
1
- {"version":3,"file":"operations.d.ts","names":[],"sources":["../../../src/openapi/exporter/operations.ts"],"sourcesContent":[],"mappings":";;;;;;AAkBA,KALK,mBAAA,GAAsB,MAKE,CAAA,MAAA,EAAA,OAAA,CAAA;AAO7B;AAWA;AAWA;AAOgB,iBApCA,aAAA,CAoCiB,IAAA,EAAA,MAAgB,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAUjD;AAKC;AAkBD;AACsB,iBA/DN,YAAA,CA+DM,MAAA,EAAA,OAAA,GAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;;AACL,iBArDD,YAAA,CAqDC,IAAA,EAAA,SAAA,GAAA,OAAA,EAAA,QAAA,CAAA,EAAA,KAAA,GAAA,MAAA,CAAA,EAAA,MAAA;AAkBjB;;;AAE0B,iBA9DV,eAAA,CA8DU,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;AAM1B;AAoFgB,iBAjJA,UAAA,CAiJ0B,IAAA,EAjJT,gBAkJrB,CAAA,EAAA,MAAA;;;;iBAxII,uBAAA,SACN,wBACP;UAKO,cAAA;SACD;UACC;;;;;;;;;;;;;iBAcM,iBAAA,OACR,cAAc,gBAAgB,kBACnC;;;;UAkBc,sBAAA;SACR,eAAe;WACb,eAAe;;;;;iBAMV,gBAAA,WACJ,wBACT;;;;iBAkFa,0BAAA,WACJ,wBACT"}
1
+ {"version":3,"file":"operations.d.ts","names":[],"sources":["../../../src/openapi/exporter/operations.ts"],"mappings":";;;;;KAaK,mBAAA,GAAsB,MAAA;;;;iBAKX,aAAA,CAAc,IAAA,UAAc,OAAA;;;;iBAO5B,YAAA,CACd,MAAA,sBACA,IAAA,UACA,OAAA;AAHF;;;AAAA,iBAWgB,YAAA,CACd,IAAA,uBACA,QAAA;;;;iBASc,eAAA,CAAgB,IAAA,UAAc,OAAA;;AAX9C;;iBAkBgB,UAAA,CAAW,IAAA,EAAM,gBAAA;;;AAPjC;iBAiBgB,uBAAA,CACd,MAAA,EAAQ,cAAA,UACP,mBAAA;AAAA,UAKO,cAAA;EACR,KAAA,EAAO,mBAAA;EACP,MAAA,EAAQ,mBAAA;EACR,IAAA;IACE,GAAA;IACA,OAAA;IACA,IAAA;IACA,WAAA;IACA,IAAA;IACA,SAAA;EAAA;AAAA;;;;iBAOY,iBAAA,CACd,IAAA,EAAM,aAAA,CAAc,cAAA,EAAgB,cAAA,IACnC,cAAA;;AApBF;;UAsCgB,sBAAA;EACf,KAAA,EAAO,MAAA,SAAe,MAAA;EACtB,OAAA,EAAS,MAAA,SAAe,mBAAA;AAAA;;;;iBAMV,gBAAA,CACd,QAAA,EAAU,qBAAA,GACT,sBAAA;;;;iBAkFa,0BAAA,CACd,QAAA,EAAU,qBAAA,GACT,qBAAA"}
@@ -2,7 +2,6 @@ import { GeneratedRegistryCode } from "../types.js";
2
2
  import { PresentationRegistry, PresentationSpec, Stability } from "@contractspec/lib.contracts";
3
3
 
4
4
  //#region src/openapi/exporter/presentations.d.ts
5
-
6
5
  /**
7
6
  * Exported presentation structure for OpenAPI extensions.
8
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"presentations.d.ts","names":[],"sources":["../../../src/openapi/exporter/presentations.ts"],"sourcesContent":[],"mappings":";;;;;AA0BA;AAiBA;AAiBA;UA/CiB,oBAAA;;;;aAIJ;;;;;;;;iBASG,mBAAA,WACJ,uBACT;;;;iBAea,4BAAA,cACD,qBACZ;;;;iBAea,6BAAA,WACJ,uBACT"}
1
+ {"version":3,"file":"presentations.d.ts","names":[],"sources":["../../../src/openapi/exporter/presentations.ts"],"mappings":";;;;;;;UAaiB,oBAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA,EAAW,SAAA;EACX,UAAA;EACA,OAAA;EACA,IAAA;AAAA;;AAMF;;iBAAgB,mBAAA,CACd,QAAA,EAAU,oBAAA,GACT,oBAAA;;;;iBAea,4BAAA,CACd,WAAA,EAAa,gBAAA,KACZ,oBAAA;;;AAFH;iBAiBgB,6BAAA,CACd,QAAA,EAAU,oBAAA,GACT,qBAAA"}
@@ -1,7 +1,6 @@
1
1
  import { GeneratedRegistryCode } from "../types.js";
2
2
 
3
3
  //#region src/openapi/exporter/registries.d.ts
4
-
5
4
  /**
6
5
  * Registry generation options.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"registries.d.ts","names":[],"sources":["../../../src/openapi/exporter/registries.ts"],"sourcesContent":[],"mappings":";;;;AAqBA;;;UAbiB,yBAAA;;;;;;;;;;;;iBAaD,qBAAA,WACL,4BACR"}
1
+ {"version":3,"file":"registries.d.ts","names":[],"sources":["../../../src/openapi/exporter/registries.ts"],"mappings":";;;;;;UAQiB,yBAAA;EACf,UAAA;EACA,MAAA;EACA,QAAA;EACA,aAAA;EACA,KAAA;EACA,SAAA;EACA,SAAA;AAAA;AAMF;;;AAAA,iBAAgB,qBAAA,CACd,OAAA,GAAS,yBAAA,GACR,qBAAA"}
@@ -2,7 +2,6 @@ import { GeneratedRegistryCode } from "../types.js";
2
2
  import { WorkflowRegistry } from "@contractspec/lib.contracts";
3
3
 
4
4
  //#region src/openapi/exporter/workflows.d.ts
5
-
6
5
  /**
7
6
  * Exported workflow structure for OpenAPI extensions.
8
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.d.ts","names":[],"sources":["../../../src/openapi/exporter/workflows.ts"],"sourcesContent":[],"mappings":";;;;;AA8BA;AAyBA;;UA9CiB,gBAAA;;;;;;;;;;;;;;;;;;;;iBAqBD,eAAA,WACJ,mBACT;;;;iBAuBa,yBAAA,WACJ,mBACT"}
1
+ {"version":3,"file":"workflows.d.ts","names":[],"sources":["../../../src/openapi/exporter/workflows.ts"],"mappings":";;;;;;;UASiB,gBAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA;EACA,MAAA;EACA,KAAA;IACE,EAAA;IACA,IAAA;IACA,KAAA;EAAA;EAEF,WAAA;IACE,IAAA;IACA,EAAA;IACA,KAAA;EAAA;AAAA;;;;iBAOY,eAAA,CACd,QAAA,EAAU,gBAAA,GACT,gBAAA;;;;iBAuBa,yBAAA,CACd,QAAA,EAAU,gBAAA,GACT,qBAAA"}
@@ -4,7 +4,6 @@ import { DataViewRegistry, EventSpec, FeatureRegistry, FormRegistry, OperationSp
4
4
  import { AnySchemaModel } from "@contractspec/lib.schema";
5
5
 
6
6
  //#region src/openapi/exporter.d.ts
7
-
8
7
  /**
9
8
  * Input registries for unified export.
10
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.d.ts","names":[],"sources":["../../src/openapi/exporter.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAkDkB,UAJD,sBAAA,CAIC;EACK,UAAA,CAAA,EAJR,qBAIQ;EACb,MAAA,CAAA,EAJC,SAID,CAJW,cAIX,CAAA,EAAA;EACI,QAAA,CAAA,EAJD,eAIC;EACA,aAAA,CAAA,EAJI,oBAIJ;EAAgB,kBAAA,CAAA,EAHP,gBAGO,EAAA;EAUd,KAAA,CAAA,EAZN,YAYM;EACJ,SAAA,CAAA,EAZE,gBAYF;EACD,SAAA,CAAA,EAZG,gBAYH;;AAoBX;;;;AAG2B,iBAzBX,kBAAA,CAyBW,QAAA,EAxBf,qBAwBe,EAAA,OAAA,CAAA,EAvBhB,oBAuBgB,CAAA,EAtBxB,2BAsBwB;AA8H3B;AAWA;AAWA;AAWgB,iBAlKA,kBAAA,CAmKF,UAAA,EAlKA,sBAmKH,EAAA,OAA8B,CAAA,EAlK9B,yBAkK8B,CAAA,EAjKtC,wBAiKsC;;;;iBAnCzB,aAAA,WACJ,iCACD;;;;iBASK,aAAA,WACJ,iCACD;;;;iBASK,kBAAA,aACF,kCACH;;;;iBASK,kBAAA,aACF,kCACH"}
1
+ {"version":3,"file":"exporter.d.ts","names":[],"sources":["../../src/openapi/exporter.ts"],"mappings":";;;;;;;;;UA8CiB,sBAAA;EACf,UAAA,GAAa,qBAAA;EACb,MAAA,GAAS,SAAA,CAAU,cAAA;EACnB,QAAA,GAAW,eAAA;EACX,aAAA,GAAgB,oBAAA;EAChB,kBAAA,GAAqB,gBAAA;EACrB,KAAA,GAAQ,YAAA;EACR,SAAA,GAAY,gBAAA;EACZ,SAAA,GAAY,gBAAA;AAAA;;;;;iBAUE,kBAAA,CACd,QAAA,EAAU,qBAAA,EACV,OAAA,GAAS,oBAAA,GACR,2BAAA;;;;iBAmBa,kBAAA,CACd,UAAA,EAAY,sBAAA,EACZ,OAAA,GAAS,yBAAA,GACR,wBAAA;;;;iBA8Ha,aAAA,CACd,QAAA,EAAU,qBAAA,EACV,OAAA,GAAS,oBAAA;;;;iBASK,aAAA,CACd,QAAA,EAAU,qBAAA,EACV,OAAA,GAAS,oBAAA;AApKX;;;AAAA,iBA6KgB,kBAAA,CACd,UAAA,EAAY,sBAAA,EACZ,OAAA,GAAS,yBAAA;;;;iBASK,kBAAA,CACd,UAAA,EAAY,sBAAA,EACZ,OAAA,GAAS,yBAAA"}
@@ -45,7 +45,6 @@ function applyGroupingStrategy(rule, context) {
45
45
  case "by-url-path-single": return extractUrlPathLevel(context.path, 1);
46
46
  case "by-url-path-multi": return extractUrlPathLevel(context.path, rule.urlPathLevel ?? 2);
47
47
  case "by-feature": return extractDomain(context.name);
48
- case "none":
49
48
  default: return "";
50
49
  }
51
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"grouping.js","names":[],"sources":["../../../src/openapi/importer/grouping.ts"],"sourcesContent":["/**\n * Grouping utilities for OpenAPI import/export.\n * Determines output folder structure based on configuration.\n */\nimport type { FolderConventions } from '@contractspec/lib.contracts';\nimport type { ParsedOperation } from '../types';\n\n/**\n * Grouping strategy type (matches ContractSpec config).\n */\ntype GroupingStrategy =\n | 'by-tag'\n | 'by-owner'\n | 'by-domain'\n | 'by-url-path-single'\n | 'by-url-path-multi'\n | 'by-feature'\n | 'none';\n\n/**\n * Grouping rule configuration.\n */\ninterface GroupingRule {\n strategy: GroupingStrategy;\n urlPathLevel?: number;\n pattern?: string;\n}\n\n/**\n * Resolve the group folder for an operation based on grouping config.\n */\nexport function resolveOperationGroupFolder(\n operation: ParsedOperation,\n conventions: FolderConventions\n): string {\n const groupingRule = conventions.operationsGrouping as\n | GroupingRule\n | undefined;\n\n if (!groupingRule || groupingRule.strategy === 'none') {\n return '';\n }\n\n return applyGroupingStrategy(groupingRule, {\n name: operation.operationId,\n tags: operation.tags,\n path: operation.path,\n });\n}\n\n/**\n * Resolve the group folder for a model based on grouping config.\n */\nexport function resolveModelGroupFolder(\n modelName: string,\n conventions: FolderConventions,\n relatedPath?: string,\n relatedTags?: string[]\n): string {\n const groupingRule = conventions.modelsGrouping as GroupingRule | undefined;\n\n if (!groupingRule || groupingRule.strategy === 'none') {\n return '';\n }\n\n return applyGroupingStrategy(groupingRule, {\n name: modelName,\n tags: relatedTags ?? [],\n path: relatedPath,\n });\n}\n\n/**\n * Resolve the group folder for an event based on grouping config.\n */\nexport function resolveEventGroupFolder(\n eventName: string,\n conventions: FolderConventions,\n relatedTags?: string[]\n): string {\n const groupingRule = conventions.eventsGrouping as GroupingRule | undefined;\n\n if (!groupingRule || groupingRule.strategy === 'none') {\n return '';\n }\n\n return applyGroupingStrategy(groupingRule, {\n name: eventName,\n tags: relatedTags ?? [],\n });\n}\n\n/**\n * Apply grouping strategy to extract folder name.\n */\nfunction applyGroupingStrategy(\n rule: GroupingRule,\n context: {\n name: string;\n tags?: string[];\n path?: string;\n owners?: string[];\n }\n): string {\n switch (rule.strategy) {\n case 'by-tag':\n return context.tags?.[0] ?? 'untagged';\n\n case 'by-owner':\n return context.owners?.[0] ?? 'unowned';\n\n case 'by-domain':\n return extractDomain(context.name);\n\n case 'by-url-path-single':\n return extractUrlPathLevel(context.path, 1);\n\n case 'by-url-path-multi':\n return extractUrlPathLevel(context.path, rule.urlPathLevel ?? 2);\n\n case 'by-feature':\n // Use domain extraction for feature grouping\n return extractDomain(context.name);\n\n case 'none':\n default:\n return '';\n }\n}\n\n/**\n * Extract domain from operation/model name.\n * e.g., \"users.create\" -> \"users\"\n */\nfunction extractDomain(name: string): string {\n // Handle camelCase/PascalCase names\n if (name.includes('.')) {\n return name.split('.')[0] ?? 'default';\n }\n if (name.includes('_')) {\n return name.split('_')[0] ?? 'default';\n }\n // Extract from camelCase like \"createUser\" -> \"create\"\n const match = name.match(/^([a-z]+)/i);\n return match?.[1]?.toLowerCase() ?? 'default';\n}\n\n/**\n * Extract URL path segments for grouping.\n */\nfunction extractUrlPathLevel(path: string | undefined, level: number): string {\n if (!path) return 'root';\n const segments = path.split('/').filter(Boolean);\n\n // Filter out path parameters like {id}\n const nonParamSegments = segments.filter((s) => !s.startsWith('{'));\n\n if (nonParamSegments.length === 0) return 'root';\n\n return nonParamSegments.slice(0, level).join('/');\n}\n\n/**\n * Build full output path including group folder.\n */\nexport function buildOutputPath(\n baseDir: string,\n surfaceDir: string,\n groupFolder: string,\n fileName: string\n): string {\n const parts = [baseDir, surfaceDir];\n\n if (groupFolder) {\n parts.push(groupFolder);\n }\n\n parts.push(fileName);\n\n return parts.filter(Boolean).join('/');\n}\n\n/**\n * Determine if feature-based grouping should be applied.\n */\nexport function shouldGroupByFeature(conventions: FolderConventions): boolean {\n return conventions.groupByFeature ?? false;\n}\n"],"mappings":";;;;AA+BA,SAAgB,4BACd,WACA,aACQ;CACR,MAAM,eAAe,YAAY;AAIjC,KAAI,CAAC,gBAAgB,aAAa,aAAa,OAC7C,QAAO;AAGT,QAAO,sBAAsB,cAAc;EACzC,MAAM,UAAU;EAChB,MAAM,UAAU;EAChB,MAAM,UAAU;EACjB,CAAC;;;;;AAMJ,SAAgB,wBACd,WACA,aACA,aACA,aACQ;CACR,MAAM,eAAe,YAAY;AAEjC,KAAI,CAAC,gBAAgB,aAAa,aAAa,OAC7C,QAAO;AAGT,QAAO,sBAAsB,cAAc;EACzC,MAAM;EACN,MAAM,eAAe,EAAE;EACvB,MAAM;EACP,CAAC;;;;;AAMJ,SAAgB,wBACd,WACA,aACA,aACQ;CACR,MAAM,eAAe,YAAY;AAEjC,KAAI,CAAC,gBAAgB,aAAa,aAAa,OAC7C,QAAO;AAGT,QAAO,sBAAsB,cAAc;EACzC,MAAM;EACN,MAAM,eAAe,EAAE;EACxB,CAAC;;;;;AAMJ,SAAS,sBACP,MACA,SAMQ;AACR,SAAQ,KAAK,UAAb;EACE,KAAK,SACH,QAAO,QAAQ,OAAO,MAAM;EAE9B,KAAK,WACH,QAAO,QAAQ,SAAS,MAAM;EAEhC,KAAK,YACH,QAAO,cAAc,QAAQ,KAAK;EAEpC,KAAK,qBACH,QAAO,oBAAoB,QAAQ,MAAM,EAAE;EAE7C,KAAK,oBACH,QAAO,oBAAoB,QAAQ,MAAM,KAAK,gBAAgB,EAAE;EAElE,KAAK,aAEH,QAAO,cAAc,QAAQ,KAAK;EAEpC,KAAK;EACL,QACE,QAAO;;;;;;;AAQb,SAAS,cAAc,MAAsB;AAE3C,KAAI,KAAK,SAAS,IAAI,CACpB,QAAO,KAAK,MAAM,IAAI,CAAC,MAAM;AAE/B,KAAI,KAAK,SAAS,IAAI,CACpB,QAAO,KAAK,MAAM,IAAI,CAAC,MAAM;AAI/B,QADc,KAAK,MAAM,aAAa,GACvB,IAAI,aAAa,IAAI;;;;;AAMtC,SAAS,oBAAoB,MAA0B,OAAuB;AAC5E,KAAI,CAAC,KAAM,QAAO;CAIlB,MAAM,mBAHW,KAAK,MAAM,IAAI,CAAC,OAAO,QAAQ,CAGd,QAAQ,MAAM,CAAC,EAAE,WAAW,IAAI,CAAC;AAEnE,KAAI,iBAAiB,WAAW,EAAG,QAAO;AAE1C,QAAO,iBAAiB,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI"}
1
+ {"version":3,"file":"grouping.js","names":[],"sources":["../../../src/openapi/importer/grouping.ts"],"sourcesContent":["/**\n * Grouping utilities for OpenAPI import/export.\n * Determines output folder structure based on configuration.\n */\nimport type { FolderConventions } from '@contractspec/lib.contracts';\nimport type { ParsedOperation } from '../types';\n\n/**\n * Grouping strategy type (matches ContractSpec config).\n */\ntype GroupingStrategy =\n | 'by-tag'\n | 'by-owner'\n | 'by-domain'\n | 'by-url-path-single'\n | 'by-url-path-multi'\n | 'by-feature'\n | 'none';\n\n/**\n * Grouping rule configuration.\n */\ninterface GroupingRule {\n strategy: GroupingStrategy;\n urlPathLevel?: number;\n pattern?: string;\n}\n\n/**\n * Resolve the group folder for an operation based on grouping config.\n */\nexport function resolveOperationGroupFolder(\n operation: ParsedOperation,\n conventions: FolderConventions\n): string {\n const groupingRule = conventions.operationsGrouping as\n | GroupingRule\n | undefined;\n\n if (!groupingRule || groupingRule.strategy === 'none') {\n return '';\n }\n\n return applyGroupingStrategy(groupingRule, {\n name: operation.operationId,\n tags: operation.tags,\n path: operation.path,\n });\n}\n\n/**\n * Resolve the group folder for a model based on grouping config.\n */\nexport function resolveModelGroupFolder(\n modelName: string,\n conventions: FolderConventions,\n relatedPath?: string,\n relatedTags?: string[]\n): string {\n const groupingRule = conventions.modelsGrouping as GroupingRule | undefined;\n\n if (!groupingRule || groupingRule.strategy === 'none') {\n return '';\n }\n\n return applyGroupingStrategy(groupingRule, {\n name: modelName,\n tags: relatedTags ?? [],\n path: relatedPath,\n });\n}\n\n/**\n * Resolve the group folder for an event based on grouping config.\n */\nexport function resolveEventGroupFolder(\n eventName: string,\n conventions: FolderConventions,\n relatedTags?: string[]\n): string {\n const groupingRule = conventions.eventsGrouping as GroupingRule | undefined;\n\n if (!groupingRule || groupingRule.strategy === 'none') {\n return '';\n }\n\n return applyGroupingStrategy(groupingRule, {\n name: eventName,\n tags: relatedTags ?? [],\n });\n}\n\n/**\n * Apply grouping strategy to extract folder name.\n */\nfunction applyGroupingStrategy(\n rule: GroupingRule,\n context: {\n name: string;\n tags?: string[];\n path?: string;\n owners?: string[];\n }\n): string {\n switch (rule.strategy) {\n case 'by-tag':\n return context.tags?.[0] ?? 'untagged';\n\n case 'by-owner':\n return context.owners?.[0] ?? 'unowned';\n\n case 'by-domain':\n return extractDomain(context.name);\n\n case 'by-url-path-single':\n return extractUrlPathLevel(context.path, 1);\n\n case 'by-url-path-multi':\n return extractUrlPathLevel(context.path, rule.urlPathLevel ?? 2);\n\n case 'by-feature':\n // Use domain extraction for feature grouping\n return extractDomain(context.name);\n\n case 'none':\n default:\n return '';\n }\n}\n\n/**\n * Extract domain from operation/model name.\n * e.g., \"users.create\" -> \"users\"\n */\nfunction extractDomain(name: string): string {\n // Handle camelCase/PascalCase names\n if (name.includes('.')) {\n return name.split('.')[0] ?? 'default';\n }\n if (name.includes('_')) {\n return name.split('_')[0] ?? 'default';\n }\n // Extract from camelCase like \"createUser\" -> \"create\"\n const match = name.match(/^([a-z]+)/i);\n return match?.[1]?.toLowerCase() ?? 'default';\n}\n\n/**\n * Extract URL path segments for grouping.\n */\nfunction extractUrlPathLevel(path: string | undefined, level: number): string {\n if (!path) return 'root';\n const segments = path.split('/').filter(Boolean);\n\n // Filter out path parameters like {id}\n const nonParamSegments = segments.filter((s) => !s.startsWith('{'));\n\n if (nonParamSegments.length === 0) return 'root';\n\n return nonParamSegments.slice(0, level).join('/');\n}\n\n/**\n * Build full output path including group folder.\n */\nexport function buildOutputPath(\n baseDir: string,\n surfaceDir: string,\n groupFolder: string,\n fileName: string\n): string {\n const parts = [baseDir, surfaceDir];\n\n if (groupFolder) {\n parts.push(groupFolder);\n }\n\n parts.push(fileName);\n\n return parts.filter(Boolean).join('/');\n}\n\n/**\n * Determine if feature-based grouping should be applied.\n */\nexport function shouldGroupByFeature(conventions: FolderConventions): boolean {\n return conventions.groupByFeature ?? false;\n}\n"],"mappings":";;;;AA+BA,SAAgB,4BACd,WACA,aACQ;CACR,MAAM,eAAe,YAAY;AAIjC,KAAI,CAAC,gBAAgB,aAAa,aAAa,OAC7C,QAAO;AAGT,QAAO,sBAAsB,cAAc;EACzC,MAAM,UAAU;EAChB,MAAM,UAAU;EAChB,MAAM,UAAU;EACjB,CAAC;;;;;AAMJ,SAAgB,wBACd,WACA,aACA,aACA,aACQ;CACR,MAAM,eAAe,YAAY;AAEjC,KAAI,CAAC,gBAAgB,aAAa,aAAa,OAC7C,QAAO;AAGT,QAAO,sBAAsB,cAAc;EACzC,MAAM;EACN,MAAM,eAAe,EAAE;EACvB,MAAM;EACP,CAAC;;;;;AAMJ,SAAgB,wBACd,WACA,aACA,aACQ;CACR,MAAM,eAAe,YAAY;AAEjC,KAAI,CAAC,gBAAgB,aAAa,aAAa,OAC7C,QAAO;AAGT,QAAO,sBAAsB,cAAc;EACzC,MAAM;EACN,MAAM,eAAe,EAAE;EACxB,CAAC;;;;;AAMJ,SAAS,sBACP,MACA,SAMQ;AACR,SAAQ,KAAK,UAAb;EACE,KAAK,SACH,QAAO,QAAQ,OAAO,MAAM;EAE9B,KAAK,WACH,QAAO,QAAQ,SAAS,MAAM;EAEhC,KAAK,YACH,QAAO,cAAc,QAAQ,KAAK;EAEpC,KAAK,qBACH,QAAO,oBAAoB,QAAQ,MAAM,EAAE;EAE7C,KAAK,oBACH,QAAO,oBAAoB,QAAQ,MAAM,KAAK,gBAAgB,EAAE;EAElE,KAAK,aAEH,QAAO,cAAc,QAAQ,KAAK;EAGpC,QACE,QAAO;;;;;;;AAQb,SAAS,cAAc,MAAsB;AAE3C,KAAI,KAAK,SAAS,IAAI,CACpB,QAAO,KAAK,MAAM,IAAI,CAAC,MAAM;AAE/B,KAAI,KAAK,SAAS,IAAI,CACpB,QAAO,KAAK,MAAM,IAAI,CAAC,MAAM;AAI/B,QADc,KAAK,MAAM,aAAa,GACvB,IAAI,aAAa,IAAI;;;;;AAMtC,SAAS,oBAAoB,MAA0B,OAAuB;AAC5E,KAAI,CAAC,KAAM,QAAO;CAIlB,MAAM,mBAHW,KAAK,MAAM,IAAI,CAAC,OAAO,QAAQ,CAGd,QAAQ,MAAM,CAAC,EAAE,WAAW,IAAI,CAAC;AAEnE,KAAI,iBAAiB,WAAW,EAAG,QAAO;AAE1C,QAAO,iBAAiB,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI"}
@@ -3,7 +3,6 @@ import { ParseResult, ParsedOperation } from "../types.js";
3
3
  import { OpenApiSourceConfig, ResolvedContractsrcConfig } from "@contractspec/lib.contracts";
4
4
 
5
5
  //#region src/openapi/importer/index.d.ts
6
-
7
6
  /**
8
7
  * Import operations from a parsed OpenAPI document.
9
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/openapi/importer/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAgTgB,cA/QH,iBA+QkB,EAAA,CAAA,WAAA,EA9QhB,WA8QgB,EAAA,mBAAA,EA7QR,yBA6QQ,EAAA,aAAA,CAAA,EA5Qd,OA4Qc,CA5QN,mBA4QM,CAAA,EAAA,GA3Q5B,YA2Q4B;;;;AAGR,iBAHP,eAAA,CAGO,SAAA,EAFV,eAEU,EAAA,OAAA,EADZ,OACY,CADJ,mBACI,CAAA,GAAA,SAAA,EAAA,mBAAA,EAAA,yBAAA,CAAA,EAAA,MAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/openapi/importer/index.ts"],"mappings":";;;;;;;;cAiCa,iBAAA,GACX,WAAA,EAAa,WAAA,EACb,mBAAA,EAAqB,yBAAA,EACrB,aAAA,GAAe,OAAA,CAAQ,mBAAA,MACtB,YAAA;;;;iBA2Qa,eAAA,CACd,SAAA,EAAW,eAAA,EACX,OAAA,EAAS,OAAA,CAAQ,mBAAA,eACjB,mBAAA,EAAqB,yBAAA"}
@@ -1,7 +1,6 @@
1
1
  import { OpenApiDocument, OpenApiParseOptions, ParseResult } from "../types.js";
2
2
 
3
3
  //#region src/openapi/parser/document.d.ts
4
-
5
4
  /**
6
5
  * Parse an OpenAPI document into a structured result.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","names":[],"sources":["../../../src/openapi/parser/document.ts"],"sourcesContent":[],"mappings":";;;;;;AAsBA;AACO,iBADS,oBAAA,CACT,GAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EACK,mBADL,CAAA,EAEJ,WAFI;;;;AA0GP;;AAGmB,iBAHG,YAAA,CAGQ,MAAA,EAAA,MAAA,EAAA,OAG3B,CAH2B,EADnB,mBACmB,GAAA;EACG,KAAA,CAAA,EAAA,OADd,UAAA,CAAW,KACG;EAEtB,QAAA,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAFsB,OAEtB,CAAA,MAAA,CAAA;CAAR,CAAA,EAAA,OAAA,CAAQ,WAAR,CAAA"}
1
+ {"version":3,"file":"document.d.ts","names":[],"sources":["../../../src/openapi/parser/document.ts"],"mappings":";;;;;AAsBA;iBAAgB,oBAAA,CACd,GAAA,EAAK,eAAA,EACL,QAAA,GAAU,mBAAA,GACT,WAAA;;;;;;iBAwGmB,YAAA,CACpB,MAAA,UACA,OAAA,GAAS,mBAAA;EACP,KAAA,UAAe,UAAA,CAAW,KAAA;EAC1B,QAAA,IAAY,IAAA,aAAiB,OAAA;AAAA,IAE9B,OAAA,CAAQ,WAAA"}
@@ -1,7 +1,6 @@
1
1
  import { OpenApiDocument, OpenApiVersion } from "../types.js";
2
2
 
3
3
  //#region src/openapi/parser/utils.d.ts
4
-
5
4
  /**
6
5
  * Parse an OpenAPI document from a string (JSON or YAML).
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/openapi/parser/utils.ts"],"sourcesContent":[],"mappings":";;;;;AAiBA;AAaA;AAWgB,iBAxBA,kBAAA,CAwBmB,OAAkB,EAAA,MAAA,EAAA,MAAc,CAAA,EAAA,MAAA,GAAA,MAAA,CAAA,EArBhE,eAqBgE;;;;iBAXnD,YAAA;;;;iBAWA,aAAA,MAAmB,kBAAkB"}
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/openapi/parser/utils.ts"],"mappings":";;;;AAiBA;;iBAAgB,kBAAA,CACd,OAAA,UACA,MAAA,qBACC,eAAA;;;;iBAUa,YAAA,CAAa,OAAA;;;AAA7B;iBAWgB,aAAA,CAAc,GAAA,EAAK,eAAA,GAAkB,cAAA"}
@@ -2,7 +2,6 @@ import { OpenApiSchema } from "./types.js";
2
2
  import { ResolvedContractsrcConfig, SchemaFormat } from "@contractspec/lib.contracts";
3
3
 
4
4
  //#region src/openapi/schema-converter.d.ts
5
-
6
5
  /**
7
6
  * TypeScript type representation for code generation.
8
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"schema-converter.d.ts","names":[],"sources":["../../src/openapi/schema-converter.ts"],"sourcesContent":[],"mappings":";;;;;AAkEA;AA+BA;AAiHA;AA2BgB,UA7MC,cAAA,CA6MsB;EAC7B;EAEM,IAAA,EAAA,MAAA;EACL;EACR,QAAA,EAAA,OAAA;EAAc;EAkBD,KAAA,EAAA,OAAA;;;;;;;;;;;UAlNC,WAAA;;;;QAIT;;;;;;gBAMQ;;;;;UAMC,cAAA;;;;;;UAMP;;;;;;;;;iBAyBM,gBAAA,SACN,+BAEP;;;;iBA8Ga,aAAA,SAAsB;;;;iBA2BtB,uBAAA,SACN,iDAEM,uBACL,4BACR;;;;iBAkBa,eAAA,SACN,wBACC"}
1
+ {"version":3,"file":"schema-converter.d.ts","names":[],"sources":["../../src/openapi/schema-converter.ts"],"mappings":";;;;;;;UAgCiB,cAAA;EAMf;EAJA,IAAA;EAQA;EANA,QAAA;EAQW;EANX,KAAA;EAYe;EAVf,SAAA;;EAEA,WAAA;EAUA;EARA,WAAA;AAAA;;;;UAMe,WAAA;EAUa;EAR5B,IAAA;EAce;EAZf,IAAA,EAAM,cAAA;;EAEN,UAAA;EAYA;EAVA,UAAA;EAcA;EAZA,WAAA,GAAc,cAAA;AAAA;;;;UAMC,cAAA;EA+Be;EA7B9B,IAAA;EAgCe;EA9Bf,WAAA;EA4BA;EA1BA,MAAA,EAAQ,WAAA;EA4BP;EA1BD,IAAA;EA0Be;EAxBf,OAAA;AAAA;;;;iBAqBc,gBAAA,CACd,MAAA,EAAQ,aAAA,EACR,IAAA,YACC,cAAA;;;;iBA8Ga,aAAA,CAAc,MAAA,EAAQ,aAAA;;;;iBA2BtB,uBAAA,CACd,MAAA,EAAQ,aAAA,EACR,SAAA,UACA,YAAA,GAAc,YAAA,EACd,MAAA,GAAS,yBAAA,GACR,cAAA;;;;iBAkBa,eAAA,CACd,MAAA,EAAQ,WAAA,IACR,OAAA,EAAS,yBAAA,EACT,aAAA"}
@@ -38,7 +38,6 @@ function createSchemaGenerator(format, config) {
38
38
  case "zod": return new ZodSchemaGenerator(config);
39
39
  case "json-schema": return new JsonSchemaGenerator(config);
40
40
  case "graphql": return new GraphQLSchemaGenerator(config);
41
- case "contractspec":
42
41
  default: return new ContractSpecSchemaGenerator(config);
43
42
  }
44
43
  }
@@ -84,37 +83,37 @@ var ContractSpecSchemaGenerator = class {
84
83
  const required = schemaObj["required"] ?? [];
85
84
  const enumValues = schemaObj["enum"];
86
85
  if (enumValues && enumValues.length > 0) {
87
- const safeModelName$1 = toPascalCase(toValidIdentifier(modelName));
86
+ const safeModelName = toPascalCase(toValidIdentifier(modelName));
88
87
  return {
89
- name: safeModelName$1,
88
+ name: safeModelName,
90
89
  description,
91
90
  fields: [],
92
91
  code: [
93
92
  `${spaces}/**`,
94
- `${spaces} * Enum type: ${safeModelName$1}`,
93
+ `${spaces} * Enum type: ${safeModelName}`,
95
94
  description ? `${spaces} * ${description}` : null,
96
95
  `${spaces} */`,
97
- `${spaces}export const ${safeModelName$1} = new EnumType('${safeModelName$1}', [${enumValues.map((v) => `'${String(v)}'`).join(", ")}]);`
96
+ `${spaces}export const ${safeModelName} = new EnumType('${safeModelName}', [${enumValues.map((v) => `'${String(v)}'`).join(", ")}]);`
98
97
  ].filter((line) => line !== null).join("\n")
99
98
  };
100
99
  }
101
100
  const schemaType = schemaObj["type"];
102
101
  if (schemaType && !properties && !enumValues) {
103
- const safeModelName$1 = toPascalCase(toValidIdentifier(modelName));
102
+ const safeModelName = toPascalCase(toValidIdentifier(modelName));
104
103
  const format = schemaObj["format"];
105
104
  const scalarType = JSON_SCHEMA_TO_SCALAR[format ? `${schemaType}:${format}` : schemaType] ?? JSON_SCHEMA_TO_SCALAR[schemaType];
106
105
  if (scalarType) return {
107
- name: safeModelName$1,
106
+ name: safeModelName,
108
107
  description,
109
108
  fields: [],
110
109
  code: [
111
110
  `${spaces}/**`,
112
- `${spaces} * Type alias: ${safeModelName$1}`,
111
+ `${spaces} * Type alias: ${safeModelName}`,
113
112
  description ? `${spaces} * ${description}` : null,
114
113
  `${spaces} * Underlying type: ${scalarType}`,
115
114
  `${spaces} */`,
116
- `${spaces}export const ${safeModelName$1} = defineSchemaModel({`,
117
- `${spaces} name: '${safeModelName$1}',`,
115
+ `${spaces}export const ${safeModelName} = defineSchemaModel({`,
116
+ `${spaces} name: '${safeModelName}',`,
118
117
  description ? `${spaces} description: ${JSON.stringify(description)},` : null,
119
118
  `${spaces} fields: {`,
120
119
  `${spaces} value: {`,
@@ -127,30 +126,30 @@ var ContractSpecSchemaGenerator = class {
127
126
  };
128
127
  }
129
128
  if (schemaObj["additionalProperties"] && !properties) {
130
- const safeModelName$1 = toPascalCase(toValidIdentifier(modelName));
129
+ const safeModelName = toPascalCase(toValidIdentifier(modelName));
131
130
  return {
132
- name: safeModelName$1,
131
+ name: safeModelName,
133
132
  description,
134
133
  fields: [],
135
134
  code: [
136
135
  `${spaces}/**`,
137
- `${spaces} * Dictionary/Record type: ${safeModelName$1}`,
136
+ `${spaces} * Dictionary/Record type: ${safeModelName}`,
138
137
  description ? `${spaces} * ${description}` : null,
139
138
  `${spaces} * Use as: Record<string, unknown> - access via record[key]`,
140
139
  `${spaces} */`,
141
- `${spaces}export const ${safeModelName$1} = ScalarTypeEnum.JSONObject();`
140
+ `${spaces}export const ${safeModelName} = ScalarTypeEnum.JSONObject();`
142
141
  ].filter((line) => line !== null).join("\n")
143
142
  };
144
143
  }
145
144
  if (!properties) {
146
- const safeModelName$1 = toPascalCase(toValidIdentifier(modelName));
145
+ const safeModelName = toPascalCase(toValidIdentifier(modelName));
147
146
  return {
148
- name: safeModelName$1,
147
+ name: safeModelName,
149
148
  description,
150
149
  fields: [],
151
150
  code: [
152
- `${spaces}export const ${safeModelName$1} = defineSchemaModel({`,
153
- `${spaces} name: '${safeModelName$1}',`,
151
+ `${spaces}export const ${safeModelName} = defineSchemaModel({`,
152
+ `${spaces} name: '${safeModelName}',`,
154
153
  description ? `${spaces} description: ${JSON.stringify(description)},` : null,
155
154
  `${spaces} fields: {},`,
156
155
  `${spaces}});`
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["safeModelName"],"sources":["../../../src/openapi/schema-generators/index.ts"],"sourcesContent":["/**\n * Schema generator factory for multi-format code generation.\n *\n * Provides format-specific generators for OpenAPI to ContractSpec conversion.\n *\n * @module schema-generators\n */\n\nimport type {\n ResolvedContractsrcConfig,\n SchemaFormat,\n} from '@contractspec/lib.contracts';\nimport type { OpenApiSchema } from '../types';\nimport {\n type GeneratedModel,\n generateImports,\n getScalarType,\n jsonSchemaToType,\n type SchemaField,\n} from '../schema-converter';\nimport {\n toKebabCase,\n toPascalCase,\n toValidIdentifier,\n} from '../../common/utils';\n\nconst JSON_SCHEMA_TO_SCALAR: Record<string, string> = {\n string: 'ScalarTypeEnum.String_unsecure',\n integer: 'ScalarTypeEnum.Int_unsecure',\n number: 'ScalarTypeEnum.Float_unsecure',\n boolean: 'ScalarTypeEnum.Boolean',\n 'string:date': 'ScalarTypeEnum.Date',\n 'string:date-time': 'ScalarTypeEnum.DateTime',\n 'string:email': 'ScalarTypeEnum.EmailAddress',\n 'string:uri': 'ScalarTypeEnum.URL',\n 'string:uuid': 'ScalarTypeEnum.ID',\n};\n\nfunction isReference(schema: OpenApiSchema): schema is { $ref: string } {\n return typeof schema === 'object' && schema !== null && '$ref' in schema;\n}\n\nfunction typeNameFromRef(ref: string): string {\n const parts = ref.split('/');\n return parts[parts.length - 1] ?? 'Unknown';\n}\n\n/**\n * Generated code output for a model.\n */\nexport interface GeneratedCode {\n /** The generated TypeScript/JSON code */\n code: string;\n /** File name for the generated code */\n fileName: string;\n /** Required imports */\n imports: string[];\n /** The name of the exported symbol */\n name: string;\n}\n\n/**\n * Generated code output for a field.\n */\nexport interface GeneratedFieldCode {\n /** The field code snippet */\n code: string;\n /** Type reference for the field */\n typeRef: string;\n /** Whether this is an optional field */\n isOptional: boolean;\n /** Whether this is an array field */\n isArray: boolean;\n}\n\n/**\n * Interface for format-specific schema generators.\n */\nexport interface SchemaGenerator {\n /** Format this generator produces */\n format: SchemaFormat;\n\n /**\n * Generate code for a complete model/schema.\n */\n generateModel(\n schema: OpenApiSchema,\n name: string,\n options?: { description?: string }\n ): GeneratedCode;\n\n /**\n * Generate code for a single field.\n */\n generateField(\n schema: OpenApiSchema,\n fieldName: string,\n required: boolean\n ): GeneratedFieldCode;\n\n /**\n * Get import statements needed for this generator's output.\n */\n getBaseImports(): string[];\n}\n\n/**\n * Factory function to create a format-specific schema generator.\n *\n * @param format - The target output format\n * @param config - ContractSpec configuration\n * @returns A schema generator for the specified format\n *\n * @example\n * ```typescript\n * const generator = createSchemaGenerator('zod', config);\n * const model = generator.generateModel(openApiSchema, 'User');\n * ```\n */\nexport function createSchemaGenerator(\n format: SchemaFormat,\n config?: ResolvedContractsrcConfig\n): SchemaGenerator {\n switch (format) {\n case 'zod':\n return new ZodSchemaGenerator(config);\n case 'json-schema':\n return new JsonSchemaGenerator(config);\n case 'graphql':\n return new GraphQLSchemaGenerator(config);\n case 'contractspec':\n default:\n return new ContractSpecSchemaGenerator(config);\n }\n}\n\n// ============================================================================\n// ContractSpec Generator (default)\n// ============================================================================\n\nexport class ContractSpecSchemaGenerator implements SchemaGenerator {\n format: SchemaFormat = 'contractspec';\n config?: ResolvedContractsrcConfig;\n\n constructor(config?: ResolvedContractsrcConfig) {\n this.config = config;\n }\n\n generateModel(schema: OpenApiSchema, name: string): GeneratedCode {\n const model = this.generateContractSpecSchema(schema, name);\n\n // Calculate imports for dependencies\n const dependencyImports = this.config\n ? generateImports(model.fields, this.config, false)\n .split('\\n')\n .filter(Boolean)\n : [];\n\n // Add nested model imports?\n // Nested models are inlined in code, but might have refs.\n // generateImports handles fields recursively? No, generateImports iterates top-level fields.\n // But nested models are hoisted, so their fields are not in 'fields' array of parent directly?\n // Wait, GeneratedModel.fields contains 'nestedModel'.\n // generateImports should traverse nested models?\n // The original generateImports does NOT traverse nested models.\n // However, the original code worked, so maybe simple traversal is enough.\n\n return {\n code: model.code,\n fileName: toKebabCase(name) + '.ts',\n imports: [...this.getBaseImports(), ...dependencyImports],\n name: model.name,\n };\n }\n\n generateField(\n schema: OpenApiSchema,\n fieldName: string,\n required: boolean\n ): GeneratedFieldCode {\n const field = this.convertField(schema, fieldName, required);\n\n return {\n code: field.scalarType\n ? `${field.scalarType}()`\n : 'ScalarTypeEnum.String_unsecure()',\n typeRef: field.type.type,\n isOptional: field.type.optional,\n isArray: field.type.array,\n };\n }\n\n getBaseImports(): string[] {\n return [\n \"import { defineSchemaModel, ScalarTypeEnum, EnumType } from '@contractspec/lib.schema';\",\n ];\n }\n\n // Ported logic\n private generateContractSpecSchema(\n schema: OpenApiSchema,\n modelName: string,\n indent = 0\n ): GeneratedModel {\n const spaces = ' '.repeat(indent);\n const fields: SchemaField[] = [];\n\n if (isReference(schema)) {\n return {\n name: toPascalCase(typeNameFromRef(schema.$ref)),\n fields: [],\n code: `// Reference to ${schema.$ref}`,\n };\n }\n\n const schemaObj = schema as Record<string, unknown>;\n const description = schemaObj['description'] as string | undefined;\n const properties = schemaObj['properties'] as\n | Record<string, OpenApiSchema>\n | undefined;\n const required = (schemaObj['required'] as string[]) ?? [];\n\n // Handle enum types\n const enumValues = schemaObj['enum'] as unknown[] | undefined;\n if (enumValues && enumValues.length > 0) {\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n const enumCode = [\n `${spaces}/**`,\n `${spaces} * Enum type: ${safeModelName}`,\n description ? `${spaces} * ${description}` : null,\n `${spaces} */`,\n `${spaces}export const ${safeModelName} = new EnumType('${safeModelName}', [${enumValues.map((v) => `'${String(v)}'`).join(', ')}]);`,\n ]\n .filter((line) => line !== null)\n .join('\\n');\n\n return {\n name: safeModelName,\n description,\n fields: [],\n code: enumCode,\n };\n }\n\n // Handle primitive types alias\n const schemaType = schemaObj['type'] as string | undefined;\n if (schemaType && !properties && !enumValues) {\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n const format = schemaObj['format'] as string | undefined;\n const scalarKey = format ? `${schemaType}:${format}` : schemaType;\n const scalarType =\n JSON_SCHEMA_TO_SCALAR[scalarKey] ?? JSON_SCHEMA_TO_SCALAR[schemaType];\n\n if (scalarType) {\n const aliasCode = [\n `${spaces}/**`,\n `${spaces} * Type alias: ${safeModelName}`,\n description ? `${spaces} * ${description}` : null,\n `${spaces} * Underlying type: ${scalarType}`,\n `${spaces} */`,\n `${spaces}export const ${safeModelName} = defineSchemaModel({`,\n `${spaces} name: '${safeModelName}',`,\n description\n ? `${spaces} description: ${JSON.stringify(description)},`\n : null,\n `${spaces} fields: {`,\n `${spaces} value: {`,\n `${spaces} type: ${scalarType}(),`,\n `${spaces} isOptional: false,`,\n `${spaces} },`,\n `${spaces} },`,\n `${spaces}});`,\n ]\n .filter((line) => line !== null)\n .join('\\n');\n\n return {\n name: safeModelName,\n description,\n fields: [],\n code: aliasCode,\n };\n }\n }\n\n // Handle additionalProperties (dictionary)\n const additionalProperties = schemaObj['additionalProperties'];\n if (additionalProperties && !properties) {\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n\n const dictCode = [\n `${spaces}/**`,\n `${spaces} * Dictionary/Record type: ${safeModelName}`,\n description ? `${spaces} * ${description}` : null,\n `${spaces} * Use as: Record<string, unknown> - access via record[key]`,\n `${spaces} */`,\n `${spaces}export const ${safeModelName} = ScalarTypeEnum.JSONObject();`,\n ]\n .filter((line) => line !== null)\n .join('\\n');\n\n return {\n name: safeModelName,\n description,\n fields: [],\n code: dictCode,\n };\n }\n\n if (!properties) {\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n const emptyModelCode = [\n `${spaces}export const ${safeModelName} = defineSchemaModel({`,\n `${spaces} name: '${safeModelName}',`,\n description\n ? `${spaces} description: ${JSON.stringify(description)},`\n : null,\n `${spaces} fields: {},`,\n `${spaces}});`,\n ]\n .filter((line) => line !== null)\n .join('\\n');\n\n return {\n name: safeModelName,\n description,\n fields: [],\n code: emptyModelCode,\n };\n }\n\n // Generate fields\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n for (const [propName, propSchema] of Object.entries(properties)) {\n const isRequired = required.includes(propName);\n fields.push(\n this.convertField(propSchema, propName, isRequired, safeModelName)\n );\n }\n\n // Generate code\n const lines: string[] = [];\n\n // Prepend nested models\n for (const field of fields) {\n if (field.nestedModel) {\n lines.push(field.nestedModel.code);\n lines.push('');\n }\n }\n\n // Model definition\n lines.push(`${spaces}export const ${safeModelName} = defineSchemaModel({`);\n lines.push(`${spaces} name: '${safeModelName}',`);\n if (description) {\n lines.push(`${spaces} description: ${JSON.stringify(description)},`);\n }\n lines.push(`${spaces} fields: {`);\n\n for (const field of fields) {\n const fieldLines = this.generateFieldCodeHelper(field, indent + 2);\n lines.push(fieldLines);\n }\n\n lines.push(`${spaces} },`);\n lines.push(`${spaces}});`);\n\n return {\n name: safeModelName,\n description,\n fields,\n code: lines.join('\\n'),\n imports: [],\n };\n }\n\n private convertField(\n schema: OpenApiSchema,\n fieldName: string,\n required: boolean,\n parentName?: string\n ): SchemaField {\n const type = jsonSchemaToType(schema, fieldName);\n const scalarType = getScalarType(schema);\n\n let enumValues: string[] | undefined;\n let nestedModel: GeneratedModel | undefined;\n\n if (!isReference(schema)) {\n const schemaObj = schema as Record<string, unknown>;\n const enumArr = schemaObj['enum'] as unknown[] | undefined;\n if (enumArr) {\n enumValues = enumArr.map(String);\n }\n\n // Handle nested objects\n if (\n schemaObj['type'] === 'object' &&\n !scalarType &&\n schemaObj['properties'] &&\n !enumValues\n ) {\n const nestedName =\n (parentName ? parentName : '') + toPascalCase(fieldName);\n nestedModel = this.generateContractSpecSchema(schema, nestedName);\n\n type.type = nestedModel.name;\n type.isReference = true;\n }\n }\n\n return {\n name: fieldName,\n type: {\n ...type,\n optional: !required || type.optional,\n description: !isReference(schema)\n ? ((schema as Record<string, unknown>)['description'] as string)\n : undefined,\n },\n scalarType,\n enumValues,\n nestedModel,\n };\n }\n\n private generateFieldCodeHelper(field: SchemaField, indent: number): string {\n const spaces = ' '.repeat(indent);\n const lines: string[] = [];\n\n const isIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(field.name);\n const safeKey = isIdentifier ? field.name : `'${field.name}'`;\n lines.push(`${spaces}${safeKey}: {`);\n\n if (field.enumValues) {\n const enumName = toPascalCase(field.name) + 'Enum';\n lines.push(\n `${spaces} type: new EnumType('${enumName}', [${field.enumValues.map((v) => `'${v}'`).join(', ')}]),`\n );\n } else if (field.scalarType) {\n lines.push(`${spaces} type: ${field.scalarType}(),`);\n } else if (field.nestedModel) {\n lines.push(`${spaces} type: ${field.nestedModel.name},`);\n } else if (field.type.primitive) {\n const fallbackScalar =\n field.type.type === 'number'\n ? 'ScalarTypeEnum.Float_unsecure'\n : field.type.type === 'boolean'\n ? 'ScalarTypeEnum.Boolean_unsecure'\n : 'ScalarTypeEnum.String_unsecure';\n lines.push(`${spaces} type: ${fallbackScalar}(),`);\n } else if (field.type.isReference) {\n lines.push(`${spaces} type: ${field.type.type},`);\n } else {\n lines.push(\n `${spaces} type: ScalarTypeEnum.JSONObject(), // TODO: Define nested model for ${field.type.type}`\n );\n }\n\n lines.push(`${spaces} isOptional: ${field.type.optional},`);\n\n if (field.type.array) {\n lines.push(`${spaces} isArray: true,`);\n }\n\n lines.push(`${spaces}},`);\n\n return lines.join('\\n');\n }\n}\n\n// ============================================================================\n// Zod Generator\n// ============================================================================\n\nexport class ZodSchemaGenerator implements SchemaGenerator {\n format: SchemaFormat = 'zod';\n config?: ResolvedContractsrcConfig;\n\n constructor(config?: ResolvedContractsrcConfig) {\n this.config = config;\n }\n\n generateModel(\n schema: OpenApiSchema,\n name: string,\n options?: { description?: string }\n ): GeneratedCode {\n const schemaObj = schema as Record<string, unknown>;\n const properties = schemaObj['properties'] as\n | Record<string, OpenApiSchema>\n | undefined;\n const _required = (schemaObj['required'] as string[]) ?? [];\n const description = options?.description ?? schemaObj['description'];\n\n const lines: string[] = [];\n\n if (description) {\n lines.push(`/**`);\n lines.push(` * ${description}`);\n lines.push(` */`);\n }\n\n // Generate Zod Schema\n const schemaName = `${name}Schema`;\n let schemaCode;\n\n if (properties) {\n schemaCode = this.generateZodObject(schemaObj);\n } else {\n schemaCode = 'z.object({})';\n }\n\n lines.push(`export const ${schemaName} = ${schemaCode};`);\n lines.push(``);\n\n // Generate ZodSchemaType wrapper for ContractSpec compatibility\n lines.push(\n `export const ${name} = new ZodSchemaType(${schemaName}, { name: '${name}', description: ${JSON.stringify(description)} });`\n );\n lines.push(``);\n\n // Generate Type\n lines.push(`export type ${name} = z.infer<typeof ${schemaName}>;`);\n\n // Dependencies?\n // Zod generator doesn't currently resolve references recursively or import them\n // This is a limitation: if prop is ref, use z.lazy(() => RefSchema) or similar?\n // For now assuming shallow/primitive or using z.unknown/record for complex stuff\n // Or if Contracts-transformers logic for references is ported.\n // Simplifying: Zod generator relies on primitive mapping for now.\n\n return {\n code: lines.join('\\n'),\n fileName: toKebabCase(name) + '.ts',\n imports: this.getBaseImports(), // Todo: Add dependency imports if references used\n name: name,\n };\n }\n\n generateField(\n schema: OpenApiSchema,\n _fieldName: string,\n required: boolean\n ): GeneratedFieldCode {\n const schemaObj = schema as Record<string, unknown>;\n const type = schemaObj['type'] as string | undefined;\n const format = schemaObj['format'] as string | undefined;\n const nullable = schemaObj['nullable'] as boolean | undefined;\n\n let zodType: string;\n\n if (type === 'object' && schemaObj['properties']) {\n zodType = this.generateZodObject(schemaObj);\n } else {\n zodType = this.mapTypeToZod(type, format);\n\n if (schemaObj['enum']) {\n const enumValues = schemaObj['enum'] as string[];\n zodType = `z.enum([${enumValues.map((v) => `'${v}'`).join(', ')}])`;\n }\n\n if (type === 'array') {\n const items = schemaObj['items'] as OpenApiSchema | undefined;\n if (items) {\n const itemField = this.generateField(items, 'item', true);\n zodType = `z.array(${itemField.code.replace('.optional()', '')})`;\n } else {\n zodType = 'z.array(z.unknown())';\n }\n }\n }\n\n // Add constraints\n if (type === 'string') {\n if (schemaObj['minLength'] !== undefined)\n zodType += `.min(${schemaObj['minLength']})`;\n if (schemaObj['maxLength'] !== undefined)\n zodType += `.max(${schemaObj['maxLength']})`;\n if (schemaObj['pattern'] !== undefined)\n zodType += `.regex(/${schemaObj['pattern']}/)`;\n } else if (type === 'integer' || type === 'number') {\n if (schemaObj['minimum'] !== undefined) {\n zodType +=\n schemaObj['exclusiveMinimum'] === true\n ? `.gt(${schemaObj['minimum']})`\n : `.min(${schemaObj['minimum']})`;\n } else if (typeof schemaObj['exclusiveMinimum'] === 'number') {\n zodType += `.gt(${schemaObj['exclusiveMinimum']})`;\n }\n\n if (schemaObj['maximum'] !== undefined) {\n zodType +=\n schemaObj['exclusiveMaximum'] === true\n ? `.lt(${schemaObj['maximum']})`\n : `.max(${schemaObj['maximum']})`;\n } else if (typeof schemaObj['exclusiveMaximum'] === 'number') {\n zodType += `.lt(${schemaObj['exclusiveMaximum']})`;\n }\n\n if (schemaObj['multipleOf'] !== undefined) {\n zodType += `.step(${schemaObj['multipleOf']})`;\n }\n } else if (type === 'array') {\n if (schemaObj['minItems'] !== undefined)\n zodType += `.min(${schemaObj['minItems']})`;\n if (schemaObj['maxItems'] !== undefined)\n zodType += `.max(${schemaObj['maxItems']})`;\n }\n\n if (schemaObj['default'] !== undefined) {\n zodType += `.default(${JSON.stringify(schemaObj['default'])})`;\n }\n\n if (!required || nullable) {\n zodType = `${zodType}.optional()`;\n }\n\n return {\n code: zodType,\n typeRef: type ?? 'unknown',\n isOptional: !required || Boolean(nullable),\n isArray: type === 'array',\n };\n }\n\n getBaseImports(): string[] {\n return [\n \"import * as z from 'zod';\",\n \"import { ZodSchemaType } from '@contractspec/lib.schema';\",\n ];\n }\n\n private generateZodObject(schemaObj: Record<string, unknown>): string {\n const required = (schemaObj['required'] as string[]) ?? [];\n const properties = schemaObj['properties'] as Record<string, OpenApiSchema>;\n const lines: string[] = ['z.object({'];\n\n for (const [propName, propSchema] of Object.entries(properties)) {\n const isRequired = required.includes(propName);\n const field = this.generateField(propSchema, propName, isRequired);\n // If name is not a valid identifier, quote it\n const safeName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(propName)\n ? propName\n : `'${propName}'`;\n\n lines.push(` ${safeName}: ${field.code},`);\n }\n\n lines.push('})');\n return lines.join('\\n');\n }\n\n private mapTypeToZod(type?: string, format?: string): string {\n if (format === 'date-time') return 'z.string().datetime()';\n if (format === 'date') return 'z.string().date()';\n if (format === 'email') return 'z.string().email()';\n if (format === 'uri' || format === 'url') return 'z.string().url()';\n if (format === 'uuid') return 'z.string().uuid()';\n\n switch (type) {\n case 'string':\n return 'z.string()';\n case 'integer':\n return 'z.number().int()';\n case 'number':\n return 'z.number()';\n case 'boolean':\n return 'z.boolean()';\n case 'object':\n return 'z.record(z.string(), z.unknown())';\n case 'null':\n return 'z.null()';\n default:\n return 'z.unknown()';\n }\n }\n}\n\n// ============================================================================\n// JSON Schema Generator\n// ============================================================================\n\nexport class JsonSchemaGenerator implements SchemaGenerator {\n format: SchemaFormat = 'json-schema';\n config?: ResolvedContractsrcConfig;\n\n constructor(config?: ResolvedContractsrcConfig) {\n this.config = config;\n }\n\n generateModel(\n schema: OpenApiSchema,\n name: string,\n options?: { description?: string }\n ): GeneratedCode {\n const schemaObj = schema as Record<string, unknown>;\n const description = options?.description ?? schemaObj['description'];\n\n // Create a clean JSON Schema object\n const jsonSchema: Record<string, unknown> = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n title: name,\n ...schemaObj,\n };\n\n if (description) {\n jsonSchema['description'] = description;\n }\n\n const lines: string[] = [];\n lines.push(`/**`);\n lines.push(` * JSON Schema: ${name}`);\n if (description) {\n lines.push(` * ${description}`);\n }\n lines.push(` */`);\n\n const schemaName = `${name}Schema`;\n lines.push(\n `export const ${schemaName} = ${JSON.stringify(jsonSchema, null, 2)} as const;`\n );\n lines.push(``);\n\n // Generate wrapper\n lines.push(`export const ${name} = new JsonSchemaType(${schemaName});`);\n lines.push(``);\n\n // Type derived from JsonSchemaType or similar?\n // Actually JsonSchemaType doesn't strictly infer TS type from JSON schema at compile time easily without other tools.\n // For now, export type as unknown or rely on library.\n lines.push(\n `export type ${name} = unknown; // JSON Schema type inference not fully supported`\n );\n\n return {\n code: lines.join('\\n'),\n fileName: toKebabCase(name) + '.ts',\n imports: this.getBaseImports(), // dependency imports?\n name: name,\n };\n }\n\n generateField(\n schema: OpenApiSchema,\n _fieldName: string,\n required: boolean\n ): GeneratedFieldCode {\n const schemaObj = schema as Record<string, unknown>;\n const type = schemaObj['type'] as string | undefined;\n const nullable = schemaObj['nullable'] as boolean | undefined;\n\n return {\n code: JSON.stringify(schemaObj),\n typeRef: type ?? 'unknown',\n isOptional: !required || Boolean(nullable),\n isArray: type === 'array',\n };\n }\n\n getBaseImports(): string[] {\n return [\"import { JsonSchemaType } from '@contractspec/lib.schema';\"];\n }\n}\n\n// ============================================================================\n// GraphQL Generator\n// ============================================================================\n\nexport class GraphQLSchemaGenerator implements SchemaGenerator {\n format: SchemaFormat = 'graphql';\n config?: ResolvedContractsrcConfig;\n\n constructor(config?: ResolvedContractsrcConfig) {\n this.config = config;\n }\n\n generateModel(\n schema: OpenApiSchema,\n name: string,\n options?: { description?: string }\n ): GeneratedCode {\n const schemaObj = schema as Record<string, unknown>;\n const properties = schemaObj['properties'] as\n | Record<string, OpenApiSchema>\n | undefined;\n const required = (schemaObj['required'] as string[]) ?? [];\n const description = options?.description ?? schemaObj['description'];\n\n const lines: string[] = [];\n\n if (description) {\n lines.push(`\"\"\"${description}\"\"\"`);\n }\n\n lines.push(`type ${name} {`);\n\n if (properties) {\n for (const [propName, propSchema] of Object.entries(properties)) {\n const isRequired = required.includes(propName);\n const field = this.generateField(propSchema, propName, isRequired);\n const nullMarker = isRequired ? '!' : '';\n lines.push(` ${propName}: ${field.typeRef}${nullMarker}`);\n }\n }\n\n lines.push(`}`);\n\n // Also generate SDL as a string constant\n const sdl = lines.join('\\n');\n const tsLines: string[] = [];\n tsLines.push(`/**`);\n tsLines.push(` * GraphQL type definition: ${name}`);\n tsLines.push(` */`);\n tsLines.push(`export const ${name}TypeDef = \\`${sdl}\\`;`);\n tsLines.push(``);\n tsLines.push(\n `export const ${name} = new GraphQLSchemaType(${name}TypeDef, '${name}');`\n );\n\n return {\n code: tsLines.join('\\n'),\n fileName: toKebabCase(name) + '.ts',\n imports: this.getBaseImports(),\n name: name,\n };\n }\n\n generateField(\n schema: OpenApiSchema,\n _fieldName: string,\n required: boolean\n ): GeneratedFieldCode {\n const schemaObj = schema as Record<string, unknown>;\n const type = schemaObj['type'] as string | undefined;\n const format = schemaObj['format'] as string | undefined;\n const nullable = schemaObj['nullable'] as boolean | undefined;\n\n const gqlType = this.mapTypeToGraphQL(type, format);\n\n return {\n code: gqlType,\n typeRef: gqlType,\n isOptional: !required || Boolean(nullable),\n isArray: type === 'array',\n };\n }\n\n getBaseImports(): string[] {\n return [\"import { GraphQLSchemaType } from '@contractspec/lib.schema';\"];\n }\n\n private mapTypeToGraphQL(type?: string, format?: string): string {\n if (format === 'date-time') return 'DateTime';\n if (format === 'date') return 'Date';\n if (format === 'email') return 'String';\n if (format === 'uri' || format === 'url') return 'String';\n if (format === 'uuid') return 'ID';\n\n switch (type) {\n case 'string':\n return 'String';\n case 'integer':\n return 'Int';\n case 'number':\n return 'Float';\n case 'boolean':\n return 'Boolean';\n case 'object':\n return 'JSON';\n case 'array':\n return '[JSON]';\n default:\n return 'JSON';\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/openapi/schema-generators/index.ts"],"sourcesContent":["/**\n * Schema generator factory for multi-format code generation.\n *\n * Provides format-specific generators for OpenAPI to ContractSpec conversion.\n *\n * @module schema-generators\n */\n\nimport type {\n ResolvedContractsrcConfig,\n SchemaFormat,\n} from '@contractspec/lib.contracts';\nimport type { OpenApiSchema } from '../types';\nimport {\n type GeneratedModel,\n generateImports,\n getScalarType,\n jsonSchemaToType,\n type SchemaField,\n} from '../schema-converter';\nimport {\n toKebabCase,\n toPascalCase,\n toValidIdentifier,\n} from '../../common/utils';\n\nconst JSON_SCHEMA_TO_SCALAR: Record<string, string> = {\n string: 'ScalarTypeEnum.String_unsecure',\n integer: 'ScalarTypeEnum.Int_unsecure',\n number: 'ScalarTypeEnum.Float_unsecure',\n boolean: 'ScalarTypeEnum.Boolean',\n 'string:date': 'ScalarTypeEnum.Date',\n 'string:date-time': 'ScalarTypeEnum.DateTime',\n 'string:email': 'ScalarTypeEnum.EmailAddress',\n 'string:uri': 'ScalarTypeEnum.URL',\n 'string:uuid': 'ScalarTypeEnum.ID',\n};\n\nfunction isReference(schema: OpenApiSchema): schema is { $ref: string } {\n return typeof schema === 'object' && schema !== null && '$ref' in schema;\n}\n\nfunction typeNameFromRef(ref: string): string {\n const parts = ref.split('/');\n return parts[parts.length - 1] ?? 'Unknown';\n}\n\n/**\n * Generated code output for a model.\n */\nexport interface GeneratedCode {\n /** The generated TypeScript/JSON code */\n code: string;\n /** File name for the generated code */\n fileName: string;\n /** Required imports */\n imports: string[];\n /** The name of the exported symbol */\n name: string;\n}\n\n/**\n * Generated code output for a field.\n */\nexport interface GeneratedFieldCode {\n /** The field code snippet */\n code: string;\n /** Type reference for the field */\n typeRef: string;\n /** Whether this is an optional field */\n isOptional: boolean;\n /** Whether this is an array field */\n isArray: boolean;\n}\n\n/**\n * Interface for format-specific schema generators.\n */\nexport interface SchemaGenerator {\n /** Format this generator produces */\n format: SchemaFormat;\n\n /**\n * Generate code for a complete model/schema.\n */\n generateModel(\n schema: OpenApiSchema,\n name: string,\n options?: { description?: string }\n ): GeneratedCode;\n\n /**\n * Generate code for a single field.\n */\n generateField(\n schema: OpenApiSchema,\n fieldName: string,\n required: boolean\n ): GeneratedFieldCode;\n\n /**\n * Get import statements needed for this generator's output.\n */\n getBaseImports(): string[];\n}\n\n/**\n * Factory function to create a format-specific schema generator.\n *\n * @param format - The target output format\n * @param config - ContractSpec configuration\n * @returns A schema generator for the specified format\n *\n * @example\n * ```typescript\n * const generator = createSchemaGenerator('zod', config);\n * const model = generator.generateModel(openApiSchema, 'User');\n * ```\n */\nexport function createSchemaGenerator(\n format: SchemaFormat,\n config?: ResolvedContractsrcConfig\n): SchemaGenerator {\n switch (format) {\n case 'zod':\n return new ZodSchemaGenerator(config);\n case 'json-schema':\n return new JsonSchemaGenerator(config);\n case 'graphql':\n return new GraphQLSchemaGenerator(config);\n case 'contractspec':\n default:\n return new ContractSpecSchemaGenerator(config);\n }\n}\n\n// ============================================================================\n// ContractSpec Generator (default)\n// ============================================================================\n\nexport class ContractSpecSchemaGenerator implements SchemaGenerator {\n format: SchemaFormat = 'contractspec';\n config?: ResolvedContractsrcConfig;\n\n constructor(config?: ResolvedContractsrcConfig) {\n this.config = config;\n }\n\n generateModel(schema: OpenApiSchema, name: string): GeneratedCode {\n const model = this.generateContractSpecSchema(schema, name);\n\n // Calculate imports for dependencies\n const dependencyImports = this.config\n ? generateImports(model.fields, this.config, false)\n .split('\\n')\n .filter(Boolean)\n : [];\n\n // Add nested model imports?\n // Nested models are inlined in code, but might have refs.\n // generateImports handles fields recursively? No, generateImports iterates top-level fields.\n // But nested models are hoisted, so their fields are not in 'fields' array of parent directly?\n // Wait, GeneratedModel.fields contains 'nestedModel'.\n // generateImports should traverse nested models?\n // The original generateImports does NOT traverse nested models.\n // However, the original code worked, so maybe simple traversal is enough.\n\n return {\n code: model.code,\n fileName: toKebabCase(name) + '.ts',\n imports: [...this.getBaseImports(), ...dependencyImports],\n name: model.name,\n };\n }\n\n generateField(\n schema: OpenApiSchema,\n fieldName: string,\n required: boolean\n ): GeneratedFieldCode {\n const field = this.convertField(schema, fieldName, required);\n\n return {\n code: field.scalarType\n ? `${field.scalarType}()`\n : 'ScalarTypeEnum.String_unsecure()',\n typeRef: field.type.type,\n isOptional: field.type.optional,\n isArray: field.type.array,\n };\n }\n\n getBaseImports(): string[] {\n return [\n \"import { defineSchemaModel, ScalarTypeEnum, EnumType } from '@contractspec/lib.schema';\",\n ];\n }\n\n // Ported logic\n private generateContractSpecSchema(\n schema: OpenApiSchema,\n modelName: string,\n indent = 0\n ): GeneratedModel {\n const spaces = ' '.repeat(indent);\n const fields: SchemaField[] = [];\n\n if (isReference(schema)) {\n return {\n name: toPascalCase(typeNameFromRef(schema.$ref)),\n fields: [],\n code: `// Reference to ${schema.$ref}`,\n };\n }\n\n const schemaObj = schema as Record<string, unknown>;\n const description = schemaObj['description'] as string | undefined;\n const properties = schemaObj['properties'] as\n | Record<string, OpenApiSchema>\n | undefined;\n const required = (schemaObj['required'] as string[]) ?? [];\n\n // Handle enum types\n const enumValues = schemaObj['enum'] as unknown[] | undefined;\n if (enumValues && enumValues.length > 0) {\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n const enumCode = [\n `${spaces}/**`,\n `${spaces} * Enum type: ${safeModelName}`,\n description ? `${spaces} * ${description}` : null,\n `${spaces} */`,\n `${spaces}export const ${safeModelName} = new EnumType('${safeModelName}', [${enumValues.map((v) => `'${String(v)}'`).join(', ')}]);`,\n ]\n .filter((line) => line !== null)\n .join('\\n');\n\n return {\n name: safeModelName,\n description,\n fields: [],\n code: enumCode,\n };\n }\n\n // Handle primitive types alias\n const schemaType = schemaObj['type'] as string | undefined;\n if (schemaType && !properties && !enumValues) {\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n const format = schemaObj['format'] as string | undefined;\n const scalarKey = format ? `${schemaType}:${format}` : schemaType;\n const scalarType =\n JSON_SCHEMA_TO_SCALAR[scalarKey] ?? JSON_SCHEMA_TO_SCALAR[schemaType];\n\n if (scalarType) {\n const aliasCode = [\n `${spaces}/**`,\n `${spaces} * Type alias: ${safeModelName}`,\n description ? `${spaces} * ${description}` : null,\n `${spaces} * Underlying type: ${scalarType}`,\n `${spaces} */`,\n `${spaces}export const ${safeModelName} = defineSchemaModel({`,\n `${spaces} name: '${safeModelName}',`,\n description\n ? `${spaces} description: ${JSON.stringify(description)},`\n : null,\n `${spaces} fields: {`,\n `${spaces} value: {`,\n `${spaces} type: ${scalarType}(),`,\n `${spaces} isOptional: false,`,\n `${spaces} },`,\n `${spaces} },`,\n `${spaces}});`,\n ]\n .filter((line) => line !== null)\n .join('\\n');\n\n return {\n name: safeModelName,\n description,\n fields: [],\n code: aliasCode,\n };\n }\n }\n\n // Handle additionalProperties (dictionary)\n const additionalProperties = schemaObj['additionalProperties'];\n if (additionalProperties && !properties) {\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n\n const dictCode = [\n `${spaces}/**`,\n `${spaces} * Dictionary/Record type: ${safeModelName}`,\n description ? `${spaces} * ${description}` : null,\n `${spaces} * Use as: Record<string, unknown> - access via record[key]`,\n `${spaces} */`,\n `${spaces}export const ${safeModelName} = ScalarTypeEnum.JSONObject();`,\n ]\n .filter((line) => line !== null)\n .join('\\n');\n\n return {\n name: safeModelName,\n description,\n fields: [],\n code: dictCode,\n };\n }\n\n if (!properties) {\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n const emptyModelCode = [\n `${spaces}export const ${safeModelName} = defineSchemaModel({`,\n `${spaces} name: '${safeModelName}',`,\n description\n ? `${spaces} description: ${JSON.stringify(description)},`\n : null,\n `${spaces} fields: {},`,\n `${spaces}});`,\n ]\n .filter((line) => line !== null)\n .join('\\n');\n\n return {\n name: safeModelName,\n description,\n fields: [],\n code: emptyModelCode,\n };\n }\n\n // Generate fields\n const safeModelName = toPascalCase(toValidIdentifier(modelName));\n for (const [propName, propSchema] of Object.entries(properties)) {\n const isRequired = required.includes(propName);\n fields.push(\n this.convertField(propSchema, propName, isRequired, safeModelName)\n );\n }\n\n // Generate code\n const lines: string[] = [];\n\n // Prepend nested models\n for (const field of fields) {\n if (field.nestedModel) {\n lines.push(field.nestedModel.code);\n lines.push('');\n }\n }\n\n // Model definition\n lines.push(`${spaces}export const ${safeModelName} = defineSchemaModel({`);\n lines.push(`${spaces} name: '${safeModelName}',`);\n if (description) {\n lines.push(`${spaces} description: ${JSON.stringify(description)},`);\n }\n lines.push(`${spaces} fields: {`);\n\n for (const field of fields) {\n const fieldLines = this.generateFieldCodeHelper(field, indent + 2);\n lines.push(fieldLines);\n }\n\n lines.push(`${spaces} },`);\n lines.push(`${spaces}});`);\n\n return {\n name: safeModelName,\n description,\n fields,\n code: lines.join('\\n'),\n imports: [],\n };\n }\n\n private convertField(\n schema: OpenApiSchema,\n fieldName: string,\n required: boolean,\n parentName?: string\n ): SchemaField {\n const type = jsonSchemaToType(schema, fieldName);\n const scalarType = getScalarType(schema);\n\n let enumValues: string[] | undefined;\n let nestedModel: GeneratedModel | undefined;\n\n if (!isReference(schema)) {\n const schemaObj = schema as Record<string, unknown>;\n const enumArr = schemaObj['enum'] as unknown[] | undefined;\n if (enumArr) {\n enumValues = enumArr.map(String);\n }\n\n // Handle nested objects\n if (\n schemaObj['type'] === 'object' &&\n !scalarType &&\n schemaObj['properties'] &&\n !enumValues\n ) {\n const nestedName =\n (parentName ? parentName : '') + toPascalCase(fieldName);\n nestedModel = this.generateContractSpecSchema(schema, nestedName);\n\n type.type = nestedModel.name;\n type.isReference = true;\n }\n }\n\n return {\n name: fieldName,\n type: {\n ...type,\n optional: !required || type.optional,\n description: !isReference(schema)\n ? ((schema as Record<string, unknown>)['description'] as string)\n : undefined,\n },\n scalarType,\n enumValues,\n nestedModel,\n };\n }\n\n private generateFieldCodeHelper(field: SchemaField, indent: number): string {\n const spaces = ' '.repeat(indent);\n const lines: string[] = [];\n\n const isIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(field.name);\n const safeKey = isIdentifier ? field.name : `'${field.name}'`;\n lines.push(`${spaces}${safeKey}: {`);\n\n if (field.enumValues) {\n const enumName = toPascalCase(field.name) + 'Enum';\n lines.push(\n `${spaces} type: new EnumType('${enumName}', [${field.enumValues.map((v) => `'${v}'`).join(', ')}]),`\n );\n } else if (field.scalarType) {\n lines.push(`${spaces} type: ${field.scalarType}(),`);\n } else if (field.nestedModel) {\n lines.push(`${spaces} type: ${field.nestedModel.name},`);\n } else if (field.type.primitive) {\n const fallbackScalar =\n field.type.type === 'number'\n ? 'ScalarTypeEnum.Float_unsecure'\n : field.type.type === 'boolean'\n ? 'ScalarTypeEnum.Boolean_unsecure'\n : 'ScalarTypeEnum.String_unsecure';\n lines.push(`${spaces} type: ${fallbackScalar}(),`);\n } else if (field.type.isReference) {\n lines.push(`${spaces} type: ${field.type.type},`);\n } else {\n lines.push(\n `${spaces} type: ScalarTypeEnum.JSONObject(), // TODO: Define nested model for ${field.type.type}`\n );\n }\n\n lines.push(`${spaces} isOptional: ${field.type.optional},`);\n\n if (field.type.array) {\n lines.push(`${spaces} isArray: true,`);\n }\n\n lines.push(`${spaces}},`);\n\n return lines.join('\\n');\n }\n}\n\n// ============================================================================\n// Zod Generator\n// ============================================================================\n\nexport class ZodSchemaGenerator implements SchemaGenerator {\n format: SchemaFormat = 'zod';\n config?: ResolvedContractsrcConfig;\n\n constructor(config?: ResolvedContractsrcConfig) {\n this.config = config;\n }\n\n generateModel(\n schema: OpenApiSchema,\n name: string,\n options?: { description?: string }\n ): GeneratedCode {\n const schemaObj = schema as Record<string, unknown>;\n const properties = schemaObj['properties'] as\n | Record<string, OpenApiSchema>\n | undefined;\n const _required = (schemaObj['required'] as string[]) ?? [];\n const description = options?.description ?? schemaObj['description'];\n\n const lines: string[] = [];\n\n if (description) {\n lines.push(`/**`);\n lines.push(` * ${description}`);\n lines.push(` */`);\n }\n\n // Generate Zod Schema\n const schemaName = `${name}Schema`;\n let schemaCode;\n\n if (properties) {\n schemaCode = this.generateZodObject(schemaObj);\n } else {\n schemaCode = 'z.object({})';\n }\n\n lines.push(`export const ${schemaName} = ${schemaCode};`);\n lines.push(``);\n\n // Generate ZodSchemaType wrapper for ContractSpec compatibility\n lines.push(\n `export const ${name} = new ZodSchemaType(${schemaName}, { name: '${name}', description: ${JSON.stringify(description)} });`\n );\n lines.push(``);\n\n // Generate Type\n lines.push(`export type ${name} = z.infer<typeof ${schemaName}>;`);\n\n // Dependencies?\n // Zod generator doesn't currently resolve references recursively or import them\n // This is a limitation: if prop is ref, use z.lazy(() => RefSchema) or similar?\n // For now assuming shallow/primitive or using z.unknown/record for complex stuff\n // Or if Contracts-transformers logic for references is ported.\n // Simplifying: Zod generator relies on primitive mapping for now.\n\n return {\n code: lines.join('\\n'),\n fileName: toKebabCase(name) + '.ts',\n imports: this.getBaseImports(), // Todo: Add dependency imports if references used\n name: name,\n };\n }\n\n generateField(\n schema: OpenApiSchema,\n _fieldName: string,\n required: boolean\n ): GeneratedFieldCode {\n const schemaObj = schema as Record<string, unknown>;\n const type = schemaObj['type'] as string | undefined;\n const format = schemaObj['format'] as string | undefined;\n const nullable = schemaObj['nullable'] as boolean | undefined;\n\n let zodType: string;\n\n if (type === 'object' && schemaObj['properties']) {\n zodType = this.generateZodObject(schemaObj);\n } else {\n zodType = this.mapTypeToZod(type, format);\n\n if (schemaObj['enum']) {\n const enumValues = schemaObj['enum'] as string[];\n zodType = `z.enum([${enumValues.map((v) => `'${v}'`).join(', ')}])`;\n }\n\n if (type === 'array') {\n const items = schemaObj['items'] as OpenApiSchema | undefined;\n if (items) {\n const itemField = this.generateField(items, 'item', true);\n zodType = `z.array(${itemField.code.replace('.optional()', '')})`;\n } else {\n zodType = 'z.array(z.unknown())';\n }\n }\n }\n\n // Add constraints\n if (type === 'string') {\n if (schemaObj['minLength'] !== undefined)\n zodType += `.min(${schemaObj['minLength']})`;\n if (schemaObj['maxLength'] !== undefined)\n zodType += `.max(${schemaObj['maxLength']})`;\n if (schemaObj['pattern'] !== undefined)\n zodType += `.regex(/${schemaObj['pattern']}/)`;\n } else if (type === 'integer' || type === 'number') {\n if (schemaObj['minimum'] !== undefined) {\n zodType +=\n schemaObj['exclusiveMinimum'] === true\n ? `.gt(${schemaObj['minimum']})`\n : `.min(${schemaObj['minimum']})`;\n } else if (typeof schemaObj['exclusiveMinimum'] === 'number') {\n zodType += `.gt(${schemaObj['exclusiveMinimum']})`;\n }\n\n if (schemaObj['maximum'] !== undefined) {\n zodType +=\n schemaObj['exclusiveMaximum'] === true\n ? `.lt(${schemaObj['maximum']})`\n : `.max(${schemaObj['maximum']})`;\n } else if (typeof schemaObj['exclusiveMaximum'] === 'number') {\n zodType += `.lt(${schemaObj['exclusiveMaximum']})`;\n }\n\n if (schemaObj['multipleOf'] !== undefined) {\n zodType += `.step(${schemaObj['multipleOf']})`;\n }\n } else if (type === 'array') {\n if (schemaObj['minItems'] !== undefined)\n zodType += `.min(${schemaObj['minItems']})`;\n if (schemaObj['maxItems'] !== undefined)\n zodType += `.max(${schemaObj['maxItems']})`;\n }\n\n if (schemaObj['default'] !== undefined) {\n zodType += `.default(${JSON.stringify(schemaObj['default'])})`;\n }\n\n if (!required || nullable) {\n zodType = `${zodType}.optional()`;\n }\n\n return {\n code: zodType,\n typeRef: type ?? 'unknown',\n isOptional: !required || Boolean(nullable),\n isArray: type === 'array',\n };\n }\n\n getBaseImports(): string[] {\n return [\n \"import * as z from 'zod';\",\n \"import { ZodSchemaType } from '@contractspec/lib.schema';\",\n ];\n }\n\n private generateZodObject(schemaObj: Record<string, unknown>): string {\n const required = (schemaObj['required'] as string[]) ?? [];\n const properties = schemaObj['properties'] as Record<string, OpenApiSchema>;\n const lines: string[] = ['z.object({'];\n\n for (const [propName, propSchema] of Object.entries(properties)) {\n const isRequired = required.includes(propName);\n const field = this.generateField(propSchema, propName, isRequired);\n // If name is not a valid identifier, quote it\n const safeName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(propName)\n ? propName\n : `'${propName}'`;\n\n lines.push(` ${safeName}: ${field.code},`);\n }\n\n lines.push('})');\n return lines.join('\\n');\n }\n\n private mapTypeToZod(type?: string, format?: string): string {\n if (format === 'date-time') return 'z.string().datetime()';\n if (format === 'date') return 'z.string().date()';\n if (format === 'email') return 'z.string().email()';\n if (format === 'uri' || format === 'url') return 'z.string().url()';\n if (format === 'uuid') return 'z.string().uuid()';\n\n switch (type) {\n case 'string':\n return 'z.string()';\n case 'integer':\n return 'z.number().int()';\n case 'number':\n return 'z.number()';\n case 'boolean':\n return 'z.boolean()';\n case 'object':\n return 'z.record(z.string(), z.unknown())';\n case 'null':\n return 'z.null()';\n default:\n return 'z.unknown()';\n }\n }\n}\n\n// ============================================================================\n// JSON Schema Generator\n// ============================================================================\n\nexport class JsonSchemaGenerator implements SchemaGenerator {\n format: SchemaFormat = 'json-schema';\n config?: ResolvedContractsrcConfig;\n\n constructor(config?: ResolvedContractsrcConfig) {\n this.config = config;\n }\n\n generateModel(\n schema: OpenApiSchema,\n name: string,\n options?: { description?: string }\n ): GeneratedCode {\n const schemaObj = schema as Record<string, unknown>;\n const description = options?.description ?? schemaObj['description'];\n\n // Create a clean JSON Schema object\n const jsonSchema: Record<string, unknown> = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n title: name,\n ...schemaObj,\n };\n\n if (description) {\n jsonSchema['description'] = description;\n }\n\n const lines: string[] = [];\n lines.push(`/**`);\n lines.push(` * JSON Schema: ${name}`);\n if (description) {\n lines.push(` * ${description}`);\n }\n lines.push(` */`);\n\n const schemaName = `${name}Schema`;\n lines.push(\n `export const ${schemaName} = ${JSON.stringify(jsonSchema, null, 2)} as const;`\n );\n lines.push(``);\n\n // Generate wrapper\n lines.push(`export const ${name} = new JsonSchemaType(${schemaName});`);\n lines.push(``);\n\n // Type derived from JsonSchemaType or similar?\n // Actually JsonSchemaType doesn't strictly infer TS type from JSON schema at compile time easily without other tools.\n // For now, export type as unknown or rely on library.\n lines.push(\n `export type ${name} = unknown; // JSON Schema type inference not fully supported`\n );\n\n return {\n code: lines.join('\\n'),\n fileName: toKebabCase(name) + '.ts',\n imports: this.getBaseImports(), // dependency imports?\n name: name,\n };\n }\n\n generateField(\n schema: OpenApiSchema,\n _fieldName: string,\n required: boolean\n ): GeneratedFieldCode {\n const schemaObj = schema as Record<string, unknown>;\n const type = schemaObj['type'] as string | undefined;\n const nullable = schemaObj['nullable'] as boolean | undefined;\n\n return {\n code: JSON.stringify(schemaObj),\n typeRef: type ?? 'unknown',\n isOptional: !required || Boolean(nullable),\n isArray: type === 'array',\n };\n }\n\n getBaseImports(): string[] {\n return [\"import { JsonSchemaType } from '@contractspec/lib.schema';\"];\n }\n}\n\n// ============================================================================\n// GraphQL Generator\n// ============================================================================\n\nexport class GraphQLSchemaGenerator implements SchemaGenerator {\n format: SchemaFormat = 'graphql';\n config?: ResolvedContractsrcConfig;\n\n constructor(config?: ResolvedContractsrcConfig) {\n this.config = config;\n }\n\n generateModel(\n schema: OpenApiSchema,\n name: string,\n options?: { description?: string }\n ): GeneratedCode {\n const schemaObj = schema as Record<string, unknown>;\n const properties = schemaObj['properties'] as\n | Record<string, OpenApiSchema>\n | undefined;\n const required = (schemaObj['required'] as string[]) ?? [];\n const description = options?.description ?? schemaObj['description'];\n\n const lines: string[] = [];\n\n if (description) {\n lines.push(`\"\"\"${description}\"\"\"`);\n }\n\n lines.push(`type ${name} {`);\n\n if (properties) {\n for (const [propName, propSchema] of Object.entries(properties)) {\n const isRequired = required.includes(propName);\n const field = this.generateField(propSchema, propName, isRequired);\n const nullMarker = isRequired ? '!' : '';\n lines.push(` ${propName}: ${field.typeRef}${nullMarker}`);\n }\n }\n\n lines.push(`}`);\n\n // Also generate SDL as a string constant\n const sdl = lines.join('\\n');\n const tsLines: string[] = [];\n tsLines.push(`/**`);\n tsLines.push(` * GraphQL type definition: ${name}`);\n tsLines.push(` */`);\n tsLines.push(`export const ${name}TypeDef = \\`${sdl}\\`;`);\n tsLines.push(``);\n tsLines.push(\n `export const ${name} = new GraphQLSchemaType(${name}TypeDef, '${name}');`\n );\n\n return {\n code: tsLines.join('\\n'),\n fileName: toKebabCase(name) + '.ts',\n imports: this.getBaseImports(),\n name: name,\n };\n }\n\n generateField(\n schema: OpenApiSchema,\n _fieldName: string,\n required: boolean\n ): GeneratedFieldCode {\n const schemaObj = schema as Record<string, unknown>;\n const type = schemaObj['type'] as string | undefined;\n const format = schemaObj['format'] as string | undefined;\n const nullable = schemaObj['nullable'] as boolean | undefined;\n\n const gqlType = this.mapTypeToGraphQL(type, format);\n\n return {\n code: gqlType,\n typeRef: gqlType,\n isOptional: !required || Boolean(nullable),\n isArray: type === 'array',\n };\n }\n\n getBaseImports(): string[] {\n return [\"import { GraphQLSchemaType } from '@contractspec/lib.schema';\"];\n }\n\n private mapTypeToGraphQL(type?: string, format?: string): string {\n if (format === 'date-time') return 'DateTime';\n if (format === 'date') return 'Date';\n if (format === 'email') return 'String';\n if (format === 'uri' || format === 'url') return 'String';\n if (format === 'uuid') return 'ID';\n\n switch (type) {\n case 'string':\n return 'String';\n case 'integer':\n return 'Int';\n case 'number':\n return 'Float';\n case 'boolean':\n return 'Boolean';\n case 'object':\n return 'JSON';\n case 'array':\n return '[JSON]';\n default:\n return 'JSON';\n }\n }\n}\n"],"mappings":"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"}
@@ -2,7 +2,6 @@ import { SpecSource, TransportHints } from "../common/types.js";
2
2
  import { OpenAPIV3, OpenAPIV3_1 } from "openapi-types";
3
3
 
4
4
  //#region src/openapi/types.d.ts
5
-
6
5
  /**
7
6
  * Supported OpenAPI versions.
8
7
  */
@@ -267,8 +266,7 @@ interface ContractSpecExportResult {
267
266
  presentations?: GeneratedRegistryCode;
268
267
  forms?: GeneratedRegistryCode;
269
268
  dataViews?: GeneratedRegistryCode;
270
- workflows?: GeneratedRegistryCode;
271
- /** Index file that re-exports all registries */
269
+ workflows?: GeneratedRegistryCode; /** Index file that re-exports all registries */
272
270
  index?: GeneratedRegistryCode;
273
271
  };
274
272
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/openapi/types.ts"],"sourcesContent":[],"mappings":";;;;;AAcA;AAKA;AAOA;AACI,KAlBQ,cAAA,GAkBE,KAAA,GAAA,KAAA;;;;AAGiB,KAhBnB,eAAA,GAAkB,SAAA,CAAU,QAgBT,GAhBoB,WAAA,CAAY,QAgBhC;AAK/B;;;AAGI,KAnBQ,gBAAA,GACR,SAAA,CAAU,eAkBA,GAjBV,WAAA,CAAY,eAiBF;;;AAMd;AAaY,KA/BA,aAAA,GACR,SAAA,CAAU,YA8Be,GA7BzB,WAAA,CAAY,YA6Ba,GA5BzB,SAAA,CAAU,eA4Be,GA3BzB,WAAA,CAAY,eA2Ba;AAK7B;AAgBA;AAgBA;AAYiB,KAvEL,gBAAA,GACR,SAAA,CAAU,eAsEkB,GArE5B,WAAA,CAAY,eAqEgB,GApE5B,SAAA,CAAU,eAoEkB,GAnE5B,WAAA,CAAY,eAmEgB;;;;AAkBhB,KAhFJ,UAAA,GAgFI,KAAA,GAAA,MAAA,GAAA,KAAA,GAAA,QAAA,GAAA,OAAA,GAAA,MAAA,GAAA,SAAA,GAAA,OAAA;;;;AAUH,KA7ED,iBAAA,GA6EC,MAAA,GAAA,OAAA,GAAA,QAAA,GAAA,QAAA;;;AAuBb;AAkBiB,UAjHA,aAAA,CAiHW;EAEhB,GAAA,EAAA,MAAA;EAED,WAAA,CAAA,EAAA,MAAA;EAQG,SAAA,CAAA,EA1HA,MA0HA,CAAA,MAAA,EAAA;IAEY,OAAA,EAAA,MAAA;IAAf,IAAA,CAAA,EAAA,MAAA,EAAA;IAEA,WAAA,CAAA,EAAA,MAAA;EAID,CAAA,CAAA;;AAMV;AAYA;AAgBA;AAYiB,UAnKA,oBAAA,CAmK2B;EAOhC;EACY,KAAA,CAAA,EAAA,MAAA;EAAf;EAEmB,OAAA,CAAA,EAAA,MAAA;EAAf;EAAM,WAAA,CAAA,EAAA,MAAA;EAmBF;EAsBA,OAAA,CAAA,EA9ML,aA8MK,EAAqB;EAUrB;EAEN,UAAA,CAAA,EAxNI,MAwNJ,CAAA,MAAA,EAAA,OAAA,CAAA;;;;;AAOC,UAzNK,mBAAA,CAyNL;EACI;EACA,OAAA,CAAA,EAAA,MAAA;EAEJ;EAAqB,WAAA,CAAA,EAAA,OAAA;;;;;;;UAjNhB,eAAA;;;;UAIP;;;;;;;;;;cAUI;;eAEC;;gBAEC;;gBAEA;;;;YAIJ;;;;aAIC;;aAIE;;;;;;aAOF;;;;;;;;;;;UAYI,eAAA;;;;MAIX;;;;;;UAMI;;;;;;;UAQO,WAAA;;YAEL;;WAED;;;;;;;;cAQG;;WAEH,eAAe;;WAEf;;;;UAID;;;;;UAMO,WAAA;;;;;;WAMN;;;;;UAMM,qBAAA,SAA8B;;;;;;;;;;;;;;;UAgB9B,aAAA,SAAsB;;;kBAGrB;;;;;;;;UASD,2BAAA;;;;;;;YAOL;SACH,eAAe;;aAEX,eAAe;;;;;;;;;;;;;;;;;;UAmBX,yBAAA,SAAkC;;;;;;;;;;;;;;;;;;;;;UAsBlC,qBAAA;;;;;;;;;UAUA,wBAAA;;WAEN;;;iBAGM;aACJ;eACE;oBACK;YACR;gBACI;gBACA;;YAEJ"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/openapi/types.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/lib.contracts-transformers",
3
- "version": "1.56.0",
3
+ "version": "1.57.0",
4
4
  "description": "Contract format transformations: import/export between ContractSpec and external formats (OpenAPI, AsyncAPI, etc.)",
5
5
  "keywords": [
6
6
  "contractspec",
@@ -25,17 +25,17 @@
25
25
  "test": "bun test"
26
26
  },
27
27
  "dependencies": {
28
- "@contractspec/lib.contracts": "1.56.0",
29
- "@contractspec/lib.schema": "1.56.0",
28
+ "@contractspec/lib.contracts": "1.57.0",
29
+ "@contractspec/lib.schema": "1.57.0",
30
30
  "compare-versions": "^6.1.1",
31
31
  "openapi-types": "^12.1.3",
32
32
  "yaml": "^2.7.1",
33
33
  "zod": "^4.3.5"
34
34
  },
35
35
  "devDependencies": {
36
- "@contractspec/tool.tsdown": "1.56.0",
37
- "@contractspec/tool.typescript": "1.56.0",
38
- "tsdown": "^0.19.0",
36
+ "@contractspec/tool.tsdown": "1.57.0",
37
+ "@contractspec/tool.typescript": "1.57.0",
38
+ "tsdown": "^0.20.3",
39
39
  "typescript": "^5.9.3"
40
40
  },
41
41
  "types": "./dist/index.d.ts",