@agent-teams/repository-mutation 0.0.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 (243) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +201 -0
  3. package/README.md +10 -0
  4. package/dist/canonical-json.d.ts +12 -0
  5. package/dist/canonical-json.d.ts.map +1 -0
  6. package/dist/canonical-json.js +137 -0
  7. package/dist/canonical-json.js.map +1 -0
  8. package/dist/errors.d.ts +6 -0
  9. package/dist/errors.d.ts.map +1 -0
  10. package/dist/errors.js +9 -0
  11. package/dist/errors.js.map +1 -0
  12. package/dist/index.d.ts +25 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +13 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/installed-artifact-identity.d.ts +15 -0
  17. package/dist/installed-artifact-identity.d.ts.map +1 -0
  18. package/dist/installed-artifact-identity.js +127 -0
  19. package/dist/installed-artifact-identity.js.map +1 -0
  20. package/dist/node.d.ts +29 -0
  21. package/dist/node.d.ts.map +1 -0
  22. package/dist/node.js +19 -0
  23. package/dist/node.js.map +1 -0
  24. package/dist/package-version.d.ts +3 -0
  25. package/dist/package-version.d.ts.map +1 -0
  26. package/dist/package-version.js +11 -0
  27. package/dist/package-version.js.map +1 -0
  28. package/dist/qualification/index.d.ts +24 -0
  29. package/dist/qualification/index.d.ts.map +1 -0
  30. package/dist/qualification/index.js +11 -0
  31. package/dist/qualification/index.js.map +1 -0
  32. package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.d.ts +19 -0
  33. package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.d.ts.map +1 -0
  34. package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.js +74 -0
  35. package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.js.map +1 -0
  36. package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts +35 -0
  37. package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts.map +1 -0
  38. package/dist/repository-mutation/adapters/node/node-absent-file-publication.js +181 -0
  39. package/dist/repository-mutation/adapters/node/node-absent-file-publication.js.map +1 -0
  40. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts +23 -0
  41. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts.map +1 -0
  42. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js +134 -0
  43. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js.map +1 -0
  44. package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.d.ts +26 -0
  45. package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.d.ts.map +1 -0
  46. package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.js +172 -0
  47. package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.js.map +1 -0
  48. package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.d.ts +14 -0
  49. package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.d.ts.map +1 -0
  50. package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.js +23 -0
  51. package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.js.map +1 -0
  52. package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts +17 -0
  53. package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts.map +1 -0
  54. package/dist/repository-mutation/adapters/node/node-directory-durability.js +47 -0
  55. package/dist/repository-mutation/adapters/node/node-directory-durability.js.map +1 -0
  56. package/dist/repository-mutation/adapters/node/node-directory-materialization.d.ts +37 -0
  57. package/dist/repository-mutation/adapters/node/node-directory-materialization.d.ts.map +1 -0
  58. package/dist/repository-mutation/adapters/node/node-directory-materialization.js +244 -0
  59. package/dist/repository-mutation/adapters/node/node-directory-materialization.js.map +1 -0
  60. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.d.ts +13 -0
  61. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.d.ts.map +1 -0
  62. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.js +67 -0
  63. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.js.map +1 -0
  64. package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.d.ts +84 -0
  65. package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.d.ts.map +1 -0
  66. package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.js +232 -0
  67. package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.js.map +1 -0
  68. package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.d.ts +9 -0
  69. package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.d.ts.map +1 -0
  70. package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.js +2 -0
  71. package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.js.map +1 -0
  72. package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.d.ts +6 -0
  73. package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.d.ts.map +1 -0
  74. package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.js +30 -0
  75. package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.js.map +1 -0
  76. package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.d.ts +11 -0
  77. package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.d.ts.map +1 -0
  78. package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.js +159 -0
  79. package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.js.map +1 -0
  80. package/dist/repository-mutation/adapters/node/node-known-file-apply-state.d.ts +9 -0
  81. package/dist/repository-mutation/adapters/node/node-known-file-apply-state.d.ts.map +1 -0
  82. package/dist/repository-mutation/adapters/node/node-known-file-apply-state.js +22 -0
  83. package/dist/repository-mutation/adapters/node/node-known-file-apply-state.js.map +1 -0
  84. package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.d.ts +9 -0
  85. package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.d.ts.map +1 -0
  86. package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.js +203 -0
  87. package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.js.map +1 -0
  88. package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.d.ts +17 -0
  89. package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.d.ts.map +1 -0
  90. package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.js +22 -0
  91. package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.js.map +1 -0
  92. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.d.ts +28 -0
  93. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.d.ts.map +1 -0
  94. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.js +213 -0
  95. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.js.map +1 -0
  96. package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.d.ts +15 -0
  97. package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.d.ts.map +1 -0
  98. package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.js +51 -0
  99. package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.js.map +1 -0
  100. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.d.ts +29 -0
  101. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.d.ts.map +1 -0
  102. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.js +72 -0
  103. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.js.map +1 -0
  104. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.d.ts +31 -0
  105. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.d.ts.map +1 -0
  106. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.js +254 -0
  107. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.js.map +1 -0
  108. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.d.ts +13 -0
  109. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.d.ts.map +1 -0
  110. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.js +210 -0
  111. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.js.map +1 -0
  112. package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.d.ts +15 -0
  113. package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.d.ts.map +1 -0
  114. package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.js +181 -0
  115. package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.js.map +1 -0
  116. package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.d.ts +12 -0
  117. package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.d.ts.map +1 -0
  118. package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.js +18 -0
  119. package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.js.map +1 -0
  120. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.d.ts +25 -0
  121. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.d.ts.map +1 -0
  122. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.js +150 -0
  123. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.js.map +1 -0
  124. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.d.ts +12 -0
  125. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.d.ts.map +1 -0
  126. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.js +56 -0
  127. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.js.map +1 -0
  128. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.d.ts +22 -0
  129. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.d.ts.map +1 -0
  130. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.js +246 -0
  131. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.js.map +1 -0
  132. package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.d.ts +21 -0
  133. package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.d.ts.map +1 -0
  134. package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.js +34 -0
  135. package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.js.map +1 -0
  136. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.d.ts +4 -0
  137. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.d.ts.map +1 -0
  138. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.js +43 -0
  139. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.js.map +1 -0
  140. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.d.ts +14 -0
  141. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.d.ts.map +1 -0
  142. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.js +109 -0
  143. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.js.map +1 -0
  144. package/dist/repository-mutation/adapters/node/node-known-file-transaction.d.ts +21 -0
  145. package/dist/repository-mutation/adapters/node/node-known-file-transaction.d.ts.map +1 -0
  146. package/dist/repository-mutation/adapters/node/node-known-file-transaction.js +215 -0
  147. package/dist/repository-mutation/adapters/node/node-known-file-transaction.js.map +1 -0
  148. package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.d.ts +18 -0
  149. package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.d.ts.map +1 -0
  150. package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js +30 -0
  151. package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js.map +1 -0
  152. package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.d.ts +31 -0
  153. package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.d.ts.map +1 -0
  154. package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.js +50 -0
  155. package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.js.map +1 -0
  156. package/dist/repository-mutation/adapters/node/node-repository-path.d.ts +2 -0
  157. package/dist/repository-mutation/adapters/node/node-repository-path.d.ts.map +1 -0
  158. package/dist/repository-mutation/adapters/node/node-repository-path.js +7 -0
  159. package/dist/repository-mutation/adapters/node/node-repository-path.js.map +1 -0
  160. package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.d.ts +21 -0
  161. package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.d.ts.map +1 -0
  162. package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.js +59 -0
  163. package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.js.map +1 -0
  164. package/dist/repository-mutation/application/model/directory-materialization.d.ts +35 -0
  165. package/dist/repository-mutation/application/model/directory-materialization.d.ts.map +1 -0
  166. package/dist/repository-mutation/application/model/directory-materialization.js +11 -0
  167. package/dist/repository-mutation/application/model/directory-materialization.js.map +1 -0
  168. package/dist/repository-mutation/application/model/exact-postimage.d.ts +17 -0
  169. package/dist/repository-mutation/application/model/exact-postimage.d.ts.map +1 -0
  170. package/dist/repository-mutation/application/model/exact-postimage.js +11 -0
  171. package/dist/repository-mutation/application/model/exact-postimage.js.map +1 -0
  172. package/dist/repository-mutation/application/model/known-file-transaction-journal.d.ts +69 -0
  173. package/dist/repository-mutation/application/model/known-file-transaction-journal.d.ts.map +1 -0
  174. package/dist/repository-mutation/application/model/known-file-transaction-journal.js +15 -0
  175. package/dist/repository-mutation/application/model/known-file-transaction-journal.js.map +1 -0
  176. package/dist/repository-mutation/application/model/known-file-transaction.d.ts +64 -0
  177. package/dist/repository-mutation/application/model/known-file-transaction.d.ts.map +1 -0
  178. package/dist/repository-mutation/application/model/known-file-transaction.js +2 -0
  179. package/dist/repository-mutation/application/model/known-file-transaction.js.map +1 -0
  180. package/dist/repository-mutation/application/model/path-identity.d.ts +7 -0
  181. package/dist/repository-mutation/application/model/path-identity.d.ts.map +1 -0
  182. package/dist/repository-mutation/application/model/path-identity.js +2 -0
  183. package/dist/repository-mutation/application/model/path-identity.js.map +1 -0
  184. package/dist/repository-mutation/application/model/repository-path.d.ts +8 -0
  185. package/dist/repository-mutation/application/model/repository-path.d.ts.map +1 -0
  186. package/dist/repository-mutation/application/model/repository-path.js +74 -0
  187. package/dist/repository-mutation/application/model/repository-path.js.map +1 -0
  188. package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.d.ts +33 -0
  189. package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.d.ts.map +1 -0
  190. package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.js +21 -0
  191. package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.js.map +1 -0
  192. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.d.ts +9 -0
  193. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.d.ts.map +1 -0
  194. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.js +214 -0
  195. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.js.map +1 -0
  196. package/dist/repository-mutation/application/policies/known-file-transaction-plan.d.ts +7 -0
  197. package/dist/repository-mutation/application/policies/known-file-transaction-plan.d.ts.map +1 -0
  198. package/dist/repository-mutation/application/policies/known-file-transaction-plan.js +253 -0
  199. package/dist/repository-mutation/application/policies/known-file-transaction-plan.js.map +1 -0
  200. package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts +7 -0
  201. package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts.map +1 -0
  202. package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.js +2 -0
  203. package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.js.map +1 -0
  204. package/dist/repository-mutation-envelope.d.ts +32 -0
  205. package/dist/repository-mutation-envelope.d.ts.map +1 -0
  206. package/dist/repository-mutation-envelope.js +292 -0
  207. package/dist/repository-mutation-envelope.js.map +1 -0
  208. package/dist/state-contract.d.ts +6 -0
  209. package/dist/state-contract.d.ts.map +1 -0
  210. package/dist/state-contract.js +6 -0
  211. package/dist/state-contract.js.map +1 -0
  212. package/dist/strict-json.d.ts +7 -0
  213. package/dist/strict-json.d.ts.map +1 -0
  214. package/dist/strict-json.js +131 -0
  215. package/dist/strict-json.js.map +1 -0
  216. package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.d.ts +29 -0
  217. package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.d.ts.map +1 -0
  218. package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.js +139 -0
  219. package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.js.map +1 -0
  220. package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.d.ts +151 -0
  221. package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.d.ts.map +1 -0
  222. package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.js +29 -0
  223. package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.js.map +1 -0
  224. package/dist/transaction-coordination/adapters/node/node-journal-slot-store.d.ts +25 -0
  225. package/dist/transaction-coordination/adapters/node/node-journal-slot-store.d.ts.map +1 -0
  226. package/dist/transaction-coordination/adapters/node/node-journal-slot-store.js +303 -0
  227. package/dist/transaction-coordination/adapters/node/node-journal-slot-store.js.map +1 -0
  228. package/dist/transaction-coordination/adapters/node/node-operation-lock.d.ts +16 -0
  229. package/dist/transaction-coordination/adapters/node/node-operation-lock.d.ts.map +1 -0
  230. package/dist/transaction-coordination/adapters/node/node-operation-lock.js +359 -0
  231. package/dist/transaction-coordination/adapters/node/node-operation-lock.js.map +1 -0
  232. package/dist/transaction-coordination/adapters/node/node-state-directory.d.ts +11 -0
  233. package/dist/transaction-coordination/adapters/node/node-state-directory.d.ts.map +1 -0
  234. package/dist/transaction-coordination/adapters/node/node-state-directory.js +91 -0
  235. package/dist/transaction-coordination/adapters/node/node-state-directory.js.map +1 -0
  236. package/dist/transaction-coordination/mutation-lease.d.ts +38 -0
  237. package/dist/transaction-coordination/mutation-lease.d.ts.map +1 -0
  238. package/dist/transaction-coordination/mutation-lease.js +351 -0
  239. package/dist/transaction-coordination/mutation-lease.js.map +1 -0
  240. package/package.json +52 -0
  241. package/schemas/known-file-transaction-plan/v1.schema.json +65 -0
  242. package/schemas/known-file-transaction-receipt/v1.schema.json +36 -0
  243. package/schemas/repository-mutation-transaction-envelope/v1.schema.json +46 -0
