@ir-kit/openapi 0.1.0 → 0.2.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 (64) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +5 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +4 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/operation/body.d.ts +2 -3
  7. package/dist/operation/body.d.ts.map +1 -1
  8. package/dist/operation/body.js +3 -4
  9. package/dist/operation/body.js.map +1 -1
  10. package/dist/operation/iter.d.ts +1 -1
  11. package/dist/operation/iter.d.ts.map +1 -1
  12. package/dist/operation/iter.js +2 -1
  13. package/dist/operation/iter.js.map +1 -1
  14. package/dist/operation/responses.js +1 -1
  15. package/dist/operation/responses.js.map +1 -1
  16. package/dist/operation/signature.d.ts +1 -1
  17. package/dist/operation/signature.js +1 -1
  18. package/dist/spec/constants.d.ts +20 -0
  19. package/dist/spec/constants.d.ts.map +1 -0
  20. package/dist/spec/constants.js +37 -0
  21. package/dist/spec/constants.js.map +1 -0
  22. package/dist/spec/normalize/allOf.d.ts +3 -0
  23. package/dist/spec/normalize/allOf.d.ts.map +1 -0
  24. package/dist/spec/normalize/allOf.js +42 -0
  25. package/dist/spec/normalize/allOf.js.map +1 -0
  26. package/dist/spec/normalize/enums.d.ts +10 -0
  27. package/dist/spec/normalize/enums.d.ts.map +1 -0
  28. package/dist/spec/normalize/enums.js +121 -0
  29. package/dist/spec/normalize/enums.js.map +1 -0
  30. package/dist/spec/normalize/index.d.ts +20 -0
  31. package/dist/spec/normalize/index.d.ts.map +1 -0
  32. package/dist/spec/normalize/index.js +37 -0
  33. package/dist/spec/normalize/index.js.map +1 -0
  34. package/dist/spec/normalize/metadata.d.ts +12 -0
  35. package/dist/spec/normalize/metadata.d.ts.map +1 -0
  36. package/dist/spec/normalize/metadata.js +49 -0
  37. package/dist/spec/normalize/metadata.js.map +1 -0
  38. package/dist/spec/normalize/name.d.ts +8 -0
  39. package/dist/spec/normalize/name.d.ts.map +1 -0
  40. package/dist/spec/normalize/name.js +24 -0
  41. package/dist/spec/normalize/name.js.map +1 -0
  42. package/dist/spec/normalize/objects.d.ts +14 -0
  43. package/dist/spec/normalize/objects.d.ts.map +1 -0
  44. package/dist/spec/normalize/objects.js +229 -0
  45. package/dist/spec/normalize/objects.js.map +1 -0
  46. package/dist/spec/normalize/prune.d.ts +15 -0
  47. package/dist/spec/normalize/prune.d.ts.map +1 -0
  48. package/dist/spec/normalize/prune.js +87 -0
  49. package/dist/spec/normalize/prune.js.map +1 -0
  50. package/dist/spec/normalize/walk.d.ts +21 -0
  51. package/dist/spec/normalize/walk.d.ts.map +1 -0
  52. package/dist/spec/normalize/walk.js +91 -0
  53. package/dist/spec/normalize/walk.js.map +1 -0
  54. package/dist/spec/ref.d.ts +17 -0
  55. package/dist/spec/ref.d.ts.map +1 -0
  56. package/dist/spec/ref.js +32 -0
  57. package/dist/spec/ref.js.map +1 -0
  58. package/dist/spec/security.d.ts +22 -0
  59. package/dist/spec/security.d.ts.map +1 -0
  60. package/dist/spec/security.js +47 -0
  61. package/dist/spec/security.js.map +1 -0
  62. package/dist/type/dispatch.js +1 -1
  63. package/dist/type/dispatch.js.map +1 -1
  64. package/package.json +2 -3
package/README.md CHANGED
@@ -111,7 +111,7 @@ If you're picking up this package for the first time:
111
111
 
112
112
  - **Walks are generators, not arrays.** `iterOperations`, `iterateObjectProperties`. Lets callers short-circuit or filter without paying for a full list build. Callers that need an array do `Array.from(...)`.
113
113
 
