@agent-teams/engineering-foundation 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +32 -0
  2. package/dist/cli-arguments.d.ts +5 -0
  3. package/dist/cli-arguments.d.ts.map +1 -1
  4. package/dist/cli-arguments.js +78 -15
  5. package/dist/cli-arguments.js.map +1 -1
  6. package/dist/cli.js +38 -13
  7. package/dist/cli.js.map +1 -1
  8. package/dist/document-authoring/adapters/node/node-authoring-profile-reader.d.ts +9 -0
  9. package/dist/document-authoring/adapters/node/node-authoring-profile-reader.d.ts.map +1 -0
  10. package/dist/document-authoring/adapters/node/node-authoring-profile-reader.js +53 -0
  11. package/dist/document-authoring/adapters/node/node-authoring-profile-reader.js.map +1 -0
  12. package/dist/document-authoring/adapters/node/node-metadata-instance-validator.d.ts +9 -0
  13. package/dist/document-authoring/adapters/node/node-metadata-instance-validator.d.ts.map +1 -0
  14. package/dist/document-authoring/adapters/node/node-metadata-instance-validator.js +84 -0
  15. package/dist/document-authoring/adapters/node/node-metadata-instance-validator.js.map +1 -0
  16. package/dist/document-authoring/adapters/node/node-owner-membership-reader.d.ts +10 -0
  17. package/dist/document-authoring/adapters/node/node-owner-membership-reader.d.ts.map +1 -0
  18. package/dist/document-authoring/adapters/node/node-owner-membership-reader.js +62 -0
  19. package/dist/document-authoring/adapters/node/node-owner-membership-reader.js.map +1 -0
  20. package/dist/document-authoring/adapters/node/read-document-authority-file.d.ts +12 -0
  21. package/dist/document-authoring/adapters/node/read-document-authority-file.d.ts.map +1 -0
  22. package/dist/document-authoring/adapters/node/read-document-authority-file.js +88 -0
  23. package/dist/document-authoring/adapters/node/read-document-authority-file.js.map +1 -0
  24. package/dist/document-authoring/application/model/document-catalog.d.ts +59 -0
  25. package/dist/document-authoring/application/model/document-catalog.d.ts.map +1 -0
  26. package/dist/document-authoring/application/model/document-catalog.js +2 -0
  27. package/dist/document-authoring/application/model/document-catalog.js.map +1 -0
  28. package/dist/document-authoring/application/model/document-find.d.ts +18 -0
  29. package/dist/document-authoring/application/model/document-find.d.ts.map +1 -0
  30. package/dist/document-authoring/application/model/document-find.js +2 -0
  31. package/dist/document-authoring/application/model/document-find.js.map +1 -0
  32. package/dist/document-authoring/application/policies/document-catalog-diagnostics.d.ts +8 -0
  33. package/dist/document-authoring/application/policies/document-catalog-diagnostics.d.ts.map +1 -0
  34. package/dist/document-authoring/application/policies/document-catalog-diagnostics.js +44 -0
  35. package/dist/document-authoring/application/policies/document-catalog-diagnostics.js.map +1 -0
  36. package/dist/document-authoring/application/policies/document-catalog-fields.d.ts +18 -0
  37. package/dist/document-authoring/application/policies/document-catalog-fields.d.ts.map +1 -0
  38. package/dist/document-authoring/application/policies/document-catalog-fields.js +62 -0
  39. package/dist/document-authoring/application/policies/document-catalog-fields.js.map +1 -0
  40. package/dist/document-authoring/application/policies/document-repository-path.d.ts +2 -0
  41. package/dist/document-authoring/application/policies/document-repository-path.d.ts.map +1 -0
  42. package/dist/document-authoring/application/policies/document-repository-path.js +5 -0
  43. package/dist/document-authoring/application/policies/document-repository-path.js.map +1 -0
  44. package/dist/document-authoring/application/policies/inspect-catalog-document.d.ts +11 -0
  45. package/dist/document-authoring/application/policies/inspect-catalog-document.d.ts.map +1 -0
  46. package/dist/document-authoring/application/policies/inspect-catalog-document.js +78 -0
  47. package/dist/document-authoring/application/policies/inspect-catalog-document.js.map +1 -0
  48. package/dist/document-authoring/application/ports/authoring-profile-reader.d.ts +27 -0
  49. package/dist/document-authoring/application/ports/authoring-profile-reader.d.ts.map +1 -0
  50. package/dist/document-authoring/application/ports/authoring-profile-reader.js +2 -0
  51. package/dist/document-authoring/application/ports/authoring-profile-reader.js.map +1 -0
  52. package/dist/document-authoring/application/ports/documentation-search-catalog-reader.d.ts +10 -0
  53. package/dist/document-authoring/application/ports/documentation-search-catalog-reader.d.ts.map +1 -0
  54. package/dist/document-authoring/application/ports/documentation-search-catalog-reader.js +2 -0
  55. package/dist/document-authoring/application/ports/documentation-search-catalog-reader.js.map +1 -0
  56. package/dist/document-authoring/application/ports/metadata-instance-validator.d.ts +17 -0
  57. package/dist/document-authoring/application/ports/metadata-instance-validator.d.ts.map +1 -0
  58. package/dist/document-authoring/application/ports/metadata-instance-validator.js +2 -0
  59. package/dist/document-authoring/application/ports/metadata-instance-validator.js.map +1 -0
  60. package/dist/document-authoring/application/ports/owner-membership-reader.d.ts +14 -0
  61. package/dist/document-authoring/application/ports/owner-membership-reader.d.ts.map +1 -0
  62. package/dist/document-authoring/application/ports/owner-membership-reader.js +2 -0
  63. package/dist/document-authoring/application/ports/owner-membership-reader.js.map +1 -0
  64. package/dist/document-authoring/application/projections/document-catalog-projections.d.ts +3 -0
  65. package/dist/document-authoring/application/projections/document-catalog-projections.d.ts.map +1 -0
  66. package/dist/document-authoring/application/projections/document-catalog-projections.js +24 -0
  67. package/dist/document-authoring/application/projections/document-catalog-projections.js.map +1 -0
  68. package/dist/document-authoring/application/use-cases/build-documentation-catalog.d.ts +23 -0
  69. package/dist/document-authoring/application/use-cases/build-documentation-catalog.d.ts.map +1 -0
  70. package/dist/document-authoring/application/use-cases/build-documentation-catalog.js +204 -0
  71. package/dist/document-authoring/application/use-cases/build-documentation-catalog.js.map +1 -0
  72. package/dist/document-authoring/application/use-cases/find-documents.d.ts +14 -0
  73. package/dist/document-authoring/application/use-cases/find-documents.d.ts.map +1 -0
  74. package/dist/document-authoring/application/use-cases/find-documents.js +95 -0
  75. package/dist/document-authoring/application/use-cases/find-documents.js.map +1 -0
  76. package/dist/document-authoring/document-catalog-error.d.ts +6 -0
  77. package/dist/document-authoring/document-catalog-error.d.ts.map +1 -0
  78. package/dist/document-authoring/document-catalog-error.js +9 -0
  79. package/dist/document-authoring/document-catalog-error.js.map +1 -0
  80. package/dist/document-authoring/find-command.d.ts +37 -0
  81. package/dist/document-authoring/find-command.d.ts.map +1 -0
  82. package/dist/document-authoring/find-command.js +180 -0
  83. package/dist/document-authoring/find-command.js.map +1 -0
  84. package/dist/document-authoring/index.d.ts +12 -0
  85. package/dist/document-authoring/index.d.ts.map +1 -0
  86. package/dist/document-authoring/index.js +27 -0
  87. package/dist/document-authoring/index.js.map +1 -0
  88. package/dist/document-command.d.ts +3 -0
  89. package/dist/document-command.d.ts.map +1 -0
  90. package/dist/document-command.js +44 -0
  91. package/dist/document-command.js.map +1 -0
  92. package/dist/documentation-observation/adapters/outbound/filesystem/filesystem-markdown-document-reader.d.ts +3 -0
  93. package/dist/documentation-observation/adapters/outbound/filesystem/filesystem-markdown-document-reader.d.ts.map +1 -1
  94. package/dist/documentation-observation/adapters/outbound/filesystem/filesystem-markdown-document-reader.js +18 -1
  95. package/dist/documentation-observation/adapters/outbound/filesystem/filesystem-markdown-document-reader.js.map +1 -1
  96. package/dist/documentation-observation/adapters/outbound/filesystem/filesystem-markdown-tree-observer.d.ts.map +1 -1
  97. package/dist/documentation-observation/adapters/outbound/filesystem/filesystem-markdown-tree-observer.js +29 -2
  98. package/dist/documentation-observation/adapters/outbound/filesystem/filesystem-markdown-tree-observer.js.map +1 -1
  99. package/dist/documentation-observation/application/model/markdown-document.d.ts +1 -1
  100. package/dist/documentation-observation/application/model/markdown-document.d.ts.map +1 -1
  101. package/dist/documentation-observation/application/model/markdown-document.js.map +1 -1
  102. package/dist/documentation-observation/application/ports/markdown-repository.d.ts +1 -0
  103. package/dist/documentation-observation/application/ports/markdown-repository.d.ts.map +1 -1
  104. package/dist/foundation-state-contract.d.ts +7 -0
  105. package/dist/foundation-state-contract.d.ts.map +1 -0
  106. package/dist/foundation-state-contract.js +7 -0
  107. package/dist/foundation-state-contract.js.map +1 -0
  108. package/dist/index.d.ts +2 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +1 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/local-mode/attach-transaction.d.ts.map +1 -1
  113. package/dist/local-mode/attach-transaction.js +13 -7
  114. package/dist/local-mode/attach-transaction.js.map +1 -1
  115. package/dist/local-mode/inspection.d.ts +4 -1
  116. package/dist/local-mode/inspection.d.ts.map +1 -1
  117. package/dist/local-mode/inspection.js +20 -0
  118. package/dist/local-mode/inspection.js.map +1 -1
  119. package/dist/local-mode/local-state-store.d.ts.map +1 -1
  120. package/dist/local-mode/local-state-store.js +8 -105
  121. package/dist/local-mode/local-state-store.js.map +1 -1
  122. package/dist/local-mode/service.d.ts.map +1 -1
  123. package/dist/local-mode/service.js +17 -4
  124. package/dist/local-mode/service.js.map +1 -1
  125. package/dist/local-mode/types.d.ts +7 -4
  126. package/dist/local-mode/types.d.ts.map +1 -1
  127. package/dist/local-mode/types.js +1 -4
  128. package/dist/local-mode/types.js.map +1 -1
  129. package/dist/package-self-check.d.ts +1 -1
  130. package/dist/package-self-check.d.ts.map +1 -1
  131. package/dist/package-self-check.js +37 -23
  132. package/dist/package-self-check.js.map +1 -1
  133. package/dist/package-version.d.ts +2 -0
  134. package/dist/package-version.d.ts.map +1 -0
  135. package/dist/package-version.js +10 -0
  136. package/dist/package-version.js.map +1 -0
  137. package/dist/process-execution/windows-managed-process.d.ts.map +1 -1
  138. package/dist/process-execution/windows-managed-process.js +1 -0
  139. package/dist/process-execution/windows-managed-process.js.map +1 -1
  140. package/dist/public-api-surface.d.ts +1 -0
  141. package/dist/public-api-surface.d.ts.map +1 -1
  142. package/dist/public-api-surface.js +1 -0
  143. package/dist/public-api-surface.js.map +1 -1
  144. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.d.ts.map +1 -1
  145. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js +52 -8
  146. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js.map +1 -1
  147. package/dist/scaffolding/adapters/node/filesystem-file-identity.d.ts +5 -1
  148. package/dist/scaffolding/adapters/node/filesystem-file-identity.d.ts.map +1 -1
  149. package/dist/scaffolding/adapters/node/filesystem-file-identity.js +2 -1
  150. package/dist/scaffolding/adapters/node/filesystem-file-identity.js.map +1 -1
  151. package/dist/scaffolding/adapters/node/filesystem-journal.d.ts +1 -1
  152. package/dist/scaffolding/adapters/node/filesystem-journal.d.ts.map +1 -1
  153. package/dist/scaffolding/adapters/node/filesystem-journal.js +4 -20
  154. package/dist/scaffolding/adapters/node/filesystem-journal.js.map +1 -1
  155. package/dist/scaffolding/adapters/node/installed-foundation-version.d.ts +1 -1
  156. package/dist/scaffolding/adapters/node/installed-foundation-version.d.ts.map +1 -1
  157. package/dist/scaffolding/adapters/node/installed-foundation-version.js +1 -9
  158. package/dist/scaffolding/adapters/node/installed-foundation-version.js.map +1 -1
  159. package/dist/scaffolding/kernel/authority-journal-validation.d.ts +4 -0
  160. package/dist/scaffolding/kernel/authority-journal-validation.d.ts.map +1 -0
  161. package/dist/scaffolding/kernel/authority-journal-validation.js +24 -0
  162. package/dist/scaffolding/kernel/authority-journal-validation.js.map +1 -0
  163. package/dist/schema-catalog.d.ts.map +1 -1
  164. package/dist/schema-catalog.js +12 -2
  165. package/dist/schema-catalog.js.map +1 -1
  166. package/dist/schema-ids.d.ts +1 -1
  167. package/dist/schema-ids.d.ts.map +1 -1
  168. package/dist/schema-ids.js +6 -0
  169. package/dist/schema-ids.js.map +1 -1
  170. package/dist/transaction-coordination/adapters/node/installed-foundation-build-identity.d.ts +11 -0
  171. package/dist/transaction-coordination/adapters/node/installed-foundation-build-identity.d.ts.map +1 -0
  172. package/dist/transaction-coordination/adapters/node/installed-foundation-build-identity.js +130 -0
  173. package/dist/transaction-coordination/adapters/node/installed-foundation-build-identity.js.map +1 -0
  174. package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.d.ts +7 -0
  175. package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.d.ts.map +1 -0
  176. package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.js +336 -0
  177. package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.js.map +1 -0
  178. package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.d.ts +4 -0
  179. package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.d.ts.map +1 -0
  180. package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.js +76 -0
  181. package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.js.map +1 -0
  182. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-coordinator.d.ts +3 -0
  183. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-coordinator.d.ts.map +1 -0
  184. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-coordinator.js +23 -0
  185. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-coordinator.js.map +1 -0
  186. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.d.ts +12 -0
  187. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.d.ts.map +1 -0
  188. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.js +332 -0
  189. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.js.map +1 -0
  190. package/dist/transaction-coordination/application/foundation-transaction-coordinator.d.ts +22 -0
  191. package/dist/transaction-coordination/application/foundation-transaction-coordinator.d.ts.map +1 -0
  192. package/dist/transaction-coordination/application/foundation-transaction-coordinator.js +78 -0
  193. package/dist/transaction-coordination/application/foundation-transaction-coordinator.js.map +1 -0
  194. package/dist/transaction-coordination/application/foundation-transaction-error.d.ts +16 -0
  195. package/dist/transaction-coordination/application/foundation-transaction-error.d.ts.map +1 -0
  196. package/dist/transaction-coordination/application/foundation-transaction-error.js +19 -0
  197. package/dist/transaction-coordination/application/foundation-transaction-error.js.map +1 -0
  198. package/dist/transaction-coordination/application/model/transaction-status.d.ts +47 -0
  199. package/dist/transaction-coordination/application/model/transaction-status.d.ts.map +1 -0
  200. package/dist/transaction-coordination/application/model/transaction-status.js +2 -0
  201. package/dist/transaction-coordination/application/model/transaction-status.js.map +1 -0
  202. package/dist/transaction-coordination/application/ports/foundation-operation-lock.d.ts +7 -0
  203. package/dist/transaction-coordination/application/ports/foundation-operation-lock.d.ts.map +1 -0
  204. package/dist/transaction-coordination/application/ports/foundation-operation-lock.js +2 -0
  205. package/dist/transaction-coordination/application/ports/foundation-operation-lock.js.map +1 -0
  206. package/dist/transaction-coordination/application/ports/foundation-transaction-slot.d.ts +5 -0
  207. package/dist/transaction-coordination/application/ports/foundation-transaction-slot.d.ts.map +1 -0
  208. package/dist/transaction-coordination/application/ports/foundation-transaction-slot.js +2 -0
  209. package/dist/transaction-coordination/application/ports/foundation-transaction-slot.js.map +1 -0
  210. package/package.json +11 -1
  211. package/schemas/document-authoring-profile/v1.schema.json +186 -0
  212. package/schemas/document-command-envelope/v1.schema.json +161 -0
  213. package/schemas/document-intent/v1.schema.json +60 -0
  214. package/schemas/document-plan/v1.schema.json +146 -0
  215. package/schemas/document-receipt/v1.schema.json +141 -0
  216. package/schemas/foundation-transaction-envelope/v2.schema.json +106 -0
