@dxos/compute 0.8.4-main.406dc2a → 0.8.4-main.548089c

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.
@@ -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,25 +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
130
  debounceDelay: 200
154
131
  };
155
132
  var FunctionContext = class _FunctionContext {
133
+ _hf;
134
+ _runtime;
135
+ _space;
156
136
  // Mangle name with params.
157
137
  static createInvocationKey(name, ...args) {
158
138
  return JSON.stringify({
@@ -160,6 +140,34 @@ var FunctionContext = class _FunctionContext {
160
140
  ...args
161
141
  });
162
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
+ }
163
171
  get space() {
164
172
  return this._space;
165
173
  }
@@ -248,35 +256,6 @@ var FunctionContext = class _FunctionContext {
248
256
  });
249
257
  return value;
250
258
  }
251
- constructor(_hf, _runtime, _space, _options) {
252
- _define_property2(this, "_hf", void 0);
253
- _define_property2(this, "_runtime", 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._runtime = _runtime;
263
- this._space = _space;
264
- this._cache = /* @__PURE__ */ new Map();
265
- this._pending = /* @__PURE__ */ new Map();
266
- this._subscriptions = /* @__PURE__ */ new Map();
267
- this._invocations = {};
268
- this._options = defaultsDeep(_options ?? {}, defaultFunctionContextOptions);
269
- this._onUpdate = debounce((update) => {
270
- log("update", update, {
271
- F: __dxlog_file2,
272
- L: 86,
273
- S: this,
274
- C: (f, a) => f(...a)
275
- });
276
- this._hf.resumeEvaluation();
277
- this._options.onUpdate?.(update);
278
- }, this._options.debounceDelay);
279
- }
280
259
  };