package/dist/node.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ export { acquireMutationLease, claimMutation, observeMutationState, releaseMutationLease, retainMutationBarrier } from "./transaction-coordination/mutation-lease.js";
2
+ export type { MutationArtifactIdentity, MutationClaim, MutationIntent, MutationLease, MutationObservation } from "./transaction-coordination/mutation-lease.js";
3
+ export { captureFileHandleIdentity, readBoundedRegularFile, pathMatchesRegularFileIdentity } from "./repository-mutation/adapters/node/node-bounded-regular-file.js";
4
+ export type { BoundedRegularFileRead } from "./repository-mutation/adapters/node/node-bounded-regular-file.js";
5
+ export type { PathIdentityMatch, PortablePathIdentity } from "./repository-mutation/application/model/path-identity.js";
6
+ export { assertTerminalEvidenceDirectory, ensureTerminalEvidenceDirectory } from "./repository-mutation/adapters/node/node-terminal-evidence-directory.js";
7
+ export type { TerminalEvidenceDirectoryAuthority, TerminalEvidenceDirectoryOperations, TerminalEvidenceDirectoryStat, } from "./repository-mutation/adapters/node/node-terminal-evidence-directory.js";
8
+ export { cleanupIdentityMatchingOwnedTemporary, ownedTemporaryCleanupResiduePrefix, OWNED_TEMPORARY_CLEANUP_RESIDUE_MARKER } from "./repository-mutation/adapters/node/node-cleanup-owned-temporary.js";
9
+ export { syncDirectoryDurably, syncDirectoryStrictly } from "./repository-mutation/adapters/node/node-directory-durability.js";
10
+ export type { DirectoryDurability, DirectoryDurabilityOperations, DirectorySyncHandle, } from "./repository-mutation/adapters/node/node-directory-durability.js";
11
+ export { createAndBindNodeDirectory } from "./repository-mutation/adapters/node/node-create-and-bind-directory.js";
12
+ export type { NodeDirectoryCreateAndBindOperations } from "./repository-mutation/adapters/node/node-create-and-bind-directory.js";
13
+ export { prepareExactSiblingTemporary } from "./repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js";
14
+ export type { PrepareExactSiblingTemporaryOptions } from "./repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js";
15
+ export { publishPreparedAbsentFile } from "./repository-mutation/adapters/node/node-publish-prepared-absent-file.js";
16
+ export type { PublishPreparedAbsentFileOptions } from "./repository-mutation/adapters/node/node-publish-prepared-absent-file.js";
17
+ export { assertNoPortableNameCollision, assertSafeExistingRepositoryAncestors, ExistingRepositoryAncestorError } from "./repository-mutation/adapters/node/node-existing-repository-ancestors.js";
18
+ export type { ExistingRepositoryAncestorProblem } from "./repository-mutation/adapters/node/node-existing-repository-ancestors.js";
19
+ export { isLexicallyContainedPath } from "./repository-mutation/adapters/node/node-repository-path.js";
20
+ export type { OwnedTemporaryCleanupTransition, OwnedTemporaryCleanupTransitionPort } from "./repository-mutation/application/ports/owned-temporary-cleanup-transition.js";
21
+ export { AbsentFilePublicationError } from "./repository-mutation/application/model/exact-postimage.js";
22
+ export type { AbsentFilePublicationErrorCode, AbsentFilePublicationOutcome, ExactFilePostimage, ExactFilePostimageState, } from "./repository-mutation/application/model/exact-postimage.js";
23
+ export { assertTemporaryPathsAbsent, classifyExactFilePostimage, publishAbsentFile } from "./repository-mutation/adapters/node/node-absent-file-publication.js";
24
+ export type { AbsentFilePublicationOptions } from "./repository-mutation/adapters/node/node-absent-file-publication.js";
25
+ export { ensureMutationStateDirectory, pruneMutationStateDirectory, syncMutationStateDirectory, syncMutationStateDirectoryStrictly } from "./transaction-coordination/adapters/node/node-state-directory.js";
26
+ export { NodeJournalSlotStore } from "./transaction-coordination/adapters/node/node-journal-slot-store.js";
27
+ export { sameJournalSlotAuthority } from "./transaction-coordination/adapters/node/node-journal-slot-profile.js";
28
+ export type { JournalSlotAuthority, JournalSlotCodec, JournalSlotEvidence, JournalSlotFailure, JournalSlotFailureContext, JournalSlotFailureFactory, JournalSlotFaultInjector, JournalSlotFaultPoint, JournalSlotMutation, JournalSlotNaming, JournalSlotObservation, JournalSlotProfile, JournalSlotResidueMatcher, JournalSlotSubject, JournalSlotSyncRole, JournalSlotSyncStage, StoredJournalSlot } from "./transaction-coordination/adapters/node/node-journal-slot-profile.js";
29
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,8CAA8C,CAAC;AACtD,YAAY,EACV,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,aAAa,EACb,mBAAmB,EACpB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,MAAM,kEAAkE,CAAC;AACrK,YAAY,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC/G,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AACxH,OAAO,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,MAAM,yEAAyE,CAAC;AAC3J,YAAY,EACV,kCAAkC,EAClC,mCAAmC,EACnC,6BAA6B,GAC9B,MAAM,yEAAyE,CAAC;AACjF,OAAO,EAAE,qCAAqC,EAAE,kCAAkC,EAAE,sCAAsC,EAAE,MAAM,qEAAqE,CAAC;AACxM,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,kEAAkE,CAAC;AAC/H,YAAY,EACV,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,kEAAkE,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,uEAAuE,CAAC;AACnH,YAAY,EAAE,oCAAoC,EAAE,MAAM,uEAAuE,CAAC;AAClI,OAAO,EAAE,4BAA4B,EAAE,MAAM,6EAA6E,CAAC;AAC3H,YAAY,EAAE,mCAAmC,EAAE,MAAM,6EAA6E,CAAC;AACvI,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAC;AACrH,YAAY,EAAE,gCAAgC,EAAE,MAAM,0EAA0E,CAAC;AACjI,OAAO,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,+BAA+B,EAAE,MAAM,2EAA2E,CAAC;AAClM,YAAY,EAAE,iCAAiC,EAAE,MAAM,2EAA2E,CAAC;AACnI,OAAO,EAAE,wBAAwB,EAAE,MAAM,6DAA6D,CAAC;AACvG,YAAY,EAAE,+BAA+B,EAAE,mCAAmC,EAAE,MAAM,+EAA+E,CAAC;AAC1K,OAAO,EAAE,0BAA0B,EAAE,MAAM,4DAA4D,CAAC;AACxG,YAAY,EACV,8BAA8B,EAC9B,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,4DAA4D,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,qEAAqE,CAAC;AAChK,YAAY,EAAE,4BAA4B,EAAE,MAAM,qEAAqE,CAAC;AACxH,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,kCAAkC,EAAE,MAAM,kEAAkE,CAAC;AAC7M,OAAO,EAAE,oBAAoB,EAAE,MAAM,qEAAqE,CAAC;AAC3G,OAAO,EAAE,wBAAwB,EAAE,MAAM,uEAAuE,CAAC;AACjH,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,uEAAuE,CAAC"}
package/dist/node.js ADDED
@@ -0,0 +1,19 @@
1
+ // Node-only mechanism seams for closed owner-package compositions. These are
2
+ // intentionally absent from the root API, whose effectful surface is limited
3
+ // to Repository Mutation's closed known-file operations.
4
+ export { acquireMutationLease, claimMutation, observeMutationState, releaseMutationLease, retainMutationBarrier } from "./transaction-coordination/mutation-lease.js";
5
+ export { captureFileHandleIdentity, readBoundedRegularFile, pathMatchesRegularFileIdentity } from "./repository-mutation/adapters/node/node-bounded-regular-file.js";
6
+ export { assertTerminalEvidenceDirectory, ensureTerminalEvidenceDirectory } from "./repository-mutation/adapters/node/node-terminal-evidence-directory.js";
7
+ export { cleanupIdentityMatchingOwnedTemporary, ownedTemporaryCleanupResiduePrefix, OWNED_TEMPORARY_CLEANUP_RESIDUE_MARKER } from "./repository-mutation/adapters/node/node-cleanup-owned-temporary.js";
8
+ export { syncDirectoryDurably, syncDirectoryStrictly } from "./repository-mutation/adapters/node/node-directory-durability.js";
9
+ export { createAndBindNodeDirectory } from "./repository-mutation/adapters/node/node-create-and-bind-directory.js";
10
+ export { prepareExactSiblingTemporary } from "./repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js";
11
+ export { publishPreparedAbsentFile } from "./repository-mutation/adapters/node/node-publish-prepared-absent-file.js";
12
+ export { assertNoPortableNameCollision, assertSafeExistingRepositoryAncestors, ExistingRepositoryAncestorError } from "./repository-mutation/adapters/node/node-existing-repository-ancestors.js";
13
+ export { isLexicallyContainedPath } from "./repository-mutation/adapters/node/node-repository-path.js";
14
+ export { AbsentFilePublicationError } from "./repository-mutation/application/model/exact-postimage.js";
15
+ export { assertTemporaryPathsAbsent, classifyExactFilePostimage, publishAbsentFile } from "./repository-mutation/adapters/node/node-absent-file-publication.js";
16
+ export { ensureMutationStateDirectory, pruneMutationStateDirectory, syncMutationStateDirectory, syncMutationStateDirectoryStrictly } from "./transaction-coordination/adapters/node/node-state-directory.js";
17
+ export { NodeJournalSlotStore } from "./transaction-coordination/adapters/node/node-journal-slot-store.js";
18
+ export { sameJournalSlotAuthority } from "./transaction-coordination/adapters/node/node-journal-slot-profile.js";
19
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,6EAA6E;AAC7E,yDAAyD;AACzD,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,8CAA8C,CAAC;AAQtD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,MAAM,kEAAkE,CAAC;AAGrK,OAAO,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,MAAM,yEAAyE,CAAC;AAM3J,OAAO,EAAE,qCAAqC,EAAE,kCAAkC,EAAE,sCAAsC,EAAE,MAAM,qEAAqE,CAAC;AACxM,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,kEAAkE,CAAC;AAM/H,OAAO,EAAE,0BAA0B,EAAE,MAAM,uEAAuE,CAAC;AAEnH,OAAO,EAAE,4BAA4B,EAAE,MAAM,6EAA6E,CAAC;AAE3H,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAC;AAErH,OAAO,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,+BAA+B,EAAE,MAAM,2EAA2E,CAAC;AAElM,OAAO,EAAE,wBAAwB,EAAE,MAAM,6DAA6D,CAAC;AAEvG,OAAO,EAAE,0BAA0B,EAAE,MAAM,4DAA4D,CAAC;AAOxG,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,qEAAqE,CAAC;AAEhK,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,kCAAkC,EAAE,MAAM,kEAAkE,CAAC;AAC7M,OAAO,EAAE,oBAAoB,EAAE,MAAM,qEAAqE,CAAC;AAC3G,OAAO,EAAE,wBAAwB,EAAE,MAAM,uEAAuE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const REPOSITORY_MUTATION_PACKAGE_NAME: "@agent-teams/repository-mutation";
2
+ export declare function installedRepositoryMutationVersion(): Promise<string>;
3
+ //# sourceMappingURL=package-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-version.d.ts","sourceRoot":"","sources":["../src/package-version.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gCAAgC,EAAG,kCAA2C,CAAC;AAE5F,wBAAsB,kCAAkC,IAAI,OAAO,CAAC,MAAM,CAAC,CAI1E"}
@@ -0,0 +1,11 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { fileURLToPath } from "node:url";
3
+ export const REPOSITORY_MUTATION_PACKAGE_NAME = "@agent-teams/repository-mutation";
4
+ export async function installedRepositoryMutationVersion() {
5
+ const value = JSON.parse(await readFile(fileURLToPath(new URL("../package.json", import.meta.url)), "utf8"));
6
+ if (typeof value.version !== "string") {
7
+ throw new Error("Installed Repository Mutation version is unavailable.");
8
+ }
9
+ return value.version;
10
+ }
11
+ //# sourceMappingURL=package-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-version.js","sourceRoot":"","sources":["../src/package-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,gCAAgC,GAAG,kCAA2C,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,kCAAkC;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAC;IACtI,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAAA,CAAC;IAClH,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
@@ -0,0 +1,24 @@
1
+ export type { KnownFileRecoveryFaultInjector } from "../repository-mutation/adapters/node/node-known-file-transaction-recovery.js";
2
+ export type { KnownFileTransactionFaultInjector, KnownFileTransactionFaultPoint, } from "../repository-mutation/adapters/node/node-known-file-transaction.js";
3
+ export type { KnownFileDigest, KnownFileImageV1, KnownFilePreconditionV1, KnownFileTransactionOperationOutcome, KnownFileTransactionOperationV1, KnownFileTransactionPlanV1, KnownFileTransactionReceiptV1, } from "../repository-mutation/application/model/known-file-transaction.js";
4
+ export type { MutationClaim } from "../transaction-coordination/mutation-lease.js";
5
+ export { recoverKnownFileTransactionWithFaults as recoverKnownFileTransaction } from "../repository-mutation/adapters/node/node-known-file-transaction-recovery.js";
6
+ export { applyKnownFileTransactionWithFaults as applyKnownFileTransaction } from "../repository-mutation/adapters/node/node-known-file-transaction.js";
7
+ export { readBoundedRegularFileWithFaults as readBoundedRegularFile } from "../repository-mutation/adapters/node/node-bounded-regular-file.js";
8
+ export { readBoundedRegularFile as readBoundedRegularFileRuntime, } from "../repository-mutation/adapters/node/node-bounded-regular-file.js";
9
+ export type { BoundedRegularFileRead, BoundedRegularFileReadFaultInjector, } from "../repository-mutation/adapters/node/node-bounded-regular-file.js";
10
+ export { prepareExactSiblingTemporaryWithFaults as prepareExactSiblingTemporary } from "../repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js";
11
+ export type { PrepareExactSiblingTemporaryOptions } from "../repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js";
12
+ export type { PortablePathIdentity } from "../repository-mutation/application/model/path-identity.js";
13
+ export { publishPreparedAbsentFileWithFaults as publishPreparedAbsentFile } from "../repository-mutation/adapters/node/node-publish-prepared-absent-file.js";
14
+ export type { PublishPreparedAbsentFileOptions } from "../repository-mutation/adapters/node/node-publish-prepared-absent-file.js";
15
+ export { publishAbsentFileWithFaults as publishAbsentFile } from "../repository-mutation/adapters/node/node-absent-file-publication.js";
16
+ export type { AbsentFilePublicationOperations, AbsentFilePublicationOptions, AbsentFilePublicationFaultInjector, AbsentFilePublicationFaultPoint, } from "../repository-mutation/adapters/node/node-absent-file-publication.js";
17
+ export type { AbsentFilePublicationOutcome, ExactFilePostimage, } from "../repository-mutation/application/model/exact-postimage.js";
18
+ export type { OwnedTemporaryCleanupTransition, OwnedTemporaryCleanupTransitionPort, } from "../repository-mutation/application/ports/owned-temporary-cleanup-transition.js";
19
+ export { syncDirectoryDurably } from "../repository-mutation/adapters/node/node-directory-durability.js";
20
+ export type { DirectoryDurability, DirectoryDurabilityOperations, DirectorySyncHandle, } from "../repository-mutation/adapters/node/node-directory-durability.js";
21
+ export { NodeMutationOperationLock } from "../transaction-coordination/adapters/node/node-operation-lock.js";
22
+ export type { MutationOperationReleaseOptions, OperationLockOperations, } from "../transaction-coordination/adapters/node/node-operation-lock.js";
23
+ export { releaseKnownFileTransactionLeaseWith } from "../repository-mutation/adapters/node/node-known-file-transaction-lease-release.js";
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/qualification/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,8BAA8B,EAAE,MAAM,8EAA8E,CAAC;AACnI,YAAY,EACV,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,qEAAqE,CAAC;AAC7E,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,oCAAoC,EACpC,+BAA+B,EAC/B,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,oEAAoE,CAAC;AAC5E,YAAY,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AACnF,OAAO,EAAE,qCAAqC,IAAI,2BAA2B,EAAE,MAAM,8EAA8E,CAAC;AACpK,OAAO,EAAE,mCAAmC,IAAI,yBAAyB,EAAE,MAAM,qEAAqE,CAAC;AACvJ,OAAO,EACL,gCAAgC,IAAI,sBAAsB,EAC3D,MAAM,mEAAmE,CAAC;AAC3E,OAAO,EACL,sBAAsB,IAAI,6BAA6B,GACxD,MAAM,mEAAmE,CAAC;AAC3E,YAAY,EACV,sBAAsB,EACtB,mCAAmC,GACpC,MAAM,mEAAmE,CAAC;AAC3E,OAAO,EACL,sCAAsC,IAAI,4BAA4B,EACvE,MAAM,8EAA8E,CAAC;AACtF,YAAY,EAAE,mCAAmC,EAAE,MAAM,8EAA8E,CAAC;AACxI,YAAY,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACtG,OAAO,EACL,mCAAmC,IAAI,yBAAyB,EACjE,MAAM,2EAA2E,CAAC;AACnF,YAAY,EAAE,gCAAgC,EAAE,MAAM,2EAA2E,CAAC;AAClI,OAAO,EACL,2BAA2B,IAAI,iBAAiB,EACjD,MAAM,sEAAsE,CAAC;AAC9E,YAAY,EACV,+BAA+B,EAC/B,4BAA4B,EAC5B,kCAAkC,EAClC,+BAA+B,GAChC,MAAM,sEAAsE,CAAC;AAC9E,YAAY,EACV,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,6DAA6D,CAAC;AACrE,YAAY,EACV,+BAA+B,EAC/B,mCAAmC,GACpC,MAAM,gFAAgF,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mEAAmE,CAAC;AACzG,YAAY,EACV,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,mEAAmE,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kEAAkE,CAAC;AAC7G,YAAY,EACV,+BAA+B,EAC/B,uBAAuB,GACxB,MAAM,kEAAkE,CAAC;AAC1E,OAAO,EAAE,oCAAoC,EAAE,MAAM,mFAAmF,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { recoverKnownFileTransactionWithFaults as recoverKnownFileTransaction } from "../repository-mutation/adapters/node/node-known-file-transaction-recovery.js";
2
+ export { applyKnownFileTransactionWithFaults as applyKnownFileTransaction } from "../repository-mutation/adapters/node/node-known-file-transaction.js";
3
+ export { readBoundedRegularFileWithFaults as readBoundedRegularFile } from "../repository-mutation/adapters/node/node-bounded-regular-file.js";
4
+ export { readBoundedRegularFile as readBoundedRegularFileRuntime, } from "../repository-mutation/adapters/node/node-bounded-regular-file.js";
5
+ export { prepareExactSiblingTemporaryWithFaults as prepareExactSiblingTemporary } from "../repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js";
6
+ export { publishPreparedAbsentFileWithFaults as publishPreparedAbsentFile } from "../repository-mutation/adapters/node/node-publish-prepared-absent-file.js";
7
+ export { publishAbsentFileWithFaults as publishAbsentFile } from "../repository-mutation/adapters/node/node-absent-file-publication.js";
8
+ export { syncDirectoryDurably } from "../repository-mutation/adapters/node/node-directory-durability.js";
9
+ export { NodeMutationOperationLock } from "../transaction-coordination/adapters/node/node-operation-lock.js";
10
+ export { releaseKnownFileTransactionLeaseWith } from "../repository-mutation/adapters/node/node-known-file-transaction-lease-release.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/qualification/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,qCAAqC,IAAI,2BAA2B,EAAE,MAAM,8EAA8E,CAAC;AACpK,OAAO,EAAE,mCAAmC,IAAI,yBAAyB,EAAE,MAAM,qEAAqE,CAAC;AACvJ,OAAO,EACL,gCAAgC,IAAI,sBAAsB,EAC3D,MAAM,mEAAmE,CAAC;AAC3E,OAAO,EACL,sBAAsB,IAAI,6BAA6B,GACxD,MAAM,mEAAmE,CAAC;AAK3E,OAAO,EACL,sCAAsC,IAAI,4BAA4B,EACvE,MAAM,8EAA8E,CAAC;AAGtF,OAAO,EACL,mCAAmC,IAAI,yBAAyB,EACjE,MAAM,2EAA2E,CAAC;AAEnF,OAAO,EACL,2BAA2B,IAAI,iBAAiB,EACjD,MAAM,sEAAsE,CAAC;AAe9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mEAAmE,CAAC;AAMzG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kEAAkE,CAAC;AAK7G,OAAO,EAAE,oCAAoC,EAAE,MAAM,mFAAmF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type ExactFilePostimage, type ExactFilePostimageState } from "../../application/model/exact-postimage.js";
2
+ import type { PortablePathIdentity } from "../../application/model/path-identity.js";
3
+ import { readBoundedRegularFile, type BoundedRegularFileRead } from "./node-bounded-regular-file.js";
4
+ import type { DirectoryDurability } from "./node-directory-durability.js";
5
+ export declare function publicationErrorCode(error: unknown): string | undefined;
6
+ export declare function isMissingPublicationPath(error: unknown): boolean;
7
+ export declare function samePublicationIdentity(left: PortablePathIdentity, right: PortablePathIdentity): boolean;
8
+ export declare function exactReadMatchesPostimage(result: BoundedRegularFileRead, postimage: ExactFilePostimage): result is Extract<typeof result, {
9
+ readonly outcome: "read";
10
+ }>;
11
+ export declare function classifyExactFilePostimageWith(readFile: typeof readBoundedRegularFile, destinationPath: string, postimage: ExactFilePostimage): Promise<ExactFilePostimageState>;
12
+ export declare function syncPublicationDirectory(options: {
13
+ readonly allowUnsupportedDirectoryDurability: boolean;
14
+ readonly displayPath: string;
15
+ readonly parent: string;
16
+ readonly syncDirectory: (path: string) => Promise<DirectoryDurability>;
17
+ }): Promise<void>;
18
+ export declare function assertValidExactPostimage(postimage: ExactFilePostimage): void;
19
+ //# sourceMappingURL=node-absent-file-publication-private.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-absent-file-publication-private.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-absent-file-publication-private.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIvE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEhE;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAMT;AAMD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,kBAAkB,GAC5B,MAAM,IAAI,OAAO,CAAC,OAAO,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAQhE;AAKD,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,OAAO,sBAAsB,EACvC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA4BlC;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE;IACtD,QAAQ,CAAC,mCAAmC,EAAE,OAAO,CAAC;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,CACtB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnC,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhB;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAe7E"}
@@ -0,0 +1,74 @@
1
+ import { createHash } from "node:crypto";
2
+ import { AbsentFilePublicationError } from "../../application/model/exact-postimage.js";
3
+ import { readBoundedRegularFile } from "./node-bounded-regular-file.js";
4
+ export function publicationErrorCode(error) {
5
+ return error instanceof Error && "code" in error
6
+ ? error.code
7
+ : undefined;
8
+ }
9
+ export function isMissingPublicationPath(error) {
10
+ return publicationErrorCode(error) === "ENOENT";
11
+ }
12
+ export function samePublicationIdentity(left, right) {
13
+ return (left.dev === right.dev &&
14
+ left.ino === right.ino &&
15
+ left.birthtimeNs === right.birthtimeNs);
16
+ }
17
+ function sha256(bytes) {
18
+ return `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
19
+ }
20
+ export function exactReadMatchesPostimage(result, postimage) {
21
+ return (result.outcome === "read" &&
22
+ result.bytes.byteLength === postimage.size &&
23
+ sha256(result.bytes) === postimage.digest &&
24
+ (process.platform === "win32" ||
25
+ (result.mode & 0o777) === postimage.mode));
26
+ }
27
+ // Covers the one-shot ctime change when a concurrent publisher unlinks its hard-link temporary.
28
+ const maximumUnstableReadRetries = 2;
29
+ export async function classifyExactFilePostimageWith(readFile, destinationPath, postimage) {
30
+ for (let attempt = 0;; attempt += 1) {
31
+ try {
32
+ const result = await readFile(destinationPath, postimage.size);
33
+ if (result.outcome === "changed" &&
34
+ attempt < maximumUnstableReadRetries) {
35
+ continue;
36
+ }
37
+ if (result.outcome !== "read") {
38
+ return "conflict";
39
+ }
40
+ const modeMatches = process.platform === "win32" ||
41
+ (result.mode & 0o777) === postimage.mode;
42
+ return result.bytes.byteLength === postimage.size &&
43
+ sha256(result.bytes) === postimage.digest &&
44
+ modeMatches
45
+ ? "exact"
46
+ : "conflict";
47
+ }
48
+ catch (error) {
49
+ if (isMissingPublicationPath(error)) {
50
+ return "absent";
51
+ }
52
+ throw error;
53
+ }
54
+ }
55
+ }
56
+ export async function syncPublicationDirectory(options) {
57
+ const durability = await options.syncDirectory(options.parent);
58
+ if (durability === "unsupported" &&
59
+ !options.allowUnsupportedDirectoryDurability) {
60
+ throw new AbsentFilePublicationError("PUBLICATION_UNSUPPORTED", `Directory durability is unsupported: ${options.displayPath}.`);
61
+ }
62
+ }
63
+ export function assertValidExactPostimage(postimage) {
64
+ if (!Number.isSafeInteger(postimage.size) ||
65
+ postimage.size < 0 ||
66
+ postimage.bytes.byteLength !== postimage.size ||
67
+ sha256(postimage.bytes) !== postimage.digest ||
68
+ !Number.isSafeInteger(postimage.mode) ||
69
+ postimage.mode < 0 ||
70
+ postimage.mode > 0o777) {
71
+ throw new AbsentFilePublicationError("INVALID_POSTIMAGE", "Exact file postimage metadata does not match its bytes.");
72
+ }
73
+ }
74
+ //# sourceMappingURL=node-absent-file-publication-private.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-absent-file-publication-private.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-absent-file-publication-private.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { link, type FileHandle } from "node:fs/promises";
2
+ import { type AbsentFilePublicationOutcome, type ExactFilePostimage, type ExactFilePostimageState } from "../../application/model/exact-postimage.js";
3
+ import type { OwnedTemporaryCleanupTransitionPort } from "../../application/ports/owned-temporary-cleanup-transition.js";
4
+ import { readBoundedRegularFile } from "./node-bounded-regular-file.js";
5
+ import { syncDirectoryDurably } from "./node-directory-durability.js";
6
+ export interface AbsentFilePublicationFaultPoint {
7
+ readonly phase: "after-hard-link" | "after-temporary-synced" | "after-temporary-written";
8
+ }
9
+ export type AbsentFilePublicationFaultInjector = (point: AbsentFilePublicationFaultPoint) => Promise<void> | void;
10
+ export interface AbsentFilePublicationOperations {
11
+ readonly link: typeof link;
12
+ readonly open: (path: string, flags: "wx", mode: number) => Promise<FileHandle>;
13
+ readonly readBoundedRegularFile: typeof readBoundedRegularFile;
14
+ readonly rm: (path: string) => Promise<void>;
15
+ readonly syncDirectory: typeof syncDirectoryDurably;
16
+ }
17
+ export declare function classifyExactFilePostimage(destinationPath: string, postimage: ExactFilePostimage): Promise<ExactFilePostimageState>;
18
+ export declare function assertTemporaryPathsAbsent(entries: readonly {
19
+ readonly displayPath: string;
20
+ readonly temporaryPath: string;
21
+ }[]): Promise<void>;
22
+ export interface AbsentFilePublicationOptions {
23
+ readonly allowUnsupportedDirectoryDurability?: boolean;
24
+ readonly destinationPath: string;
25
+ readonly displayPath: string;
26
+ readonly postimage: ExactFilePostimage;
27
+ readonly temporaryPath: string;
28
+ readonly transition?: OwnedTemporaryCleanupTransitionPort;
29
+ }
30
+ export declare function publishAbsentFileWithFaults(options: AbsentFilePublicationOptions & {
31
+ readonly faultInjector?: AbsentFilePublicationFaultInjector;
32
+ readonly operations?: Partial<AbsentFilePublicationOperations>;
33
+ }): Promise<AbsentFilePublicationOutcome>;
34
+ export declare function publishAbsentFile(options: AbsentFilePublicationOptions): Promise<AbsentFilePublicationOutcome>;
35
+ //# sourceMappingURL=node-absent-file-publication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-absent-file-publication.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-absent-file-publication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAY,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG1E,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,+DAA+D,CAAC;AAEzH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAYtE,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,KAAK,EACV,iBAAiB,GACjB,wBAAwB,GACxB,yBAAyB,CAAC;CAC/B;AAED,MAAM,MAAM,kCAAkC,GAAG,CAC/C,KAAK,EAAE,+BAA+B,KACnC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,IAAI,EACX,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,QAAQ,CAAC,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;IAC/D,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,OAAO,oBAAoB,CAAC;CACrD;AA2DD,wBAAsB,0BAA0B,CAC9C,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAMlC;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAAE,GACnF,OAAO,CAAC,IAAI,CAAC,CAef;AA0ID,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,mCAAmC,CAAC,EAAE,OAAO,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,mCAAmC,CAAC;CAC3D;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,4BAA4B,GAAG;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,kCAAkC,CAAC;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC,CAAC;CAChE,GACA,OAAO,CAAC,4BAA4B,CAAC,CAoCvC;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,4BAA4B,CAAC,CAEvC"}
@@ -0,0 +1,181 @@
1
+ import { lstat, link, open, rm } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { AbsentFilePublicationError } from "../../application/model/exact-postimage.js";
4
+ import { portableRepositoryPathIdentity } from "../../application/model/repository-path.js";
5
+ import { readBoundedRegularFile } from "./node-bounded-regular-file.js";
6
+ import { cleanupIdentityMatchingOwnedTemporary } from "./node-cleanup-owned-temporary.js";
7
+ import { syncDirectoryDurably } from "./node-directory-durability.js";
8
+ import { assertValidExactPostimage, classifyExactFilePostimageWith, isMissingPublicationPath } from "./node-absent-file-publication-private.js";
9
+ import { prepareExactSiblingTemporaryWithFaults } from "./node-prepare-exact-sibling-temporary.js";
10
+ import { publishPreparedAbsentFileWithFaults, verifyPublishedAbsentFile } from "./node-publish-prepared-absent-file.js";
11
+ const nodeOperations = {
12
+ link,
13
+ open,
14
+ readBoundedRegularFile,
15
+ rm,
16
+ syncDirectory: syncDirectoryDurably
17
+ };
18
+ function snapshotPostimage(postimage) {
19
+ const snapshot = {
20
+ bytes: Buffer.from(postimage.bytes),
21
+ digest: postimage.digest,
22
+ mode: postimage.mode,
23
+ size: postimage.size
24
+ };
25
+ assertValidExactPostimage(snapshot);
26
+ return snapshot;
27
+ }
28
+ function assertValidPublicationPaths(temporaryPath, destinationPath, displayPath) {
29
+ const resolvedTemporary = resolve(temporaryPath);
30
+ const resolvedDestination = resolve(destinationPath);
31
+ if (portableRepositoryPathIdentity(resolvedTemporary) ===
32
+ portableRepositoryPathIdentity(resolvedDestination) ||
33
+ dirname(resolvedTemporary) !== dirname(resolvedDestination)) {
34
+ throw new AbsentFilePublicationError("PUBLICATION_INVALID", `Publication paths are not distinct siblings: ${displayPath}.`);
35
+ }
36
+ }
37
+ export async function classifyExactFilePostimage(destinationPath, postimage) {
38
+ return classifyExactFilePostimageWith(readBoundedRegularFile, destinationPath, snapshotPostimage(postimage));
39
+ }
40
+ export async function assertTemporaryPathsAbsent(entries) {
41
+ for (const entry of entries) {
42
+ try {
43
+ await lstat(entry.temporaryPath);
44
+ }
45
+ catch (error) {
46
+ if (isMissingPublicationPath(error)) {
47
+ continue;
48
+ }
49
+ throw error;
50
+ }
51
+ throw new AbsentFilePublicationError("TEMPORARY_EXISTS", `Temporary path already exists: ${entry.displayPath}.`);
52
+ }
53
+ }
54
+ async function runPublicationPhase(context) {
55
+ const state = {
56
+ concurrentSatisfied: false,
57
+ published: false
58
+ };
59
+ try {
60
+ const temporaryIdentity = await prepareExactSiblingTemporaryWithFaults({
61
+ displayPath: context.displayPath,
62
+ ...(context.faultInjector === undefined
63
+ ? {}
64
+ : { faultInjector: context.faultInjector }),
65
+ onIdentityCaptured(identity) {
66
+ state.temporaryIdentity = identity;
67
+ },
68
+ open: context.operations.open,
69
+ postimage: context.postimage,
70
+ temporaryPath: context.temporaryPath
71
+ });
72
+ await context.faultInjector?.({ phase: "after-temporary-synced" });
73
+ const outcome = await publishPreparedAbsentFileWithFaults({
74
+ allowUnsupportedDirectoryDurability: context.allowUnsupportedDirectoryDurability,
75
+ classifyBoundedRegularFile: context.operations.readBoundedRegularFile,
76
+ destinationPath: context.destinationPath,
77
+ displayPath: context.displayPath,
78
+ expectedIdentity: temporaryIdentity,
79
+ ...(context.faultInjector === undefined
80
+ ? {}
81
+ : { faultInjector: context.faultInjector }),
82
+ link: context.operations.link,
83
+ parent: context.parent,
84
+ postimage: context.postimage,
85
+ readBoundedRegularFile: context.operations.readBoundedRegularFile,
86
+ syncDirectory: context.operations.syncDirectory,
87
+ temporaryPath: context.temporaryPath
88
+ });
89
+ state.concurrentSatisfied = outcome === "already-satisfied";
90
+ state.published = outcome === "published";
91
+ }
92
+ catch (error) {
93
+ state.error = error;
94
+ }
95
+ return state;
96
+ }
97
+ async function cleanupPublicationTemporary(context, state) {
98
+ try {
99
+ const ownership = state.temporaryIdentity === undefined
100
+ ? "missing"
101
+ : await cleanupIdentityMatchingOwnedTemporary({
102
+ allowUnsupportedDirectoryDurability: context.allowUnsupportedDirectoryDurability,
103
+ displayPath: context.displayPath,
104
+ expectedIdentity: state.temporaryIdentity,
105
+ parent: context.parent,
106
+ rm: context.operations.rm,
107
+ syncDirectory: context.operations.syncDirectory,
108
+ temporaryPath: context.temporaryPath,
109
+ ...(context.transition === undefined
110
+ ? {}
111
+ : { transition: context.transition })
112
+ });
113
+ if (ownership === "different") {
114
+ throw new AbsentFilePublicationError("TEMPORARY_REPLACED", `Temporary path was replaced concurrently: ${context.displayPath}.`, state.error === undefined ? undefined : { cause: state.error });
115
+ }
116
+ }
117
+ catch (cleanupError) {
118
+ if (cleanupError instanceof AbsentFilePublicationError &&
119
+ cleanupError.code === "TEMPORARY_REPLACED") {
120
+ throw cleanupError;
121
+ }
122
+ throw new AbsentFilePublicationError("CLEANUP_FAILED", `Publication temporary cleanup failed: ${context.displayPath}.`, {
123
+ cause: state.error ?? cleanupError,
124
+ cleanupError
125
+ });
126
+ }
127
+ }
128
+ async function publicationOutcome(context, state) {
129
+ if (state.error !== undefined) {
130
+ if (!(state.error instanceof Error)) {
131
+ throw new AbsentFilePublicationError("INVALID_ERROR", `Publication failed with an invalid error value: ${context.displayPath}.`);
132
+ }
133
+ throw state.error;
134
+ }
135
+ if (state.concurrentSatisfied) {
136
+ if ((await classifyExactFilePostimageWith(context.operations.readBoundedRegularFile, context.destinationPath, context.postimage)) !== "exact") {
137
+ throw new AbsentFilePublicationError("CONFLICT", `Destination changed concurrently: ${context.displayPath}.`);
138
+ }
139
+ return "already-satisfied";
140
+ }
141
+ if (!state.published || state.temporaryIdentity === undefined) {
142
+ throw new AbsentFilePublicationError("PUBLICATION_INCOMPLETE", `Publication did not reach a terminal state: ${context.displayPath}.`);
143
+ }
144
+ await verifyPublishedAbsentFile({
145
+ destinationPath: context.destinationPath,
146
+ displayPath: context.displayPath,
147
+ expectedIdentity: state.temporaryIdentity,
148
+ postimage: context.postimage,
149
+ readBoundedRegularFile: context.operations.readBoundedRegularFile
150
+ });
151
+ return "published";
152
+ }
153
+ export async function publishAbsentFileWithFaults(options) {
154
+ const postimage = snapshotPostimage(options.postimage);
155
+ const context = {
156
+ allowUnsupportedDirectoryDurability: options.allowUnsupportedDirectoryDurability === true,
157
+ destinationPath: options.destinationPath,
158
+ displayPath: options.displayPath,
159
+ faultInjector: options.faultInjector,
160
+ operations: { ...nodeOperations, ...options.operations },
161
+ parent: dirname(resolve(options.destinationPath)),
162
+ postimage,
163
+ temporaryPath: options.temporaryPath,
164
+ transition: options.transition
165
+ };
166
+ assertValidPublicationPaths(context.temporaryPath, context.destinationPath, context.displayPath);
167
+ const initial = await classifyExactFilePostimageWith(context.operations.readBoundedRegularFile, context.destinationPath, context.postimage);
168
+ if (initial === "exact") {
169
+ return "already-satisfied";
170
+ }
171
+ if (initial === "conflict") {
172
+ throw new AbsentFilePublicationError("CONFLICT", `Destination changed concurrently: ${context.displayPath}.`);
173
+ }
174
+ const state = await runPublicationPhase(context);
175
+ await cleanupPublicationTemporary(context, state);
176
+ return publicationOutcome(context, state);
177
+ }
178
+ export function publishAbsentFile(options) {
179
+ return publishAbsentFileWithFaults(options);
180
+ }
181
+ //# sourceMappingURL=node-absent-file-publication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-absent-file-publication.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-absent-file-publication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type FileHandle } from "node:fs/promises";
2
+ import type { PathIdentityMatch, PortablePathIdentity } from "../../application/model/path-identity.js";
3
+ export type BoundedRegularFileRead = {
4
+ readonly outcome: "read";
5
+ readonly bytes: Buffer;
6
+ readonly identity: PortablePathIdentity;
7
+ readonly linkCount: bigint;
8
+ readonly mode: number;
9
+ } | {
10
+ readonly outcome: "changed";
11
+ } | {
12
+ readonly outcome: "invalid";
13
+ };
14
+ export type BoundedRegularFileReadFaultInjector = (point: {
15
+ readonly phase: "before-stability-check";
16
+ readonly path: string;
17
+ }) => Promise<void> | void;
18
+ export declare function readBoundedRegularFileWithFaults(path: string, maximumBytes: number, faultInjector?: BoundedRegularFileReadFaultInjector): Promise<BoundedRegularFileRead>;
19
+ export declare function readBoundedRegularFile(path: string, maximumBytes: number): Promise<BoundedRegularFileRead>;
20
+ export declare function readBoundedRegularFileHandle(handle: FileHandle, path: string, maximumBytes: number, faultInjector?: BoundedRegularFileReadFaultInjector): Promise<BoundedRegularFileRead>;
21
+ export declare function captureFileHandleIdentity(handle: FileHandle): Promise<PortablePathIdentity>;
22
+ export declare function pathMatchesRegularFileIdentity(path: string, expected: PortablePathIdentity): Promise<PathIdentityMatch>;
23
+ //# sourceMappingURL=node-bounded-regular-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-bounded-regular-file.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-bounded-regular-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,0CAA0C,CAAC;AAElD,MAAM,MAAM,sBAAsB,GAC9B;IACE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;CAAE,CAAC;AAEpC,MAAM,MAAM,mCAAmC,GAAG,CAAC,KAAK,EAAE;IACxD,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAmF3B,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,mCAAmC,GAClD,OAAO,CAAC,sBAAsB,CAAC,CA0BjC;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,sBAAsB,CAAC,CAEjC;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,mCAAmC,GAClD,OAAO,CAAC,sBAAsB,CAAC,CA8BjC;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,CAkB5B"}