@dxos/compute 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe
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/dist/lib/browser/{chunk-XQYPCRZP.mjs → chunk-CPBXT2HX.mjs} +155 -181
- package/dist/lib/browser/chunk-CPBXT2HX.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +31 -20
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/{chunk-2XWWSGAU.mjs → chunk-D3RM3FQW.mjs} +155 -181
- package/dist/lib/node-esm/chunk-D3RM3FQW.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +31 -20
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/compute-graph-registry.d.ts +8 -3
- package/dist/types/src/compute-graph-registry.d.ts.map +1 -1
- package/dist/types/src/compute-graph-registry.test.d.ts +2 -0
- package/dist/types/src/compute-graph-registry.test.d.ts.map +1 -0
- package/dist/types/src/compute-graph.d.ts +4 -1
- package/dist/types/src/compute-graph.d.ts.map +1 -1
- package/dist/types/src/functions/async-function.d.ts +11 -9
- package/dist/types/src/functions/async-function.d.ts.map +1 -1
- package/dist/types/src/functions/edge-function.d.ts.map +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-builder.d.ts +1 -1
- package/dist/types/src/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/testing/test-runtime.d.ts +10 -0
- package/dist/types/src/testing/test-runtime.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +23 -22
- package/src/compute-graph-registry.test.ts +154 -0
- package/src/compute-graph-registry.ts +17 -8
- package/src/compute-graph.test.ts +29 -10
- package/src/compute-graph.ts +25 -13
- package/src/functions/async-function.ts +13 -12
- package/src/functions/edge-function.ts +22 -19
- package/src/index.ts +0 -27
- package/src/testing/index.ts +1 -0
- package/src/testing/test-builder.ts +8 -2
- package/src/testing/test-runtime.ts +33 -0
- package/dist/lib/browser/chunk-XQYPCRZP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2XWWSGAU.mjs.map +0 -7
|
@@ -78,20 +78,13 @@ var inRange = (range, cell) => {
|
|
|
78
78
|
import { Event } from "@dxos/async";
|
|
79
79
|
import { Resource } from "@dxos/context";
|
|
80
80
|
import { DetailedCellError as DetailedCellError2 } from "@dxos/vendor-hyperformula";
|
|
81
|
-
function _define_property(obj, key, value) {
|
|
82
|
-
if (key in obj) {
|
|
83
|
-
Object.defineProperty(obj, key, {
|
|
84
|
-
value,
|
|
85
|
-
enumerable: true,
|
|
86
|
-
configurable: true,
|
|
87
|
-
writable: true
|
|
88
|
-
});
|
|
89
|
-
} else {
|
|
90
|
-
obj[key] = value;
|
|
91
|
-
}
|
|
92
|
-
return obj;
|
|
93
|
-
}
|
|
94
81
|
var ComputeNode = class extends Resource {
|
|
82
|
+
_graph;
|
|
83
|
+
sheetId;
|
|
84
|
+
update = new Event();
|
|
85
|
+
constructor(_graph, sheetId) {
|
|
86
|
+
super(), this._graph = _graph, this.sheetId = sheetId;
|
|
87
|
+
}
|
|
95
88
|
get graph() {
|
|
96
89
|
return this._graph;
|
|
97
90
|
}
|
|
@@ -124,9 +117,6 @@ var ComputeNode = class extends Resource {
|
|
|
124
117
|
// TODO(burdon): Load data into sheet.
|
|
125
118
|
async _open() {
|
|
126
119
|
}
|
|
127
|
-
constructor(_graph, sheetId) {
|
|
128
|
-
super(), _define_property(this, "_graph", void 0), _define_property(this, "sheetId", void 0), _define_property(this, "update", void 0), this._graph = _graph, this.sheetId = sheetId, this.update = new Event();
|
|
129
|
-
}
|
|
130
120
|
};
|
|
131
121
|
|
|
132
122
|
// src/functions/async-function.ts
|
|
@@ -134,26 +124,15 @@ import defaultsDeep from "lodash.defaultsdeep";
|
|
|
134
124
|
import { debounce } from "@dxos/async";
|
|
135
125
|
import { log } from "@dxos/log";
|
|
136
126
|
import { CellError, EmptyValue, ErrorType, FunctionPlugin } from "@dxos/vendor-hyperformula";
|
|
137
|
-
function _define_property2(obj, key, value) {
|
|
138
|
-
if (key in obj) {
|
|
139
|
-
Object.defineProperty(obj, key, {
|
|
140
|
-
value,
|
|
141
|
-
enumerable: true,
|
|
142
|
-
configurable: true,
|
|
143
|
-
writable: true
|
|
144
|
-
});
|
|
145
|
-
} else {
|
|
146
|
-
obj[key] = value;
|
|
147
|
-
}
|
|
148
|
-
return obj;
|
|
149
|
-
}
|
|
150
127
|
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/compute/src/functions/async-function.ts";
|
|
151
128
|
var defaultFunctionContextOptions = {
|
|
152
129
|
defaultTtl: 5e3,
|
|
153
|
-
debounceDelay: 200
|
|
154
|
-
remoteFunctionUrl: "https://edge.dxos.workers.dev/functions"
|
|
130
|
+
debounceDelay: 200
|
|
155
131
|
};
|
|
156
132
|
var FunctionContext = class _FunctionContext {
|
|
133
|
+
_hf;
|
|
134
|
+
_runtime;
|
|
135
|
+
_space;
|
|
157
136
|
// Mangle name with params.
|
|
158
137
|
static createInvocationKey(name, ...args) {
|
|
159
138
|
return JSON.stringify({
|
|
@@ -161,18 +140,46 @@ var FunctionContext = class _FunctionContext {
|
|
|
161
140
|
...args
|
|
162
141
|
});
|
|
163
142
|
}
|
|
143
|
+
// TODO(wittjosiah): Persist cached values.
|
|
144
|
+
// Cached values for cell.
|
|
145
|
+
_cache = /* @__PURE__ */ new Map();
|
|
146
|
+
// Active requests.
|
|
147
|
+
_pending = /* @__PURE__ */ new Map();
|
|
148
|
+
// Query subscriptions.
|
|
149
|
+
_subscriptions = /* @__PURE__ */ new Map();
|
|
150
|
+
// Invocation count.
|
|
151
|
+
_invocations = {};
|
|
152
|
+
_options;
|
|
153
|
+
// Debounced update handler.
|
|
154
|
+
_onUpdate;
|
|
155
|
+
constructor(_hf, _runtime, _space, _options) {
|
|
156
|
+
this._hf = _hf;
|
|
157
|
+
this._runtime = _runtime;
|
|
158
|
+
this._space = _space;
|
|
159
|
+
this._options = defaultsDeep(_options ?? {}, defaultFunctionContextOptions);
|
|
160
|
+
this._onUpdate = debounce((update) => {
|
|
161
|
+
log("update", update, {
|
|
162
|
+
F: __dxlog_file2,
|
|
163
|
+
L: 86,
|
|
164
|
+
S: this,
|
|
165
|
+
C: (f, a) => f(...a)
|
|
166
|
+
});
|
|
167
|
+
this._hf.resumeEvaluation();
|
|
168
|
+
this._options.onUpdate?.(update);
|
|
169
|
+
}, this._options.debounceDelay);
|
|
170
|
+
}
|
|
164
171
|
get space() {
|
|
165
172
|
return this._space;
|
|
166
173
|
}
|
|
167
|
-
get remoteFunctionUrl() {
|
|
168
|
-
return this._options.remoteFunctionUrl;
|
|
169
|
-
}
|
|
170
174
|
get info() {
|
|
171
175
|
return {
|
|
172
176
|
cache: this._cache.size,
|
|
173
177
|
invocations: this._invocations
|
|
174
178
|
};
|
|
175
179
|
}
|
|
180
|
+
get runtime() {
|
|
181
|
+
return this._runtime;
|
|
182
|
+
}
|
|
176
183
|
flush() {
|
|
177
184
|
this._cache.clear();
|
|
178
185
|
this._invocations = {};
|
|
@@ -209,7 +216,7 @@ var FunctionContext = class _FunctionContext {
|
|
|
209
216
|
value: value2
|
|
210
217
|
}, {
|
|
211
218
|
F: __dxlog_file2,
|
|
212
|
-
L:
|
|
219
|
+
L: 144,
|
|
213
220
|
S: this,
|
|
214
221
|
C: (f, a) => f(...a)
|
|
215
222
|
});
|
|
@@ -223,7 +230,7 @@ var FunctionContext = class _FunctionContext {
|
|
|
223
230
|
err
|
|
224
231
|
}, {
|
|
225
232
|
F: __dxlog_file2,
|
|
226
|
-
L:
|
|
233
|
+
L: 148,
|
|
227
234
|
S: this,
|
|
228
235
|
C: (f, a) => f(...a)
|
|
229
236
|
});
|
|
@@ -243,39 +250,12 @@ var FunctionContext = class _FunctionContext {
|
|
|
243
250
|
cache: value
|
|
244
251
|
}, {
|
|
245
252
|
F: __dxlog_file2,
|
|
246
|
-
L:
|
|
253
|
+
L: 156,
|
|
247
254
|
S: this,
|
|
248
255
|
C: (f, a) => f(...a)
|
|
249
256
|
});
|
|
250
257
|
return value;
|
|
251
258
|
}
|
|
252
|
-
constructor(_hf, _space, _options) {
|
|
253
|
-
_define_property2(this, "_hf", void 0);
|
|
254
|
-
_define_property2(this, "_space", void 0);
|
|
255
|
-
_define_property2(this, "_cache", void 0);
|
|
256
|
-
_define_property2(this, "_pending", void 0);
|
|
257
|
-
_define_property2(this, "_subscriptions", void 0);
|
|
258
|
-
_define_property2(this, "_invocations", void 0);
|
|
259
|
-
_define_property2(this, "_options", void 0);
|
|
260
|
-
_define_property2(this, "_onUpdate", void 0);
|
|
261
|
-
this._hf = _hf;
|
|
262
|
-
this._space = _space;
|
|
263
|
-
this._cache = /* @__PURE__ */ new Map();
|
|
264
|
-
this._pending = /* @__PURE__ */ new Map();
|
|
265
|
-
this._subscriptions = /* @__PURE__ */ new Map();
|
|
266
|
-
this._invocations = {};
|
|
267
|
-
this._options = defaultsDeep(_options ?? {}, defaultFunctionContextOptions);
|
|
268
|
-
this._onUpdate = debounce((update) => {
|
|
269
|
-
log("update", update, {
|
|
270
|
-
F: __dxlog_file2,
|
|
271
|
-
L: 85,
|
|
272
|
-
S: this,
|
|
273
|
-
C: (f, a) => f(...a)
|
|
274
|
-
});
|
|
275
|
-
this._hf.resumeEvaluation();
|
|
276
|
-
this._options.onUpdate?.(update);
|
|
277
|
-
}, this._options.debounceDelay);
|
|
278
|
-
}
|
|
279
259
|
};
|
|
280
260
|
var AsyncFunctionPlugin = class extends FunctionPlugin {
|
|
281
261
|
get context() {
|
|
@@ -295,10 +275,12 @@ var AsyncFunctionPlugin = class extends FunctionPlugin {
|
|
|
295
275
|
|
|
296
276
|
// src/functions/edge-function.ts
|
|
297
277
|
import { effect } from "@preact/signals-core";
|
|
298
|
-
import
|
|
299
|
-
import
|
|
300
|
-
import {
|
|
301
|
-
import {
|
|
278
|
+
import * as Effect from "effect/Effect";
|
|
279
|
+
import * as SchemaAST from "effect/SchemaAST";
|
|
280
|
+
import { Filter } from "@dxos/client/echo";
|
|
281
|
+
import { toEffectSchema } from "@dxos/echo/internal";
|
|
282
|
+
import { Function, FunctionInvocationService, TracingService } from "@dxos/functions";
|
|
283
|
+
import { FunctionDefinition } from "@dxos/functions";
|
|
302
284
|
import { log as log2 } from "@dxos/log";
|
|
303
285
|
import { isNonNullable } from "@dxos/util";
|
|
304
286
|
import { CellError as CellError2, ErrorType as ErrorType2, FunctionArgumentType } from "@dxos/vendor-hyperformula";
|
|
@@ -312,7 +294,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
312
294
|
if (!space) {
|
|
313
295
|
return new CellError2(ErrorType2.REF, "Missing space");
|
|
314
296
|
}
|
|
315
|
-
const { objects: [fn] } = await space.db.query(Filter.type(
|
|
297
|
+
const { objects: [fn] } = await space.db.query(Filter.type(Function.Function, {
|
|
316
298
|
binding
|
|
317
299
|
})).run();
|
|
318
300
|
if (!fn) {
|
|
@@ -320,7 +302,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
320
302
|
binding
|
|
321
303
|
}, {
|
|
322
304
|
F: __dxlog_file3,
|
|
323
|
-
L:
|
|
305
|
+
L: 43,
|
|
324
306
|
S: this,
|
|
325
307
|
C: (f, a) => f(...a)
|
|
326
308
|
});
|
|
@@ -332,7 +314,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
332
314
|
fn
|
|
333
315
|
}, {
|
|
334
316
|
F: __dxlog_file3,
|
|
335
|
-
L:
|
|
317
|
+
L: 49,
|
|
336
318
|
S: this,
|
|
337
319
|
C: (f, a) => f(...a)
|
|
338
320
|
});
|
|
@@ -343,32 +325,24 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
343
325
|
});
|
|
344
326
|
this.context.createSubscription(ast.procedureName, unsubscribe);
|
|
345
327
|
}
|
|
346
|
-
const
|
|
328
|
+
const runtime = this.context.runtime;
|
|
329
|
+
const functionDef = FunctionDefinition.deserialize(fn);
|
|
330
|
+
let input;
|
|
347
331
|
if (fn.inputSchema) {
|
|
348
332
|
const schema = toEffectSchema(fn.inputSchema);
|
|
349
|
-
SchemaAST.getPropertySignatures(schema.ast)
|
|
350
|
-
|
|
333
|
+
const props = SchemaAST.getPropertySignatures(schema.ast);
|
|
334
|
+
input = {};
|
|
335
|
+
props.forEach(({ name }, index) => {
|
|
336
|
+
input[name.toString()] = args[index];
|
|
351
337
|
});
|
|
352
338
|
} else {
|
|
353
|
-
|
|
339
|
+
input = {
|
|
340
|
+
args: args.filter(isNonNullable)
|
|
341
|
+
};
|
|
354
342
|
}
|
|
355
|
-
const
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
headers: {
|
|
359
|
-
"Content-Type": "application/json"
|
|
360
|
-
},
|
|
361
|
-
body: JSON.stringify(body)
|
|
362
|
-
});
|
|
363
|
-
const result = await response.text();
|
|
364
|
-
log2("function executed", {
|
|
365
|
-
result
|
|
366
|
-
}, {
|
|
367
|
-
F: __dxlog_file3,
|
|
368
|
-
L: 74,
|
|
369
|
-
S: this,
|
|
370
|
-
C: (f, a) => f(...a)
|
|
371
|
-
});
|
|
343
|
+
const result = runtime.runPromise(Effect.gen(function* () {
|
|
344
|
+
return yield* FunctionInvocationService.invokeFunction(functionDef, input);
|
|
345
|
+
}).pipe(Effect.provide(TracingService.layerNoop)));
|
|
372
346
|
return result;
|
|
373
347
|
};
|
|
374
348
|
return this.runAsyncFunction(ast, state, handler(true), {
|
|
@@ -2805,30 +2779,19 @@ var defaultFunctions = [
|
|
|
2805
2779
|
];
|
|
2806
2780
|
|
|
2807
2781
|
// src/compute-graph.ts
|
|
2782
|
+
import { effect as effect2 } from "@preact/signals-core";
|
|
2808
2783
|
import { Event as Event2 } from "@dxos/async";
|
|
2809
|
-
import { Filter as Filter2
|
|
2784
|
+
import { Filter as Filter2 } from "@dxos/client/echo";
|
|
2810
2785
|
import { FQ_ID_LENGTH } from "@dxos/client/echo";
|
|
2811
2786
|
import { Resource as Resource2 } from "@dxos/context";
|
|
2812
|
-
import {
|
|
2813
|
-
import {
|
|
2787
|
+
import { Obj } from "@dxos/echo";
|
|
2788
|
+
import { getTypename } from "@dxos/echo/internal";
|
|
2789
|
+
import { Function as Function2 } from "@dxos/functions";
|
|
2814
2790
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
2815
2791
|
import { PublicKey } from "@dxos/keys";
|
|
2816
2792
|
import { log as log3 } from "@dxos/log";
|
|
2817
2793
|
import { isNonNullable as isNonNullable2 } from "@dxos/util";
|
|
2818
2794
|
import { ExportedCellChange as ExportedCellChange2 } from "@dxos/vendor-hyperformula";
|
|
2819
|
-
function _define_property3(obj, key, value) {
|
|
2820
|
-
if (key in obj) {
|
|
2821
|
-
Object.defineProperty(obj, key, {
|
|
2822
|
-
value,
|
|
2823
|
-
enumerable: true,
|
|
2824
|
-
configurable: true,
|
|
2825
|
-
writable: true
|
|
2826
|
-
});
|
|
2827
|
-
} else {
|
|
2828
|
-
obj[key] = value;
|
|
2829
|
-
}
|
|
2830
|
-
return obj;
|
|
2831
|
-
}
|
|
2832
2795
|
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph.ts";
|
|
2833
2796
|
var UNKNOWN_BINDING = "__UNKNOWN__";
|
|
2834
2797
|
var createSheetName = ({ type, id }) => `${type}@${id}`;
|
|
@@ -2842,6 +2805,49 @@ var parseSheetName = (name) => {
|
|
|
2842
2805
|
};
|
|
2843
2806
|
};
|
|
2844
2807
|
var ComputeGraph = class extends Resource2 {
|
|
2808
|
+
_hf;
|
|
2809
|
+
_runtime;
|
|
2810
|
+
_space;
|
|
2811
|
+
_options;
|
|
2812
|
+
id = `graph-${PublicKey.random().truncate()}`;
|
|
2813
|
+
// Map of nodes indexed by sheet number.
|
|
2814
|
+
_nodes = /* @__PURE__ */ new Map();
|
|
2815
|
+
// Cached function objects.
|
|
2816
|
+
_remoteFunctions = [];
|
|
2817
|
+
update = new Event2();
|
|
2818
|
+
// The context is passed to all functions.
|
|
2819
|
+
context;
|
|
2820
|
+
constructor(_hf, _runtime, _space, _options) {
|
|
2821
|
+
super(), this._hf = _hf, this._runtime = _runtime, this._space = _space, this._options = _options;
|
|
2822
|
+
this.context = new FunctionContext(this._hf, this._runtime, this._space, {
|
|
2823
|
+
...this._options,
|
|
2824
|
+
onUpdate: (update) => {
|
|
2825
|
+
this._options?.onUpdate?.(update);
|
|
2826
|
+
this.update.emit({
|
|
2827
|
+
type: "valuesUpdated"
|
|
2828
|
+
});
|
|
2829
|
+
}
|
|
2830
|
+
});
|
|
2831
|
+
this._hf.updateConfig({
|
|
2832
|
+
context: this.context
|
|
2833
|
+
});
|
|
2834
|
+
const onValuesUpdate = (changes) => {
|
|
2835
|
+
for (const change of changes) {
|
|
2836
|
+
if (change instanceof ExportedCellChange2) {
|
|
2837
|
+
const { sheet } = change;
|
|
2838
|
+
const node = this._nodes.get(sheet);
|
|
2839
|
+
if (node) {
|
|
2840
|
+
node.update.emit({
|
|
2841
|
+
type: "valuesUpdated",
|
|
2842
|
+
change
|
|
2843
|
+
});
|
|
2844
|
+
}
|
|
2845
|
+
}
|
|
2846
|
+
}
|
|
2847
|
+
};
|
|
2848
|
+
this._hf.on("valuesUpdated", onValuesUpdate);
|
|
2849
|
+
this._ctx.onDispose(() => this._hf.off("valuesUpdated", onValuesUpdate));
|
|
2850
|
+
}
|
|
2845
2851
|
get hf() {
|
|
2846
2852
|
return this._hf;
|
|
2847
2853
|
}
|
|
@@ -2869,7 +2875,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2869
2875
|
getOrCreateNode(name) {
|
|
2870
2876
|
invariant2(name.length, void 0, {
|
|
2871
2877
|
F: __dxlog_file4,
|
|
2872
|
-
L:
|
|
2878
|
+
L: 135,
|
|
2873
2879
|
S: this,
|
|
2874
2880
|
A: [
|
|
2875
2881
|
"name.length",
|
|
@@ -2882,7 +2888,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2882
2888
|
sheet: name
|
|
2883
2889
|
}, {
|
|
2884
2890
|
F: __dxlog_file4,
|
|
2885
|
-
L:
|
|
2891
|
+
L: 137,
|
|
2886
2892
|
S: this,
|
|
2887
2893
|
C: (f, a) => f(...a)
|
|
2888
2894
|
});
|
|
@@ -2891,7 +2897,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2891
2897
|
const sheetId = this._hf.getSheetId(name);
|
|
2892
2898
|
invariant2(sheetId !== void 0, void 0, {
|
|
2893
2899
|
F: __dxlog_file4,
|
|
2894
|
-
L:
|
|
2900
|
+
L: 142,
|
|
2895
2901
|
S: this,
|
|
2896
2902
|
A: [
|
|
2897
2903
|
"sheetId !== undefined",
|
|
@@ -2947,7 +2953,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2947
2953
|
}
|
|
2948
2954
|
const fn = this._remoteFunctions.find((fn2) => fn2.binding === binding);
|
|
2949
2955
|
if (fn) {
|
|
2950
|
-
const id =
|
|
2956
|
+
const id = Obj.getDXN(fn).toString();
|
|
2951
2957
|
return `${id}(${args})`;
|
|
2952
2958
|
} else {
|
|
2953
2959
|
return match;
|
|
@@ -2964,7 +2970,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2964
2970
|
if (id.length !== FQ_ID_LENGTH) {
|
|
2965
2971
|
return match;
|
|
2966
2972
|
}
|
|
2967
|
-
const fn = this._remoteFunctions.find((fn2) =>
|
|
2973
|
+
const fn = this._remoteFunctions.find((fn2) => Obj.getDXN(fn2).toString() === id);
|
|
2968
2974
|
if (fn?.binding) {
|
|
2969
2975
|
return `${fn.binding}(${args})`;
|
|
2970
2976
|
} else {
|
|
@@ -2979,14 +2985,18 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2979
2985
|
}
|
|
2980
2986
|
async _open() {
|
|
2981
2987
|
if (this._space) {
|
|
2982
|
-
const query = this._space.db.query(Filter2.type(
|
|
2983
|
-
const unsubscribe = query.subscribe(
|
|
2984
|
-
|
|
2988
|
+
const query = this._space.db.query(Filter2.type(Function2.Function));
|
|
2989
|
+
const unsubscribe = query.subscribe();
|
|
2990
|
+
const dispose = effect2(() => {
|
|
2991
|
+
this._remoteFunctions = query.objects.filter(({ binding }) => binding);
|
|
2985
2992
|
this.update.emit({
|
|
2986
2993
|
type: "functionsUpdated"
|
|
2987
2994
|
});
|
|
2988
2995
|
});
|
|
2989
|
-
this._ctx.onDispose(
|
|
2996
|
+
this._ctx.onDispose(() => {
|
|
2997
|
+
unsubscribe();
|
|
2998
|
+
dispose();
|
|
2999
|
+
});
|
|
2990
3000
|
}
|
|
2991
3001
|
}
|
|
2992
3002
|
async _close() {
|
|
@@ -2994,40 +3004,6 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2994
3004
|
await node.close();
|
|
2995
3005
|
}
|
|
2996
3006
|
}
|
|
2997
|
-
constructor(_hf, _space, _options) {
|
|
2998
|
-
super(), _define_property3(this, "_hf", void 0), _define_property3(this, "_space", void 0), _define_property3(this, "_options", void 0), _define_property3(this, "id", void 0), // Map of nodes indexed by sheet number.
|
|
2999
|
-
_define_property3(this, "_nodes", void 0), // Cached function objects.
|
|
3000
|
-
_define_property3(this, "_remoteFunctions", void 0), _define_property3(this, "update", void 0), // The context is passed to all functions.
|
|
3001
|
-
_define_property3(this, "context", void 0), this._hf = _hf, this._space = _space, this._options = _options, this.id = `graph-${PublicKey.random().truncate()}`, this._nodes = /* @__PURE__ */ new Map(), this._remoteFunctions = [], this.update = new Event2();
|
|
3002
|
-
this.context = new FunctionContext(this._hf, this._space, {
|
|
3003
|
-
...this._options,
|
|
3004
|
-
onUpdate: (update) => {
|
|
3005
|
-
this._options?.onUpdate?.(update);
|
|
3006
|
-
this.update.emit({
|
|
3007
|
-
type: "valuesUpdated"
|
|
3008
|
-
});
|
|
3009
|
-
}
|
|
3010
|
-
});
|
|
3011
|
-
this._hf.updateConfig({
|
|
3012
|
-
context: this.context
|
|
3013
|
-
});
|
|
3014
|
-
const onValuesUpdate = (changes) => {
|
|
3015
|
-
for (const change of changes) {
|
|
3016
|
-
if (change instanceof ExportedCellChange2) {
|
|
3017
|
-
const { sheet } = change;
|
|
3018
|
-
const node = this._nodes.get(sheet);
|
|
3019
|
-
if (node) {
|
|
3020
|
-
node.update.emit({
|
|
3021
|
-
type: "valuesUpdated",
|
|
3022
|
-
change
|
|
3023
|
-
});
|
|
3024
|
-
}
|
|
3025
|
-
}
|
|
3026
|
-
}
|
|
3027
|
-
};
|
|
3028
|
-
this._hf.on("valuesUpdated", onValuesUpdate);
|
|
3029
|
-
this._ctx.onDispose(() => this._hf.off("valuesUpdated", onValuesUpdate));
|
|
3030
|
-
}
|
|
3031
3007
|
};
|
|
3032
3008
|
|
|
3033
3009
|
// src/compute-graph-registry.ts
|
|
@@ -3036,30 +3012,27 @@ import { Resource as Resource3 } from "@dxos/context";
|
|
|
3036
3012
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
3037
3013
|
import { log as log4 } from "@dxos/log";
|
|
3038
3014
|
import { HyperFormula } from "@dxos/vendor-hyperformula";
|
|
3039
|
-
function _define_property4(obj, key, value) {
|
|
3040
|
-
if (key in obj) {
|
|
3041
|
-
Object.defineProperty(obj, key, {
|
|
3042
|
-
value,
|
|
3043
|
-
enumerable: true,
|
|
3044
|
-
configurable: true,
|
|
3045
|
-
writable: true
|
|
3046
|
-
});
|
|
3047
|
-
} else {
|
|
3048
|
-
obj[key] = value;
|
|
3049
|
-
}
|
|
3050
|
-
return obj;
|
|
3051
|
-
}
|
|
3052
3015
|
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph-registry.ts";
|
|
3053
|
-
var defaultOptions = {
|
|
3054
|
-
licenseKey: "gpl-v3"
|
|
3055
|
-
};
|
|
3056
3016
|
var defaultPlugins = [
|
|
3057
3017
|
{
|
|
3058
3018
|
plugin: EdgeFunctionPlugin,
|
|
3059
3019
|
translations: EdgeFunctionPluginTranslations
|
|
3060
3020
|
}
|
|
3061
3021
|
];
|
|
3022
|
+
var defaultOptions = {
|
|
3023
|
+
licenseKey: "gpl-v3"
|
|
3024
|
+
};
|
|
3062
3025
|
var ComputeGraphRegistry = class extends Resource3 {
|
|
3026
|
+
_graphs = /* @__PURE__ */ new Map();
|
|
3027
|
+
_options;
|
|
3028
|
+
constructor(options) {
|
|
3029
|
+
super();
|
|
3030
|
+
this._options = defaultsDeep2({}, options, defaultOptions);
|
|
3031
|
+
this._options.plugins = this._options.plugins ?? defaultPlugins;
|
|
3032
|
+
this._options.plugins?.forEach(({ plugin, translations }) => {
|
|
3033
|
+
HyperFormula.registerFunctionPlugin(plugin, translations);
|
|
3034
|
+
});
|
|
3035
|
+
}
|
|
3063
3036
|
getGraph(spaceId) {
|
|
3064
3037
|
return this._graphs.get(spaceId);
|
|
3065
3038
|
}
|
|
@@ -3070,7 +3043,7 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3070
3043
|
space: space.id
|
|
3071
3044
|
}, {
|
|
3072
3045
|
F: __dxlog_file5,
|
|
3073
|
-
L:
|
|
3046
|
+
L: 73,
|
|
3074
3047
|
S: this,
|
|
3075
3048
|
C: (f, a) => f(...a)
|
|
3076
3049
|
});
|
|
@@ -3081,7 +3054,7 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3081
3054
|
createGraph(space) {
|
|
3082
3055
|
invariant3(!this._graphs.has(space.id), `ComputeGraph already exists for space: ${space.id}`, {
|
|
3083
3056
|
F: __dxlog_file5,
|
|
3084
|
-
L:
|
|
3057
|
+
L: 81,
|
|
3085
3058
|
S: this,
|
|
3086
3059
|
A: [
|
|
3087
3060
|
"!this._graphs.has(space.id)",
|
|
@@ -3089,7 +3062,17 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3089
3062
|
]
|
|
3090
3063
|
});
|
|
3091
3064
|
const hf = HyperFormula.buildEmpty(this._options);
|
|
3092
|
-
|
|
3065
|
+
invariant3(this._options.computeRuntime, "ComputeRuntime is required", {
|
|
3066
|
+
F: __dxlog_file5,
|
|
3067
|
+
L: 83,
|
|
3068
|
+
S: this,
|
|
3069
|
+
A: [
|
|
3070
|
+
"this._options.computeRuntime",
|
|
3071
|
+
"'ComputeRuntime is required'"
|
|
3072
|
+
]
|
|
3073
|
+
});
|
|
3074
|
+
const runtime = this._options.computeRuntime.getRuntime(space.id);
|
|
3075
|
+
const graph = new ComputeGraph(hf, runtime, space, this._options);
|
|
3093
3076
|
this._graphs.set(space.id, graph);
|
|
3094
3077
|
return graph;
|
|
3095
3078
|
}
|
|
@@ -3099,15 +3082,6 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3099
3082
|
}
|
|
3100
3083
|
this._graphs.clear();
|
|
3101
3084
|
}
|
|
3102
|
-
constructor(options = {
|
|
3103
|
-
plugins: defaultPlugins
|
|
3104
|
-
}) {
|
|
3105
|
-
super(), _define_property4(this, "_graphs", /* @__PURE__ */ new Map()), _define_property4(this, "_options", void 0);
|
|
3106
|
-
this._options = defaultsDeep2({}, options, defaultOptions);
|
|
3107
|
-
this._options.plugins?.forEach(({ plugin, translations }) => {
|
|
3108
|
-
HyperFormula.registerFunctionPlugin(plugin, translations);
|
|
3109
|
-
});
|
|
3110
|
-
}
|
|
3111
3085
|
};
|
|
3112
3086
|
|
|
3113
3087
|
export {
|
|
@@ -3133,8 +3107,8 @@ export {
|
|
|
3133
3107
|
createSheetName,
|
|
3134
3108
|
parseSheetName,
|
|
3135
3109
|
ComputeGraph,
|
|
3136
|
-
defaultOptions,
|
|
3137
3110
|
defaultPlugins,
|
|
3111
|
+
defaultOptions,
|
|
3138
3112
|
ComputeGraphRegistry
|
|
3139
3113
|
};
|
|
3140
|
-
//# sourceMappingURL=chunk-
|
|
3114
|
+
//# sourceMappingURL=chunk-CPBXT2HX.mjs.map
|