281
260
  var AsyncFunctionPlugin = class extends FunctionPlugin {
282
261
  get context() {
@@ -300,7 +279,7 @@ import * as Effect from "effect/Effect";
300
279
  import * as SchemaAST from "effect/SchemaAST";
301
280
  import { Filter } from "@dxos/client/echo";
302
281
  import { toEffectSchema } from "@dxos/echo/internal";
303
- import { ComputeEventLogger, FunctionInvocationService, FunctionType, TracingService } from "@dxos/functions";
282
+ import { Function, FunctionInvocationService, TracingService } from "@dxos/functions";
304
283
  import { FunctionDefinition } from "@dxos/functions";
305
284
  import { log as log2 } from "@dxos/log";
306
285
  import { isNonNullable } from "@dxos/util";
@@ -315,7 +294,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
315
294
  if (!space) {
316
295
  return new CellError2(ErrorType2.REF, "Missing space");
317
296
  }
318
- const { objects: [fn] } = await space.db.query(Filter.type(FunctionType, {
297
+ const { objects: [fn] } = await space.db.query(Filter.type(Function.Function, {
319
298
  binding
320
299
  })).run();
321
300
  if (!fn) {
@@ -363,7 +342,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
363
342
  }
364
343
  const result = runtime.runPromise(Effect.gen(function* () {
365
344
  return yield* FunctionInvocationService.invokeFunction(functionDef, input);
366
- }).pipe(Effect.provide(ComputeEventLogger.layerFromTracing), Effect.provide(TracingService.layerNoop)));
345
+ }).pipe(Effect.provide(TracingService.layerNoop)));
367
346
  return result;
368
347
  };
369
348
  return this.runAsyncFunction(ast, state, handler(true), {
@@ -2800,30 +2779,19 @@ var defaultFunctions = [
2800
2779
  ];
2801
2780
 
2802
2781
  // src/compute-graph.ts
2782
+ import { effect as effect2 } from "@preact/signals-core";
2803
2783
  import { Event as Event2 } from "@dxos/async";
2804
- import { Filter as Filter2, fullyQualifiedId } from "@dxos/client/echo";
2784
+ import { Filter as Filter2 } from "@dxos/client/echo";
2805
2785
  import { FQ_ID_LENGTH } from "@dxos/client/echo";
2806
2786
  import { Resource as Resource2 } from "@dxos/context";
2787
+ import { Obj } from "@dxos/echo";
2807
2788
  import { getTypename } from "@dxos/echo/internal";
2808
- import { FunctionType as FunctionType2 } from "@dxos/functions";
2789
+ import { Function as Function2 } from "@dxos/functions";
2809
2790
  import { invariant as invariant2 } from "@dxos/invariant";
2810
2791
  import { PublicKey } from "@dxos/keys";
2811
2792
  import { log as log3 } from "@dxos/log";
2812
2793
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
2813
2794
  import { ExportedCellChange as ExportedCellChange2 } from "@dxos/vendor-hyperformula";
2814
- function _define_property3(obj, key, value) {
2815
- if (key in obj) {
2816
- Object.defineProperty(obj, key, {
2817
- value,
2818
- enumerable: true,
2819
- configurable: true,
2820
- writable: true
2821
- });
2822
- } else {
2823
- obj[key] = value;
2824
- }
2825
- return obj;
2826
- }
2827
2795
  var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph.ts";
2828
2796
  var UNKNOWN_BINDING = "__UNKNOWN__";
2829
2797
  var createSheetName = ({ type, id }) => `${type}@${id}`;
@@ -2837,6 +2805,49 @@ var parseSheetName = (name) => {
2837
2805
  };
2838
2806
  };
2839
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
+ }
2840
2851
  get hf() {
2841
2852
  return this._hf;
2842
2853
  }
@@ -2864,7 +2875,7 @@ var ComputeGraph = class extends Resource2 {
2864
2875
  getOrCreateNode(name) {
2865
2876
  invariant2(name.length, void 0, {
2866
2877
  F: __dxlog_file4,
2867
- L: 130,
2878
+ L: 135,
2868
2879
  S: this,
2869
2880
  A: [
2870
2881
  "name.length",
@@ -2877,7 +2888,7 @@ var ComputeGraph = class extends Resource2 {
2877
2888
  sheet: name
2878
2889
  }, {
2879
2890
  F: __dxlog_file4,
2880
- L: 132,
2891
+ L: 137,
2881
2892
  S: this,
2882
2893
  C: (f, a) => f(...a)
2883
2894
  });
@@ -2886,7 +2897,7 @@ var ComputeGraph = class extends Resource2 {
2886
2897
  const sheetId = this._hf.getSheetId(name);
2887
2898
  invariant2(sheetId !== void 0, void 0, {
2888
2899
  F: __dxlog_file4,
2889
- L: 137,
2900
+ L: 142,
2890
2901
  S: this,
2891
2902
  A: [
2892
2903
  "sheetId !== undefined",
@@ -2942,7 +2953,7 @@ var ComputeGraph = class extends Resource2 {
2942
2953
  }
2943
2954
  const fn = this._remoteFunctions.find((fn2) => fn2.binding === binding);
2944
2955
  if (fn) {
2945
- const id = fullyQualifiedId(fn);
2956
+ const id = Obj.getDXN(fn).toString();
2946
2957
  return `${id}(${args})`;
2947
2958
  } else {
2948
2959
  return match;
@@ -2959,7 +2970,7 @@ var ComputeGraph = class extends Resource2 {
2959
2970
  if (id.length !== FQ_ID_LENGTH) {
2960
2971
  return match;
2961
2972
  }
2962
- const fn = this._remoteFunctions.find((fn2) => fullyQualifiedId(fn2) === id);
2973
+ const fn = this._remoteFunctions.find((fn2) => Obj.getDXN(fn2).toString() === id);
2963
2974
  if (fn?.binding) {
2964
2975
  return `${fn.binding}(${args})`;
2965
2976
  } else {
@@ -2974,14 +2985,18 @@ var ComputeGraph = class extends Resource2 {
2974
2985
  }
2975
2986
  async _open() {
2976
2987
  if (this._space) {
2977
- const query = this._space.db.query(Filter2.type(FunctionType2));
2978
- const unsubscribe = query.subscribe(({ objects }) => {
2979
- 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);
2980
2992
  this.update.emit({
2981
2993
  type: "functionsUpdated"
2982
2994
  });
2983
2995
  });
2984
- this._ctx.onDispose(unsubscribe);
2996
+ this._ctx.onDispose(() => {
2997
+ unsubscribe();
2998
+ dispose();
2999
+ });
2985
3000
  }
2986
3001
  }
2987
3002
  async _close() {
@@ -2989,40 +3004,6 @@ var ComputeGraph = class extends Resource2 {
2989
3004
  await node.close();
2990
3005
  }
2991
3006
  }
2992
- constructor(_hf, _runtime, _space, _options) {
2993
- super(), _define_property3(this, "_hf", void 0), _define_property3(this, "_runtime", 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.
2994
- _define_property3(this, "_nodes", void 0), // Cached function objects.
2995
- _define_property3(this, "_remoteFunctions", void 0), _define_property3(this, "update", void 0), // The context is passed to all functions.
2996
- _define_property3(this, "context", void 0), this._hf = _hf, this._runtime = _runtime, this._space = _space, this._options = _options, this.id = `graph-${PublicKey.random().truncate()}`, this._nodes = /* @__PURE__ */ new Map(), this._remoteFunctions = [], this.update = new Event2();
2997
- this.context = new FunctionContext(this._hf, this._runtime, this._space, {
2998
- ...this._options,
2999
- onUpdate: (update) => {
3000
- this._options?.onUpdate?.(update);
3001
- this.update.emit({
3002
- type: "valuesUpdated"
3003
- });
3004
- }
3005
- });
3006
- this._hf.updateConfig({
3007
- context: this.context
3008
- });
3009
- const onValuesUpdate = (changes) => {
3010
- for (const change of changes) {
3011
- if (change instanceof ExportedCellChange2) {
3012
- const { sheet } = change;
3013
- const node = this._nodes.get(sheet);
3014
- if (node) {
3015
- node.update.emit({
3016
- type: "valuesUpdated",
3017
- change
3018
- });
3019
- }
3020
- }
3021
- }
3022
- };
3023
- this._hf.on("valuesUpdated", onValuesUpdate);
3024
- this._ctx.onDispose(() => this._hf.off("valuesUpdated", onValuesUpdate));
3025
- }
3026
3007
  };
3027
3008
 
3028
3009
  // src/compute-graph-registry.ts
@@ -3031,19 +3012,6 @@ import { Resource as Resource3 } from "@dxos/context";
3031
3012
  import { invariant as invariant3 } from "@dxos/invariant";
3032
3013
  import { log as log4 } from "@dxos/log";
3033
3014
  import { HyperFormula } from "@dxos/vendor-hyperformula";
3034
- function _define_property4(obj, key, value) {
3035
- if (key in obj) {
3036
- Object.defineProperty(obj, key, {
3037
- value,
3038
- enumerable: true,
3039
- configurable: true,
3040
- writable: true
3041
- });
3042
- } else {
3043
- obj[key] = value;
3044
- }
3045
- return obj;
3046
- }
3047
3015
  var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph-registry.ts";
3048
3016
  var defaultPlugins = [
3049
3017
  {
@@ -3055,6 +3023,16 @@ var defaultOptions = {
3055
3023
  licenseKey: "gpl-v3"
3056
3024
  };
3057
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
+ }
3058
3036
  getGraph(spaceId) {
3059
3037
  return this._graphs.get(spaceId);
3060
3038
  }
@@ -3104,14 +3082,6 @@ var ComputeGraphRegistry = class extends Resource3 {
3104
3082
  }
3105
3083
  this._graphs.clear();
3106
3084
  }
3107
- constructor(options) {
3108
- super(), _define_property4(this, "_graphs", /* @__PURE__ */ new Map()), _define_property4(this, "_options", void 0);
3109
- this._options = defaultsDeep2({}, options, defaultOptions);
3110
- this._options.plugins = this._options.plugins ?? defaultPlugins;
3111
- this._options.plugins?.forEach(({ plugin, translations }) => {
3112
- HyperFormula.registerFunctionPlugin(plugin, translations);
3113
- });
3114
- }
3115
3085
  };
3116
3086
 
3117
3087
  export {
@@ -3141,4 +3111,4 @@ export {
3141
3111
  defaultOptions,
3142
3112
  ComputeGraphRegistry
3143
3113
  };
3144
- //# sourceMappingURL=chunk-C7KLV2IU.mjs.map
3114
+ //# sourceMappingURL=chunk-CPBXT2HX.mjs.map