@@ -0,0 +1,62 @@
1
+ import { CapabilityInputError } from "../../../capability-runtime.js";
2
+ import { assertNotCancelled } from "../../../cancellation.js";
3
+ import { compareBinaryStrings } from "../../../binary-string-comparator.js";
4
+ import { parseStrictYamlSource } from "../../../strict-yaml.js";
5
+ import { DocumentCatalogError } from "../../document-catalog-error.js";
6
+ import { readDocumentAuthorityFile } from "./read-document-authority-file.js";
7
+ const MAX_OWNER_CATALOG_BYTES = 1024 * 1024;
8
+ const MAX_OWNER_COUNT = 4096;
9
+ const OWNER_ID = /^[A-Za-z0-9@][A-Za-z0-9@._/-]*$/u;
10
+ function isRecord(value) {
11
+ return typeof value === "object" && value !== null && !Array.isArray(value);
12
+ }
13
+ function invalidOwnerCatalog(message, cause) {
14
+ throw new DocumentCatalogError("DOCUMENT_CATALOG_INPUT_INVALID", message, cause === undefined ? undefined : { cause });
15
+ }
16
+ function parseOwnerIds(source) {
17
+ let input;
18
+ try {
19
+ input = parseStrictYamlSource(source, "document-owner-catalog");
20
+ }
21
+ catch (error) {
22
+ if (error instanceof CapabilityInputError) {
23
+ invalidOwnerCatalog("Document owner catalog must contain strict YAML.", error);
24
+ }
25
+ throw error;
26
+ }
27
+ if (!isRecord(input)) {
28
+ invalidOwnerCatalog("Document owner catalog must be an object.");
29
+ }
30
+ const keys = Object.keys(input).toSorted(compareBinaryStrings);
31
+ if (keys.length !== 2 ||
32
+ keys[0] !== "owners" ||
33
+ keys[1] !== "version" ||
34
+ input.version !== 1 ||
35
+ !isRecord(input.owners)) {
36
+ invalidOwnerCatalog("Document owner catalog must contain only version 1 and an owners object.");
37
+ }
38
+ const owners = input.owners;
39
+ const ids = Object.keys(owners).toSorted(compareBinaryStrings);
40
+ if (ids.length === 0 || ids.length > MAX_OWNER_COUNT) {
41
+ invalidOwnerCatalog(`Document owner catalog must contain between 1 and ${MAX_OWNER_COUNT} owners.`);
42
+ }
43
+ for (const id of ids) {
44
+ if (id.length > 214 || !OWNER_ID.test(id) || !isRecord(owners[id])) {
45
+ invalidOwnerCatalog("Document owner IDs must be normalized opaque identifiers with object metadata.");
46
+ }
47
+ }
48
+ return Object.freeze(ids);
49
+ }
50
+ export class NodeOwnerMembershipReader {
51
+ async read(request) {
52
+ assertNotCancelled(request.signal);
53
+ const file = await readDocumentAuthorityFile({
54
+ consumerRoot: request.consumerRoot,
55
+ maxBytes: MAX_OWNER_CATALOG_BYTES,
56
+ path: request.path
57
+ });
58
+ assertNotCancelled(request.signal);
59
+ return Object.freeze({ evidence: file.evidence, ids: parseOwnerIds(file.source) });
60
+ }
61
+ }
62
+ //# sourceMappingURL=node-owner-membership-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-owner-membership-reader.js","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-owner-membership-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { DocumentAuthorityEvidence } from "../../application/model/document-catalog.js";
2
+ export interface DocumentAuthorityFile {
3
+ readonly bytes: Buffer;
4
+ readonly evidence: DocumentAuthorityEvidence;
5
+ readonly source: string;
6
+ }
7
+ export declare function readDocumentAuthorityFile(request: {
8
+ readonly consumerRoot: string;
9
+ readonly maxBytes: number;
10
+ readonly path: string;
11
+ }): Promise<DocumentAuthorityFile>;
12
+ //# sourceMappingURL=read-document-authority-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-document-authority-file.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/read-document-authority-file.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,6CAA6C,CAAC;AAKrD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AA4ED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4BjC"}
@@ -0,0 +1,88 @@
1
+ import { createHash } from "node:crypto";
2
+ import { isAbsolute, resolve } from "node:path";
3
+ import { ContainedFileReadError, readContainedRegularFile } from "../../../filesystem-path-safety.js";
4
+ import { DocumentCatalogError } from "../../document-catalog-error.js";
5
+ const WINDOWS_DEVICE_COMPONENT = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/iu;
6
+ function inputInvalid(message, options) {
7
+ throw new DocumentCatalogError("DOCUMENT_CATALOG_INPUT_INVALID", message, options);
8
+ }
9
+ function assertPortableDocumentAuthorityPath(path) {
10
+ const segments = path.split("/");
11
+ if (path.length === 0 ||
12
+ path.length > 512 ||
13
+ isAbsolute(path) ||
14
+ path.includes("\\") ||
15
+ !/^[A-Za-z0-9._@/-]+$/u.test(path) ||
16
+ segments.some((segment) => segment.length === 0 ||
17
+ segment === "." ||
18
+ segment === ".." ||
19
+ segment.endsWith(".") ||
20
+ WINDOWS_DEVICE_COMPONENT.test(segment))) {
21
+ inputInvalid("Document authority paths must use the portable repository-relative path grammar.");
22
+ }
23
+ }
24
+ function decodeAuthoritySource(bytes, path) {
25
+ if (bytes.length >= 3 &&
26
+ bytes[0] === 0xef &&
27
+ bytes[1] === 0xbb &&
28
+ bytes[2] === 0xbf) {
29
+ inputInvalid(`Document authority must not contain a UTF-8 BOM: ${path}.`);
30
+ }
31
+ let source;
32
+ try {
33
+ source = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
34
+ }
35
+ catch (error) {
36
+ inputInvalid(`Document authority must contain well-formed UTF-8: ${path}.`, {
37
+ cause: error
38
+ });
39
+ }
40
+ if (source.includes("\u0000")) {
41
+ inputInvalid(`Document authority must not contain NUL characters: ${path}.`);
42
+ }
43
+ return source;
44
+ }
45
+ function digest(bytes) {
46
+ return `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
47
+ }
48
+ function unavailable(path, error) {
49
+ const detail = error.failure === "symlink"
50
+ ? "cannot traverse a symbolic link"
51
+ : error.failure === "invalid"
52
+ ? "must be a bounded regular file"
53
+ : error.failure === "escape"
54
+ ? "escapes the repository"
55
+ : "is unavailable or changed while reading";
56
+ throw new DocumentCatalogError("DOCUMENT_CATALOG_AUTHORITY_UNAVAILABLE", `Document authority ${detail}: ${path}.`, { cause: error });
57
+ }
58
+ export async function readDocumentAuthorityFile(request) {
59
+ assertPortableDocumentAuthorityPath(request.path);
60
+ let bytes;
61
+ try {
62
+ bytes = await readContainedRegularFile({
63
+ candidate: resolve(request.consumerRoot, request.path),
64
+ maxBytes: request.maxBytes,
65
+ root: request.consumerRoot
66
+ });
67
+ }
68
+ catch (error) {
69
+ if (error instanceof ContainedFileReadError) {
70
+ unavailable(request.path, error);
71
+ }
72
+ throw error;
73
+ }
74
+ if (bytes.length === 0) {
75
+ inputInvalid(`Document authority must not be empty: ${request.path}.`);
76
+ }
77
+ const source = decodeAuthoritySource(bytes, request.path);
78
+ return Object.freeze({
79
+ bytes,
80
+ evidence: Object.freeze({
81
+ digest: digest(bytes),
82
+ path: request.path,
83
+ size: bytes.byteLength
84
+ }),
85
+ source
86
+ });
87
+ }
88
+ //# sourceMappingURL=read-document-authority-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-document-authority-file.js","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/read-document-authority-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export type DocumentAuthorityDigest = `sha256:${string}`;
2
+ export interface DocumentAuthorityEvidence {
3
+ readonly digest: DocumentAuthorityDigest;
4
+ readonly path: string;
5
+ readonly size: number;
6
+ }
7
+ export interface DocumentDescriptor {
8
+ readonly id: string;
9
+ readonly owner: string;
10
+ readonly repositoryPath: string;
11
+ readonly source: "frontmatter-readme" | "markdown-tree";
12
+ readonly status: string;
13
+ readonly summary: string;
14
+ readonly title: string;
15
+ readonly type: string;
16
+ }
17
+ export interface DocumentIdentityProjectionEntry {
18
+ readonly id: string;
19
+ readonly repositoryPath: string;
20
+ }
21
+ export interface ReferencedDocumentProjection {
22
+ readonly id: string;
23
+ readonly path: string;
24
+ }
25
+ export interface DocumentationCatalogDiagnostic {
26
+ readonly message: string;
27
+ readonly ruleId: string;
28
+ readonly severity: "error";
29
+ readonly subject: string;
30
+ }
31
+ export interface DocumentationCatalogAuthority {
32
+ readonly metadataSchema: DocumentAuthorityEvidence;
33
+ readonly ownerCatalog: DocumentAuthorityEvidence;
34
+ readonly profile: DocumentAuthorityEvidence;
35
+ }
36
+ export interface DocumentationCatalogSnapshot {
37
+ readonly authority: DocumentationCatalogAuthority;
38
+ readonly diagnostics: readonly DocumentationCatalogDiagnostic[];
39
+ readonly documents: readonly DocumentDescriptor[];
40
+ readonly identityProjection: readonly DocumentIdentityProjectionEntry[];
41
+ readonly ownerIds: readonly string[];
42
+ readonly projectId: string;
43
+ readonly status: "complete" | "partial";
44
+ }
45
+ export interface DocumentSearchCorpusEntry {
46
+ readonly body: string;
47
+ readonly descriptor: DocumentDescriptor;
48
+ readonly headings: readonly string[];
49
+ }
50
+ export interface DocumentationSearchCatalogSnapshot {
51
+ readonly catalog: DocumentationCatalogSnapshot;
52
+ readonly documents: readonly DocumentSearchCorpusEntry[];
53
+ }
54
+ export interface ReferencedDocumentProjectionResult {
55
+ readonly documents: readonly ReferencedDocumentProjection[];
56
+ readonly missingIds: readonly string[];
57
+ readonly unresolvedIds: readonly string[];
58
+ }
59
+ //# sourceMappingURL=document-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-catalog.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/application/model/document-catalog.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,UAAU,MAAM,EAAE,CAAC;AAEzD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,eAAe,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC;IACnD,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;CAC7C;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAChE,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAClD,QAAQ,CAAC,kBAAkB,EAAE,SAAS,+BAA+B,EAAE,CAAC;IACxE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=document-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-catalog.js","sourceRoot":"","sources":["../../../../src/document-authoring/application/model/document-catalog.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { DocumentDescriptor, DocumentationCatalogDiagnostic } from "./document-catalog.js";
2
+ export interface DocumentFindFilters {
3
+ readonly id?: string;
4
+ readonly owner?: string;
5
+ readonly status?: string;
6
+ readonly type?: string;
7
+ }
8
+ export interface DocumentFindQuery {
9
+ readonly filters?: DocumentFindFilters;
10
+ readonly text?: string;
11
+ }
12
+ export interface DocumentFindResult {
13
+ readonly catalogStatus: "complete" | "partial";
14
+ readonly diagnostics: readonly DocumentationCatalogDiagnostic[];
15
+ readonly documents: readonly DocumentDescriptor[];
16
+ readonly matches: number;
17
+ }
18
+ //# sourceMappingURL=document-find.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-find.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/application/model/document-find.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,8BAA8B,EAC/B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAChE,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=document-find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-find.js","sourceRoot":"","sources":["../../../../src/document-authoring/application/model/document-find.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { MarkdownObservationIssue } from "../../../documentation-observation/application/model/markdown-document.js";
2
+ import type { DocumentIdentityProjectionEntry, DocumentationCatalogDiagnostic } from "../model/document-catalog.js";
3
+ export declare function catalogDiagnostic(ruleId: string, subject: string, message: string): DocumentationCatalogDiagnostic;
4
+ export declare function catalogObservationDiagnostic(issue: MarkdownObservationIssue): DocumentationCatalogDiagnostic;
5
+ export declare function catalogCollisionDiagnostics(paths: readonly string[]): readonly DocumentationCatalogDiagnostic[];
6
+ export declare function duplicateIdentityDiagnostics(entries: readonly DocumentIdentityProjectionEntry[]): readonly DocumentationCatalogDiagnostic[];
7
+ export declare function sortCatalogDiagnostics(diagnostics: readonly DocumentationCatalogDiagnostic[]): readonly DocumentationCatalogDiagnostic[];
8
+ //# sourceMappingURL=document-catalog-diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-catalog-diagnostics.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/application/policies/document-catalog-diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2EAA2E,CAAC;AAC1H,OAAO,KAAK,EACV,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,8BAA8B,CAOhC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,wBAAwB,GAC9B,8BAA8B,CAMhC;AAMD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,SAAS,8BAA8B,EAAE,CAiB3C;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,SAAS,+BAA+B,EAAE,GAClD,SAAS,8BAA8B,EAAE,CAgB3C;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,SAAS,8BAA8B,EAAE,GACrD,SAAS,8BAA8B,EAAE,CAO3C"}
@@ -0,0 +1,44 @@
1
+ import { compareBinaryStrings } from "../../../binary-string-comparator.js";
2
+ export function catalogDiagnostic(ruleId, subject, message) {
3
+ return Object.freeze({
4
+ message: message.slice(0, 1000),
5
+ ruleId,
6
+ severity: "error",
7
+ subject
8
+ });
9
+ }
10
+ export function catalogObservationDiagnostic(issue) {
11
+ return catalogDiagnostic(`document.catalog.${issue.kind}`, issue.repositoryPath, issue.message);
12
+ }
13
+ function normalizedCollisionKey(path) {
14
+ return path.normalize("NFC").toLowerCase();
15
+ }
16
+ export function catalogCollisionDiagnostics(paths) {
17
+ const grouped = new Map();
18
+ for (const path of paths) {
19
+ const key = normalizedCollisionKey(path);
20
+ const matches = grouped.get(key) ?? [];
21
+ matches.push(path);
22
+ grouped.set(key, matches);
23
+ }
24
+ return [...grouped.values()]
25
+ .filter((matches) => matches.length > 1)
26
+ .map((matches) => catalogDiagnostic("document.catalog.normalized-path-collision", matches.toSorted(compareBinaryStrings).join(","), "Document paths collide after case-folding and NFC normalization."));
27
+ }
28
+ export function duplicateIdentityDiagnostics(entries) {
29
+ const pathsById = new Map();
30
+ for (const entry of entries) {
31
+ const paths = pathsById.get(entry.id) ?? [];
32
+ paths.push(entry.repositoryPath);
33
+ pathsById.set(entry.id, paths);
34
+ }
35
+ return [...pathsById]
36
+ .filter(([, paths]) => paths.length > 1)
37
+ .map(([id, paths]) => catalogDiagnostic("document.catalog.duplicate-id", id, `Document ID occurs at multiple paths: ${paths.toSorted(compareBinaryStrings).join(", ")}.`));
38
+ }
39
+ export function sortCatalogDiagnostics(diagnostics) {
40
+ return diagnostics.toSorted((left, right) => compareBinaryStrings(left.ruleId, right.ruleId) ||
41
+ compareBinaryStrings(left.subject, right.subject) ||
42
+ compareBinaryStrings(left.message, right.message));
43
+ }
44
+ //# sourceMappingURL=document-catalog-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-catalog-diagnostics.js","sourceRoot":"","sources":["../../../../src/document-authoring/application/policies/document-catalog-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { MarkdownDocumentObservation } from "../../../documentation-observation/application/model/markdown-document.js";
2
+ import type { DocumentDescriptor, DocumentIdentityProjectionEntry } from "../model/document-catalog.js";
3
+ import { catalogDiagnostic } from "./document-catalog-diagnostics.js";
4
+ type DocumentFields = Omit<DocumentDescriptor, "repositoryPath" | "source" | "title">;
5
+ export type DocumentFieldInspection = {
6
+ readonly fields?: never;
7
+ readonly identity?: DocumentIdentityProjectionEntry;
8
+ } | {
9
+ readonly fields: DocumentFields;
10
+ readonly identity: DocumentIdentityProjectionEntry;
11
+ };
12
+ export declare function inspectDocumentFields(document: MarkdownDocumentObservation, metadata: Record<string, unknown>): DocumentFieldInspection;
13
+ export declare function documentTitle(document: MarkdownDocumentObservation): string | undefined;
14
+ export declare function invalidDocumentPathInspection(document: MarkdownDocumentObservation): {
15
+ readonly diagnostic: ReturnType<typeof catalogDiagnostic>;
16
+ } | undefined;
17
+ export {};
18
+ //# sourceMappingURL=document-catalog-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-catalog-fields.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/application/policies/document-catalog-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2EAA2E,CAAC;AAC7H,OAAO,KAAK,EACV,kBAAkB,EAClB,+BAA+B,EAChC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAMtE,KAAK,cAAc,GAAG,IAAI,CACxB,kBAAkB,EAClB,gBAAgB,GAAG,QAAQ,GAAG,OAAO,CACtC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IACE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,+BAA+B,CAAC;CACrD,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,+BAA+B,CAAC;CACpD,CAAC;AA8BN,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,2BAA2B,EACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,uBAAuB,CAuBzB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,2BAA2B,GACpC,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,2BAA2B,GACpC;IAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAA;CAAE,GAAG,SAAS,CAU3E"}
@@ -0,0 +1,62 @@
1
+ import { catalogDiagnostic } from "./document-catalog-diagnostics.js";
2
+ import { isDocumentRepositoryPath } from "./document-repository-path.js";
3
+ const OPAQUE_ID = /^[A-Za-z0-9@][A-Za-z0-9@._/-]*$/u;
4
+ const LOWER_ID = /^[a-z0-9][a-z0-9._/-]*$/u;
5
+ function containsControlCharacter(value) {
6
+ for (const character of value) {
7
+ const code = character.codePointAt(0) ?? 0;
8
+ if (code <= 0x1f || code === 0x7f) {
9
+ return true;
10
+ }
11
+ }
12
+ return false;
13
+ }
14
+ function stringField(metadata, field, maximumLength, pattern) {
15
+ const value = metadata[field];
16
+ return (typeof value === "string" &&
17
+ value.length > 0 &&
18
+ value.length <= maximumLength &&
19
+ !containsControlCharacter(value) &&
20
+ (pattern === undefined || pattern.test(value)))
21
+ ? value
22
+ : undefined;
23
+ }
24
+ export function inspectDocumentFields(document, metadata) {
25
+ const id = stringField(metadata, "id", 214, OPAQUE_ID);
26
+ const type = stringField(metadata, "type", 160, LOWER_ID);
27
+ const status = stringField(metadata, "status", 160, LOWER_ID);
28
+ const owner = stringField(metadata, "owner", 214, OPAQUE_ID);
29
+ const summary = stringField(metadata, "summary", 1000);
30
+ if (id === undefined ||
31
+ type === undefined ||
32
+ status === undefined ||
33
+ owner === undefined ||
34
+ summary === undefined) {
35
+ return id === undefined
36
+ ? Object.freeze({})
37
+ : Object.freeze({
38
+ identity: Object.freeze({ id, repositoryPath: document.repositoryPath })
39
+ });
40
+ }
41
+ return Object.freeze({
42
+ fields: Object.freeze({ id, owner, status, summary, type }),
43
+ identity: Object.freeze({ id, repositoryPath: document.repositoryPath })
44
+ });
45
+ }
46
+ export function documentTitle(document) {
47
+ const title = document.headings.find((heading) => heading.depth === 1)?.text;
48
+ return title !== undefined &&
49
+ title.length > 0 &&
50
+ title.length <= 240 &&
51
+ !containsControlCharacter(title)
52
+ ? title
53
+ : undefined;
54
+ }
55
+ export function invalidDocumentPathInspection(document) {
56
+ return isDocumentRepositoryPath(document.repositoryPath)
57
+ ? undefined
58
+ : Object.freeze({
59
+ diagnostic: catalogDiagnostic("document.catalog.path-invalid", document.repositoryPath, "Catalog document paths must use the portable repository path grammar.")
60
+ });
61
+ }
62
+ //# sourceMappingURL=document-catalog-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-catalog-fields.js","sourceRoot":"","sources":["../../../../src/document-authoring/application/policies/document-catalog-fields.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function isDocumentRepositoryPath(path: string): boolean;
2
+ //# sourceMappingURL=document-repository-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-repository-path.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/application/policies/document-repository-path.ts"],"names":[],"mappings":"AAGA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,5 @@
1
+ const DOCUMENT_REPOSITORY_PATH = /^(?!.*(?:^|\/)\.{1,2}(?:\/|$))(?!.*\.(?:\/|$))(?!.*(?:^|\/)(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.[A-Za-z0-9._@-]*)?(?:\/|$))[A-Za-z0-9._@-]+(?:\/[A-Za-z0-9._@-]+)*$/iu;
2
+ export function isDocumentRepositoryPath(path) {
3
+ return path.length <= 512 && DOCUMENT_REPOSITORY_PATH.test(path);
4
+ }
5
+ //# sourceMappingURL=document-repository-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-repository-path.js","sourceRoot":"","sources":["../../../../src/document-authoring/application/policies/document-repository-path.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAC5B,4KAA4K,CAAC;AAE/K,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type MarkdownDocumentObservation } from "../../../documentation-observation/application/model/markdown-document.js";
2
+ import type { DocumentDescriptor, DocumentIdentityProjectionEntry, DocumentationCatalogDiagnostic, DocumentSearchCorpusEntry } from "../model/document-catalog.js";
3
+ import type { MetadataSchemaSnapshot } from "../ports/metadata-instance-validator.js";
4
+ export interface InspectedCatalogDocument {
5
+ readonly descriptor?: DocumentDescriptor;
6
+ readonly diagnostic?: DocumentationCatalogDiagnostic;
7
+ readonly identity?: DocumentIdentityProjectionEntry;
8
+ readonly searchEntry?: DocumentSearchCorpusEntry;
9
+ }
10
+ export declare function inspectCatalogDocument(document: MarkdownDocumentObservation, metadata: MetadataSchemaSnapshot, ownerIds: ReadonlySet<string>, source: DocumentDescriptor["source"]): InspectedCatalogDocument;
11
+ //# sourceMappingURL=inspect-catalog-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-catalog-document.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/application/policies/inspect-catalog-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,2EAA2E,CAAC;AACnF,OAAO,KAAK,EACV,kBAAkB,EAClB,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,EAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAQtF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,8BAA8B,CAAC;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,+BAA+B,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,yBAAyB,CAAC;CAClD;AAMD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,2BAA2B,EACrC,QAAQ,EAAE,sBAAsB,EAChC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GACnC,wBAAwB,CAyG1B"}
@@ -0,0 +1,78 @@
1
+ import { markdownSourceWithoutFrontmatter } from "../../../documentation-observation/application/model/markdown-document.js";
2
+ import { catalogDiagnostic } from "./document-catalog-diagnostics.js";
3
+ import { documentTitle, inspectDocumentFields, invalidDocumentPathInspection } from "./document-catalog-fields.js";
4
+ function isRecord(value) {
5
+ return typeof value === "object" && value !== null && !Array.isArray(value);
6
+ }
7
+ export function inspectCatalogDocument(document, metadata, ownerIds, source) {
8
+ if (document.source.startsWith("\uFEFF") || document.source.includes("\u0000")) {
9
+ return {
10
+ diagnostic: catalogDiagnostic("document.catalog.source-invalid", document.repositoryPath, "Catalog Markdown must not contain a UTF-8 BOM or NUL characters.")
11
+ };
12
+ }
13
+ const pathInspection = invalidDocumentPathInspection(document);
14
+ if (pathInspection !== undefined) {
15
+ return pathInspection;
16
+ }
17
+ if (document.frontmatter.kind === "absent") {
18
+ return {
19
+ diagnostic: catalogDiagnostic("document.catalog.frontmatter-required", document.repositoryPath, "Catalog documents must contain strict YAML frontmatter.")
20
+ };
21
+ }
22
+ if (document.frontmatter.kind === "invalid") {
23
+ return {
24
+ diagnostic: catalogDiagnostic("document.catalog.frontmatter-invalid", document.repositoryPath, document.frontmatter.message)
25
+ };
26
+ }
27
+ if (!isRecord(document.frontmatter.value)) {
28
+ return {
29
+ diagnostic: catalogDiagnostic("document.catalog.frontmatter-invalid", document.repositoryPath, "Document frontmatter must be an object.")
30
+ };
31
+ }
32
+ const fieldInspection = inspectDocumentFields(document, document.frontmatter.value);
33
+ if (fieldInspection.fields === undefined) {
34
+ return {
35
+ diagnostic: catalogDiagnostic("document.catalog.descriptor-invalid", document.repositoryPath, "Document metadata must provide bounded id, type, status, owner, and summary strings."),
36
+ ...(fieldInspection.identity === undefined
37
+ ? {}
38
+ : { identity: fieldInspection.identity })
39
+ };
40
+ }
41
+ const { fields, identity } = fieldInspection;
42
+ const validation = metadata.validate(document.frontmatter.value);
43
+ if (!validation.valid) {
44
+ return {
45
+ diagnostic: catalogDiagnostic("document.catalog.metadata-invalid", document.repositoryPath, validation.messages.join("; ") || "Document metadata is invalid."),
46
+ identity
47
+ };
48
+ }
49
+ if (!ownerIds.has(fields.owner)) {
50
+ return {
51
+ diagnostic: catalogDiagnostic("document.catalog.owner-unknown", document.repositoryPath, `Document owner is absent from the owner catalog: ${fields.owner}.`),
52
+ identity
53
+ };
54
+ }
55
+ const title = documentTitle(document);
56
+ if (title === undefined) {
57
+ return {
58
+ diagnostic: catalogDiagnostic("document.catalog.title-invalid", document.repositoryPath, "Catalog documents must contain a bounded level-one heading."),
59
+ identity
60
+ };
61
+ }
62
+ const descriptor = Object.freeze({
63
+ ...fields,
64
+ repositoryPath: document.repositoryPath,
65
+ source,
66
+ title
67
+ });
68
+ return {
69
+ descriptor,
70
+ identity,
71
+ searchEntry: Object.freeze({
72
+ body: markdownSourceWithoutFrontmatter(document),
73
+ descriptor,
74
+ headings: Object.freeze(document.headings.map((heading) => heading.text))
75
+ })
76
+ };
77
+ }
78
+ //# sourceMappingURL=inspect-catalog-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-catalog-document.js","sourceRoot":"","sources":["../../../../src/document-authoring/application/policies/inspect-catalog-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { DocumentAuthorityEvidence } from "../model/document-catalog.js";
2
+ export type CatalogCollection = {
3
+ readonly kind: "frontmatter-readme";
4
+ readonly roots: readonly string[];
5
+ } | {
6
+ readonly kind: "markdown-tree";
7
+ readonly root: string;
8
+ };
9
+ export interface CatalogProfileSnapshot {
10
+ readonly collections: readonly CatalogCollection[];
11
+ readonly evidence: DocumentAuthorityEvidence;
12
+ readonly excludedPrefixes: readonly string[];
13
+ readonly metadataSchemaPath: string;
14
+ readonly ownerCatalog: {
15
+ readonly contract: "foundation.owner-map/v1";
16
+ readonly path: string;
17
+ };
18
+ readonly projectId: string;
19
+ }
20
+ export interface AuthoringProfileReader {
21
+ read(request: {
22
+ readonly consumerRoot: string;
23
+ readonly path: string;
24
+ readonly signal?: AbortSignal;
25
+ }): Promise<CatalogProfileSnapshot>;
26
+ }
27
+ //# sourceMappingURL=authoring-profile-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-profile-reader.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/application/ports/authoring-profile-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAE9E,MAAM,MAAM,iBAAiB,GACzB;IACE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEN,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;QAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,OAAO,EAAE;QACZ,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;KAC/B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=authoring-profile-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-profile-reader.js","sourceRoot":"","sources":["../../../../src/document-authoring/application/ports/authoring-profile-reader.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { DocumentationSearchCatalogSnapshot } from "../model/document-catalog.js";
2
+ export interface DocumentationCatalogReadRequest {
3
+ readonly consumerRoot: string;
4
+ readonly profilePath: string;
5
+ readonly signal?: AbortSignal;
6
+ }
7
+ export interface DocumentationSearchCatalogReader {
8
+ read(request: DocumentationCatalogReadRequest): Promise<DocumentationSearchCatalogSnapshot>;
9
+ }
10
+ //# sourceMappingURL=documentation-search-catalog-reader.d.ts.map