@dxos/compute 0.8.4-main.dedc0f3 → 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.
Files changed (42) hide show
  1. package/dist/lib/browser/{chunk-XQYPCRZP.mjs → chunk-CPBXT2HX.mjs} +155 -181
  2. package/dist/lib/browser/chunk-CPBXT2HX.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +31 -20
  6. package/dist/lib/browser/testing/index.mjs.map +4 -4
  7. package/dist/lib/node-esm/{chunk-2XWWSGAU.mjs → chunk-D3RM3FQW.mjs} +155 -181
  8. package/dist/lib/node-esm/chunk-D3RM3FQW.mjs.map +7 -0
  9. package/dist/lib/node-esm/index.mjs +1 -1
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/testing/index.mjs +31 -20
  12. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  13. package/dist/types/src/compute-graph-registry.d.ts +8 -3
  14. package/dist/types/src/compute-graph-registry.d.ts.map +1 -1
  15. package/dist/types/src/compute-graph-registry.test.d.ts +2 -0
  16. package/dist/types/src/compute-graph-registry.test.d.ts.map +1 -0
  17. package/dist/types/src/compute-graph.d.ts +4 -1
  18. package/dist/types/src/compute-graph.d.ts.map +1 -1
  19. package/dist/types/src/functions/async-function.d.ts +11 -9
  20. package/dist/types/src/functions/async-function.d.ts.map +1 -1
  21. package/dist/types/src/functions/edge-function.d.ts.map +1 -1
  22. package/dist/types/src/index.d.ts.map +1 -1
  23. package/dist/types/src/testing/index.d.ts +1 -0
  24. package/dist/types/src/testing/index.d.ts.map +1 -1
  25. package/dist/types/src/testing/test-builder.d.ts +1 -1
  26. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  27. package/dist/types/src/testing/test-runtime.d.ts +10 -0
  28. package/dist/types/src/testing/test-runtime.d.ts.map +1 -0
  29. package/dist/types/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +23 -22
  31. package/src/compute-graph-registry.test.ts +154 -0
  32. package/src/compute-graph-registry.ts +17 -8
  33. package/src/compute-graph.test.ts +29 -10
  34. package/src/compute-graph.ts +25 -13
  35. package/src/functions/async-function.ts +13 -12
  36. package/src/functions/edge-function.ts +22 -19
  37. package/src/index.ts +0 -27
  38. package/src/testing/index.ts +1 -0
  39. package/src/testing/test-builder.ts +8 -2
  40. package/src/testing/test-runtime.ts +33 -0
  41. package/dist/lib/browser/chunk-XQYPCRZP.mjs.map +0 -7
  42. 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: 143,
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: 147,
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: 155,
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 { SchemaAST } from "effect";
299
- import { Filter, getMeta } from "@dxos/client/echo";
300
- import { toEffectSchema } from "@dxos/echo-schema";
301
- import { FunctionType, getUserFunctionIdInMetadata } from "@dxos/functions";
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(FunctionType, {
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: 41,
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: 47,
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 body = {};
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).forEach(({ name }, index) => {
350
- body[name.toString()] = args[index];
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
- body.args = args.filter(isNonNullable);
339
+ input = {
340
+ args: args.filter(isNonNullable)
341
+ };
354
342
  }
355
- const id = getUserFunctionIdInMetadata(getMeta(fn));
356
- const response = await fetch(`${this.context.remoteFunctionUrl}/${id}`, {
357
- method: "POST",
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, fullyQualifiedId } from "@dxos/client/echo";
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 { getTypename } from "@dxos/echo-schema";
2813
- import { FunctionType as FunctionType2 } from "@dxos/functions";
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: 127,
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: 129,
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: 134,
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 = fullyQualifiedId(fn);
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) => fullyQualifiedId(fn2) === id);
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(FunctionType2));
2983
- const unsubscribe = query.subscribe(({ objects }) => {
2984
- this._remoteFunctions = objects.filter(({ binding }) => binding);
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(unsubscribe);
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: 67,
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: 75,
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
- const graph = new ComputeGraph(hf, space, this._options);
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-XQYPCRZP.mjs.map
3114
+ //# sourceMappingURL=chunk-CPBXT2HX.mjs.map