@dxos/compute 0.8.4-main.406dc2a → 0.8.4-main.52d7546f51

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 (30) hide show
  1. package/dist/lib/{browser/chunk-C7KLV2IU.mjs → neutral/chunk-KGBGT4NT.mjs} +111 -149
  2. package/dist/lib/neutral/chunk-KGBGT4NT.mjs.map +7 -0
  3. package/dist/lib/{browser → neutral}/index.mjs +1 -1
  4. package/dist/lib/neutral/meta.json +1 -0
  5. package/dist/lib/{browser → neutral}/testing/index.mjs +12 -20
  6. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  7. package/dist/types/src/compute-graph.d.ts.map +1 -1
  8. package/dist/types/src/functions/edge-function.d.ts.map +1 -1
  9. package/dist/types/src/index.d.ts.map +1 -1
  10. package/dist/types/src/testing/test-runtime.d.ts +1 -1
  11. package/dist/types/src/testing/test-runtime.d.ts.map +1 -1
  12. package/dist/types/tsconfig.tsbuildinfo +1 -1
  13. package/package.json +28 -27
  14. package/src/compute-graph-registry.test.ts +32 -12
  15. package/src/compute-graph.test.ts +29 -10
  16. package/src/compute-graph.ts +14 -11
  17. package/src/functions/edge-function.ts +12 -13
  18. package/src/index.ts +0 -27
  19. package/src/testing/test-runtime.ts +6 -10
  20. package/dist/lib/browser/chunk-C7KLV2IU.mjs.map +0 -7
  21. package/dist/lib/browser/meta.json +0 -1
  22. package/dist/lib/browser/testing/index.mjs.map +0 -7
  23. package/dist/lib/node-esm/chunk-K37OSZ5O.mjs +0 -3146
  24. package/dist/lib/node-esm/chunk-K37OSZ5O.mjs.map +0 -7
  25. package/dist/lib/node-esm/index.mjs +0 -56
  26. package/dist/lib/node-esm/index.mjs.map +0 -7
  27. package/dist/lib/node-esm/meta.json +0 -1
  28. package/dist/lib/node-esm/testing/index.mjs +0 -207
  29. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  30. /package/dist/lib/{browser → neutral}/index.mjs.map +0 -0
