@bjornpagen/bumbledb 0.20.2 → 1.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 (192) hide show
  1. package/COOKBOOK.md +283 -1611
  2. package/README.md +156 -118
  3. package/dist/capacity.d.ts +16 -12
  4. package/dist/capacity.d.ts.map +1 -1
  5. package/dist/capacity.js +16 -48
  6. package/dist/capacity.js.map +1 -1
  7. package/dist/changes.d.ts +54 -0
  8. package/dist/changes.d.ts.map +1 -0
  9. package/dist/changes.js +245 -0
  10. package/dist/changes.js.map +1 -0
  11. package/dist/close.d.ts +24 -0
  12. package/dist/close.d.ts.map +1 -0
  13. package/dist/close.js +34 -0
  14. package/dist/close.js.map +1 -0
  15. package/dist/closed.d.ts +1 -3
  16. package/dist/closed.d.ts.map +1 -1
  17. package/dist/closed.js +24 -12
  18. package/dist/closed.js.map +1 -1
  19. package/dist/codec.d.ts +56 -0
  20. package/dist/codec.d.ts.map +1 -0
  21. package/dist/codec.js +289 -0
  22. package/dist/codec.js.map +1 -0
  23. package/dist/compile.d.ts +68 -0
  24. package/dist/compile.d.ts.map +1 -0
  25. package/dist/compile.js +75 -0
  26. package/dist/compile.js.map +1 -0
  27. package/dist/db-native.d.ts +170 -0
  28. package/dist/db-native.d.ts.map +1 -0
  29. package/dist/db-native.js +5 -0
  30. package/dist/db-native.js.map +1 -0
  31. package/dist/db.d.ts +101 -233
  32. package/dist/db.d.ts.map +1 -1
  33. package/dist/db.js +232 -1084
  34. package/dist/db.js.map +1 -1
  35. package/dist/errors.d.ts +57 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +32 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/face.d.ts.map +1 -1
  40. package/dist/face.js +2 -2
  41. package/dist/face.js.map +1 -1
  42. package/dist/fields.d.ts +65 -24
  43. package/dist/fields.d.ts.map +1 -1
  44. package/dist/fields.js +94 -24
  45. package/dist/fields.js.map +1 -1
  46. package/dist/index.d.ts +37 -32
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +17 -21
  49. package/dist/index.js.map +1 -1
  50. package/dist/internal/log.d.ts +24 -0
  51. package/dist/internal/log.d.ts.map +1 -0
  52. package/dist/internal/log.js +10 -0
  53. package/dist/internal/log.js.map +1 -0
  54. package/dist/law.d.ts +8 -13
  55. package/dist/law.d.ts.map +1 -1
  56. package/dist/law.js +6 -59
  57. package/dist/law.js.map +1 -1
  58. package/dist/lower.d.ts +0 -13
  59. package/dist/lower.d.ts.map +1 -1
  60. package/dist/lower.js +9 -17
  61. package/dist/lower.js.map +1 -1
  62. package/dist/migration.d.ts +33 -0
  63. package/dist/migration.d.ts.map +1 -0
  64. package/dist/migration.js +48 -0
  65. package/dist/migration.js.map +1 -0
  66. package/dist/native.d.ts +256 -301
  67. package/dist/native.d.ts.map +1 -1
  68. package/dist/native.js +65 -108
  69. package/dist/native.js.map +1 -1
  70. package/dist/query/atom.d.ts +24 -13
  71. package/dist/query/atom.d.ts.map +1 -1
  72. package/dist/query/atom.js +7 -3
  73. package/dist/query/atom.js.map +1 -1
  74. package/dist/query/compute.d.ts +68 -0
  75. package/dist/query/compute.d.ts.map +1 -0
  76. package/dist/query/compute.js +141 -0
  77. package/dist/query/compute.js.map +1 -0
  78. package/dist/query/find.d.ts +15 -8
  79. package/dist/query/find.d.ts.map +1 -1
  80. package/dist/query/find.js +6 -2
  81. package/dist/query/find.js.map +1 -1
  82. package/dist/query/lower.d.ts +23 -2
  83. package/dist/query/lower.d.ts.map +1 -1
  84. package/dist/query/lower.js +433 -80
  85. package/dist/query/lower.js.map +1 -1
  86. package/dist/query/parse-ir.d.ts.map +1 -1
  87. package/dist/query/parse-ir.js +17 -8
  88. package/dist/query/parse-ir.js.map +1 -1
  89. package/dist/query/run.d.ts +12 -2
  90. package/dist/query/run.d.ts.map +1 -1
  91. package/dist/query/run.js +26 -9
  92. package/dist/query/run.js.map +1 -1
  93. package/dist/query/scope.d.ts +47 -3
  94. package/dist/query/scope.d.ts.map +1 -1
  95. package/dist/query/scope.js +83 -19
  96. package/dist/query/scope.js.map +1 -1
  97. package/dist/relation.d.ts +3 -8
  98. package/dist/relation.d.ts.map +1 -1
  99. package/dist/relation.js +16 -10
  100. package/dist/relation.js.map +1 -1
  101. package/dist/result.d.ts +47 -0
  102. package/dist/result.d.ts.map +1 -0
  103. package/dist/result.js +50 -0
  104. package/dist/result.js.map +1 -0
  105. package/dist/rows.d.ts +69 -0
  106. package/dist/rows.d.ts.map +1 -0
  107. package/dist/rows.js +328 -0
  108. package/dist/rows.js.map +1 -0
  109. package/dist/runtime-codes.d.ts +2 -0
  110. package/dist/runtime-codes.d.ts.map +1 -0
  111. package/dist/runtime-codes.js +19 -0
  112. package/dist/runtime-codes.js.map +1 -0
  113. package/dist/runtime-errors.d.ts +106 -0
  114. package/dist/runtime-errors.d.ts.map +1 -0
  115. package/dist/runtime-errors.js +62 -0
  116. package/dist/runtime-errors.js.map +1 -0
  117. package/dist/runtime-native.d.ts +171 -0
  118. package/dist/runtime-native.d.ts.map +1 -0
  119. package/dist/runtime-native.js +5 -0
  120. package/dist/runtime-native.js.map +1 -0
  121. package/dist/runtime.d.ts +73 -0
  122. package/dist/runtime.d.ts.map +1 -0
  123. package/dist/runtime.js +293 -0
  124. package/dist/runtime.js.map +1 -0
  125. package/dist/scalar.d.ts +165 -0
  126. package/dist/scalar.d.ts.map +1 -0
  127. package/dist/scalar.js +344 -0
  128. package/dist/scalar.js.map +1 -0
  129. package/dist/schema.d.ts +1 -1
  130. package/dist/schema.d.ts.map +1 -1
  131. package/dist/schema.js +34 -37
  132. package/dist/schema.js.map +1 -1
  133. package/dist/shape.d.ts +28 -0
  134. package/dist/shape.d.ts.map +1 -0
  135. package/dist/shape.js +2 -0
  136. package/dist/shape.js.map +1 -0
  137. package/dist/spec.d.ts +27 -3
  138. package/dist/spec.d.ts.map +1 -1
  139. package/dist/spec.js +22 -1
  140. package/dist/spec.js.map +1 -1
  141. package/dist/statements.d.ts +16 -3
  142. package/dist/statements.d.ts.map +1 -1
  143. package/dist/statements.js +54 -28
  144. package/dist/statements.js.map +1 -1
  145. package/dist/uuid.d.ts +23 -0
  146. package/dist/uuid.d.ts.map +1 -0
  147. package/dist/uuid.js +54 -0
  148. package/dist/uuid.js.map +1 -0
  149. package/pack-provenance.json +7 -0
  150. package/package.json +12 -16
  151. package/src/capacity.ts +34 -54
  152. package/src/changes.ts +361 -0
  153. package/src/close.ts +53 -0
  154. package/src/closed.ts +25 -19
  155. package/src/codec.ts +379 -0
  156. package/src/compile.ts +149 -0
  157. package/src/db-native.ts +247 -0
  158. package/src/db.ts +461 -1632
  159. package/src/errors.ts +50 -0
  160. package/src/face.ts +2 -2
  161. package/src/fields.ts +182 -55
  162. package/src/index.ts +62 -126
  163. package/src/internal/log.ts +51 -0
  164. package/src/law.ts +13 -28
  165. package/src/lower.ts +9 -4
  166. package/src/migration.ts +69 -0
  167. package/src/native.ts +326 -487
  168. package/src/query/atom.ts +61 -25
  169. package/src/query/compute.ts +237 -0
  170. package/src/query/find.ts +31 -12
  171. package/src/query/lower.ts +531 -143
  172. package/src/query/parse-ir.ts +18 -13
  173. package/src/query/run.ts +32 -16
  174. package/src/query/scope.ts +140 -8
  175. package/src/relation.ts +17 -21
  176. package/src/result.ts +130 -0
  177. package/src/rows.ts +404 -0
  178. package/src/runtime-codes.ts +18 -0
  179. package/src/runtime-errors.ts +69 -0
  180. package/src/runtime-native.ts +242 -0
  181. package/src/runtime.ts +440 -0
  182. package/src/scalar.ts +560 -0
  183. package/src/schema.ts +35 -37
  184. package/src/shape.ts +31 -0
  185. package/src/spec.ts +33 -3
  186. package/src/statements.ts +75 -68
  187. package/src/uuid.ts +69 -0
  188. package/dist/marshal.d.ts +0 -44
  189. package/dist/marshal.d.ts.map +0 -1
  190. package/dist/marshal.js +0 -165
  191. package/dist/marshal.js.map +0 -1
  192. package/src/marshal.ts +0 -200
