@wildo-ai/saas-technical-doc 1.1.1

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 (216) hide show
  1. package/LICENSE +34 -0
  2. package/dist/esm/.builder.pid +9 -0
  3. package/dist/esm/build/csp-emit.d.ts +9 -0
  4. package/dist/esm/build/csp-emit.d.ts.map +1 -0
  5. package/dist/esm/build/csp-emit.js +8 -0
  6. package/dist/esm/build/csp-emit.js.map +1 -0
  7. package/dist/esm/build/load-materialized-frontend-providers.d.ts +9 -0
  8. package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -0
  9. package/dist/esm/build/load-materialized-frontend-providers.js +9 -0
  10. package/dist/esm/build/load-materialized-frontend-providers.js.map +1 -0
  11. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts +66 -0
  12. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -0
  13. package/dist/esm/companion/application-documentation/application-organization-role-documentation.js +195 -0
  14. package/dist/esm/companion/application-documentation/application-organization-role-documentation.js.map +1 -0
  15. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts +36 -0
  16. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -0
  17. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js +71 -0
  18. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.js.map +1 -0
  19. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +37 -0
  20. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -0
  21. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +1865 -0
  22. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -0
  23. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts +22 -0
  24. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -0
  25. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.js +31 -0
  26. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.js.map +1 -0
  27. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +31 -0
  28. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -0
  29. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +33 -0
  30. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -0
  31. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts +13 -0
  32. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -0
  33. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +93 -0
  34. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -0
  35. package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts +52 -0
  36. package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -0
  37. package/dist/esm/companion/content/application-consumer-documentation-content-loader.js +191 -0
  38. package/dist/esm/companion/content/application-consumer-documentation-content-loader.js.map +1 -0
  39. package/dist/esm/companion/index.d.ts +39 -0
  40. package/dist/esm/companion/index.d.ts.map +1 -0
  41. package/dist/esm/companion/index.js +39 -0
  42. package/dist/esm/companion/index.js.map +1 -0
  43. package/dist/esm/companion/openapi-generator.d.ts +94 -0
  44. package/dist/esm/companion/openapi-generator.d.ts.map +1 -0
  45. package/dist/esm/companion/openapi-generator.js +1562 -0
  46. package/dist/esm/companion/openapi-generator.js.map +1 -0
  47. package/dist/esm/companion/operation-projection.schemas.d.ts +797 -0
  48. package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -0
  49. package/dist/esm/companion/operation-projection.schemas.js +610 -0
  50. package/dist/esm/companion/operation-projection.schemas.js.map +1 -0
  51. package/dist/esm/companion/publish-result.types.d.ts +124 -0
  52. package/dist/esm/companion/publish-result.types.d.ts.map +1 -0
  53. package/dist/esm/companion/publish-result.types.js +28 -0
  54. package/dist/esm/companion/publish-result.types.js.map +1 -0
  55. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts +26 -0
  56. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -0
  57. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.js +63 -0
  58. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.js.map +1 -0
  59. package/dist/esm/companion/rendering/technical-documentation-build-measurement.d.ts +23 -0
  60. package/dist/esm/companion/rendering/technical-documentation-build-measurement.d.ts.map +1 -0
  61. package/dist/esm/companion/rendering/technical-documentation-build-measurement.js +104 -0
  62. package/dist/esm/companion/rendering/technical-documentation-build-measurement.js.map +1 -0
  63. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts +9 -0
  64. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -0
  65. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +421 -0
  66. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -0
  67. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts +72 -0
  68. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -0
  69. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +204 -0
  70. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -0
  71. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts +9 -0
  72. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +1 -0
  73. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +106 -0
  74. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +1 -0
  75. package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.d.ts +43 -0
  76. package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.d.ts.map +1 -0
  77. package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.js +88 -0
  78. package/dist/esm/companion/rendering/technical-documentation-mdx-escaping.js.map +1 -0
  79. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts +7 -0
  80. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -0
  81. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js +51 -0
  82. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.js.map +1 -0
  83. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts +45 -0
  84. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -0
  85. package/dist/esm/companion/rendering/technical-documentation-render-model.js +178 -0
  86. package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -0
  87. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts +3 -0
  88. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -0
  89. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js +49 -0
  90. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js.map +1 -0
  91. package/dist/esm/companion/spec-to-operation-doc.d.ts +176 -0
  92. package/dist/esm/companion/spec-to-operation-doc.d.ts.map +1 -0
  93. package/dist/esm/companion/spec-to-operation-doc.js +326 -0
  94. package/dist/esm/companion/spec-to-operation-doc.js.map +1 -0
  95. package/dist/esm/companion/technical-documentation-asset-path.d.ts +16 -0
  96. package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -0
  97. package/dist/esm/companion/technical-documentation-asset-path.js +19 -0
  98. package/dist/esm/companion/technical-documentation-asset-path.js.map +1 -0
  99. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts +14 -0
  100. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -0
  101. package/dist/esm/companion/technical-documentation-capture-execution-port.js +1 -0
  102. package/dist/esm/companion/technical-documentation-capture-execution-port.js.map +1 -0
  103. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts +25 -0
  104. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -0
  105. package/dist/esm/companion/technical-documentation-diagram-materializer.js +86 -0
  106. package/dist/esm/companion/technical-documentation-diagram-materializer.js.map +1 -0
  107. package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts +17 -0
  108. package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -0
  109. package/dist/esm/companion/technical-documentation-placeholder-materializer.js +63 -0
  110. package/dist/esm/companion/technical-documentation-placeholder-materializer.js.map +1 -0
  111. package/dist/esm/companion/zod-to-openapi.d.ts +67 -0
  112. package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -0
  113. package/dist/esm/companion/zod-to-openapi.js +211 -0
  114. package/dist/esm/companion/zod-to-openapi.js.map +1 -0
  115. package/dist/esm/companion-exports.d.ts +32 -0
  116. package/dist/esm/companion-exports.d.ts.map +1 -0
  117. package/dist/esm/companion-exports.js +32 -0
  118. package/dist/esm/companion-exports.js.map +1 -0
  119. package/dist/esm/config/define-tech-doc-config.d.ts +38 -0
  120. package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -0
  121. package/dist/esm/config/define-tech-doc-config.js +40 -0
  122. package/dist/esm/config/define-tech-doc-config.js.map +1 -0
  123. package/dist/esm/config/index.d.ts +22 -0
  124. package/dist/esm/config/index.d.ts.map +1 -0
  125. package/dist/esm/config/index.js +22 -0
  126. package/dist/esm/config/index.js.map +1 -0
  127. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts +204 -0
  128. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -0
  129. package/dist/esm/config/wildo-tech-doc-config.schemas.js +192 -0
  130. package/dist/esm/config/wildo-tech-doc-config.schemas.js.map +1 -0
  131. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts +82 -0
  132. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -0
  133. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.js +114 -0
  134. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.js.map +1 -0
  135. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +420 -0
  136. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -0
  137. package/dist/esm/content/application-consumer-documentation-content.techdoc.js +9619 -0
  138. package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -0
  139. package/dist/esm/content.exports.d.ts +9 -0
  140. package/dist/esm/content.exports.d.ts.map +1 -0
  141. package/dist/esm/content.exports.js +9 -0
  142. package/dist/esm/content.exports.js.map +1 -0
  143. package/dist/esm/index.d.ts +26 -0
  144. package/dist/esm/index.d.ts.map +1 -0
  145. package/dist/esm/index.js +26 -0
  146. package/dist/esm/index.js.map +1 -0
  147. package/dist/esm/openapi/api-reference-link-index.d.ts +98 -0
  148. package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -0
  149. package/dist/esm/openapi/api-reference-link-index.js +301 -0
  150. package/dist/esm/openapi/api-reference-link-index.js.map +1 -0
  151. package/dist/esm/openapi/api-reference-targets.d.ts +71 -0
  152. package/dist/esm/openapi/api-reference-targets.d.ts.map +1 -0
  153. package/dist/esm/openapi/api-reference-targets.js +114 -0
  154. package/dist/esm/openapi/api-reference-targets.js.map +1 -0
  155. package/dist/esm/openapi/index.d.ts +20 -0
  156. package/dist/esm/openapi/index.d.ts.map +1 -0
  157. package/dist/esm/openapi/index.js +20 -0
  158. package/dist/esm/openapi/index.js.map +1 -0
  159. package/dist/esm/openapi/openapi-generation-output.schemas.d.ts +80 -0
  160. package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -0
  161. package/dist/esm/openapi/openapi-generation-output.schemas.js +76 -0
  162. package/dist/esm/openapi/openapi-generation-output.schemas.js.map +1 -0
  163. package/dist/esm/openapi-reference-model.exports.d.ts +10 -0
  164. package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -0
  165. package/dist/esm/openapi-reference-model.exports.js +10 -0
  166. package/dist/esm/openapi-reference-model.exports.js.map +1 -0
  167. package/dist/esm/runtime/AuthExchangePage.d.ts +84 -0
  168. package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -0
  169. package/dist/esm/runtime/AuthExchangePage.js +188 -0
  170. package/dist/esm/runtime/AuthExchangePage.js.map +1 -0
  171. package/dist/esm/runtime/DocsAuthContext.d.ts +119 -0
  172. package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -0
  173. package/dist/esm/runtime/DocsAuthContext.js +171 -0
  174. package/dist/esm/runtime/DocsAuthContext.js.map +1 -0
  175. package/dist/esm/runtime/decode-jwt-claims.d.ts +39 -0
  176. package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -0
  177. package/dist/esm/runtime/decode-jwt-claims.js +86 -0
  178. package/dist/esm/runtime/decode-jwt-claims.js.map +1 -0
  179. package/dist/esm/runtime/docs-auth-client.d.ts +193 -0
  180. package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -0
  181. package/dist/esm/runtime/docs-auth-client.js +211 -0
  182. package/dist/esm/runtime/docs-auth-client.js.map +1 -0
  183. package/dist/esm/runtime/docs-auth-session.schemas.d.ts +77 -0
  184. package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -0
  185. package/dist/esm/runtime/docs-auth-session.schemas.js +50 -0
  186. package/dist/esm/runtime/docs-auth-session.schemas.js.map +1 -0
  187. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +17 -0
  188. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -0
  189. package/dist/esm/runtime/frontend-provider-registry.techdoc.js +23 -0
  190. package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -0
  191. package/dist/esm/runtime/index.d.ts +57 -0
  192. package/dist/esm/runtime/index.d.ts.map +1 -0
  193. package/dist/esm/runtime/index.js +76 -0
  194. package/dist/esm/runtime/index.js.map +1 -0
  195. package/dist/esm/runtime/openapi-reference-conservation.d.ts +20 -0
  196. package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -0
  197. package/dist/esm/runtime/openapi-reference-conservation.js +102 -0
  198. package/dist/esm/runtime/openapi-reference-conservation.js.map +1 -0
  199. package/dist/esm/runtime/openapi-reference-model.d.ts +224 -0
  200. package/dist/esm/runtime/openapi-reference-model.d.ts.map +1 -0
  201. package/dist/esm/runtime/openapi-reference-model.js +579 -0
  202. package/dist/esm/runtime/openapi-reference-model.js.map +1 -0
  203. package/dist/esm/runtime/openapi-reference-view.d.ts +13 -0
  204. package/dist/esm/runtime/openapi-reference-view.d.ts.map +1 -0
  205. package/dist/esm/runtime/openapi-reference-view.js +284 -0
  206. package/dist/esm/runtime/openapi-reference-view.js.map +1 -0
  207. package/dist/esm/runtime/use-docs-auth-session.d.ts +26 -0
  208. package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -0
  209. package/dist/esm/runtime/use-docs-auth-session.js +34 -0
  210. package/dist/esm/runtime/use-docs-auth-session.js.map +1 -0
  211. package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts +3 -0
  212. package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -0
  213. package/dist/esm/runtime/use-docs-frontend-provider-registry.js +5 -0
  214. package/dist/esm/runtime/use-docs-frontend-provider-registry.js.map +1 -0
  215. package/dist/tsconfig.build.tsbuildinfo +1 -0
  216. package/package.json +117 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-projection.schemas.d.ts","sourceRoot":"","sources":["../../../../src/companion/operation-projection.schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,610 @@
