@wildo-ai/saas-technical-doc 1.1.2 → 1.1.4

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 (130) hide show
  1. package/dist/esm/build/csp-emit.d.ts.map +1 -1
  2. package/dist/esm/build/load-materialized-frontend-providers.d.ts.map +1 -1
  3. package/dist/esm/companion/application-documentation/application-administration-documentation.d.ts.map +1 -1
  4. package/dist/esm/companion/application-documentation/application-administration-documentation.js.map +1 -1
  5. package/dist/esm/companion/application-documentation/application-authentication-documentation.d.ts.map +1 -1
  6. package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts +25 -1
  7. package/dist/esm/companion/application-documentation/application-connection-documentation.d.ts.map +1 -1
  8. package/dist/esm/companion/application-documentation/application-connection-documentation.js +28 -1
  9. package/dist/esm/companion/application-documentation/application-connection-documentation.js.map +1 -1
  10. package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts +133 -0
  11. package/dist/esm/companion/application-documentation/application-domain-documentation.d.ts.map +1 -0
  12. package/dist/esm/companion/application-documentation/application-domain-documentation.js +243 -0
  13. package/dist/esm/companion/application-documentation/application-domain-documentation.js.map +1 -0
  14. package/dist/esm/companion/application-documentation/application-integration-documentation.d.ts.map +1 -1
  15. package/dist/esm/companion/application-documentation/application-integration-documentation.js +23 -0
  16. package/dist/esm/companion/application-documentation/application-integration-documentation.js.map +1 -1
  17. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts +30 -0
  18. package/dist/esm/companion/application-documentation/application-organization-role-documentation.d.ts.map +1 -1
  19. package/dist/esm/companion/application-documentation/application-organization-role-documentation.js +38 -0
  20. package/dist/esm/companion/application-documentation/application-organization-role-documentation.js.map +1 -1
  21. package/dist/esm/companion/application-documentation/application-organization-unit-resource-documentation.d.ts.map +1 -1
  22. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts +61 -1
  23. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.d.ts.map +1 -1
  24. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js +255 -218
  25. package/dist/esm/companion/application-documentation/technical-documentation-engine-content-bundle.js.map +1 -1
  26. package/dist/esm/companion/application-documentation/technical-documentation-operational-evidence.d.ts.map +1 -1
  27. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts +2 -0
  28. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.d.ts.map +1 -1
  29. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js +1 -0
  30. package/dist/esm/companion/application-documentation/technical-documentation-private-derivation.js.map +1 -1
  31. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.d.ts.map +1 -1
  32. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js +1 -1
  33. package/dist/esm/companion/application-documentation/technical-documentation-publication-policy.js.map +1 -1
  34. package/dist/esm/companion/content/application-consumer-documentation-content-loader.d.ts.map +1 -1
  35. package/dist/esm/companion/index.d.ts +2 -1
  36. package/dist/esm/companion/index.d.ts.map +1 -1
  37. package/dist/esm/companion/index.js +2 -1
  38. package/dist/esm/companion/index.js.map +1 -1
  39. package/dist/esm/companion/manual-controller-route-projection.d.ts +112 -0
  40. package/dist/esm/companion/manual-controller-route-projection.d.ts.map +1 -0
  41. package/dist/esm/companion/manual-controller-route-projection.js +249 -0
  42. package/dist/esm/companion/manual-controller-route-projection.js.map +1 -0
  43. package/dist/esm/companion/openapi-generator.d.ts +16 -0
  44. package/dist/esm/companion/openapi-generator.d.ts.map +1 -1
  45. package/dist/esm/companion/openapi-generator.js +493 -26
  46. package/dist/esm/companion/openapi-generator.js.map +1 -1
  47. package/dist/esm/companion/operation-projection.schemas.d.ts +44 -0
  48. package/dist/esm/companion/operation-projection.schemas.d.ts.map +1 -1
  49. package/dist/esm/companion/operation-projection.schemas.js +37 -0
  50. package/dist/esm/companion/operation-projection.schemas.js.map +1 -1
  51. package/dist/esm/companion/publish-result.types.d.ts +37 -4
  52. package/dist/esm/companion/publish-result.types.d.ts.map +1 -1
  53. package/dist/esm/companion/publish-result.types.js.map +1 -1
  54. package/dist/esm/companion/rendering/technical-documentation-authorized-bundle-reader.d.ts.map +1 -1
  55. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts +7 -1
  56. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.d.ts.map +1 -1
  57. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js +34 -18
  58. package/dist/esm/companion/rendering/technical-documentation-docusaurus-renderer.js.map +1 -1
  59. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.d.ts.map +1 -1
  60. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js +8 -1
  61. package/dist/esm/companion/rendering/technical-documentation-managed-tree-validator.js.map +1 -1
  62. package/dist/esm/companion/rendering/technical-documentation-openapi-renderer.d.ts.map +1 -1
  63. package/dist/esm/companion/rendering/technical-documentation-render-model.d.ts.map +1 -1
  64. package/dist/esm/companion/rendering/technical-documentation-render-model.js +30 -13
  65. package/dist/esm/companion/rendering/technical-documentation-render-model.js.map +1 -1
  66. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts +10 -0
  67. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.d.ts.map +1 -1
  68. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js +10 -15
  69. package/dist/esm/companion/rendering/technical-documentation-search-index-renderer.js.map +1 -1
  70. package/dist/esm/companion/technical-documentation-asset-path.d.ts.map +1 -1
  71. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts +27 -1
  72. package/dist/esm/companion/technical-documentation-capture-execution-port.d.ts.map +1 -1
  73. package/dist/esm/companion/technical-documentation-capture-execution-port.js.map +1 -1
  74. package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts +33 -0
  75. package/dist/esm/companion/technical-documentation-diagram-definitions.d.ts.map +1 -0
  76. package/dist/esm/companion/technical-documentation-diagram-definitions.js +54 -0
  77. package/dist/esm/companion/technical-documentation-diagram-definitions.js.map +1 -0
  78. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts +10 -18
  79. package/dist/esm/companion/technical-documentation-diagram-materializer.d.ts.map +1 -1
  80. package/dist/esm/companion/technical-documentation-diagram-materializer.js +9 -39
  81. package/dist/esm/companion/technical-documentation-diagram-materializer.js.map +1 -1
  82. package/dist/esm/companion/technical-documentation-placeholder-materializer.d.ts.map +1 -1
  83. package/dist/esm/companion/zod-to-openapi.d.ts.map +1 -1
  84. package/dist/esm/companion-exports.d.ts.map +1 -1
  85. package/dist/esm/config/define-tech-doc-config.d.ts.map +1 -1
  86. package/dist/esm/config/index.d.ts.map +1 -1
  87. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts +8 -4
  88. package/dist/esm/config/wildo-tech-doc-config.schemas.d.ts.map +1 -1
  89. package/dist/esm/config/wildo-tech-doc-config.schemas.js +8 -4
  90. package/dist/esm/config/wildo-tech-doc-config.schemas.js.map +1 -1
  91. package/dist/esm/content/application-consumer-documentation-content-manifest.schemas.d.ts.map +1 -1
  92. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts +42 -64
  93. package/dist/esm/content/application-consumer-documentation-content.techdoc.d.ts.map +1 -1
  94. package/dist/esm/content/application-consumer-documentation-content.techdoc.js +164 -925
  95. package/dist/esm/content/application-consumer-documentation-content.techdoc.js.map +1 -1
  96. package/dist/esm/content.exports.d.ts.map +1 -1
  97. package/dist/esm/index.d.ts.map +1 -1
  98. package/dist/esm/openapi/api-reference-link-index.d.ts.map +1 -1
  99. package/dist/esm/openapi/index.d.ts.map +1 -1
  100. package/dist/esm/openapi/openapi-generation-output.schemas.d.ts.map +1 -1
  101. package/dist/esm/openapi-reference-model.exports.d.ts.map +1 -1
  102. package/dist/esm/runtime/AuthExchangePage.d.ts.map +1 -1
  103. package/dist/esm/runtime/DocsAuthContext.d.ts +16 -1
  104. package/dist/esm/runtime/DocsAuthContext.d.ts.map +1 -1
  105. package/dist/esm/runtime/DocsAuthContext.js +18 -2
  106. package/dist/esm/runtime/DocsAuthContext.js.map +1 -1
  107. package/dist/esm/runtime/decode-jwt-claims.d.ts.map +1 -1
  108. package/dist/esm/runtime/docs-auth-client.d.ts.map +1 -1
  109. package/dist/esm/runtime/docs-auth-session.schemas.d.ts.map +1 -1
  110. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts +35 -13
  111. package/dist/esm/runtime/frontend-provider-registry.techdoc.d.ts.map +1 -1
  112. package/dist/esm/runtime/frontend-provider-registry.techdoc.js +28 -19
  113. package/dist/esm/runtime/frontend-provider-registry.techdoc.js.map +1 -1
  114. package/dist/esm/runtime/index.d.ts +1 -0
  115. package/dist/esm/runtime/index.d.ts.map +1 -1
  116. package/dist/esm/runtime/index.js +1 -0
  117. package/dist/esm/runtime/index.js.map +1 -1
  118. package/dist/esm/runtime/openapi-reference-conservation.d.ts.map +1 -1
  119. package/dist/esm/runtime/use-docs-auth-session.d.ts.map +1 -1
  120. package/dist/esm/runtime/use-docs-frontend-provider-registry.d.ts.map +1 -1
  121. package/dist/esm/runtime/use-docs-provider-sdks.d.ts +21 -0
  122. package/dist/esm/runtime/use-docs-provider-sdks.d.ts.map +1 -0
  123. package/dist/esm/runtime/use-docs-provider-sdks.js +49 -0
  124. package/dist/esm/runtime/use-docs-provider-sdks.js.map +1 -0
  125. package/dist/tsconfig.build.tsbuildinfo +1 -1
  126. package/package.json +6 -5
  127. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts +0 -9
  128. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.d.ts.map +0 -1
  129. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js +0 -111
  130. package/dist/esm/companion/rendering/technical-documentation-markdown-renderer.js.map +0 -1