114
- - **No target imports.** This package depends on `@hey-api/shared` (for IR types), `@ir-kit/openapi-core` (for ref / security / constants), and `@ir-kit/codegen-core` (for `pascal`, `synthName`). It does NOT depend on any go-dsl / kt-dsl / sw-dsl module.
114
+ - **No target imports.** This package depends on `@hey-api/shared` (for IR types) and `@ir-kit/codegen-core` (for `pascal`, `synthName`). Spec-level primitives (ref / security / constants / normalize) live under `src/spec/` and are re-exported. The package does NOT depend on any go-dsl / kt-dsl / sw-dsl module.
115
115
 
116
116
  ## Adding a new shared walk
117
117
 
package/dist/index.d.ts CHANGED
@@ -9,6 +9,11 @@ export { classifyReturnShape, isSuccessStatus, successResponses, } from "./opera
9
9
  export { deriveBaseName, operationDocLine, splitPathSegments, } from "./operation/signature.js";
10
10
  export type { TemplatePart } from "./operation/template.js";
11
11
  export { parseTemplatedSegment } from "./operation/template.js";
12
+ export { FORM_URLENCODED_MEDIA, HTTP_METHOD_LITERAL, HTTP_METHODS, type HttpMethod, JSON_MEDIA_RE, MULTIPART_FORM_MEDIA, } from "./spec/constants.js";
13
+ export type { Casing, EnumPassOptions, NamingConfig, NamingRule, NormalizeOptions, ObjectPassOptions, } from "./spec/normalize/index.js";
14
+ export { normalizeSpec, SAFE_NORMALIZE } from "./spec/normalize/index.js";
15
+ export { isMeaningless, refName } from "./spec/ref.js";
16
+ export { extractSecuritySchemeNames, securityKey } from "./spec/security.js";
12
17
  export type { TypeCtx } from "./type/context.js";
13
18
  export type { SchemaToTypeOps } from "./type/dispatch.js";
14
19
  export { schemaToType } from "./type/dispatch.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,KAAK,UAAU,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,MAAM,EACN,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE7E,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -4,6 +4,10 @@ export { collectLocatedParams, PARAM_LOCATIONS, paramsAt, } from "./operation/pa
4
4
  export { classifyReturnShape, isSuccessStatus, successResponses, } from "./operation/responses.js";
5
5
  export { deriveBaseName, operationDocLine, splitPathSegments, } from "./operation/signature.js";
6
6
  export { parseTemplatedSegment } from "./operation/template.js";
7
+ export { FORM_URLENCODED_MEDIA, HTTP_METHOD_LITERAL, HTTP_METHODS, JSON_MEDIA_RE, MULTIPART_FORM_MEDIA, } from "./spec/constants.js";
8
+ export { normalizeSpec, SAFE_NORMALIZE } from "./spec/normalize/index.js";
9
+ export { isMeaningless, refName } from "./spec/ref.js";
10
+ export { extractSecuritySchemeNames, securityKey } from "./spec/security.js";
7
11
  export { schemaToType } from "./type/dispatch.js";
8
12
  export { assertNoEnumCollisions, classifyEnumLiterals, } from "./type/enum.js";
9
13
  export { classifyObjectShape, iterateObjectProperties, } from "./type/object.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EAEZ,aAAa,EACb,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAI7E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -37,9 +37,8 @@ export type BodyShape =
37
37
  };
38
38
  /**
39
39
  * Classify a body by its media type + schema shape so emitters can
40
- * dispatch identically on `kind`. The media-type matching rules are
41
- * the same ones the generators agreed on (`@ir-kit/openapi-core`
42
- * constants) — single source of truth.
40
+ * dispatch identically on `kind`. The media-type matching rules use
41
+ * the shared constants in `../spec/constants` — single source of truth.
43
42
  */
44
43
  export declare function classifyBody(body: IR.BodyObject): BodyShape;
45
44
  //# sourceMappingURL=body.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../src/operation/body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAO1C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS;AACnB,mDAAmD;AACjD;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE;AACxB;wEACwE;GACtE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE;AACzB;gCACgC;GAC9B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE;AAC9B;8CAC8C;GAC5C;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAAE;AACpC;0BAC0B;GACxB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,CAiB3D"}
