@agentshouse/mdruntime 0.1.0-c3903a68dcbbf → 0.1.0-c4478f1a5ac2a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/AGENTS.md +196 -97
  2. package/README.md +22 -12
  3. package/dist/adapter.d.ts +149 -64
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +1 -9
  6. package/dist/attached-model.d.ts +11 -0
  7. package/dist/attached-model.d.ts.map +1 -0
  8. package/dist/attached-model.js +47 -0
  9. package/dist/attempt.d.ts +16 -0
  10. package/dist/attempt.d.ts.map +1 -0
  11. package/dist/attempt.js +70 -0
  12. package/dist/binary.d.ts +23 -0
  13. package/dist/binary.d.ts.map +1 -0
  14. package/dist/binary.js +8 -0
  15. package/dist/bootstrap.d.ts +20 -6
  16. package/dist/bootstrap.d.ts.map +1 -1
  17. package/dist/bootstrap.js +110 -38
  18. package/dist/change-set.d.ts +2 -0
  19. package/dist/change-set.d.ts.map +1 -1
  20. package/dist/change-set.js +49 -21
  21. package/dist/change.d.ts +15 -0
  22. package/dist/change.d.ts.map +1 -1
  23. package/dist/change.js +26 -1
  24. package/dist/chat/acts.d.ts +33 -0
  25. package/dist/chat/acts.d.ts.map +1 -0
  26. package/dist/chat/acts.js +36 -0
  27. package/dist/chat/context.d.ts +3 -0
  28. package/dist/chat/context.d.ts.map +1 -0
  29. package/dist/chat/context.js +10 -0
  30. package/dist/chat/input.d.ts +9 -0
  31. package/dist/chat/input.d.ts.map +1 -0
  32. package/dist/chat/input.js +99 -0
  33. package/dist/chat/kit.d.ts +60 -0
  34. package/dist/chat/kit.d.ts.map +1 -0
  35. package/dist/chat/kit.js +123 -0
  36. package/dist/chat/lasting.d.ts +6 -0
  37. package/dist/chat/lasting.d.ts.map +1 -0
  38. package/dist/chat/lasting.js +19 -0
  39. package/dist/chat/list.d.ts +26 -0
  40. package/dist/chat/list.d.ts.map +1 -0
  41. package/dist/chat/list.js +62 -0
  42. package/dist/chat/markdown.d.ts +20 -0
  43. package/dist/chat/markdown.d.ts.map +1 -0
  44. package/dist/chat/markdown.js +188 -0
  45. package/dist/chat/message.d.ts +6 -0
  46. package/dist/chat/message.d.ts.map +1 -0
  47. package/dist/chat/message.js +192 -0
  48. package/dist/chat/messages.d.ts +21 -0
  49. package/dist/chat/messages.d.ts.map +1 -0
  50. package/dist/chat/messages.js +151 -0
  51. package/dist/chat/name.d.ts +6 -0
  52. package/dist/chat/name.d.ts.map +1 -0
  53. package/dist/chat/name.js +37 -0
  54. package/dist/chat/opened.d.ts +11 -0
  55. package/dist/chat/opened.d.ts.map +1 -0
  56. package/dist/chat/opened.js +17 -0
  57. package/dist/chat/overlay.d.ts +31 -0
  58. package/dist/chat/overlay.d.ts.map +1 -0
  59. package/dist/chat/overlay.js +97 -0
  60. package/dist/chat/parts.d.ts +57 -0
  61. package/dist/chat/parts.d.ts.map +1 -0
  62. package/dist/chat/parts.js +119 -0
  63. package/dist/chat/process.d.ts +20 -0
  64. package/dist/chat/process.d.ts.map +1 -0
  65. package/dist/chat/process.js +32 -0
  66. package/dist/chat/provider.d.ts +63 -0
  67. package/dist/chat/provider.d.ts.map +1 -0
  68. package/dist/chat/provider.js +620 -0
  69. package/dist/chat/question.d.ts +9 -0
  70. package/dist/chat/question.d.ts.map +1 -0
  71. package/dist/chat/question.js +80 -0
  72. package/dist/chat/questions.d.ts +31 -0
  73. package/dist/chat/questions.d.ts.map +1 -0
  74. package/dist/chat/questions.js +111 -0
  75. package/dist/chat/read.d.ts +5 -0
  76. package/dist/chat/read.d.ts.map +1 -0
  77. package/dist/chat/read.js +13 -0
  78. package/dist/chat/ready.d.ts +33 -0
  79. package/dist/chat/ready.d.ts.map +1 -0
  80. package/dist/chat/ready.js +91 -0
  81. package/dist/chat/style.d.ts +4 -0
  82. package/dist/chat/style.d.ts.map +1 -0
  83. package/dist/chat/style.js +302 -0
  84. package/dist/chat.d.ts +14 -0
  85. package/dist/chat.d.ts.map +1 -0
  86. package/dist/chat.js +8 -0
  87. package/dist/client.d.ts +23 -19
  88. package/dist/client.d.ts.map +1 -1
  89. package/dist/client.js +69 -32
  90. package/dist/collection.d.ts +21 -14
  91. package/dist/collection.d.ts.map +1 -1
  92. package/dist/collection.js +270 -32
  93. package/dist/connection.d.ts +36 -38
  94. package/dist/connection.d.ts.map +1 -1
  95. package/dist/connection.js +1605 -841
  96. package/dist/conversation.d.ts +43 -19
  97. package/dist/conversation.d.ts.map +1 -1
  98. package/dist/conversation.js +523 -210
  99. package/dist/entry.d.ts +17 -0
  100. package/dist/entry.d.ts.map +1 -0
  101. package/dist/entry.js +156 -0
  102. package/dist/expectation.d.ts +21 -0
  103. package/dist/expectation.d.ts.map +1 -0
  104. package/dist/expectation.js +70 -0
  105. package/dist/failure.d.ts +13 -0
  106. package/dist/failure.d.ts.map +1 -0
  107. package/dist/failure.js +19 -0
  108. package/dist/fence.d.ts +6 -0
  109. package/dist/fence.d.ts.map +1 -0
  110. package/dist/fence.js +10 -0
  111. package/dist/host.d.ts +11 -3
  112. package/dist/host.d.ts.map +1 -1
  113. package/dist/host.js +54 -69
  114. package/dist/identity.d.ts +5 -0
  115. package/dist/identity.d.ts.map +1 -1
  116. package/dist/identity.js +19 -1
  117. package/dist/index.d.ts +12 -7
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +4 -1
  120. package/dist/memory.d.ts +15 -7
  121. package/dist/memory.d.ts.map +1 -1
  122. package/dist/memory.js +147 -47
  123. package/dist/model.d.ts +14 -12
  124. package/dist/model.d.ts.map +1 -1
  125. package/dist/model.js +15 -3
  126. package/dist/observation.d.ts +6 -1
  127. package/dist/observation.d.ts.map +1 -1
  128. package/dist/observation.js +38 -17
  129. package/dist/open.d.ts +2 -0
  130. package/dist/open.d.ts.map +1 -0
  131. package/dist/open.js +1 -0
  132. package/dist/outcome.d.ts +35 -22
  133. package/dist/outcome.d.ts.map +1 -1
  134. package/dist/outcome.js +42 -1
  135. package/dist/overlay.d.ts +15 -3
  136. package/dist/overlay.d.ts.map +1 -1
  137. package/dist/overlay.js +94 -77
  138. package/dist/paths.d.ts +0 -1
  139. package/dist/paths.d.ts.map +1 -1
  140. package/dist/paths.js +0 -16
  141. package/dist/query.d.ts +40 -6
  142. package/dist/query.d.ts.map +1 -1
  143. package/dist/query.js +78 -36
  144. package/dist/reach.d.ts +42 -0
  145. package/dist/reach.d.ts.map +1 -0
  146. package/dist/reach.js +294 -0
  147. package/dist/react.d.ts +41 -0
  148. package/dist/react.d.ts.map +1 -0
  149. package/dist/react.js +64 -0
  150. package/dist/read-side.d.ts +16 -5
  151. package/dist/read-side.d.ts.map +1 -1
  152. package/dist/read-side.js +405 -137
  153. package/dist/recovery.d.ts +25 -0
  154. package/dist/recovery.d.ts.map +1 -0
  155. package/dist/recovery.js +197 -0
  156. package/dist/refresh.d.ts +12 -1
  157. package/dist/refresh.d.ts.map +1 -1
  158. package/dist/refresh.js +45 -36
  159. package/dist/replica.d.ts +10 -7
  160. package/dist/replica.d.ts.map +1 -1
  161. package/dist/replica.js +122 -79
  162. package/dist/room-draft.d.ts +29 -9
  163. package/dist/room-draft.d.ts.map +1 -1
  164. package/dist/room-draft.js +137 -26
  165. package/dist/rows.d.ts +10 -14
  166. package/dist/rows.d.ts.map +1 -1
  167. package/dist/rows.js +85 -50
  168. package/dist/save.d.ts +32 -3
  169. package/dist/save.d.ts.map +1 -1
  170. package/dist/save.js +465 -93
  171. package/dist/search.d.ts +31 -8
  172. package/dist/search.d.ts.map +1 -1
  173. package/dist/search.js +109 -44
  174. package/dist/shared.d.ts +11 -0
  175. package/dist/shared.d.ts.map +1 -0
  176. package/dist/shared.js +368 -0
  177. package/dist/status.d.ts +2 -2
  178. package/dist/status.d.ts.map +1 -1
  179. package/dist/status.js +0 -8
  180. package/dist/store.d.ts +71 -32
  181. package/dist/store.d.ts.map +1 -1
  182. package/dist/store.js +509 -221
  183. package/dist/turn.d.ts +7 -0
  184. package/dist/turn.d.ts.map +1 -0
  185. package/dist/turn.js +45 -0
  186. package/dist/wire.d.ts +58 -19
  187. package/dist/wire.d.ts.map +1 -1
  188. package/dist/wire.js +65 -67
  189. package/package.json +31 -7
  190. package/dist/attachment.d.ts +0 -3
  191. package/dist/attachment.d.ts.map +0 -1
  192. package/dist/attachment.js +0 -8
