@bjornpagen/bumbledb 1.3.1 → 2.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.
- package/COOKBOOK.md +153 -77
- package/README.md +107 -41
- package/dist/alternatives.d.ts +5 -6
- package/dist/alternatives.d.ts.map +1 -1
- package/dist/alternatives.js +5 -6
- package/dist/alternatives.js.map +1 -1
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +85 -0
- package/dist/bin.js.map +1 -0
- package/dist/capacity.d.ts +14 -17
- package/dist/capacity.d.ts.map +1 -1
- package/dist/capacity.js +7 -7
- package/dist/capacity.js.map +1 -1
- package/dist/changes.d.ts +32 -40
- package/dist/changes.d.ts.map +1 -1
- package/dist/changes.js +86 -104
- package/dist/changes.js.map +1 -1
- package/dist/closed.d.ts +2 -2
- package/dist/closed.d.ts.map +1 -1
- package/dist/closed.js +5 -5
- package/dist/closed.js.map +1 -1
- package/dist/codec.d.ts +13 -27
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +20 -21
- package/dist/codec.js.map +1 -1
- package/dist/compile.d.ts +26 -50
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +75 -64
- package/dist/compile.js.map +1 -1
- package/dist/database/database.d.ts +98 -0
- package/dist/database/database.d.ts.map +1 -0
- package/dist/database/database.js +249 -0
- package/dist/database/database.js.map +1 -0
- package/dist/database/driver.d.ts +40 -0
- package/dist/database/driver.d.ts.map +1 -0
- package/dist/database/driver.js +68 -0
- package/dist/database/driver.js.map +1 -0
- package/dist/database/fs.d.ts +12 -0
- package/dist/database/fs.d.ts.map +1 -0
- package/dist/database/fs.js +120 -0
- package/dist/database/fs.js.map +1 -0
- package/dist/database/generate.d.ts +26 -0
- package/dist/database/generate.d.ts.map +1 -0
- package/dist/database/generate.js +102 -0
- package/dist/database/generate.js.map +1 -0
- package/dist/database/hosted.d.ts +32 -0
- package/dist/database/hosted.d.ts.map +1 -0
- package/dist/database/hosted.js +44 -0
- package/dist/database/hosted.js.map +1 -0
- package/dist/database/io.d.ts +94 -0
- package/dist/database/io.d.ts.map +1 -0
- package/dist/database/io.js +35 -0
- package/dist/database/io.js.map +1 -0
- package/dist/database/mem.d.ts +26 -0
- package/dist/database/mem.d.ts.map +1 -0
- package/dist/database/mem.js +67 -0
- package/dist/database/mem.js.map +1 -0
- package/dist/database/migration.d.ts +55 -0
- package/dist/database/migration.d.ts.map +1 -0
- package/dist/database/migration.js +46 -0
- package/dist/database/migration.js.map +1 -0
- package/dist/database/s3.d.ts +36 -0
- package/dist/database/s3.d.ts.map +1 -0
- package/dist/database/s3.js +141 -0
- package/dist/database/s3.js.map +1 -0
- package/dist/db.d.ts +44 -128
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +163 -287
- package/dist/db.js.map +1 -1
- package/dist/engine.d.ts +7 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +2 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors.d.ts +152 -46
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +107 -19
- package/dist/errors.js.map +1 -1
- package/dist/face.d.ts +5 -5
- package/dist/face.d.ts.map +1 -1
- package/dist/face.js +6 -6
- package/dist/face.js.map +1 -1
- package/dist/fields.d.ts +4 -5
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +3 -3
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +60 -57
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -28
- package/dist/index.js.map +1 -1
- package/dist/judgment.d.ts +1 -1
- package/dist/judgment.js +1 -1
- package/dist/law.d.ts +16 -68
- package/dist/law.d.ts.map +1 -1
- package/dist/law.js +3 -3
- package/dist/law.js.map +1 -1
- package/dist/lower.d.ts +3 -3
- package/dist/lower.d.ts.map +1 -1
- package/dist/lower.js +35 -39
- package/dist/lower.js.map +1 -1
- package/dist/native/addon.d.ts +23 -0
- package/dist/native/addon.d.ts.map +1 -0
- package/dist/native/addon.js +15 -0
- package/dist/native/addon.js.map +1 -0
- package/dist/native/binding.d.ts +996 -0
- package/dist/native/json.d.ts +14 -0
- package/dist/native/json.d.ts.map +1 -0
- package/dist/native/json.js +73 -0
- package/dist/native/json.js.map +1 -0
- package/dist/native/load.d.ts +9 -0
- package/dist/native/load.d.ts.map +1 -0
- package/dist/native/load.js +30 -0
- package/dist/native/load.js.map +1 -0
- package/dist/native/op.d.ts +29 -0
- package/dist/native/op.d.ts.map +1 -0
- package/dist/native/op.js +50 -0
- package/dist/native/op.js.map +1 -0
- package/dist/query/atom.d.ts +13 -14
- package/dist/query/atom.d.ts.map +1 -1
- package/dist/query/atom.js +2 -2
- package/dist/query/atom.js.map +1 -1
- package/dist/query/compute.d.ts +4 -4
- package/dist/query/compute.d.ts.map +1 -1
- package/dist/query/compute.js +4 -4
- package/dist/query/compute.js.map +1 -1
- package/dist/query/find.d.ts +8 -8
- package/dist/query/find.d.ts.map +1 -1
- package/dist/query/find.js +1 -1
- package/dist/query/lower.d.ts +22 -17
- package/dist/query/lower.d.ts.map +1 -1
- package/dist/query/lower.js +230 -343
- package/dist/query/lower.js.map +1 -1
- package/dist/query/run.d.ts +5 -5
- package/dist/query/run.d.ts.map +1 -1
- package/dist/query/run.js +32 -15
- package/dist/query/run.js.map +1 -1
- package/dist/query/scope.d.ts +20 -28
- package/dist/query/scope.d.ts.map +1 -1
- package/dist/query/scope.js +7 -7
- package/dist/query/scope.js.map +1 -1
- package/dist/query/segments.d.ts +2 -2
- package/dist/query/segments.d.ts.map +1 -1
- package/dist/query/segments.js +3 -3
- package/dist/query/segments.js.map +1 -1
- package/dist/relation.d.ts +1 -1
- package/dist/relation.d.ts.map +1 -1
- package/dist/relation.js +4 -4
- package/dist/relation.js.map +1 -1
- package/dist/result.d.ts +15 -22
- package/dist/result.d.ts.map +1 -1
- package/dist/result.js +30 -39
- package/dist/result.js.map +1 -1
- package/dist/rows.d.ts +9 -33
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +8 -12
- package/dist/rows.js.map +1 -1
- package/dist/runtime.d.ts +17 -20
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +41 -205
- package/dist/runtime.js.map +1 -1
- package/dist/scalar.d.ts +4 -4
- package/dist/scalar.d.ts.map +1 -1
- package/dist/scalar.js +24 -8
- package/dist/scalar.js.map +1 -1
- package/dist/schema.d.ts +7 -18
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +18 -228
- package/dist/schema.js.map +1 -1
- package/dist/selection.d.ts +4 -4
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +5 -5
- package/dist/selection.js.map +1 -1
- package/dist/shape.d.ts +5 -5
- package/dist/shape.d.ts.map +1 -1
- package/dist/spec.d.ts +7 -79
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/statements.d.ts +3 -3
- package/dist/statements.d.ts.map +1 -1
- package/dist/statements.js +10 -10
- package/dist/statements.js.map +1 -1
- package/dist/uuid.d.ts +1 -1
- package/dist/uuid.d.ts.map +1 -1
- package/dist/uuid.js +1 -1
- package/dist/uuid.js.map +1 -1
- package/dist/values.d.ts +2 -2
- package/dist/values.d.ts.map +1 -1
- package/dist/values.js +2 -2
- package/dist/values.js.map +1 -1
- package/package.json +18 -18
- package/src/alternatives.ts +7 -8
- package/src/bin.ts +82 -0
- package/src/capacity.ts +20 -23
- package/src/changes.ts +134 -191
- package/src/closed.ts +5 -5
- package/src/codec.ts +35 -49
- package/src/compile.ts +91 -113
- package/src/database/database.ts +413 -0
- package/src/database/driver.ts +134 -0
- package/src/database/fs.ts +119 -0
- package/src/database/generate.ts +116 -0
- package/src/database/hosted.ts +102 -0
- package/src/database/io.ts +134 -0
- package/src/database/mem.ts +113 -0
- package/src/database/migration.ts +107 -0
- package/src/database/s3.ts +231 -0
- package/src/db.ts +290 -547
- package/src/engine.ts +14 -0
- package/src/errors.ts +118 -39
- package/src/face.ts +9 -9
- package/src/fields.ts +6 -7
- package/src/index.ts +92 -105
- package/src/judgment.ts +1 -1
- package/src/law.ts +18 -70
- package/src/lower.ts +61 -72
- package/src/native/addon.ts +54 -0
- package/src/native/binding.d.ts +996 -0
- package/src/native/json.ts +100 -0
- package/src/native/load.ts +31 -0
- package/src/native/op.ts +73 -0
- package/src/query/atom.ts +15 -16
- package/src/query/compute.ts +7 -7
- package/src/query/find.ts +8 -8
- package/src/query/lower.ts +270 -392
- package/src/query/run.ts +42 -21
- package/src/query/scope.ts +29 -37
- package/src/query/segments.ts +4 -4
- package/src/relation.ts +4 -4
- package/src/result.ts +53 -80
- package/src/rows.ts +18 -46
- package/src/runtime.ts +50 -277
- package/src/scalar.ts +32 -12
- package/src/schema.ts +23 -284
- package/src/selection.ts +6 -6
- package/src/shape.ts +5 -5
- package/src/spec.ts +7 -85
- package/src/statements.ts +11 -11
- package/src/uuid.ts +1 -1
- package/src/values.ts +4 -4
- package/dist/close.d.ts +0 -24
- package/dist/close.d.ts.map +0 -1
- package/dist/close.js +0 -34
- package/dist/close.js.map +0 -1
- package/dist/db-native.d.ts +0 -189
- package/dist/db-native.d.ts.map +0 -1
- package/dist/db-native.js +0 -13
- package/dist/db-native.js.map +0 -1
- package/dist/internal/log.d.ts +0 -26
- package/dist/internal/log.d.ts.map +0 -1
- package/dist/internal/log.js +0 -12
- package/dist/internal/log.js.map +0 -1
- package/dist/native.d.ts +0 -562
- package/dist/native.d.ts.map +0 -1
- package/dist/native.js +0 -123
- package/dist/native.js.map +0 -1
- package/dist/query/description.d.ts +0 -41
- package/dist/query/description.d.ts.map +0 -1
- package/dist/query/description.js +0 -311
- package/dist/query/description.js.map +0 -1
- package/dist/query/parse-ir.d.ts +0 -10
- package/dist/query/parse-ir.d.ts.map +0 -1
- package/dist/query/parse-ir.js +0 -280
- package/dist/query/parse-ir.js.map +0 -1
- package/dist/runtime-codes.d.ts +0 -2
- package/dist/runtime-codes.d.ts.map +0 -1
- package/dist/runtime-codes.js +0 -19
- package/dist/runtime-codes.js.map +0 -1
- package/dist/runtime-errors.d.ts +0 -138
- package/dist/runtime-errors.d.ts.map +0 -1
- package/dist/runtime-errors.js +0 -111
- package/dist/runtime-errors.js.map +0 -1
- package/dist/runtime-native.d.ts +0 -136
- package/dist/runtime-native.d.ts.map +0 -1
- package/dist/runtime-native.js +0 -5
- package/dist/runtime-native.js.map +0 -1
- package/dist/schema-file.d.ts +0 -7
- package/dist/schema-file.d.ts.map +0 -1
- package/dist/schema-file.js +0 -24
- package/dist/schema-file.js.map +0 -1
- package/pack-provenance.json +0 -7
- package/src/close.ts +0 -53
- package/src/db-native.ts +0 -235
- package/src/internal/log.ts +0 -46
- package/src/native.ts +0 -736
- package/src/query/description.ts +0 -424
- package/src/query/parse-ir.ts +0 -293
- package/src/runtime-codes.ts +0 -18
- package/src/runtime-errors.ts +0 -122
- package/src/runtime-native.ts +0 -181
- package/src/schema-file.ts +0 -38
package/src/lower.ts
CHANGED
|
@@ -1,122 +1,111 @@
|
|
|
1
|
-
import { AuthoringError } from "#errors.ts"
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* TOTAL on well-typed inputs — no validation lives here beyond what the
|
|
6
|
-
* types and the construction boundaries already guarantee — and it is the
|
|
7
|
-
* only place statement internals are read for the wire. In particular,
|
|
8
|
-
* lowering never emits an engine-refused containment target: it accepts
|
|
9
|
-
* only `schema` outputs, and `schema`'s target-key wall already
|
|
10
|
-
* refused any non-key target projection (60-containment-parity —
|
|
11
|
-
* totality INHERITED, not re-checked). Ordering is declaration order
|
|
12
|
-
* throughout, and every output object is built with one fixed key order,
|
|
13
|
-
* so serialization is deterministic (byte-stable).
|
|
2
|
+
* Lowers a schema to the addon's `SchemaSpecIn`, in declaration order with a fixed key order, so
|
|
3
|
+
* the JSON is byte-stable. Lowering judges nothing: the engine compiles and judges the spec.
|
|
14
4
|
*/
|
|
15
|
-
|
|
16
|
-
import
|
|
17
|
-
import {
|
|
18
|
-
import type { AnyFace } from "
|
|
19
|
-
import { type AnyField, literalOf } from "
|
|
20
|
-
import type { RelationClasses } from "
|
|
21
|
-
import { type AnyRelation, relationFields } from "#relation.ts"
|
|
22
|
-
import type { AnySchema } from "#schema.ts"
|
|
5
|
+
import type { AnyClosed } from "./closed.ts"
|
|
6
|
+
import { isClosedMember } from "./closed.ts"
|
|
7
|
+
import { AuthoringError } from "./errors.ts"
|
|
8
|
+
import type { AnyFace } from "./face.ts"
|
|
9
|
+
import { type AnyField, literalOf } from "./fields.ts"
|
|
10
|
+
import type { RelationClasses } from "./law.ts"
|
|
23
11
|
import type {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
} from "
|
|
32
|
-
import type
|
|
12
|
+
FieldSpecIn,
|
|
13
|
+
RelationSpecIn,
|
|
14
|
+
SchemaSpecIn,
|
|
15
|
+
SideSpecIn,
|
|
16
|
+
StatementSpecIn,
|
|
17
|
+
ValueTypeIn
|
|
18
|
+
} from "./native/binding.d.ts"
|
|
19
|
+
import { literalIn, literalSetIn, weightIn, windowIn } from "./native/json.ts"
|
|
20
|
+
import { type AnyRelation, relationFields } from "./relation.ts"
|
|
21
|
+
import type { AnySchema } from "./schema.ts"
|
|
22
|
+
import type { Statement } from "./statements.ts"
|
|
23
|
+
|
|
24
|
+
const ELEMENT = { u64: "U64", i64: "I64", f64: "F64" } as const
|
|
33
25
|
|
|
34
|
-
function valueTypeOf(field: AnyField):
|
|
26
|
+
function valueTypeOf(field: AnyField): ValueTypeIn {
|
|
35
27
|
switch (field.kind) {
|
|
36
28
|
case "bool":
|
|
37
|
-
return { kind: "
|
|
29
|
+
return { kind: "Bool" }
|
|
38
30
|
case "u64":
|
|
39
|
-
return { kind: "
|
|
31
|
+
return { kind: "U64" }
|
|
40
32
|
case "i64":
|
|
41
|
-
return { kind: "
|
|
33
|
+
return { kind: "I64" }
|
|
42
34
|
case "f64":
|
|
43
|
-
return { kind: "
|
|
35
|
+
return { kind: "F64" }
|
|
44
36
|
case "uuid":
|
|
45
|
-
return { kind: "
|
|
37
|
+
return { kind: "Uuid" }
|
|
46
38
|
case "str":
|
|
47
|
-
return { kind: "
|
|
39
|
+
return { kind: "String" }
|
|
48
40
|
case "bytes":
|
|
49
|
-
return { kind: "
|
|
41
|
+
return { kind: "FixedBytes", len: field.width }
|
|
50
42
|
case "interval":
|
|
51
|
-
return { kind: "
|
|
43
|
+
if (field.width === undefined) return { kind: "Interval", element: ELEMENT[field.element] }
|
|
44
|
+
if (field.element === "f64")
|
|
45
|
+
throw new AuthoringError({ message: "a fixed-width interval needs an integer element" })
|
|
46
|
+
return { kind: "FixedInterval", element: ELEMENT[field.element], width: field.width.toString() }
|
|
52
47
|
}
|
|
53
48
|
}
|
|
54
49
|
|
|
55
|
-
function lowerField(name: string, field: AnyField, newtype: string | undefined):
|
|
56
|
-
return
|
|
57
|
-
name,
|
|
58
|
-
valueType: valueTypeOf(field),
|
|
59
|
-
newtype
|
|
60
|
-
}
|
|
50
|
+
function lowerField(name: string, field: AnyField, newtype: string | undefined): FieldSpecIn {
|
|
51
|
+
return newtype === undefined
|
|
52
|
+
? { name, valueType: valueTypeOf(field) }
|
|
53
|
+
: { name, valueType: valueTypeOf(field), newtype }
|
|
61
54
|
}
|
|
62
55
|
|
|
63
|
-
function lowerFace(face: AnyFace):
|
|
56
|
+
function lowerFace(face: AnyFace): SideSpecIn {
|
|
64
57
|
return {
|
|
65
58
|
relation: face.owner.name,
|
|
66
59
|
projection: [...face.projection],
|
|
67
|
-
selection: face.selection.map(
|
|
68
|
-
return [binding.field, binding.set]
|
|
69
|
-
})
|
|
60
|
+
selection: face.selection.map((binding) => ({ field: binding.field, set: literalSetIn(binding.set) }))
|
|
70
61
|
}
|
|
71
62
|
}
|
|
72
63
|
|
|
73
|
-
function lowerStatement(statement: Statement):
|
|
64
|
+
function lowerStatement(statement: Statement): StatementSpecIn {
|
|
74
65
|
const data = statement
|
|
75
66
|
switch (data.kind) {
|
|
76
67
|
case "key":
|
|
77
|
-
return { kind: "
|
|
68
|
+
return { kind: "Fd", relation: data.owner.name, projection: [...data.projection] }
|
|
78
69
|
case "containment":
|
|
79
70
|
return {
|
|
80
|
-
kind: "
|
|
71
|
+
kind: "Containment",
|
|
81
72
|
source: lowerFace(data.source),
|
|
82
73
|
target: lowerFace(data.target),
|
|
83
74
|
bidirectional: false
|
|
84
75
|
}
|
|
85
76
|
case "mirrors":
|
|
86
77
|
return {
|
|
87
|
-
kind: "
|
|
78
|
+
kind: "Containment",
|
|
88
79
|
source: lowerFace(data.source),
|
|
89
80
|
target: lowerFace(data.target),
|
|
90
81
|
bidirectional: true
|
|
91
82
|
}
|
|
92
83
|
case "capacity":
|
|
93
84
|
return {
|
|
94
|
-
kind: "
|
|
85
|
+
kind: "Capacity",
|
|
95
86
|
target: lowerFace(data.target),
|
|
96
|
-
weight: data.weight,
|
|
97
|
-
window: data.window,
|
|
87
|
+
weight: weightIn(data.weight),
|
|
88
|
+
window: windowIn(data.window),
|
|
98
89
|
source: lowerFace(data.source)
|
|
99
90
|
}
|
|
100
91
|
}
|
|
101
92
|
}
|
|
102
93
|
|
|
103
|
-
function lowerRelation(relation: AnyRelation, classes: RelationClasses):
|
|
104
|
-
const fields
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return { name: relation.name, fields
|
|
94
|
+
function lowerRelation(relation: AnyRelation, classes: RelationClasses): RelationSpecIn {
|
|
95
|
+
const fields = relationFields(relation).map((declared) =>
|
|
96
|
+
lowerField(declared.name, declared.field, classes[declared.name])
|
|
97
|
+
)
|
|
98
|
+
return { name: relation.name, fields }
|
|
108
99
|
}
|
|
109
100
|
|
|
110
|
-
function lowerClosed(member: AnyClosed, classes: RelationClasses):
|
|
111
|
-
const fields
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
})
|
|
101
|
+
function lowerClosed(member: AnyClosed, classes: RelationClasses): RelationSpecIn {
|
|
102
|
+
const fields = Object.entries(member.columns).map(([name, field]) => lowerField(name, field, classes[name]))
|
|
103
|
+
const rows = member.handles.map((handle) => ({
|
|
104
|
+
handle,
|
|
105
|
+
values: Object.entries(member.columns).map(([name, field]) =>
|
|
106
|
+
literalIn(literalOf(field, member.axioms[handle]?.[name]))
|
|
107
|
+
)
|
|
108
|
+
}))
|
|
120
109
|
const newtype = classes.id
|
|
121
110
|
if (newtype === undefined) {
|
|
122
111
|
throw new AuthoringError({
|
|
@@ -128,8 +117,8 @@ function lowerClosed(member: AnyClosed, classes: RelationClasses): RelationSpec
|
|
|
128
117
|
|
|
129
118
|
const noClasses: RelationClasses = Object.freeze({})
|
|
130
119
|
|
|
131
|
-
function lower(theory: AnySchema):
|
|
132
|
-
const relations:
|
|
120
|
+
function lower(theory: AnySchema): SchemaSpecIn {
|
|
121
|
+
const relations: RelationSpecIn[] = Object.entries(theory.relations).map(function lowerMember([name, member]) {
|
|
133
122
|
const classes = theory.classes[name] ?? noClasses
|
|
134
123
|
if (isClosedMember(member)) {
|
|
135
124
|
return lowerClosed(member, classes)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type * as Binding from "./binding.d.ts"
|
|
2
|
+
import { loadAddon } from "./load.ts"
|
|
3
|
+
|
|
4
|
+
/** The addon's exports, typed by the bridge's generated declarations. */
|
|
5
|
+
type Addon = typeof Binding
|
|
6
|
+
|
|
7
|
+
type External<T> = Binding.ExternalObject<T>
|
|
8
|
+
type RuntimeRef = External<Binding.RuntimeHandle>
|
|
9
|
+
type OperationRef = External<Binding.OperationHandle>
|
|
10
|
+
type DirectoryRef = External<Binding.DirectoryHandle>
|
|
11
|
+
type DbRef = External<Binding.DbHandle>
|
|
12
|
+
type SchemaRef = External<Binding.SchemaHandle>
|
|
13
|
+
type QueryRef = External<Binding.QueryHandle>
|
|
14
|
+
type SnapshotRef = External<Binding.SnapshotHandle>
|
|
15
|
+
type PreparedRef = External<Binding.PreparedHandle>
|
|
16
|
+
type ResultRef = External<Binding.ResultHandle>
|
|
17
|
+
type CursorRef = External<Binding.CursorHandle>
|
|
18
|
+
type DraftRef = External<Binding.DraftHandle>
|
|
19
|
+
type ChangesRef = External<Binding.ChangesHandle>
|
|
20
|
+
type ChangesCursorRef = External<Binding.ChangesCursorHandle>
|
|
21
|
+
type WitnessRef = External<Binding.WitnessHandle>
|
|
22
|
+
|
|
23
|
+
let loaded: Addon | undefined
|
|
24
|
+
|
|
25
|
+
/** The addon, loaded on first use rather than at import. */
|
|
26
|
+
const addon: Addon = new Proxy({} as Addon, {
|
|
27
|
+
get(_target, property) {
|
|
28
|
+
loaded ??= loadAddon<Addon>(process.platform, process.arch)
|
|
29
|
+
return Reflect.get(loaded, property)
|
|
30
|
+
},
|
|
31
|
+
set(_target, property, value) {
|
|
32
|
+
loaded ??= loadAddon<Addon>(process.platform, process.arch)
|
|
33
|
+
return Reflect.set(loaded, property, value)
|
|
34
|
+
}
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
export type {
|
|
38
|
+
Addon,
|
|
39
|
+
ChangesCursorRef,
|
|
40
|
+
ChangesRef,
|
|
41
|
+
CursorRef,
|
|
42
|
+
DbRef,
|
|
43
|
+
DirectoryRef,
|
|
44
|
+
DraftRef,
|
|
45
|
+
OperationRef,
|
|
46
|
+
PreparedRef,
|
|
47
|
+
QueryRef,
|
|
48
|
+
ResultRef,
|
|
49
|
+
RuntimeRef,
|
|
50
|
+
SchemaRef,
|
|
51
|
+
SnapshotRef,
|
|
52
|
+
WitnessRef
|
|
53
|
+
}
|
|
54
|
+
export { addon }
|