@agentshouse/mdruntime 0.1.0-alpha.5 → 0.1.0-alpha.50
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/AGENTS.md +210 -0
- package/README.md +44 -0
- package/dist/adapter.d.ts +253 -19
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +2 -1
- package/dist/adapter.js.map +1 -1
- package/dist/attachment.d.ts +3 -0
- package/dist/attachment.d.ts.map +1 -0
- package/dist/attachment.js +11 -0
- package/dist/attachment.js.map +1 -0
- package/dist/bootstrap.d.ts +7 -6
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +30 -10
- package/dist/bootstrap.js.map +1 -1
- package/dist/change-set.d.ts +33 -0
- package/dist/change-set.d.ts.map +1 -0
- package/dist/change-set.js +95 -0
- package/dist/change-set.js.map +1 -0
- package/dist/change.d.ts +10 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js.map +1 -1
- package/dist/client.d.ts +75 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +237 -0
- package/dist/client.js.map +1 -0
- package/dist/collection.d.ts +26 -12
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +78 -31
- package/dist/collection.js.map +1 -1
- package/dist/connection.d.ts +85 -28
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1756 -510
- package/dist/connection.js.map +1 -1
- package/dist/conversation.d.ts +79 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +635 -0
- package/dist/conversation.js.map +1 -0
- package/dist/durability.d.ts +8 -3
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +8 -62
- package/dist/durability.js.map +1 -1
- package/dist/file.d.ts +20 -0
- package/dist/file.d.ts.map +1 -0
- package/dist/file.js +149 -0
- package/dist/file.js.map +1 -0
- package/dist/host.d.ts +14 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +213 -0
- package/dist/host.js.map +1 -0
- package/dist/identity.d.ts +3 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +23 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +15 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/memory.d.ts +19 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +283 -24
- package/dist/memory.js.map +1 -1
- package/dist/model.d.ts +55 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +36 -0
- package/dist/model.js.map +1 -0
- package/dist/observation.d.ts +25 -0
- package/dist/observation.d.ts.map +1 -0
- package/dist/observation.js +92 -0
- package/dist/observation.js.map +1 -0
- package/dist/outcome.d.ts +22 -18
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +1 -11
- package/dist/outcome.js.map +1 -1
- package/dist/overlay.d.ts +9 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +145 -6
- package/dist/overlay.js.map +1 -1
- package/dist/paths.d.ts +0 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +0 -4
- package/dist/paths.js.map +1 -1
- package/dist/query.d.ts +213 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +470 -0
- package/dist/query.js.map +1 -0
- package/dist/read-side.d.ts +14 -0
- package/dist/read-side.d.ts.map +1 -0
- package/dist/read-side.js +457 -0
- package/dist/read-side.js.map +1 -0
- package/dist/refresh.d.ts +4 -4
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +40 -10
- package/dist/refresh.js.map +1 -1
- package/dist/replica.d.ts +27 -4
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +255 -13
- package/dist/replica.js.map +1 -1
- package/dist/room-draft.d.ts +124 -0
- package/dist/room-draft.d.ts.map +1 -0
- package/dist/room-draft.js +406 -0
- package/dist/room-draft.js.map +1 -0
- package/dist/rows.d.ts +41 -0
- package/dist/rows.d.ts.map +1 -0
- package/dist/rows.js +102 -0
- package/dist/rows.js.map +1 -0
- package/dist/save.d.ts +11 -2
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +116 -128
- package/dist/save.js.map +1 -1
- package/dist/search.d.ts +61 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +155 -0
- package/dist/search.js.map +1 -0
- package/dist/status.d.ts +9 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +5 -4
- package/dist/status.js.map +1 -1
- package/dist/store.d.ts +90 -18
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +492 -67
- package/dist/store.js.map +1 -1
- package/dist/transfer.d.ts +5 -0
- package/dist/transfer.d.ts.map +1 -1
- package/dist/transfer.js.map +1 -1
- package/dist/wire.d.ts +64 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +145 -0
- package/dist/wire.js.map +1 -0
- package/package.json +15 -13
package/dist/overlay.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { apply, parse, serialize } from '@agentshouse/mdmodel';
|
|
2
|
+
export function sameChange(left, right) {
|
|
3
|
+
if (left === undefined || right === undefined) return left === right;
|
|
4
|
+
return left.time === right.time && left.author?.kind === right.author?.kind && left.author?.id === right.author?.id && left.author?.name === right.author?.name;
|
|
5
|
+
}
|
|
2
6
|
const EMPTY_FRONTMATTER = '---\n---\n';
|
|
3
7
|
function at(path, name) {
|
|
4
8
|
return `${path} ${name}`;
|
|
@@ -83,14 +87,21 @@ function relocate(staged, from, to) {
|
|
|
83
87
|
} else {
|
|
84
88
|
return;
|
|
85
89
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
+
moveHead(staged, from, to);
|
|
91
|
+
}
|
|
92
|
+
function moveHead(heads, from, to) {
|
|
93
|
+
const revision = heads.revisions[from];
|
|
94
|
+
const change = heads.changes[from];
|
|
95
|
+
delete heads.revisions[from];
|
|
96
|
+
delete heads.changes[from];
|
|
97
|
+
delete heads.changes[to];
|
|
98
|
+
if (revision !== undefined) heads.revisions[to] = revision;
|
|
99
|
+
if (change !== undefined) heads.changes[to] = change;
|
|
90
100
|
}
|
|
91
101
|
function erase(staged, path) {
|
|
92
102
|
delete staged.documents[path];
|
|
93
103
|
delete staged.revisions[path];
|
|
104
|
+
delete staged.changes[path];
|
|
94
105
|
staged.binaryTargets.delete(path);
|
|
95
106
|
}
|
|
96
107
|
function stage(staged, change, priors) {
|
|
@@ -99,7 +110,8 @@ function stage(staged, change, priors) {
|
|
|
99
110
|
return;
|
|
100
111
|
}
|
|
101
112
|
if (change.kind === 'create') {
|
|
102
|
-
staged.documents[change.path] = compose(change.fields, change.sections);
|
|
113
|
+
staged.documents[change.path] = 'content' in change ? change.content : compose(change.fields, change.sections);
|
|
114
|
+
delete staged.changes[change.path];
|
|
103
115
|
return;
|
|
104
116
|
}
|
|
105
117
|
if (change.kind === 'replace') {
|
|
@@ -121,6 +133,9 @@ export function overlay(base, queue) {
|
|
|
121
133
|
binaryTargets: new Set(base.binaryTargets),
|
|
122
134
|
revisions: {
|
|
123
135
|
...base.revisions
|
|
136
|
+
},
|
|
137
|
+
changes: {
|
|
138
|
+
...base.changes
|
|
124
139
|
}
|
|
125
140
|
};
|
|
126
141
|
for (const batch of queue){
|
|
@@ -132,7 +147,131 @@ export function overlay(base, queue) {
|
|
|
132
147
|
binaryTargets: [
|
|
133
148
|
...staged.binaryTargets
|
|
134
149
|
].sort(),
|
|
135
|
-
revisions: staged.revisions
|
|
150
|
+
revisions: staged.revisions,
|
|
151
|
+
changes: staged.changes
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function pathsOf(batch) {
|
|
155
|
+
return batch.changes.flatMap((change)=>change.kind === 'move' ? [
|
|
156
|
+
change.path,
|
|
157
|
+
change.to
|
|
158
|
+
] : [
|
|
159
|
+
change.path
|
|
160
|
+
]);
|
|
161
|
+
}
|
|
162
|
+
export function sameLayerText(left, right) {
|
|
163
|
+
const paths = Object.keys(left.documents);
|
|
164
|
+
return paths.length === Object.keys(right.documents).length && paths.every((path)=>left.documents[path] === right.documents[path]) && left.binaryTargets.length === right.binaryTargets.length && left.binaryTargets.every((path)=>right.binaryTargets.includes(path));
|
|
165
|
+
}
|
|
166
|
+
function replayHeads(base, queue) {
|
|
167
|
+
const heads = {
|
|
168
|
+
revisions: {
|
|
169
|
+
...base.revisions
|
|
170
|
+
},
|
|
171
|
+
changes: {
|
|
172
|
+
...base.changes
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
for (const batch of queue){
|
|
176
|
+
for (const change of batch.changes){
|
|
177
|
+
if (change.kind === 'remove') {
|
|
178
|
+
delete heads.revisions[change.path];
|
|
179
|
+
delete heads.changes[change.path];
|
|
180
|
+
} else if (change.kind === 'create') {
|
|
181
|
+
delete heads.changes[change.path];
|
|
182
|
+
} else if (change.kind === 'move') {
|
|
183
|
+
moveHead(heads, change.path, change.to);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return heads;
|
|
188
|
+
}
|
|
189
|
+
export function overlayChanged(base, queue, previousBase, previousQueue, previousVisible) {
|
|
190
|
+
const before = previousQueue.map((batch)=>JSON.stringify(batch));
|
|
191
|
+
const after = queue.map((batch)=>JSON.stringify(batch));
|
|
192
|
+
if (before.length === after.length && before.every((id, index)=>id === after[index]) && sameLayerText(base, previousBase)) {
|
|
193
|
+
return {
|
|
194
|
+
documents: previousVisible.documents,
|
|
195
|
+
binaryTargets: previousVisible.binaryTargets,
|
|
196
|
+
...replayHeads(base, queue)
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const affected = new Set();
|
|
200
|
+
const paths = new Set([
|
|
201
|
+
...Object.keys(base.documents),
|
|
202
|
+
...Object.keys(previousBase.documents),
|
|
203
|
+
...Object.keys(base.revisions),
|
|
204
|
+
...Object.keys(previousBase.revisions),
|
|
205
|
+
...Object.keys(base.changes),
|
|
206
|
+
...Object.keys(previousBase.changes),
|
|
207
|
+
...base.binaryTargets,
|
|
208
|
+
...previousBase.binaryTargets
|
|
209
|
+
]);
|
|
210
|
+
for (const path of paths){
|
|
211
|
+
if (base.documents[path] !== previousBase.documents[path] || base.revisions[path] !== previousBase.revisions[path] || !sameChange(base.changes[path], previousBase.changes[path]) || base.binaryTargets.includes(path) !== previousBase.binaryTargets.includes(path)) affected.add(path);
|
|
212
|
+
}
|
|
213
|
+
const oldIds = new Set(before);
|
|
214
|
+
const newIds = new Set(after);
|
|
215
|
+
for (const batch of previousQueue){
|
|
216
|
+
if (!newIds.has(JSON.stringify(batch))) for (const path of pathsOf(batch))affected.add(path);
|
|
217
|
+
}
|
|
218
|
+
for (const batch of queue){
|
|
219
|
+
if (!oldIds.has(JSON.stringify(batch))) for (const path of pathsOf(batch))affected.add(path);
|
|
220
|
+
}
|
|
221
|
+
let expanded = true;
|
|
222
|
+
while(expanded){
|
|
223
|
+
expanded = false;
|
|
224
|
+
for (const batch of queue){
|
|
225
|
+
const touched = pathsOf(batch);
|
|
226
|
+
if (!touched.some((path)=>affected.has(path))) continue;
|
|
227
|
+
for (const path of touched){
|
|
228
|
+
if (affected.has(path)) continue;
|
|
229
|
+
affected.add(path);
|
|
230
|
+
expanded = true;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const documents = {};
|
|
235
|
+
const revisions = {};
|
|
236
|
+
const changes = {};
|
|
237
|
+
for (const path of affected){
|
|
238
|
+
if (base.documents[path] !== undefined) documents[path] = base.documents[path];
|
|
239
|
+
if (base.revisions[path] !== undefined) revisions[path] = base.revisions[path];
|
|
240
|
+
if (base.changes[path] !== undefined) changes[path] = base.changes[path];
|
|
241
|
+
}
|
|
242
|
+
const staged = overlay({
|
|
243
|
+
documents,
|
|
244
|
+
revisions,
|
|
245
|
+
changes,
|
|
246
|
+
binaryTargets: base.binaryTargets.filter((path)=>affected.has(path))
|
|
247
|
+
}, queue.filter((batch)=>pathsOf(batch).some((path)=>affected.has(path))));
|
|
248
|
+
const mergedDocuments = {
|
|
249
|
+
...previousVisible.documents
|
|
250
|
+
};
|
|
251
|
+
const mergedRevisions = {
|
|
252
|
+
...previousVisible.revisions
|
|
253
|
+
};
|
|
254
|
+
const mergedChanges = {
|
|
255
|
+
...previousVisible.changes
|
|
256
|
+
};
|
|
257
|
+
const mergedTargets = new Set(previousVisible.binaryTargets);
|
|
258
|
+
for (const path of affected){
|
|
259
|
+
delete mergedDocuments[path];
|
|
260
|
+
delete mergedRevisions[path];
|
|
261
|
+
delete mergedChanges[path];
|
|
262
|
+
mergedTargets.delete(path);
|
|
263
|
+
}
|
|
264
|
+
Object.assign(mergedDocuments, staged.documents);
|
|
265
|
+
Object.assign(mergedRevisions, staged.revisions);
|
|
266
|
+
Object.assign(mergedChanges, staged.changes);
|
|
267
|
+
for (const path of staged.binaryTargets)mergedTargets.add(path);
|
|
268
|
+
return {
|
|
269
|
+
documents: mergedDocuments,
|
|
270
|
+
revisions: mergedRevisions,
|
|
271
|
+
changes: mergedChanges,
|
|
272
|
+
binaryTargets: [
|
|
273
|
+
...mergedTargets
|
|
274
|
+
].sort()
|
|
136
275
|
};
|
|
137
276
|
}
|
|
138
277
|
|
package/dist/overlay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/overlay.ts"],"sourcesContent":["import { apply, parse, serialize, type Document } from '@agentshouse/mdmodel';\nimport type { Change, ChangeBatch, Precondition } from './change.js';\n\nexport type Layer = {\n documents: Readonly<Record<string, string>>;\n binaryTargets: readonly string[];\n revisions: Readonly<Record<string, string>>;\n};\n\ntype Staged = {\n documents: Record<string, string>;\n binaryTargets: Set<string>;\n revisions: Record<string, string>;\n};\n\ntype Priors = {\n field(path: string, name: string): unknown;\n section(path: string, name: string): string;\n preamble(path: string): string;\n};\n\nconst EMPTY_FRONTMATTER = '---\\n---\\n';\n\nfunction at(path: string, name: string) {\n return `${path} ${name}`;\n}\n\nfunction priorsOf(preconditions: readonly Precondition[]): Priors {\n const fields = new Map<string, unknown>();\n const sections = new Map<string, string>();\n const preambles = new Map<string, string>();\n for (const precondition of preconditions) {\n if (precondition.kind === 'field') {\n fields.set(at(precondition.path, precondition.name), precondition.value);\n }\n if (precondition.kind === 'section') {\n sections.set(at(precondition.path, precondition.name), precondition.value);\n }\n if (precondition.kind === 'preamble') {\n preambles.set(precondition.path, precondition.value);\n }\n }\n return {\n field: (path, name) => fields.get(at(path, name)),\n section: (path, name) => sections.get(at(path, name)) ?? '',\n preamble: (path) => preambles.get(path) ?? '',\n };\n}\n\nfunction compose(\n fields: Readonly<Record<string, unknown>>,\n sections: Readonly<Record<string, string>>,\n): string {\n const body = Object.entries(sections)\n .map(([name, value]) => `\\n## ${name}\\n${value}`)\n .join('');\n const skeleton = `${EMPTY_FRONTMATTER}${body}`;\n const opened = parse(skeleton);\n if (!opened.ok) return skeleton;\n let document: Document = opened.document;\n for (const [name, value] of Object.entries(fields)) {\n const next = apply(document, { kind: 'field', name, value, prior: undefined });\n if (next.outcome === 'applied') document = next.document;\n }\n return serialize(document);\n}\n\nfunction edited(document: Document, change: Change, priors: Priors) {\n if (change.kind === 'field') {\n return apply(document, {\n kind: 'field',\n name: change.name,\n value: change.value,\n prior: priors.field(change.path, change.name),\n });\n }\n if (change.kind === 'preamble') {\n return apply(document, {\n kind: 'preamble',\n value: change.value,\n prior: priors.preamble(change.path),\n });\n }\n if (change.kind !== 'section') return null;\n return apply(document, {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: priors.section(change.path, change.name),\n });\n}\n\nfunction edit(staged: Staged, change: Change, priors: Priors) {\n const text = staged.documents[change.path];\n if (text === undefined) return;\n const parsed = parse(text, change.path);\n if (!parsed.ok) return;\n const next = edited(parsed.document, change, priors);\n if (next?.outcome === 'applied') staged.documents[change.path] = serialize(next.document);\n}\n\nfunction relocate(staged: Staged, from: string, to: string) {\n const text = staged.documents[from];\n if (text !== undefined) {\n delete staged.documents[from];\n staged.documents[to] = text;\n } else if (staged.binaryTargets.delete(from)) {\n staged.binaryTargets.add(to);\n } else {\n return;\n }\n const revision = staged.revisions[from];\n if (revision === undefined) return;\n delete staged.revisions[from];\n staged.revisions[to] = revision;\n}\n\nfunction erase(staged: Staged, path: string) {\n delete staged.documents[path];\n delete staged.revisions[path];\n staged.binaryTargets.delete(path);\n}\n\nfunction stage(staged: Staged, change: Change, priors: Priors) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n edit(staged, change, priors);\n return;\n }\n if (change.kind === 'create') {\n staged.documents[change.path] = compose(change.fields, change.sections);\n return;\n }\n if (change.kind === 'replace') {\n if (staged.documents[change.path] === undefined) return;\n staged.documents[change.path] = change.content;\n return;\n }\n if (change.kind === 'move') {\n relocate(staged, change.path, change.to);\n return;\n }\n erase(staged, change.path);\n}\n\nexport function overlay(base: Layer, queue: readonly ChangeBatch[]): Layer {\n const staged: Staged = {\n documents: { ...base.documents },\n binaryTargets: new Set(base.binaryTargets),\n revisions: { ...base.revisions },\n };\n for (const batch of queue) {\n const priors = priorsOf(batch.preconditions);\n for (const change of batch.changes) stage(staged, change, priors);\n }\n return {\n documents: staged.documents,\n binaryTargets: [...staged.binaryTargets].sort(),\n revisions: staged.revisions,\n };\n}\n"],"names":["apply","parse","serialize","EMPTY_FRONTMATTER","at","path","name","priorsOf","preconditions","fields","Map","sections","preambles","precondition","kind","set","value","field","get","section","preamble","compose","body","Object","entries","map","join","skeleton","opened","ok","document","next","prior","undefined","outcome","edited","change","priors","edit","staged","text","documents","parsed","relocate","from","to","binaryTargets","delete","add","revision","revisions","erase","stage","content","overlay","base","queue","Set","batch","changes","sort"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/overlay.ts"],"sourcesContent":["import { apply, parse, serialize, type Document } from '@agentshouse/mdmodel';\nimport type { HeadChange } from './adapter.js';\nimport type { Change, ChangeBatch, Precondition } from './change.js';\n\nexport type Heads = {\n revisions: Readonly<Record<string, string>>;\n changes: Readonly<Record<string, HeadChange>>;\n};\n\nexport type Layer = Heads & {\n documents: Readonly<Record<string, string>>;\n binaryTargets: readonly string[];\n};\n\nexport function sameChange(left: HeadChange | undefined, right: HeadChange | undefined): boolean {\n if (left === undefined || right === undefined) return left === right;\n return (\n left.time === right.time &&\n left.author?.kind === right.author?.kind &&\n left.author?.id === right.author?.id &&\n left.author?.name === right.author?.name\n );\n}\n\ntype HeldHeads = { revisions: Record<string, string>; changes: Record<string, HeadChange> };\n\ntype Staged = HeldHeads & {\n documents: Record<string, string>;\n binaryTargets: Set<string>;\n};\n\ntype Priors = {\n field(path: string, name: string): unknown;\n section(path: string, name: string): string;\n preamble(path: string): string;\n};\n\nconst EMPTY_FRONTMATTER = '---\\n---\\n';\n\nfunction at(path: string, name: string) {\n return `${path} ${name}`;\n}\n\nfunction priorsOf(preconditions: readonly Precondition[]): Priors {\n const fields = new Map<string, unknown>();\n const sections = new Map<string, string>();\n const preambles = new Map<string, string>();\n for (const precondition of preconditions) {\n if (precondition.kind === 'field') {\n fields.set(at(precondition.path, precondition.name), precondition.value);\n }\n if (precondition.kind === 'section') {\n sections.set(at(precondition.path, precondition.name), precondition.value);\n }\n if (precondition.kind === 'preamble') {\n preambles.set(precondition.path, precondition.value);\n }\n }\n return {\n field: (path, name) => fields.get(at(path, name)),\n section: (path, name) => sections.get(at(path, name)) ?? '',\n preamble: (path) => preambles.get(path) ?? '',\n };\n}\n\nfunction compose(\n fields: Readonly<Record<string, unknown>>,\n sections: Readonly<Record<string, string>>,\n): string {\n const body = Object.entries(sections)\n .map(([name, value]) => `\\n## ${name}\\n${value}`)\n .join('');\n const skeleton = `${EMPTY_FRONTMATTER}${body}`;\n const opened = parse(skeleton);\n if (!opened.ok) return skeleton;\n let document: Document = opened.document;\n for (const [name, value] of Object.entries(fields)) {\n const next = apply(document, { kind: 'field', name, value, prior: undefined });\n if (next.outcome === 'applied') document = next.document;\n }\n return serialize(document);\n}\n\nfunction edited(document: Document, change: Change, priors: Priors) {\n if (change.kind === 'field') {\n return apply(document, {\n kind: 'field',\n name: change.name,\n value: change.value,\n prior: priors.field(change.path, change.name),\n });\n }\n if (change.kind === 'preamble') {\n return apply(document, {\n kind: 'preamble',\n value: change.value,\n prior: priors.preamble(change.path),\n });\n }\n if (change.kind !== 'section') return null;\n return apply(document, {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: priors.section(change.path, change.name),\n });\n}\n\nfunction edit(staged: Staged, change: Change, priors: Priors) {\n const text = staged.documents[change.path];\n if (text === undefined) return;\n const parsed = parse(text, change.path);\n if (!parsed.ok) return;\n const next = edited(parsed.document, change, priors);\n if (next?.outcome === 'applied') staged.documents[change.path] = serialize(next.document);\n}\n\nfunction relocate(staged: Staged, from: string, to: string) {\n const text = staged.documents[from];\n if (text !== undefined) {\n delete staged.documents[from];\n staged.documents[to] = text;\n } else if (staged.binaryTargets.delete(from)) {\n staged.binaryTargets.add(to);\n } else {\n return;\n }\n moveHead(staged, from, to);\n}\n\nfunction moveHead(heads: HeldHeads, from: string, to: string) {\n const revision = heads.revisions[from];\n const change = heads.changes[from];\n delete heads.revisions[from];\n delete heads.changes[from];\n delete heads.changes[to];\n if (revision !== undefined) heads.revisions[to] = revision;\n if (change !== undefined) heads.changes[to] = change;\n}\n\nfunction erase(staged: Staged, path: string) {\n delete staged.documents[path];\n delete staged.revisions[path];\n delete staged.changes[path];\n staged.binaryTargets.delete(path);\n}\n\nfunction stage(staged: Staged, change: Change, priors: Priors) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n edit(staged, change, priors);\n return;\n }\n if (change.kind === 'create') {\n staged.documents[change.path] =\n 'content' in change ? change.content : compose(change.fields, change.sections);\n delete staged.changes[change.path];\n return;\n }\n if (change.kind === 'replace') {\n if (staged.documents[change.path] === undefined) return;\n staged.documents[change.path] = change.content;\n return;\n }\n if (change.kind === 'move') {\n relocate(staged, change.path, change.to);\n return;\n }\n erase(staged, change.path);\n}\n\nexport function overlay(base: Layer, queue: readonly ChangeBatch[]): Layer {\n const staged: Staged = {\n documents: { ...base.documents },\n binaryTargets: new Set(base.binaryTargets),\n revisions: { ...base.revisions },\n changes: { ...base.changes },\n };\n for (const batch of queue) {\n const priors = priorsOf(batch.preconditions);\n for (const change of batch.changes) stage(staged, change, priors);\n }\n return {\n documents: staged.documents,\n binaryTargets: [...staged.binaryTargets].sort(),\n revisions: staged.revisions,\n changes: staged.changes,\n };\n}\n\nfunction pathsOf(batch: ChangeBatch): readonly string[] {\n return batch.changes.flatMap((change) =>\n change.kind === 'move' ? [change.path, change.to] : [change.path],\n );\n}\n\nexport function sameLayerText(left: Layer, right: Layer): boolean {\n const paths = Object.keys(left.documents);\n return (\n paths.length === Object.keys(right.documents).length &&\n paths.every((path) => left.documents[path] === right.documents[path]) &&\n left.binaryTargets.length === right.binaryTargets.length &&\n left.binaryTargets.every((path) => right.binaryTargets.includes(path))\n );\n}\n\nfunction replayHeads(base: Heads, queue: readonly ChangeBatch[]): Heads {\n const heads: HeldHeads = { revisions: { ...base.revisions }, changes: { ...base.changes } };\n for (const batch of queue) {\n for (const change of batch.changes) {\n if (change.kind === 'remove') {\n delete heads.revisions[change.path];\n delete heads.changes[change.path];\n } else if (change.kind === 'create') {\n delete heads.changes[change.path];\n } else if (change.kind === 'move') {\n moveHead(heads, change.path, change.to);\n }\n }\n }\n return heads;\n}\n\nexport function overlayChanged(\n base: Layer,\n queue: readonly ChangeBatch[],\n previousBase: Layer,\n previousQueue: readonly ChangeBatch[],\n previousVisible: Layer,\n): Layer {\n const before = previousQueue.map((batch) => JSON.stringify(batch));\n const after = queue.map((batch) => JSON.stringify(batch));\n if (\n before.length === after.length &&\n before.every((id, index) => id === after[index]) &&\n sameLayerText(base, previousBase)\n ) {\n return {\n documents: previousVisible.documents,\n binaryTargets: previousVisible.binaryTargets,\n ...replayHeads(base, queue),\n };\n }\n const affected = new Set<string>();\n const paths = new Set([\n ...Object.keys(base.documents),\n ...Object.keys(previousBase.documents),\n ...Object.keys(base.revisions),\n ...Object.keys(previousBase.revisions),\n ...Object.keys(base.changes),\n ...Object.keys(previousBase.changes),\n ...base.binaryTargets,\n ...previousBase.binaryTargets,\n ]);\n for (const path of paths) {\n if (\n base.documents[path] !== previousBase.documents[path] ||\n base.revisions[path] !== previousBase.revisions[path] ||\n !sameChange(base.changes[path], previousBase.changes[path]) ||\n base.binaryTargets.includes(path) !== previousBase.binaryTargets.includes(path)\n )\n affected.add(path);\n }\n const oldIds = new Set(before);\n const newIds = new Set(after);\n for (const batch of previousQueue) {\n if (!newIds.has(JSON.stringify(batch))) for (const path of pathsOf(batch)) affected.add(path);\n }\n for (const batch of queue) {\n if (!oldIds.has(JSON.stringify(batch))) for (const path of pathsOf(batch)) affected.add(path);\n }\n let expanded = true;\n while (expanded) {\n expanded = false;\n for (const batch of queue) {\n const touched = pathsOf(batch);\n if (!touched.some((path) => affected.has(path))) continue;\n for (const path of touched) {\n if (affected.has(path)) continue;\n affected.add(path);\n expanded = true;\n }\n }\n }\n const documents: Record<string, string> = {};\n const revisions: Record<string, string> = {};\n const changes: Record<string, HeadChange> = {};\n for (const path of affected) {\n if (base.documents[path] !== undefined) documents[path] = base.documents[path];\n if (base.revisions[path] !== undefined) revisions[path] = base.revisions[path];\n if (base.changes[path] !== undefined) changes[path] = base.changes[path];\n }\n const staged = overlay(\n {\n documents,\n revisions,\n changes,\n binaryTargets: base.binaryTargets.filter((path) => affected.has(path)),\n },\n queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))),\n );\n const mergedDocuments = { ...previousVisible.documents };\n const mergedRevisions = { ...previousVisible.revisions };\n const mergedChanges = { ...previousVisible.changes };\n const mergedTargets = new Set(previousVisible.binaryTargets);\n for (const path of affected) {\n delete mergedDocuments[path];\n delete mergedRevisions[path];\n delete mergedChanges[path];\n mergedTargets.delete(path);\n }\n Object.assign(mergedDocuments, staged.documents);\n Object.assign(mergedRevisions, staged.revisions);\n Object.assign(mergedChanges, staged.changes);\n for (const path of staged.binaryTargets) mergedTargets.add(path);\n return {\n documents: mergedDocuments,\n revisions: mergedRevisions,\n changes: mergedChanges,\n binaryTargets: [...mergedTargets].sort(),\n };\n}\n"],"names":["apply","parse","serialize","sameChange","left","right","undefined","time","author","kind","id","name","EMPTY_FRONTMATTER","at","path","priorsOf","preconditions","fields","Map","sections","preambles","precondition","set","value","field","get","section","preamble","compose","body","Object","entries","map","join","skeleton","opened","ok","document","next","prior","outcome","edited","change","priors","edit","staged","text","documents","parsed","relocate","from","to","binaryTargets","delete","add","moveHead","heads","revision","revisions","changes","erase","stage","content","overlay","base","queue","Set","batch","sort","pathsOf","flatMap","sameLayerText","paths","keys","length","every","includes","replayHeads","overlayChanged","previousBase","previousQueue","previousVisible","before","JSON","stringify","after","index","affected","oldIds","newIds","has","expanded","touched","some","filter","mergedDocuments","mergedRevisions","mergedChanges","mergedTargets","assign"],"mappings":"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"}
|
package/dist/paths.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare function normalize(path: string): string | null;
|
|
2
|
-
export declare function resolve(from: string, reference: string): string | null;
|
|
3
2
|
export declare function relative(from: string, target: string): string;
|
|
4
3
|
export declare function beneath(prefix: string, path: string): boolean;
|
|
5
4
|
export declare function covered(prefixes: readonly string[], path: string): boolean;
|
package/dist/paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E"}
|
package/dist/paths.js
CHANGED
|
@@ -15,10 +15,6 @@ export function normalize(path) {
|
|
|
15
15
|
}
|
|
16
16
|
return parts.join('/');
|
|
17
17
|
}
|
|
18
|
-
export function resolve(from, reference) {
|
|
19
|
-
const base = dirname(from);
|
|
20
|
-
return normalize(base === '' ? reference : `${base}/${reference}`);
|
|
21
|
-
}
|
|
22
18
|
export function relative(from, target) {
|
|
23
19
|
const base = dirname(from).split('/').filter((part)=>part !== '');
|
|
24
20
|
const parts = target.split('/');
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/paths.ts"],"sourcesContent":["function dirname(path: string): string {\n const index = path.lastIndexOf('/');\n return index === -1 ? '' : path.slice(0, index);\n}\n\nexport function normalize(path: string): string | null {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (part === '' || part === '.') continue;\n if (part === '..') {\n if (parts.length === 0) return null;\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n return parts.join('/');\n}\n\nexport function
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/paths.ts"],"sourcesContent":["function dirname(path: string): string {\n const index = path.lastIndexOf('/');\n return index === -1 ? '' : path.slice(0, index);\n}\n\nexport function normalize(path: string): string | null {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (part === '' || part === '.') continue;\n if (part === '..') {\n if (parts.length === 0) return null;\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n return parts.join('/');\n}\n\nexport function relative(from: string, target: string): string {\n const base = dirname(from)\n .split('/')\n .filter((part) => part !== '');\n const parts = target.split('/');\n let shared = 0;\n while (shared < base.length && shared + 1 < parts.length && base[shared] === parts[shared]) {\n shared += 1;\n }\n const up = Array.from({ length: base.length - shared }, () => '..');\n return [...up, ...parts.slice(shared)].join('/');\n}\n\nexport function beneath(prefix: string, path: string): boolean {\n return path === prefix || path.startsWith(`${prefix}/`);\n}\n\nexport function covered(prefixes: readonly string[], path: string): boolean {\n return prefixes.some((prefix) => {\n const normalized = normalize(prefix);\n return normalized !== null && (normalized === '' || beneath(normalized, path));\n });\n}\n"],"names":["dirname","path","index","lastIndexOf","slice","normalize","parts","part","split","length","pop","push","join","relative","from","target","base","filter","shared","up","Array","beneath","prefix","startsWith","covered","prefixes","some","normalized"],"mappings":"AAAA,SAASA,QAAQC,IAAY;IAC3B,MAAMC,QAAQD,KAAKE,WAAW,CAAC;IAC/B,OAAOD,UAAU,CAAC,IAAI,KAAKD,KAAKG,KAAK,CAAC,GAAGF;AAC3C;AAEA,OAAO,SAASG,UAAUJ,IAAY;IACpC,MAAMK,QAAkB,EAAE;IAC1B,KAAK,MAAMC,QAAQN,KAAKO,KAAK,CAAC,KAAM;QAClC,IAAID,SAAS,MAAMA,SAAS,KAAK;QACjC,IAAIA,SAAS,MAAM;YACjB,IAAID,MAAMG,MAAM,KAAK,GAAG,OAAO;YAC/BH,MAAMI,GAAG;YACT;QACF;QACAJ,MAAMK,IAAI,CAACJ;IACb;IACA,OAAOD,MAAMM,IAAI,CAAC;AACpB;AAEA,OAAO,SAASC,SAASC,IAAY,EAAEC,MAAc;IACnD,MAAMC,OAAOhB,QAAQc,MAClBN,KAAK,CAAC,KACNS,MAAM,CAAC,CAACV,OAASA,SAAS;IAC7B,MAAMD,QAAQS,OAAOP,KAAK,CAAC;IAC3B,IAAIU,SAAS;IACb,MAAOA,SAASF,KAAKP,MAAM,IAAIS,SAAS,IAAIZ,MAAMG,MAAM,IAAIO,IAAI,CAACE,OAAO,KAAKZ,KAAK,CAACY,OAAO,CAAE;QAC1FA,UAAU;IACZ;IACA,MAAMC,KAAKC,MAAMN,IAAI,CAAC;QAAEL,QAAQO,KAAKP,MAAM,GAAGS;IAAO,GAAG,IAAM;IAC9D,OAAO;WAAIC;WAAOb,MAAMF,KAAK,CAACc;KAAQ,CAACN,IAAI,CAAC;AAC9C;AAEA,OAAO,SAASS,QAAQC,MAAc,EAAErB,IAAY;IAClD,OAAOA,SAASqB,UAAUrB,KAAKsB,UAAU,CAAC,GAAGD,OAAO,CAAC,CAAC;AACxD;AAEA,OAAO,SAASE,QAAQC,QAA2B,EAAExB,IAAY;IAC/D,OAAOwB,SAASC,IAAI,CAAC,CAACJ;QACpB,MAAMK,aAAatB,UAAUiB;QAC7B,OAAOK,eAAe,QAASA,CAAAA,eAAe,MAAMN,QAAQM,YAAY1B,KAAI;IAC9E;AACF"}
|
package/dist/query.d.ts
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { Definition } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { HeadChange } from './adapter.js';
|
|
3
|
+
export type Value = string | number | boolean | null;
|
|
4
|
+
export type Predicate = Value | {
|
|
5
|
+
$eq: Value;
|
|
6
|
+
} | {
|
|
7
|
+
$ne: Value;
|
|
8
|
+
} | {
|
|
9
|
+
$in: readonly Value[];
|
|
10
|
+
} | {
|
|
11
|
+
$nin: readonly Value[];
|
|
12
|
+
} | {
|
|
13
|
+
$gt?: Value;
|
|
14
|
+
$gte?: Value;
|
|
15
|
+
$lt?: Value;
|
|
16
|
+
$lte?: Value;
|
|
17
|
+
} | {
|
|
18
|
+
$all: readonly Value[];
|
|
19
|
+
} | {
|
|
20
|
+
$size: number;
|
|
21
|
+
} | {
|
|
22
|
+
$exists: boolean;
|
|
23
|
+
};
|
|
24
|
+
export type Where = {
|
|
25
|
+
$and?: readonly Where[];
|
|
26
|
+
$or?: readonly Where[];
|
|
27
|
+
[field: string]: Predicate | readonly Where[] | undefined;
|
|
28
|
+
};
|
|
29
|
+
export type Related = {
|
|
30
|
+
types?: readonly string[];
|
|
31
|
+
where?: Where;
|
|
32
|
+
pathPrefix?: string;
|
|
33
|
+
};
|
|
34
|
+
export type Filter = {
|
|
35
|
+
rooms?: readonly string[];
|
|
36
|
+
types?: readonly string[];
|
|
37
|
+
where?: Where;
|
|
38
|
+
pathPrefix?: string;
|
|
39
|
+
hop?: Related & {
|
|
40
|
+
field: string;
|
|
41
|
+
};
|
|
42
|
+
backlinks?: Related & {
|
|
43
|
+
field?: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export type Key = 'room' | 'path' | 'type' | {
|
|
47
|
+
field: string;
|
|
48
|
+
};
|
|
49
|
+
export type Select = 'all' | {
|
|
50
|
+
fields?: 'all' | readonly string[];
|
|
51
|
+
sections?: 'all' | readonly string[];
|
|
52
|
+
preamble?: true;
|
|
53
|
+
markdown?: true;
|
|
54
|
+
backlinks?: true;
|
|
55
|
+
change?: true;
|
|
56
|
+
};
|
|
57
|
+
export type OrderOptions = {
|
|
58
|
+
nulls?: 'first' | 'last';
|
|
59
|
+
stringSort?: 'lexical' | 'locale';
|
|
60
|
+
locale?: string;
|
|
61
|
+
localeOptions?: Readonly<Record<string, unknown>>;
|
|
62
|
+
};
|
|
63
|
+
export type Direction = 'asc' | 'desc';
|
|
64
|
+
export type DocumentQuery = Filter & {
|
|
65
|
+
select: Select;
|
|
66
|
+
orderBy?: readonly ({
|
|
67
|
+
by: Key;
|
|
68
|
+
direction?: Direction;
|
|
69
|
+
} & OrderOptions)[];
|
|
70
|
+
limit?: number;
|
|
71
|
+
};
|
|
72
|
+
export type GroupQuery = Filter & {
|
|
73
|
+
groupBy: readonly Exclude<Key, 'path'>[];
|
|
74
|
+
orderBy?: readonly {
|
|
75
|
+
by: 'count' | Exclude<Key, 'path'>;
|
|
76
|
+
direction?: Direction;
|
|
77
|
+
}[];
|
|
78
|
+
limit?: number;
|
|
79
|
+
};
|
|
80
|
+
export type LocalQuery = DocumentQuery | GroupQuery;
|
|
81
|
+
export type Backlink = {
|
|
82
|
+
path: string;
|
|
83
|
+
type: string;
|
|
84
|
+
field: string;
|
|
85
|
+
};
|
|
86
|
+
export type QueryDocument = {
|
|
87
|
+
room: string;
|
|
88
|
+
path: string;
|
|
89
|
+
type?: string;
|
|
90
|
+
fields?: Readonly<Record<string, unknown>>;
|
|
91
|
+
sections?: Readonly<Record<string, string>>;
|
|
92
|
+
preamble?: string;
|
|
93
|
+
markdown?: string;
|
|
94
|
+
backlinks?: readonly Backlink[];
|
|
95
|
+
change?: HeadChange | null;
|
|
96
|
+
};
|
|
97
|
+
export type QueryGroup = {
|
|
98
|
+
key: readonly unknown[];
|
|
99
|
+
count: number;
|
|
100
|
+
};
|
|
101
|
+
export type DocumentResult = {
|
|
102
|
+
documents: readonly QueryDocument[];
|
|
103
|
+
};
|
|
104
|
+
export type GroupResult = {
|
|
105
|
+
groups: readonly QueryGroup[];
|
|
106
|
+
};
|
|
107
|
+
export type QueryResult = DocumentResult | GroupResult;
|
|
108
|
+
export type QueryErrorCode = 'invalid-query' | 'unknown-type' | 'unknown-field' | 'wrong-kind';
|
|
109
|
+
export type RoomFacts = {
|
|
110
|
+
locator: string;
|
|
111
|
+
available: boolean;
|
|
112
|
+
types: readonly Definition[];
|
|
113
|
+
};
|
|
114
|
+
export type HeldRooms = {
|
|
115
|
+
listed: boolean;
|
|
116
|
+
rooms: readonly RoomFacts[];
|
|
117
|
+
};
|
|
118
|
+
export type Test = {
|
|
119
|
+
op: 'eq';
|
|
120
|
+
value: Value;
|
|
121
|
+
} | {
|
|
122
|
+
op: 'ne';
|
|
123
|
+
value: Value;
|
|
124
|
+
} | {
|
|
125
|
+
op: 'in';
|
|
126
|
+
values: readonly Value[];
|
|
127
|
+
} | {
|
|
128
|
+
op: 'nin';
|
|
129
|
+
values: readonly Value[];
|
|
130
|
+
} | {
|
|
131
|
+
op: 'range';
|
|
132
|
+
bounds: readonly (readonly ['gt' | 'gte' | 'lt' | 'lte', Value])[];
|
|
133
|
+
} | {
|
|
134
|
+
op: 'all';
|
|
135
|
+
values: readonly Value[];
|
|
136
|
+
} | {
|
|
137
|
+
op: 'size';
|
|
138
|
+
size: number;
|
|
139
|
+
} | {
|
|
140
|
+
op: 'exists';
|
|
141
|
+
exists: boolean;
|
|
142
|
+
};
|
|
143
|
+
export type Condition = {
|
|
144
|
+
every: readonly Condition[];
|
|
145
|
+
} | {
|
|
146
|
+
some: readonly Condition[];
|
|
147
|
+
} | {
|
|
148
|
+
field: string;
|
|
149
|
+
test: Test;
|
|
150
|
+
};
|
|
151
|
+
export type Scope = {
|
|
152
|
+
types: readonly string[] | null;
|
|
153
|
+
where: Condition | null;
|
|
154
|
+
pathPrefix: string | null;
|
|
155
|
+
};
|
|
156
|
+
export type KeyPlan = {
|
|
157
|
+
of: 'room';
|
|
158
|
+
} | {
|
|
159
|
+
of: 'path';
|
|
160
|
+
} | {
|
|
161
|
+
of: 'type';
|
|
162
|
+
} | {
|
|
163
|
+
of: 'field';
|
|
164
|
+
field: string;
|
|
165
|
+
};
|
|
166
|
+
export type DocumentShape = {
|
|
167
|
+
kind: 'documents';
|
|
168
|
+
fields: 'all' | readonly string[] | null;
|
|
169
|
+
sections: 'all' | readonly string[] | null;
|
|
170
|
+
preamble: boolean;
|
|
171
|
+
markdown: boolean;
|
|
172
|
+
backlinks: boolean;
|
|
173
|
+
change: boolean;
|
|
174
|
+
orderBy: readonly {
|
|
175
|
+
key: KeyPlan;
|
|
176
|
+
options: OrderOptions & {
|
|
177
|
+
direction: Direction;
|
|
178
|
+
};
|
|
179
|
+
}[];
|
|
180
|
+
};
|
|
181
|
+
export type GroupShape = {
|
|
182
|
+
kind: 'groups';
|
|
183
|
+
groupBy: readonly KeyPlan[];
|
|
184
|
+
orderBy: readonly {
|
|
185
|
+
by: 'count' | number;
|
|
186
|
+
direction: Direction;
|
|
187
|
+
}[];
|
|
188
|
+
};
|
|
189
|
+
export type Plan = {
|
|
190
|
+
rooms: readonly string[] | null;
|
|
191
|
+
root: Scope;
|
|
192
|
+
hop: (Scope & {
|
|
193
|
+
field: string;
|
|
194
|
+
}) | null;
|
|
195
|
+
backlinks: (Scope & {
|
|
196
|
+
field: string | null;
|
|
197
|
+
}) | null;
|
|
198
|
+
shape: DocumentShape | GroupShape;
|
|
199
|
+
limit: number | null;
|
|
200
|
+
};
|
|
201
|
+
export declare class QueryError extends Error {
|
|
202
|
+
constructor(code: QueryErrorCode, at: string, problem: string);
|
|
203
|
+
}
|
|
204
|
+
type Entries = Readonly<Record<string, unknown>>;
|
|
205
|
+
export declare function invalid(at: string, problem: string): never;
|
|
206
|
+
export declare function plain(value: unknown): value is Entries;
|
|
207
|
+
export declare function known(value: Entries, allowed: readonly string[], at: string): void;
|
|
208
|
+
export declare function planOf(input: unknown, facts: HeldRooms): Plan;
|
|
209
|
+
export declare function limitOf(input: unknown): number | null;
|
|
210
|
+
export declare function filterOf(input: unknown, facts: HeldRooms): Plan;
|
|
211
|
+
export declare function identityOf(plan: Plan): string;
|
|
212
|
+
export {};
|
|
213
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|