@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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/testing/test-builder.ts", "../../../../src/testing/test-runtime.ts", "../../../../src/testing/test-plugin.ts", "../../../../src/util.ts", "../../../../src/testing/util.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Client, type ClientOptions } from '@dxos/client';\nimport { type Context, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\n\nimport { type ComputeGraphOptions, ComputeGraphRegistry } from '../compute-graph-registry';\n\nimport { createMockedComputeRuntimeProvider } from './test-runtime';\n\nexport type TestBuilderOptions = ClientOptions & Partial<ComputeGraphOptions>;\n\n// TODO(burdon): Reconcile with @dxos/client/testing.\nexport class TestBuilder extends Resource {\n private _client?: Client;\n private _registry?: ComputeGraphRegistry;\n\n constructor(private readonly _options: TestBuilderOptions = {}) {\n super();\n }\n\n get ctx(): Context {\n return this._ctx;\n }\n\n get client(): Client {\n invariant(this._client);\n return this._client;\n }\n\n get registry(): ComputeGraphRegistry {\n invariant(this._registry);\n return this._registry;\n }\n\n override async _open(): Promise<void> {\n const client = new Client(this._options);\n await client.initialize();\n await client.halo.createIdentity();\n this._client = client;\n this._ctx.onDispose(async () => {\n await client.destroy();\n this._client = undefined;\n });\n\n const registry = new ComputeGraphRegistry({\n ...this._options,\n // Provide a default runtime provider for tests if not supplied.\n computeRuntime: this._options.computeRuntime ?? createMockedComputeRuntimeProvider(),\n });\n await registry.open();\n this._registry = registry;\n this._ctx.onDispose(async () => {\n await registry.close();\n this._registry = undefined;\n });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { AiService } from '@dxos/ai';\nimport { type SpaceId } from '@dxos/client/echo';\nimport {\n CredentialsService,\n DatabaseService,\n type FunctionDefinition,\n FunctionInvocationService,\n QueueService,\n} from '@dxos/functions';\n\nimport { type FunctionsRuntimeProvider } from '../compute-graph-registry';\n\n/**\n * Minimal compute runtime provider for tests and Storybook.\n * Will cause errors if used for actual runtime.\n */\nexport const createMockedComputeRuntimeProvider = ({\n functions,\n}: { functions?: FunctionDefinition<any, any>[] } = {}): FunctionsRuntimeProvider => {\n return {\n getRuntime: (_spaceId: SpaceId) =>\n ManagedRuntime.make(\n FunctionInvocationService.layerTest({ functions }).pipe(\n Layer.provide(AiService.notAvailable),\n Layer.provide(CredentialsService.configuredLayer([])),\n Layer.provide(DatabaseService.notAvailable),\n Layer.provide(QueueService.notAvailable),\n ),\n ),\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { getDeep } from '@dxos/util';\nimport { type InterpreterState, type ProcedureAst } from '@dxos/vendor-hyperformula';\nimport { FunctionArgumentType } from '@dxos/vendor-hyperformula';\n\nimport { type ComputeGraphPlugin } from '../compute-graph-registry';\nimport { type AsyncFunction, AsyncFunctionPlugin } from '../functions';\nimport { parseNumberString } from '../util';\n\n/**\n * Testing functions run locally (not run via EDGE).\n * https://hyperformula.handsontable.com/guide/custom-functions.html#add-a-simple-custom-function\n */\nexport class TestPlugin extends AsyncFunctionPlugin {\n /**\n * Simple local function returns input value.\n */\n test(ast: ProcedureAst, state: InterpreterState) {\n const handler: AsyncFunction = async (_value) => {\n return _value;\n };\n\n return this.runAsyncFunction(ast, state, handler);\n }\n\n /**\n * Simple local function returns random number.\n */\n random(ast: ProcedureAst, state: InterpreterState) {\n const handler: AsyncFunction = async () => {\n return Math.random();\n };\n\n return this.runAsyncFunction(ast, state, handler);\n }\n\n /**\n * Async HTTP function.\n */\n crypto(ast: ProcedureAst, state: InterpreterState) {\n const handler: AsyncFunction = async (_currency) => {\n const currency = (_currency || 'USD').toUpperCase();\n const result = await fetch(`https://api.coindesk.com/v1/bpi/currentprice/${currency}.json`);\n const data = await result.json();\n const rate = getDeep<string>(data, ['bpi', currency, 'rate']);\n if (!rate) {\n return NaN;\n }\n\n return parseNumberString(rate);\n };\n\n return this.runAsyncFunction(ast, state, handler, { ttl: 10_000 });\n }\n}\n\nTestPlugin.implementedFunctions = {\n TEST: {\n method: 'test',\n parameters: [{ argumentType: FunctionArgumentType.NUMBER, optionalArg: false }],\n isVolatile: true,\n },\n\n RANDOM: {\n method: 'random',\n parameters: [],\n isVolatile: true,\n },\n\n CRYPTO: {\n method: 'crypto',\n parameters: [{ argumentType: FunctionArgumentType.STRING, optionalArg: true }],\n isVolatile: true,\n },\n};\n\nexport const TestPluginTranslations = {\n enGB: {\n TEST: 'Returns input value',\n RANDOM: 'Random number',\n CRYPTO: 'Crypto token value',\n },\n enUS: {\n TEST: 'Returns input value',\n RANDOM: 'Random number',\n CRYPTO: 'Crypto token value',\n },\n};\n\nexport const testFunctionPlugins: ComputeGraphPlugin[] = [\n {\n plugin: TestPlugin,\n translations: TestPluginTranslations,\n },\n];\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Factor out.\nexport const parseNumberString = (str: string): number => {\n return parseFloat(str.replace(/[^\\d.]/g, ''));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { HyperFormula } from '@dxos/vendor-hyperformula';\n\nexport const getRegisteredFunctionNames = () => {\n return HyperFormula.buildEmpty({ licenseKey: 'gpl-v3' }).getRegisteredFunctionNames();\n};\n"],
5
- "mappings": "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",
6
- "names": ["Client", "Resource", "invariant", "Layer", "ManagedRuntime", "AiService", "CredentialsService", "DatabaseService", "FunctionInvocationService", "QueueService", "createMockedComputeRuntimeProvider", "functions", "getRuntime", "_spaceId", "make", "FunctionInvocationService", "layerTest", "pipe", "provide", "AiService", "notAvailable", "CredentialsService", "configuredLayer", "DatabaseService", "QueueService", "TestBuilder", "Resource", "ctx", "_ctx", "client", "invariant", "_client", "registry", "_registry", "_open", "Client", "_options", "initialize", "halo", "createIdentity", "onDispose", "destroy", "undefined", "ComputeGraphRegistry", "computeRuntime", "createMockedComputeRuntimeProvider", "open", "close", "getDeep", "FunctionArgumentType", "parseNumberString", "str", "parseFloat", "replace", "TestPlugin", "AsyncFunctionPlugin", "test", "ast", "state", "handler", "_value", "runAsyncFunction", "random", "Math", "crypto", "_currency", "currency", "toUpperCase", "result", "fetch", "data", "json", "rate", "getDeep", "NaN", "parseNumberString", "ttl", "implementedFunctions", "TEST", "method", "parameters", "argumentType", "FunctionArgumentType", "NUMBER", "optionalArg", "isVolatile", "RANDOM", "CRYPTO", "STRING", "TestPluginTranslations", "enGB", "enUS", "testFunctionPlugins", "plugin", "translations", "HyperFormula", "getRegisteredFunctionNames", "HyperFormula", "buildEmpty", "licenseKey"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Client, type ClientOptions } from '@dxos/client';\nimport { type Context, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\n\nimport { type ComputeGraphOptions, ComputeGraphRegistry } from '../compute-graph-registry';\n\nimport { createMockedComputeRuntimeProvider } from './test-runtime';\n\nexport type TestBuilderOptions = ClientOptions & Partial<ComputeGraphOptions>;\n\n// TODO(burdon): Reconcile with @dxos/client/testing.\nexport class TestBuilder extends Resource {\n private _client?: Client;\n private _registry?: ComputeGraphRegistry;\n\n constructor(private readonly _options: TestBuilderOptions = {}) {\n super();\n }\n\n get ctx(): Context {\n return this._ctx;\n }\n\n get client(): Client {\n invariant(this._client);\n return this._client;\n }\n\n get registry(): ComputeGraphRegistry {\n invariant(this._registry);\n return this._registry;\n }\n\n override async _open(): Promise<void> {\n const client = new Client(this._options);\n await client.initialize();\n await client.halo.createIdentity();\n this._client = client;\n this._ctx.onDispose(async () => {\n await client.destroy();\n this._client = undefined;\n });\n\n const registry = new ComputeGraphRegistry({\n ...this._options,\n // Provide a default runtime provider for tests if not supplied.\n computeRuntime: this._options.computeRuntime ?? createMockedComputeRuntimeProvider(),\n });\n await registry.open();\n this._registry = registry;\n this._ctx.onDispose(async () => {\n await registry.close();\n this._registry = undefined;\n });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { AiService } from '@dxos/ai';\nimport { type SpaceId } from '@dxos/client/echo';\nimport { CredentialsService, DatabaseService, type FunctionDefinition, QueueService } from '@dxos/functions';\nimport { FunctionInvocationServiceLayerTest } from '@dxos/functions-runtime/testing';\n\nimport { type FunctionsRuntimeProvider } from '../compute-graph-registry';\n\n/**\n * Minimal compute runtime provider for tests and Storybook.\n * Will cause errors if used for actual runtime.\n */\nexport const createMockedComputeRuntimeProvider = ({\n functions,\n}: { functions?: FunctionDefinition<any, any>[] } = {}): FunctionsRuntimeProvider => {\n return {\n getRuntime: (_spaceId: SpaceId) =>\n ManagedRuntime.make(\n FunctionInvocationServiceLayerTest({ functions }).pipe(\n Layer.provide(AiService.notAvailable),\n Layer.provide(CredentialsService.configuredLayer([])),\n Layer.provide(DatabaseService.notAvailable),\n Layer.provide(QueueService.notAvailable),\n ),\n ),\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { getDeep } from '@dxos/util';\nimport { type InterpreterState, type ProcedureAst } from '@dxos/vendor-hyperformula';\nimport { FunctionArgumentType } from '@dxos/vendor-hyperformula';\n\nimport { type ComputeGraphPlugin } from '../compute-graph-registry';\nimport { type AsyncFunction, AsyncFunctionPlugin } from '../functions';\nimport { parseNumberString } from '../util';\n\n/**\n * Testing functions run locally (not run via EDGE).\n * https://hyperformula.handsontable.com/guide/custom-functions.html#add-a-simple-custom-function\n */\nexport class TestPlugin extends AsyncFunctionPlugin {\n /**\n * Simple local function returns input value.\n */\n test(ast: ProcedureAst, state: InterpreterState) {\n const handler: AsyncFunction = async (_value) => {\n return _value;\n };\n\n return this.runAsyncFunction(ast, state, handler);\n }\n\n /**\n * Simple local function returns random number.\n */\n random(ast: ProcedureAst, state: InterpreterState) {\n const handler: AsyncFunction = async () => {\n return Math.random();\n };\n\n return this.runAsyncFunction(ast, state, handler);\n }\n\n /**\n * Async HTTP function.\n */\n crypto(ast: ProcedureAst, state: InterpreterState) {\n const handler: AsyncFunction = async (_currency) => {\n const currency = (_currency || 'USD').toUpperCase();\n const result = await fetch(`https://api.coindesk.com/v1/bpi/currentprice/${currency}.json`);\n const data = await result.json();\n const rate = getDeep<string>(data, ['bpi', currency, 'rate']);\n if (!rate) {\n return NaN;\n }\n\n return parseNumberString(rate);\n };\n\n return this.runAsyncFunction(ast, state, handler, { ttl: 10_000 });\n }\n}\n\nTestPlugin.implementedFunctions = {\n TEST: {\n method: 'test',\n parameters: [{ argumentType: FunctionArgumentType.NUMBER, optionalArg: false }],\n isVolatile: true,\n },\n\n RANDOM: {\n method: 'random',\n parameters: [],\n isVolatile: true,\n },\n\n CRYPTO: {\n method: 'crypto',\n parameters: [{ argumentType: FunctionArgumentType.STRING, optionalArg: true }],\n isVolatile: true,\n },\n};\n\nexport const TestPluginTranslations = {\n enGB: {\n TEST: 'Returns input value',\n RANDOM: 'Random number',\n CRYPTO: 'Crypto token value',\n },\n enUS: {\n TEST: 'Returns input value',\n RANDOM: 'Random number',\n CRYPTO: 'Crypto token value',\n },\n};\n\nexport const testFunctionPlugins: ComputeGraphPlugin[] = [\n {\n plugin: TestPlugin,\n translations: TestPluginTranslations,\n },\n];\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Factor out.\nexport const parseNumberString = (str: string): number => {\n return parseFloat(str.replace(/[^\\d.]/g, ''));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { HyperFormula } from '@dxos/vendor-hyperformula';\n\nexport const getRegisteredFunctionNames = () => {\n return HyperFormula.buildEmpty({ licenseKey: 'gpl-v3' }).getRegisteredFunctionNames();\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Client", "Resource", "invariant", "Layer", "ManagedRuntime", "AiService", "CredentialsService", "DatabaseService", "QueueService", "FunctionInvocationServiceLayerTest", "createMockedComputeRuntimeProvider", "functions", "getRuntime", "_spaceId", "make", "FunctionInvocationServiceLayerTest", "pipe", "provide", "AiService", "notAvailable", "CredentialsService", "configuredLayer", "DatabaseService", "QueueService", "TestBuilder", "Resource", "_client", "_registry", "_options", "ctx", "_ctx", "client", "invariant", "registry", "_open", "Client", "initialize", "halo", "createIdentity", "onDispose", "destroy", "undefined", "ComputeGraphRegistry", "computeRuntime", "createMockedComputeRuntimeProvider", "open", "close", "getDeep", "FunctionArgumentType", "parseNumberString", "str", "parseFloat", "replace", "TestPlugin", "AsyncFunctionPlugin", "test", "ast", "state", "handler", "_value", "runAsyncFunction", "random", "Math", "crypto", "_currency", "currency", "toUpperCase", "result", "fetch", "data", "json", "rate", "getDeep", "NaN", "parseNumberString", "ttl", "implementedFunctions", "TEST", "method", "parameters", "argumentType", "FunctionArgumentType", "NUMBER", "optionalArg", "isVolatile", "RANDOM", "CRYPTO", "STRING", "TestPluginTranslations", "enGB", "enUS", "testFunctionPlugins", "plugin", "translations", "HyperFormula", "getRegisteredFunctionNames", "HyperFormula", "buildEmpty", "licenseKey"]
7
7
  }
@@ -80,20 +80,13 @@ var inRange = (range, cell) => {
80
80
  import { Event } from "@dxos/async";
81
81
  import { Resource } from "@dxos/context";
82
82
  import { DetailedCellError as DetailedCellError2 } from "@dxos/vendor-hyperformula";
83
- function _define_property(obj, key, value) {
84
- if (key in obj) {
85
- Object.defineProperty(obj, key, {
86
- value,
87
- enumerable: true,
88
- configurable: true,
89
- writable: true
90
- });
91
- } else {
92
- obj[key] = value;
93
- }
94
- return obj;
95
- }
96
83
  var ComputeNode = class extends Resource {
84
+ _graph;
85
+ sheetId;
86
+ update = new Event();
87
+ constructor(_graph, sheetId) {
88
+ super(), this._graph = _graph, this.sheetId = sheetId;
89
+ }
97
90
  get graph() {
98
91
  return this._graph;
99
92
  }
@@ -126,9 +119,6 @@ var ComputeNode = class extends Resource {
126
119
  // TODO(burdon): Load data into sheet.
127
120
  async _open() {
128
121
  }
129
- constructor(_graph, sheetId) {
130
- 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();
131
- }
132
122
  };
133
123
 
134
124
  // src/functions/async-function.ts
@@ -136,25 +126,15 @@ import defaultsDeep from "lodash.defaultsdeep";
136
126
  import { debounce } from "@dxos/async";
137
127
  import { log } from "@dxos/log";
138
128
  import { CellError, EmptyValue, ErrorType, FunctionPlugin } from "@dxos/vendor-hyperformula";
139
- function _define_property2(obj, key, value) {
140
- if (key in obj) {
141
- Object.defineProperty(obj, key, {
142
- value,
143
- enumerable: true,
144
- configurable: true,
145
- writable: true
146
- });
147
- } else {
148
- obj[key] = value;
149
- }
150
- return obj;
151
- }
152
129
  var __dxlog_file2 = "/__w/dxos/dxos/packages/core/compute/src/functions/async-function.ts";
153
130
  var defaultFunctionContextOptions = {
154
131
  defaultTtl: 5e3,
155
132
  debounceDelay: 200
156
133
  };
157
134
  var FunctionContext = class _FunctionContext {
135
+ _hf;
136
+ _runtime;
137
+ _space;
158
138
  // Mangle name with params.
159
139
  static createInvocationKey(name, ...args) {
160
140
  return JSON.stringify({
@@ -162,6 +142,34 @@ var FunctionContext = class _FunctionContext {
162
142
  ...args
163
143
  });
164
144
  }
145
+ // TODO(wittjosiah): Persist cached values.
146
+ // Cached values for cell.
147
+ _cache = /* @__PURE__ */ new Map();
148
+ // Active requests.
149
+ _pending = /* @__PURE__ */ new Map();
150
+ // Query subscriptions.
151
+ _subscriptions = /* @__PURE__ */ new Map();
152
+ // Invocation count.
153
+ _invocations = {};
154
+ _options;
155
+ // Debounced update handler.
156
+ _onUpdate;
157
+ constructor(_hf, _runtime, _space, _options) {
158
+ this._hf = _hf;
159
+ this._runtime = _runtime;
160
+ this._space = _space;
161
+ this._options = defaultsDeep(_options ?? {}, defaultFunctionContextOptions);
162
+ this._onUpdate = debounce((update) => {
163
+ log("update", update, {
164
+ F: __dxlog_file2,
165
+ L: 86,
166
+ S: this,
167
+ C: (f, a) => f(...a)
168
+ });
169
+ this._hf.resumeEvaluation();
170
+ this._options.onUpdate?.(update);
171
+ }, this._options.debounceDelay);
172
+ }
165
173
  get space() {
166
174
  return this._space;
167
175
  }
@@ -250,35 +258,6 @@ var FunctionContext = class _FunctionContext {
250
258
  });
251
259
  return value;
252
260
  }
253
- constructor(_hf, _runtime, _space, _options) {
254
- _define_property2(this, "_hf", void 0);
255
- _define_property2(this, "_runtime", void 0);
256
- _define_property2(this, "_space", void 0);
257
- _define_property2(this, "_cache", void 0);
258
- _define_property2(this, "_pending", void 0);
259
- _define_property2(this, "_subscriptions", void 0);
260
- _define_property2(this, "_invocations", void 0);
261
- _define_property2(this, "_options", void 0);
262
- _define_property2(this, "_onUpdate", void 0);
263
- this._hf = _hf;
264
- this._runtime = _runtime;
265
- this._space = _space;
266
- this._cache = /* @__PURE__ */ new Map();
267
- this._pending = /* @__PURE__ */ new Map();
268
- this._subscriptions = /* @__PURE__ */ new Map();
269
- this._invocations = {};
270
- this._options = defaultsDeep(_options ?? {}, defaultFunctionContextOptions);
271
- this._onUpdate = debounce((update) => {
272
- log("update", update, {
273
- F: __dxlog_file2,
274
- L: 86,
275
- S: this,
276
- C: (f, a) => f(...a)
277
- });
278
- this._hf.resumeEvaluation();
279
- this._options.onUpdate?.(update);
280
- }, this._options.debounceDelay);
281
- }
282
261
  };
283
262
  var AsyncFunctionPlugin = class extends FunctionPlugin {
284
263
  get context() {
@@ -302,7 +281,7 @@ import * as Effect from "effect/Effect";
302
281
  import * as SchemaAST from "effect/SchemaAST";
303
282
  import { Filter } from "@dxos/client/echo";
304
283
  import { toEffectSchema } from "@dxos/echo/internal";
305
- import { ComputeEventLogger, FunctionInvocationService, FunctionType, TracingService } from "@dxos/functions";
284
+ import { Function, FunctionInvocationService, TracingService } from "@dxos/functions";
306
285
  import { FunctionDefinition } from "@dxos/functions";
307
286
  import { log as log2 } from "@dxos/log";
308
287
  import { isNonNullable } from "@dxos/util";
@@ -317,7 +296,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
317
296
  if (!space) {
318
297
  return new CellError2(ErrorType2.REF, "Missing space");
319
298
  }
320
- const { objects: [fn] } = await space.db.query(Filter.type(FunctionType, {
299
+ const { objects: [fn] } = await space.db.query(Filter.type(Function.Function, {
321
300
  binding
322
301
  })).run();
323
302
  if (!fn) {
@@ -365,7 +344,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
365
344
  }
366
345
  const result = runtime.runPromise(Effect.gen(function* () {
367
346
  return yield* FunctionInvocationService.invokeFunction(functionDef, input);
368
- }).pipe(Effect.provide(ComputeEventLogger.layerFromTracing), Effect.provide(TracingService.layerNoop)));
347
+ }).pipe(Effect.provide(TracingService.layerNoop)));
369
348
  return result;
370
349
  };
371
350
  return this.runAsyncFunction(ast, state, handler(true), {
@@ -2802,30 +2781,19 @@ var defaultFunctions = [
2802
2781
  ];
2803
2782
 
2804
2783
  // src/compute-graph.ts
2784
+ import { effect as effect2 } from "@preact/signals-core";
2805
2785
  import { Event as Event2 } from "@dxos/async";
2806
- import { Filter as Filter2, fullyQualifiedId } from "@dxos/client/echo";
2786
+ import { Filter as Filter2 } from "@dxos/client/echo";
2807
2787
  import { FQ_ID_LENGTH } from "@dxos/client/echo";
2808
2788
  import { Resource as Resource2 } from "@dxos/context";
2789
+ import { Obj } from "@dxos/echo";
2809
2790
  import { getTypename } from "@dxos/echo/internal";
2810
- import { FunctionType as FunctionType2 } from "@dxos/functions";
2791
+ import { Function as Function2 } from "@dxos/functions";
2811
2792
  import { invariant as invariant2 } from "@dxos/invariant";
2812
2793
  import { PublicKey } from "@dxos/keys";
2813
2794
  import { log as log3 } from "@dxos/log";
2814
2795
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
2815
2796
  import { ExportedCellChange as ExportedCellChange2 } from "@dxos/vendor-hyperformula";
2816
- function _define_property3(obj, key, value) {
2817
- if (key in obj) {
2818
- Object.defineProperty(obj, key, {
2819
- value,
2820
- enumerable: true,
2821
- configurable: true,
2822
- writable: true
2823
- });
2824
- } else {
2825
- obj[key] = value;
2826
- }
2827
- return obj;
2828
- }
2829
2797
  var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph.ts";
2830
2798
  var UNKNOWN_BINDING = "__UNKNOWN__";
2831
2799
  var createSheetName = ({ type, id }) => `${type}@${id}`;
@@ -2839,6 +2807,49 @@ var parseSheetName = (name) => {
2839
2807
  };
2840
2808
  };
2841
2809
  var ComputeGraph = class extends Resource2 {
2810
+ _hf;
2811
+ _runtime;
2812
+ _space;
2813
+ _options;
2814
+ id = `graph-${PublicKey.random().truncate()}`;
2815
+ // Map of nodes indexed by sheet number.
2816
+ _nodes = /* @__PURE__ */ new Map();
2817
+ // Cached function objects.
2818
+ _remoteFunctions = [];
2819
+ update = new Event2();
2820
+ // The context is passed to all functions.
2821
+ context;
2822
+ constructor(_hf, _runtime, _space, _options) {
2823
+ super(), this._hf = _hf, this._runtime = _runtime, this._space = _space, this._options = _options;
2824
+ this.context = new FunctionContext(this._hf, this._runtime, this._space, {
2825
+ ...this._options,
2826
+ onUpdate: (update) => {
2827
+ this._options?.onUpdate?.(update);
2828
+ this.update.emit({
2829
+ type: "valuesUpdated"
2830
+ });
2831
+ }
2832
+ });
2833
+ this._hf.updateConfig({
2834
+ context: this.context
2835
+ });
2836
+ const onValuesUpdate = (changes) => {
2837
+ for (const change of changes) {
2838
+ if (change instanceof ExportedCellChange2) {
2839
+ const { sheet } = change;
2840
+ const node = this._nodes.get(sheet);
2841
+ if (node) {
2842
+ node.update.emit({
2843
+ type: "valuesUpdated",
2844
+ change
2845
+ });
2846
+ }
2847
+ }
2848
+ }
2849
+ };
2850
+ this._hf.on("valuesUpdated", onValuesUpdate);
2851
+ this._ctx.onDispose(() => this._hf.off("valuesUpdated", onValuesUpdate));
2852
+ }
2842
2853
  get hf() {
2843
2854
  return this._hf;
2844
2855
  }
@@ -2866,7 +2877,7 @@ var ComputeGraph = class extends Resource2 {
2866
2877
  getOrCreateNode(name) {
2867
2878
  invariant2(name.length, void 0, {
2868
2879
  F: __dxlog_file4,
2869
- L: 130,
2880
+ L: 135,
2870
2881
  S: this,
2871
2882
  A: [
2872
2883
  "name.length",
@@ -2879,7 +2890,7 @@ var ComputeGraph = class extends Resource2 {
2879
2890
  sheet: name
2880
2891
  }, {
2881
2892
  F: __dxlog_file4,
2882
- L: 132,
2893
+ L: 137,
2883
2894
  S: this,
2884
2895
  C: (f, a) => f(...a)
2885
2896
  });
@@ -2888,7 +2899,7 @@ var ComputeGraph = class extends Resource2 {
2888
2899
  const sheetId = this._hf.getSheetId(name);
2889
2900
  invariant2(sheetId !== void 0, void 0, {
2890
2901
  F: __dxlog_file4,
2891
- L: 137,
2902
+ L: 142,
2892
2903
  S: this,
2893
2904
  A: [
2894
2905
  "sheetId !== undefined",
@@ -2944,7 +2955,7 @@ var ComputeGraph = class extends Resource2 {
2944
2955
  }
2945
2956
  const fn = this._remoteFunctions.find((fn2) => fn2.binding === binding);
2946
2957
  if (fn) {
2947
- const id = fullyQualifiedId(fn);
2958
+ const id = Obj.getDXN(fn).toString();
2948
2959
  return `${id}(${args})`;
2949
2960
  } else {
2950
2961
  return match;
@@ -2961,7 +2972,7 @@ var ComputeGraph = class extends Resource2 {
2961
2972
  if (id.length !== FQ_ID_LENGTH) {
2962
2973
  return match;
2963
2974
  }
2964
- const fn = this._remoteFunctions.find((fn2) => fullyQualifiedId(fn2) === id);
2975
+ const fn = this._remoteFunctions.find((fn2) => Obj.getDXN(fn2).toString() === id);
2965
2976
  if (fn?.binding) {
2966
2977
  return `${fn.binding}(${args})`;
2967
2978
  } else {
@@ -2976,14 +2987,18 @@ var ComputeGraph = class extends Resource2 {
2976
2987
  }
2977
2988
  async _open() {
2978
2989
  if (this._space) {
2979
- const query = this._space.db.query(Filter2.type(FunctionType2));
2980
- const unsubscribe = query.subscribe(({ objects }) => {
2981
- this._remoteFunctions = objects.filter(({ binding }) => binding);
2990
+ const query = this._space.db.query(Filter2.type(Function2.Function));
2991
+ const unsubscribe = query.subscribe();
2992
+ const dispose = effect2(() => {
2993
+ this._remoteFunctions = query.objects.filter(({ binding }) => binding);
2982
2994
  this.update.emit({
2983
2995
  type: "functionsUpdated"
2984
2996
  });
2985
2997
  });
2986
- this._ctx.onDispose(unsubscribe);
2998
+ this._ctx.onDispose(() => {
2999
+ unsubscribe();
3000
+ dispose();
3001
+ });
2987
3002
  }
2988
3003
  }
2989
3004
  async _close() {
@@ -2991,40 +3006,6 @@ var ComputeGraph = class extends Resource2 {
2991
3006
  await node.close();
2992
3007
  }
2993
3008
  }
2994
- constructor(_hf, _runtime, _space, _options) {
2995
- 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.
2996
- _define_property3(this, "_nodes", void 0), // Cached function objects.
2997
- _define_property3(this, "_remoteFunctions", void 0), _define_property3(this, "update", void 0), // The context is passed to all functions.
2998
- _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();
2999
- this.context = new FunctionContext(this._hf, this._runtime, this._space, {
3000
- ...this._options,
3001
- onUpdate: (update) => {
3002
- this._options?.onUpdate?.(update);
3003
- this.update.emit({
3004
- type: "valuesUpdated"
3005
- });
3006
- }
3007
- });
3008
- this._hf.updateConfig({
3009
- context: this.context
3010
- });
3011
- const onValuesUpdate = (changes) => {
3012
- for (const change of changes) {
3013
- if (change instanceof ExportedCellChange2) {
3014
- const { sheet } = change;
3015
- const node = this._nodes.get(sheet);
3016
- if (node) {
3017
- node.update.emit({
3018
- type: "valuesUpdated",
3019
- change
3020
- });
3021
- }
3022
- }
3023
- }
3024
- };
3025
- this._hf.on("valuesUpdated", onValuesUpdate);
3026
- this._ctx.onDispose(() => this._hf.off("valuesUpdated", onValuesUpdate));
3027
- }
3028
3009
  };
3029
3010
 
3030
3011
  // src/compute-graph-registry.ts
@@ -3033,19 +3014,6 @@ import { Resource as Resource3 } from "@dxos/context";
3033
3014
  import { invariant as invariant3 } from "@dxos/invariant";
3034
3015
  import { log as log4 } from "@dxos/log";
3035
3016
  import { HyperFormula } from "@dxos/vendor-hyperformula";
3036
- function _define_property4(obj, key, value) {
3037
- if (key in obj) {
3038
- Object.defineProperty(obj, key, {
3039
- value,
3040
- enumerable: true,
3041
- configurable: true,
3042
- writable: true
3043
- });
3044
- } else {
3045
- obj[key] = value;
3046
- }
3047
- return obj;
3048
- }
3049
3017
  var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph-registry.ts";
3050
3018
  var defaultPlugins = [
3051
3019
  {
@@ -3057,6 +3025,16 @@ var defaultOptions = {
3057
3025
  licenseKey: "gpl-v3"
3058
3026
  };
3059
3027
  var ComputeGraphRegistry = class extends Resource3 {
3028
+ _graphs = /* @__PURE__ */ new Map();
3029
+ _options;
3030
+ constructor(options) {
3031
+ super();
3032
+ this._options = defaultsDeep2({}, options, defaultOptions);
3033
+ this._options.plugins = this._options.plugins ?? defaultPlugins;
3034
+ this._options.plugins?.forEach(({ plugin, translations }) => {
3035
+ HyperFormula.registerFunctionPlugin(plugin, translations);
3036
+ });
3037
+ }
3060
3038
  getGraph(spaceId) {
3061
3039
  return this._graphs.get(spaceId);
3062
3040
  }
@@ -3106,14 +3084,6 @@ var ComputeGraphRegistry = class extends Resource3 {
3106
3084
  }
3107
3085
  this._graphs.clear();
3108
3086
  }
3109
- constructor(options) {
3110
- super(), _define_property4(this, "_graphs", /* @__PURE__ */ new Map()), _define_property4(this, "_options", void 0);
3111
- this._options = defaultsDeep2({}, options, defaultOptions);
3112
- this._options.plugins = this._options.plugins ?? defaultPlugins;
3113
- this._options.plugins?.forEach(({ plugin, translations }) => {
3114
- HyperFormula.registerFunctionPlugin(plugin, translations);
3115
- });
3116
- }
3117
3087
  };
3118
3088
 
3119
3089
  export {
@@ -3143,4 +3113,4 @@ export {
3143
3113
  defaultOptions,
3144
3114
  ComputeGraphRegistry
3145
3115
  };
3146
- //# sourceMappingURL=chunk-K37OSZ5O.mjs.map
3116
+ //# sourceMappingURL=chunk-D3RM3FQW.mjs.map