@@ -0,0 +1,171 @@
1
+ /** Exact-version internal bridge, shared by core and log. Not a public API. */
2
+ import type { DbHandle, LogChainKind, LogCommandKind, LogCommandMetadata, LogCommandRef, LogCondition, LogDecisionStamp, LogIdentity, LogLimits, LogOutcomeWire, LogSchemaHandle, LogStateStamp, Violation } from "./native.js";
3
+ import { native } from "./native.js";
4
+ import type { SchemaSpec } from "./spec.js";
5
+ export interface RuntimeHandle {
6
+ readonly __runtime: unique symbol;
7
+ }
8
+ export interface OperationHandle {
9
+ readonly __operation: unique symbol;
10
+ }
11
+ export interface DirectoryHandle {
12
+ readonly __directory: unique symbol;
13
+ }
14
+ /** Stamped `NativeKind::RepositoryLock` mint — not a directory-owner twin. */
15
+ export interface RepositoryLockHandle {
16
+ readonly __repositoryLock: unique symbol;
17
+ }
18
+ /** F0 C7 kind roster for worker-table resources. */
19
+ export type NativeKind = "snapshot" | "result" | "cursor" | "draft" | "changes" | "repository-lock";
20
+ /** Worker-routed capability header (C7). Never holds payload bytes. */
21
+ export interface ResourceHeader {
22
+ readonly runtime: bigint;
23
+ readonly worker: number;
24
+ readonly kind: NativeKind;
25
+ readonly id: bigint;
26
+ readonly generation: bigint;
27
+ }
28
+ /**
29
+ * Checked capability into the native registry (C7). JS tokens validate
30
+ * these five fields; native re-judges kind/generation/owner on every verb.
31
+ */
32
+ export interface Capability {
33
+ readonly runtime: bigint;
34
+ readonly worker: number;
35
+ readonly kind: NativeKind;
36
+ readonly id: bigint;
37
+ readonly generation: bigint;
38
+ }
39
+ /** Coalesced close obligation — already-owned drain, not rejectable work. */
40
+ export interface CloseDrain {
41
+ readonly header: ResourceHeader;
42
+ }
43
+ export type ManagedDbOutcome = {
44
+ readonly tag: "accepted";
45
+ readonly db: DbHandle;
46
+ } | {
47
+ readonly tag: "rejected";
48
+ readonly violations: readonly Violation[];
49
+ } | {
50
+ readonly tag: "refused";
51
+ readonly kind: "schemaError" | "newtypeMismatch" | "fingerprintMismatch" | "destinationExists";
52
+ readonly message: string;
53
+ };
54
+ export type LogTakeWire = {
55
+ readonly ok: false;
56
+ readonly kind: LogCommandKind | LogChainKind;
57
+ readonly message: string;
58
+ } | {
59
+ /** Command sealed: envelope bytes + reference. */
60
+ readonly ok: true;
61
+ readonly bytes: Uint8Array;
62
+ readonly ref: LogCommandRef;
63
+ } | {
64
+ /** Command parsed. */
65
+ readonly ok: true;
66
+ readonly identity: LogIdentity;
67
+ readonly receiptEpoch: bigint;
68
+ readonly requestId: string;
69
+ readonly condition: LogCondition;
70
+ readonly changes: Uint8Array;
71
+ readonly result: Uint8Array;
72
+ readonly ref: LogCommandRef;
73
+ } | {
74
+ /** Decision framed. */
75
+ readonly ok: true;
76
+ readonly bytes: Uint8Array;
77
+ readonly digest: Uint8Array;
78
+ } | {
79
+ /** Decision decoded (and chain-verified when a parent was given). */
80
+ readonly ok: true;
81
+ readonly identity: LogIdentity;
82
+ readonly seq: bigint;
83
+ readonly parent: LogDecisionStamp;
84
+ readonly beforeState: LogStateStamp;
85
+ readonly afterState: LogStateStamp;
86
+ readonly commandBytes: Uint8Array;
87
+ readonly command: LogCommandRef;
88
+ readonly outcome: LogOutcomeWire;
89
+ readonly digest: Uint8Array;
90
+ };
91
+ export interface PolicyWire {
92
+ readonly inputBytes: bigint;
93
+ readonly workingBytes: bigint;
94
+ readonly scratchBytes: bigint;
95
+ readonly resultBytes: bigint;
96
+ readonly rows: bigint;
97
+ readonly workUnits: bigint;
98
+ readonly timeoutMs: number;
99
+ }
100
+ export interface OptionsWire {
101
+ readonly workers: number;
102
+ readonly queueCapacity: number;
103
+ readonly cleanupCapacity: number;
104
+ readonly ownerCapacity: number;
105
+ readonly nativeHandleCapacity: number;
106
+ readonly inputBytes: bigint;
107
+ readonly workingBytes: bigint;
108
+ readonly scratchBytes: bigint;
109
+ readonly resultBytes: bigint;
110
+ readonly chunkBytes: bigint;
111
+ readonly cleanupTimeoutMs: number;
112
+ }
113
+ export interface InspectionWire {
114
+ readonly phase: "open" | "closing" | "closed";
115
+ readonly queued: bigint;
116
+ readonly active: bigint;
117
+ readonly retained: bigint;
118
+ readonly owners: bigint;
119
+ readonly databases: bigint;
120
+ readonly natives: bigint;
121
+ readonly inputBytes: bigint;
122
+ readonly workingBytes: bigint;
123
+ readonly scratchBytes: bigint;
124
+ readonly resultBytes: bigint;
125
+ }
126
+ export type CloseWire = {
127
+ readonly kind: "closed";
128
+ } | {
129
+ readonly kind: "incomplete";
130
+ readonly outstanding: InspectionWire;
131
+ } | {
132
+ readonly kind: "failed";
133
+ };
134
+ interface RuntimeNative {
135
+ runtimeErrorCodes(): readonly string[];
136
+ runtimeOpen(options: OptionsWire): RuntimeHandle;
137
+ runtimeReady(runtime: RuntimeHandle, policy: PolicyWire, callback: () => void): OperationHandle;
138
+ runtimeHash(runtime: RuntimeHandle, policy: PolicyWire, bytes: Uint8Array, callback: () => void): OperationHandle;
139
+ runtimeTake(operation: OperationHandle): Uint8Array | null;
140
+ runtimeCancel(operation: OperationHandle, callback: (report: CloseWire) => void): void;
141
+ runtimeClose(runtime: RuntimeHandle, callback: (report: CloseWire) => void): void;
142
+ runtimeInspect(runtime: RuntimeHandle): InspectionWire;
143
+ /**
144
+ * L12 request (D12/D25): one-shot arm. Next `dispatch_payload_message`
145
+ * must cancel after `work()` returns and the post-work `checkpoint()`
146
+ * (`runtime.rs` ~860–862), before `complete_operation` writes
147
+ * `operation.output`. A local `QueuedOutput` is not registration.
148
+ * Predelivery: no JS take; cursor stays on row1 so retry does not skip.
149
+ */
150
+ runtimeArmPublicationCancel(runtime: RuntimeHandle): void;
151
+ runtimeDirectoryAcquire(runtime: RuntimeHandle, policy: PolicyWire, path: string, callback: () => void): OperationHandle;
152
+ runtimeDirectoryTake(operation: OperationHandle): DirectoryHandle;
153
+ runtimeDirectoryBegin(owner: DirectoryHandle, policy: PolicyWire): OperationHandle;
154
+ runtimeDirectoryCheck(operation: OperationHandle): void;
155
+ runtimeDirectoryEnd(operation: OperationHandle): void;
156
+ runtimeDirectoryClose(owner: DirectoryHandle, remove: boolean, callback: (report: CloseWire) => void): void;
157
+ runtimeDirectoryDbOpen(owner: DirectoryHandle, policy: PolicyWire, childName: string, spec: SchemaSpec, create: boolean, callback: () => void): OperationHandle;
158
+ runtimeDbTake(operation: OperationHandle): ManagedDbOutcome;
159
+ runtimeManagedDbClose(db: DbHandle, callback: (report: CloseWire) => void): void;
160
+ runtimeLogCommandSeal(runtime: RuntimeHandle, schema: LogSchemaHandle, policy: PolicyWire, metadata: LogCommandMetadata, changes: Uint8Array, result: Uint8Array | null, limits: LogLimits, callback: () => void): OperationHandle;
161
+ runtimeLogCommandParse(runtime: RuntimeHandle, schema: LogSchemaHandle, policy: PolicyWire, bytes: Uint8Array, limits: LogLimits, callback: () => void): OperationHandle;
162
+ runtimeLogDecisionDecode(runtime: RuntimeHandle, policy: PolicyWire, bytes: Uint8Array, parent: LogDecisionStamp | null, limits: LogLimits, callback: () => void): OperationHandle;
163
+ runtimeLogTake(operation: OperationHandle): LogTakeWire;
164
+ /** L14 mint: `Runtime::mint_repository_lock` stamps `NativeKind::RepositoryLock` at take. */
165
+ logRepositoryLockAcquire(runtime: RuntimeHandle, policy: PolicyWire, directory: string, callback: () => void): OperationHandle;
166
+ logRepositoryLockTake(operation: OperationHandle): RepositoryLockHandle;
167
+ logRepositoryLockRelease(owner: RepositoryLockHandle, callback: (report: CloseWire) => void): void;
168
+ }
169
+ export declare const runtimeNative: typeof native & RuntimeNative;
170
+ export {};
171
+ //# sourceMappingURL=runtime-native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-native.d.ts","sourceRoot":"","sources":["../src/runtime-native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Exact-version internal bridge, shared by core and log. Not a public API. */
2
+ import { native } from "#native.ts";
3
+ // The checked source/fresh-addon roster test pins this private declaration.
4
+ export const runtimeNative = native;
5
+ //# sourceMappingURL=runtime-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-native.js","sourceRoot":"","sources":["../src/runtime-native.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAiB/E,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AA+NnC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,aAAa,GAAG,MAAuC,CAAA"}
@@ -0,0 +1,73 @@
1
+ import { Context, Duration, Effect, Layer } from "effect";
2
+ import type { CloseReport, OutstandingWork } from "./runtime-errors.js";
3
+ import { DbError } from "./runtime-errors.js";
4
+ import type { OperationHandle, PolicyWire, RuntimeHandle } from "./runtime-native.js";
5
+ export interface ExecutionPolicy {
6
+ readonly inputBytes: bigint;
7
+ readonly workingBytes: bigint;
8
+ readonly scratchBytes: bigint;
9
+ readonly resultBytes: bigint;
10
+ readonly rows: bigint;
11
+ readonly workUnits: bigint;
12
+ readonly timeout: Duration.Input;
13
+ }
14
+ export interface NativeRuntimeOptions {
15
+ readonly workers: number;
16
+ readonly queueCapacity: number;
17
+ readonly cleanupCapacity: number;
18
+ readonly ownerCapacity: number;
19
+ readonly nativeHandleCapacity: number;
20
+ readonly inputBytes: bigint;
21
+ readonly workingBytes: bigint;
22
+ readonly scratchBytes: bigint;
23
+ readonly resultBytes: bigint;
24
+ readonly chunkBytes: bigint;
25
+ readonly cleanupTimeout: Duration.Input;
26
+ }
27
+ interface RuntimeService {
28
+ readonly close: () => Effect.Effect<CloseReport>;
29
+ readonly inspect: (work: ExecutionPolicy) => Effect.Effect<OutstandingWork, DbError>;
30
+ }
31
+ export declare function policyWire(work: ExecutionPolicy, operation: string): PolicyWire;
32
+ export declare function finalizeClose(operation: string, report: CloseReport): Effect.Effect<void>;
33
+ /** Independent caps intersect: a delivery request cannot enlarge `work.resultBytes`. */
34
+ export declare function deliveryResultBytes(requested: bigint, work: ExecutionPolicy): bigint;
35
+ /** Registration returns the native lease before any completion can run in JS.
36
+ * Interruption cancels and joins that lease, including a late successful result.
37
+ * No Promise or libuv job is created for ordinary native work.
38
+ */
39
+ export declare function nativeOperation<A>(operation: string, start: (callback: () => void) => OperationHandle, accept: (value: Uint8Array | null) => A): Effect.Effect<A, DbError>;
40
+ export declare function nativeOperationWith<A, Value>(operation: string, start: (callback: () => void) => OperationHandle, take: (operation: OperationHandle) => Value, accept: (value: Value) => A): Effect.Effect<A, DbError>;
41
+ declare const NativeRuntime_base: Context.ServiceClass<NativeRuntime, "@bjornpagen/bumbledb/NativeRuntime", RuntimeService>;
42
+ export declare class NativeRuntime extends NativeRuntime_base {
43
+ static layer(options: NativeRuntimeOptions): Layer.Layer<NativeRuntime, DbError>;
44
+ }
45
+ /** Private core/log integration: captures the already acquired shared service. */
46
+ export declare const runtimeHandle: () => Effect.Effect<RuntimeHandle, DbError, NativeRuntime>;
47
+ /**
48
+ * Opaque kernel fence (C8). Backed by L14 `log_repository_lock_*` and
49
+ * L12 `mint_repository_lock` (`NativeKind::RepositoryLock`). Native
50
+ * exclusion is the owner — there is no JS occupancy table. `release`
51
+ * is the one close: it joins `logRepositoryLockRelease` then clears
52
+ * `slot.owner` so the Scope finalizer is a no-op. Callers join host
53
+ * I/O first (`joinPendingIo.pipe(Effect.andThen(lock.release))`).
54
+ */
55
+ export interface RepositoryLock {
56
+ readonly directory: string;
57
+ readonly release: Effect.Effect<void>;
58
+ }
59
+ /**
60
+ * Internal log seam: stamped mint only. Cleanup is registered before
61
+ * the interruptible acquire (TS-003): `acquireRelease({ interruptible })`
62
+ * installs the finalizer only after acquire succeeds. Interrupt, defect,
63
+ * and acquire failure all run the same slot finalizer — empty slot is
64
+ * a no-op. No `runtimeDirectoryAcquire`, no core `Db`, no JS bookkeeping.
65
+ */
66
+ export declare const internalAcquireRepositoryLock: (operation: string, directory: string, work: ExecutionPolicy) => Effect.Effect<Readonly<{
67
+ directory: string;
68
+ release: Effect.Effect<void, never, never>;
69
+ }>, DbError, NativeRuntime | import("effect/Scope").Scope>;
70
+ /** Internal first executor consumer; not a replacement row codec or public hash API. */
71
+ export declare const hashChunk: (input: Uint8Array<ArrayBufferLike>, work: ExecutionPolicy) => Effect.Effect<Uint8Array<ArrayBufferLike>, DbError, NativeRuntime>;
72
+ export {};
73
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,293 @@
1
+ import { Context, Duration, Effect, Exit, Layer } from "effect";
2
+ import { CloseFailure, DbError, dbError } from "#runtime-errors.ts";
3
+ import { runtimeNative } from "#runtime-native.ts";
4
+ const owners = new WeakMap();
5
+ function invalid(operation) {
6
+ return new DbError({ operation, reason: { _tag: "InvalidArgument" } });
7
+ }
8
+ function count(value, operation) {
9
+ if (!Number.isSafeInteger(value) || value <= 0 || value > 0xffffffff)
10
+ throw invalid(operation);
11
+ return value;
12
+ }
13
+ function bytes(value, operation) {
14
+ if (typeof value !== "bigint" || value < 0n || value > 0xffffffffffffffffn)
15
+ throw invalid(operation);
16
+ return value;
17
+ }
18
+ function millis(value, operation) {
19
+ const duration = Duration.toMillis(value);
20
+ if (!Number.isFinite(duration) || duration < 0 || duration > 0xffffffff)
21
+ throw invalid(operation);
22
+ return Math.ceil(duration);
23
+ }
24
+ export function policyWire(work, operation) {
25
+ return {
26
+ inputBytes: bytes(work.inputBytes, operation),
27
+ workingBytes: bytes(work.workingBytes, operation),
28
+ scratchBytes: bytes(work.scratchBytes, operation),
29
+ resultBytes: bytes(work.resultBytes, operation),
30
+ rows: bytes(work.rows, operation),
31
+ workUnits: bytes(work.workUnits, operation),
32
+ timeoutMs: millis(work.timeout, operation)
33
+ };
34
+ }
35
+ function options(value) {
36
+ const operation = "NativeRuntime.acquire";
37
+ return {
38
+ workers: count(value.workers, operation),
39
+ queueCapacity: count(value.queueCapacity, operation),
40
+ cleanupCapacity: count(value.cleanupCapacity, operation),
41
+ ownerCapacity: count(value.ownerCapacity, operation),
42
+ nativeHandleCapacity: count(value.nativeHandleCapacity, operation),
43
+ inputBytes: bytes(value.inputBytes, operation),
44
+ workingBytes: bytes(value.workingBytes, operation),
45
+ scratchBytes: bytes(value.scratchBytes, operation),
46
+ resultBytes: bytes(value.resultBytes, operation),
47
+ chunkBytes: bytes(value.chunkBytes, operation),
48
+ cleanupTimeoutMs: count(millis(value.cleanupTimeout, operation), operation)
49
+ };
50
+ }
51
+ function failure(operation, cause) {
52
+ return cause instanceof DbError ? cause : dbError(operation, cause);
53
+ }
54
+ function closeReport(operation, report) {
55
+ // A payload-less native "failed" drain (cleanup capacity exhausted, or
56
+ // owner teardown failed) is bounded diagnostic data per chapter 35's
57
+ // CloseReport policy: it decodes as the core `Internal` reason — the
58
+ // same mapping the log bridge applies, so one wire arm has one meaning.
59
+ // It is deliberately NOT `QueueFull`: a failed drain is never retryable
60
+ // submit backpressure.
61
+ return report.kind === "failed" ? { kind: "failed", error: dbError(operation, { _tag: "Internal" }) } : report;
62
+ }
63
+ function drain(operation, start) {
64
+ return Effect.callback((resume) => {
65
+ try {
66
+ start((report) => resume(Effect.succeed(closeReport(operation, report))));
67
+ }
68
+ catch (cause) {
69
+ resume(Effect.succeed({ kind: "failed", error: failure(operation, cause) }));
70
+ }
71
+ }).pipe(Effect.uninterruptible);
72
+ }
73
+ export function finalizeClose(operation, report) {
74
+ return report.kind === "closed" ? Effect.void : Effect.die(new CloseFailure({ operation, report }));
75
+ }
76
+ /**
77
+ * Effect.callback's returned finalizer is interruption cleanup only
78
+ * (`asyncFinalizer` runs solely on interrupt Cause). If that finalizer
79
+ * dies, the original interrupt is dropped. Join the native drain here and
80
+ * always succeed so the interrupt Cause is kept; attach CloseFailure via
81
+ * `onExit` so both appear in the final Cause.
82
+ */
83
+ function joinInterruptDrain(operation, start, stash) {
84
+ return drain(operation, start).pipe(Effect.tap((report) => {
85
+ stash.report = report;
86
+ return Effect.void;
87
+ }), Effect.asVoid);
88
+ }
89
+ function attachInterruptClose(operation, stash) {
90
+ return (effect) => effect.pipe(Effect.onExit((exit) => {
91
+ if (!Exit.hasInterrupts(exit)) {
92
+ return Effect.void;
93
+ }
94
+ const report = stash.report;
95
+ if (report === undefined || report.kind === "closed") {
96
+ return Effect.void;
97
+ }
98
+ return Effect.die(new CloseFailure({ operation, report }));
99
+ }));
100
+ }
101
+ function afterClose(operation, report, effect) {
102
+ if (report.kind === "closed") {
103
+ return effect;
104
+ }
105
+ return effect.pipe(Effect.onExit(() => Effect.die(new CloseFailure({ operation, report }))));
106
+ }
107
+ /** Independent caps intersect: a delivery request cannot enlarge `work.resultBytes`. */
108
+ export function deliveryResultBytes(requested, work) {
109
+ if (typeof requested !== "bigint" || requested < 0n) {
110
+ throw invalid("deliveryResultBytes");
111
+ }
112
+ return requested < work.resultBytes ? requested : work.resultBytes;
113
+ }
114
+ function close(handle) {
115
+ return drain("NativeRuntime.close", (callback) => runtimeNative.runtimeClose(handle, callback));
116
+ }
117
+ /** Kick `runtimeCancel` without joining. Used when the completion
118
+ * callback arrives after abort: JS must not `take`; L12 drain reclaims
119
+ * queued Page/Rows. A second call is native-idempotent (Committed
120
+ * mutations stay; only unpublished delivery is dropped).
121
+ */
122
+ function startCancelDrain(operation, lease, stash) {
123
+ try {
124
+ runtimeNative.runtimeCancel(lease, (report) => {
125
+ stash.report = closeReport(operation, report);
126
+ });
127
+ }
128
+ catch (cause) {
129
+ stash.report = { kind: "failed", error: failure(operation, cause) };
130
+ }
131
+ }
132
+ /** Registration returns the native lease before any completion can run in JS.
133
+ * Interruption cancels and joins that lease, including a late successful result.
134
+ * No Promise or libuv job is created for ordinary native work.
135
+ */
136
+ export function nativeOperation(operation, start, accept) {
137
+ return nativeOperationWith(operation, start, runtimeNative.runtimeTake, accept);
138
+ }
139
+ export function nativeOperationWith(operation, start, take, accept) {
140
+ const stash = {};
141
+ const cancelOp = `${operation}.cancel`;
142
+ return attachInterruptClose(cancelOp, stash)(Effect.callback((resume, signal) => {
143
+ let lease;
144
+ try {
145
+ lease = start(() => {
146
+ if (signal.aborted) {
147
+ startCancelDrain(cancelOp, lease, stash);
148
+ return;
149
+ }
150
+ try {
151
+ resume(Effect.succeed(accept(take(lease))));
152
+ }
153
+ catch (cause) {
154
+ resume(Effect.fail(failure(operation, cause)));
155
+ }
156
+ });
157
+ }
158
+ catch (cause) {
159
+ resume(Effect.fail(failure(operation, cause)));
160
+ return;
161
+ }
162
+ return joinInterruptDrain(cancelOp, (callback) => runtimeNative.runtimeCancel(lease, callback), stash);
163
+ }));
164
+ }
165
+ const acquire = Effect.fn("NativeRuntime.acquire")(function* (configuration) {
166
+ return yield* Effect.acquireRelease(Effect.suspend(() => {
167
+ const stash = {};
168
+ return attachInterruptClose("NativeRuntime.acquire.cancel", stash)(Effect.callback((resume, signal) => {
169
+ let handle;
170
+ try {
171
+ const wire = options(configuration);
172
+ handle = runtimeNative.runtimeOpen(wire);
173
+ const owner = handle;
174
+ const lease = runtimeNative.runtimeReady(owner, {
175
+ inputBytes: 0n,
176
+ workingBytes: 0n,
177
+ scratchBytes: 0n,
178
+ resultBytes: 0n,
179
+ rows: 0n,
180
+ workUnits: 1n,
181
+ timeoutMs: wire.cleanupTimeoutMs
182
+ }, () => {
183
+ if (signal.aborted) {
184
+ try {
185
+ runtimeNative.runtimeClose(owner, (report) => {
186
+ stash.report = closeReport("NativeRuntime.acquire.cancel", report);
187
+ });
188
+ }
189
+ catch (cause) {
190
+ stash.report = { kind: "failed", error: failure("NativeRuntime.acquire.cancel", cause) };
191
+ }
192
+ return;
193
+ }
194
+ try {
195
+ runtimeNative.runtimeTake(lease);
196
+ const service = {
197
+ close: () => close(owner),
198
+ inspect: Effect.fn("NativeRuntime.inspect")(function* (work) {
199
+ yield* nativeOperation("NativeRuntime.inspect", (callback) => runtimeNative.runtimeReady(owner, policyWire(work, "NativeRuntime.inspect"), callback), () => undefined);
200
+ return runtimeNative.runtimeInspect(owner);
201
+ })
202
+ };
203
+ owners.set(service, owner);
204
+ resume(Effect.succeed(service));
205
+ }
206
+ catch (cause) {
207
+ const error = failure("NativeRuntime.acquire", cause);
208
+ resume(close(owner).pipe(Effect.flatMap((report) => afterClose("NativeRuntime.acquire", report, Effect.fail(error)))));
209
+ }
210
+ });
211
+ }
212
+ catch (cause) {
213
+ const error = failure("NativeRuntime.acquire", cause);
214
+ resume(handle === undefined
215
+ ? Effect.fail(error)
216
+ : close(handle).pipe(Effect.flatMap((report) => afterClose("NativeRuntime.acquire", report, Effect.fail(error)))));
217
+ }
218
+ return handle === undefined
219
+ ? Effect.void
220
+ : joinInterruptDrain("NativeRuntime.acquire.cancel", (callback) => runtimeNative.runtimeClose(handle, callback), stash);
221
+ }));
222
+ }), (service) => service.close().pipe(Effect.flatMap((report) => finalizeClose("NativeRuntime.release", report))), { interruptible: true });
223
+ });
224
+ export class NativeRuntime extends Context.Service()("@bjornpagen/bumbledb/NativeRuntime") {
225
+ static layer(options) {
226
+ return Layer.effect(NativeRuntime, acquire(options));
227
+ }
228
+ }
229
+ /** Private core/log integration: captures the already acquired shared service. */
230
+ export const runtimeHandle = Effect.fn("NativeRuntime.handle")(function* () {
231
+ const runtime = yield* NativeRuntime;
232
+ const handle = owners.get(runtime);
233
+ if (handle === undefined)
234
+ return yield* Effect.fail(invalid("NativeRuntime.handle"));
235
+ return handle;
236
+ });
237
+ function joinLockRelease(operation, owner) {
238
+ return drain(operation, (callback) => runtimeNative.logRepositoryLockRelease(owner, callback)).pipe(Effect.flatMap((report) => finalizeClose(operation, report)));
239
+ }
240
+ /**
241
+ * Internal log seam: stamped mint only. Cleanup is registered before
242
+ * the interruptible acquire (TS-003): `acquireRelease({ interruptible })`
243
+ * installs the finalizer only after acquire succeeds. Interrupt, defect,
244
+ * and acquire failure all run the same slot finalizer — empty slot is
245
+ * a no-op. No `runtimeDirectoryAcquire`, no core `Db`, no JS bookkeeping.
246
+ */
247
+ export const internalAcquireRepositoryLock = Effect.fn("internalAcquireRepositoryLock")(function* (operation, directory, work) {
248
+ if (directory.length === 0) {
249
+ return yield* Effect.fail(invalid(operation));
250
+ }
251
+ const runtime = yield* runtimeHandle();
252
+ const wire = yield* Effect.try({
253
+ try: () => policyWire(work, operation),
254
+ catch: () => invalid(operation)
255
+ });
256
+ const closeOp = `${operation}.repositoryLock`;
257
+ return yield* Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
258
+ const slot = { owner: undefined };
259
+ const release = Effect.suspend(() => {
260
+ const held = slot.owner;
261
+ if (held === undefined) {
262
+ return Effect.void;
263
+ }
264
+ return joinLockRelease(closeOp, held).pipe(Effect.ensuring(Effect.sync(() => {
265
+ slot.owner = undefined;
266
+ })));
267
+ });
268
+ yield* Effect.addFinalizer(() => release);
269
+ const owner = yield* restore(nativeOperationWith(operation, (callback) => runtimeNative.logRepositoryLockAcquire(runtime, wire, directory, callback), runtimeNative.logRepositoryLockTake, (value) => value));
270
+ slot.owner = owner;
271
+ return Object.freeze({
272
+ directory,
273
+ release
274
+ });
275
+ }));
276
+ });
277
+ /** Internal first executor consumer; not a replacement row codec or public hash API. */
278
+ export const hashChunk = Effect.fn("bumbledb.hashChunk")(function* (input, work) {
279
+ const runtime = yield* NativeRuntime;
280
+ const handle = owners.get(runtime);
281
+ if (handle === undefined)
282
+ return yield* Effect.fail(invalid("hashChunk"));
283
+ return yield* nativeOperation("hashChunk", (callback) => {
284
+ if (!(input instanceof Uint8Array) || !(input.buffer instanceof ArrayBuffer))
285
+ throw invalid("hashChunk");
286
+ return runtimeNative.runtimeHash(handle, policyWire(work, "hashChunk"), input, callback);
287
+ }, (value) => {
288
+ if (value === null)
289
+ throw dbError("hashChunk", { _tag: "Internal" });
290
+ return value;
291
+ });
292
+ });
293
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}