@agentshouse/mdruntime 0.1.0-c1ffd2bc60355 → 0.1.0-c20970f71a6a9
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/README.md +11 -9
- package/dist/adapter.d.ts +89 -53
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +2 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +28 -4
- package/dist/bootstrap.d.ts +10 -13
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +100 -89
- package/dist/client.d.ts +8 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +52 -6
- package/dist/collection.d.ts +5 -3
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +24 -19
- package/dist/compile.d.ts +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +113 -45
- package/dist/connection.d.ts +8 -7
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1311 -1067
- package/dist/conversation.d.ts +15 -14
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +222 -140
- package/dist/durability.d.ts +0 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts +1 -0
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +2 -1
- package/dist/file.d.ts +2 -11
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +6 -4
- package/dist/host.d.ts +3 -6
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +12 -19
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/media.d.ts +8 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +218 -0
- package/dist/memory.d.ts +10 -6
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +178 -90
- package/dist/messages.d.ts +2 -2
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +15 -16
- package/dist/model.d.ts +6 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +7 -10
- package/dist/observation.d.ts +1 -0
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +1 -1
- package/dist/outcome.d.ts +13 -5
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +16 -2
- package/dist/paths.d.ts +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +4 -0
- package/dist/phrase.d.ts +3 -0
- package/dist/phrase.d.ts.map +1 -0
- package/dist/phrase.js +8 -0
- package/dist/query.d.ts +10 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +20 -1
- package/dist/reach.d.ts +10 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +53 -29
- package/dist/react.d.ts +1 -0
- package/dist/react.d.ts.map +1 -1
- package/dist/readiness.d.ts +3 -17
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +4 -10
- package/dist/recovery.d.ts +1 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +26 -0
- package/dist/refresh.d.ts +7 -5
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +47 -11
- package/dist/replica.d.ts +3 -5
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +7 -7
- package/dist/room-draft.d.ts +18 -3
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +94 -47
- package/dist/rows.d.ts +17 -7
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +120 -87
- package/dist/save.d.ts +2 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +11 -5
- package/dist/search.d.ts +12 -63
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +9 -52
- package/dist/shared.d.ts +0 -1
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +0 -10
- package/dist/status.d.ts +4 -3
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -1
- package/dist/store.d.ts +30 -37
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +61 -66
- package/dist/stored.d.ts +41 -24
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +196 -214
- package/dist/tables.d.ts +48 -49
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +23 -62
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/validation.d.ts +3 -4
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +35 -96
- package/dist/wire.d.ts +9 -8
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +3 -2
- package/package.json +10 -17
- package/AGENTS.md +0 -317
- package/dist/chat/acts.d.ts +0 -33
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/context.js +0 -10
- package/dist/chat/earlier.d.ts +0 -10
- package/dist/chat/earlier.d.ts.map +0 -1
- package/dist/chat/earlier.js +0 -54
- package/dist/chat/house.d.ts +0 -25
- package/dist/chat/house.d.ts.map +0 -1
- package/dist/chat/house.js +0 -38
- package/dist/chat/input.d.ts +0 -11
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -92
- package/dist/chat/kit.d.ts +0 -61
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -28
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -103
- package/dist/chat/markdown.d.ts +0 -20
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -229
- package/dist/chat/message.d.ts +0 -7
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -254
- package/dist/chat/messages.d.ts +0 -35
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -210
- package/dist/chat/name.d.ts +0 -7
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -12
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -19
- package/dist/chat/overlay.d.ts +0 -32
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -103
- package/dist/chat/parts.d.ts +0 -58
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/parts.js +0 -120
- package/dist/chat/pieces.d.ts +0 -62
- package/dist/chat/pieces.d.ts.map +0 -1
- package/dist/chat/pieces.js +0 -1110
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -70
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -635
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -69
- package/dist/chat/questions.d.ts +0 -31
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/questions.js +0 -111
- package/dist/chat/read.d.ts +0 -5
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/read.js +0 -13
- package/dist/chat/ready.d.ts +0 -37
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -93
- package/dist/chat/room-file.d.ts +0 -8
- package/dist/chat/room-file.d.ts.map +0 -1
- package/dist/chat/room-file.js +0 -72
- package/dist/chat/steady.d.ts +0 -3
- package/dist/chat/steady.d.ts.map +0 -1
- package/dist/chat/steady.js +0 -26
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -307
- package/dist/chat.d.ts +0 -15
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/fulltext.d.ts +0 -27
- package/dist/fulltext.d.ts.map +0 -1
- package/dist/fulltext.js +0 -368
- package/dist/reads.d.ts +0 -11
- package/dist/reads.d.ts.map +0 -1
- package/dist/reads.js +0 -100
- package/dist/words.d.ts +0 -19
- package/dist/words.d.ts.map +0 -1
- package/dist/words.js +0 -150
package/dist/compile.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ARRAY_INDEX, parse, pointerSegments } from '@agentshouse/mdmodel';
|
|
2
2
|
import { binaryRecord } from './binary.js';
|
|
3
|
-
import {
|
|
3
|
+
import { bodied, } from './query.js';
|
|
4
|
+
import { documentKey, kindOf, pathOfKey, placedOf, roomOfKey } from './rows.js';
|
|
5
|
+
import { HOLDS_PHRASE } from './phrase.js';
|
|
4
6
|
import { byCodePoint, compared, cursorOf, FROM_START, MAXIMUM_WINDOW, } from './windows.js';
|
|
5
7
|
const VISIBLE = (alias) => `${alias}.visible = 1 AND ${alias}.present = 1 AND ${alias}.queried = 1`;
|
|
6
8
|
function fragment(sql, bind = []) {
|
|
@@ -12,11 +14,17 @@ function joined(parts, separator) {
|
|
|
12
14
|
bind: parts.flatMap((part) => part.bind),
|
|
13
15
|
};
|
|
14
16
|
}
|
|
17
|
+
function balanced(parts, separator) {
|
|
18
|
+
if (parts.length === 1)
|
|
19
|
+
return grouped(parts[0]);
|
|
20
|
+
const half = Math.ceil(parts.length / 2);
|
|
21
|
+
return grouped(joined([balanced(parts.slice(0, half), separator), balanced(parts.slice(half), separator)], separator));
|
|
22
|
+
}
|
|
15
23
|
function all(parts) {
|
|
16
|
-
return parts.length === 0 ? fragment('1') :
|
|
24
|
+
return parts.length === 0 ? fragment('1') : balanced(parts, ' AND ');
|
|
17
25
|
}
|
|
18
26
|
function any(parts) {
|
|
19
|
-
return parts.length === 0 ? fragment('0') :
|
|
27
|
+
return parts.length === 0 ? fragment('0') : balanced(parts, ' OR ');
|
|
20
28
|
}
|
|
21
29
|
function grouped(part) {
|
|
22
30
|
return { sql: `(${part.sql})`, bind: part.bind };
|
|
@@ -40,19 +48,31 @@ function same(alias, value) {
|
|
|
40
48
|
: fragment(`${alias}.kind = ? AND ${alias}.value = ?`, [held.kind, held.value]);
|
|
41
49
|
}
|
|
42
50
|
const BOUNDS = { gt: '>', gte: '>=', lt: '<', lte: '<=' };
|
|
51
|
+
function pointed(alias, field, reach) {
|
|
52
|
+
const { keys, places, glob } = placedOf(field, reach);
|
|
53
|
+
return fragment(`${alias}.keys = ? AND ${alias}.places ${glob ? 'GLOB' : '='} ?`, [keys, places]);
|
|
54
|
+
}
|
|
43
55
|
function heldValues(doc, field, alias, where) {
|
|
44
|
-
return
|
|
56
|
+
return joined([
|
|
57
|
+
fragment(`SELECT 1 FROM replica_values ${alias} WHERE ${alias}.doc = ${doc}.id AND `),
|
|
58
|
+
grouped(pointed(alias, field, 'value')),
|
|
59
|
+
fragment(' AND '),
|
|
60
|
+
grouped(where),
|
|
61
|
+
], '');
|
|
45
62
|
}
|
|
46
63
|
function exists(part) {
|
|
47
64
|
return { sql: `EXISTS (${part.sql})`, bind: part.bind };
|
|
48
65
|
}
|
|
49
|
-
function
|
|
66
|
+
function itemOf(held, where) {
|
|
67
|
+
return exists(joined([
|
|
68
|
+
fragment(`SELECT 1 FROM replica_values i WHERE i.doc = ${held}.doc AND i.keys = ${held}.keys AND i.places = ${held}.places AND i.item >= 0 AND `),
|
|
69
|
+
grouped(where),
|
|
70
|
+
], ''));
|
|
71
|
+
}
|
|
72
|
+
function matching(held, values) {
|
|
50
73
|
return any(values.map((value) => any([
|
|
51
74
|
same(held, value),
|
|
52
|
-
all([
|
|
53
|
-
fragment(`${held}.kind = 'array'`),
|
|
54
|
-
exists(heldValues(doc, field, 'i', all([fragment(`i.held = ${held}.held AND i.item >= 0`), same('i', value)]))),
|
|
55
|
-
]),
|
|
75
|
+
all([fragment(`${held}.kind = 'array'`), itemOf(held, same('i', value))]),
|
|
56
76
|
])));
|
|
57
77
|
}
|
|
58
78
|
function tested(doc, field, test) {
|
|
@@ -65,7 +85,7 @@ function tested(doc, field, test) {
|
|
|
65
85
|
}
|
|
66
86
|
if (test.op === 'ne' || test.op === 'nin') {
|
|
67
87
|
const values = test.op === 'ne' ? [test.value] : test.values;
|
|
68
|
-
const unmatched = matching('h',
|
|
88
|
+
const unmatched = matching('h', values);
|
|
69
89
|
return any([
|
|
70
90
|
fragment(`NOT ${reached.sql}`, reached.bind),
|
|
71
91
|
exists(heldValues(doc, field, 'h', all([fragment('h.item = -1'), fragment(`NOT (${unmatched.sql})`, unmatched.bind)]))),
|
|
@@ -86,7 +106,7 @@ function tested(doc, field, test) {
|
|
|
86
106
|
if (test.op === 'all') {
|
|
87
107
|
return exists(heldValues(doc, field, 'h', all([
|
|
88
108
|
fragment("h.item = -1 AND h.kind = 'array'"),
|
|
89
|
-
...test.values.map((value) =>
|
|
109
|
+
...test.values.map((value) => itemOf('h', same('i', value))),
|
|
90
110
|
])));
|
|
91
111
|
}
|
|
92
112
|
return exists(heldValues(doc, field, 'v', fragment("v.item = -1 AND v.kind = 'array' AND v.size = ?", [test.size])));
|
|
@@ -98,10 +118,33 @@ function conditioned(doc, condition) {
|
|
|
98
118
|
return any(condition.some.map((one) => conditioned(doc, one)));
|
|
99
119
|
return tested(doc, condition.field, condition.test);
|
|
100
120
|
}
|
|
101
|
-
function located(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
121
|
+
function located(alias) {
|
|
122
|
+
return fragment(`(SELECT k.locator FROM replica_keys k WHERE k.key = ${alias}.key)`);
|
|
123
|
+
}
|
|
124
|
+
function within(alias, path) {
|
|
125
|
+
return fragment(`(${alias}.path = ? OR (${alias}.path >= ? AND ${alias}.path < ?))`, [
|
|
126
|
+
path,
|
|
127
|
+
`${path}/`,
|
|
128
|
+
`${path}0`,
|
|
129
|
+
]);
|
|
130
|
+
}
|
|
131
|
+
function ancestors(area) {
|
|
132
|
+
const depth = area.path.split('/').length;
|
|
133
|
+
return area.open.flatMap((open) => {
|
|
134
|
+
const segments = open.split('/');
|
|
135
|
+
return segments.slice(depth - 1, -1).map((_, at) => segments.slice(0, depth + at).join('/'));
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function fenced(alias, key, area, folders) {
|
|
139
|
+
const opened = any([
|
|
140
|
+
...area.open.map((open) => within(alias, open)),
|
|
141
|
+
...(folders ? ancestors(area).map((path) => fragment(`${alias}.path = ?`, [path])) : []),
|
|
142
|
+
]);
|
|
143
|
+
return all([
|
|
144
|
+
fragment(`${alias}.key = ?`, [key]),
|
|
145
|
+
within(alias, area.path),
|
|
146
|
+
fragment(`NOT ${grouped(opened).sql}`, opened.bind),
|
|
147
|
+
]);
|
|
105
148
|
}
|
|
106
149
|
function reached(bound, alias) {
|
|
107
150
|
const reach = bound.reach;
|
|
@@ -115,20 +158,29 @@ function reached(bound, alias) {
|
|
|
115
158
|
const key = bound.keys.get(roomOfKey(held));
|
|
116
159
|
return key === undefined ? [] : [[key, pathOfKey(held)]];
|
|
117
160
|
});
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
]),
|
|
161
|
+
const outside = any(reach.areas.flatMap((area) => {
|
|
162
|
+
const key = bound.keys.get(area.room);
|
|
163
|
+
return key === undefined ? [] : [fenced(alias, key, area, false)];
|
|
164
|
+
}));
|
|
165
|
+
return all([
|
|
166
|
+
any([
|
|
167
|
+
...(rooms.length === 0 ? [] : [fragment(`${alias}.key IN ${list(rooms).sql}`, rooms)]),
|
|
168
|
+
...(documents.length === 0
|
|
169
|
+
? []
|
|
170
|
+
: [
|
|
171
|
+
fragment(`EXISTS (SELECT 1 FROM json_each(?) j WHERE j.value ->> 0 = ${alias}.key AND j.value ->> 1 = ${alias}.path)`, [JSON.stringify(documents)]),
|
|
172
|
+
]),
|
|
173
|
+
]),
|
|
174
|
+
...(reach.areas.length === 0 ? [] : [fragment(`NOT ${grouped(outside).sql}`, outside.bind)]),
|
|
125
175
|
]);
|
|
126
176
|
}
|
|
127
|
-
function
|
|
177
|
+
function unindexed(column) {
|
|
178
|
+
return `+${column}`;
|
|
179
|
+
}
|
|
180
|
+
function scoped(alias, scope, byPaths = false) {
|
|
181
|
+
const type = byPaths ? unindexed(`${alias}.type`) : `${alias}.type`;
|
|
128
182
|
return all([
|
|
129
|
-
...(scope.types === null
|
|
130
|
-
? []
|
|
131
|
-
: [fragment(`${alias}.type IN ${list(scope.types).sql}`, scope.types)]),
|
|
183
|
+
...(scope.types === null ? [] : [fragment(`${type} IN ${list(scope.types).sql}`, scope.types)]),
|
|
132
184
|
...(scope.pathPrefix === null || scope.pathPrefix === ''
|
|
133
185
|
? []
|
|
134
186
|
: [
|
|
@@ -144,14 +196,17 @@ function related(bound, plan) {
|
|
|
144
196
|
const parts = [];
|
|
145
197
|
if (plan.hop !== null) {
|
|
146
198
|
parts.push(exists(joined([
|
|
147
|
-
fragment(`SELECT 1 FROM replica_links l JOIN replica_entries m ON m.key = d.key AND m.path = l.target AND ${VISIBLE('m')} WHERE l.doc = d.id AND l.kind = 'field' AND
|
|
199
|
+
fragment(`SELECT 1 FROM replica_links l JOIN replica_entries m ON m.key = d.key AND m.path = l.target AND ${VISIBLE('m')} WHERE l.doc = d.id AND l.kind = 'field' AND`),
|
|
200
|
+
grouped(pointed('l', plan.hop.field, 'link')),
|
|
201
|
+
fragment('AND'),
|
|
148
202
|
grouped(all([scoped('m', plan.hop), reached(bound, 'm')])),
|
|
149
203
|
], ' ')));
|
|
150
204
|
}
|
|
151
205
|
if (plan.backlinks !== null) {
|
|
152
206
|
const field = plan.backlinks.field;
|
|
153
207
|
parts.push(exists(joined([
|
|
154
|
-
fragment(`SELECT 1 FROM replica_links l JOIN replica_entries s ON s.id = l.doc AND ${VISIBLE('s')} WHERE l.key = d.key AND l.target = d.path AND l.kind = 'field'
|
|
208
|
+
fragment(`SELECT 1 FROM replica_links l JOIN replica_entries s ON s.id = l.doc AND ${VISIBLE('s')} WHERE l.key = d.key AND l.target = d.path AND l.kind = 'field' AND`),
|
|
209
|
+
...(field === null ? [] : [grouped(pointed('l', field, 'link')), fragment('AND')]),
|
|
155
210
|
grouped(all([scoped('s', plan.backlinks), reached(bound, 's')])),
|
|
156
211
|
], ' ')));
|
|
157
212
|
}
|
|
@@ -164,8 +219,11 @@ function filtered(bound, plan) {
|
|
|
164
219
|
...(plan.paths === null ? [] : [fragment(`d.path IN ${list(plan.paths).sql}`, plan.paths)]),
|
|
165
220
|
...(plan.folder === null ? [] : [fragment('d.folder = ?', [plan.folder])]),
|
|
166
221
|
reached(bound, 'd'),
|
|
167
|
-
scoped('d', plan.root),
|
|
222
|
+
scoped('d', plan.root, plan.paths !== null),
|
|
168
223
|
...related(bound, plan),
|
|
224
|
+
...(plan.text === null
|
|
225
|
+
? []
|
|
226
|
+
: [fragment(`${HOLDS_PHRASE}(d.content, ?)`, [plan.text.toLowerCase()])]),
|
|
169
227
|
]);
|
|
170
228
|
}
|
|
171
229
|
function orderingOf(options) {
|
|
@@ -278,16 +336,20 @@ function following(parts, tie) {
|
|
|
278
336
|
}
|
|
279
337
|
return condition;
|
|
280
338
|
}
|
|
281
|
-
function keyTerm(
|
|
339
|
+
function keyTerm(key, ordering, index) {
|
|
282
340
|
if (key.of === 'field') {
|
|
283
341
|
const alias = `o${index}`;
|
|
284
342
|
return {
|
|
285
343
|
term: { ordering, kind: fragment(`${alias}.kind`), value: fragment(`${alias}.value`) },
|
|
286
|
-
join:
|
|
344
|
+
join: joined([
|
|
345
|
+
fragment(`LEFT JOIN replica_values ${alias} ON ${alias}.doc = d.id AND `),
|
|
346
|
+
grouped(pointed(alias, key.field, 'exact')),
|
|
347
|
+
fragment(` AND ${alias}.item = -1 AND ${alias}.kind NOT IN ('object', 'undefined')`),
|
|
348
|
+
], ''),
|
|
287
349
|
};
|
|
288
350
|
}
|
|
289
351
|
const expression = key.of === 'room'
|
|
290
|
-
? located(
|
|
352
|
+
? located('d')
|
|
291
353
|
: key.of === 'path'
|
|
292
354
|
? fragment('d.path')
|
|
293
355
|
: key.of === 'type'
|
|
@@ -369,9 +431,6 @@ function collating(connection) {
|
|
|
369
431
|
return name;
|
|
370
432
|
};
|
|
371
433
|
}
|
|
372
|
-
function bodied(shape) {
|
|
373
|
-
return shape.sections !== null || shape.preamble || shape.markdown;
|
|
374
|
-
}
|
|
375
434
|
function masked(pointers) {
|
|
376
435
|
const root = { whole: false, members: new Map() };
|
|
377
436
|
for (const pointer of pointers) {
|
|
@@ -428,9 +487,10 @@ function documentOf(shape, room, row, linked) {
|
|
|
428
487
|
const type = row.type;
|
|
429
488
|
const fileId = row.file_id ?? null;
|
|
430
489
|
const revision = row.revision ?? null;
|
|
490
|
+
const content = row.content ?? null;
|
|
491
|
+
const unheld = Number(row.unheld) === 1 ? { textHeld: false } : {};
|
|
431
492
|
if (type === null) {
|
|
432
493
|
const binary = row.binary === null ? null : JSON.parse(row.binary);
|
|
433
|
-
const content = row.content ?? null;
|
|
434
494
|
return {
|
|
435
495
|
room,
|
|
436
496
|
path,
|
|
@@ -439,14 +499,13 @@ function documentOf(shape, room, row, linked) {
|
|
|
439
499
|
: {
|
|
440
500
|
binaryFile: binaryRecord(path, binary, revision ?? undefined),
|
|
441
501
|
}),
|
|
442
|
-
...(shape.markdown && content !== null
|
|
443
|
-
|
|
444
|
-
: {}),
|
|
502
|
+
...(shape.markdown && content !== null ? { markdown: content } : {}),
|
|
503
|
+
...unheld,
|
|
445
504
|
...(shape.fileId ? { fileId } : {}),
|
|
446
505
|
...(shape.revision ? { revision } : {}),
|
|
447
506
|
};
|
|
448
507
|
}
|
|
449
|
-
const read = bodied(shape) ? parse(
|
|
508
|
+
const read = bodied(shape) && content !== null ? parse(content, path) : null;
|
|
450
509
|
const body = read?.ok === true ? read.document : null;
|
|
451
510
|
const fields = JSON.parse(row.fields ?? '{}');
|
|
452
511
|
return {
|
|
@@ -464,7 +523,8 @@ function documentOf(shape, room, row, linked) {
|
|
|
464
523
|
? {}
|
|
465
524
|
: { sections: sectionsOf(body.sections, shape.sections) }),
|
|
466
525
|
...(shape.preamble && body !== null ? { preamble: body.preamble } : {}),
|
|
467
|
-
...(shape.markdown &&
|
|
526
|
+
...(shape.markdown && content !== null ? { markdown: content } : {}),
|
|
527
|
+
...unheld,
|
|
468
528
|
...(shape.backlinks ? { backlinks: linked.get(documentKey(room, path)) ?? [] } : {}),
|
|
469
529
|
...(shape.change
|
|
470
530
|
? {
|
|
@@ -498,10 +558,10 @@ function backlinksOf(connection, bound, rows) {
|
|
|
498
558
|
return linked;
|
|
499
559
|
}
|
|
500
560
|
function documents(connection, bound, plan, shape, budget) {
|
|
501
|
-
const terms = shape.orderBy.map(({ key, options }, index) => keyTerm(
|
|
561
|
+
const terms = shape.orderBy.map(({ key, options }, index) => keyTerm(key, orderingOf(options), index));
|
|
502
562
|
const filter = filtered(bound, plan);
|
|
503
563
|
const cursor = plan.after?.values ?? null;
|
|
504
|
-
const room = located(
|
|
564
|
+
const room = located('d');
|
|
505
565
|
const tie = cursor === null
|
|
506
566
|
? null
|
|
507
567
|
: (() => {
|
|
@@ -519,7 +579,7 @@ function documents(connection, bound, plan, shape, budget) {
|
|
|
519
579
|
? null
|
|
520
580
|
: following(terms.map(({ term }, index) => beyond(bound, term, cursor[index])), tie);
|
|
521
581
|
const selected = joined([
|
|
522
|
-
fragment('SELECT d.id, d.key, d.path, d.type, d.binary, d.revision, d.fields, d.change, d.file_id'),
|
|
582
|
+
fragment('SELECT d.id, d.key, d.path, d.type, d.binary, d.revision, d.fields, d.change, d.file_id, d.content IS NULL AND d.outline IS NOT NULL AS unheld'),
|
|
523
583
|
...terms.map(({ term }, index) => joined([
|
|
524
584
|
fragment(`, ${term.kind.sql} AS k${index}`, term.kind.bind),
|
|
525
585
|
fragment(`, ${term.value.sql} AS v${index}`, term.value.bind),
|
|
@@ -595,8 +655,16 @@ function storedFolders(bound, plan) {
|
|
|
595
655
|
return null;
|
|
596
656
|
const keys = whole.map(({ key }) => key);
|
|
597
657
|
const prefix = plan.root.pathPrefix;
|
|
658
|
+
const outside = (bound.reach?.areas ?? []).flatMap((area) => {
|
|
659
|
+
const key = bound.keys.get(area.room);
|
|
660
|
+
if (key === undefined)
|
|
661
|
+
return [];
|
|
662
|
+
const fence = fenced('f', key, area, true);
|
|
663
|
+
return [fragment(`NOT ${grouped(fence).sql}`, fence.bind)];
|
|
664
|
+
});
|
|
598
665
|
return all([
|
|
599
666
|
fragment(`f.key IN ${list(keys).sql} AND f.layer = 0 AND f.present = 1`, keys),
|
|
667
|
+
...outside,
|
|
600
668
|
...(prefix === null || prefix === ''
|
|
601
669
|
? []
|
|
602
670
|
: [
|
|
@@ -611,7 +679,7 @@ function storedFolders(bound, plan) {
|
|
|
611
679
|
}
|
|
612
680
|
function groups(connection, bound, plan, shape) {
|
|
613
681
|
const keyed = shape.groupBy.map((key, index) => {
|
|
614
|
-
const { term, join } = keyTerm(
|
|
682
|
+
const { term, join } = keyTerm(key, GROUP_ORDER, index);
|
|
615
683
|
const kind = fragment(`COALESCE(${term.kind.sql}, 'null')`, term.kind.bind);
|
|
616
684
|
return { term: { ...term, kind }, join };
|
|
617
685
|
});
|
package/dist/connection.d.ts
CHANGED
|
@@ -7,13 +7,13 @@ import { type Adapter, type Authorization, type Member, type ProviderRefusal, ty
|
|
|
7
7
|
import { type ChatDraftSurface, type ConversationAgent, type ConversationEntry, type ConversationOptions, type ConversationSurface, type ConversationView } from './conversation.js';
|
|
8
8
|
import { type WrittenBy } from './change.js';
|
|
9
9
|
import type { Open } from './open.js';
|
|
10
|
-
import { type BinaryLinkAnswer, type CallResult, type HeldBinaryAnswer, type HistoryAnswer, type QueueEntry, type Resolution } from './outcome.js';
|
|
10
|
+
import { type AttachAnswer, type BinaryLinkAnswer, type CallResult, type HeldBinaryAnswer, type HeldShownAnswer, type HistoryAnswer, type QueueEntry, type Resolution } from './outcome.js';
|
|
11
11
|
import { type Recovery } from './recovery.js';
|
|
12
12
|
import { type SaveRefusal } from './save.js';
|
|
13
13
|
import { type RoomDraft, type RoomDraftParts, type RoomDraftWrite } from './room-draft.js';
|
|
14
14
|
import { type SyncStatus } from './status.js';
|
|
15
15
|
import { type RuntimeShell } from './durability.js';
|
|
16
|
-
import { type CodeAvailability, type Persistence, type Readiness, type
|
|
16
|
+
import { type CodeAvailability, type Persistence, type Readiness, type Space } from './readiness.js';
|
|
17
17
|
import type { RuntimeDatabase } from './tables.js';
|
|
18
18
|
import { type NarrowedView, type PortReach, type RuntimeView } from './reach.js';
|
|
19
19
|
export type AppTypedSelection = {
|
|
@@ -54,6 +54,7 @@ export type MdRuntimeOptions = {
|
|
|
54
54
|
authorization?: Authorization;
|
|
55
55
|
signal?: AbortSignal;
|
|
56
56
|
recovery?: Recovery;
|
|
57
|
+
usableWhenHeld?: readonly string[];
|
|
57
58
|
};
|
|
58
59
|
export type SaveResult = {
|
|
59
60
|
outcome: 'saved';
|
|
@@ -83,6 +84,8 @@ export type PresentationSurface = {
|
|
|
83
84
|
export type BinaryFileSurface = {
|
|
84
85
|
read(room: string, path: string, revision?: string): Promise<HeldBinaryAnswer>;
|
|
85
86
|
link(room: string, path: string, revision?: string): Promise<BinaryLinkAnswer>;
|
|
87
|
+
show(room: string, path: string, revision?: string): Promise<HeldShownAnswer>;
|
|
88
|
+
attach(room: string, file: File): Promise<AttachAnswer>;
|
|
86
89
|
part(file: string, part: number): Promise<Uint8Array | null>;
|
|
87
90
|
};
|
|
88
91
|
export type HistoryQuery = {
|
|
@@ -91,7 +94,7 @@ export type HistoryQuery = {
|
|
|
91
94
|
};
|
|
92
95
|
export type MdRuntime = {
|
|
93
96
|
loaded(): Promise<void>;
|
|
94
|
-
rooms(): readonly AppRoom[]
|
|
97
|
+
rooms(): Promise<readonly AppRoom[]>;
|
|
95
98
|
query: {
|
|
96
99
|
(query: DocumentQuery): Promise<DocumentResult | PendingResult>;
|
|
97
100
|
(query: GroupQuery): Promise<GroupResult | PendingResult>;
|
|
@@ -121,6 +124,7 @@ export type MdRuntime = {
|
|
|
121
124
|
(topic: 'sync-status'): Promise<Observation<SyncStatus>>;
|
|
122
125
|
(topic: 'service-mode'): Promise<Observation<ServiceMode>>;
|
|
123
126
|
(topic: 'member'): Promise<Observation<Member | null>>;
|
|
127
|
+
(topic: 'authority-changes'): Promise<Observation<number>>;
|
|
124
128
|
(topic: 'query', query: DocumentQuery): Promise<Observation<DocumentResult | PendingResult>>;
|
|
125
129
|
(topic: 'query', query: GroupQuery): Promise<Observation<GroupResult | PendingResult>>;
|
|
126
130
|
(topic: 'queue', locator: string): Promise<Observation<readonly QueueEntry[]>>;
|
|
@@ -132,19 +136,16 @@ export type MdRuntime = {
|
|
|
132
136
|
};
|
|
133
137
|
reauthorize(): Promise<void>;
|
|
134
138
|
};
|
|
135
|
-
export type RuntimeTopic = 'rooms' | 'readiness' | 'connection-refusal' | 'storage-loss' | 'sync-status' | 'service-mode' | 'member' | 'query' | 'queue' | 'room-drafts' | 'presentation' | 'conversation' | 'conversations' | 'agents';
|
|
139
|
+
export type RuntimeTopic = 'rooms' | 'readiness' | 'connection-refusal' | 'storage-loss' | 'sync-status' | 'service-mode' | 'member' | 'authority-changes' | 'query' | 'queue' | 'room-drafts' | 'presentation' | 'conversation' | 'conversations' | 'agents';
|
|
136
140
|
export type ReadinessPort = {
|
|
137
141
|
readonly target: string;
|
|
138
142
|
readonly code: CodeAvailability;
|
|
139
143
|
readonly space: Space | null;
|
|
140
|
-
readonly search: SearchObligation;
|
|
141
144
|
};
|
|
142
145
|
export type ComposedRuntime = RuntimeView & {
|
|
143
146
|
seed(entry: EntrySeed): void;
|
|
144
147
|
stop(): Promise<void>;
|
|
145
|
-
lose(locators: readonly string[]): Promise<void>;
|
|
146
148
|
persisted(answer: Persistence): void;
|
|
147
|
-
shown(onScreen: boolean): void;
|
|
148
149
|
within(reach: PortReach | null, port: ReadinessPort): NarrowedView;
|
|
149
150
|
};
|
|
150
151
|
export declare function composeRuntime(options: MdRuntimeOptions): ComposedRuntime;
|
package/dist/connection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|