@dxos/compute 0.8.4-main.b97322e → 0.8.4-main.bc674ce
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-AURNYRCC.mjs → chunk-KGBGT4NT.mjs} +104 -76
- package/dist/lib/browser/chunk-KGBGT4NT.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 -6
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/{chunk-DZMSWKOY.mjs → chunk-2MATJWLB.mjs} +104 -76
- package/dist/lib/node-esm/chunk-2MATJWLB.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 -6
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/compute-graph-registry.d.ts +10 -7
- 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 +5 -2
- package/dist/types/src/compute-graph.d.ts.map +1 -1
- package/dist/types/src/compute-node.d.ts +1 -2
- package/dist/types/src/compute-node.d.ts.map +1 -1
- package/dist/types/src/functions/async-function.d.ts +13 -11
- package/dist/types/src/functions/async-function.d.ts.map +1 -1
- package/dist/types/src/functions/edge-function.d.ts +3 -3
- 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-plugin.d.ts +4 -5
- package/dist/types/src/testing/test-plugin.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/src/types/hyperformula.d.ts +3 -6
- package/dist/types/src/types/hyperformula.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +28 -29
- package/src/compute-graph-registry.test.ts +158 -0
- package/src/compute-graph-registry.ts +20 -14
- package/src/compute-graph.test.ts +31 -13
- package/src/compute-graph.ts +21 -17
- package/src/compute-node.ts +2 -5
- package/src/functions/async-function.ts +21 -16
- package/src/functions/edge-function.ts +33 -32
- package/src/hyperformula.test.ts +2 -2
- 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-plugin.ts +2 -5
- package/src/testing/test-runtime.ts +34 -0
- package/src/testing/util.ts +1 -1
- package/src/types/hyperformula.ts +8 -8
- package/src/types/types.test.ts +2 -2
- package/dist/lib/browser/chunk-AURNYRCC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DZMSWKOY.mjs.map +0 -7
- package/dist/vendor/hyperformula.mjs +0 -36400
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/testing/test-builder.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\nexport type TestBuilderOptions = ClientOptions & ComputeGraphOptions
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,cAAkC;AAC3C,SAAuBC,gBAAgB;AACvC,SAASC,iBAAiB
|
|
6
|
-
"names": ["Client", "Resource", "invariant", "TestBuilder", "Resource", "
|
|
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 { Database } from '@dxos/echo';\nimport { CredentialsService, 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[] } = {}): 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(Database.Service.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", "Database", "CredentialsService", "QueueService", "FunctionInvocationServiceLayerTest", "createMockedComputeRuntimeProvider", "functions", "getRuntime", "_spaceId", "make", "FunctionInvocationServiceLayerTest", "pipe", "provide", "AiService", "notAvailable", "CredentialsService", "configuredLayer", "Database", "Service", "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
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/types/hyperformula.ts
|
|
4
|
-
import { DetailedCellError, ExportedCellChange } from "
|
|
4
|
+
import { DetailedCellError, ExportedCellChange } from "@dxos/vendor-hyperformula";
|
|
5
5
|
|
|
6
6
|
// src/types/types.ts
|
|
7
7
|
import { invariant } from "@dxos/invariant";
|
|
@@ -79,10 +79,13 @@ var inRange = (range, cell) => {
|
|
|
79
79
|
// src/compute-node.ts
|
|
80
80
|
import { Event } from "@dxos/async";
|
|
81
81
|
import { Resource } from "@dxos/context";
|
|
82
|
-
import { DetailedCellError as DetailedCellError2 } from "
|
|
82
|
+
import { DetailedCellError as DetailedCellError2 } from "@dxos/vendor-hyperformula";
|
|
83
83
|
var ComputeNode = class extends Resource {
|
|
84
|
+
_graph;
|
|
85
|
+
sheetId;
|
|
86
|
+
update = new Event();
|
|
84
87
|
constructor(_graph, sheetId) {
|
|
85
|
-
super(), this._graph = _graph, this.sheetId = sheetId
|
|
88
|
+
super(), this._graph = _graph, this.sheetId = sheetId;
|
|
86
89
|
}
|
|
87
90
|
get graph() {
|
|
88
91
|
return this._graph;
|
|
@@ -122,14 +125,16 @@ var ComputeNode = class extends Resource {
|
|
|
122
125
|
import defaultsDeep from "lodash.defaultsdeep";
|
|
123
126
|
import { debounce } from "@dxos/async";
|
|
124
127
|
import { log } from "@dxos/log";
|
|
125
|
-
import { CellError,
|
|
128
|
+
import { CellError, EmptyValue, ErrorType, FunctionPlugin } from "@dxos/vendor-hyperformula";
|
|
126
129
|
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/compute/src/functions/async-function.ts";
|
|
127
130
|
var defaultFunctionContextOptions = {
|
|
128
131
|
defaultTtl: 5e3,
|
|
129
|
-
debounceDelay: 200
|
|
130
|
-
remoteFunctionUrl: "https://edge.dxos.workers.dev/functions"
|
|
132
|
+
debounceDelay: 200
|
|
131
133
|
};
|
|
132
134
|
var FunctionContext = class _FunctionContext {
|
|
135
|
+
_hf;
|
|
136
|
+
_runtime;
|
|
137
|
+
_space;
|
|
133
138
|
// Mangle name with params.
|
|
134
139
|
static createInvocationKey(name, ...args) {
|
|
135
140
|
return JSON.stringify({
|
|
@@ -137,13 +142,22 @@ var FunctionContext = class _FunctionContext {
|
|
|
137
142
|
...args
|
|
138
143
|
});
|
|
139
144
|
}
|
|
140
|
-
|
|
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) {
|
|
141
158
|
this._hf = _hf;
|
|
159
|
+
this._runtime = _runtime;
|
|
142
160
|
this._space = _space;
|
|
143
|
-
this._cache = /* @__PURE__ */ new Map();
|
|
144
|
-
this._pending = /* @__PURE__ */ new Map();
|
|
145
|
-
this._subscriptions = /* @__PURE__ */ new Map();
|
|
146
|
-
this._invocations = {};
|
|
147
161
|
this._options = defaultsDeep(_options ?? {}, defaultFunctionContextOptions);
|
|
148
162
|
this._onUpdate = debounce((update) => {
|
|
149
163
|
log("update", update, {
|
|
@@ -159,15 +173,15 @@ var FunctionContext = class _FunctionContext {
|
|
|
159
173
|
get space() {
|
|
160
174
|
return this._space;
|
|
161
175
|
}
|
|
162
|
-
get remoteFunctionUrl() {
|
|
163
|
-
return this._options.remoteFunctionUrl;
|
|
164
|
-
}
|
|
165
176
|
get info() {
|
|
166
177
|
return {
|
|
167
178
|
cache: this._cache.size,
|
|
168
179
|
invocations: this._invocations
|
|
169
180
|
};
|
|
170
181
|
}
|
|
182
|
+
get runtime() {
|
|
183
|
+
return this._runtime;
|
|
184
|
+
}
|
|
171
185
|
flush() {
|
|
172
186
|
this._cache.clear();
|
|
173
187
|
this._invocations = {};
|
|
@@ -262,14 +276,15 @@ var AsyncFunctionPlugin = class extends FunctionPlugin {
|
|
|
262
276
|
};
|
|
263
277
|
|
|
264
278
|
// src/functions/edge-function.ts
|
|
265
|
-
import
|
|
266
|
-
import
|
|
267
|
-
import { Filter
|
|
268
|
-
import {
|
|
269
|
-
import {
|
|
279
|
+
import * as Effect from "effect/Effect";
|
|
280
|
+
import * as SchemaAST from "effect/SchemaAST";
|
|
281
|
+
import { Filter } from "@dxos/client/echo";
|
|
282
|
+
import { JsonSchema, Obj } from "@dxos/echo";
|
|
283
|
+
import { Function, FunctionInvocationService, TracingService } from "@dxos/functions";
|
|
284
|
+
import { FunctionDefinition } from "@dxos/functions";
|
|
270
285
|
import { log as log2 } from "@dxos/log";
|
|
271
286
|
import { isNonNullable } from "@dxos/util";
|
|
272
|
-
import { CellError as CellError2, ErrorType as ErrorType2, FunctionArgumentType } from "
|
|
287
|
+
import { CellError as CellError2, ErrorType as ErrorType2, FunctionArgumentType } from "@dxos/vendor-hyperformula";
|
|
273
288
|
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/compute/src/functions/edge-function.ts";
|
|
274
289
|
var EDGE_FUNCTION_NAME = "DX";
|
|
275
290
|
var FUNCTION_TTL = 1e4;
|
|
@@ -280,7 +295,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
280
295
|
if (!space) {
|
|
281
296
|
return new CellError2(ErrorType2.REF, "Missing space");
|
|
282
297
|
}
|
|
283
|
-
const
|
|
298
|
+
const [fn] = await space.db.query(Filter.type(Function.Function, {
|
|
284
299
|
binding
|
|
285
300
|
})).run();
|
|
286
301
|
if (!fn) {
|
|
@@ -288,55 +303,46 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
288
303
|
binding
|
|
289
304
|
}, {
|
|
290
305
|
F: __dxlog_file3,
|
|
291
|
-
L:
|
|
306
|
+
L: 40,
|
|
292
307
|
S: this,
|
|
293
308
|
C: (f, a) => f(...a)
|
|
294
309
|
});
|
|
295
310
|
return new CellError2(ErrorType2.REF, "Function not found");
|
|
296
311
|
}
|
|
297
312
|
if (subscribe) {
|
|
298
|
-
const unsubscribe =
|
|
313
|
+
const unsubscribe = Obj.subscribe(fn, () => {
|
|
299
314
|
log2("function changed", {
|
|
300
315
|
fn
|
|
301
316
|
}, {
|
|
302
317
|
F: __dxlog_file3,
|
|
303
|
-
L:
|
|
318
|
+
L: 46,
|
|
304
319
|
S: this,
|
|
305
320
|
C: (f, a) => f(...a)
|
|
306
321
|
});
|
|
307
|
-
const _ = fn?.version;
|
|
308
322
|
this.runAsyncFunction(ast, state, handler(false), {
|
|
309
323
|
ttl: FUNCTION_TTL
|
|
310
324
|
});
|
|
311
325
|
});
|
|
312
326
|
this.context.createSubscription(ast.procedureName, unsubscribe);
|
|
313
327
|
}
|
|
314
|
-
const
|
|
328
|
+
const runtime = this.context.runtime;
|
|
329
|
+
const functionDef = FunctionDefinition.deserialize(fn);
|
|
330
|
+
let input;
|
|
315
331
|
if (fn.inputSchema) {
|
|
316
|
-
const schema = toEffectSchema(fn.inputSchema);
|
|
317
|
-
SchemaAST.getPropertySignatures(schema.ast)
|
|
318
|
-
|
|
332
|
+
const schema = JsonSchema.toEffectSchema(fn.inputSchema);
|
|
333
|
+
const props = SchemaAST.getPropertySignatures(schema.ast);
|
|
334
|
+
input = {};
|
|
335
|
+
props.forEach(({ name }, index) => {
|
|
336
|
+
input[name.toString()] = args[index];
|
|
319
337
|
});
|
|
320
338
|
} else {
|
|
321
|
-
|
|
339
|
+
input = {
|
|
340
|
+
args: args.filter(isNonNullable)
|
|
341
|
+
};
|
|
322
342
|
}
|
|
323
|
-
const
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
headers: {
|
|
327
|
-
"Content-Type": "application/json"
|
|
328
|
-
},
|
|
329
|
-
body: JSON.stringify(body)
|
|
330
|
-
});
|
|
331
|
-
const result = await response.text();
|
|
332
|
-
log2("function executed", {
|
|
333
|
-
result
|
|
334
|
-
}, {
|
|
335
|
-
F: __dxlog_file3,
|
|
336
|
-
L: 75,
|
|
337
|
-
S: this,
|
|
338
|
-
C: (f, a) => f(...a)
|
|
339
|
-
});
|
|
343
|
+
const result = runtime.runPromise(Effect.gen(function* () {
|
|
344
|
+
return yield* FunctionInvocationService.invokeFunction(functionDef, input);
|
|
345
|
+
}).pipe(Effect.provide(TracingService.layerNoop)));
|
|
340
346
|
return result;
|
|
341
347
|
};
|
|
342
348
|
return this.runAsyncFunction(ast, state, handler(true), {
|
|
@@ -2774,16 +2780,16 @@ var defaultFunctions = [
|
|
|
2774
2780
|
|
|
2775
2781
|
// src/compute-graph.ts
|
|
2776
2782
|
import { Event as Event2 } from "@dxos/async";
|
|
2777
|
-
import { Filter as Filter2
|
|
2783
|
+
import { Filter as Filter2 } from "@dxos/client/echo";
|
|
2778
2784
|
import { FQ_ID_LENGTH } from "@dxos/client/echo";
|
|
2779
2785
|
import { Resource as Resource2 } from "@dxos/context";
|
|
2780
|
-
import {
|
|
2781
|
-
import {
|
|
2786
|
+
import { Obj as Obj2 } from "@dxos/echo";
|
|
2787
|
+
import { Function as Function2 } from "@dxos/functions";
|
|
2782
2788
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
2783
2789
|
import { PublicKey } from "@dxos/keys";
|
|
2784
2790
|
import { log as log3 } from "@dxos/log";
|
|
2785
2791
|
import { isNonNullable as isNonNullable2 } from "@dxos/util";
|
|
2786
|
-
import { ExportedCellChange as ExportedCellChange2 } from "
|
|
2792
|
+
import { ExportedCellChange as ExportedCellChange2 } from "@dxos/vendor-hyperformula";
|
|
2787
2793
|
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph.ts";
|
|
2788
2794
|
var UNKNOWN_BINDING = "__UNKNOWN__";
|
|
2789
2795
|
var createSheetName = ({ type, id }) => `${type}@${id}`;
|
|
@@ -2797,9 +2803,21 @@ var parseSheetName = (name) => {
|
|
|
2797
2803
|
};
|
|
2798
2804
|
};
|
|
2799
2805
|
var ComputeGraph = class extends Resource2 {
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2806
|
+
_hf;
|
|
2807
|
+
_runtime;
|
|
2808
|
+
_space;
|
|
2809
|
+
_options;
|
|
2810
|
+
id = `graph-${PublicKey.random().truncate()}`;
|
|
2811
|
+
// Map of nodes indexed by sheet number.
|
|
2812
|
+
_nodes = /* @__PURE__ */ new Map();
|
|
2813
|
+
// Cached function objects.
|
|
2814
|
+
_remoteFunctions = [];
|
|
2815
|
+
update = new Event2();
|
|
2816
|
+
// The context is passed to all functions.
|
|
2817
|
+
context;
|
|
2818
|
+
constructor(_hf, _runtime, _space, _options) {
|
|
2819
|
+
super(), this._hf = _hf, this._runtime = _runtime, this._space = _space, this._options = _options;
|
|
2820
|
+
this.context = new FunctionContext(this._hf, this._runtime, this._space, {
|
|
2803
2821
|
...this._options,
|
|
2804
2822
|
onUpdate: (update) => {
|
|
2805
2823
|
this._options?.onUpdate?.(update);
|
|
@@ -2855,7 +2873,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2855
2873
|
getOrCreateNode(name) {
|
|
2856
2874
|
invariant2(name.length, void 0, {
|
|
2857
2875
|
F: __dxlog_file4,
|
|
2858
|
-
L:
|
|
2876
|
+
L: 133,
|
|
2859
2877
|
S: this,
|
|
2860
2878
|
A: [
|
|
2861
2879
|
"name.length",
|
|
@@ -2868,7 +2886,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2868
2886
|
sheet: name
|
|
2869
2887
|
}, {
|
|
2870
2888
|
F: __dxlog_file4,
|
|
2871
|
-
L:
|
|
2889
|
+
L: 135,
|
|
2872
2890
|
S: this,
|
|
2873
2891
|
C: (f, a) => f(...a)
|
|
2874
2892
|
});
|
|
@@ -2877,7 +2895,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2877
2895
|
const sheetId = this._hf.getSheetId(name);
|
|
2878
2896
|
invariant2(sheetId !== void 0, void 0, {
|
|
2879
2897
|
F: __dxlog_file4,
|
|
2880
|
-
L:
|
|
2898
|
+
L: 140,
|
|
2881
2899
|
S: this,
|
|
2882
2900
|
A: [
|
|
2883
2901
|
"sheetId !== undefined",
|
|
@@ -2901,7 +2919,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2901
2919
|
}).filter(isNonNullable2);
|
|
2902
2920
|
for (const obj of objects) {
|
|
2903
2921
|
if (obj.name === name) {
|
|
2904
|
-
const type = getTypename(obj);
|
|
2922
|
+
const type = Obj2.getTypename(obj);
|
|
2905
2923
|
return `'${createSheetName({
|
|
2906
2924
|
type,
|
|
2907
2925
|
id: obj.id
|
|
@@ -2933,7 +2951,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2933
2951
|
}
|
|
2934
2952
|
const fn = this._remoteFunctions.find((fn2) => fn2.binding === binding);
|
|
2935
2953
|
if (fn) {
|
|
2936
|
-
const id =
|
|
2954
|
+
const id = Obj2.getDXN(fn).toString();
|
|
2937
2955
|
return `${id}(${args})`;
|
|
2938
2956
|
} else {
|
|
2939
2957
|
return match;
|
|
@@ -2950,7 +2968,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2950
2968
|
if (id.length !== FQ_ID_LENGTH) {
|
|
2951
2969
|
return match;
|
|
2952
2970
|
}
|
|
2953
|
-
const fn = this._remoteFunctions.find((fn2) =>
|
|
2971
|
+
const fn = this._remoteFunctions.find((fn2) => Obj2.getDXN(fn2).toString() === id);
|
|
2954
2972
|
if (fn?.binding) {
|
|
2955
2973
|
return `${fn.binding}(${args})`;
|
|
2956
2974
|
} else {
|
|
@@ -2965,9 +2983,9 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2965
2983
|
}
|
|
2966
2984
|
async _open() {
|
|
2967
2985
|
if (this._space) {
|
|
2968
|
-
const query = this._space.db.query(Filter2.type(
|
|
2969
|
-
const unsubscribe = query.subscribe((
|
|
2970
|
-
this._remoteFunctions =
|
|
2986
|
+
const query = this._space.db.query(Filter2.type(Function2.Function));
|
|
2987
|
+
const unsubscribe = query.subscribe(() => {
|
|
2988
|
+
this._remoteFunctions = query.results.filter((fn) => fn.binding);
|
|
2971
2989
|
this.update.emit({
|
|
2972
2990
|
type: "functionsUpdated"
|
|
2973
2991
|
});
|
|
@@ -2987,24 +3005,24 @@ import defaultsDeep2 from "lodash.defaultsdeep";
|
|
|
2987
3005
|
import { Resource as Resource3 } from "@dxos/context";
|
|
2988
3006
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
2989
3007
|
import { log as log4 } from "@dxos/log";
|
|
2990
|
-
import { HyperFormula } from "
|
|
3008
|
+
import { HyperFormula } from "@dxos/vendor-hyperformula";
|
|
2991
3009
|
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph-registry.ts";
|
|
2992
|
-
var defaultOptions = {
|
|
2993
|
-
licenseKey: "gpl-v3"
|
|
2994
|
-
};
|
|
2995
3010
|
var defaultPlugins = [
|
|
2996
3011
|
{
|
|
2997
3012
|
plugin: EdgeFunctionPlugin,
|
|
2998
3013
|
translations: EdgeFunctionPluginTranslations
|
|
2999
3014
|
}
|
|
3000
3015
|
];
|
|
3016
|
+
var defaultOptions = {
|
|
3017
|
+
licenseKey: "gpl-v3"
|
|
3018
|
+
};
|
|
3001
3019
|
var ComputeGraphRegistry = class extends Resource3 {
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3020
|
+
_graphs = /* @__PURE__ */ new Map();
|
|
3021
|
+
_options;
|
|
3022
|
+
constructor(options) {
|
|
3005
3023
|
super();
|
|
3006
|
-
this._graphs = /* @__PURE__ */ new Map();
|
|
3007
3024
|
this._options = defaultsDeep2({}, options, defaultOptions);
|
|
3025
|
+
this._options.plugins = this._options.plugins ?? defaultPlugins;
|
|
3008
3026
|
this._options.plugins?.forEach(({ plugin, translations }) => {
|
|
3009
3027
|
HyperFormula.registerFunctionPlugin(plugin, translations);
|
|
3010
3028
|
});
|
|
@@ -3019,7 +3037,7 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3019
3037
|
space: space.id
|
|
3020
3038
|
}, {
|
|
3021
3039
|
F: __dxlog_file5,
|
|
3022
|
-
L:
|
|
3040
|
+
L: 73,
|
|
3023
3041
|
S: this,
|
|
3024
3042
|
C: (f, a) => f(...a)
|
|
3025
3043
|
});
|
|
@@ -3030,7 +3048,7 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3030
3048
|
createGraph(space) {
|
|
3031
3049
|
invariant3(!this._graphs.has(space.id), `ComputeGraph already exists for space: ${space.id}`, {
|
|
3032
3050
|
F: __dxlog_file5,
|
|
3033
|
-
L:
|
|
3051
|
+
L: 81,
|
|
3034
3052
|
S: this,
|
|
3035
3053
|
A: [
|
|
3036
3054
|
"!this._graphs.has(space.id)",
|
|
@@ -3038,7 +3056,17 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3038
3056
|
]
|
|
3039
3057
|
});
|
|
3040
3058
|
const hf = HyperFormula.buildEmpty(this._options);
|
|
3041
|
-
|
|
3059
|
+
invariant3(this._options.computeRuntime, "ComputeRuntime is required", {
|
|
3060
|
+
F: __dxlog_file5,
|
|
3061
|
+
L: 83,
|
|
3062
|
+
S: this,
|
|
3063
|
+
A: [
|
|
3064
|
+
"this._options.computeRuntime",
|
|
3065
|
+
"'ComputeRuntime is required'"
|
|
3066
|
+
]
|
|
3067
|
+
});
|
|
3068
|
+
const runtime = this._options.computeRuntime.getRuntime(space.id);
|
|
3069
|
+
const graph = new ComputeGraph(hf, runtime, space, this._options);
|
|
3042
3070
|
this._graphs.set(space.id, graph);
|
|
3043
3071
|
return graph;
|
|
3044
3072
|
}
|
|
@@ -3073,8 +3101,8 @@ export {
|
|
|
3073
3101
|
createSheetName,
|
|
3074
3102
|
parseSheetName,
|
|
3075
3103
|
ComputeGraph,
|
|
3076
|
-
defaultOptions,
|
|
3077
3104
|
defaultPlugins,
|
|
3105
|
+
defaultOptions,
|
|
3078
3106
|
ComputeGraphRegistry
|
|
3079
3107
|
};
|
|
3080
|
-
//# sourceMappingURL=chunk-
|
|
3108
|
+
//# sourceMappingURL=chunk-2MATJWLB.mjs.map
|