lowlander 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -78
- package/build/client/client.d.ts +8 -1
- package/build/client/client.js +44 -22
- package/build/client/client.js.map +1 -1
- package/build/dashboard/client/crud.d.ts +16 -0
- package/build/dashboard/client/crud.js +525 -0
- package/build/dashboard/client/crud.js.map +1 -0
- package/build/dashboard/client/main.d.ts +1 -0
- package/build/dashboard/client/main.js +615 -0
- package/build/dashboard/client/main.js.map +1 -0
- package/build/dashboard/client/shim-server.d.ts +3 -0
- package/build/dashboard/client/shim-server.js +2 -0
- package/build/dashboard/client/shim-server.js.map +1 -0
- package/build/dashboard/dashboard.html +20 -0
- package/build/dashboard/index.d.ts +18 -0
- package/build/dashboard/index.d.ts.map +1 -0
- package/build/dashboard/index.js +50 -0
- package/build/dashboard/index.js.map +1 -0
- package/build/dashboard/serve.d.ts +18 -0
- package/build/dashboard/serve.d.ts.map +1 -0
- package/build/dashboard/serve.js +53 -0
- package/build/dashboard/serve.js.map +1 -0
- package/build/dashboard/server.d.ts +93 -0
- package/build/dashboard/server.d.ts.map +1 -0
- package/build/dashboard/server.js +384 -0
- package/build/dashboard/server.js.map +1 -0
- package/build/examples/helloworld/.edinburgh/commit_worker.log +4927 -0
- package/build/examples/helloworld/.edinburgh/data.mdb +0 -0
- package/build/examples/helloworld/.edinburgh/lock.mdb +0 -0
- package/build/examples/helloworld/client/assets/style.css +0 -45
- package/build/examples/helloworld/client/index.html +3 -14
- package/build/examples/helloworld/client/js/base.css +1 -0
- package/build/examples/helloworld/client/js/base.d.ts +1 -4
- package/build/examples/helloworld/client/js/base.js +8 -71
- package/build/examples/helloworld/client/js/base.js.map +1 -1
- package/build/examples/helloworld/server/api.d.ts +8 -2
- package/build/examples/helloworld/server/api.d.ts.map +1 -1
- package/build/examples/helloworld/server/api.js +29 -8
- package/build/examples/helloworld/server/api.js.map +1 -1
- package/build/examples/helloworld/server/main.d.ts +1 -1
- package/build/examples/helloworld/server/main.d.ts.map +1 -1
- package/build/examples/helloworld/server/main.js +6 -17
- package/build/examples/helloworld/server/main.js.map +1 -1
- package/build/server/password.d.ts +10 -0
- package/build/server/password.d.ts.map +1 -0
- package/build/server/password.js +38 -0
- package/build/server/password.js.map +1 -0
- package/build/server/server.d.ts +5 -3
- package/build/server/server.d.ts.map +1 -1
- package/build/server/server.js +65 -7
- package/build/server/server.js.map +1 -1
- package/build/server/wshandler.d.ts +7 -1
- package/build/server/wshandler.d.ts.map +1 -1
- package/build/server/wshandler.js +54 -14
- package/build/server/wshandler.js.map +1 -1
- package/build/tsconfig.client.tsbuildinfo +1 -1
- package/build/tsconfig.server.tsbuildinfo +1 -1
- package/client/client.ts +47 -24
- package/dashboard/build-bundle.ts +44 -0
- package/dashboard/client/crud.ts +634 -0
- package/dashboard/client/index.html +12 -0
- package/dashboard/client/main.ts +554 -0
- package/dashboard/client/shim-server.ts +5 -0
- package/dashboard/index.ts +49 -0
- package/dashboard/server.ts +399 -0
- package/package.json +26 -11
- package/server/server.ts +61 -10
- package/server/wshandler.ts +57 -13
- package/skill/SKILL.md +82 -51
- package/skill/getStreamTypesForModel.md +7 -0
- package/skill/Connection_pruneCommitIds.md +0 -8
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import * as E from 'edinburgh';
|
|
2
|
+
import { timingSafeEqual } from 'crypto';
|
|
3
|
+
import { ServerProxy, getStreamTypesForModel, warpsocket } from '../server/server.js';
|
|
4
|
+
import { getMainApi, getPassword } from '../server/wshandler.js';
|
|
5
|
+
// `modelRegistry` is a documented export of edinburgh's models module but is
|
|
6
|
+
// not re-exported from the package entry. Reach it by URL relative to the
|
|
7
|
+
// resolved package main — works in both Bun (.ts) and Node (built .js).
|
|
8
|
+
const _modelsModule = await import(new URL('./models.js', import.meta.resolve('edinburgh')).href);
|
|
9
|
+
const modelRegistry = _modelsModule.modelRegistry;
|
|
10
|
+
function passwordOk(provided) {
|
|
11
|
+
const expected = getPassword();
|
|
12
|
+
if (typeof provided !== 'string' || provided.length !== expected.length)
|
|
13
|
+
return false;
|
|
14
|
+
return timingSafeEqual(Buffer.from(provided), Buffer.from(expected));
|
|
15
|
+
}
|
|
16
|
+
function describeType(type) {
|
|
17
|
+
const kind = type.kind;
|
|
18
|
+
const linked = type.getLinkedModel();
|
|
19
|
+
const info = {
|
|
20
|
+
kind,
|
|
21
|
+
display: type.toString(),
|
|
22
|
+
linkedModel: linked?.tableName,
|
|
23
|
+
};
|
|
24
|
+
if (kind === 'array' || kind === 'set') {
|
|
25
|
+
info.inner = describeType(type.inner);
|
|
26
|
+
}
|
|
27
|
+
else if (kind === 'record') {
|
|
28
|
+
info.innerValue = describeType(type.inner);
|
|
29
|
+
}
|
|
30
|
+
else if (kind === 'or') {
|
|
31
|
+
const choices = type.choices;
|
|
32
|
+
info.choices = choices.map(describeType);
|
|
33
|
+
const isUndefLiteral = (t) => t.kind === 'literal' && t.literalValue === 'undefined';
|
|
34
|
+
const nonUndef = info.choices.filter(c => !isUndefLiteral(c));
|
|
35
|
+
const hasUndef = info.choices.some(c => isUndefLiteral(c));
|
|
36
|
+
if (hasUndef && nonUndef.length === 1) {
|
|
37
|
+
info.isOptional = true;
|
|
38
|
+
info.inner = nonUndef[0];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else if (kind === 'literal') {
|
|
42
|
+
const val = type.value;
|
|
43
|
+
info.literalValue = val === undefined ? 'undefined' : JSON.stringify(val);
|
|
44
|
+
}
|
|
45
|
+
return info;
|
|
46
|
+
}
|
|
47
|
+
function parseValueFromJson(type, json) {
|
|
48
|
+
if (json === null || json === undefined)
|
|
49
|
+
return undefined;
|
|
50
|
+
const kind = type.kind;
|
|
51
|
+
switch (kind) {
|
|
52
|
+
case 'string':
|
|
53
|
+
case 'id':
|
|
54
|
+
return typeof json === 'string' ? json : String(json);
|
|
55
|
+
case 'number':
|
|
56
|
+
return typeof json === 'number' ? json : Number(json);
|
|
57
|
+
case 'boolean':
|
|
58
|
+
return json === true || json === 'true' || json === 1;
|
|
59
|
+
case 'dateTime':
|
|
60
|
+
return new Date(json);
|
|
61
|
+
case 'link': {
|
|
62
|
+
const Model = type.getLinkedModel();
|
|
63
|
+
const pk = json?.__ref ? json.pk : json;
|
|
64
|
+
const pkArgs = Array.isArray(pk) ? pk : [pk];
|
|
65
|
+
const instance = Model.get(...pkArgs);
|
|
66
|
+
if (!instance)
|
|
67
|
+
throw new Error(`Linked ${Model.tableName} record not found: ${JSON.stringify(pk)}`);
|
|
68
|
+
return instance;
|
|
69
|
+
}
|
|
70
|
+
case 'array': {
|
|
71
|
+
const inner = type.inner;
|
|
72
|
+
if (!Array.isArray(json))
|
|
73
|
+
return [];
|
|
74
|
+
return json.map((v) => parseValueFromJson(inner, v));
|
|
75
|
+
}
|
|
76
|
+
case 'set': {
|
|
77
|
+
const inner = type.inner;
|
|
78
|
+
if (!Array.isArray(json))
|
|
79
|
+
return new Set();
|
|
80
|
+
return new Set(json.map((v) => parseValueFromJson(inner, v)));
|
|
81
|
+
}
|
|
82
|
+
case 'record': {
|
|
83
|
+
const inner = type.inner;
|
|
84
|
+
if (!json || typeof json !== 'object' || Array.isArray(json))
|
|
85
|
+
return {};
|
|
86
|
+
const result = {};
|
|
87
|
+
for (const [k, v] of Object.entries(json))
|
|
88
|
+
result[k] = parseValueFromJson(inner, v);
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
case 'or': {
|
|
92
|
+
const choices = type.choices;
|
|
93
|
+
const isUndefLiteral = (t) => t.kind === 'literal' && t.value === undefined;
|
|
94
|
+
if (json === null || json === undefined) {
|
|
95
|
+
if (choices.some(isUndefLiteral))
|
|
96
|
+
return undefined;
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const nonUndef = choices.filter(c => !isUndefLiteral(c));
|
|
100
|
+
if (nonUndef.length === 1)
|
|
101
|
+
return parseValueFromJson(nonUndef[0], json);
|
|
102
|
+
return json;
|
|
103
|
+
}
|
|
104
|
+
case 'literal':
|
|
105
|
+
return type.value;
|
|
106
|
+
default:
|
|
107
|
+
return json;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function describeIndex(index) {
|
|
111
|
+
const fields = Array.from(index._indexFields.keys());
|
|
112
|
+
return {
|
|
113
|
+
fields,
|
|
114
|
+
fieldTypes: fields.map(f => describeType(index._indexFields.get(f))),
|
|
115
|
+
computed: !!index._computeFn,
|
|
116
|
+
kind: index._getTypeName(),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function describeModel(Model) {
|
|
120
|
+
const pkIdx = describeIndex(Model);
|
|
121
|
+
const pkFields = new Set(pkIdx.fields);
|
|
122
|
+
const fields = [];
|
|
123
|
+
for (const [name, cfg] of Object.entries(Model.fields)) {
|
|
124
|
+
fields.push({
|
|
125
|
+
name,
|
|
126
|
+
type: describeType(cfg.type),
|
|
127
|
+
description: cfg.description,
|
|
128
|
+
hasDefault: cfg.default !== undefined,
|
|
129
|
+
isPk: pkFields.has(name),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
const indexes = [{
|
|
133
|
+
name: '(primary)',
|
|
134
|
+
info: pkIdx,
|
|
135
|
+
}];
|
|
136
|
+
for (const [name, idx] of Object.entries(Model._secondaries || {})) {
|
|
137
|
+
indexes.push({ name, info: describeIndex(idx) });
|
|
138
|
+
}
|
|
139
|
+
const streamTypes = getStreamTypesForModel(Model).map((ST) => ({
|
|
140
|
+
id: ST.id,
|
|
141
|
+
fields: ST.fields,
|
|
142
|
+
cache: ST.cache,
|
|
143
|
+
}));
|
|
144
|
+
return {
|
|
145
|
+
tableName: Model.tableName,
|
|
146
|
+
fields,
|
|
147
|
+
indexes,
|
|
148
|
+
streamTypes,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function serializeValue(v, depth = 0) {
|
|
152
|
+
if (v === null || v === undefined)
|
|
153
|
+
return v;
|
|
154
|
+
if (v instanceof E.Model) {
|
|
155
|
+
const cls = v.constructor;
|
|
156
|
+
const tn = cls.tableName || cls.name;
|
|
157
|
+
const pkBytes = v.getPrimaryKey?.();
|
|
158
|
+
const pkArr = pkBytes && cls._pkToArray ? cls._pkToArray(pkBytes) : null;
|
|
159
|
+
const pk = pkArr ? (pkArr.length === 1 ? pkArr[0] : pkArr) : null;
|
|
160
|
+
return { __ref: tn, pk };
|
|
161
|
+
}
|
|
162
|
+
if (v instanceof Uint8Array)
|
|
163
|
+
return Array.from(v.slice(0, 64)).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
164
|
+
if (v instanceof Date)
|
|
165
|
+
return v.toISOString();
|
|
166
|
+
if (v instanceof Set)
|
|
167
|
+
return depth > 2 ? `Set(${v.size})` : Array.from(v).map(x => serializeValue(x, depth + 1));
|
|
168
|
+
if (Array.isArray(v))
|
|
169
|
+
return depth > 2 ? `Array(${v.length})` : v.map(x => serializeValue(x, depth + 1));
|
|
170
|
+
if (typeof v === 'object') {
|
|
171
|
+
if (depth > 2)
|
|
172
|
+
return '...';
|
|
173
|
+
const out = {};
|
|
174
|
+
for (const k of Object.keys(v))
|
|
175
|
+
out[k] = serializeValue(v[k], depth + 1);
|
|
176
|
+
return out;
|
|
177
|
+
}
|
|
178
|
+
return v;
|
|
179
|
+
}
|
|
180
|
+
function instanceToPlain(instance) {
|
|
181
|
+
const Model = instance.constructor;
|
|
182
|
+
const out = {};
|
|
183
|
+
for (const fieldName of Object.keys(Model.fields)) {
|
|
184
|
+
try {
|
|
185
|
+
out[fieldName] = serializeValue(instance[fieldName]);
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
out[fieldName] = `<error: ${err?.message || err}>`;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return out;
|
|
192
|
+
}
|
|
193
|
+
function modelByName(name) {
|
|
194
|
+
const Model = modelRegistry[name];
|
|
195
|
+
if (!Model)
|
|
196
|
+
throw new Error(`Unknown model: ${name}`);
|
|
197
|
+
return Model;
|
|
198
|
+
}
|
|
199
|
+
function findIndex(Model, indexName) {
|
|
200
|
+
if (indexName === '(primary)')
|
|
201
|
+
return Model;
|
|
202
|
+
const idx = Model._secondaries?.[indexName];
|
|
203
|
+
if (!idx)
|
|
204
|
+
throw new Error(`Unknown index ${indexName} on ${Model.tableName}`);
|
|
205
|
+
return idx;
|
|
206
|
+
}
|
|
207
|
+
// =====================================================================
|
|
208
|
+
class DashboardAPI {
|
|
209
|
+
listModels() {
|
|
210
|
+
return Object.keys(modelRegistry).sort().map(name => ({
|
|
211
|
+
tableName: name,
|
|
212
|
+
indexCount: 1 + Object.keys(modelRegistry[name]._secondaries || {}).length,
|
|
213
|
+
fieldCount: Object.keys(modelRegistry[name].fields).length,
|
|
214
|
+
streamTypeCount: getStreamTypesForModel(modelRegistry[name]).length,
|
|
215
|
+
}));
|
|
216
|
+
}
|
|
217
|
+
getModel(name) {
|
|
218
|
+
return describeModel(modelByName(name));
|
|
219
|
+
}
|
|
220
|
+
listApiMethods() {
|
|
221
|
+
const api = getMainApi();
|
|
222
|
+
if (!api)
|
|
223
|
+
return [];
|
|
224
|
+
const out = [];
|
|
225
|
+
for (const key of Object.keys(api).sort()) {
|
|
226
|
+
if (key === '_dashboard' || key.startsWith('_'))
|
|
227
|
+
continue;
|
|
228
|
+
const v = api[key];
|
|
229
|
+
out.push({ name: key, kind: typeof v === 'function' ? 'function' : 'value' });
|
|
230
|
+
}
|
|
231
|
+
return out;
|
|
232
|
+
}
|
|
233
|
+
getApiMethodSource(name) {
|
|
234
|
+
const api = getMainApi();
|
|
235
|
+
const fn = api && api[name];
|
|
236
|
+
if (typeof fn !== 'function')
|
|
237
|
+
return undefined;
|
|
238
|
+
try {
|
|
239
|
+
// Bundlers usually preserve enough source for a useful preview
|
|
240
|
+
const s = String(fn);
|
|
241
|
+
return s.length > 4000 ? s.slice(0, 4000) + '\n/* … truncated */' : s;
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
findRecords(modelName, indexName, opts = {}) {
|
|
248
|
+
const Model = modelByName(modelName);
|
|
249
|
+
const idx = findIndex(Model, indexName);
|
|
250
|
+
const fieldNames = Array.from(idx._indexFields.keys());
|
|
251
|
+
const findOpts = {};
|
|
252
|
+
if (opts.search !== undefined && opts.search !== '') {
|
|
253
|
+
findOpts.is = opts.search;
|
|
254
|
+
}
|
|
255
|
+
if (opts.reverse)
|
|
256
|
+
findOpts.reverse = true;
|
|
257
|
+
const limit = Math.min(opts.limit ?? 10, 1000);
|
|
258
|
+
let iter;
|
|
259
|
+
try {
|
|
260
|
+
iter = idx.find(findOpts);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
return { rows: [], indexFields: fieldNames, scanned: 0 };
|
|
264
|
+
}
|
|
265
|
+
const results = [];
|
|
266
|
+
let scanned = 0;
|
|
267
|
+
for (const row of iter) {
|
|
268
|
+
scanned++;
|
|
269
|
+
const plain = instanceToPlain(row);
|
|
270
|
+
const cls = row.constructor;
|
|
271
|
+
const pkBytes = row.getPrimaryKey ? row.getPrimaryKey() : null;
|
|
272
|
+
const pkArr = pkBytes && cls._pkToArray ? cls._pkToArray(pkBytes) : null;
|
|
273
|
+
const pk = pkArr ? (pkArr.length === 1 ? pkArr[0] : pkArr) : null;
|
|
274
|
+
results.push({
|
|
275
|
+
pk: serializeValue(pk),
|
|
276
|
+
values: plain,
|
|
277
|
+
});
|
|
278
|
+
if (results.length >= limit)
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
rows: results,
|
|
283
|
+
indexFields: fieldNames,
|
|
284
|
+
scanned,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
getRecord(modelName, pk) {
|
|
288
|
+
const Model = modelByName(modelName);
|
|
289
|
+
const pkArgs = Array.isArray(pk) ? pk : [pk];
|
|
290
|
+
const instance = Model.get(...pkArgs);
|
|
291
|
+
if (!instance)
|
|
292
|
+
return undefined;
|
|
293
|
+
return instanceToPlain(instance);
|
|
294
|
+
}
|
|
295
|
+
streamRecord(modelName, streamTypeId, pk) {
|
|
296
|
+
const Model = modelByName(modelName);
|
|
297
|
+
const ST = getStreamTypesForModel(Model).find((s) => s.id === streamTypeId);
|
|
298
|
+
if (!ST)
|
|
299
|
+
throw new Error(`No stream type with id ${streamTypeId} for ${modelName}`);
|
|
300
|
+
const pkArgs = Array.isArray(pk) ? pk : [pk];
|
|
301
|
+
const instance = Model.get(...pkArgs);
|
|
302
|
+
if (!instance)
|
|
303
|
+
throw new Error('Record not found');
|
|
304
|
+
return new ST(instance);
|
|
305
|
+
}
|
|
306
|
+
async createRecord(modelName, values) {
|
|
307
|
+
const Model = modelByName(modelName);
|
|
308
|
+
const parsed = {};
|
|
309
|
+
for (const [fieldName, jsonValue] of Object.entries(values)) {
|
|
310
|
+
const fieldConfig = Model.fields[fieldName];
|
|
311
|
+
if (!fieldConfig)
|
|
312
|
+
continue;
|
|
313
|
+
if (fieldConfig.type.kind === 'id')
|
|
314
|
+
continue; // auto-generated
|
|
315
|
+
const v = parseValueFromJson(fieldConfig.type, jsonValue);
|
|
316
|
+
if (v !== undefined)
|
|
317
|
+
parsed[fieldName] = v;
|
|
318
|
+
}
|
|
319
|
+
return await E.transact(() => {
|
|
320
|
+
const instance = new Model(parsed);
|
|
321
|
+
const cls = instance.constructor;
|
|
322
|
+
const pkBytes = instance.getPrimaryKey?.();
|
|
323
|
+
const pkArr = pkBytes && cls._pkToArray ? cls._pkToArray(pkBytes) : null;
|
|
324
|
+
const pk = pkArr ? (pkArr.length === 1 ? pkArr[0] : pkArr) : null;
|
|
325
|
+
return serializeValue(pk);
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
async updateRecord(modelName, pk, values) {
|
|
329
|
+
const Model = modelByName(modelName);
|
|
330
|
+
const pkArgs = Array.isArray(pk) ? pk : [pk];
|
|
331
|
+
const instance = Model.get(...pkArgs);
|
|
332
|
+
if (!instance)
|
|
333
|
+
throw new Error(`Record not found: ${JSON.stringify(pk)}`);
|
|
334
|
+
await E.transact(() => {
|
|
335
|
+
for (const [fieldName, jsonValue] of Object.entries(values)) {
|
|
336
|
+
const fieldConfig = Model.fields[fieldName];
|
|
337
|
+
if (!fieldConfig)
|
|
338
|
+
continue;
|
|
339
|
+
if (fieldConfig.type.kind === 'id')
|
|
340
|
+
continue; // immutable
|
|
341
|
+
instance[fieldName] = parseValueFromJson(fieldConfig.type, jsonValue);
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
async deleteRecord(modelName, pk) {
|
|
346
|
+
const Model = modelByName(modelName);
|
|
347
|
+
const pkArgs = Array.isArray(pk) ? pk : [pk];
|
|
348
|
+
const instance = Model.get(...pkArgs);
|
|
349
|
+
if (!instance)
|
|
350
|
+
throw new Error(`Record not found: ${JSON.stringify(pk)}`);
|
|
351
|
+
await E.transact(() => { instance.delete(); });
|
|
352
|
+
}
|
|
353
|
+
getDebugState(mode) {
|
|
354
|
+
return warpsocket.getDebugState(mode);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
const DashboardProxyValue = 'authenticated';
|
|
358
|
+
/**
|
|
359
|
+
* RPC entry point. Re-export this from your top-level api file:
|
|
360
|
+
*
|
|
361
|
+
* ```ts
|
|
362
|
+
* export { _dashboard } from 'lowlander/dashboard';
|
|
363
|
+
* ```
|
|
364
|
+
*
|
|
365
|
+
* On first call, a password is generated (or reused from the
|
|
366
|
+
* `LOWLANDER_DASHBOARD_PASSWORD` env var) and printed to the server console.
|
|
367
|
+
*/
|
|
368
|
+
export function _dashboard(password) {
|
|
369
|
+
if (!passwordOk(password)) {
|
|
370
|
+
throw new Error('Invalid dashboard password');
|
|
371
|
+
}
|
|
372
|
+
return new ServerProxy(new DashboardAPI(), DashboardProxyValue);
|
|
373
|
+
}
|
|
374
|
+
// Convenience stream type used internally so live record viewing works
|
|
375
|
+
// for arbitrary models without the developer having to pre-create one.
|
|
376
|
+
// (Built lazily per model+selection because createStreamType is keyed on the
|
|
377
|
+
// shape of the selection.)
|
|
378
|
+
const allFieldsStreams = new Map();
|
|
379
|
+
export function _dashboardAllFieldsStream(modelName) {
|
|
380
|
+
// Currently unused; kept for future "view live" feature.
|
|
381
|
+
void allFieldsStreams;
|
|
382
|
+
void modelName;
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../dashboard/server.ts"],"names":[],"mappings":"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"}
|