1
+ /**
2
+ * @wildo-package @wildo-ai/saas-technical-doc/companion (input projection)
3
+ *
4
+ * Input shape consumed by the companion-side OpenAPI generator
5
+ * (saas-technical-doc.md Step 3).
6
+ *
7
+ * Why a dedicated projection (and NOT importing `ResourcesRegistry` from
8
+ * `@wildo-ai/saas-models`):
9
+ *
10
+ * - The full `ResourceConfiguration` carries ~40 internal-only fields
11
+ * (factory metadata, repository wiring, validation hooks, frontend
12
+ * presets, lifecycle bindings, …). The OpenAPI generator does NOT need
13
+ * any of them — it needs ONLY operation-level HTTP shape data
14
+ * (method + path + request/response Zod schemas + role binding +
15
+ * primary scope + authentication-mode flags). Coupling the
16
+ * generator to the full type would (a) drag the entire schema graph
17
+ * + decorator framework into the companion bundle, defeating the
18
+ * point of `@wildo-ai/saas-models/public-runtime`; (b) couple test
19
+ * fixtures to dozens of irrelevant fields, making generator unit
20
+ * tests brittle to unrelated framework changes; (c) make the
21
+ * introspection-subprocess hop's wire format depend on the entire
22
+ * framework's type stability.
23
+ *
24
+ * - The introspection subprocess (wonder-todos backend) ALREADY has
25
+ * the resolved `ResourceConfiguration` graph — it's the natural
26
+ * place to flatten it into this minimal projection. The companion
27
+ * process then transforms the projection into YAML without ever
28
+ * needing the framework's resource-config types.
29
+ *
30
+ * - This file re-declares the small subset of enums/literals the
31
+ * projection carries (`ResourceOperationVariantTypeProjection`,
32
+ * `ResourcePrimaryScopeProjection`) rather than importing them from
33
+ * `@wildo-ai/saas-models` so that `engine/saas-technical-doc/companion`
34
+ * does NOT pull the heavy package's root barrel (which boots
35
+ * `initZodDecorators()` — see `saas-models-public-runtime.md` K-3 for
36
+ * the rationale). The projection's enum members MUST stay in
37
+ * one-to-one alignment with `ResourceOperationVariantType` and
38
+ * `ResourcePrimaryScope`; if the source enums grow a new member,
39
+ * update this file in the same commit and rerun the boundary tests.
40
+ *
41
+ * @wildo-boundary
42
+ * This file imports only Zod and the portable technical-documentation
43
+ * contract subpath — no React, no `@wildo-ai/saas-models` root, no
44
+ * decorators. The supported API version deliberately reuses the publication
45
+ * contract's named runtime schema rather than creating a parallel vocabulary.
46
+ */
47
+ import { TechnicalDocumentationSupportedApiVersionSchema } from '@wildo-ai/saas-specifications/technical-documentation';
48
+ import { z } from 'zod';
49
+ import { OpenApiSection } from '../openapi/openapi-generation-output.schemas.js';
50
+ /**
51
+ * Mirror of `@wildo-ai/saas-models` `ResourceOperationVariantType` —
52
+ * narrowed to the two variants the OpenAPI generator emits per K-5
53
+ * (`API_CALL` is the default URL-bearing operation; `API_CALL_WITH_CALLBACK`
54
+ * additionally carries an asynchronous callback URL). Other variants
55
+ * (`CRON_JOB`, `BATCH_JOB`, `INTERNAL_CALL`, `REPOSITORY_ONLY`) are
56
+ * intentionally NOT included — they have no HTTP surface to document.
57
+ *
58
+ * The introspection emitter MUST drop non-API operations BEFORE
59
+ * projecting; the generator additionally re-asserts the variant via
60
+ * Zod parse so a future bug at the projector layer cannot inject
61
+ * non-API ops into an API doc.
62
+ */
63
+ export var OperationProjectionVariantType;
64
+ (function (OperationProjectionVariantType) {
65
+ OperationProjectionVariantType["API_CALL"] = "api_call";
66
+ OperationProjectionVariantType["API_CALL_WITH_CALLBACK"] = "api_call_with_callback";
67
+ })(OperationProjectionVariantType || (OperationProjectionVariantType = {}));
68
+ /**
69
+ * Mirror of `@wildo-ai/saas-models` `ResourcePrimaryScope` — kept
70
+ * complete (4 members) because scope remains part of the documented operation
71
+ * contract even though consumer sectioning is now an explicit separate fact.
72
+ *
73
+ * If `ResourcePrimaryScope` grows a new member upstream, update this
74
+ * enum in the same commit AND extend the audience splitter to either
75
+ * route the new scope into one of the existing buckets or fail-closed
76
+ * with a clear "unsupported scope" error — never silently drop the op.
77
+ */
78
+ export var OperationProjectionPrimaryScope;
79
+ (function (OperationProjectionPrimaryScope) {
80
+ OperationProjectionPrimaryScope["USER_SELF"] = "user_self";
81
+ OperationProjectionPrimaryScope["ORGANIZATIONS"] = "organizations";
82
+ OperationProjectionPrimaryScope["APPLICATION"] = "applications";
83
+ OperationProjectionPrimaryScope["ANONYMOUS"] = "anonymous";
84
+ })(OperationProjectionPrimaryScope || (OperationProjectionPrimaryScope = {}));
85
+ /**
86
+ * Allowed HTTP methods carried on a projected operation. Mirrors the
87
+ * `HttpMethod` enum in `@wildo-ai/saas-models` but kept local for the
88
+ * same boundary reason as the variant + scope enums above.
89
+ *
90
+ * Lowercase string values match the OpenAPI 3.1 path-item keys
91
+ * (`get`, `post`, `put`, `delete`, `patch`) — keeping the projection
92
+ * value verbatim consumable by the YAML emitter avoids one hop of
93
+ * case-translation in the hot path.
94
+ */
95
+ export var OperationProjectionHttpVerb;
96
+ (function (OperationProjectionHttpVerb) {
97
+ OperationProjectionHttpVerb["GET"] = "get";
98
+ OperationProjectionHttpVerb["POST"] = "post";
99
+ OperationProjectionHttpVerb["PUT"] = "put";
100
+ OperationProjectionHttpVerb["DELETE"] = "delete";
101
+ OperationProjectionHttpVerb["PATCH"] = "patch";
102
+ })(OperationProjectionHttpVerb || (OperationProjectionHttpVerb = {}));
103
+ /**
104
+ * Authentication posture resolved from the same role binding the backend
105
+ * enforces. This is intentionally a documentation fact rather than a browser
106
+ * inference: `APP_PUBLIC` and `APP_ANONYMOUS` are access-mode sentinels, while
107
+ * every other role is an authorization requirement.
108
+ */
109
+ export var OperationProjectionAuthenticationMode;
110
+ (function (OperationProjectionAuthenticationMode) {
111
+ OperationProjectionAuthenticationMode["PUBLIC"] = "public";
112
+ OperationProjectionAuthenticationMode["ANONYMOUS_SESSION"] = "anonymous_session";
113
+ OperationProjectionAuthenticationMode["AUTHENTICATED"] = "authenticated";
114
+ OperationProjectionAuthenticationMode["ANONYMOUS_OR_AUTHENTICATED"] = "anonymous_or_authenticated";
115
+ })(OperationProjectionAuthenticationMode || (OperationProjectionAuthenticationMode = {}));
116
+ /**
117
+ * One role requirement as it should be understood by an integrator. `role`
118
+ * remains the exact runtime token; `label` is resolved once at generation time
119
+ * and the explanatory fields come from the application role specification —
120
+ * never from a browser-side naming heuristic.
121
+ */
122
+ export const OperationRoleRequirementSchema = z.strictObject({
123
+ role: z.string().min(1),
124
+ label: z.string().min(1).max(200),
125
+ businessRole: z.string().min(1).max(4000).nullable(),
126
+ authorityBoundary: z.string().min(1).max(4000).nullable(),
127
+ });
128
+ /**
129
+ * Consumer-facing access contract emitted into the operation's `x-wildo`
130
+ * metadata. Its prose is assembled in the introspection subprocess from the
131
+ * authoritative role specifications; the OpenAPI generator and browser only
132
+ * transport and render it.
133
+ */
134
+ export const OperationAccessDocumentationSchema = z.strictObject({
135
+ authenticationMode: z.enum(OperationProjectionAuthenticationMode),
136
+ authenticationSummary: z.string().min(1).max(500),
137
+ roleRequirements: z.array(OperationRoleRequirementSchema),
138
+ });
139
+ /** Versioned identity carried from the resolved HTTP operation into OpenAPI. */
140
+ export const OPENAPI_OPERATION_IDENTITY_CONTRACT_VERSION = 1;
141
+ /** Versioned identity carried by each generated OpenAPI resource tag. */
142
+ export const OPENAPI_RESOURCE_IDENTITY_CONTRACT_VERSION = 1;
143
+ /**
144
+ * The non-editorial identity of one externally exposed HTTP operation.
145
+ *
146
+ * This deliberately excludes `operationKey`: that key exists to create a
147
+ * readable OpenAPI `operationId` and can contain a defensive positional
148
+ * fallback for unusual multi-path configurations. Conservation, generated
149
+ * routes and framework metadata must instead join this stable source tuple.
150
+ */
151
+ export const OpenApiOperationIdentitySchema = z.strictObject({
152
+ contractVersion: z.literal(OPENAPI_OPERATION_IDENTITY_CONTRACT_VERSION),
153
+ resourceRef: z.string().min(1),
154
+ operationFamilyRef: z.string().min(1),
155
+ operationVariantRef: z.string().min(1),
156
+ variantType: z.enum(OperationProjectionVariantType),
157
+ httpVerb: z.enum(OperationProjectionHttpVerb),
158
+ path: z.string().min(1),
159
+ });
160
+ /**
161
+ * Derives stable semantic refs for the resolved operation tuple. This is the
162
+ * sole constructor so the subprocess projector, generator and future browser
163
+ * reader cannot gradually invent incompatible identities.
164
+ */
165
+ export function createOpenApiOperationIdentity(input) {
166
+ const encode = (value) => encodeURIComponent(value);
167
+ const resourceRef = `technical-documentation:resource/${encode(input.resourceIdentifier)}`;
168
+ const operationFamilyRef = `${resourceRef}/operation-family/${encode(input.baseOperationIdentifier)}`;
169
+ const variantSegment = input.variantKey === null ? 'default' : encode(input.variantKey);
170
+ return {
171
+ contractVersion: OPENAPI_OPERATION_IDENTITY_CONTRACT_VERSION,
172
+ resourceRef,
173
+ operationFamilyRef,
174
+ operationVariantRef: `${operationFamilyRef}/variant/${variantSegment}/${input.variantType}/${input.httpVerb}/${encode(input.path)}`,
175
+ variantType: input.variantType,
176
+ httpVerb: input.httpVerb,
177
+ path: input.path,
178
+ };
179
+ }
180
+ /**
181
+ * Single projected operation — the atomic unit consumed by the URL-bearing
182
+ * operation guard and the explicit consumer-section grouping.
183
+ *
184
+ * Field decisions:
185
+ *
186
+ * - `resourceIdentifier` is a free string (NOT typed against
187
+ * `CoreResourceType`) because applications can declare custom
188
+ * resource types beyond the core enum. The generator uses this
189
+ * string as the OpenAPI tag name, so we want the wire format to
190
+ * survive any application-extended vocabulary without a schema
191
+ * bump.
192
+ *
193
+ * - `operationKey` is the framework's canonical operation identifier
194
+ * (e.g. `'CREATE'`, `'LIST'`, `'READ'`, custom-named ops); used
195
+ * verbatim as the OpenAPI `operationId` after a small
196
+ * PascalCase prefix (`<Resource><OperationKey>`). Stable across
197
+ * runs so client-codegen consumers can rely on it.
198
+ *
199
+ * - `httpVerb` and `path` carry the wire-level routing details. The
200
+ * `path` MUST be the OpenAPI-style template path (e.g.
201
+ * `/api/v1/{organizationId}/users/{userId}`), NOT an Express
202
+ * `:userId` form — the projector at the introspection side is
203
+ * responsible for the Express → OpenAPI brace conversion so the
204
+ * generator can pass the value through unchanged.
205
+ *
206
+ * - `roles` is the resolved string list (after enum → string
207
+ * flattening) so the splitter can audience-classify without
208
+ * re-importing the role enums. Empty array is rejected via Zod's
209
+ * `.min(1)` because every operation in the framework MUST declare
210
+ * at least one role binding (the framework's resource-config
211
+ * schema enforces this on the source side; the Zod check here is
212
+ * defense-in-depth).
213
+ *
214
+ * - `requestBodySchema` / `responseBodySchema` carry pre-converted
215
+ * JSON Schema fragments (from `z.toJSONSchema()` at the projector
216
+ * side). The generator does NOT see the source Zod schemas — the
217
+ * projector does the conversion so the generator stays
218
+ * decorator-framework-free (importing a Zod schema graph would
219
+ * pull `initZodDecorators()` for any `@wildo-ai/saas-models`-typed
220
+ * schema).
221
+ *
222
+ * - `summary` and `description` are optional human-readable strings;
223
+ * when omitted, the YAML emitter falls back to the canonical
224
+ * `<HTTP_VERB> <Resource>.<OperationKey>` derivation so the docs
225
+ * site never renders a literal "undefined" title.
226
+ *
227
+ * - `isApiKeyAccessDisabled` is an authentication-mode fact. The
228
+ * introspection projector forwards it verbatim; the generator keeps the
229
+ * operation and omits only its API-key security alternative.
230
+ *
231
+ * - `stepUpAuthentication` is present only when the resolved operation
232
+ * requires a fresh, single-use re-authentication proof. Both values are
233
+ * projected from the framework's named route/header constants so OpenAPI
234
+ * never invents or duplicates the protocol vocabulary.
235
+ *
236
+ * - `acceptsIfMatch` is the resolved optimistic-locking capability of this
237
+ * exact HTTP operation. It is true only for the controller's supported
238
+ * single-resource UPDATE-like lane, including custom operations borrowing
239
+ * UPDATE semantics; the generator uses it to expose the optional header and
240
+ * its framework-owned 400/409 outcomes without resource-level duplication.
241
+ *
242
+ * - `callbackPath` is OPTIONAL and MUST be present iff
243
+ * `variantType === API_CALL_WITH_CALLBACK`. The generator emits an
244
+ * OpenAPI 3.1 `callbacks:` block when set. The schema's
245
+ * `superRefine` enforces this invariant at parse time so the
246
+ * generator's hot path can assume the field is correctly populated.
247
+ */
248
+ export const OperationProjectionSchema = z.strictObject({
249
+ resourceIdentifier: z.string().min(1),
250
+ operationKey: z.string().min(1),
251
+ /**
252
+ * The RAW operation identifier (e.g. `CREATE`, `LIST`, `EXPORT_AUDIT_LOGS`,
253
+ * `ROTATE_TOKEN`) WITHOUT the variant / bulk / multi-path qualifiers that
254
+ * `operationKey` appends. `buildOperationId` needs this to compose a
255
+ * verb-first developer-facing operationId (`createOrganization`): the verb
256
+ * is derived from the base identifier and the resource noun from
257
+ * `resourceIdentifier`, while the qualifiers are `operationKey` with this
258
+ * prefix removed. Carried separately because a base identifier can itself
259
+ * contain `_` (e.g. `EXPORT_AUDIT_LOGS`), so the qualifier boundary cannot be
260
+ * recovered from `operationKey` alone.
261
+ */
262
+ baseOperationIdentifier: z.string().min(1),
263
+ /** Exact runtime variant discriminator. `null` is the canonical default variant. */
264
+ variantKey: z.string().min(1).nullable(),
265
+ variantType: z.enum(OperationProjectionVariantType),
266
+ httpVerb: z.enum(OperationProjectionHttpVerb),
267
+ path: z.string().min(1),
268
+ primaryScope: z.enum(OperationProjectionPrimaryScope),
269
+ /**
270
+ * Consumer-facing documentation section resolved at the source-authority
271
+ * boundary. The OpenAPI generator groups by this explicit fact; it must not
272
+ * reinterpret internal scopes or role strings into product navigation.
273
+ */
274
+ consumerApiSection: z.enum(OpenApiSection),
275
+ /**
276
+ * Stable source identity used for conservation and the strict `x-wildo`
277
+ * extension. It is not a human-facing operationId and never depends on
278
+ * iteration order or display prose.
279
+ */
280
+ identity: OpenApiOperationIdentitySchema,
281
+ // Resolved role list (enum → string). MAY be empty: an operation with no
282
+ // declared roles is a real, intentional runtime state — an open / no-specific-
283
+ // role-gate endpoint (e.g. the core `users` LIST: "app users can list users").
284
+ // Each entry must be a non-empty string, but the array itself can be `[]`. The
285
+ // source classifier treats an empty role set as normal API, not application
286
+ // administration. NOT `.min(1)` — not every engine endpoint is role-gated.
287
+ roles: z.array(z.string().min(1)),
288
+ /**
289
+ * Source-resolved consumer access explanation. This must remain aligned with
290
+ * `roles`: the projector is the only place allowed to interpret access-mode
291
+ * sentinels and attach the app's role-specification prose.
292
+ */
293
+ access: OperationAccessDocumentationSchema,
294
+ isApiKeyAccessDisabled: z.boolean(),
295
+ stepUpAuthentication: z.strictObject({
296
+ headerName: z.string().min(1),
297
+ tokenEndpointPath: z.string().min(1),
298
+ }).optional(),
299
+ acceptsIfMatch: z.boolean(),
300
+ summary: z.string().min(1).max(200).optional(),
301
+ description: z.string().min(1).max(2000).optional(),
302
+ /**
303
+ * JSON-Schema fragment representing the request body (or query for
304
+ * GET / DELETE if the projector chose to flatten query parameters
305
+ * into a single schema). The exact shape is whatever
306
+ * `z.toJSONSchema()` emits. For POST / PUT / PATCH style verbs the
307
+ * generator passes it through unchanged into the OpenAPI
308
+ * `requestBody.content.application/json.schema` slot. For GET /
309
+ * DELETE the generator expects an object-shaped schema and explodes
310
+ * the top-level properties into `parameters[]` entries with
311
+ * `in: 'query'`. `null` means "no request input".
312
+ */
313
+ requestBodySchema: z.unknown().nullable(),
314
+ /**
315
+ * JSON-Schema fragment representing the 2xx response body. `null`
316
+ * means "no body" → emitted as a 204-style `responses` entry with
317
+ * description only. `unknown` to stay format-agnostic; the
318
+ * projector is responsible for emitting valid JSON Schema.
319
+ */
320
+ responseBodySchema: z.unknown().nullable(),
321
+ /**
322
+ * Paginated-collection query contract — present iff the operation is a
323
+ * framework paginated collection operation (a `LIST` / `SEARCH` core
324
+ * operation, or a custom operation borrowing one via
325
+ * `resourceOperationLike`). Those operations universally accept the flat
326
+ * `page` / `limit` / `sort` query parameters and return the
327
+ * `{ data, pagination }` envelope (the backend controller forces
328
+ * `paginated: true` for every HTTP LIST/SEARCH dispatch), but NONE of that
329
+ * appears in the operation's request DTO — without this block the generator
330
+ * would document a paginated endpoint with no way to page it.
331
+ *
332
+ * The PROJECTOR resolves the per-operation values (it sees the resolved
333
+ * runtime operation); the GENERATOR owns the universal parameter shapes and
334
+ * the framework-constant defaults (`page` defaults to 1, `limit` to 20 —
335
+ * mirrors of the repository `_doList` defaults). Split chosen so this wire
336
+ * schema stays framework-decoupled: the projection carries FACTS, not
337
+ * OpenAPI fragments.
338
+ *
339
+ * - `maxLimit` — largest accepted `limit` value. Resolved from the
340
+ * operation's `maxPaginatedResultPerPageLimit ?? 50` (the same fallback
341
+ * the frontend HTTP client clamps with; only SEARCH-like operations can
342
+ * author a different cap today).
343
+ * - `sortableFields` — the operation's declared `sortFields` allow-list.
344
+ * Non-empty: only these fields may be named in `sort` (unrecognised
345
+ * fields are silently ignored by the backend validator) and the default
346
+ * ordering is the first entry, descending. Empty: the backend applies
347
+ * any requested field verbatim and defaults to `createdAt:desc`.
348
+ */
349
+ pagination: z.strictObject({
350
+ maxLimit: z.number().int().min(1),
351
+ sortableFields: z.array(z.string().min(1)),
352
+ }).optional(),
353
+ /**
354
+ * Path of the asynchronous callback (`API_CALL_WITH_CALLBACK` only).
355
+ * The generator turns this into an OpenAPI `callbacks:` block
356
+ * referencing the same `responseBodySchema`.
357
+ */
358
+ callbackPath: z.string().min(1).optional(),
359
+ /**
360
+ * Tier-3 authored HTTP documentation, projected from the resource
361
+ * specification's operation overlay. All optional; when present the
362
+ * generator emits real `responses` (success + error), request/response
363
+ * `examples`, an `x-idempotent` extension, and a rate-limit note instead of
364
+ * the default single `200`/`204`. `code` / `forStatus` are OpenAPI status
365
+ * keys (`'200'`, `'404'`, …).
366
+ */
367
+ responseStatuses: z.array(z.strictObject({
368
+ code: z.string().min(1),
369
+ meaning: z.string().min(1),
370
+ })).optional(),
371
+ errorScenarios: z.array(z.strictObject({
372
+ code: z.string().min(1),
373
+ when: z.string().min(1),
374
+ errorCode: z.string().min(1).optional(),
375
+ })).optional(),
376
+ idempotent: z.boolean().optional(),
377
+ rateLimitNote: z.string().min(1).optional(),
378
+ examples: z.array(z.strictObject({
379
+ title: z.string().min(1),
380
+ request: z.unknown().optional(),
381
+ response: z.unknown().optional(),
382
+ forStatus: z.string().min(1).optional(),
383
+ })).optional(),
384
+ }).superRefine((projection, ctx) => {
385
+ if (projection.identity.variantType !== projection.variantType
386
+ || projection.identity.httpVerb !== projection.httpVerb
387
+ || projection.identity.path !== projection.path) {
388
+ ctx.addIssue({
389
+ code: 'custom',
390
+ path: ['identity'],
391
+ message: 'OperationProjection identity must exactly mirror the resolved variant type, HTTP verb and path.',
392
+ });
393
+ }
394
+ if (projection.variantType === OperationProjectionVariantType.API_CALL_WITH_CALLBACK) {
395
+ if (projection.callbackPath === undefined) {
396
+ ctx.addIssue({
397
+ code: 'custom',
398
+ path: ['callbackPath'],
399
+ message: `OperationProjection for '${projection.resourceIdentifier}.${projection.operationKey}' ` +
400
+ `has variantType=${OperationProjectionVariantType.API_CALL_WITH_CALLBACK} but no callbackPath. ` +
401
+ `The introspection projector MUST populate callbackPath for callback variants — without it the generator ` +
402
+ `cannot emit an OpenAPI \`callbacks:\` block, which would silently produce a misleading doc that ` +
403
+ `looks like a regular synchronous endpoint.`,
404
+ });
405
+ }
406
+ }
407
+ else if (projection.callbackPath !== undefined) {
408
+ ctx.addIssue({
409
+ code: 'custom',
410
+ path: ['callbackPath'],
411
+ message: `OperationProjection for '${projection.resourceIdentifier}.${projection.operationKey}' ` +
412
+ `has callbackPath but variantType=${projection.variantType} (expected ${OperationProjectionVariantType.API_CALL_WITH_CALLBACK}). ` +
413
+ `Reject at parse time so the projector bug surfaces immediately rather than producing a doc with phantom callback metadata.`,
414
+ });
415
+ }
416
+ });
417
+ /**
418
+ * Closed projection vocabulary mirroring the relationship cardinalities in
419
+ * `@wildo-ai/saas-models`. It deliberately lives in the narrow IPC/OpenAPI
420
+ * contract so the generator and browser never need to import the full resource
421
+ * registry just to render a resource's public relationship semantics.
422
+ */
423
+ export var ResourceRelationshipDocumentationCardinality;
424
+ (function (ResourceRelationshipDocumentationCardinality) {
425
+ ResourceRelationshipDocumentationCardinality["ONE"] = "one";
426
+ ResourceRelationshipDocumentationCardinality["ZERO_OR_ONE"] = "zero_or_one";
427
+ ResourceRelationshipDocumentationCardinality["ONE_OR_MANY"] = "one_or_many";
428
+ ResourceRelationshipDocumentationCardinality["MANY"] = "many";
429
+ })(ResourceRelationshipDocumentationCardinality || (ResourceRelationshipDocumentationCardinality = {}));
430
+ /** The three developer-authored relationship meanings projected into OpenAPI. */
431
+ export var ResourceRelationshipDocumentationNature;
432
+ (function (ResourceRelationshipDocumentationNature) {
433
+ ResourceRelationshipDocumentationNature["COMPOSITION"] = "composition";
434
+ ResourceRelationshipDocumentationNature["REFERENCE"] = "reference";
435
+ ResourceRelationshipDocumentationNature["ASSOCIATION"] = "association";
436
+ })(ResourceRelationshipDocumentationNature || (ResourceRelationshipDocumentationNature = {}));
437
+ /** The compiled lifecycle dependency of a relationship, not a presentation hint. */
438
+ export var ResourceRelationshipDocumentationLifecycleModel;
439
+ (function (ResourceRelationshipDocumentationLifecycleModel) {
440
+ ResourceRelationshipDocumentationLifecycleModel["DEPENDENT"] = "dependent";
441
+ ResourceRelationshipDocumentationLifecycleModel["INDEPENDENT"] = "independent";
442
+ ResourceRelationshipDocumentationLifecycleModel["LINK_ONLY"] = "link_only";
443
+ })(ResourceRelationshipDocumentationLifecycleModel || (ResourceRelationshipDocumentationLifecycleModel = {}));
444
+ /** Execution timing for an explicitly configured parent-delete lifecycle. */
445
+ export var ResourceRelationshipDocumentationDeleteMode;
446
+ (function (ResourceRelationshipDocumentationDeleteMode) {
447
+ ResourceRelationshipDocumentationDeleteMode["IMMEDIATE"] = "immediate";
448
+ ResourceRelationshipDocumentationDeleteMode["LAZY"] = "lazy";
449
+ })(ResourceRelationshipDocumentationDeleteMode || (ResourceRelationshipDocumentationDeleteMode = {}));
450
+ /** Effect of an explicitly configured parent-delete lifecycle. */
451
+ export var ResourceRelationshipDocumentationDeleteStrategy;
452
+ (function (ResourceRelationshipDocumentationDeleteStrategy) {
453
+ ResourceRelationshipDocumentationDeleteStrategy["DELETE"] = "delete";
454
+ ResourceRelationshipDocumentationDeleteStrategy["IMPERSONALIZE_AND_RETAIN"] = "impersonalize_and_retain";
455
+ })(ResourceRelationshipDocumentationDeleteStrategy || (ResourceRelationshipDocumentationDeleteStrategy = {}));
456
+ /**
457
+ * One relationship fact from the perspective of a resource OpenAPI tag.
458
+ *
459
+ * `relatedResourceName` and the two cardinalities are deliberately symmetric:
460
+ * resource configurations include both ordinary parent → child relationships
461
+ * and FK-reference declarations, so this public contract must not guess an
462
+ * ownership direction from declaration order. `lifecycleModel` and the
463
+ * optional `onParentDelete` policy carry the framework's already-resolved
464
+ * lifecycle truth without exposing registry implementation details.
465
+ */
466
+ export const ResourceRelationshipDocumentationSchema = z.strictObject({
467
+ relatedResourceName: z.string().min(1),
468
+ /** Resolved FK identity when the relationship is represented by a field. */
469
+ foreignKeyField: z.string().min(1).optional(),
470
+ resourceCardinality: z.enum(ResourceRelationshipDocumentationCardinality),
471
+ relatedResourceCardinality: z.enum(ResourceRelationshipDocumentationCardinality),
472
+ nature: z.enum(ResourceRelationshipDocumentationNature),
473
+ lifecycleModel: z.enum(ResourceRelationshipDocumentationLifecycleModel),
474
+ onParentDelete: z.strictObject({
475
+ enabled: z.boolean(),
476
+ mode: z.enum(ResourceRelationshipDocumentationDeleteMode),
477
+ strategy: z.enum(ResourceRelationshipDocumentationDeleteStrategy),
478
+ maxDepth: z.number().int().min(0),
479
+ }).optional(),
480
+ });
481
+ /**
482
+ * A source-declared grouping for resources in one consumer API reference.
483
+ *
484
+ * API resource categories are navigation meaning, not a renderer inference.
485
+ * An application declares the category once in `wildo.tech-doc.config.ts`; the
486
+ * companion attaches it to the corresponding resource tag and the generator
487
+ * transports the fact through strict OpenAPI metadata. The identifier is
488
+ * deliberately application-defined: different products can have genuinely
489
+ * different business domains while still using the same renderer.
490
+ */
491
+ export const ApiReferenceResourceCategorySchema = z.strictObject({
492
+ /** Stable, readable public identity used in API-reference fragments. */
493
+ id: z.string().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/).max(100),
494
+ /** Consumer-facing category label displayed by the renderer. */
495
+ label: z.string().min(1).max(200),
496
+ /** Optional category orientation supplied by the application, never React. */
497
+ description: z.string().min(1).max(2000).optional(),
498
+ });
499
+ /**
500
+ * Optional per-resource OpenAPI tag descriptor (specification + registry enrichment).
501
+ *
502
+ * The generator groups operations under a tag named after the resource
503
+ * identifier. Each emitted OpenAPI tag has a strict `x-wildo` resource identity;
504
+ * this descriptor enriches it with its specification-owned purpose/lifecycle
505
+ * prose and the compiled relationship facts from the resolved resource graph.
506
+ */
507
+ export const ResourceTagSchema = z.strictObject({
508
+ /** Must equal the `resourceIdentifier` the generator derives the tag from. */
509
+ name: z.string().min(1),
510
+ /** Business-purpose prose for the resource group. */
511
+ description: z.string().min(1).max(2000).optional(),
512
+ /** Specification-owned explanation of how this resource changes over time. */
513
+ lifecycleRole: z.string().min(1).max(4000).optional(),
514
+ /** Compiled relationship facts relevant to this resource. */
515
+ relationships: z.array(ResourceRelationshipDocumentationSchema).optional(),
516
+ /** Explicit application-owned API-reference navigation grouping. */
517
+ category: ApiReferenceResourceCategorySchema.optional(),
518
+ });
519
+ /**
520
+ * One OpenAPI `servers[]` entry — a base URL the API is reachable at, plus an
521
+ * optional human label. **App-enriched**: deployment URLs are an
522
+ * application/environment concern (the framework cannot know an app's prod
523
+ * domain), so they are authored on `WildoTechnicalDocConfig.apiServers` and
524
+ * threaded into `OpenApiGenerationInput.servers`. The shared shape lives here
525
+ * (the boundary-clean, zod-only module the generator consumes); the config
526
+ * schema imports it so the two never drift.
527
+ */
528
+ export const OpenApiServerSchema = z.strictObject({
529
+ /**
530
+ * Base URL — the bare ORIGIN the API is served from, e.g.
531
+ * `http://localhost:4241` or `https://api.example.com`. Do NOT append the
532
+ * `/api/v1` mount: the generated operation `paths` are already mount-prefixed
533
+ * (`/api/v1/...`), and the effective request URL is `server.url` + path — so
534
+ * including the mount here would DOUBLE it (`…/api/v1/api/v1/...`).
535
+ */
536
+ url: z.string().min(1),
537
+ /** Optional human label shown in the docs server picker (e.g. "Production"). */
538
+ description: z.string().min(1).max(200).optional(),
539
+ });
540
+ /**
541
+ * Top-level wire format consumed by the OpenAPI generator. Wrapped
542
+ * in an object so the projector can attach metadata (app slug, build
543
+ * timestamp, framework version) without a schema-shape break later.
544
+ */
545
+ export const OpenApiGenerationInputSchema = z.strictObject({
546
+ /**
547
+ * App slug from `WildoSaasConfig.slug`. Surfaces in the generated
548
+ * `openapi.info.title` so a
549
+ * multi-app generation run can be disambiguated. Free-string
550
+ * (no validation against `WildoSaasConfigSchema.slug` regex) because
551
+ * the generator should not gate on the same constraint twice; the
552
+ * `defineSaasConfig` parser already enforced the shape at author time.
553
+ */
554
+ appSlug: z.string().min(1),
555
+ /**
556
+ * App display name from `WildoSaasConfig.displayName` — used as the
557
+ * default base title in the generated `openapi.info.title`. The
558
+ * companion route concatenates it with the section name
559
+ * (`"Wonder Todos API reference"`).
560
+ */
561
+ appDisplayName: z.string().min(1),
562
+ /**
563
+ * Optional public marketing title from `WildoSaasConfig.technicalDoc.publicMarketingTitle`.
564
+ * When present, replaces `appDisplayName` in the generated title so
565
+ * the OpenAPI docs match the docs site landing page.
566
+ */
567
+ publicMarketingTitle: z.string().min(1).max(200).optional(),
568
+ /** Exact supported public API contract release surfaced in `openapi.info.version`. */
569
+ supportedApiVersion: TechnicalDocumentationSupportedApiVersionSchema,
570
+ /**
571
+ * Flat list of all URL-bearing operation projections. The projector includes
572
+ * every exposed operation and resolves its consumer section explicitly; the
573
+ * generator validates, groups and renders without eligibility inference.
574
+ */
575
+ operations: z.array(OperationProjectionSchema),
576
+ /**
577
+ * JSON Schema for the canonical framework HTTP error envelope. The
578
+ * subprocess converts the same `ErrorResponseSchema` the backend serializes;
579
+ * the generator registers it once as `components.schemas.ErrorResponse` and
580
+ * references it from every documented non-success response. Keeping this
581
+ * here makes the OpenAPI document an exact projection of the runtime wire
582
+ * contract rather than a renderer-owned approximation.
583
+ */
584
+ errorResponseSchema: z.unknown(),
585
+ /**
586
+ * Optional resource → tag-description descriptors. The generator emits each
587
+ * one as an OpenAPI top-level `tags[].description` for the tags it derives
588
+ * from a section's operations; resources without a descriptor still get a
589
+ * bare `{ name }` tag. Order-independent (the generator looks up by `name`).
590
+ */
591
+ resourceTags: z.array(ResourceTagSchema).optional(),
592
+ /**
593
+ * Optional OpenAPI `servers[]` — the base URLs the API is reachable at.
594
+ * App-enriched via `WildoTechnicalDocConfig.apiServers` (deployment URLs are
595
+ * application/environment knowledge, not framework knowledge). When omitted
596
+ * the generator emits no `servers` block (back-compatible with the
597
+ * pre-servers output). Each entry is `{ url, description? }`.
598
+ */
599
+ servers: z.array(OpenApiServerSchema).optional(),
600
+ /**
601
+ * Optional app-authored markdown intro for the API reference landing page,
602
+ * from `WildoTechnicalDocConfig.apiOverview`. The generator PREPENDS it to the
603
+ * framework-universal "## API conventions" block (auth / pagination /
604
+ * idempotency / errors — which it always emits) to form `info.description`.
605
+ * App enrichment: the conventions are framework knowledge; the overview is the
606
+ * app's own framing.
607
+ */
608
+ apiOverview: z.string().min(1).max(8000).optional(),
609
+ });
610
+ //# sourceMappingURL=operation-projection.schemas.js.map