1
+ {"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../src/operation/body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAO1C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS;AACnB,mDAAmD;AACjD;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE;AACxB;wEACwE;GACtE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE;AACzB;gCACgC;GAC9B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE;AAC9B;8CAC8C;GAC5C;IAAE,IAAI,EAAE,wBAAwB,CAAA;CAAE;AACpC;0BAC0B;GACxB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEvB;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,CAiB3D"}
@@ -1,4 +1,4 @@
1
- import { FORM_URLENCODED_MEDIA, JSON_MEDIA_RE, MULTIPART_FORM_MEDIA, } from "@ir-kit/openapi-core";
1
+ import { FORM_URLENCODED_MEDIA, JSON_MEDIA_RE, MULTIPART_FORM_MEDIA, } from "../spec/constants.js";
2
2
  /**
3
3
  * `true` when a JSON-typed body has no concrete `type` but carries an
4
4
  * `items[]` (typical of bare `oneOf`/`anyOf` schemas) — there's no
@@ -10,9 +10,8 @@ export function isOpaqueJsonBody(schema) {
10
10
  }
11
11
  /**
12
12
  * Classify a body by its media type + schema shape so emitters can
13
- * dispatch identically on `kind`. The media-type matching rules are
14
- * the same ones the generators agreed on (`@ir-kit/openapi-core`
15
- * constants) — single source of truth.
13
+ * dispatch identically on `kind`. The media-type matching rules use
14
+ * the shared constants in `../spec/constants` — single source of truth.
16
15
  */