@@ -7,7 +7,33 @@ export interface TechnicalDocumentationCaptureExecutionResult {
7
7
  readonly receipt: TechnicalDocumentationCaptureReceiptV1;
8
8
  readonly outputBytes: Uint8Array;
9
9
  }
10
- /** Production-neutral execution port implemented by the Node-only Playwright capture package. */
10
+ /**
11
+ * Production-neutral execution port implemented by the Node-only Playwright capture package.
12
+ *
13
+ * ## Nothing in this repository injects an implementation, and that is a DECISION
14
+ *
15
+ * `@wildo-ai/technical-documentation-capture` implements this port, is built, and is tested in CI —
16
+ * and no package declares a dependency on it. Read as an orphan that is an oversight; it is not.
17
+ *
18
+ * - **It carries Playwright.** The companion is delivered as a dist artifact into every generated
19
+ * application, so wiring the implementation there would put a browser download into every
20
+ * application that never captures anything.
21
+ * `technical-documentation-capture-dependency-closure.test.ts` pins the quarantine from the other
22
+ * side: the package must stay absent from every engine and generated-application runtime manifest.
23
+ * - **The port is the cheap half.** A capture needs six APPLICATION-owned bindings
24
+ * (`TechnicalDocumentationPlaywrightCaptureBindings`): a base URL, a semantic-target path, an
25
+ * authenticated storage state, a landmark, a font profile and an allowed-origin set. That is a
26
+ * live stack, a provisioned tenant and a logged-in session — an environment, not an import.
27
+ *
28
+ * So an unavailable capture SKIPS rather than blocks: the pilot assets resolver ships a PLACEHOLDER
29
+ * for a `PRODUCT_SCREENSHOT`/`PLAYWRIGHT_CAPTURE` request, the asset stays REQUIRED, and whether
30
+ * provisional imagery may actually ship is decided at publication by the environment
31
+ * (`--refuse-provisional-assets`), never here. Framework-owned figures do not depend on any of this
32
+ * — a `DIAGRAM`/`DETERMINISTIC_RENDER` request materializes real SVG bytes with no browser at all.
33
+ *
34
+ * When an application does bind a capture, it constructs the implementation itself and hands it in.
35
+ * That is the seam this interface exists for; do not "fix" the missing dependency by adding one.
36
+ */
11
37
  export interface TechnicalDocumentationCaptureExecutionPort {
12
38
  execute(request: TechnicalDocumentationCaptureExecutionRequestV1): Promise<TechnicalDocumentationCaptureExecutionResult>;
13
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-capture-execution-port.d.ts","sourceRoot":"","sources":["../../../../src/companion/technical-documentation-capture-execution-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,+CAA+C,EAC/C,sCAAsC,EACvC,MAAM,uDAAuD,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,4CAA4C;IAC3D,QAAQ,CAAC,OAAO,EAAE,sCAAsC,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;CAClC;AAED,iGAAiG;AACjG,MAAM,WAAW,0CAA0C;IACzD,OAAO,CAAC,OAAO,EAAE,+CAA+C,GAAG,OAAO,CAAC,4CAA4C,CAAC,CAAC;CAC1H"}
1
+ {"version":3,"file":"technical-documentation-capture-execution-port.d.ts","sourceRoot":"","sources":["../../../src/companion/technical-documentation-capture-execution-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,+CAA+C,EAC/C,sCAAsC,EACvC,MAAM,uDAAuD,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,4CAA4C;IAC3D,QAAQ,CAAC,OAAO,EAAE,sCAAsC,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,0CAA0C;IACzD,OAAO,CAAC,OAAO,EAAE,+CAA+C,GAAG,OAAO,CAAC,4CAA4C,CAAC,CAAC;CAC1H"}
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-capture-execution-port.js","sourceRoot":"","sources":["../../../../src/companion/technical-documentation-capture-execution-port.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n TechnicalDocumentationCaptureExecutionRequestV1,\n TechnicalDocumentationCaptureReceiptV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\n/**\n * Result returned before the application-owned publication transaction writes any byte. Keeping bytes in memory at this seam prevents the reusable capture\n * implementation from choosing an application output root or bypassing complete-tree staging.\n */\nexport interface TechnicalDocumentationCaptureExecutionResult {\n readonly receipt: TechnicalDocumentationCaptureReceiptV1;\n readonly outputBytes: Uint8Array;\n}\n\n/** Production-neutral execution port implemented by the Node-only Playwright capture package. */\nexport interface TechnicalDocumentationCaptureExecutionPort {\n execute(request: TechnicalDocumentationCaptureExecutionRequestV1): Promise<TechnicalDocumentationCaptureExecutionResult>;\n}\n"]}
1
+ {"version":3,"file":"technical-documentation-capture-execution-port.js","sourceRoot":"","sources":["../../../src/companion/technical-documentation-capture-execution-port.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n TechnicalDocumentationCaptureExecutionRequestV1,\n TechnicalDocumentationCaptureReceiptV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\n/**\n * Result returned before the application-owned publication transaction writes any byte. Keeping bytes in memory at this seam prevents the reusable capture\n * implementation from choosing an application output root or bypassing complete-tree staging.\n */\nexport interface TechnicalDocumentationCaptureExecutionResult {\n readonly receipt: TechnicalDocumentationCaptureReceiptV1;\n readonly outputBytes: Uint8Array;\n}\n\n/**\n * Production-neutral execution port implemented by the Node-only Playwright capture package.\n *\n * ## Nothing in this repository injects an implementation, and that is a DECISION\n *\n * `@wildo-ai/technical-documentation-capture` implements this port, is built, and is tested in CI —\n * and no package declares a dependency on it. Read as an orphan that is an oversight; it is not.\n *\n * - **It carries Playwright.** The companion is delivered as a dist artifact into every generated\n * application, so wiring the implementation there would put a browser download into every\n * application that never captures anything.\n * `technical-documentation-capture-dependency-closure.test.ts` pins the quarantine from the other\n * side: the package must stay absent from every engine and generated-application runtime manifest.\n * - **The port is the cheap half.** A capture needs six APPLICATION-owned bindings\n * (`TechnicalDocumentationPlaywrightCaptureBindings`): a base URL, a semantic-target path, an\n * authenticated storage state, a landmark, a font profile and an allowed-origin set. That is a\n * live stack, a provisioned tenant and a logged-in session — an environment, not an import.\n *\n * So an unavailable capture SKIPS rather than blocks: the pilot assets resolver ships a PLACEHOLDER\n * for a `PRODUCT_SCREENSHOT`/`PLAYWRIGHT_CAPTURE` request, the asset stays REQUIRED, and whether\n * provisional imagery may actually ship is decided at publication by the environment\n * (`--refuse-provisional-assets`), never here. Framework-owned figures do not depend on any of this\n * — a `DIAGRAM`/`DETERMINISTIC_RENDER` request materializes real SVG bytes with no browser at all.\n *\n * When an application does bind a capture, it constructs the implementation itself and hands it in.\n * That is the seam this interface exists for; do not \"fix\" the missing dependency by adding one.\n */\nexport interface TechnicalDocumentationCaptureExecutionPort {\n execute(request: TechnicalDocumentationCaptureExecutionRequestV1): Promise<TechnicalDocumentationCaptureExecutionResult>;\n}\n"]}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Diagram DECLARATIONS — what a diagram IS, and the asset request that asks for one.
3
+ *
4
+ * Split out of `technical-documentation-diagram-materializer.ts` on 2026-09-08 to break a genuine
5
+ * import cycle, and the split is the right shape independently of it. The materializer needs
6
+ * `technicalDocumentationSha256Bytes` from the render model; the render model imports the engine
7
+ * content bundle; and the content bundle now names a diagram in a unit definition it builds AT
8
+ * MODULE LOAD (#474). That closes the loop, and the symptom was not a resolution error but
9
+ * `createTechnicalDocumentationApplicationRequestDiagramAssetRequest is not a function` — the
10
+ * factory evaluated as `undefined` several frames from the cause.
11
+ *
12
+ * So: DECLARING a diagram needs nothing but the specifications vocabulary, and MATERIALIZING one
13
+ * needs a hash. Only the second belongs downstream of the render model.
14
+ */
15
+ import { type TechnicalDocumentationAssetRequestV1 } from '@wildo-ai/saas-specifications/technical-documentation';
16
+ export interface TechnicalDocumentationDiagramNode {
17
+ readonly nodeRef: string;
18
+ readonly label: string;
19
+ }
20
+ export interface TechnicalDocumentationDiagramEdge {
21
+ readonly fromNodeRef: string;
22
+ readonly toNodeRef: string;
23
+ readonly label: string;
24
+ }
25
+ export interface TechnicalDocumentationDiagramDefinition {
26
+ readonly diagramRef: string;
27
+ readonly title: string;
28
+ readonly nodes: readonly TechnicalDocumentationDiagramNode[];
29
+ readonly edges: readonly TechnicalDocumentationDiagramEdge[];
30
+ }
31
+ export declare const TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1: TechnicalDocumentationDiagramDefinition;
32
+ export declare function createTechnicalDocumentationApplicationRequestDiagramAssetRequest(): TechnicalDocumentationAssetRequestV1;
33
+ //# sourceMappingURL=technical-documentation-diagram-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"technical-documentation-diagram-definitions.d.ts","sourceRoot":"","sources":["../../../src/companion/technical-documentation-diagram-definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAML,KAAK,oCAAoC,EAC1C,MAAM,uDAAuD,CAAC;AAE/D,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,iCAAiC,EAAE,CAAC;IAC7D,QAAQ,CAAC,KAAK,EAAE,SAAS,iCAAiC,EAAE,CAAC;CAC9D;AAED,eAAO,MAAM,sDAAsD,EAAE,uCAYnE,CAAC;AAEH,wBAAgB,iEAAiE,IAAI,oCAAoC,CAwBxH"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Diagram DECLARATIONS — what a diagram IS, and the asset request that asks for one.
3
+ *
4
+ * Split out of `technical-documentation-diagram-materializer.ts` on 2026-09-08 to break a genuine
5
+ * import cycle, and the split is the right shape independently of it. The materializer needs
6
+ * `technicalDocumentationSha256Bytes` from the render model; the render model imports the engine
7
+ * content bundle; and the content bundle now names a diagram in a unit definition it builds AT
8
+ * MODULE LOAD (#474). That closes the loop, and the symptom was not a resolution error but
9
+ * `createTechnicalDocumentationApplicationRequestDiagramAssetRequest is not a function` — the
10
+ * factory evaluated as `undefined` several frames from the cause.
11
+ *
12
+ * So: DECLARING a diagram needs nothing but the specifications vocabulary, and MATERIALIZING one
13
+ * needs a hash. Only the second belongs downstream of the render model.
14
+ */
15
+ import { TechnicalDocumentationAssetAccessClass, TechnicalDocumentationAssetKind, TechnicalDocumentationAssetOrigin, TechnicalDocumentationAssetRequiredness, TechnicalDocumentationAssetRightsBasis, } from '@wildo-ai/saas-specifications/technical-documentation';
16
+ export const TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1 = Object.freeze({
17
+ diagramRef: 'technical-documentation:diagram/application-api-request',
18
+ title: 'From client to application API',
19
+ nodes: Object.freeze([
20
+ { nodeRef: 'technical-documentation:diagram-node/client', label: 'Client or service' },
21
+ { nodeRef: 'technical-documentation:diagram-node/application-api', label: 'Application API' },
22
+ { nodeRef: 'technical-documentation:diagram-node/resource', label: 'Documented resource' },
23
+ ]),
24
+ edges: Object.freeze([
25
+ { fromNodeRef: 'technical-documentation:diagram-node/client', toNodeRef: 'technical-documentation:diagram-node/application-api', label: 'Authenticated request' },
26
+ { fromNodeRef: 'technical-documentation:diagram-node/application-api', toNodeRef: 'technical-documentation:diagram-node/resource', label: 'Authorized operation' },
27
+ ]),
28
+ });
29
+ export function createTechnicalDocumentationApplicationRequestDiagramAssetRequest() {
30
+ return {
31
+ assetRef: 'technical-documentation:asset/application-api-request-diagram',
32
+ kind: TechnicalDocumentationAssetKind.DIAGRAM,
33
+ origin: TechnicalDocumentationAssetOrigin.DETERMINISTIC_RENDER,
34
+ accessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,
35
+ requiredness: TechnicalDocumentationAssetRequiredness.REQUIRED,
36
+ rights: {
37
+ basis: TechnicalDocumentationAssetRightsBasis.ENGINE_AUTHORED,
38
+ authorityRef: 'technical-documentation:rights/engine-authored-diagram',
39
+ },
40
+ sourceAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,
41
+ viewedTenantAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,
42
+ roleAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,
43
+ captureOrRenderProfileRef: 'technical-documentation:renderer/deterministic-svg-v1',
44
+ /*
45
+ * The definition this diagram depicts, NAMED. It was a sha256 of the definition until
46
+ * 2026-08-27 — computed here by calling the materializer, then compared by the pilot against
47
+ * the value the same materializer returned over the same frozen constant. A value compared
48
+ * with itself.
49
+ */
50
+ semanticInputRef: TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1.diagramRef,
51
+ altText: 'A client sends an authenticated request through the application API to a documented resource.',
52
+ };
53
+ }
54
+ //# sourceMappingURL=technical-documentation-diagram-definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"technical-documentation-diagram-definitions.js","sourceRoot":"","sources":["../../../src/companion/technical-documentation-diagram-definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,sCAAsC,EACtC,+BAA+B,EAC/B,iCAAiC,EACjC,uCAAuC,EACvC,sCAAsC,GAEvC,MAAM,uDAAuD,CAAC;AAoB/D,MAAM,CAAC,MAAM,sDAAsD,GAA4C,MAAM,CAAC,MAAM,CAAC;IAC3H,UAAU,EAAE,yDAAyD;IACrE,KAAK,EAAE,gCAAgC;IACvC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,OAAO,EAAE,6CAA6C,EAAE,KAAK,EAAE,mBAAmB,EAAE;QACtF,EAAE,OAAO,EAAE,sDAAsD,EAAE,KAAK,EAAE,iBAAiB,EAAE;QAC7F,EAAE,OAAO,EAAE,+CAA+C,EAAE,KAAK,EAAE,qBAAqB,EAAE;KAC3F,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,WAAW,EAAE,6CAA6C,EAAE,SAAS,EAAE,sDAAsD,EAAE,KAAK,EAAE,uBAAuB,EAAE;QACjK,EAAE,WAAW,EAAE,sDAAsD,EAAE,SAAS,EAAE,+CAA+C,EAAE,KAAK,EAAE,sBAAsB,EAAE;KACnK,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,UAAU,iEAAiE;IAC/E,OAAO;QACL,QAAQ,EAAE,+DAA+D;QACzE,IAAI,EAAE,+BAA+B,CAAC,OAAO;QAC7C,MAAM,EAAE,iCAAiC,CAAC,oBAAoB;QAC9D,WAAW,EAAE,sCAAsC,CAAC,MAAM;QAC1D,YAAY,EAAE,uCAAuC,CAAC,QAAQ;QAC9D,MAAM,EAAE;YACN,KAAK,EAAE,sCAAsC,CAAC,eAAe;YAC7D,YAAY,EAAE,wDAAwD;SACvE;QACD,iBAAiB,EAAE,sCAAsC,CAAC,MAAM;QAChE,uBAAuB,EAAE,sCAAsC,CAAC,MAAM;QACtE,eAAe,EAAE,sCAAsC,CAAC,MAAM;QAC9D,yBAAyB,EAAE,uDAAuD;QAClF;;;;;WAKG;QACH,gBAAgB,EAAE,sDAAsD,CAAC,UAAU;QACnF,OAAO,EAAE,+FAA+F;KACzG,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Diagram DECLARATIONS — what a diagram IS, and the asset request that asks for one.\n *\n * Split out of `technical-documentation-diagram-materializer.ts` on 2026-09-08 to break a genuine\n * import cycle, and the split is the right shape independently of it. The materializer needs\n * `technicalDocumentationSha256Bytes` from the render model; the render model imports the engine\n * content bundle; and the content bundle now names a diagram in a unit definition it builds AT\n * MODULE LOAD (#474). That closes the loop, and the symptom was not a resolution error but\n * `createTechnicalDocumentationApplicationRequestDiagramAssetRequest is not a function` — the\n * factory evaluated as `undefined` several frames from the cause.\n *\n * So: DECLARING a diagram needs nothing but the specifications vocabulary, and MATERIALIZING one\n * needs a hash. Only the second belongs downstream of the render model.\n */\nimport {\n TechnicalDocumentationAssetAccessClass,\n TechnicalDocumentationAssetKind,\n TechnicalDocumentationAssetOrigin,\n TechnicalDocumentationAssetRequiredness,\n TechnicalDocumentationAssetRightsBasis,\n type TechnicalDocumentationAssetRequestV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\nexport interface TechnicalDocumentationDiagramNode {\n readonly nodeRef: string;\n readonly label: string;\n}\n\nexport interface TechnicalDocumentationDiagramEdge {\n readonly fromNodeRef: string;\n readonly toNodeRef: string;\n readonly label: string;\n}\n\nexport interface TechnicalDocumentationDiagramDefinition {\n readonly diagramRef: string;\n readonly title: string;\n readonly nodes: readonly TechnicalDocumentationDiagramNode[];\n readonly edges: readonly TechnicalDocumentationDiagramEdge[];\n}\n\nexport const TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1: TechnicalDocumentationDiagramDefinition = Object.freeze({\n diagramRef: 'technical-documentation:diagram/application-api-request',\n title: 'From client to application API',\n nodes: Object.freeze([\n { nodeRef: 'technical-documentation:diagram-node/client', label: 'Client or service' },\n { nodeRef: 'technical-documentation:diagram-node/application-api', label: 'Application API' },\n { nodeRef: 'technical-documentation:diagram-node/resource', label: 'Documented resource' },\n ]),\n edges: Object.freeze([\n { fromNodeRef: 'technical-documentation:diagram-node/client', toNodeRef: 'technical-documentation:diagram-node/application-api', label: 'Authenticated request' },\n { fromNodeRef: 'technical-documentation:diagram-node/application-api', toNodeRef: 'technical-documentation:diagram-node/resource', label: 'Authorized operation' },\n ]),\n});\n\nexport function createTechnicalDocumentationApplicationRequestDiagramAssetRequest(): TechnicalDocumentationAssetRequestV1 {\n return {\n assetRef: 'technical-documentation:asset/application-api-request-diagram',\n kind: TechnicalDocumentationAssetKind.DIAGRAM,\n origin: TechnicalDocumentationAssetOrigin.DETERMINISTIC_RENDER,\n accessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,\n requiredness: TechnicalDocumentationAssetRequiredness.REQUIRED,\n rights: {\n basis: TechnicalDocumentationAssetRightsBasis.ENGINE_AUTHORED,\n authorityRef: 'technical-documentation:rights/engine-authored-diagram',\n },\n sourceAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,\n viewedTenantAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,\n roleAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,\n captureOrRenderProfileRef: 'technical-documentation:renderer/deterministic-svg-v1',\n /*\n * The definition this diagram depicts, NAMED. It was a sha256 of the definition until\n * 2026-08-27 — computed here by calling the materializer, then compared by the pilot against\n * the value the same materializer returned over the same frozen constant. A value compared\n * with itself.\n */\n semanticInputRef: TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1.diagramRef,\n altText: 'A client sends an authenticated request through the application API to a documented resource.',\n };\n}\n\n"]}
@@ -1,21 +1,13 @@
1
- import { type TechnicalDocumentationAssetRequestV1 } from '@wildo-ai/saas-specifications/technical-documentation';
2
- export interface TechnicalDocumentationDiagramNode {
3
- readonly nodeRef: string;
4
- readonly label: string;
5
- }
6
- export interface TechnicalDocumentationDiagramEdge {
7
- readonly fromNodeRef: string;
8
- readonly toNodeRef: string;
9
- readonly label: string;
10
- }
11
- export interface TechnicalDocumentationDiagramDefinition {
12
- readonly diagramRef: string;
13
- readonly title: string;
14
- readonly nodes: readonly TechnicalDocumentationDiagramNode[];
15
- readonly edges: readonly TechnicalDocumentationDiagramEdge[];
16
- }
17
- export declare const TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1: TechnicalDocumentationDiagramDefinition;
18
- export declare function createTechnicalDocumentationApplicationRequestDiagramAssetRequest(): TechnicalDocumentationAssetRequestV1;
1
+ /**
2
+ * Deterministic diagram MATERIALIZATION — declaration in, SVG bytes out.
3
+ *
4
+ * The declarations themselves live in `./technical-documentation-diagram-definitions`, which this
5
+ * module re-exports so every existing consumer and the package barrel are unchanged. See that
6
+ * file's header for why they were split: this one imports the render model for hashing, the render
7
+ * model imports the engine content bundle, and the content bundle names a diagram at module load.
8
+ */
9
+ import type { TechnicalDocumentationDiagramDefinition } from './technical-documentation-diagram-definitions';
10
+ export * from './technical-documentation-diagram-definitions';
19
11
  /** A dependency-free deterministic SVG materializer; no layout engine or runtime font metrics participate in its bytes. */
20
12
  export declare function materializeTechnicalDocumentationDiagram(definition: TechnicalDocumentationDiagramDefinition): {
21
13
  readonly bytes: Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-diagram-materializer.d.ts","sourceRoot":"","sources":["../../../../src/companion/technical-documentation-diagram-materializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,oCAAoC,EAC1C,MAAM,uDAAuD,CAAC;AAI/D,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,iCAAiC,EAAE,CAAC;IAC7D,QAAQ,CAAC,KAAK,EAAE,SAAS,iCAAiC,EAAE,CAAC;CAC9D;AAED,eAAO,MAAM,sDAAsD,EAAE,uCAYnE,CAAC;AAEH,wBAAgB,iEAAiE,IAAI,oCAAoC,CAwBxH;AAMD,2HAA2H;AAC3H,wBAAgB,wCAAwC,CAAC,UAAU,EAAE,uCAAuC,GAAG;IAC7G,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC,CA+BA"}
1
+ {"version":3,"file":"technical-documentation-diagram-materializer.d.ts","sourceRoot":"","sources":["../../../src/companion/technical-documentation-diagram-materializer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AAE7G,cAAc,+CAA+C,CAAC;AAM9D,2HAA2H;AAC3H,wBAAgB,wCAAwC,CAAC,UAAU,EAAE,uCAAuC,GAAG;IAC7G,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACrC,CA+BA"}
@@ -1,43 +1,13 @@
1
- import { TechnicalDocumentationAssetAccessClass, TechnicalDocumentationAssetKind, TechnicalDocumentationAssetOrigin, TechnicalDocumentationAssetRequiredness, TechnicalDocumentationAssetRightsBasis, } from '@wildo-ai/saas-specifications/technical-documentation';
1
+ /**
2
+ * Deterministic diagram MATERIALIZATION — declaration in, SVG bytes out.
3
+ *
4
+ * The declarations themselves live in `./technical-documentation-diagram-definitions`, which this
5
+ * module re-exports so every existing consumer and the package barrel are unchanged. See that
6
+ * file's header for why they were split: this one imports the render model for hashing, the render
7
+ * model imports the engine content bundle, and the content bundle names a diagram at module load.
8
+ */
2
9
  import { technicalDocumentationSha256Bytes } from './rendering/technical-documentation-render-model.js';
3
- export const TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1 = Object.freeze({
4
- diagramRef: 'technical-documentation:diagram/application-api-request',
5
- title: 'From client to application API',
6
- nodes: Object.freeze([
7
- { nodeRef: 'technical-documentation:diagram-node/client', label: 'Client or service' },
8
- { nodeRef: 'technical-documentation:diagram-node/application-api', label: 'Application API' },
9
- { nodeRef: 'technical-documentation:diagram-node/resource', label: 'Documented resource' },
10
- ]),
11
- edges: Object.freeze([
12
- { fromNodeRef: 'technical-documentation:diagram-node/client', toNodeRef: 'technical-documentation:diagram-node/application-api', label: 'Authenticated request' },
13
- { fromNodeRef: 'technical-documentation:diagram-node/application-api', toNodeRef: 'technical-documentation:diagram-node/resource', label: 'Authorized operation' },
14
- ]),
15
- });
16
- export function createTechnicalDocumentationApplicationRequestDiagramAssetRequest() {
17
- return {
18
- assetRef: 'technical-documentation:asset/application-api-request-diagram',
19
- kind: TechnicalDocumentationAssetKind.DIAGRAM,
20
- origin: TechnicalDocumentationAssetOrigin.DETERMINISTIC_RENDER,
21
- accessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,
22
- requiredness: TechnicalDocumentationAssetRequiredness.REQUIRED,
23
- rights: {
24
- basis: TechnicalDocumentationAssetRightsBasis.ENGINE_AUTHORED,
25
- authorityRef: 'technical-documentation:rights/engine-authored-diagram',
26
- },
27
- sourceAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,
28
- viewedTenantAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,
29
- roleAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,
30
- captureOrRenderProfileRef: 'technical-documentation:renderer/deterministic-svg-v1',
31
- /*
32
- * The definition this diagram depicts, NAMED. It was a sha256 of the definition until
33
- * 2026-08-27 — computed here by calling the materializer, then compared by the pilot against
34
- * the value the same materializer returned over the same frozen constant. A value compared
35
- * with itself.
36
- */
37
- semanticInputRef: TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1.diagramRef,
38
- altText: 'A client sends an authenticated request through the application API to a documented resource.',
39
- };
40
- }
10
+ export * from './technical-documentation-diagram-definitions.js';
41
11
  function escapeXml(value) {
42
12
  return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('"', '&quot;').replaceAll("'", '&apos;');
43
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-diagram-materializer.js","sourceRoot":"","sources":["../../../../src/companion/technical-documentation-diagram-materializer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n TechnicalDocumentationAssetAccessClass,\n TechnicalDocumentationAssetKind,\n TechnicalDocumentationAssetOrigin,\n TechnicalDocumentationAssetRequiredness,\n TechnicalDocumentationAssetRightsBasis,\n type TechnicalDocumentationAssetRequestV1,\n} from '@wildo-ai/saas-specifications/technical-documentation';\n\nimport { technicalDocumentationSha256Bytes } from './rendering/technical-documentation-render-model';\n\nexport interface TechnicalDocumentationDiagramNode {\n readonly nodeRef: string;\n readonly label: string;\n}\n\nexport interface TechnicalDocumentationDiagramEdge {\n readonly fromNodeRef: string;\n readonly toNodeRef: string;\n readonly label: string;\n}\n\nexport interface TechnicalDocumentationDiagramDefinition {\n readonly diagramRef: string;\n readonly title: string;\n readonly nodes: readonly TechnicalDocumentationDiagramNode[];\n readonly edges: readonly TechnicalDocumentationDiagramEdge[];\n}\n\nexport const TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1: TechnicalDocumentationDiagramDefinition = Object.freeze({\n diagramRef: 'technical-documentation:diagram/application-api-request',\n title: 'From client to application API',\n nodes: Object.freeze([\n { nodeRef: 'technical-documentation:diagram-node/client', label: 'Client or service' },\n { nodeRef: 'technical-documentation:diagram-node/application-api', label: 'Application API' },\n { nodeRef: 'technical-documentation:diagram-node/resource', label: 'Documented resource' },\n ]),\n edges: Object.freeze([\n { fromNodeRef: 'technical-documentation:diagram-node/client', toNodeRef: 'technical-documentation:diagram-node/application-api', label: 'Authenticated request' },\n { fromNodeRef: 'technical-documentation:diagram-node/application-api', toNodeRef: 'technical-documentation:diagram-node/resource', label: 'Authorized operation' },\n ]),\n});\n\nexport function createTechnicalDocumentationApplicationRequestDiagramAssetRequest(): TechnicalDocumentationAssetRequestV1 {\n return {\n assetRef: 'technical-documentation:asset/application-api-request-diagram',\n kind: TechnicalDocumentationAssetKind.DIAGRAM,\n origin: TechnicalDocumentationAssetOrigin.DETERMINISTIC_RENDER,\n accessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,\n requiredness: TechnicalDocumentationAssetRequiredness.REQUIRED,\n rights: {\n basis: TechnicalDocumentationAssetRightsBasis.ENGINE_AUTHORED,\n authorityRef: 'technical-documentation:rights/engine-authored-diagram',\n },\n sourceAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,\n viewedTenantAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,\n roleAccessClass: TechnicalDocumentationAssetAccessClass.PUBLIC,\n captureOrRenderProfileRef: 'technical-documentation:renderer/deterministic-svg-v1',\n /*\n * The definition this diagram depicts, NAMED. It was a sha256 of the definition until\n * 2026-08-27 — computed here by calling the materializer, then compared by the pilot against\n * the value the same materializer returned over the same frozen constant. A value compared\n * with itself.\n */\n semanticInputRef: TECHNICAL_DOCUMENTATION_APPLICATION_REQUEST_DIAGRAM_V1.diagramRef,\n altText: 'A client sends an authenticated request through the application API to a documented resource.',\n };\n}\n\nfunction escapeXml(value: string): string {\n return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('\"', '&quot;').replaceAll(\"'\", '&apos;');\n}\n\n/** A dependency-free deterministic SVG materializer; no layout engine or runtime font metrics participate in its bytes. */\nexport function materializeTechnicalDocumentationDiagram(definition: TechnicalDocumentationDiagramDefinition): {\n readonly bytes: Uint8Array;\n readonly byteDigest: string;\n readonly mediaType: 'image/svg+xml';\n} {\n if (definition.nodes.length < 2) throw new Error('technical-documentation diagram requires at least two nodes');\n const nodes = [...definition.nodes].sort((left, right) => left.nodeRef.localeCompare(right.nodeRef));\n const nodeRefs = nodes.map((node) => node.nodeRef);\n if (new Set(nodeRefs).size !== nodeRefs.length) throw new Error('technical-documentation diagram node refs must be unique');\n const nodeRefSet = new Set(nodeRefs);\n const edges = [...definition.edges].sort((left, right) => `${left.fromNodeRef}\\0${left.toNodeRef}\\0${left.label}`.localeCompare(`${right.fromNodeRef}\\0${right.toNodeRef}\\0${right.label}`));\n for (const edge of edges) {\n if (!nodeRefSet.has(edge.fromNodeRef) || !nodeRefSet.has(edge.toNodeRef)) throw new Error('technical-documentation diagram edge references an unknown node');\n }\n const width = 960;\n const nodeWidth = 180;\n const gap = (width - nodes.length * nodeWidth) / (nodes.length + 1);\n const xByRef = new Map(nodes.map((node, index) => [node.nodeRef, Math.round(gap + index * (nodeWidth + gap))]));\n const nodeSvg = nodes.map((node) => {\n const x = xByRef.get(node.nodeRef) as number;\n return `<g><rect x=\"${x}\" y=\"96\" width=\"${nodeWidth}\" height=\"72\" rx=\"12\" fill=\"#f7f8fb\" stroke=\"#263247\" stroke-width=\"2\"/><text x=\"${x + nodeWidth / 2}\" y=\"138\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"16\" fill=\"#172033\">${escapeXml(node.label)}</text></g>`;\n }).join('');\n const edgeSvg = edges.map((edge, index) => {\n const fromX = (xByRef.get(edge.fromNodeRef) as number) + nodeWidth;\n const toX = xByRef.get(edge.toNodeRef) as number;\n const y = 112 + index * 14;\n return `<g><path d=\"M ${fromX} ${y} L ${toX} ${y}\" stroke=\"#54657e\" stroke-width=\"2\" marker-end=\"url(#arrow)\"/><text x=\"${Math.round((fromX + toX) / 2)}\" y=\"${y - 6}\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" fill=\"#34445d\">${escapeXml(edge.label)}</text></g>`;\n }).join('');\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"240\" viewBox=\"0 0 ${width} 240\" role=\"img\" aria-labelledby=\"title\"><title id=\"title\">${escapeXml(definition.title)}</title><defs><marker id=\"arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"4\" orient=\"auto\"><path d=\"M0,0 L8,4 L0,8 z\" fill=\"#54657e\"/></marker></defs><text x=\"480\" y=\"42\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"22\" font-weight=\"600\" fill=\"#172033\">${escapeXml(definition.title)}</text>${edgeSvg}${nodeSvg}</svg>\\n`;\n const bytes = Buffer.from(svg, 'utf8');\n return Object.freeze({\n bytes,\n byteDigest: technicalDocumentationSha256Bytes(bytes),\n mediaType: 'image/svg+xml' as const,\n });\n}\n\n/*\n * `technicalDocumentationDiagramProducerImplementationDigest()` lived here until 2026-08-27. It\n * hashed `escapeXml.toString()` and this materializer's own source text, and rode into every\n * resolved asset as `producerImplementationDigest`. Nothing compared it; the producer is named by\n * `producerRef` + `producerVersion`, which a reader can act on.\n */\n"]}
1
+ {"version":3,"file":"technical-documentation-diagram-materializer.js","sourceRoot":"","sources":["../../../src/companion/technical-documentation-diagram-materializer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Deterministic diagram MATERIALIZATION — declaration in, SVG bytes out.\n *\n * The declarations themselves live in `./technical-documentation-diagram-definitions`, which this\n * module re-exports so every existing consumer and the package barrel are unchanged. See that\n * file's header for why they were split: this one imports the render model for hashing, the render\n * model imports the engine content bundle, and the content bundle names a diagram at module load.\n */\n\nimport { technicalDocumentationSha256Bytes } from './rendering/technical-documentation-render-model';\n\nimport type { TechnicalDocumentationDiagramDefinition } from './technical-documentation-diagram-definitions';\n\nexport * from './technical-documentation-diagram-definitions';\n\nfunction escapeXml(value: string): string {\n return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('\"', '&quot;').replaceAll(\"'\", '&apos;');\n}\n\n/** A dependency-free deterministic SVG materializer; no layout engine or runtime font metrics participate in its bytes. */\nexport function materializeTechnicalDocumentationDiagram(definition: TechnicalDocumentationDiagramDefinition): {\n readonly bytes: Uint8Array;\n readonly byteDigest: string;\n readonly mediaType: 'image/svg+xml';\n} {\n if (definition.nodes.length < 2) throw new Error('technical-documentation diagram requires at least two nodes');\n const nodes = [...definition.nodes].sort((left, right) => left.nodeRef.localeCompare(right.nodeRef));\n const nodeRefs = nodes.map((node) => node.nodeRef);\n if (new Set(nodeRefs).size !== nodeRefs.length) throw new Error('technical-documentation diagram node refs must be unique');\n const nodeRefSet = new Set(nodeRefs);\n const edges = [...definition.edges].sort((left, right) => `${left.fromNodeRef}\\0${left.toNodeRef}\\0${left.label}`.localeCompare(`${right.fromNodeRef}\\0${right.toNodeRef}\\0${right.label}`));\n for (const edge of edges) {\n if (!nodeRefSet.has(edge.fromNodeRef) || !nodeRefSet.has(edge.toNodeRef)) throw new Error('technical-documentation diagram edge references an unknown node');\n }\n const width = 960;\n const nodeWidth = 180;\n const gap = (width - nodes.length * nodeWidth) / (nodes.length + 1);\n const xByRef = new Map(nodes.map((node, index) => [node.nodeRef, Math.round(gap + index * (nodeWidth + gap))]));\n const nodeSvg = nodes.map((node) => {\n const x = xByRef.get(node.nodeRef) as number;\n return `<g><rect x=\"${x}\" y=\"96\" width=\"${nodeWidth}\" height=\"72\" rx=\"12\" fill=\"#f7f8fb\" stroke=\"#263247\" stroke-width=\"2\"/><text x=\"${x + nodeWidth / 2}\" y=\"138\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"16\" fill=\"#172033\">${escapeXml(node.label)}</text></g>`;\n }).join('');\n const edgeSvg = edges.map((edge, index) => {\n const fromX = (xByRef.get(edge.fromNodeRef) as number) + nodeWidth;\n const toX = xByRef.get(edge.toNodeRef) as number;\n const y = 112 + index * 14;\n return `<g><path d=\"M ${fromX} ${y} L ${toX} ${y}\" stroke=\"#54657e\" stroke-width=\"2\" marker-end=\"url(#arrow)\"/><text x=\"${Math.round((fromX + toX) / 2)}\" y=\"${y - 6}\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"12\" fill=\"#34445d\">${escapeXml(edge.label)}</text></g>`;\n }).join('');\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"240\" viewBox=\"0 0 ${width} 240\" role=\"img\" aria-labelledby=\"title\"><title id=\"title\">${escapeXml(definition.title)}</title><defs><marker id=\"arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"4\" orient=\"auto\"><path d=\"M0,0 L8,4 L0,8 z\" fill=\"#54657e\"/></marker></defs><text x=\"480\" y=\"42\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"22\" font-weight=\"600\" fill=\"#172033\">${escapeXml(definition.title)}</text>${edgeSvg}${nodeSvg}</svg>\\n`;\n const bytes = Buffer.from(svg, 'utf8');\n return Object.freeze({\n bytes,\n byteDigest: technicalDocumentationSha256Bytes(bytes),\n mediaType: 'image/svg+xml' as const,\n });\n}\n\n/*\n * `technicalDocumentationDiagramProducerImplementationDigest()` lived here until 2026-08-27. It\n * hashed `escapeXml.toString()` and this materializer's own source text, and rode into every\n * resolved asset as `producerImplementationDigest`. Nothing compared it; the producer is named by\n * `producerRef` + `producerVersion`, which a reader can act on.\n */\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"technical-documentation-placeholder-materializer.d.ts","sourceRoot":"","sources":["../../../../src/companion/technical-documentation-placeholder-materializer.ts"],"names":[],"mappings":"AA2BA;;;;;;;GAOG;AACH,wBAAgB,4CAA4C,CAAC,KAAK,EAAE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GAAG;IACF,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC,CAgCA"}
1
+ {"version":3,"file":"technical-documentation-placeholder-materializer.d.ts","sourceRoot":"","sources":["../../../src/companion/technical-documentation-placeholder-materializer.ts"],"names":[],"mappings":"AA2BA;;;;;;;GAOG;AACH,wBAAgB,4CAA4C,CAAC,KAAK,EAAE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GAAG;IACF,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;CACjC,CAgCA"}
@@ -1 +1 @@
1
- {"version":3,"file":"zod-to-openapi.d.ts","sourceRoot":"","sources":["../../../../src/companion/zod-to-openapi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;GASG;AACH,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,IAAI,CAAC;AA4GzD,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,KACvC,2BAqDF,CAAC"}
1
+ {"version":3,"file":"zod-to-openapi.d.ts","sourceRoot":"","sources":["../../../src/companion/zod-to-openapi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;GASG;AACH,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,IAAI,CAAC;AA4GzD,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,KACvC,2BAqDF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"companion-exports.d.ts","sourceRoot":"","sources":["../../../src/companion-exports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"companion-exports.d.ts","sourceRoot":"","sources":["../../src/companion-exports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"define-tech-doc-config.d.ts","sourceRoot":"","sources":["../../../../src/config/define-tech-doc-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EAClC,MAAM,iCAAiC,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,4BAA4B,GACnC,uBAAuB,CAEzB"}
1
+ {"version":3,"file":"define-tech-doc-config.d.ts","sourceRoot":"","sources":["../../../src/config/define-tech-doc-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EAClC,MAAM,iCAAiC,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,4BAA4B,GACnC,uBAAuB,CAEzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC"}
@@ -103,10 +103,14 @@ export declare const WildoTechnicalDocConfigSchema: z.ZodObject<{
103
103
  * - `CoreResourceType[]` — a curated subset (e.g. `[CoreResourceType.ORGANIZATIONS,
104
104
  * CoreResourceType.ORGANIZATION_MEMBERS, CoreResourceType.FILES]`).
105
105
  *
106
- * Omitted (default): only the app's own resources are documented. Org-scoped
107
- * core resources land in the (auth-gated) Organization API section; any
108
- * anonymous ones in the Application API section — the existing section split
109
- * by operation access level is unchanged.
106
+ * Omitted (default): only the app's own resources are documented.
107
+ *
108
+ * There is no organizational section. `OpenApiSection` has exactly two members,
109
+ * `API_REFERENCE` and `APPLICATION_ADMINISTRATION_API_REFERENCE`, neither of which is scoped to
110
+ * an organization. The split is made per OPERATION, from the `consumerApiSection` the source
111
+ * projector resolves, so a selected core resource's operations may land in either. Nothing the
112
+ * docs site emits is auth-gated; see `docs-auth-session.schemas.ts` for why the decoded role axis
113
+ * is not a control.
110
114
  */
111
115
  apiDocResources: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodEnum<typeof CoreResourceType>>, z.ZodLiteral<"all">]>>;
112
116
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"wildo-tech-doc-config.schemas.d.ts","sourceRoot":"","sources":["../../../../src/config/wildo-tech-doc-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAG,KAAc,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,4CAA4C;;;;;kBAEvD,CAAC;AACH,MAAM,MAAM,sCAAsC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4CAA4C,CAAC,CAAC;AAElH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,6BAA6B;IACxC;;;;;OAKG;;IAGH;;;;;;;;OAQG;;;;;;IASH;;;;;;;;;;OAUG;;IAGH;;;;OAIG;;IAGH;;;;;;;;;;;;;;;;;;OAkBG;;IAMH;;;;;;;;OAQG;;;;;;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;;;;;IAGH;;;;;;;;;;;;;;;OAeG;;IAGH;;;;;;;;;;;;;;;;;;OAkBG;;;;;;;;kBAEH,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACzF,8DAA8D"}
1
+ {"version":3,"file":"wildo-tech-doc-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/config/wildo-tech-doc-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAG,KAAc,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,4CAA4C;;;;;kBAEvD,CAAC;AACH,MAAM,MAAM,sCAAsC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4CAA4C,CAAC,CAAC;AAElH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,6BAA6B;IACxC;;;;;OAKG;;IAGH;;;;;;;;OAQG;;;;;;IASH;;;;;;;;;;OAUG;;IAGH;;;;OAIG;;IAGH;;;;;;;;;;;;;;;;;;;;;;OAsBG;;IAMH;;;;;;;;OAQG;;;;;;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;;;;;IAGH;;;;;;;;;;;;;;;OAeG;;IAGH;;;;;;;;;;;;;;;;;;OAkBG;;;;;;;;kBAEH,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACzF,8DAA8D"}
@@ -104,10 +104,14 @@ export const WildoTechnicalDocConfigSchema = z.strictObject({
104
104
  * - `CoreResourceType[]` — a curated subset (e.g. `[CoreResourceType.ORGANIZATIONS,
105
105
  * CoreResourceType.ORGANIZATION_MEMBERS, CoreResourceType.FILES]`).
106
106
  *
107
- * Omitted (default): only the app's own resources are documented. Org-scoped
108
- * core resources land in the (auth-gated) Organization API section; any
109
- * anonymous ones in the Application API section — the existing section split
110
- * by operation access level is unchanged.
107
+ * Omitted (default): only the app's own resources are documented.
108
+ *
109
+ * There is no organizational section. `OpenApiSection` has exactly two members,
110
+ * `API_REFERENCE` and `APPLICATION_ADMINISTRATION_API_REFERENCE`, neither of which is scoped to
111
+ * an organization. The split is made per OPERATION, from the `consumerApiSection` the source
112
+ * projector resolves, so a selected core resource's operations may land in either. Nothing the
113
+ * docs site emits is auth-gated; see `docs-auth-session.schemas.ts` for why the decoded role axis
114
+ * is not a control.
111
115
  */
112
116
  apiDocResources: z.union([
113
117
  z.array(z.enum(CoreResourceType)),
@@ -1 +1 @@
1
- {"version":3,"file":"wildo-tech-doc-config.schemas.js","sourceRoot":"","sources":["../../../../src/config/wildo-tech-doc-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,+CAA+C,EAAE,MAAM,uDAAuD,CAAC;AACxH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kCAAkC,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEpH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAc,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4CAA4C,GAAG,kCAAkC,CAAC,MAAM,CAAC;IACpG,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACjD,CAAC,CAAC;AAGH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,YAAY,CAAC;IAC1D;;;;;OAKG;IACH,mBAAmB,EAAE,+CAA+C;IAEpE;;;;;;;;OAQG;IACH,aAAa,EAAE,CAAC;SACb,YAAY,CAAC;QACZ,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACxD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACzD,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KAChE,CAAC;SACD,QAAQ,EAAE;IAEb;;;;;;;;;;OAUG;IACH,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAE/D;;;;OAIG;IACH,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAE3D;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;KACjC,CAAC,CAAC,QAAQ,EAAE;IAEb;;;;;;;;OAQG;IACH,8BAA8B,EAAE,CAAC,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAEvG;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;IAEnD;;;;;;;;;;;;;;;OAeG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAEnD;;;;;;;;;;;;;;;;;;OAkBG;IACH,GAAG,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAGH,8DAA8D","sourcesContent":["/**\n * @wildo_source:part:start engine.saas-technical-doc.config facet:layer:engine facet:family:technical-doc\n *\n * Per-service technical-documentation configuration authored as\n * `wildo.tech-doc.config.ts`. The strict schema owns only settings with live\n * consumers: publication budgets and public sentinels, API-reference inputs,\n * presentation metadata, and the docs service CSP. Framework narrative content\n * comes from the engine topic catalogue, not from application-local recipes.\n */\n\nimport { WildoCspConfigSchema } from '@wildo-ai/platform-config-lib';\nimport { CoreResourceType } from '@wildo-ai/saas-models';\nimport { TechnicalDocumentationSupportedApiVersionSchema } from '@wildo-ai/saas-specifications/technical-documentation';\nimport { z } from 'zod';\nimport { ApiReferenceResourceCategorySchema, OpenApiServerSchema } from '../companion/operation-projection.schemas';\n\n/**\n * Sentinel for `apiDocResources` meaning \"document every core resource that has\n * API-bearing operations\" — the full framework resource catalog. Distinct from\n * an explicit curated array so an app can opt into everything without listing\n * (and re-listing, as the engine grows) every `CoreResourceType` by hand.\n */\nexport const API_DOC_RESOURCES_ALL = 'all' as const;\n\n/**\n * One complete category declaration for the resources published by this API\n * reference. `resourceNames` uses the generated OpenAPI tag name, which is\n * the resolved resource identifier, rather than a display label or a\n * filesystem location. The companion rejects a duplicate, stale or missing\n * assignment whenever this feature is configured.\n */\nexport const ApiReferenceResourceCategoryAssignmentSchema = ApiReferenceResourceCategorySchema.extend({\n resourceNames: z.array(z.string().min(1)).min(1),\n});\nexport type ApiReferenceResourceCategoryAssignment = z.infer<typeof ApiReferenceResourceCategoryAssignmentSchema>;\n\n/**\n * Per-service technical-documentation configuration block.\n *\n * Authored as `export default defineTechnicalDocConfig({...})` in\n * `<tech-doc-service-root>/wildo.tech-doc.config.ts`. The companion\n * loads this file once at bootstrap via jiti and projects fields\n * into the OpenAPI generator and Docusaurus/CSP build surfaces.\n *\n * @example\n * ```ts\n * import { defineTechnicalDocConfig } from '@wildo-ai/saas-technical-doc';\n *\n * export default defineTechnicalDocConfig({\n * supportedApiVersion: '1.0.0',\n * publicMarketingTitle: 'Northstar Tasks — Technical Documentation',\n * apiDocResources: 'all', // also document every core engine resource\n * });\n * ```\n */\nexport const WildoTechnicalDocConfigSchema = z.strictObject({\n /**\n * Exact public API contract release supported by this documentation\n * publication. It is required because OpenAPI mandates a version and a\n * placeholder would make the generated reference look authoritative while\n * carrying no usable compatibility claim.\n */\n supportedApiVersion: TechnicalDocumentationSupportedApiVersionSchema,\n\n /**\n * Ceilings on the published documentation tree, applied per field over the engine\n * defaults (`TECHNICAL_DOCUMENTATION_DEFAULT_OUTPUT_BUDGETS`).\n *\n * Omitting this is the normal case and is SAFE: absence yields the engine ceilings, not\n * an unbounded build. Declare only the field an application genuinely outgrows — a\n * partial declaration keeps the others tracking the engine, so raising a page count does\n * not silently freeze a copy of every other limit at today's value.\n */\n outputBudgets: z\n .strictObject({\n maximumPageCount: z.number().int().positive().optional(),\n maximumTotalBytes: z.number().int().positive().optional(),\n maximumSearchIndexBytes: z.number().int().positive().optional(),\n })\n .optional(),\n\n /**\n * Additional byte sequences that must never appear in the PUBLIC documentation tree.\n * Publication fails naming the offending file.\n *\n * **Unioned with the engine's mandatory sentinels, never replacing them** — an\n * application can arm more canaries, and cannot disarm the engine's.\n *\n * Choose sequences that cannot legitimately appear in published prose. Generic markers\n * (`secret`, `token`, `Bearer`) fire on the authentication and webhook guides\n * themselves, and a canary that cries on correct content is one people learn to remove.\n */\n forbiddenPublicSentinels: z.array(z.string().min(1)).optional(),\n\n /**\n * Public-facing title for the docs site (browser tab title +\n * landing page header). Optional — falls back to\n * `WildoSaasConfig.displayName` when omitted.\n */\n publicMarketingTitle: z.string().min(1).max(200).optional(),\n\n /**\n * Opt-in: include framework (engine) core resources in this app's generated\n * OpenAPI, in addition to the app's own resources. This setting does not\n * mutate runtime registration: backend startup already merges the engine core\n * resource maps, then applies resolved billing/lifecycle exclusions. The dev\n * companion projects the selected core resources with those same exclusions\n * and their authored Tier-1/2/3 spec semantics.\n *\n * - `'all'` ({@link API_DOC_RESOURCES_ALL}) — document every core resource that\n * has API-bearing operations after resolved feature exclusions. Convenient,\n * but broad; it is configuration-derived eligibility, not live-route proof.\n * - `CoreResourceType[]` — a curated subset (e.g. `[CoreResourceType.ORGANIZATIONS,\n * CoreResourceType.ORGANIZATION_MEMBERS, CoreResourceType.FILES]`).\n *\n * Omitted (default): only the app's own resources are documented. Org-scoped\n * core resources land in the (auth-gated) Organization API section; any\n * anonymous ones in the Application API section — the existing section split\n * by operation access level is unchanged.\n */\n apiDocResources: z.union([\n z.array(z.enum(CoreResourceType)),\n z.literal(API_DOC_RESOURCES_ALL),\n ]).optional(),\n\n /**\n * Explicit source-owned grouping for the generated API reference.\n *\n * Omit this only when an application deliberately has no API taxonomy yet.\n * When present, it must classify every published resource exactly once:\n * categories cannot silently drift as framework or application resources are\n * added or removed. The category facts become `tags[].x-wildo.category` in\n * the canonical OpenAPI document and are consumed by the generic renderer.\n */\n apiReferenceResourceCategories: z.array(ApiReferenceResourceCategoryAssignmentSchema).min(1).optional(),\n\n /**\n * App-enriched OpenAPI `servers[]` — the base URLs the API is reachable at,\n * surfaced in the generated docs (and used by the \"Try it\" console + SDK\n * generators). **This is the one piece of auth/transport metadata the\n * framework cannot derive**: the security SCHEMES are framework-universal and\n * emitted automatically (every Wildo API uses a JWT bearer + a scoped API key\n * in the standard `Authorization` header),\n * but deployment URLs are application/environment knowledge — only the app\n * knows its staging/production domains.\n *\n * Each entry is `{ url, description? }` where `url` is the bare ORIGIN\n * (host[:port]) — do NOT append `/api/v1`: operation paths already carry that\n * mount, and the effective URL is `server.url` + path, so appending it would\n * double the prefix. Order is preserved (the first entry is the docs default).\n *\n * @example\n * ```ts\n * apiServers: [\n * { url: 'https://api.example.com', description: 'Production' },\n * { url: 'http://localhost:4241', description: 'Local development' },\n * ],\n * ```\n *\n * Omitted (default): no `servers` block is emitted (the docs still render; the\n * \"Try it\" console just has no preset target).\n */\n apiServers: z.array(OpenApiServerSchema).optional(),\n\n /**\n * App-authored markdown intro for the generated API reference landing page\n * (the OpenAPI `info.description`). Use it to frame the API in the app's own\n * voice — what it's for, key concepts, links to guides.\n *\n * This is PREPENDED to a framework-universal \"API conventions\" section the\n * generator always emits (Authentication, Base URL, Pagination, Idempotency,\n * Errors — derived from how every Wildo API behaves), so an app gets a\n * complete, accurate landing page even with no overview, and a branded one\n * when it supplies this.\n *\n * @example\n * ```ts\n * apiOverview: 'The Northstar Tasks API lets you manage projects, work items, and assignments.',\n * ```\n */\n apiOverview: z.string().min(1).max(8000).optional(),\n\n /**\n * Optional Content-Security-Policy override for the per-app nginx\n * sidecar serving the docs site (and the `<meta http-equiv>` tag\n * injected into `index.html` as a defense-in-depth fallback when\n * the bundle is served from a static host that bypasses nginx).\n *\n * Typed against `WildoCspConfigSchema` from\n * `@wildo-ai/platform-config-lib` (auth-hardening.md Slice B B-Step 1).\n * The parsed value is consumed by the build-time generator at\n * `platform-config-lib/src/project-config/shared/csp-emit.ts` (Slice B B-Step 3)\n * which produces the per-app nginx `add_header` line and the\n * `<meta http-equiv>` tag for the Docusaurus build to inject.\n *\n * Default behavior when omitted: NO policy emitted on either channel\n * (the resolver short-circuits to `null` — same as `enabled: false`).\n * Opt-in is deliberate per the schema design: frontends that have\n * not audited their third-party JS / fetch surface should not ship\n * a half-baked CSP that breaks features without protecting anything.\n */\n csp: WildoCspConfigSchema.optional(),\n});\nexport type WildoTechnicalDocConfig = z.infer<typeof WildoTechnicalDocConfigSchema>;\nexport type WildoTechnicalDocConfigInput = z.input<typeof WildoTechnicalDocConfigSchema>;\n/** @wildo_source:part:end engine.saas-technical-doc.config */\n"]}
1
+ {"version":3,"file":"wildo-tech-doc-config.schemas.js","sourceRoot":"","sources":["../../../src/config/wildo-tech-doc-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,+CAA+C,EAAE,MAAM,uDAAuD,CAAC;AACxH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kCAAkC,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEpH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAc,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4CAA4C,GAAG,kCAAkC,CAAC,MAAM,CAAC;IACpG,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACjD,CAAC,CAAC;AAGH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,YAAY,CAAC;IAC1D;;;;;OAKG;IACH,mBAAmB,EAAE,+CAA+C;IAEpE;;;;;;;;OAQG;IACH,aAAa,EAAE,CAAC;SACb,YAAY,CAAC;QACZ,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACxD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACzD,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KAChE,CAAC;SACD,QAAQ,EAAE;IAEb;;;;;;;;;;OAUG;IACH,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAE/D;;;;OAIG;IACH,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAE3D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC;QACvB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;KACjC,CAAC,CAAC,QAAQ,EAAE;IAEb;;;;;;;;OAQG;IACH,8BAA8B,EAAE,CAAC,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAEvG;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;IAEnD;;;;;;;;;;;;;;;OAeG;IACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAEnD;;;;;;;;;;;;;;;;;;OAkBG;IACH,GAAG,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAGH,8DAA8D","sourcesContent":["/**\n * @wildo_source:part:start engine.saas-technical-doc.config facet:layer:engine facet:family:technical-doc\n *\n * Per-service technical-documentation configuration authored as\n * `wildo.tech-doc.config.ts`. The strict schema owns only settings with live\n * consumers: publication budgets and public sentinels, API-reference inputs,\n * presentation metadata, and the docs service CSP. Framework narrative content\n * comes from the engine topic catalogue, not from application-local recipes.\n */\n\nimport { WildoCspConfigSchema } from '@wildo-ai/platform-config-lib';\nimport { CoreResourceType } from '@wildo-ai/saas-models';\nimport { TechnicalDocumentationSupportedApiVersionSchema } from '@wildo-ai/saas-specifications/technical-documentation';\nimport { z } from 'zod';\nimport { ApiReferenceResourceCategorySchema, OpenApiServerSchema } from '../companion/operation-projection.schemas';\n\n/**\n * Sentinel for `apiDocResources` meaning \"document every core resource that has\n * API-bearing operations\" — the full framework resource catalog. Distinct from\n * an explicit curated array so an app can opt into everything without listing\n * (and re-listing, as the engine grows) every `CoreResourceType` by hand.\n */\nexport const API_DOC_RESOURCES_ALL = 'all' as const;\n\n/**\n * One complete category declaration for the resources published by this API\n * reference. `resourceNames` uses the generated OpenAPI tag name, which is\n * the resolved resource identifier, rather than a display label or a\n * filesystem location. The companion rejects a duplicate, stale or missing\n * assignment whenever this feature is configured.\n */\nexport const ApiReferenceResourceCategoryAssignmentSchema = ApiReferenceResourceCategorySchema.extend({\n resourceNames: z.array(z.string().min(1)).min(1),\n});\nexport type ApiReferenceResourceCategoryAssignment = z.infer<typeof ApiReferenceResourceCategoryAssignmentSchema>;\n\n/**\n * Per-service technical-documentation configuration block.\n *\n * Authored as `export default defineTechnicalDocConfig({...})` in\n * `<tech-doc-service-root>/wildo.tech-doc.config.ts`. The companion\n * loads this file once at bootstrap via jiti and projects fields\n * into the OpenAPI generator and Docusaurus/CSP build surfaces.\n *\n * @example\n * ```ts\n * import { defineTechnicalDocConfig } from '@wildo-ai/saas-technical-doc';\n *\n * export default defineTechnicalDocConfig({\n * supportedApiVersion: '1.0.0',\n * publicMarketingTitle: 'Northstar Tasks — Technical Documentation',\n * apiDocResources: 'all', // also document every core engine resource\n * });\n * ```\n */\nexport const WildoTechnicalDocConfigSchema = z.strictObject({\n /**\n * Exact public API contract release supported by this documentation\n * publication. It is required because OpenAPI mandates a version and a\n * placeholder would make the generated reference look authoritative while\n * carrying no usable compatibility claim.\n */\n supportedApiVersion: TechnicalDocumentationSupportedApiVersionSchema,\n\n /**\n * Ceilings on the published documentation tree, applied per field over the engine\n * defaults (`TECHNICAL_DOCUMENTATION_DEFAULT_OUTPUT_BUDGETS`).\n *\n * Omitting this is the normal case and is SAFE: absence yields the engine ceilings, not\n * an unbounded build. Declare only the field an application genuinely outgrows — a\n * partial declaration keeps the others tracking the engine, so raising a page count does\n * not silently freeze a copy of every other limit at today's value.\n */\n outputBudgets: z\n .strictObject({\n maximumPageCount: z.number().int().positive().optional(),\n maximumTotalBytes: z.number().int().positive().optional(),\n maximumSearchIndexBytes: z.number().int().positive().optional(),\n })\n .optional(),\n\n /**\n * Additional byte sequences that must never appear in the PUBLIC documentation tree.\n * Publication fails naming the offending file.\n *\n * **Unioned with the engine's mandatory sentinels, never replacing them** — an\n * application can arm more canaries, and cannot disarm the engine's.\n *\n * Choose sequences that cannot legitimately appear in published prose. Generic markers\n * (`secret`, `token`, `Bearer`) fire on the authentication and webhook guides\n * themselves, and a canary that cries on correct content is one people learn to remove.\n */\n forbiddenPublicSentinels: z.array(z.string().min(1)).optional(),\n\n /**\n * Public-facing title for the docs site (browser tab title +\n * landing page header). Optional — falls back to\n * `WildoSaasConfig.displayName` when omitted.\n */\n publicMarketingTitle: z.string().min(1).max(200).optional(),\n\n /**\n * Opt-in: include framework (engine) core resources in this app's generated\n * OpenAPI, in addition to the app's own resources. This setting does not\n * mutate runtime registration: backend startup already merges the engine core\n * resource maps, then applies resolved billing/lifecycle exclusions. The dev\n * companion projects the selected core resources with those same exclusions\n * and their authored Tier-1/2/3 spec semantics.\n *\n * - `'all'` ({@link API_DOC_RESOURCES_ALL}) — document every core resource that\n * has API-bearing operations after resolved feature exclusions. Convenient,\n * but broad; it is configuration-derived eligibility, not live-route proof.\n * - `CoreResourceType[]` — a curated subset (e.g. `[CoreResourceType.ORGANIZATIONS,\n * CoreResourceType.ORGANIZATION_MEMBERS, CoreResourceType.FILES]`).\n *\n * Omitted (default): only the app's own resources are documented.\n *\n * There is no organizational section. `OpenApiSection` has exactly two members,\n * `API_REFERENCE` and `APPLICATION_ADMINISTRATION_API_REFERENCE`, neither of which is scoped to\n * an organization. The split is made per OPERATION, from the `consumerApiSection` the source\n * projector resolves, so a selected core resource's operations may land in either. Nothing the\n * docs site emits is auth-gated; see `docs-auth-session.schemas.ts` for why the decoded role axis\n * is not a control.\n */\n apiDocResources: z.union([\n z.array(z.enum(CoreResourceType)),\n z.literal(API_DOC_RESOURCES_ALL),\n ]).optional(),\n\n /**\n * Explicit source-owned grouping for the generated API reference.\n *\n * Omit this only when an application deliberately has no API taxonomy yet.\n * When present, it must classify every published resource exactly once:\n * categories cannot silently drift as framework or application resources are\n * added or removed. The category facts become `tags[].x-wildo.category` in\n * the canonical OpenAPI document and are consumed by the generic renderer.\n */\n apiReferenceResourceCategories: z.array(ApiReferenceResourceCategoryAssignmentSchema).min(1).optional(),\n\n /**\n * App-enriched OpenAPI `servers[]` — the base URLs the API is reachable at,\n * surfaced in the generated docs (and used by the \"Try it\" console + SDK\n * generators). **This is the one piece of auth/transport metadata the\n * framework cannot derive**: the security SCHEMES are framework-universal and\n * emitted automatically (every Wildo API uses a JWT bearer + a scoped API key\n * in the standard `Authorization` header),\n * but deployment URLs are application/environment knowledge — only the app\n * knows its staging/production domains.\n *\n * Each entry is `{ url, description? }` where `url` is the bare ORIGIN\n * (host[:port]) — do NOT append `/api/v1`: operation paths already carry that\n * mount, and the effective URL is `server.url` + path, so appending it would\n * double the prefix. Order is preserved (the first entry is the docs default).\n *\n * @example\n * ```ts\n * apiServers: [\n * { url: 'https://api.example.com', description: 'Production' },\n * { url: 'http://localhost:4241', description: 'Local development' },\n * ],\n * ```\n *\n * Omitted (default): no `servers` block is emitted (the docs still render; the\n * \"Try it\" console just has no preset target).\n */\n apiServers: z.array(OpenApiServerSchema).optional(),\n\n /**\n * App-authored markdown intro for the generated API reference landing page\n * (the OpenAPI `info.description`). Use it to frame the API in the app's own\n * voice — what it's for, key concepts, links to guides.\n *\n * This is PREPENDED to a framework-universal \"API conventions\" section the\n * generator always emits (Authentication, Base URL, Pagination, Idempotency,\n * Errors — derived from how every Wildo API behaves), so an app gets a\n * complete, accurate landing page even with no overview, and a branded one\n * when it supplies this.\n *\n * @example\n * ```ts\n * apiOverview: 'The Northstar Tasks API lets you manage projects, work items, and assignments.',\n * ```\n */\n apiOverview: z.string().min(1).max(8000).optional(),\n\n /**\n * Optional Content-Security-Policy override for the per-app nginx\n * sidecar serving the docs site (and the `<meta http-equiv>` tag\n * injected into `index.html` as a defense-in-depth fallback when\n * the bundle is served from a static host that bypasses nginx).\n *\n * Typed against `WildoCspConfigSchema` from\n * `@wildo-ai/platform-config-lib` (auth-hardening.md Slice B B-Step 1).\n * The parsed value is consumed by the build-time generator at\n * `platform-config-lib/src/project-config/shared/csp-emit.ts` (Slice B B-Step 3)\n * which produces the per-app nginx `add_header` line and the\n * `<meta http-equiv>` tag for the Docusaurus build to inject.\n *\n * Default behavior when omitted: NO policy emitted on either channel\n * (the resolver short-circuits to `null` — same as `enabled: false`).\n * Opt-in is deliberate per the schema design: frontends that have\n * not audited their third-party JS / fetch surface should not ship\n * a half-baked CSP that breaks features without protecting anything.\n */\n csp: WildoCspConfigSchema.optional(),\n});\nexport type WildoTechnicalDocConfig = z.infer<typeof WildoTechnicalDocConfigSchema>;\nexport type WildoTechnicalDocConfigInput = z.input<typeof WildoTechnicalDocConfigSchema>;\n/** @wildo_source:part:end engine.saas-technical-doc.config */\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"application-consumer-documentation-content-manifest.schemas.d.ts","sourceRoot":"","sources":["../../../../src/content/application-consumer-documentation-content-manifest.schemas.ts"],"names":[],"mappings":"AAAA,wJAAwJ;AACxJ,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,0FAA0F;AAC1F,oBAAY,gDAAgD;IAC1D,aAAa,iCAAiC;CAC/C;AAED,8GAA8G;AAC9G,eAAO,MAAM,qDAAqD,EAAG,oEAA6E,CAAC;AAEnJ,eAAO,MAAM,+DAA+D,EAAG,oCAA6C,CAAC;AAC7H;;;;;;GAMG;AACH,eAAO,MAAM,8DAA8D,EAAG,uBAAgC,CAAC;AAC/G;;;;GAIG;AACH,eAAO,MAAM,qEAAqE,EAAG,8BAAuC,CAAC;AAE7H,eAAO,MAAM,2DAA2D;;;;IAItE;;;;;OAKG;;;kBAGH,CAAC;AACH,MAAM,MAAM,qDAAqD,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2DAA2D,CAAC,CAAC;AAEhJ,eAAO,MAAM,2DAA2D;;;;kBAoBpE,CAAC;AACL,MAAM,MAAM,qDAAqD,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2DAA2D,CAAC,CAAC;AAEhJ;;;;;GAKG;AACH,eAAO,MAAM,uDAAuD;;;;;;;;;;QAxClE;;;;;WAKG;;;;;;;;;kBAqFD,CAAC;AACL,MAAM,MAAM,iDAAiD,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uDAAuD,CAAC,CAAC;AAExI,MAAM,WAAW,iDAAiD;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}
1
+ {"version":3,"file":"application-consumer-documentation-content-manifest.schemas.d.ts","sourceRoot":"","sources":["../../../src/content/application-consumer-documentation-content-manifest.schemas.ts"],"names":[],"mappings":"AAAA,wJAAwJ;AACxJ,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,0FAA0F;AAC1F,oBAAY,gDAAgD;IAC1D,aAAa,iCAAiC;CAC/C;AAED,8GAA8G;AAC9G,eAAO,MAAM,qDAAqD,EAAG,oEAA6E,CAAC;AAEnJ,eAAO,MAAM,+DAA+D,EAAG,oCAA6C,CAAC;AAC7H;;;;;;GAMG;AACH,eAAO,MAAM,8DAA8D,EAAG,uBAAgC,CAAC;AAC/G;;;;GAIG;AACH,eAAO,MAAM,qEAAqE,EAAG,8BAAuC,CAAC;AAE7H,eAAO,MAAM,2DAA2D;;;;IAItE;;;;;OAKG;;;kBAGH,CAAC;AACH,MAAM,MAAM,qDAAqD,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2DAA2D,CAAC,CAAC;AAEhJ,eAAO,MAAM,2DAA2D;;;;kBAoBpE,CAAC;AACL,MAAM,MAAM,qDAAqD,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2DAA2D,CAAC,CAAC;AAEhJ;;;;;GAKG;AACH,eAAO,MAAM,uDAAuD;;;;;;;;;;QAxClE;;;;;WAKG;;;;;;;;;kBAqFD,CAAC;AACL,MAAM,MAAM,iDAAiD,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uDAAuD,CAAC,CAAC;AAExI,MAAM,WAAW,iDAAiD;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B"}