@agent-teams/engineering-foundation 0.12.0 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/cli.js +23 -12
  2. package/dist/cli.js.map +1 -1
  3. package/dist/foundation-state-contract.d.ts +7 -0
  4. package/dist/foundation-state-contract.d.ts.map +1 -0
  5. package/dist/foundation-state-contract.js +7 -0
  6. package/dist/foundation-state-contract.js.map +1 -0
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/local-mode/attach-transaction.d.ts.map +1 -1
  12. package/dist/local-mode/attach-transaction.js +13 -7
  13. package/dist/local-mode/attach-transaction.js.map +1 -1
  14. package/dist/local-mode/inspection.d.ts +4 -1
  15. package/dist/local-mode/inspection.d.ts.map +1 -1
  16. package/dist/local-mode/inspection.js +20 -0
  17. package/dist/local-mode/inspection.js.map +1 -1
  18. package/dist/local-mode/local-state-store.d.ts.map +1 -1
  19. package/dist/local-mode/local-state-store.js +8 -105
  20. package/dist/local-mode/local-state-store.js.map +1 -1
  21. package/dist/local-mode/service.d.ts.map +1 -1
  22. package/dist/local-mode/service.js +17 -4
  23. package/dist/local-mode/service.js.map +1 -1
  24. package/dist/local-mode/types.d.ts +7 -4
  25. package/dist/local-mode/types.d.ts.map +1 -1
  26. package/dist/local-mode/types.js +1 -4
  27. package/dist/local-mode/types.js.map +1 -1
  28. package/dist/package-version.d.ts +2 -0
  29. package/dist/package-version.d.ts.map +1 -0
  30. package/dist/package-version.js +10 -0
  31. package/dist/package-version.js.map +1 -0
  32. package/dist/process-execution/windows-managed-process.d.ts.map +1 -1
  33. package/dist/process-execution/windows-managed-process.js +1 -0
  34. package/dist/process-execution/windows-managed-process.js.map +1 -1
  35. package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts +31 -0
  36. package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts.map +1 -0
  37. package/dist/repository-mutation/adapters/node/node-absent-file-publication.js +272 -0
  38. package/dist/repository-mutation/adapters/node/node-absent-file-publication.js.map +1 -0
  39. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts +20 -0
  40. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts.map +1 -0
  41. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js +123 -0
  42. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js.map +1 -0
  43. package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts +12 -0
  44. package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts.map +1 -0
  45. package/dist/repository-mutation/adapters/node/node-directory-durability.js +32 -0
  46. package/dist/repository-mutation/adapters/node/node-directory-durability.js.map +1 -0
  47. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.d.ts +13 -0
  48. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.d.ts.map +1 -0
  49. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.js +67 -0
  50. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.js.map +1 -0
  51. package/dist/repository-mutation/adapters/node/node-repository-path.d.ts +2 -0
  52. package/dist/repository-mutation/adapters/node/node-repository-path.d.ts.map +1 -0
  53. package/dist/repository-mutation/adapters/node/node-repository-path.js +7 -0
  54. package/dist/repository-mutation/adapters/node/node-repository-path.js.map +1 -0
  55. package/dist/repository-mutation/application/model/exact-postimage.d.ts +17 -0
  56. package/dist/repository-mutation/application/model/exact-postimage.d.ts.map +1 -0
  57. package/dist/repository-mutation/application/model/exact-postimage.js +11 -0
  58. package/dist/repository-mutation/application/model/exact-postimage.js.map +1 -0
  59. package/dist/repository-mutation/application/model/path-identity.d.ts +7 -0
  60. package/dist/repository-mutation/application/model/path-identity.d.ts.map +1 -0
  61. package/dist/repository-mutation/application/model/path-identity.js +2 -0
  62. package/dist/repository-mutation/application/model/path-identity.js.map +1 -0
  63. package/dist/repository-mutation/application/model/repository-path.d.ts +8 -0
  64. package/dist/repository-mutation/application/model/repository-path.d.ts.map +1 -0
  65. package/dist/repository-mutation/application/model/repository-path.js +74 -0
  66. package/dist/repository-mutation/application/model/repository-path.js.map +1 -0
  67. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.d.ts.map +1 -1
  68. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js +52 -8
  69. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js.map +1 -1
  70. package/dist/scaffolding/adapters/node/filesystem-file-identity.d.ts +3 -19
  71. package/dist/scaffolding/adapters/node/filesystem-file-identity.d.ts.map +1 -1
  72. package/dist/scaffolding/adapters/node/filesystem-file-identity.js +1 -121
  73. package/dist/scaffolding/adapters/node/filesystem-file-identity.js.map +1 -1
  74. package/dist/scaffolding/adapters/node/filesystem-journal.d.ts +1 -1
  75. package/dist/scaffolding/adapters/node/filesystem-journal.d.ts.map +1 -1
  76. package/dist/scaffolding/adapters/node/filesystem-journal.js +4 -20
  77. package/dist/scaffolding/adapters/node/filesystem-journal.js.map +1 -1
  78. package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts +2 -1
  79. package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts.map +1 -1
  80. package/dist/scaffolding/adapters/node/filesystem-operation-state.js +73 -122
  81. package/dist/scaffolding/adapters/node/filesystem-operation-state.js.map +1 -1
  82. package/dist/scaffolding/adapters/node/filesystem-path-guard.d.ts.map +1 -1
  83. package/dist/scaffolding/adapters/node/filesystem-path-guard.js +27 -68
  84. package/dist/scaffolding/adapters/node/filesystem-path-guard.js.map +1 -1
  85. package/dist/scaffolding/adapters/node/installed-foundation-version.d.ts +1 -1
  86. package/dist/scaffolding/adapters/node/installed-foundation-version.d.ts.map +1 -1
  87. package/dist/scaffolding/adapters/node/installed-foundation-version.js +1 -9
  88. package/dist/scaffolding/adapters/node/installed-foundation-version.js.map +1 -1
  89. package/dist/scaffolding/application/policies/legacy-scaffolding-repository-path.d.ts +4 -0
  90. package/dist/scaffolding/application/policies/legacy-scaffolding-repository-path.d.ts.map +1 -0
  91. package/dist/scaffolding/application/policies/legacy-scaffolding-repository-path.js +48 -0
  92. package/dist/scaffolding/application/policies/legacy-scaffolding-repository-path.js.map +1 -0
  93. package/dist/scaffolding/kernel/authority-journal-validation.d.ts +4 -0
  94. package/dist/scaffolding/kernel/authority-journal-validation.d.ts.map +1 -0
  95. package/dist/scaffolding/kernel/authority-journal-validation.js +24 -0
  96. package/dist/scaffolding/kernel/authority-journal-validation.js.map +1 -0
  97. package/dist/transaction-coordination/adapters/node/installed-foundation-build-identity.d.ts +11 -0
  98. package/dist/transaction-coordination/adapters/node/installed-foundation-build-identity.d.ts.map +1 -0
  99. package/dist/transaction-coordination/adapters/node/installed-foundation-build-identity.js +130 -0
  100. package/dist/transaction-coordination/adapters/node/installed-foundation-build-identity.js.map +1 -0
  101. package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.d.ts +7 -0
  102. package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.d.ts.map +1 -0
  103. package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.js +336 -0
  104. package/dist/transaction-coordination/adapters/node/node-foundation-operation-lock.js.map +1 -0
  105. package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.d.ts +4 -0
  106. package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.d.ts.map +1 -0
  107. package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.js +76 -0
  108. package/dist/transaction-coordination/adapters/node/node-foundation-state-directory.js.map +1 -0
  109. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-coordinator.d.ts +3 -0
  110. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-coordinator.d.ts.map +1 -0
  111. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-coordinator.js +23 -0
  112. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-coordinator.js.map +1 -0
  113. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.d.ts +12 -0
  114. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.d.ts.map +1 -0
  115. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.js +332 -0
  116. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.js.map +1 -0
  117. package/dist/transaction-coordination/application/foundation-transaction-coordinator.d.ts +22 -0
  118. package/dist/transaction-coordination/application/foundation-transaction-coordinator.d.ts.map +1 -0
  119. package/dist/transaction-coordination/application/foundation-transaction-coordinator.js +78 -0
  120. package/dist/transaction-coordination/application/foundation-transaction-coordinator.js.map +1 -0
  121. package/dist/transaction-coordination/application/foundation-transaction-error.d.ts +16 -0
  122. package/dist/transaction-coordination/application/foundation-transaction-error.d.ts.map +1 -0
  123. package/dist/transaction-coordination/application/foundation-transaction-error.js +19 -0
  124. package/dist/transaction-coordination/application/foundation-transaction-error.js.map +1 -0
  125. package/dist/transaction-coordination/application/model/transaction-status.d.ts +47 -0
  126. package/dist/transaction-coordination/application/model/transaction-status.d.ts.map +1 -0
  127. package/dist/transaction-coordination/application/model/transaction-status.js +2 -0
  128. package/dist/transaction-coordination/application/model/transaction-status.js.map +1 -0
  129. package/dist/transaction-coordination/application/ports/foundation-operation-lock.d.ts +7 -0
  130. package/dist/transaction-coordination/application/ports/foundation-operation-lock.d.ts.map +1 -0
  131. package/dist/transaction-coordination/application/ports/foundation-operation-lock.js +2 -0
  132. package/dist/transaction-coordination/application/ports/foundation-operation-lock.js.map +1 -0
  133. package/dist/transaction-coordination/application/ports/foundation-transaction-slot.d.ts +5 -0
  134. package/dist/transaction-coordination/application/ports/foundation-transaction-slot.d.ts.map +1 -0
  135. package/dist/transaction-coordination/application/ports/foundation-transaction-slot.js +2 -0
  136. package/dist/transaction-coordination/application/ports/foundation-transaction-slot.js.map +1 -0
  137. package/package.json +1 -1