17
16
  export function classifyBody(body) {
18
17
  const mt = (body.mediaType ?? "").toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"body.js","sourceRoot":"","sources":["../../src/operation/body.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAChF,CAAC;AAsBD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAExE,IAAI,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACjC,OAAO,gBAAgB,CAAC,MAAM,CAAC;YAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE;YACzB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,QAAQ,EAAE,CAAC;QACrD,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"body.js","sourceRoot":"","sources":["../../src/operation/body.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAChF,CAAC;AAsBD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAExE,IAAI,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACjC,OAAO,gBAAgB,CAAC,MAAM,CAAC;YAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE;YACzB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,QAAQ,EAAE,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,QAAQ,EAAE,CAAC;QACrD,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { IR } from "@hey-api/shared";
2
- import { type HttpMethod } from "@ir-kit/openapi-core";
2
+ import { type HttpMethod } from "../spec/constants.js";
3
3
  export interface IteratedOperation {
4
4
  pathStr: string;
5
5
  method: HttpMethod;
@@ -1 +1 @@
1
- {"version":3,"file":"iter.d.ts","sourceRoot":"","sources":["../../src/operation/iter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC;IACvB;0EACsE;IACtE,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACpC;AAED;;;;;;;;;GASG;AACH,wBAAiB,cAAc,CAC7B,KAAK,EAAE,EAAE,CAAC,WAAW,GAAG,SAAS,EACjC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,GACvD,SAAS,CAAC,iBAAiB,CAAC,CAa9B"}
1
+ {"version":3,"file":"iter.d.ts","sourceRoot":"","sources":["../../src/operation/iter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGrE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC;IACvB;0EACsE;IACtE,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACpC;AAED;;;;;;;;;GASG;AACH,wBAAiB,cAAc,CAC7B,KAAK,EAAE,EAAE,CAAC,WAAW,GAAG,SAAS,EACjC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,GACvD,SAAS,CAAC,iBAAiB,CAAC,CAa9B"}
@@ -1,4 +1,5 @@
1
- import { HTTP_METHODS, securityKey, } from "@ir-kit/openapi-core";
1
+ import { HTTP_METHODS } from "../spec/constants.js";
2
+ import { securityKey } from "../spec/security.js";
2
3
  /**
3
4
  * Walk `IR.PathsObject` and yield one entry per `(path, method)` that
4
5
  * carries an operation, with security-scheme names resolved up-front.
@@ -1 +1 @@
1
- {"version":3,"file":"iter.js","sourceRoot":"","sources":["../../src/operation/iter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EAEZ,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAW9B;;;;;;;;;GASG;AACH,MAAM,SAAS,CAAC,CAAC,cAAc,CAC7B,KAAiC,EACjC,WAAwD;IAExD,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAmC,CAAC;YAC9D,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,MAAM;gBACJ,OAAO;gBACP,MAAM,EAAE,MAAoB;gBAC5B,EAAE;gBACF,WAAW,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;aAClE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"iter.js","sourceRoot":"","sources":["../../src/operation/iter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAmB,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWlD;;;;;;;;;GASG;AACH,MAAM,SAAS,CAAC,CAAC,cAAc,CAC7B,KAAiC,EACjC,WAAwD;IAExD,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAmC,CAAC;YAC9D,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,MAAM;gBACJ,OAAO;gBACP,MAAM,EAAE,MAAoB;gBAC5B,EAAE;gBACF,WAAW,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;aAClE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { isMeaningless } from "@ir-kit/openapi-core";
1
+ import { isMeaningless } from "../spec/ref.js";
2
2
  /**
3
3
  * Match a 3-digit HTTP status code in the 2xx range. Treats string
4
4
  * codes only (matching hey-api's IR shape) so `"default"` and `"4XX"`
@@ -1 +1 @@
1
- {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/operation/responses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,EAAsB;IAEtB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;SACnC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAEvC,CAAC;AACJ,CAAC;AAiCD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAsB;IACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/operation/responses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,EAAsB;IAEtB,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;SACtC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;SACnC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAEvC,CAAC;AACJ,CAAC;AAiCD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAsB;IACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { IR } from "@hey-api/shared";
2
- import { type HttpMethod } from "@ir-kit/openapi-core";
2
+ import { type HttpMethod } from "../spec/constants.js";
3
3
  /**
4
4
  * Derive the canonical *base* name for an operation — the unstyled
5
5
  * identifier each emitter then runs through its own case transform
@@ -1,4 +1,4 @@
1
- import { HTTP_METHOD_LITERAL } from "@ir-kit/openapi-core";
1
+ import { HTTP_METHOD_LITERAL } from "../spec/constants.js";
2
2
  /**
3
3
  * Derive the canonical *base* name for an operation — the unstyled
4
4
  * identifier each emitter then runs through its own case transform
@@ -0,0 +1,20 @@
1
+ /**
2
+ * HTTP-method tuple iterated by every operation walker. Ordered to
3
+ * match the OpenAPI spec's canonical ordering so generated output is
4
+ * deterministic across runs and across generators.
5
+ */
6
+ export declare const HTTP_METHODS: readonly ["get", "post", "put", "delete", "patch", "head", "options", "trace"];
7
+ export type HttpMethod = (typeof HTTP_METHODS)[number];
8
+ /**
9
+ * Wire-format method literal expected by HTTP clients (`GET` not `get`).
10
+ */
11
+ export declare const HTTP_METHOD_LITERAL: Record<HttpMethod, string>;
12
+ /**
13
+ * Match `application/json` and any RFC 6839 structured-syntax suffix
14
+ * variant (e.g. `application/vnd.api+json`). Tolerant of trailing
15
+ * `;charset=...` parameters.
16
+ */
17
+ export declare const JSON_MEDIA_RE: RegExp;
18
+ export declare const FORM_URLENCODED_MEDIA = "application/x-www-form-urlencoded";
19
+ export declare const MULTIPART_FORM_MEDIA = "multipart/form-data";
20
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/spec/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,YAAY,gFASf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAS1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAqD,CAAC;AAEhF,eAAO,MAAM,qBAAqB,sCAAsC,CAAC;AACzE,eAAO,MAAM,oBAAoB,wBAAwB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * HTTP-method tuple iterated by every operation walker. Ordered to
3
+ * match the OpenAPI spec's canonical ordering so generated output is
4
+ * deterministic across runs and across generators.
5
+ */
6
+ export const HTTP_METHODS = [
7
+ "get",
8
+ "post",
9
+ "put",
10
+ "delete",
11
+ "patch",
12
+ "head",
13
+ "options",
14
+ "trace",
15
+ ];
16
+ /**
17
+ * Wire-format method literal expected by HTTP clients (`GET` not `get`).
18
+ */
19
+ export const HTTP_METHOD_LITERAL = {
20
+ get: "GET",
21
+ post: "POST",
22
+ put: "PUT",
23
+ delete: "DELETE",
24
+ patch: "PATCH",
25
+ head: "HEAD",
26
+ options: "OPTIONS",
27
+ trace: "TRACE",
28
+ };
29
+ /**
30
+ * Match `application/json` and any RFC 6839 structured-syntax suffix
31
+ * variant (e.g. `application/vnd.api+json`). Tolerant of trailing
32
+ * `;charset=...` parameters.
33
+ */
34
+ export const JSON_MEDIA_RE = /^application\/(?:json|[\w.+-]+\+json)(?:\s*;|$)/i;
35
+ export const FORM_URLENCODED_MEDIA = "application/x-www-form-urlencoded";
36
+ export const MULTIPART_FORM_MEDIA = "multipart/form-data";
37
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/spec/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK;IACL,MAAM;IACN,KAAK;IACL,QAAQ;IACR,OAAO;IACP,MAAM;IACN,SAAS;IACT,OAAO;CACC,CAAC;AAIX;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,kDAAkD,CAAC;AAEhF,MAAM,CAAC,MAAM,qBAAqB,GAAG,mCAAmC,CAAC;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Collapse `{ allOf: [X] }` (single-element) into the parent. */
2
+ export declare function collapseSingleAllOf(spec: unknown): void;
3
+ //# sourceMappingURL=allOf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allOf.d.ts","sourceRoot":"","sources":["../../../src/spec/normalize/allOf.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAcvD"}
@@ -0,0 +1,42 @@
1
+ import { walkSchemas } from "./walk.js";
2
+ /** Collapse `{ allOf: [X] }` (single-element) into the parent. */
3
+ export function collapseSingleAllOf(spec) {
4
+ walkSchemas(spec, ({ node }) => {
5
+ if (!node || typeof node !== "object")
6
+ return;
7
+ const value = node;
8
+ const allOf = value.allOf;
9
+ if (!Array.isArray(allOf) || allOf.length !== 1)
10
+ return;
11
+ const sole = allOf[0];
12
+ if (!sole || typeof sole !== "object")
13
+ return;
14
+ if (hasMeaningfulSiblings(value))
15
+ return;
16
+ delete value.allOf;
17
+ Object.assign(value, sole);
18
+ });
19
+ }
20
+ function hasMeaningfulSiblings(value) {
21
+ for (const key of Object.keys(value)) {
22
+ if (key === "allOf")
23
+ continue;
24
+ if (PRESENTATIONAL.has(key))
25
+ continue;
26
+ if (key.startsWith("x-"))
27
+ continue;
28
+ return true;
29
+ }
30
+ return false;
31
+ }
32
+ const PRESENTATIONAL = new Set([
33
+ "description",
34
+ "title",
35
+ "deprecated",
36
+ "example",
37
+ "examples",
38
+ "externalDocs",
39
+ "readOnly",
40
+ "writeOnly",
41
+ ]);
42
+ //# sourceMappingURL=allOf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allOf.js","sourceRoot":"","sources":["../../../src/spec/normalize/allOf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,kEAAkE;AAClE,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9C,MAAM,KAAK,GAAG,IAA+B,CAAC;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAExD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC9C,IAAI,qBAAqB,CAAC,KAAK,CAAC;YAAE,OAAO;QAEzC,OAAO,KAAK,CAAC,KAAK,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA8B;IAC3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,GAAG,KAAK,OAAO;YAAE,SAAS;QAC9B,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACtC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,aAAa;IACb,OAAO;IACP,YAAY;IACZ,SAAS;IACT,UAAU;IACV,cAAc;IACd,UAAU;IACV,WAAW;CACZ,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { NamingConfig } from "./name.js";
2
+ export interface EnumPassOptions {
3
+ naming?: NamingConfig;
4
+ }
5
+ /**
6
+ * Hoist identical inline enums to `components.schemas` and rewrite each
7
+ * occurrence as a `$ref`. Returns the set of newly-added schema names.
8
+ */
9
+ export declare function dedupeInlineEnums(spec: unknown, opts?: EnumPassOptions): Set<string>;
10
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../../src/spec/normalize/enums.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAS9C,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,EACb,IAAI,GAAE,eAAoB,GACzB,GAAG,CAAC,MAAM,CAAC,CAkFb"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Algorithm adapted from @hey-api/openapi-ts (MIT) —
3
+ * `packages/shared/src/openApi/shared/transforms/enums.ts` `rootMode`.
4
+ * Deviations: signature includes `format`; only the `'root'` direction
5
+ * is supported; metadata is reconciled across hits (see `metadata.ts`).
6
+ */
7
+ import { preserveMetadata } from "./metadata.js";
8
+ import { applyNaming, uniqueComponentName } from "./name.js";
9
+ import { getSchemasObject, isRootSchemaPath, schemasPointerPrefix, walkSchemas, } from "./walk.js";
10
+ const DEFAULT_NAMING = {
11
+ case: "PascalCase",
12
+ name: "{{name}}Enum",
13
+ };
14
+ /**
15
+ * Hoist identical inline enums to `components.schemas` and rewrite each
16
+ * occurrence as a `$ref`. Returns the set of newly-added schema names.
17
+ */
18
+ export function dedupeInlineEnums(spec, opts = {}) {
19
+ const hoisted = new Set();
20
+ const schemas = getSchemasObject(spec);
21
+ if (!schemas)
22
+ return hoisted;
23
+ const pointerPrefix = schemasPointerPrefix(spec);
24
+ if (!pointerPrefix)
25
+ return hoisted;
26
+ const naming = opts.naming ?? DEFAULT_NAMING;
27
+ const existingBySignature = {};
28
+ for (const [name, schema] of Object.entries(schemas)) {
29
+ const signature = enumSignature(schema);
30
+ if (signature)
31
+ existingBySignature[signature] = name;
32
+ }
33
+ const hits = [];
34
+ const hitsBySignature = new Map();
35
+ walkSchemas(spec, ({ key, node, parent, path }) => {
36
+ if (key === null || parent === null)
37
+ return;
38
+ if (isRootSchemaPath(path))
39
+ return;
40
+ const signature = enumSignature(node);
41
+ if (!signature)
42
+ return;
43
+ const hit = {
44
+ parent: parent,
45
+ key: key,
46
+ signature,
47
+ schema: node,
48
+ };
49
+ hits.push(hit);
50
+ const arr = hitsBySignature.get(signature);
51
+ if (arr)
52
+ arr.push(hit);
53
+ else
54
+ hitsBySignature.set(signature, [hit]);
55
+ });
56
+ if (hits.length === 0)
57
+ return hoisted;
58
+ const nameBySignature = new Map();
59
+ const schemaBySignature = new Map();
60
+ const reservedNames = new Set();
61
+ for (const { schema, signature, key } of hits) {
62
+ if (nameBySignature.has(signature))
63
+ continue;
64
+ const existingName = existingBySignature[signature];
65
+ if (existingName) {
66
+ nameBySignature.set(signature, existingName);
67
+ continue;
68
+ }
69
+ const base = applyNaming(canonicalBase(schema, key), naming);
70
+ const name = uniqueComponentName(base, schemas, reservedNames);
71
+ reservedNames.add(name);
72
+ nameBySignature.set(signature, name);
73
+ schemaBySignature.set(signature, schema);
74
+ }
75
+ for (const [signature, name] of nameBySignature) {
76
+ if (name in schemas)
77
+ continue;
78
+ const schema = schemaBySignature.get(signature);
79
+ if (schema && typeof schema === "object") {
80
+ const target = schema;
81
+ preserveMetadata(hitsBySignature.get(signature) ?? [], target);
82
+ schemas[name] = target;
83
+ hoisted.add(name);
84
+ }
85
+ }
86
+ for (const { parent, key, signature } of hits) {
87
+ const name = nameBySignature.get(signature);
88
+ if (!name)
89
+ continue;
90
+ const ref = { $ref: `${pointerPrefix}${name}` };
91
+ if (Array.isArray(parent)) {
92
+ parent[key] = ref;
93
+ }
94
+ else {
95
+ parent[key] = ref;
96
+ }
97
+ }
98
+ return hoisted;
99
+ }
100
+ /** Signature key: `(type, format, sorted enum values)`. Differs in `format` matters for typed languages. */
101
+ function enumSignature(schema) {
102
+ if (!schema || typeof schema !== "object")
103
+ return undefined;
104
+ const s = schema;
105
+ if (!Array.isArray(s.enum))
106
+ return undefined;
107
+ return JSON.stringify({
108
+ type: s.type ?? "",
109
+ format: s.format ?? "",
110
+ values: [...s.enum].sort(),
111
+ });
112
+ }
113
+ function canonicalBase(schema, key) {
114
+ if (schema && typeof schema === "object" && "title" in schema) {
115
+ const title = schema.title;
116
+ if (typeof title === "string" && title)
117
+ return title;
118
+ }
119
+ return String(key);
120
+ }
121
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/spec/normalize/enums.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { EnumPassOptions } from "./enums.js";
2
+ import type { ObjectPassOptions } from "./objects.js";
3
+ export type { EnumPassOptions } from "./enums.js";
4
+ export type { Casing, NamingConfig, NamingRule } from "./name.js";
5
+ export type { ObjectPassOptions } from "./objects.js";
6
+ export interface NormalizeOptions {
7
+ /** Hoist identical inline enums to `components.schemas`. */
8
+ enums?: boolean | EnumPassOptions;
9
+ /** Collapse single-element `allOf` compositions. */
10
+ allOf?: boolean;
11
+ /** Hoist identical inline objects. Opt-in: structural equality ≠ domain equality. */
12
+ objects?: boolean | ObjectPassOptions;
13
+ /** Drop unreferenced schemas. Scoped to pipeline-hoisted entries; authored schemas are never touched. */
14
+ prune?: boolean;
15
+ }
16
+ /** Apply enabled passes to `spec` in place. Returns the same reference. */
17
+ export declare function normalizeSpec<T>(spec: T, opts?: NormalizeOptions): T;
18
+ /** Every pass except `objects` (kept opt-in for its false-merge risk). */
19
+ export declare const SAFE_NORMALIZE: NormalizeOptions;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spec/normalize/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IAClC,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACtC,yGAAyG;IACzG,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAE,gBAAqB,GAAG,CAAC,CAmBxE;AAED,0EAA0E;AAC1E,eAAO,MAAM,cAAc,EAAE,gBAI5B,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * OpenAPI spec normalization pipeline. Pure spec → spec passes
3
+ * applied to the raw bundled doc before IR codegen.
4
+ *
5
+ * Order: allOf collapse → enum dedup → object dedup (opt-in) → prune.
6
+ * Pattern adapted from @hey-api/openapi-ts (MIT) `transformOpenApiSpec`.
7
+ */
8
+ import { collapseSingleAllOf } from "./allOf.js";
9
+ import { dedupeInlineEnums } from "./enums.js";
10
+ import { dedupeInlineObjects } from "./objects.js";
11
+ import { pruneUnusedSchemas } from "./prune.js";
12
+ /** Apply enabled passes to `spec` in place. Returns the same reference. */
13
+ export function normalizeSpec(spec, opts = {}) {
14
+ if (opts.allOf)
15
+ collapseSingleAllOf(spec);
16
+ const hoisted = new Set();
17
+ if (opts.enums) {
18
+ const added = dedupeInlineEnums(spec, opts.enums === true ? {} : opts.enums);
19
+ for (const name of added)
20
+ hoisted.add(name);
21
+ }
22
+ if (opts.objects) {
23
+ const added = dedupeInlineObjects(spec, opts.objects === true ? {} : opts.objects);
24
+ for (const name of added)
25
+ hoisted.add(name);
26
+ }
27
+ if (opts.prune)
28
+ pruneUnusedSchemas(spec, { targets: hoisted });
29
+ return spec;
30
+ }
31
+ /** Every pass except `objects` (kept opt-in for its false-merge risk). */
32
+ export const SAFE_NORMALIZE = {
33
+ allOf: true,
34
+ enums: true,
35
+ prune: true,
36
+ };
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/spec/normalize/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiBhD,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAI,IAAO,EAAE,OAAyB,EAAE;IACnE,IAAI,IAAI,CAAC,KAAK;QAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,iBAAiB,CAC7B,IAAI,EACJ,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CACtC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,mBAAmB,CAC/B,IAAI,EACJ,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAC1C,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,IAAI,CAAC,KAAK;QAAE,kBAAkB,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;CACZ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Reconcile presentation metadata across hits in a hoist group so the
3
+ * canonical body keeps the most informative authored context.
4
+ *
5
+ * Rules: longest non-empty `description` / `title` wins; first
6
+ * non-undefined `example` / `examples` wins; any `deprecated: true`
7
+ * propagates.
8
+ */
9
+ export declare function preserveMetadata(hits: ReadonlyArray<{
10
+ schema: unknown;
11
+ }>, target: Record<string, unknown>): void;
12
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/spec/normalize/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,EACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI,CA8BN"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Reconcile presentation metadata across hits in a hoist group so the
3
+ * canonical body keeps the most informative authored context.
4
+ *
5
+ * Rules: longest non-empty `description` / `title` wins; first
6
+ * non-undefined `example` / `examples` wins; any `deprecated: true`
7
+ * propagates.
8
+ */
9
+ export function preserveMetadata(hits, target) {
10
+ let bestDescription = stringField(target.description);
11
+ let bestTitle = stringField(target.title);
12
+ let example = target.example;
13
+ let examples = target.examples;
14
+ let deprecated = target.deprecated === true;
15
+ for (const hit of hits) {
16
+ if (!hit.schema || typeof hit.schema !== "object")
17
+ continue;
18
+ if (hit.schema === target)
19
+ continue;
20
+ const s = hit.schema;
21
+ const desc = stringField(s.description);
22
+ if (desc && desc.length > bestDescription.length)
23
+ bestDescription = desc;
24
+ const title = stringField(s.title);
25
+ if (title && title.length > bestTitle.length)
26
+ bestTitle = title;
27
+ if (example === undefined && s.example !== undefined)
28
+ example = s.example;
29
+ if (examples === undefined && s.examples !== undefined) {
30
+ examples = s.examples;
31
+ }
32
+ if (s.deprecated === true)
33
+ deprecated = true;
34
+ }
35
+ if (bestDescription)
36
+ target.description = bestDescription;
37
+ if (bestTitle)
38
+ target.title = bestTitle;
39
+ if (example !== undefined)
40
+ target.example = example;
41
+ if (examples !== undefined)
42
+ target.examples = examples;
43
+ if (deprecated)
44
+ target.deprecated = true;
45
+ }
46
+ function stringField(value) {
47
+ return typeof value === "string" ? value : "";
48
+ }
49
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/spec/normalize/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAwC,EACxC,MAA+B;IAE/B,IAAI,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAY,MAAM,CAAC,OAAO,CAAC;IACtC,IAAI,QAAQ,GAAY,MAAM,CAAC,QAAQ,CAAC;IACxC,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC;IAE5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QAC5D,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,SAAS;QACpC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAiC,CAAC;QAEhD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM;YAAE,eAAe,GAAG,IAAI,CAAC;QAEzE,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;YAAE,SAAS,GAAG,KAAK,CAAC;QAEhE,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC1E,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvD,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI;YAAE,UAAU,GAAG,IAAI,CAAC;IAC/C,CAAC;IAED,IAAI,eAAe;QAAE,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC;IAC1D,IAAI,SAAS;QAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;IACxC,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACpD,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACvD,IAAI,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type { Casing, NameTransformer, NamingConfig, NamingRule, } from "@hey-api/shared";
2
+ export { applyNaming, resolveNaming, toCase, } from "@hey-api/shared";
3
+ /**
4
+ * Pick a name not already taken, suffixing `2`, `3`, … on collision.
5
+ * Mirrors hey-api's private `getUniqueComponentName`.
6
+ */
7
+ export declare function uniqueComponentName(base: string, components: Record<string, unknown>, taken?: ReadonlyArray<string> | ReadonlySet<string>): string;
8
+ //# sourceMappingURL=name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name.d.ts","sourceRoot":"","sources":["../../../src/spec/normalize/name.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,eAAe,EACf,YAAY,EACZ,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,aAAa,EACb,MAAM,GACP,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAClD,MAAM,CAMR"}
@@ -0,0 +1,24 @@
1
+ export { applyNaming, resolveNaming, toCase, } from "@hey-api/shared";
2
+ /**
3
+ * Pick a name not already taken, suffixing `2`, `3`, … on collision.
4
+ * Mirrors hey-api's private `getUniqueComponentName`.
5
+ */
6
+ export function uniqueComponentName(base, components, taken) {
7
+ if (!isTaken(base, components, taken))
8
+ return base;
9
+ for (let i = 2;; i++) {
10
+ const candidate = `${base}${i}`;
11
+ if (!isTaken(candidate, components, taken))
12
+ return candidate;
13
+ }
14
+ }
15
+ function isTaken(name, components, taken) {
16
+ if (name in components)
17
+ return true;
18
+ if (!taken)
19
+ return false;
20
+ if (Array.isArray(taken))
21
+ return taken.includes(name);
22
+ return taken.has(name);
23
+ }
24
+ //# sourceMappingURL=name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"name.js","sourceRoot":"","sources":["../../../src/spec/normalize/name.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,WAAW,EACX,aAAa,EACb,MAAM,GACP,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,UAAmC,EACnC,KAAmD;IAEnD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CACd,IAAY,EACZ,UAAmC,EACnC,KAA8D;IAE9D,IAAI,IAAI,IAAI,UAAU;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,OAAQ,KAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC"}