@dxos/compute 0.8.4-main.b97322e → 0.8.4-main.c4373fc
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-C7KLV2IU.mjs} +179 -113
- package/dist/lib/browser/chunk-C7KLV2IU.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 +42 -9
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/{chunk-DZMSWKOY.mjs → chunk-K37OSZ5O.mjs} +179 -113
- package/dist/lib/node-esm/chunk-K37OSZ5O.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 +42 -9
- 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/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 +24 -28
- package/src/compute-graph-registry.test.ts +138 -0
- package/src/compute-graph-registry.ts +20 -14
- package/src/compute-graph.test.ts +2 -3
- package/src/compute-graph.ts +10 -9
- package/src/compute-node.ts +2 -5
- package/src/functions/async-function.ts +21 -16
- package/src/functions/edge-function.ts +24 -22
- package/src/hyperformula.test.ts +2 -2
- 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 +38 -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", "
|
|
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"]
|
|
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,11 +79,21 @@ 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 "
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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;
|
|
86
93
|
}
|
|
94
|
+
return obj;
|
|
95
|
+
}
|
|
96
|
+
var ComputeNode = class extends Resource {
|
|
87
97
|
get graph() {
|
|
88
98
|
return this._graph;
|
|
89
99
|
}
|
|
@@ -116,18 +126,33 @@ var ComputeNode = class extends Resource {
|
|
|
116
126
|
// TODO(burdon): Load data into sheet.
|
|
117
127
|
async _open() {
|
|
118
128
|
}
|
|
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
|
+
}
|
|
119
132
|
};
|
|
120
133
|
|
|
121
134
|
// src/functions/async-function.ts
|
|
122
135
|
import defaultsDeep from "lodash.defaultsdeep";
|
|
123
136
|
import { debounce } from "@dxos/async";
|
|
124
137
|
import { log } from "@dxos/log";
|
|
125
|
-
import { CellError,
|
|
138
|
+
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
|
+
}
|
|
126
152
|
var __dxlog_file2 = "/__w/dxos/dxos/packages/core/compute/src/functions/async-function.ts";
|
|
127
153
|
var defaultFunctionContextOptions = {
|
|
128
154
|
defaultTtl: 5e3,
|
|
129
|
-
debounceDelay: 200
|
|
130
|
-
remoteFunctionUrl: "https://edge.dxos.workers.dev/functions"
|
|
155
|
+
debounceDelay: 200
|
|
131
156
|
};
|
|
132
157
|
var FunctionContext = class _FunctionContext {
|
|
133
158
|
// Mangle name with params.
|
|
@@ -137,37 +162,18 @@ var FunctionContext = class _FunctionContext {
|
|
|
137
162
|
...args
|
|
138
163
|
});
|
|
139
164
|
}
|
|
140
|
-
constructor(_hf, _space, _options) {
|
|
141
|
-
this._hf = _hf;
|
|
142
|
-
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
|
-
this._options = defaultsDeep(_options ?? {}, defaultFunctionContextOptions);
|
|
148
|
-
this._onUpdate = debounce((update) => {
|
|
149
|
-
log("update", update, {
|
|
150
|
-
F: __dxlog_file2,
|
|
151
|
-
L: 86,
|
|
152
|
-
S: this,
|
|
153
|
-
C: (f, a) => f(...a)
|
|
154
|
-
});
|
|
155
|
-
this._hf.resumeEvaluation();
|
|
156
|
-
this._options.onUpdate?.(update);
|
|
157
|
-
}, this._options.debounceDelay);
|
|
158
|
-
}
|
|
159
165
|
get space() {
|
|
160
166
|
return this._space;
|
|
161
167
|
}
|
|
162
|
-
get remoteFunctionUrl() {
|
|
163
|
-
return this._options.remoteFunctionUrl;
|
|
164
|
-
}
|
|
165
168
|
get info() {
|
|
166
169
|
return {
|
|
167
170
|
cache: this._cache.size,
|
|
168
171
|
invocations: this._invocations
|
|
169
172
|
};
|
|
170
173
|
}
|
|
174
|
+
get runtime() {
|
|
175
|
+
return this._runtime;
|
|
176
|
+
}
|
|
171
177
|
flush() {
|
|
172
178
|
this._cache.clear();
|
|
173
179
|
this._invocations = {};
|
|
@@ -244,6 +250,35 @@ var FunctionContext = class _FunctionContext {
|
|
|
244
250
|
});
|
|
245
251
|
return value;
|
|
246
252
|
}
|
|
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
|
+
}
|
|
247
282
|
};
|
|
248
283
|
var AsyncFunctionPlugin = class extends FunctionPlugin {
|
|
249
284
|
get context() {
|
|
@@ -263,13 +298,15 @@ var AsyncFunctionPlugin = class extends FunctionPlugin {
|
|
|
263
298
|
|
|
264
299
|
// src/functions/edge-function.ts
|
|
265
300
|
import { effect } from "@preact/signals-core";
|
|
266
|
-
import
|
|
267
|
-
import
|
|
268
|
-
import {
|
|
269
|
-
import {
|
|
301
|
+
import * as Effect from "effect/Effect";
|
|
302
|
+
import * as SchemaAST from "effect/SchemaAST";
|
|
303
|
+
import { Filter } from "@dxos/client/echo";
|
|
304
|
+
import { toEffectSchema } from "@dxos/echo/internal";
|
|
305
|
+
import { ComputeEventLogger, FunctionInvocationService, FunctionType, TracingService } from "@dxos/functions";
|
|
306
|
+
import { FunctionDefinition } from "@dxos/functions";
|
|
270
307
|
import { log as log2 } from "@dxos/log";
|
|
271
308
|
import { isNonNullable } from "@dxos/util";
|
|
272
|
-
import { CellError as CellError2, ErrorType as ErrorType2, FunctionArgumentType } from "
|
|
309
|
+
import { CellError as CellError2, ErrorType as ErrorType2, FunctionArgumentType } from "@dxos/vendor-hyperformula";
|
|
273
310
|
var __dxlog_file3 = "/__w/dxos/dxos/packages/core/compute/src/functions/edge-function.ts";
|
|
274
311
|
var EDGE_FUNCTION_NAME = "DX";
|
|
275
312
|
var FUNCTION_TTL = 1e4;
|
|
@@ -288,7 +325,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
288
325
|
binding
|
|
289
326
|
}, {
|
|
290
327
|
F: __dxlog_file3,
|
|
291
|
-
L:
|
|
328
|
+
L: 43,
|
|
292
329
|
S: this,
|
|
293
330
|
C: (f, a) => f(...a)
|
|
294
331
|
});
|
|
@@ -300,7 +337,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
300
337
|
fn
|
|
301
338
|
}, {
|
|
302
339
|
F: __dxlog_file3,
|
|
303
|
-
L:
|
|
340
|
+
L: 49,
|
|
304
341
|
S: this,
|
|
305
342
|
C: (f, a) => f(...a)
|
|
306
343
|
});
|
|
@@ -311,32 +348,24 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
|
|
|
311
348
|
});
|
|
312
349
|
this.context.createSubscription(ast.procedureName, unsubscribe);
|
|
313
350
|
}
|
|
314
|
-
const
|
|
351
|
+
const runtime = this.context.runtime;
|
|
352
|
+
const functionDef = FunctionDefinition.deserialize(fn);
|
|
353
|
+
let input;
|
|
315
354
|
if (fn.inputSchema) {
|
|
316
355
|
const schema = toEffectSchema(fn.inputSchema);
|
|
317
|
-
SchemaAST.getPropertySignatures(schema.ast)
|
|
318
|
-
|
|
356
|
+
const props = SchemaAST.getPropertySignatures(schema.ast);
|
|
357
|
+
input = {};
|
|
358
|
+
props.forEach(({ name }, index) => {
|
|
359
|
+
input[name.toString()] = args[index];
|
|
319
360
|
});
|
|
320
361
|
} else {
|
|
321
|
-
|
|
362
|
+
input = {
|
|
363
|
+
args: args.filter(isNonNullable)
|
|
364
|
+
};
|
|
322
365
|
}
|
|
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
|
-
});
|
|
366
|
+
const result = runtime.runPromise(Effect.gen(function* () {
|
|
367
|
+
return yield* FunctionInvocationService.invokeFunction(functionDef, input);
|
|
368
|
+
}).pipe(Effect.provide(ComputeEventLogger.layerFromTracing), Effect.provide(TracingService.layerNoop)));
|
|
340
369
|
return result;
|
|
341
370
|
};
|
|
342
371
|
return this.runAsyncFunction(ast, state, handler(true), {
|
|
@@ -2777,13 +2806,26 @@ import { Event as Event2 } from "@dxos/async";
|
|
|
2777
2806
|
import { Filter as Filter2, fullyQualifiedId } from "@dxos/client/echo";
|
|
2778
2807
|
import { FQ_ID_LENGTH } from "@dxos/client/echo";
|
|
2779
2808
|
import { Resource as Resource2 } from "@dxos/context";
|
|
2780
|
-
import { getTypename } from "@dxos/echo
|
|
2809
|
+
import { getTypename } from "@dxos/echo/internal";
|
|
2781
2810
|
import { FunctionType as FunctionType2 } from "@dxos/functions";
|
|
2782
2811
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
2783
2812
|
import { PublicKey } from "@dxos/keys";
|
|
2784
2813
|
import { log as log3 } from "@dxos/log";
|
|
2785
2814
|
import { isNonNullable as isNonNullable2 } from "@dxos/util";
|
|
2786
|
-
import { ExportedCellChange as ExportedCellChange2 } from "
|
|
2815
|
+
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
|
+
}
|
|
2787
2829
|
var __dxlog_file4 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph.ts";
|
|
2788
2830
|
var UNKNOWN_BINDING = "__UNKNOWN__";
|
|
2789
2831
|
var createSheetName = ({ type, id }) => `${type}@${id}`;
|
|
@@ -2797,37 +2839,6 @@ var parseSheetName = (name) => {
|
|
|
2797
2839
|
};
|
|
2798
2840
|
};
|
|
2799
2841
|
var ComputeGraph = class extends Resource2 {
|
|
2800
|
-
constructor(_hf, _space, _options) {
|
|
2801
|
-
super(), this._hf = _hf, this._space = _space, this._options = _options, this.id = `graph-${PublicKey.random().truncate()}`, this._nodes = /* @__PURE__ */ new Map(), this._remoteFunctions = [], this.update = new Event2();
|
|
2802
|
-
this.context = new FunctionContext(this._hf, this._space, {
|
|
2803
|
-
...this._options,
|
|
2804
|
-
onUpdate: (update) => {
|
|
2805
|
-
this._options?.onUpdate?.(update);
|
|
2806
|
-
this.update.emit({
|
|
2807
|
-
type: "valuesUpdated"
|
|
2808
|
-
});
|
|
2809
|
-
}
|
|
2810
|
-
});
|
|
2811
|
-
this._hf.updateConfig({
|
|
2812
|
-
context: this.context
|
|
2813
|
-
});
|
|
2814
|
-
const onValuesUpdate = (changes) => {
|
|
2815
|
-
for (const change of changes) {
|
|
2816
|
-
if (change instanceof ExportedCellChange2) {
|
|
2817
|
-
const { sheet } = change;
|
|
2818
|
-
const node = this._nodes.get(sheet);
|
|
2819
|
-
if (node) {
|
|
2820
|
-
node.update.emit({
|
|
2821
|
-
type: "valuesUpdated",
|
|
2822
|
-
change
|
|
2823
|
-
});
|
|
2824
|
-
}
|
|
2825
|
-
}
|
|
2826
|
-
}
|
|
2827
|
-
};
|
|
2828
|
-
this._hf.on("valuesUpdated", onValuesUpdate);
|
|
2829
|
-
this._ctx.onDispose(() => this._hf.off("valuesUpdated", onValuesUpdate));
|
|
2830
|
-
}
|
|
2831
2842
|
get hf() {
|
|
2832
2843
|
return this._hf;
|
|
2833
2844
|
}
|
|
@@ -2855,7 +2866,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2855
2866
|
getOrCreateNode(name) {
|
|
2856
2867
|
invariant2(name.length, void 0, {
|
|
2857
2868
|
F: __dxlog_file4,
|
|
2858
|
-
L:
|
|
2869
|
+
L: 130,
|
|
2859
2870
|
S: this,
|
|
2860
2871
|
A: [
|
|
2861
2872
|
"name.length",
|
|
@@ -2868,7 +2879,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2868
2879
|
sheet: name
|
|
2869
2880
|
}, {
|
|
2870
2881
|
F: __dxlog_file4,
|
|
2871
|
-
L:
|
|
2882
|
+
L: 132,
|
|
2872
2883
|
S: this,
|
|
2873
2884
|
C: (f, a) => f(...a)
|
|
2874
2885
|
});
|
|
@@ -2877,7 +2888,7 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2877
2888
|
const sheetId = this._hf.getSheetId(name);
|
|
2878
2889
|
invariant2(sheetId !== void 0, void 0, {
|
|
2879
2890
|
F: __dxlog_file4,
|
|
2880
|
-
L:
|
|
2891
|
+
L: 137,
|
|
2881
2892
|
S: this,
|
|
2882
2893
|
A: [
|
|
2883
2894
|
"sheetId !== undefined",
|
|
@@ -2980,6 +2991,40 @@ var ComputeGraph = class extends Resource2 {
|
|
|
2980
2991
|
await node.close();
|
|
2981
2992
|
}
|
|
2982
2993
|
}
|
|
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
|
+
}
|
|
2983
3028
|
};
|
|
2984
3029
|
|
|
2985
3030
|
// src/compute-graph-registry.ts
|
|
@@ -2987,28 +3032,31 @@ import defaultsDeep2 from "lodash.defaultsdeep";
|
|
|
2987
3032
|
import { Resource as Resource3 } from "@dxos/context";
|
|
2988
3033
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
2989
3034
|
import { log as log4 } from "@dxos/log";
|
|
2990
|
-
import { HyperFormula } from "
|
|
3035
|
+
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
|
+
}
|
|
2991
3049
|
var __dxlog_file5 = "/__w/dxos/dxos/packages/core/compute/src/compute-graph-registry.ts";
|
|
2992
|
-
var defaultOptions = {
|
|
2993
|
-
licenseKey: "gpl-v3"
|
|
2994
|
-
};
|
|
2995
3050
|
var defaultPlugins = [
|
|
2996
3051
|
{
|
|
2997
3052
|
plugin: EdgeFunctionPlugin,
|
|
2998
3053
|
translations: EdgeFunctionPluginTranslations
|
|
2999
3054
|
}
|
|
3000
3055
|
];
|
|
3056
|
+
var defaultOptions = {
|
|
3057
|
+
licenseKey: "gpl-v3"
|
|
3058
|
+
};
|
|
3001
3059
|
var ComputeGraphRegistry = class extends Resource3 {
|
|
3002
|
-
constructor(options = {
|
|
3003
|
-
plugins: defaultPlugins
|
|
3004
|
-
}) {
|
|
3005
|
-
super();
|
|
3006
|
-
this._graphs = /* @__PURE__ */ new Map();
|
|
3007
|
-
this._options = defaultsDeep2({}, options, defaultOptions);
|
|
3008
|
-
this._options.plugins?.forEach(({ plugin, translations }) => {
|
|
3009
|
-
HyperFormula.registerFunctionPlugin(plugin, translations);
|
|
3010
|
-
});
|
|
3011
|
-
}
|
|
3012
3060
|
getGraph(spaceId) {
|
|
3013
3061
|
return this._graphs.get(spaceId);
|
|
3014
3062
|
}
|
|
@@ -3019,7 +3067,7 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3019
3067
|
space: space.id
|
|
3020
3068
|
}, {
|
|
3021
3069
|
F: __dxlog_file5,
|
|
3022
|
-
L:
|
|
3070
|
+
L: 73,
|
|
3023
3071
|
S: this,
|
|
3024
3072
|
C: (f, a) => f(...a)
|
|
3025
3073
|
});
|
|
@@ -3030,7 +3078,7 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3030
3078
|
createGraph(space) {
|
|
3031
3079
|
invariant3(!this._graphs.has(space.id), `ComputeGraph already exists for space: ${space.id}`, {
|
|
3032
3080
|
F: __dxlog_file5,
|
|
3033
|
-
L:
|
|
3081
|
+
L: 81,
|
|
3034
3082
|
S: this,
|
|
3035
3083
|
A: [
|
|
3036
3084
|
"!this._graphs.has(space.id)",
|
|
@@ -3038,7 +3086,17 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3038
3086
|
]
|
|
3039
3087
|
});
|
|
3040
3088
|
const hf = HyperFormula.buildEmpty(this._options);
|
|
3041
|
-
|
|
3089
|
+
invariant3(this._options.computeRuntime, "ComputeRuntime is required", {
|
|
3090
|
+
F: __dxlog_file5,
|
|
3091
|
+
L: 83,
|
|
3092
|
+
S: this,
|
|
3093
|
+
A: [
|
|
3094
|
+
"this._options.computeRuntime",
|
|
3095
|
+
"'ComputeRuntime is required'"
|
|
3096
|
+
]
|
|
3097
|
+
});
|
|
3098
|
+
const runtime = this._options.computeRuntime.getRuntime(space.id);
|
|
3099
|
+
const graph = new ComputeGraph(hf, runtime, space, this._options);
|
|
3042
3100
|
this._graphs.set(space.id, graph);
|
|
3043
3101
|
return graph;
|
|
3044
3102
|
}
|
|
@@ -3048,6 +3106,14 @@ var ComputeGraphRegistry = class extends Resource3 {
|
|
|
3048
3106
|
}
|
|
3049
3107
|
this._graphs.clear();
|
|
3050
3108
|
}
|
|
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
|
+
}
|
|
3051
3117
|
};
|
|
3052
3118
|
|
|
3053
3119
|
export {
|
|
@@ -3073,8 +3139,8 @@ export {
|
|
|
3073
3139
|
createSheetName,
|
|
3074
3140
|
parseSheetName,
|
|
3075
3141
|
ComputeGraph,
|
|
3076
|
-
defaultOptions,
|
|
3077
3142
|
defaultPlugins,
|
|
3143
|
+
defaultOptions,
|
|
3078
3144
|
ComputeGraphRegistry
|
|
3079
3145
|
};
|
|
3080
|
-
//# sourceMappingURL=chunk-
|
|
3146
|
+
//# sourceMappingURL=chunk-K37OSZ5O.mjs.map
|