@@ -5,7 +5,8 @@ import { attachFoundation } from "./attach-transaction.js";
5
5
  import { inspectFoundationDevOnly } from "./consumer-policy.js";
6
6
  import { isExactVersion } from "../semantic-version.js";
7
7
  import { inspectFoundationMode } from "./inspection.js";
8
- import { acquireFoundationOperationLock, removeLinkState, writeLinkState } from "./local-state-store.js";
8
+ import { removeLinkState, writeLinkState } from "./local-state-store.js";
9
+ import { createNodeFoundationTransactionCoordinator } from "../transaction-coordination/adapters/node/node-foundation-transaction-coordinator.js";
9
10
  import { restoreRegistryEntry } from "./registry-recovery.js";
10
11
  import { FOUNDATION_PACKAGE_NAME } from "./types.js";
11
12
  export { acquireFoundationOperationLock } from "./local-state-store.js";
@@ -75,11 +76,21 @@ export class FoundationLocalModeService {
75
76
  !isExactVersion(before.dependencySpec)) {
76
77
  throw new FoundationError("CONSUMER_INVALID", `Consumer must retain an exact ${FOUNDATION_PACKAGE_NAME} registry dependency.`);
77
78
  }
78
- const releaseLock = await acquireFoundationOperationLock(before.consumerRoot);
79
+ const coordinator = await createNodeFoundationTransactionCoordinator(before.consumerRoot);
80
+ const lease = await coordinator.acquire({
81
+ requestedMutation: "detach",
82
+ allowRecoveryOf: "local-mode"
83
+ });
79
84
  try {
80
85
  const current = await inspectFoundationMode(before.consumerRoot, {
81
86
  ignoreOperationLock: true
82
87
  });
88
+ if (current.consumerRoot !== before.consumerRoot ||
89
+ current.dependencySpec === undefined ||
90
+ current.dependencySpec !== before.dependencySpec ||
91
+ !isExactVersion(current.dependencySpec)) {
92
+ throw new FoundationError("LOCAL_STATE_INVALID", "Consumer foundation dependency changed before detach acquired its operation lock.");
93
+ }
83
94
  if (current.mode === "REGISTRY") {
84
95
  return current;
85
96
  }
@@ -89,11 +100,13 @@ export class FoundationLocalModeService {
89
100
  phase: "DETACHING"
90
101
  });