package/dist/query.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import type { Definition } from '@agentshouse/mdmodel';
1
+ import { type Definition } from '@agentshouse/mdmodel';
2
2
  import type { HeadChange } from './adapter.js';
3
+ import type { BinaryFileRecord } from './binary.js';
3
4
  export type Value = string | number | boolean | null;
4
5
  export type Predicate = Value | {
5
6
  $eq: Value;
@@ -93,18 +94,44 @@ export type QueryDocument = {
93
94
  markdown?: string;
94
95
  backlinks?: readonly Backlink[];
95
96
  change?: HeadChange | null;
97
+ binaryFile?: BinaryFileRecord;
96
98
  };
97
99
  export type QueryGroup = {
98
100
  key: readonly unknown[];
99
101
  count: number;
100
102
  };
101
- export type DocumentResult = {
103
+ export type CoveredRoom = {
104
+ room: string;
105
+ generation: string;
106
+ current: boolean;
107
+ };
108
+ export type QueryCoverage = {
109
+ rooms: readonly CoveredRoom[];
110
+ indexes: readonly string[];
111
+ overlay: readonly string[];
112
+ };
113
+ export type Awaits = 'acquisition' | 'preparation' | 'index';
114
+ export type PendingRoom = {
115
+ room: string;
116
+ awaits: Awaits;
117
+ };
118
+ export type PendingResult = {
119
+ pending: readonly PendingRoom[];
120
+ };
121
+ export type DocumentRows = {
102
122
  documents: readonly QueryDocument[];
103
123
  };
104
- export type GroupResult = {
124
+ export type GroupRows = {
105
125
  groups: readonly QueryGroup[];
106
126
  };
107
- export type QueryResult = DocumentResult | GroupResult;
127
+ export type QueryRows = DocumentRows | GroupRows;
128
+ export type DocumentResult = DocumentRows & {
129
+ coverage: QueryCoverage;
130
+ };
131
+ export type GroupResult = GroupRows & {
132
+ coverage: QueryCoverage;
133
+ };
134
+ export type QueryResult = DocumentResult | GroupResult | PendingResult;
108
135
  export type QueryErrorCode = 'invalid-query' | 'unknown-type' | 'unknown-field' | 'wrong-kind';
109
136
  export type RoomFacts = {
110
137
  locator: string;
@@ -186,8 +213,13 @@ export type GroupShape = {
186
213
  direction: Direction;
187
214
  }[];
188
215
  };
216
+ export type PlanReach = {
217
+ rooms: readonly string[];
218
+ documents: readonly string[];
219
+ };
189
220
  export type Plan = {
190
221
  rooms: readonly string[] | null;
222
+ reach: PlanReach | null;
191
223
  root: Scope;
192
224
  hop: (Scope & {
193
225
  field: string;
@@ -199,15 +231,17 @@ export type Plan = {
199
231
  limit: number | null;
200
232
  };
201
233
  export declare class QueryError extends Error {
234
+ readonly code: QueryErrorCode;
235
+ readonly retryable = false;
202
236
  constructor(code: QueryErrorCode, at: string, problem: string);
203
237
  }
204
238
  type Entries = Readonly<Record<string, unknown>>;
205
239
  export declare function invalid(at: string, problem: string): never;
206
240
  export declare function plain(value: unknown): value is Entries;
207
241
  export declare function known(value: Entries, allowed: readonly string[], at: string): void;
208
- export declare function planOf(input: unknown, facts: HeldRooms): Plan;
242
+ export declare function planOf(input: unknown, facts: HeldRooms, reach?: PlanReach | null): Plan;
209
243
  export declare function limitOf(input: unknown): number | null;
210
- export declare function filterOf(input: unknown, facts: HeldRooms): Plan;
244
+ export declare function filterOf(input: unknown, facts: HeldRooms, reach?: PlanReach | null): Plan;
211
245
  export declare function identityOf(plan: Plan): string;
212
246
  export {};
213
247
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
package/dist/query.js CHANGED
@@ -1,7 +1,12 @@
1
+ import { pointerFacts, } from '@agentshouse/mdmodel';
2
+ import { referenceField } from './model.js';
1
3
  import { normalize } from './paths.js';
2
4
  export class QueryError extends Error {
5
+ code;
6
+ retryable = false;
3
7
  constructor(code, at, problem) {
4
8
  super(`${code} at ${at}: ${problem}`);
9
+ this.code = code;
5
10
  }
6
11
  }
7
12
  const RANGE = ['$gt', '$gte', '$lt', '$lte'];
@@ -11,6 +16,7 @@ const RELATED = ['types', 'where', 'pathPrefix', 'field'];
11
16
  const PARTS = ['fields', 'sections', 'preamble', 'markdown', 'backlinks', 'change'];
12
17
  const ORDER = ['by', 'direction', 'nulls', 'stringSort', 'locale', 'localeOptions'];
13
18
  const CALENDAR_DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
19
+ const STRAY_ESCAPE = /~(?![01])/u;
14
20
  export function invalid(at, problem) {
15
21
  throw new QueryError('invalid-query', at, problem);
16
22
  }
@@ -68,23 +74,29 @@ function calendarDate(value) {
68
74
  const date = new Date(Date.UTC(year, month - 1, day));
69
75
  return (date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day);
70
76
  }
71
- function fits(spec, value) {
72
- const item = spec.kind === 'list' ? spec.of : spec;
73
- if (item.kind === 'number')
77
+ function itemOf(facts) {
78
+ return facts.type === 'array' ? facts.items : facts;
79
+ }
80
+ function fits(facts, value) {
81
+ const item = itemOf(facts);
82
+ if (item?.type === undefined)
83
+ return true;
84
+ if (item.values !== undefined)
85
+ return item.values.includes(value);
86
+ if (item.type === 'number')
74
87
  return typeof value === 'number';
75
- if (typeof value !== 'string')
88
+ if (item.type === 'integer')
89
+ return Number.isSafeInteger(value);
90
+ if (item.type === 'boolean')
91
+ return typeof value === 'boolean';
92
+ if (item.type !== 'string' || typeof value !== 'string')
76
93
  return false;
77
- if (item.kind === 'enum')
78
- return item.values.includes(value);
79
- if (item.kind === 'date')
80
- return calendarDate(value);
81
- if (item.kind === 'reference')
94
+ if (item.reference !== undefined)
82
95
  return value !== '' && normalize(value) === value;
96
+ if (item.format === 'date')
97
+ return calendarDate(value);
83
98
  return true;
84
99
  }
85
- function reference(spec) {
86
- return spec.kind === 'reference' || (spec.kind === 'list' && spec.of.kind === 'reference');
87
- }
88
100
  function typing(facts, rooms, types, at) {
89
101
  const read = rooms === null ? facts.rooms : facts.rooms.filter((room) => rooms.includes(room.locator));
90
102
  const acquiring = !facts.listed &&
@@ -102,22 +114,46 @@ function typing(facts, rooms, types, at) {
102
114
  types: types === null ? declared : declared.filter((type) => types.includes(type.name)),
103
115
  };
104
116
  }
105
- function specs(typed, field, at) {
106
- const declared = typed.types.flatMap((type) => Object.hasOwn(type.fields, field) ? [type.fields[field]] : []);
117
+ function pointer(input, at) {
118
+ if (typeof input !== 'string' || !input.startsWith('/') || STRAY_ESCAPE.test(input)) {
119
+ invalid(at, 'expects a JSON Pointer');
120
+ }
121
+ return input;
122
+ }
123
+ function specs(typed, input, at) {
124
+ const field = pointer(input, at);
125
+ const declared = typed.types.flatMap((type) => {
126
+ const spec = pointerFacts(type, field);
127
+ return spec === undefined ? [] : [spec];
128
+ });
107
129
  if (declared.length === 0 && !typed.untyped) {
108
130
  throw new QueryError('unknown-field', at, `no MD Type it reads declares ${field}`);
109
131
  }
110
- return declared;
132
+ if (!declared.some((spec) => spec.conditional))
133
+ return declared;
134
+ return declared.map((spec) => ({
135
+ facts: { prose: false },
136
+ through: several(spec),
137
+ conditional: true,
138
+ }));
139
+ }
140
+ function several(spec) {
141
+ return spec.through || spec.facts.type === 'array';
142
+ }
143
+ function single(spec) {
144
+ return spec.facts.type !== undefined && spec.facts.type !== 'array';
145
+ }
146
+ function every(declared, holds) {
147
+ return declared.length > 0 && declared.every(holds);
111
148
  }
112
149
  function kind(declared, checked, at) {
113
- if (checked === null || declared.length === 0 || declared.some((spec) => fits(spec, checked))) {
150
+ if (checked === null ||
151
+ declared.length === 0 ||
152
+ declared.some((spec) => fits(spec.facts, checked))) {
114
153
  return;
115
154
  }
116
155
  throw new QueryError('wrong-kind', at, `${JSON.stringify(checked)} is not of its field's kind`);
117
156
  }
118
- function listed(declared, list) {
119
- return declared.length > 0 && declared.every((spec) => (spec.kind === 'list') === list);
120
- }
121
157
  function test(declared, input, at) {
122
158
  if (!plain(input)) {
123
159
  const equal = value(input, at);
@@ -131,8 +167,11 @@ function test(declared, input, at) {
131
167
  const stray = operators.find((operator) => !RANGE.includes(operator));
132
168
  if (stray !== undefined)
133
169
  invalid(place(at, stray), 'cannot join a range');
134
- if (listed(declared, true))
170
+ if (every(declared, (spec) => spec.facts.type === 'array'))
135
171
  invalid(at, 'a range on a list');
172
+ if (every(declared, (spec) => spec.facts.type === 'boolean' || spec.facts.type === 'object')) {
173
+ throw new QueryError('wrong-kind', at, 'its field does not compare in order');
174
+ }
136
175
  return {
137
176
  op: 'range',
138
177
  bounds: RANGE.filter((operator) => operators.includes(operator)).map((operator) => {
@@ -165,7 +204,7 @@ function test(declared, input, at) {
165
204
  return { op: 'nin', values: compared };
166
205
  if (compared.includes(null))
167
206
  invalid(where, 'a list holds no null');
168
- if (listed(declared, false))
207
+ if (every(declared, single))
169
208
  invalid(where, 'the field is not a list');
170
209
  return { op: 'all', values: compared };
171
210
  }
@@ -173,7 +212,7 @@ function test(declared, input, at) {
173
212
  if (!Number.isSafeInteger(operand) || operand < 0) {
174
213
  invalid(where, 'expects a nonnegative integer');
175
214
  }
176
- if (listed(declared, false))
215
+ if (every(declared, single))
177
216
  invalid(where, 'the field is not a list');
178
217
  return { op: 'size', size: operand };
179
218
  }
@@ -186,7 +225,7 @@ function condition(typed, input, at) {
186
225
  invalid(at, 'expects an object of field predicates');
187
226
  const conditions = [];
188
227
  for (const name of Object.keys(input).sort()) {
189
- const where = place(at, name);
228
+ const where = name.startsWith('/') ? `${at}${name}` : place(at, name);
190
229
  const entry = input[name];
191
230
  if (name === '$and' || name === '$or') {
192
231
  const nested = list(entry, where).map((item, index) => condition(typed, item, `${where}[${index}]`));
@@ -215,19 +254,19 @@ function scope(facts, rooms, input, at) {
215
254
  pathPrefix: input.pathPrefix === undefined ? null : directory(input.pathPrefix, place(at, 'pathPrefix')),
216
255
  };
217
256
  }
218
- function referenceField(typed, field, at) {
219
- if (typeof field !== 'string')
220
- invalid(at, 'expects a field name');
257
+ function referenceName(typed, field, at) {
221
258
  const declared = specs(typed, field, at);
222
- if (declared.length > 0 && !declared.some(reference))
259
+ if (declared.length > 0 &&
260
+ !declared.some((spec) => spec.conditional || referenceField(spec.facts))) {
223
261
  invalid(at, 'not a reference field');
262
+ }
224
263
  return field;
225
264
  }
226
265
  function hopOf(facts, rooms, root, input) {
227
266
  if (!plain(input))
228
267
  invalid('hop', 'expects an object');
229
268
  known(input, RELATED, 'hop');
230
- const field = referenceField(root, input.field, 'hop.field');
269
+ const field = referenceName(root, input.field, 'hop.field');
231
270
  const { types, where, pathPrefix } = scope(facts, rooms, input, 'hop');
232
271
  return { types, where, pathPrefix, field };
233
272
  }
@@ -236,14 +275,16 @@ function backlinksOf(facts, rooms, input) {
236
275
  invalid('backlinks', 'expects an object');
237
276
  known(input, RELATED, 'backlinks');
238
277
  const { typed, types, where, pathPrefix } = scope(facts, rooms, input, 'backlinks');
239
- const field = input.field === undefined ? null : referenceField(typed, input.field, 'backlinks.field');
278
+ const field = input.field === undefined ? null : referenceName(typed, input.field, 'backlinks.field');
240
279
  return { types, where, pathPrefix, field };
241
280
  }
242
281
  function keyPlan(typed, input, at, path) {
243
282
  if (input === 'room' || input === 'type' || (path && input === 'path'))
244
283
  return { of: input };
245
- if (plain(input) && typeof input.field === 'string' && Object.keys(input).length === 1) {
246
- specs(typed, input.field, place(at, 'field'));
284
+ if (plain(input) && Object.hasOwn(input, 'field') && Object.keys(input).length === 1) {
285
+ if (specs(typed, input.field, place(at, 'field')).some(several)) {
286
+ invalid(place(at, 'field'), 'a path that can hold several values');
287
+ }
247
288
  return { of: 'field', field: input.field };
248
289
  }
249
290
  return invalid(at, path ? 'expects room, path, type or a field' : 'expects room, type or a field');
@@ -301,10 +342,10 @@ function parts(typed, input, at, fields) {
301
342
  return 'all';
302
343
  const named = list(input, at);
303
344
  named.forEach((name, index) => {
304
- if (typeof name !== 'string')
305
- invalid(`${at}[${index}]`, 'expects a name');
306
345
  if (fields)
307
346
  specs(typed, name, `${at}[${index}]`);
347
+ else if (typeof name !== 'string')
348
+ invalid(`${at}[${index}]`, 'expects a name');
308
349
  });
309
350
  return named;
310
351
  }
@@ -372,7 +413,7 @@ function groupShape(typed, input) {
372
413
  });
373
414
  return { kind: 'groups', groupBy, orderBy };
374
415
  }
375
- export function planOf(input, facts) {
416
+ export function planOf(input, facts, reach = null) {
376
417
  if (!plain(input))
377
418
  invalid('query', 'expects a query object');
378
419
  const grouped = input.groupBy !== undefined;
@@ -386,6 +427,7 @@ export function planOf(input, facts) {
386
427
  const { typed, ...root } = scope(facts, rooms, input, '');
387
428
  return {
388
429
  rooms,
430
+ reach,
389
431
  root,
390
432
  hop: input.hop === undefined ? null : hopOf(facts, rooms, typed, input.hop),
391
433
  backlinks: input.backlinks === undefined ? null : backlinksOf(facts, rooms, input.backlinks),
@@ -401,11 +443,11 @@ export function limitOf(input) {
401
443
  }
402
444
  return input;
403
445
  }
404
- export function filterOf(input, facts) {
446
+ export function filterOf(input, facts, reach = null) {
405
447
  if (!plain(input))
406
448
  invalid('documents', 'expects a filter object');
407
449
  known(input, FILTER, '');
408
- return planOf({ ...input, select: {} }, facts);
450
+ return planOf({ ...input, select: {} }, facts, reach);
409
451
  }
410
452
  function canonical(value) {
411
453
  if (Array.isArray(value))
@@ -0,0 +1,42 @@
1
+ import type { ReferrerScope } from './adapter.js';
2
+ import type { MdRuntime, RuntimeTopic } from './connection.js';
3
+ import type { Plan, PlanReach, QueryResult } from './query.js';
4
+ import type { SearchResult } from './search.js';
5
+ export type ReachedDocument = {
6
+ readonly room: string;
7
+ readonly path: string;
8
+ };
9
+ export type PortReach = {
10
+ readonly rooms: readonly string[];
11
+ readonly documents: readonly ReachedDocument[];
12
+ readonly conversations: boolean;
13
+ };
14
+ export type Deliver = (message: unknown) => void;
15
+ export type Watch = (topic: RuntimeTopic, input: readonly unknown[], deliver: Deliver) => () => void;
16
+ export type RuntimeView = {
17
+ md: MdRuntime;
18
+ watch: Watch;
19
+ };
20
+ export type NarrowedView = RuntimeView & {
21
+ narrow(reach: PortReach | null): void;
22
+ };
23
+ export type Reachable = RuntimeView & {
24
+ plan(input: unknown, reach: PortReach | null): Plan;
25
+ query(plan: Plan): Promise<QueryResult>;
26
+ watchPlan(plan: Plan, deliver: (message: unknown) => void): () => void;
27
+ search(input: unknown, reach: PortReach | null): Promise<SearchResult>;
28
+ referrerScope(referrer: unknown): ReferrerScope | null;
29
+ };
30
+ export declare function holds(reach: PortReach | null, room: string): boolean;
31
+ export declare function governs(reach: PortReach | null, room: {
32
+ readonly locator: string;
33
+ readonly typedSelection: {
34
+ roots: readonly string[];
35
+ } | null;
36
+ }): {
37
+ readonly collection: boolean;
38
+ readonly selection: boolean;
39
+ };
40
+ export declare function planReach(reach: PortReach | null): PlanReach | null;
41
+ export declare function narrowed(runtime: Reachable, given: PortReach | null): NarrowedView;
42
+ //# sourceMappingURL=reach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAW,SAAS,EAAe,YAAY,EAAc,MAAM,iBAAiB,CAAC;AAajG,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAU/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEjD,MAAM,MAAM,KAAK,GAAG,CAClB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,OAAO,EAAE,OAAO,KACb,MAAM,IAAI,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IAAE,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG;IACpC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;IACpD,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACvE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvE,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAAC;CACxD,CAAC;AAyBF,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMpE;AAMD,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,IAAI,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GAC/F;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAU/D;AA2BD,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CASnE;AA8ED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,YAAY,CA4KlF"}