@@ -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() {
@@ -295,12 +274,11 @@ var AsyncFunctionPlugin = class extends FunctionPlugin {
295
274
  };
296
275
 
297
276
  // src/functions/edge-function.ts
298
- import { effect } from "@preact/signals-core";
299
277
  import * as Effect from "effect/Effect";
300
278
  import * as SchemaAST from "effect/SchemaAST";
301
279
  import { Filter } from "@dxos/client/echo";
302
- import { toEffectSchema } from "@dxos/echo/internal";
303
- import { ComputeEventLogger, FunctionInvocationService, FunctionType, TracingService } from "@dxos/functions";
280
+ import { JsonSchema, Obj } from "@dxos/echo";
281
+ import { Function, FunctionInvocationService, TracingService } from "@dxos/functions";
304
282
  import { FunctionDefinition } from "@dxos/functions";
305
283
  import { log as log2 } from "@dxos/log";
306
284
  import { isNonNullable } from "@dxos/util";
@@ -315,7 +293,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
315
293
  if (!space) {
316
294
  return new CellError2(ErrorType2.REF, "Missing space");
317
295
  }
318
- const { objects: [fn] } = await space.db.query(Filter.type(FunctionType, {
296
+ const [fn] = await space.db.query(Filter.type(Function.Function, {
319
297
  binding
320
298
  })).run();
321
299
  if (!fn) {
@@ -323,23 +301,22 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
323
301
  binding
324
302
  }, {
325
303
  F: __dxlog_file3,
326
- L: 43,
304
+ L: 40,
327
305
  S: this,
328
306
  C: (f, a) => f(...a)
329
307
  });
330
308
  return new CellError2(ErrorType2.REF, "Function not found");
331
309
  }
332
310
  if (subscribe) {
333
- const unsubscribe = effect(() => {
311
+ const unsubscribe = Obj.subscribe(fn, () => {
334
312
  log2("function changed", {
335
313
  fn
336
314
  }, {
337
315
  F: __dxlog_file3,
338
- L: 49,
316
+ L: 46,
339
317
  S: this,
340
318
  C: (f, a) => f(...a)
341
319
  });
342
- const _ = fn?.version;
343
320
  this.runAsyncFunction(ast, state, handler(false), {
344
321
  ttl: FUNCTION_TTL
345
322
  });
@@ -350,7 +327,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
350
327
  const functionDef = FunctionDefinition.deserialize(fn);
351
328
  let input;
352
329
  if (fn.inputSchema) {
353
- const schema = toEffectSchema(fn.inputSchema);
330
+ const schema = JsonSchema.toEffectSchema(fn.inputSchema);
354
331
  const props = SchemaAST.getPropertySignatures(schema.ast);
355
332
  input = {};
356
333
  props.forEach(({ name }, index) => {
@@ -363,7 +340,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
363
340
  }
364
341
  const result = runtime.runPromise(Effect.gen(function* () {
365
342
  return yield* FunctionInvocationService.invokeFunction(functionDef, input);
366
- }).pipe(Effect.provide(ComputeEventLogger.layerFromTracing), Effect.provide(TracingService.layerNoop)));
343
+ }).pipe(Effect.provide(TracingService.layerNoop)));
367
344
  return result;
368
345
  };
369
346
  return this.runAsyncFunction(ast, state, handler(true), {
@@ -2801,29 +2778,16 @@ var defaultFunctions = [
2801
2778
 
2802
2779
  // src/compute-graph.ts
2803
2780
  import { Event as Event2 } from "@dxos/async";
2804
- import { Filter as Filter2, fullyQualifiedId } from "@dxos/client/echo";
2781
+ import { Filter as Filter2 } from "@dxos/client/echo";
2805
2782
  import { FQ_ID_LENGTH } from "@dxos/client/echo";
2806
2783
  import { Resource as Resource2 } from "@dxos/context";
2807
- import { getTypename } from "@dxos/echo/internal";
2808
- import { FunctionType as FunctionType2 } from "@dxos/functions";
2784
+ import { Obj as Obj2 } from "@dxos/echo";
2785
+ import { Function as Function2 } from "@dxos/functions";
2809
2786
  import { invariant as invariant2 } from "@dxos/invariant";
2810
2787
  import { PublicKey } from "@dxos/keys";
2811
2788
  import { log as log3 } from "@dxos/log";
2812
2789
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
2813
2790
  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
2791
  var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph.ts";
2828
2792
  var UNKNOWN_BINDING = "__UNKNOWN__";
2829
2793
  var createSheetName = ({ type, id }) => `${type}@${id}`;
@@ -2837,6 +2801,49 @@ var parseSheetName = (name) => {
2837
2801
  };
2838
2802
  };
2839
2803
  var ComputeGraph = class extends Resource2 {
2804
+ _hf;
2805
+ _runtime;
2806
+ _space;
2807
+ _options;
2808
+ id = `graph-${PublicKey.random().truncate()}`;
2809
+ // Map of nodes indexed by sheet number.
2810
+ _nodes = /* @__PURE__ */ new Map();
2811
+ // Cached function objects.
2812
+ _remoteFunctions = [];
2813
+ update = new Event2();
2814
+ // The context is passed to all functions.
2815
+ context;
2816
+ constructor(_hf, _runtime, _space, _options) {
2817
+ super(), this._hf = _hf, this._runtime = _runtime, this._space = _space, this._options = _options;
2818
+ this.context = new FunctionContext(this._hf, this._runtime, this._space, {
2819
+ ...this._options,
2820
+ onUpdate: (update) => {
2821
+ this._options?.onUpdate?.(update);
2822
+ this.update.emit({
2823
+ type: "valuesUpdated"
2824
+ });
2825
+ }
2826
+ });
2827
+ this._hf.updateConfig({
2828
+ context: this.context
2829
+ });
2830
+ const onValuesUpdate = (changes) => {
2831
+ for (const change of changes) {
2832
+ if (change instanceof ExportedCellChange2) {
2833
+ const { sheet } = change;
2834
+ const node = this._nodes.get(sheet);
2835
+ if (node) {
2836
+ node.update.emit({
2837
+ type: "valuesUpdated",
2838
+ change
2839
+ });
2840
+ }
2841
+ }
2842
+ }
2843
+ };
2844
+ this._hf.on("valuesUpdated", onValuesUpdate);
2845
+ this._ctx.onDispose(() => this._hf.off("valuesUpdated", onValuesUpdate));
2846
+ }
2840
2847
  get hf() {
2841
2848
  return this._hf;
2842
2849
  }
@@ -2864,7 +2871,7 @@ var ComputeGraph = class extends Resource2 {
2864
2871
  getOrCreateNode(name) {
2865
2872
  invariant2(name.length, void 0, {
2866
2873
  F: __dxlog_file4,
2867
- L: 130,
2874
+ L: 133,
2868
2875
  S: this,
2869
2876
  A: [
2870
2877
  "name.length",
@@ -2877,7 +2884,7 @@ var ComputeGraph = class extends Resource2 {
2877
2884
  sheet: name
2878
2885
  }, {
2879
2886
  F: __dxlog_file4,
2880
- L: 132,
2887
+ L: 135,
2881
2888
  S: this,
2882
2889
  C: (f, a) => f(...a)
2883
2890
  });
@@ -2886,7 +2893,7 @@ var ComputeGraph = class extends Resource2 {
2886
2893
  const sheetId = this._hf.getSheetId(name);
2887
2894
  invariant2(sheetId !== void 0, void 0, {
2888
2895
  F: __dxlog_file4,
2889
- L: 137,
2896
+ L: 140,
2890
2897
  S: this,
2891
2898
  A: [
2892
2899
  "sheetId !== undefined",
@@ -2910,7 +2917,7 @@ var ComputeGraph = class extends Resource2 {
2910
2917
  }).filter(isNonNullable2);
2911
2918
  for (const obj of objects) {
2912
2919
  if (obj.name === name) {
2913
- const type = getTypename(obj);
2920
+ const type = Obj2.getTypename(obj);
2914
2921
  return `'${createSheetName({
2915
2922
  type,
2916
2923
  id: obj.id
@@ -2942,7 +2949,7 @@ var ComputeGraph = class extends Resource2 {
2942
2949
  }
2943
2950
  const fn = this._remoteFunctions.find((fn2) => fn2.binding === binding);
2944
2951
  if (fn) {
2945
- const id = fullyQualifiedId(fn);
2952
+ const id = Obj2.getDXN(fn).toString();
2946
2953
  return `${id}(${args})`;
2947
2954
  } else {
2948
2955
  return match;
@@ -2959,7 +2966,7 @@ var ComputeGraph = class extends Resource2 {
2959
2966
  if (id.length !== FQ_ID_LENGTH) {
2960
2967
  return match;
2961
2968
  }
2962
- const fn = this._remoteFunctions.find((fn2) => fullyQualifiedId(fn2) === id);
2969
+ const fn = this._remoteFunctions.find((fn2) => Obj2.getDXN(fn2).toString() === id);
2963
2970
  if (fn?.binding) {
2964
2971
  return `${fn.binding}(${args})`;
2965
2972
  } else {
@@ -2974,9 +2981,9 @@ var ComputeGraph = class extends Resource2 {
2974
2981
  }
2975
2982
  async _open() {
2976
2983
  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);
2984
+ const query = this._space.db.query(Filter2.type(Function2.Function));
2985
+ const unsubscribe = query.subscribe(() => {
2986
+ this._remoteFunctions = query.results.filter((fn) => fn.binding);
2980
2987
  this.update.emit({
2981
2988
  type: "functionsUpdated"
2982
2989
  });
@@ -2989,40 +2996,6 @@ var ComputeGraph = class extends Resource2 {
2989
2996
  await node.close();
2990
2997
  }
2991
2998
  }
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
2999
  };
3027
3000
 
3028
3001
  // src/compute-graph-registry.ts
@@ -3031,19 +3004,6 @@ import { Resource as Resource3 } from "@dxos/context";
3031
3004
  import { invariant as invariant3 } from "@dxos/invariant";
3032
3005
  import { log as log4 } from "@dxos/log";
3033
3006
  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
3007
  var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph-registry.ts";
3048
3008
  var defaultPlugins = [
3049
3009
  {
@@ -3055,6 +3015,16 @@ var defaultOptions = {
3055
3015
  licenseKey: "gpl-v3"
3056
3016
  };
3057
3017
  var ComputeGraphRegistry = class extends Resource3 {
3018
+ _graphs = /* @__PURE__ */ new Map();
3019
+ _options;
3020
+ constructor(options) {
3021
+ super();
3022
+ this._options = defaultsDeep2({}, options, defaultOptions);
3023
+ this._options.plugins = this._options.plugins ?? defaultPlugins;
3024
+ this._options.plugins?.forEach(({ plugin, translations }) => {
3025
+ HyperFormula.registerFunctionPlugin(plugin, translations);
3026
+ });
3027
+ }
3058
3028
  getGraph(spaceId) {
3059
3029
  return this._graphs.get(spaceId);
3060
3030
  }
@@ -3104,14 +3074,6 @@ var ComputeGraphRegistry = class extends Resource3 {
3104
3074
  }
3105
3075
  this._graphs.clear();
3106
3076
  }
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
3077
  };
3116
3078
 
3117
3079
  export {
@@ -3141,4 +3103,4 @@ export {
3141
3103
  defaultOptions,
3142
3104
  ComputeGraphRegistry
3143
3105
  };
3144
- //# sourceMappingURL=chunk-C7KLV2IU.mjs.map
3106
+ //# sourceMappingURL=chunk-KGBGT4NT.mjs.map