91
102
  }
92
- await restoreRegistryEntry(before.consumerRoot, before.dependencySpec, current.linkState);
103
+ await restoreRegistryEntry(before.consumerRoot, current.dependencySpec, current.linkState);
93
104
  await removeLinkState(before.consumerRoot);
94
105
  }
95
106
  finally {
96
- await releaseLock();
107
+ await lease.release({
108
+ retainTransactionBarrier: (await coordinator.inspect()).state !== "idle"
109
+ });
97
110
  }
98
111
  const after = await inspectFoundationMode(before.consumerRoot);
99
112
  if (after.mode !== "REGISTRY") {
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/local-mode/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/local-mode/service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  export declare const FOUNDATION_PACKAGE_NAME: "@agent-teams/engineering-foundation";
2
- export declare const LOCAL_STATE_DIRECTORY: ".agent-teams-local";
3
- export declare const LOCAL_STATE_FILE: "foundation-link.json";
4
- export declare const LOCAL_REGISTRY_BACKUP: "foundation-registry-backup";
5
- export declare const LOCAL_OPERATION_LOCK: "foundation-operation.lock";
2
+ export { FOUNDATION_LINK_STATE_FILE as LOCAL_STATE_FILE, FOUNDATION_REGISTRY_BACKUP as LOCAL_REGISTRY_BACKUP, LOCAL_OPERATION_LOCK, LOCAL_STATE_DIRECTORY } from "../foundation-state-contract.js";
6
3
  export declare const FOUNDATION_LOCAL_MODE_PROTOCOL_VERSION: 1;
7
4
  export type { ProcessRequest, ProcessResult, ProcessRunner } from "../process-execution/types.js";
5
+ import type { FoundationTransactionStatus } from "../transaction-coordination/application/model/transaction-status.js";
6
+ export type { FoundationManualRecoveryReason, FoundationRecoveryRoute, FoundationTransactionDiagnostic, FoundationTransactionStatus } from "../transaction-coordination/application/model/transaction-status.js";
8
7
  export type FoundationMode = "INVALID" | "LOCAL" | "REGISTRY";
9
8
  export type FoundationLinkPhase = "ATTACHING" | "DETACHING" | "LOCAL";
10
9
  export interface FoundationLinkState {
@@ -34,6 +33,10 @@ export interface FoundationStatus {
34
33
  readonly sourceGitDirty?: boolean;
35
34
  readonly issues: readonly string[];
36
35
  }
36
+ /** Additive transaction-aware status for callers that need recovery routing. */
37
+ export interface FoundationTransactionAwareStatus extends FoundationStatus {
38
+ readonly transaction?: FoundationTransactionStatus;
39
+ }
37
40
  export interface FoundationDevOnlyStatus {
38
41
  readonly consumerRoot: string;
39
42
  readonly dependencySpec?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/local-mode/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,EAClC,qCAA8C,CAAC;AACjD,eAAO,MAAM,qBAAqB,EAAG,oBAA6B,CAAC;AACnE,eAAO,MAAM,gBAAgB,EAAG,sBAA+B,CAAC;AAChE,eAAO,MAAM,qBAAqB,EAAG,4BAAqC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,EAAG,2BAAoC,CAAC;AACzE,eAAO,MAAM,sCAAsC,EAAG,CAAU,CAAC;AAEjE,YAAY,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,WAAW,GAAG,eAAe,CAAC;IAC1D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,kEAAkE;AAClE,MAAM,WAAW,wBAAyB,SAAQ,uBAAuB;IACvE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,qEAAqE;AACrE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,4BAA4B,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/local-mode/types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,4 @@
1
1
  export const FOUNDATION_PACKAGE_NAME = "@agent-teams/engineering-foundation";
2
- export const LOCAL_STATE_DIRECTORY = ".agent-teams-local";
3
- export const LOCAL_STATE_FILE = "foundation-link.json";
4
- export const LOCAL_REGISTRY_BACKUP = "foundation-registry-backup";
5
- export const LOCAL_OPERATION_LOCK = "foundation-operation.lock";
2
+ export { FOUNDATION_LINK_STATE_FILE as LOCAL_STATE_FILE, FOUNDATION_REGISTRY_BACKUP as LOCAL_REGISTRY_BACKUP, LOCAL_OPERATION_LOCK, LOCAL_STATE_DIRECTORY } from "../foundation-state-contract.js";
6
3
  export const FOUNDATION_LOCAL_MODE_PROTOCOL_VERSION = 1;
7
4
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/local-mode/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAClC,qCAA8C,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAA6B,CAAC;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAA+B,CAAC;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,4BAAqC,CAAC;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAAoC,CAAC;AACzE,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAU,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/local-mode/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAClC,qCAA8C,CAAC;AACjD,OAAO,EACL,0BAA0B,IAAI,gBAAgB,EAC9C,0BAA0B,IAAI,qBAAqB,EACnD,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AACzC,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function installedFoundationVersion(): Promise<string>;
2
+ //# 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,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAWlE"}
@@ -0,0 +1,10 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { fileURLToPath } from "node:url";
3
+ export async function installedFoundationVersion() {
4
+ const manifest = JSON.parse(await readFile(fileURLToPath(new URL("../package.json", import.meta.url)), "utf8"));
5
+ if (typeof manifest.version !== "string") {
6
+ throw new Error("Installed Foundation package version is unavailable.");
7
+ }
8
+ return manifest.version;
9
+ }
10
+ //# 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,KAAK,UAAU,0BAA0B;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,MAAM,QAAQ,CACZ,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAC1D,MAAM,CACP,CACgC,CAAC;IACpC,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"windows-managed-process.d.ts","sourceRoot":"","sources":["../../src/process-execution/windows-managed-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG9D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAsWD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,4BAA4B,GACpC,YAAY,CAsCd"}
1
+ {"version":3,"file":"windows-managed-process.d.ts","sourceRoot":"","sources":["../../src/process-execution/windows-managed-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG9D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAuWD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,4BAA4B,GACpC,YAAY,CAsCd"}
@@ -4,6 +4,7 @@ const PROCESS_HOST_PATH = fileURLToPath(new URL("./windows-process-host.js", imp
4
4
  const MAX_ENCODED_REQUEST_CHARACTERS = 24_000;
5
5
  const WINDOWS_JOB_RUNNER = String.raw `
6
6
  $ErrorActionPreference = "Stop"
7
+ $ProgressPreference = "SilentlyContinue"
7
8
  Add-Type -TypeDefinition @'
8
9
  using System;
9
10
  using System.ComponentModel;
@@ -1 +1 @@
1
- {"version":3,"file":"windows-managed-process.js","sourceRoot":"","sources":["../../src/process-execution/windows-managed-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,MAAM,iBAAiB,GAAG,aAAa,CACrC,IAAI,GAAG,CAAC,2BAA2B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CACtD,CAAC;AACF,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAE9C,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwVpC,CAAC;AAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAC5C,kBAAkB,EAClB,SAAS,CACV,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAErB;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAqC;IAErC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1B,IAAI,cAAc,CAAC,MAAM,GAAG,8BAA8B,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,+CAA+C,8BAA8B,sBAAsB,CACpG,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CACjB,gBAAgB,EAChB;QACE,SAAS;QACT,YAAY;QACZ,iBAAiB;QACjB,kBAAkB;QAClB,QAAQ;QACR,iBAAiB;QACjB,0BAA0B;KAC3B,EACD;QACE,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAC/B,WAAW,EAAE,IAAI;KAClB,CACF,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QAC7B,uEAAuE;IACzE,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7B,cAAc,EAAE,OAAO,CAAC,QAAQ;QAChC,eAAe,EAAE,iBAAiB;QAClC,cAAc;KACf,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"windows-managed-process.js","sourceRoot":"","sources":["../../src/process-execution/windows-managed-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,MAAM,iBAAiB,GAAG,aAAa,CACrC,IAAI,GAAG,CAAC,2BAA2B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CACtD,CAAC;AACF,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAE9C,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyVpC,CAAC;AAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAC5C,kBAAkB,EAClB,SAAS,CACV,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAErB;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAqC;IAErC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1B,IAAI,cAAc,CAAC,MAAM,GAAG,8BAA8B,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,+CAA+C,8BAA8B,sBAAsB,CACpG,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CACjB,gBAAgB,EAChB;QACE,SAAS;QACT,YAAY;QACZ,iBAAiB;QACjB,kBAAkB;QAClB,QAAQ;QACR,iBAAiB;QACjB,0BAA0B;KAC3B,EACD;QACE,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAC/B,WAAW,EAAE,IAAI;KAClB,CACF,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QAC7B,uEAAuE;IACzE,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QAC7B,cAAc,EAAE,OAAO,CAAC,QAAQ;QAChC,eAAe,EAAE,iBAAiB;QAClC,cAAc;KACf,CAAC,CAAC,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,31 @@
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 { readBoundedRegularFile } from "./node-bounded-regular-file.js";
4
+ import { syncDirectoryDurably } from "./node-directory-durability.js";
5
+ export interface AbsentFilePublicationFaultPoint {
6
+ readonly phase: "after-hard-link" | "after-temporary-synced" | "after-temporary-written";
7
+ }
8
+ export type AbsentFilePublicationFaultInjector = (point: AbsentFilePublicationFaultPoint) => Promise<void> | void;
9
+ interface AbsentFilePublicationOperations {
10
+ readonly link: typeof link;
11
+ readonly open: (path: string, flags: "wx", mode: number) => Promise<FileHandle>;
12
+ readonly readBoundedRegularFile: typeof readBoundedRegularFile;
13
+ readonly rm: (path: string) => Promise<void>;
14
+ readonly syncDirectory: typeof syncDirectoryDurably;
15
+ }
16
+ export declare function classifyExactFilePostimage(destinationPath: string, postimage: ExactFilePostimage): Promise<ExactFilePostimageState>;
17
+ export declare function assertTemporaryPathsAbsent(entries: readonly {
18
+ readonly displayPath: string;
19
+ readonly temporaryPath: string;
20
+ }[]): Promise<void>;
21
+ export declare function publishAbsentFile(options: {
22
+ readonly allowUnsupportedDirectoryDurability?: boolean;
23
+ readonly destinationPath: string;
24
+ readonly displayPath: string;
25
+ readonly faultInjector?: AbsentFilePublicationFaultInjector;
26
+ readonly operations?: Partial<AbsentFilePublicationOperations>;
27
+ readonly postimage: ExactFilePostimage;
28
+ readonly temporaryPath: string;
29
+ }): Promise<AbsentFilePublicationOutcome>;
30
+ export {};
31
+ //# 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":"AACA,OAAO,EAAE,IAAI,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG1E,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,4CAA4C,CAAC;AAGpD,OAAO,EAGL,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,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,UAAU,+BAA+B;IACvC,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;AAwMD,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;AA0MD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,QAAQ,CAAC,mCAAmC,CAAC,EAAE,OAAO,CAAC;IACvD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,kCAAkC,CAAC;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAmCxC"}
@@ -0,0 +1,272 @@
1
+ import { createHash } from "node:crypto";
2
+ import { link, lstat, open, rm } from "node:fs/promises";
3
+ import { dirname, resolve } from "node:path";
4
+ import { AbsentFilePublicationError } from "../../application/model/exact-postimage.js";
5
+ import { portableRepositoryPathIdentity } from "../../application/model/repository-path.js";
6
+ import { captureFileHandleIdentity, pathMatchesRegularFileIdentity, readBoundedRegularFile } from "./node-bounded-regular-file.js";
7
+ import { syncDirectoryDurably } from "./node-directory-durability.js";
8
+ const nodeOperations = {
9
+ link,
10
+ open,
11
+ readBoundedRegularFile,
12
+ rm,
13
+ syncDirectory: syncDirectoryDurably
14
+ };
15
+ function errorCode(error) {
16
+ return error instanceof Error && "code" in error
17
+ ? error.code
18
+ : undefined;
19
+ }
20
+ function isMissing(error) {
21
+ return errorCode(error) === "ENOENT";
22
+ }
23
+ function isUnsupportedLink(error) {
24
+ return ["ENOSYS", "ENOTSUP", "EOPNOTSUPP", "EPERM", "EXDEV"].includes(errorCode(error) ?? "");
25
+ }
26
+ function sha256(bytes) {
27
+ return `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
28
+ }
29
+ function sameIdentity(left, right) {
30
+ return (left.dev === right.dev &&
31
+ left.ino === right.ino &&
32
+ left.birthtimeNs === right.birthtimeNs);
33
+ }
34
+ function exactReadMatchesPostimage(result, postimage) {
35
+ return (result.outcome === "read" &&
36
+ result.bytes.byteLength === postimage.size &&
37
+ sha256(result.bytes) === postimage.digest &&
38
+ (process.platform === "win32" ||
39
+ (result.mode & 0o777) === postimage.mode));
40
+ }
41
+ async function verifyTemporaryForPublication(temporaryPath, postimage, expectedIdentity, displayPath) {
42
+ const stableTemporary = await readBoundedRegularFile(temporaryPath, postimage.size);
43
+ if (exactReadMatchesPostimage(stableTemporary, postimage) &&
44
+ sameIdentity(stableTemporary.identity, expectedIdentity)) {
45
+ return;
46
+ }
47
+ throw new AbsentFilePublicationError("TEMPORARY_REPLACED", `Temporary path was replaced or modified concurrently: ${displayPath}.`);
48
+ }
49
+ async function verifyPublishedFile(destinationPath, postimage, expectedIdentity, displayPath) {
50
+ const publishedFile = await readBoundedRegularFile(destinationPath, postimage.size);
51
+ if (exactReadMatchesPostimage(publishedFile, postimage) &&
52
+ sameIdentity(publishedFile.identity, expectedIdentity)) {
53
+ return;
54
+ }
55
+ throw new AbsentFilePublicationError("VERIFICATION_FAILED", `Published file failed identity or content verification: ${displayPath}.`);
56
+ }
57
+ function assertValidPostimage(postimage) {
58
+ if (!Number.isSafeInteger(postimage.size) ||
59
+ postimage.size < 0 ||
60
+ postimage.bytes.byteLength !== postimage.size ||
61
+ sha256(postimage.bytes) !== postimage.digest ||
62
+ !Number.isSafeInteger(postimage.mode) ||
63
+ postimage.mode < 0 ||
64
+ postimage.mode > 0o777) {
65
+ throw new AbsentFilePublicationError("INVALID_POSTIMAGE", "Exact file postimage metadata does not match its bytes.");
66
+ }
67
+ }
68
+ function snapshotPostimage(postimage) {
69
+ const snapshot = {
70
+ bytes: Buffer.from(postimage.bytes),
71
+ digest: postimage.digest,
72
+ mode: postimage.mode,
73
+ size: postimage.size
74
+ };
75
+ assertValidPostimage(snapshot);
76
+ return snapshot;
77
+ }
78
+ function assertValidPublicationPaths(temporaryPath, destinationPath, displayPath) {
79
+ const resolvedTemporary = resolve(temporaryPath);
80
+ const resolvedDestination = resolve(destinationPath);
81
+ if (portableRepositoryPathIdentity(resolvedTemporary) ===
82
+ portableRepositoryPathIdentity(resolvedDestination) ||
83
+ dirname(resolvedTemporary) !== dirname(resolvedDestination)) {
84
+ throw new AbsentFilePublicationError("PUBLICATION_INVALID", `Publication paths are not distinct siblings: ${displayPath}.`);
85
+ }
86
+ }
87
+ // Covers the one-shot ctime change when a concurrent publisher unlinks its hard-link temporary.
88
+ const maximumUnstableReadRetries = 2;
89
+ async function classifyExactFilePostimageWith(readFile, destinationPath, postimage) {
90
+ for (let attempt = 0;; attempt += 1) {
91
+ try {
92
+ const result = await readFile(destinationPath, postimage.size);
93
+ if (result.outcome === "changed" &&
94
+ attempt < maximumUnstableReadRetries) {
95
+ continue;
96
+ }
97
+ if (result.outcome !== "read") {
98
+ return "conflict";
99
+ }
100
+ const modeMatches = process.platform === "win32" ||
101
+ (result.mode & 0o777) === postimage.mode;
102
+ return result.bytes.byteLength === postimage.size &&
103
+ sha256(result.bytes) === postimage.digest &&
104
+ modeMatches
105
+ ? "exact"
106
+ : "conflict";
107
+ }
108
+ catch (error) {
109
+ if (isMissing(error)) {
110
+ return "absent";
111
+ }
112
+ throw error;
113
+ }
114
+ }
115
+ }
116
+ export async function classifyExactFilePostimage(destinationPath, postimage) {
117
+ return classifyExactFilePostimageWith(readBoundedRegularFile, destinationPath, snapshotPostimage(postimage));
118
+ }
119
+ export async function assertTemporaryPathsAbsent(entries) {
120
+ for (const entry of entries) {
121
+ try {
122
+ await lstat(entry.temporaryPath);
123
+ }
124
+ catch (error) {
125
+ if (isMissing(error)) {
126
+ continue;
127
+ }
128
+ throw error;
129
+ }
130
+ throw new AbsentFilePublicationError("TEMPORARY_EXISTS", `Temporary path already exists: ${entry.displayPath}.`);
131
+ }
132
+ }
133
+ async function syncPublicationParent(context) {
134
+ const durability = await context.operations.syncDirectory(context.parent);
135
+ if (durability === "unsupported" &&
136
+ !context.allowUnsupportedDirectoryDurability) {
137
+ throw new AbsentFilePublicationError("PUBLICATION_UNSUPPORTED", `Directory durability is unsupported: ${context.displayPath}.`);
138
+ }
139
+ }
140
+ async function createPublicationTemporary(context, state) {
141
+ const handle = await context.operations
142
+ .open(context.temporaryPath, "wx", 0o600)
143
+ .catch((error) => {
144
+ if (errorCode(error) === "EEXIST") {
145
+ throw new AbsentFilePublicationError("TEMPORARY_EXISTS", `Temporary path already exists: ${context.displayPath}.`, { cause: error });
146
+ }
147
+ throw error;
148
+ });
149
+ try {
150
+ state.temporaryIdentity = await captureFileHandleIdentity(handle);
151
+ await handle.writeFile(context.postimage.bytes);
152
+ await context.faultInjector?.({ phase: "after-temporary-written" });
153
+ await handle.chmod(context.postimage.mode);
154
+ await handle.sync();
155
+ }
156
+ finally {
157
+ await handle.close();
158
+ }
159
+ }
160
+ async function linkPublicationDestination(context) {
161
+ try {
162
+ await context.operations.link(context.temporaryPath, context.destinationPath);
163
+ return false;
164
+ }
165
+ catch (error) {
166
+ if (errorCode(error) === "EEXIST") {
167
+ const state = await classifyExactFilePostimageWith(context.operations.readBoundedRegularFile, context.destinationPath, context.postimage);
168
+ if (state === "exact") {
169
+ return true;
170
+ }
171
+ throw new AbsentFilePublicationError("CONFLICT", `Destination changed concurrently: ${context.displayPath}.`, { cause: error });
172
+ }
173
+ if (isUnsupportedLink(error)) {
174
+ throw new AbsentFilePublicationError("PUBLICATION_UNSUPPORTED", `Atomic absent-only publication is unsupported: ${context.displayPath}.`, { cause: error });
175
+ }
176
+ throw error;
177
+ }
178
+ }
179
+ async function runPublicationPhase(context) {
180
+ const state = {
181
+ concurrentSatisfied: false,
182
+ published: false
183
+ };
184
+ try {
185
+ await createPublicationTemporary(context, state);
186
+ const temporaryIdentity = state.temporaryIdentity;
187
+ if (temporaryIdentity === undefined) {
188
+ throw new AbsentFilePublicationError("PUBLICATION_INCOMPLETE", `Publication temporary identity was not captured: ${context.displayPath}.`);
189
+ }
190
+ await context.faultInjector?.({ phase: "after-temporary-synced" });
191
+ await verifyTemporaryForPublication(context.temporaryPath, context.postimage, temporaryIdentity, context.displayPath);
192
+ state.concurrentSatisfied = await linkPublicationDestination(context);
193
+ if (!state.concurrentSatisfied) {
194
+ state.published = true;
195
+ await context.faultInjector?.({ phase: "after-hard-link" });
196
+ await verifyPublishedFile(context.destinationPath, context.postimage, temporaryIdentity, context.displayPath);
197
+ await syncPublicationParent(context);
198
+ }
199
+ }
200
+ catch (error) {
201
+ state.error = error;
202
+ }
203
+ return state;
204
+ }
205
+ async function cleanupPublicationTemporary(context, state) {
206
+ try {
207
+ const ownership = state.temporaryIdentity === undefined
208
+ ? "missing"
209
+ : await pathMatchesRegularFileIdentity(context.temporaryPath, state.temporaryIdentity);
210
+ if (ownership === "match") {
211
+ await context.operations.rm(context.temporaryPath);
212
+ await syncPublicationParent(context);
213
+ }
214
+ else if (ownership === "different") {
215
+ throw new AbsentFilePublicationError("TEMPORARY_REPLACED", `Temporary path was replaced concurrently: ${context.displayPath}.`, state.error === undefined ? undefined : { cause: state.error });
216
+ }
217
+ }
218
+ catch (cleanupError) {
219
+ if (cleanupError instanceof AbsentFilePublicationError &&
220
+ cleanupError.code === "TEMPORARY_REPLACED") {
221
+ throw cleanupError;
222
+ }
223
+ throw new AbsentFilePublicationError("CLEANUP_FAILED", `Publication temporary cleanup failed: ${context.displayPath}.`, {
224
+ cause: state.error ?? cleanupError,
225
+ cleanupError
226
+ });
227
+ }
228
+ }
229
+ async function publicationOutcome(context, state) {
230
+ if (state.error !== undefined) {
231
+ if (!(state.error instanceof Error)) {
232
+ throw new AbsentFilePublicationError("INVALID_ERROR", `Publication failed with an invalid error value: ${context.displayPath}.`);
233
+ }
234
+ throw state.error;
235
+ }
236
+ if (state.concurrentSatisfied) {
237
+ if ((await classifyExactFilePostimageWith(context.operations.readBoundedRegularFile, context.destinationPath, context.postimage)) !== "exact") {
238
+ throw new AbsentFilePublicationError("CONFLICT", `Destination changed concurrently: ${context.displayPath}.`);
239
+ }
240
+ return "already-satisfied";
241
+ }
242
+ if (!state.published || state.temporaryIdentity === undefined) {
243
+ throw new AbsentFilePublicationError("PUBLICATION_INCOMPLETE", `Publication did not reach a terminal state: ${context.displayPath}.`);
244
+ }
245
+ await verifyPublishedFile(context.destinationPath, context.postimage, state.temporaryIdentity, context.displayPath);
246
+ return "published";
247
+ }
248
+ export async function publishAbsentFile(options) {
249
+ const postimage = snapshotPostimage(options.postimage);
250
+ const context = {
251
+ allowUnsupportedDirectoryDurability: options.allowUnsupportedDirectoryDurability === true,
252
+ destinationPath: options.destinationPath,
253
+ displayPath: options.displayPath,
254
+ faultInjector: options.faultInjector,
255
+ operations: { ...nodeOperations, ...options.operations },
256
+ parent: dirname(resolve(options.destinationPath)),
257
+ postimage,
258
+ temporaryPath: options.temporaryPath
259
+ };
260
+ assertValidPublicationPaths(context.temporaryPath, context.destinationPath, context.displayPath);
261
+ const initial = await classifyExactFilePostimageWith(context.operations.readBoundedRegularFile, context.destinationPath, context.postimage);
262
+ if (initial === "exact") {
263
+ return "already-satisfied";
264
+ }
265
+ if (initial === "conflict") {
266
+ throw new AbsentFilePublicationError("CONFLICT", `Destination changed concurrently: ${context.displayPath}.`);
267
+ }
268
+ const state = await runPublicationPhase(context);
269
+ await cleanupPublicationTemporary(context, state);
270
+ return publicationOutcome(context, state);
271
+ }
272
+ //# 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,20 @@
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 mode: number;
8
+ } | {
9
+ readonly outcome: "changed";
10
+ } | {
11
+ readonly outcome: "invalid";
12
+ };
13
+ export type BoundedRegularFileReadFaultInjector = (point: {
14
+ readonly phase: "before-stability-check";
15
+ readonly path: string;
16
+ }) => Promise<void> | void;
17
+ export declare function readBoundedRegularFile(path: string, maximumBytes: number, faultInjector?: BoundedRegularFileReadFaultInjector): Promise<BoundedRegularFileRead>;
18
+ export declare function captureFileHandleIdentity(handle: FileHandle): Promise<PortablePathIdentity>;
19
+ export declare function pathMatchesRegularFileIdentity(path: string, expected: PortablePathIdentity): Promise<PathIdentityMatch>;
20
+ //# 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,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;AAiF3B,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,mCAAmC,GAClD,OAAO,CAAC,sBAAsB,CAAC,CAkDjC;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"}