@dxos/plugin-sheet 0.6.11 → 0.6.12-main.5a87ad5
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/SheetContainer-VISF3VUB.mjs +261 -0
- package/dist/lib/browser/SheetContainer-VISF3VUB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-JRL5LGCE.mjs → chunk-QILRZNE5.mjs} +2 -5
- package/dist/lib/browser/chunk-QILRZNE5.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FUAGSXA4.mjs → chunk-WZMOZKQZ.mjs} +9 -16
- package/dist/lib/browser/chunk-WZMOZKQZ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-D5AGLXJP.mjs → chunk-Z2XOOC2R.mjs} +385 -678
- package/dist/lib/browser/chunk-Z2XOOC2R.mjs.map +7 -0
- package/dist/lib/browser/{SheetContainer-U4H5D34A.mjs → chunk-ZLJ2GRE2.mjs} +1151 -240
- package/dist/lib/browser/chunk-ZLJ2GRE2.mjs.map +7 -0
- package/dist/lib/browser/graph-4XFKIHRL.mjs +21 -0
- package/dist/lib/browser/graph-4XFKIHRL.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +74 -60
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +1 -1
- package/dist/lib/browser/types.mjs +4 -6
- package/dist/lib/node/SheetContainer-2MEALQWW.cjs +279 -0
- package/dist/lib/node/SheetContainer-2MEALQWW.cjs.map +7 -0
- package/dist/lib/node/{SheetContainer-AXQV3ZT5.cjs → chunk-6DQABRGJ.cjs} +1182 -279
- package/dist/lib/node/chunk-6DQABRGJ.cjs.map +7 -0
- package/dist/lib/node/{chunk-DSYKOI4E.cjs → chunk-AOP42UAA.cjs} +13 -21
- package/dist/lib/node/chunk-AOP42UAA.cjs.map +7 -0
- package/dist/lib/node/{chunk-BJ6ZD7MN.cjs → chunk-BNARJ5GM.cjs} +5 -18
- package/dist/lib/node/chunk-BNARJ5GM.cjs.map +7 -0
- package/dist/lib/node/{chunk-5KKJ4NPP.cjs → chunk-P5QYYEHQ.cjs} +388 -676
- package/dist/lib/node/chunk-P5QYYEHQ.cjs.map +7 -0
- package/dist/lib/node/graph-2LRDUXBZ.cjs +43 -0
- package/dist/lib/node/graph-2LRDUXBZ.cjs.map +7 -0
- package/dist/lib/node/index.cjs +86 -66
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.cjs +3 -3
- package/dist/lib/node/meta.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types.cjs +10 -12
- package/dist/lib/node/types.cjs.map +2 -2
- package/dist/lib/node-esm/SheetContainer-RPSUSXWS.mjs +262 -0
- package/dist/lib/node-esm/SheetContainer-RPSUSXWS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-4MM7THJW.mjs +2944 -0
- package/dist/lib/node-esm/chunk-4MM7THJW.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-5RLTCIE2.mjs +2684 -0
- package/dist/lib/node-esm/chunk-5RLTCIE2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-IU2L277A.mjs +17 -0
- package/dist/lib/node-esm/chunk-IU2L277A.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-RR2AO4SM.mjs +76 -0
- package/dist/lib/node-esm/chunk-RR2AO4SM.mjs.map +7 -0
- package/dist/lib/node-esm/graph-WG5EKOMO.mjs +22 -0
- package/dist/lib/node-esm/graph-WG5EKOMO.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +263 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/meta.mjs +10 -0
- package/dist/lib/node-esm/meta.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +21 -0
- package/dist/lib/node-esm/types.mjs.map +7 -0
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/components/CellEditor/CellEditor.d.ts +23 -3
- package/dist/types/src/components/CellEditor/CellEditor.d.ts.map +1 -1
- package/dist/types/src/components/CellEditor/CellEditor.stories.d.ts +2 -2
- package/dist/types/src/components/CellEditor/CellEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/CellEditor/extension.d.ts +1 -1
- package/dist/types/src/components/CellEditor/extension.d.ts.map +1 -1
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +11 -0
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -0
- package/dist/types/src/components/ComputeGraph/index.d.ts +1 -3
- package/dist/types/src/components/ComputeGraph/index.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.d.ts +10 -0
- package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -0
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +9 -0
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -0
- package/dist/types/src/components/GridSheet/util.d.ts +7 -0
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -0
- package/dist/types/src/components/Sheet/Sheet.d.ts +1 -1
- package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/Sheet.stories.d.ts +5 -6
- package/dist/types/src/components/Sheet/Sheet.stories.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/decorations.d.ts +24 -0
- package/dist/types/src/components/Sheet/decorations.d.ts.map +1 -0
- package/dist/types/src/components/Sheet/grid.d.ts +2 -2
- package/dist/types/src/components/Sheet/grid.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/nav.d.ts +3 -3
- package/dist/types/src/components/Sheet/nav.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/sheet-context.d.ts +8 -7
- package/dist/types/src/components/Sheet/sheet-context.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/threads.d.ts +2 -0
- package/dist/types/src/components/Sheet/threads.d.ts.map +1 -0
- package/dist/types/src/components/SheetContainer.d.ts +2 -3
- package/dist/types/src/components/SheetContainer.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +19 -3
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +18 -13
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/defs/index.d.ts +3 -0
- package/dist/types/src/defs/index.d.ts.map +1 -0
- package/dist/types/src/{model → defs}/types.d.ts +8 -3
- package/dist/types/src/defs/types.d.ts.map +1 -0
- package/dist/types/src/defs/types.test.d.ts.map +1 -0
- package/dist/types/src/defs/util.d.ts +43 -0
- package/dist/types/src/defs/util.d.ts.map +1 -0
- package/dist/types/src/extensions/compute.d.ts +9 -0
- package/dist/types/src/extensions/compute.d.ts.map +1 -0
- package/dist/types/src/extensions/compute.stories.d.ts +26 -0
- package/dist/types/src/extensions/compute.stories.d.ts.map +1 -0
- package/dist/types/src/extensions/index.d.ts +2 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -0
- package/dist/types/src/{components/ComputeGraph → graph}/async-function.d.ts +8 -2
- package/dist/types/src/graph/async-function.d.ts.map +1 -0
- package/dist/types/src/graph/compute-graph.d.ts +84 -0
- package/dist/types/src/graph/compute-graph.d.ts.map +1 -0
- package/dist/types/src/graph/compute-graph.stories.d.ts +10 -0
- package/dist/types/src/graph/compute-graph.stories.d.ts.map +1 -0
- package/dist/types/src/graph/compute-graph.test.d.ts +2 -0
- package/dist/types/src/graph/compute-graph.test.d.ts.map +1 -0
- package/dist/types/src/graph/compute-node.d.ts +26 -0
- package/dist/types/src/graph/compute-node.d.ts.map +1 -0
- package/dist/types/src/graph/edge-function.d.ts.map +1 -0
- package/dist/types/src/{model/functions.d.ts → graph/function-defs.d.ts} +1 -1
- package/dist/types/src/graph/function-defs.d.ts.map +1 -0
- package/dist/types/src/graph/hyperformula.test.d.ts +2 -0
- package/dist/types/src/graph/hyperformula.test.d.ts.map +1 -0
- package/dist/types/src/graph/index.d.ts +4 -0
- package/dist/types/src/graph/index.d.ts.map +1 -0
- package/dist/types/src/{components/ComputeGraph/custom.d.ts → graph/testing/custom-function.d.ts} +4 -2
- package/dist/types/src/graph/testing/custom-function.d.ts.map +1 -0
- package/dist/types/src/graph/testing/index.d.ts +2 -0
- package/dist/types/src/graph/testing/index.d.ts.map +1 -0
- package/dist/types/src/graph/util.d.ts +2 -0
- package/dist/types/src/graph/util.d.ts.map +1 -0
- package/dist/types/src/hooks/hooks.stories.d.ts +11 -0
- package/dist/types/src/hooks/hooks.stories.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +4 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useComputeGraph.d.ts +7 -0
- package/dist/types/src/hooks/useComputeGraph.d.ts.map +1 -0
- package/dist/types/src/hooks/useFormattingModel.d.ts +3 -0
- package/dist/types/src/hooks/useFormattingModel.d.ts.map +1 -0
- package/dist/types/src/hooks/useSheetModel.d.ts +8 -0
- package/dist/types/src/hooks/useSheetModel.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +1 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/model/formatting-model.d.ts +16 -0
- package/dist/types/src/model/formatting-model.d.ts.map +1 -0
- package/dist/types/src/model/index.d.ts +2 -3
- package/dist/types/src/model/index.d.ts.map +1 -1
- package/dist/types/src/model/{model.d.ts → sheet-model.d.ts} +10 -65
- package/dist/types/src/model/sheet-model.d.ts.map +1 -0
- package/dist/types/src/sanity.test.d.ts +2 -0
- package/dist/types/src/sanity.test.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +2 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/testing/testing.d.ts +8 -0
- package/dist/types/src/testing/testing.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +17 -12
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +86 -5
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/vendor/hyperformula.mjs +37145 -0
- package/package.json +48 -41
- package/src/SheetPlugin.tsx +48 -73
- package/src/components/CellEditor/CellEditor.stories.tsx +5 -4
- package/src/components/CellEditor/CellEditor.tsx +59 -9
- package/src/components/CellEditor/extension.test.ts +4 -5
- package/src/components/CellEditor/extension.ts +1 -3
- package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +20 -0
- package/src/components/ComputeGraph/index.ts +1 -3
- package/src/components/GridSheet/GridSheet.stories.tsx +36 -0
- package/src/components/GridSheet/GridSheet.tsx +153 -0
- package/src/components/GridSheet/util.ts +108 -0
- package/src/components/Sheet/Sheet.stories.tsx +52 -88
- package/src/components/Sheet/Sheet.tsx +57 -18
- package/src/components/Sheet/decorations.ts +62 -0
- package/src/components/Sheet/grid.ts +3 -3
- package/src/components/Sheet/nav.ts +19 -19
- package/src/components/Sheet/sheet-context.tsx +18 -80
- package/src/components/Sheet/threads.tsx +205 -0
- package/src/components/SheetContainer.tsx +73 -19
- package/src/components/Toolbar/Toolbar.tsx +53 -12
- package/src/components/index.ts +1 -0
- package/src/defs/index.ts +6 -0
- package/src/{model → defs}/types.test.ts +8 -9
- package/src/{model → defs}/types.ts +24 -14
- package/src/defs/util.ts +151 -0
- package/src/extensions/compute.stories.tsx +153 -0
- package/src/extensions/compute.ts +131 -0
- package/src/extensions/index.ts +5 -0
- package/src/{components/ComputeGraph → graph}/async-function.ts +15 -6
- package/src/graph/compute-graph.stories.tsx +93 -0
- package/src/graph/compute-graph.test.ts +127 -0
- package/src/graph/compute-graph.ts +313 -0
- package/src/graph/compute-node.ts +62 -0
- package/src/{components/ComputeGraph → graph}/edge-function.ts +3 -3
- package/src/graph/hyperformula.test.ts +15 -0
- package/src/graph/index.ts +7 -0
- package/src/{components/ComputeGraph/custom.ts → graph/testing/custom-function.ts} +11 -7
- package/src/graph/testing/index.ts +5 -0
- package/src/graph/util.ts +8 -0
- package/src/hooks/hooks.stories.tsx +50 -0
- package/src/hooks/index.ts +7 -0
- package/src/hooks/useComputeGraph.ts +21 -0
- package/src/hooks/useFormattingModel.ts +11 -0
- package/src/hooks/useSheetModel.ts +40 -0
- package/src/meta.tsx +1 -5
- package/src/{components/Sheet/formatting.ts → model/formatting-model.ts} +20 -13
- package/src/model/index.ts +2 -3
- package/src/model/sheet-model.ts +414 -0
- package/src/sanity.test.ts +40 -0
- package/src/testing/index.ts +5 -0
- package/src/testing/testing.tsx +68 -0
- package/src/translations.ts +6 -1
- package/src/types.ts +31 -6
- package/dist/lib/browser/SheetContainer-U4H5D34A.mjs.map +0 -7
- package/dist/lib/browser/chunk-APHOLYUB.mjs +0 -175
- package/dist/lib/browser/chunk-APHOLYUB.mjs.map +0 -7
- package/dist/lib/browser/chunk-D5AGLXJP.mjs.map +0 -7
- package/dist/lib/browser/chunk-FUAGSXA4.mjs.map +0 -7
- package/dist/lib/browser/chunk-JRL5LGCE.mjs.map +0 -7
- package/dist/lib/browser/chunk-NU4PBN33.mjs +0 -8
- package/dist/lib/browser/chunk-NU4PBN33.mjs.map +0 -7
- package/dist/lib/browser/testing.mjs +0 -92
- package/dist/lib/browser/testing.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-AXQV3ZT5.cjs.map +0 -7
- package/dist/lib/node/chunk-5KKJ4NPP.cjs.map +0 -7
- package/dist/lib/node/chunk-BJ6ZD7MN.cjs.map +0 -7
- package/dist/lib/node/chunk-CN3RPESU.cjs +0 -202
- package/dist/lib/node/chunk-CN3RPESU.cjs.map +0 -7
- package/dist/lib/node/chunk-DSYKOI4E.cjs.map +0 -7
- package/dist/lib/node/chunk-PYXHNAAK.cjs +0 -40
- package/dist/lib/node/chunk-PYXHNAAK.cjs.map +0 -7
- package/dist/lib/node/testing.cjs +0 -111
- package/dist/lib/node/testing.cjs.map +0 -7
- package/dist/types/src/components/ComputeGraph/async-function.d.ts.map +0 -1
- package/dist/types/src/components/ComputeGraph/custom.d.ts.map +0 -1
- package/dist/types/src/components/ComputeGraph/edge-function.d.ts.map +0 -1
- package/dist/types/src/components/ComputeGraph/graph-context.d.ts +0 -12
- package/dist/types/src/components/ComputeGraph/graph-context.d.ts.map +0 -1
- package/dist/types/src/components/ComputeGraph/graph.browser.test.d.ts +0 -2
- package/dist/types/src/components/ComputeGraph/graph.browser.test.d.ts.map +0 -1
- package/dist/types/src/components/ComputeGraph/graph.d.ts +0 -26
- package/dist/types/src/components/ComputeGraph/graph.d.ts.map +0 -1
- package/dist/types/src/components/Sheet/formatting.d.ts +0 -14
- package/dist/types/src/components/Sheet/formatting.d.ts.map +0 -1
- package/dist/types/src/model/functions.d.ts.map +0 -1
- package/dist/types/src/model/model.browser.test.d.ts +0 -2
- package/dist/types/src/model/model.browser.test.d.ts.map +0 -1
- package/dist/types/src/model/model.d.ts.map +0 -1
- package/dist/types/src/model/types.d.ts.map +0 -1
- package/dist/types/src/model/types.test.d.ts.map +0 -1
- package/dist/types/src/model/util.d.ts +0 -15
- package/dist/types/src/model/util.d.ts.map +0 -1
- package/dist/types/src/testing.d.ts +0 -9
- package/dist/types/src/testing.d.ts.map +0 -1
- package/src/components/ComputeGraph/graph-context.tsx +0 -50
- package/src/components/ComputeGraph/graph.browser.test.ts +0 -50
- package/src/components/ComputeGraph/graph.ts +0 -62
- package/src/model/model.browser.test.ts +0 -100
- package/src/model/model.ts +0 -550
- package/src/model/util.ts +0 -36
- package/src/testing.ts +0 -50
- /package/dist/types/src/{model → defs}/types.test.d.ts +0 -0
- /package/dist/types/src/{components/ComputeGraph → graph}/edge-function.d.ts +0 -0
- /package/src/{model/functions.ts → graph/function-defs.ts} +0 -0
|
@@ -26,42 +26,43 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
addressFromA1Notation: () => addressFromA1Notation,
|
|
36
|
-
addressToA1Notation: () => addressToA1Notation,
|
|
37
|
-
columnLetter: () => columnLetter,
|
|
38
|
-
createComputeGraph: () => createComputeGraph,
|
|
29
|
+
var chunk_P5QYYEHQ_exports = {};
|
|
30
|
+
__export(chunk_P5QYYEHQ_exports, {
|
|
31
|
+
ComputeGraph: () => ComputeGraph,
|
|
32
|
+
ComputeGraphRegistry: () => ComputeGraphRegistry,
|
|
33
|
+
ComputeNode: () => ComputeNode,
|
|
34
|
+
createSheetName: () => createSheetName,
|
|
39
35
|
defaultFunctions: () => defaultFunctions,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
defaultOptions: () => defaultOptions,
|
|
37
|
+
defaultPlugins: () => defaultPlugins,
|
|
38
|
+
getSheetId: () => getSheetId
|
|
43
39
|
});
|
|
44
|
-
module.exports = __toCommonJS(
|
|
45
|
-
var
|
|
46
|
-
var import_hyperformula = require("hyperformula");
|
|
40
|
+
module.exports = __toCommonJS(chunk_P5QYYEHQ_exports);
|
|
41
|
+
var import_lodash = __toESM(require("lodash.defaultsdeep"));
|
|
47
42
|
var import_async = require("@dxos/async");
|
|
43
|
+
var import_echo = require("@dxos/client/echo");
|
|
44
|
+
var import_context = require("@dxos/context");
|
|
45
|
+
var import_invariant = require("@dxos/invariant");
|
|
48
46
|
var import_keys = require("@dxos/keys");
|
|
49
47
|
var import_log = require("@dxos/log");
|
|
50
|
-
var
|
|
51
|
-
var
|
|
48
|
+
var import_types = require("@dxos/plugin-script/types");
|
|
49
|
+
var import_util = require("@dxos/util");
|
|
50
|
+
var import_hyperformula = require("#hyperformula");
|
|
51
|
+
var import_lodash2 = __toESM(require("lodash.defaultsdeep"));
|
|
52
52
|
var import_async2 = require("@dxos/async");
|
|
53
53
|
var import_log2 = require("@dxos/log");
|
|
54
|
-
var
|
|
54
|
+
var import_hyperformula2 = require("#hyperformula");
|
|
55
55
|
var import_async3 = require("@dxos/async");
|
|
56
|
-
var
|
|
57
|
-
var
|
|
58
|
-
var
|
|
56
|
+
var import_context2 = require("@dxos/context");
|
|
57
|
+
var import_hyperformula3 = require("#hyperformula");
|
|
58
|
+
var import_signals_core = require("@preact/signals-core");
|
|
59
|
+
var import_echo2 = require("@dxos/client/echo");
|
|
59
60
|
var import_log3 = require("@dxos/log");
|
|
60
|
-
var
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var
|
|
64
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/
|
|
61
|
+
var import_edge = require("@dxos/plugin-script/edge");
|
|
62
|
+
var import_types2 = require("@dxos/plugin-script/types");
|
|
63
|
+
var import_util2 = require("@dxos/util");
|
|
64
|
+
var import_hyperformula4 = require("#hyperformula");
|
|
65
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/graph/async-function.ts";
|
|
65
66
|
var defaultFunctionContextOptions = {
|
|
66
67
|
defaultTtl: 5e3,
|
|
67
68
|
recalculationDelay: 200,
|
|
@@ -75,17 +76,17 @@ var FunctionContext = class _FunctionContext {
|
|
|
75
76
|
...args
|
|
76
77
|
});
|
|
77
78
|
}
|
|
78
|
-
constructor(_hf, _space,
|
|
79
|
+
constructor(_hf, _space, _options) {
|
|
79
80
|
this._hf = _hf;
|
|
80
81
|
this._space = _space;
|
|
81
82
|
this._cache = /* @__PURE__ */ new Map();
|
|
82
83
|
this._pending = /* @__PURE__ */ new Map();
|
|
83
84
|
this._subscriptions = /* @__PURE__ */ new Map();
|
|
84
85
|
this._invocations = {};
|
|
85
|
-
this._options = (0,
|
|
86
|
-
this._onUpdate = (0, import_async2.debounce)(() => {
|
|
86
|
+
this._options = (0, import_lodash2.default)(_options ?? {}, defaultFunctionContextOptions);
|
|
87
|
+
this._onUpdate = (0, import_async2.debounce)((update) => {
|
|
87
88
|
this._hf.resumeEvaluation();
|
|
88
|
-
onUpdate(
|
|
89
|
+
this._options.onUpdate?.(update);
|
|
89
90
|
}, this._options.recalculationDelay);
|
|
90
91
|
}
|
|
91
92
|
get space() {
|
|
@@ -136,18 +137,21 @@ var FunctionContext = class _FunctionContext {
|
|
|
136
137
|
value: value2
|
|
137
138
|
}, {
|
|
138
139
|
F: __dxlog_file,
|
|
139
|
-
L:
|
|
140
|
+
L: 145,
|
|
140
141
|
S: this,
|
|
141
142
|
C: (f, a) => f(...a)
|
|
142
143
|
});
|
|
143
|
-
this._onUpdate(
|
|
144
|
+
this._onUpdate({
|
|
145
|
+
name,
|
|
146
|
+
cell
|
|
147
|
+
});
|
|
144
148
|
} catch (err) {
|
|
145
149
|
import_log2.log.warn("failed", {
|
|
146
150
|
cell,
|
|
147
151
|
err
|
|
148
152
|
}, {
|
|
149
153
|
F: __dxlog_file,
|
|
150
|
-
L:
|
|
154
|
+
L: 149,
|
|
151
155
|
S: this,
|
|
152
156
|
C: (f, a) => f(...a)
|
|
153
157
|
});
|
|
@@ -167,7 +171,7 @@ var FunctionContext = class _FunctionContext {
|
|
|
167
171
|
cache: value
|
|
168
172
|
}, {
|
|
169
173
|
F: __dxlog_file,
|
|
170
|
-
L:
|
|
174
|
+
L: 157,
|
|
171
175
|
S: this,
|
|
172
176
|
C: (f, a) => f(...a)
|
|
173
177
|
});
|
|
@@ -186,40 +190,153 @@ var FunctionPluginAsync = class extends import_hyperformula2.FunctionPlugin {
|
|
|
186
190
|
});
|
|
187
191
|
}
|
|
188
192
|
};
|
|
189
|
-
var
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
this.refresh();
|
|
208
|
-
}, this._options);
|
|
209
|
-
this.hf.updateConfig({
|
|
210
|
-
context: this.context
|
|
193
|
+
var ComputeNode = class extends import_context2.Resource {
|
|
194
|
+
constructor(_graph, sheetId) {
|
|
195
|
+
super();
|
|
196
|
+
this._graph = _graph;
|
|
197
|
+
this.sheetId = sheetId;
|
|
198
|
+
this.update = new import_async3.Event();
|
|
199
|
+
}
|
|
200
|
+
get graph() {
|
|
201
|
+
return this._graph;
|
|
202
|
+
}
|
|
203
|
+
clear() {
|
|
204
|
+
this._graph.hf.clearSheet(this.sheetId);
|
|
205
|
+
}
|
|
206
|
+
getValue(cell) {
|
|
207
|
+
const value = this._graph.hf.getCellValue({
|
|
208
|
+
sheet: this.sheetId,
|
|
209
|
+
row: cell.row,
|
|
210
|
+
col: cell.col
|
|
211
211
|
});
|
|
212
|
+
if (value instanceof import_hyperformula3.DetailedCellError) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
return value;
|
|
212
216
|
}
|
|
213
|
-
|
|
214
|
-
(0
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
217
|
+
setValue(cell, value) {
|
|
218
|
+
const mappedValue = typeof value === "string" && value.charAt(0) === "=" ? this._graph.mapFormulaToNative(value) : value;
|
|
219
|
+
this._graph.hf.setCellContents({
|
|
220
|
+
sheet: this.sheetId,
|
|
221
|
+
row: cell.row,
|
|
222
|
+
col: cell.col
|
|
223
|
+
}, [
|
|
224
|
+
[
|
|
225
|
+
mappedValue
|
|
226
|
+
]
|
|
227
|
+
]);
|
|
228
|
+
}
|
|
229
|
+
async _open() {
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/graph/edge-function.ts";
|
|
233
|
+
var EDGE_FUNCTION_TTL = 1e4;
|
|
234
|
+
var EdgeFunctionPlugin = class extends FunctionPluginAsync {
|
|
235
|
+
edge(ast, state) {
|
|
236
|
+
const handler = (subscribe = false) => async (binding, ...args) => {
|
|
237
|
+
const space = this.context.space;
|
|
238
|
+
if (!space) {
|
|
239
|
+
return new import_hyperformula4.CellError(import_hyperformula4.ErrorType.REF, "Missing space");
|
|
240
|
+
}
|
|
241
|
+
const { objects: [fn] } = await space.db.query(import_echo2.Filter.schema(import_types2.FunctionType, {
|
|
242
|
+
binding
|
|
243
|
+
})).run();
|
|
244
|
+
if (!fn) {
|
|
245
|
+
import_log3.log.info("Function not found", {
|
|
246
|
+
binding
|
|
247
|
+
}, {
|
|
248
|
+
F: __dxlog_file2,
|
|
249
|
+
L: 39,
|
|
250
|
+
S: this,
|
|
251
|
+
C: (f, a) => f(...a)
|
|
252
|
+
});
|
|
253
|
+
return new import_hyperformula4.CellError(import_hyperformula4.ErrorType.REF, "Function not found");
|
|
254
|
+
}
|
|
255
|
+
if (subscribe) {
|
|
256
|
+
const unsubscribe = (0, import_signals_core.effect)(() => {
|
|
257
|
+
import_log3.log.info("function changed", {
|
|
258
|
+
fn
|
|
259
|
+
}, {
|
|
260
|
+
F: __dxlog_file2,
|
|
261
|
+
L: 45,
|
|
262
|
+
S: this,
|
|
263
|
+
C: (f, a) => f(...a)
|
|
264
|
+
});
|
|
265
|
+
const _ = fn?.version;
|
|
266
|
+
this.runAsyncFunction(ast, state, handler(false), {
|
|
267
|
+
ttl: EDGE_FUNCTION_TTL
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
this.context.createSubscription(ast.procedureName, unsubscribe);
|
|
271
|
+
}
|
|
272
|
+
const path = (0, import_edge.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
|
|
273
|
+
const result = await fetch(`${this.context.remoteFunctionUrl}${path}`, {
|
|
274
|
+
method: "POST",
|
|
275
|
+
headers: {
|
|
276
|
+
"Content-Type": "application/json"
|
|
277
|
+
},
|
|
278
|
+
body: JSON.stringify({
|
|
279
|
+
args: args.filter(import_util2.nonNullable)
|
|
280
|
+
})
|
|
281
|
+
});
|
|
282
|
+
return await result.text();
|
|
283
|
+
};
|
|
284
|
+
return this.runAsyncFunction(ast, state, handler(true), {
|
|
285
|
+
ttl: EDGE_FUNCTION_TTL
|
|
221
286
|
});
|
|
222
|
-
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
EdgeFunctionPlugin.implementedFunctions = {
|
|
290
|
+
EDGE: {
|
|
291
|
+
method: "edge",
|
|
292
|
+
parameters: [
|
|
293
|
+
// Binding
|
|
294
|
+
{
|
|
295
|
+
argumentType: import_hyperformula4.FunctionArgumentType.STRING
|
|
296
|
+
},
|
|
297
|
+
// Remote function arguments (currently supporting up to 8).
|
|
298
|
+
{
|
|
299
|
+
argumentType: import_hyperformula4.FunctionArgumentType.ANY,
|
|
300
|
+
optionalArg: true
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
argumentType: import_hyperformula4.FunctionArgumentType.ANY,
|
|
304
|
+
optionalArg: true
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
argumentType: import_hyperformula4.FunctionArgumentType.ANY,
|
|
308
|
+
optionalArg: true
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
argumentType: import_hyperformula4.FunctionArgumentType.ANY,
|
|
312
|
+
optionalArg: true
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
argumentType: import_hyperformula4.FunctionArgumentType.ANY,
|
|
316
|
+
optionalArg: true
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
argumentType: import_hyperformula4.FunctionArgumentType.ANY,
|
|
320
|
+
optionalArg: true
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
argumentType: import_hyperformula4.FunctionArgumentType.ANY,
|
|
324
|
+
optionalArg: true
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
argumentType: import_hyperformula4.FunctionArgumentType.ANY,
|
|
328
|
+
optionalArg: true
|
|
329
|
+
}
|
|
330
|
+
],
|
|
331
|
+
isVolatile: true
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
var EdgeFunctionPluginTranslations = {
|
|
335
|
+
enGB: {
|
|
336
|
+
EDGE: "EDGE"
|
|
337
|
+
},
|
|
338
|
+
enUS: {
|
|
339
|
+
EDGE: "EDGE"
|
|
223
340
|
}
|
|
224
341
|
};
|
|
225
342
|
var defaultFunctions = [
|
|
@@ -2594,666 +2711,261 @@ var defaultFunctions = [
|
|
|
2594
2711
|
section: "Text"
|
|
2595
2712
|
}
|
|
2596
2713
|
];
|
|
2597
|
-
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/
|
|
2598
|
-
var
|
|
2599
|
-
var
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
var columnLetter = (column) => {
|
|
2603
|
-
(0, import_invariant2.invariant)(column < MAX_COLUMNS, `Invalid column: ${column}`, {
|
|
2604
|
-
F: __dxlog_file3,
|
|
2605
|
-
L: 17,
|
|
2606
|
-
S: void 0,
|
|
2607
|
-
A: [
|
|
2608
|
-
"column < MAX_COLUMNS",
|
|
2609
|
-
"`Invalid column: ${column}`"
|
|
2610
|
-
]
|
|
2611
|
-
});
|
|
2612
|
-
return (column >= 26 ? String.fromCharCode("A".charCodeAt(0) + Math.floor(column / 26) - 1) : "") + String.fromCharCode("A".charCodeAt(0) + column % 26);
|
|
2613
|
-
};
|
|
2614
|
-
var addressToA1Notation = ({ column, row }) => {
|
|
2615
|
-
return `${columnLetter(column)}${row + 1}`;
|
|
2616
|
-
};
|
|
2617
|
-
var addressFromA1Notation = (ref) => {
|
|
2618
|
-
const match = ref.match(/([A-Z]+)(\d+)/);
|
|
2619
|
-
(0, import_invariant2.invariant)(match, `Invalid notation: ${ref}`, {
|
|
2620
|
-
F: __dxlog_file3,
|
|
2621
|
-
L: 30,
|
|
2622
|
-
S: void 0,
|
|
2623
|
-
A: [
|
|
2624
|
-
"match",
|
|
2625
|
-
"`Invalid notation: ${ref}`"
|
|
2626
|
-
]
|
|
2627
|
-
});
|
|
2628
|
-
return {
|
|
2629
|
-
row: parseInt(match[2], 10) - 1,
|
|
2630
|
-
column: match[1].split("").reduce((acc, c) => acc * 26 + c.charCodeAt(0) - "A".charCodeAt(0) + 1, 0) - 1
|
|
2631
|
-
};
|
|
2632
|
-
};
|
|
2633
|
-
var rangeToA1Notation = (range) => {
|
|
2634
|
-
return [
|
|
2635
|
-
range?.from && addressToA1Notation(range?.from),
|
|
2636
|
-
range?.to && addressToA1Notation(range?.to)
|
|
2637
|
-
].filter(Boolean).join(":");
|
|
2714
|
+
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/graph/compute-graph.ts";
|
|
2715
|
+
var OBJECT_ID_LENGTH = 60;
|
|
2716
|
+
var CUSTOM_FUNCTION = "ECHO";
|
|
2717
|
+
var defaultOptions = {
|
|
2718
|
+
licenseKey: "gpl-v3"
|
|
2638
2719
|
};
|
|
2639
|
-
var
|
|
2640
|
-
|
|
2641
|
-
|
|
2720
|
+
var defaultPlugins = [
|
|
2721
|
+
{
|
|
2722
|
+
plugin: EdgeFunctionPlugin,
|
|
2723
|
+
translations: EdgeFunctionPluginTranslations
|
|
2642
2724
|
}
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2725
|
+
];
|
|
2726
|
+
var PREFIX = "__";
|
|
2727
|
+
var createSheetName = (id) => `${PREFIX}${id}`;
|
|
2728
|
+
var getSheetId = (name) => name.startsWith(PREFIX) ? name.slice(PREFIX.length) : void 0;
|
|
2729
|
+
var ComputeGraphRegistry = class extends import_context.Resource {
|
|
2730
|
+
constructor(options = {
|
|
2731
|
+
plugins: defaultPlugins
|
|
2732
|
+
}) {
|
|
2733
|
+
super();
|
|
2734
|
+
this._graphs = /* @__PURE__ */ new Map();
|
|
2735
|
+
this._options = (0, import_lodash.default)({}, options, defaultOptions);
|
|
2736
|
+
this._options.plugins?.forEach(({ plugin, translations }) => {
|
|
2737
|
+
import_hyperformula.HyperFormula.registerFunctionPlugin(plugin, translations);
|
|
2738
|
+
});
|
|
2646
2739
|
}
|
|
2647
|
-
|
|
2648
|
-
return
|
|
2740
|
+
getGraph(spaceId) {
|
|
2741
|
+
return this._graphs.get(spaceId);
|
|
2742
|
+
}
|
|
2743
|
+
async getOrCreateGraph(space) {
|
|
2744
|
+
let graph = this.getGraph(space.id);
|
|
2745
|
+
if (!graph) {
|
|
2746
|
+
import_log.log.info("create graph", {
|
|
2747
|
+
space: space.id
|
|
2748
|
+
}, {
|
|
2749
|
+
F: __dxlog_file3,
|
|
2750
|
+
L: 93,
|
|
2751
|
+
S: this,
|
|
2752
|
+
C: (f, a) => f(...a)
|
|
2753
|
+
});
|
|
2754
|
+
graph = await this.createGraph(space);
|
|
2755
|
+
}
|
|
2756
|
+
return graph;
|
|
2649
2757
|
}
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2758
|
+
async createGraph(space) {
|
|
2759
|
+
(0, import_invariant.invariant)(!this._graphs.has(space.id), `ComputeGraph already exists for space: ${space.id}`, {
|
|
2760
|
+
F: __dxlog_file3,
|
|
2761
|
+
L: 101,
|
|
2762
|
+
S: this,
|
|
2763
|
+
A: [
|
|
2764
|
+
"!this._graphs.has(space.id)",
|
|
2765
|
+
"`ComputeGraph already exists for space: ${space.id}`"
|
|
2766
|
+
]
|
|
2767
|
+
});
|
|
2768
|
+
const hf = import_hyperformula.HyperFormula.buildEmpty(this._options);
|
|
2769
|
+
const graph = new ComputeGraph(hf, space, this._options);
|
|
2770
|
+
this._graphs.set(space.id, graph);
|
|
2771
|
+
await graph.open();
|
|
2772
|
+
return graph;
|
|
2773
|
+
}
|
|
2774
|
+
async _close() {
|
|
2775
|
+
for (const graph of this._graphs.values()) {
|
|
2776
|
+
await graph.close();
|
|
2777
|
+
}
|
|
2666
2778
|
}
|
|
2667
2779
|
};
|
|
2668
|
-
var
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
return Array.from(randomBuffer, (byte) => characters[byte % charactersLength]).join("");
|
|
2673
|
-
};
|
|
2674
|
-
var createIndices = (length) => Array.from({
|
|
2675
|
-
length
|
|
2676
|
-
}).map(() => createIndex());
|
|
2677
|
-
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/model/model.ts";
|
|
2678
|
-
var DEFAULT_ROWS = 100;
|
|
2679
|
-
var DEFAULT_COLUMNS = 26;
|
|
2680
|
-
var typeMap = {
|
|
2681
|
-
BOOLEAN: import_chunk_DSYKOI4E.ValueTypeEnum.Boolean,
|
|
2682
|
-
NUMBER_RAW: import_chunk_DSYKOI4E.ValueTypeEnum.Number,
|
|
2683
|
-
NUMBER_PERCENT: import_chunk_DSYKOI4E.ValueTypeEnum.Percent,
|
|
2684
|
-
NUMBER_CURRENCY: import_chunk_DSYKOI4E.ValueTypeEnum.Currency,
|
|
2685
|
-
NUMBER_DATETIME: import_chunk_DSYKOI4E.ValueTypeEnum.DateTime,
|
|
2686
|
-
NUMBER_DATE: import_chunk_DSYKOI4E.ValueTypeEnum.Date,
|
|
2687
|
-
NUMBER_TIME: import_chunk_DSYKOI4E.ValueTypeEnum.Time
|
|
2688
|
-
};
|
|
2689
|
-
var defaultOptions = {
|
|
2690
|
-
rows: 50,
|
|
2691
|
-
columns: 26,
|
|
2692
|
-
mapFormulaBindingFromId: () => (formula) => formula,
|
|
2693
|
-
mapFormulaBindingToId: () => (formula) => formula
|
|
2694
|
-
};
|
|
2695
|
-
var getTopLeft = (range) => {
|
|
2696
|
-
const to = range.to ?? range.from;
|
|
2697
|
-
return {
|
|
2698
|
-
row: Math.min(range.from.row, to.row),
|
|
2699
|
-
column: Math.min(range.from.column, to.column)
|
|
2700
|
-
};
|
|
2701
|
-
};
|
|
2702
|
-
var toSimpleCellAddress = (sheet, cell) => ({
|
|
2703
|
-
sheet,
|
|
2704
|
-
row: cell.row,
|
|
2705
|
-
col: cell.column
|
|
2706
|
-
});
|
|
2707
|
-
var toModelRange = (sheet, range) => ({
|
|
2708
|
-
start: toSimpleCellAddress(sheet, range.from),
|
|
2709
|
-
end: toSimpleCellAddress(sheet, range.to ?? range.from)
|
|
2710
|
-
});
|
|
2711
|
-
var SheetModel = class {
|
|
2712
|
-
constructor(_graph, _sheet, _space, options = {}) {
|
|
2713
|
-
this._graph = _graph;
|
|
2714
|
-
this._sheet = _sheet;
|
|
2780
|
+
var ComputeGraph = class extends import_context.Resource {
|
|
2781
|
+
constructor(_hf, _space, _options) {
|
|
2782
|
+
super();
|
|
2783
|
+
this._hf = _hf;
|
|
2715
2784
|
this._space = _space;
|
|
2716
|
-
this.
|
|
2717
|
-
this.
|
|
2785
|
+
this._options = _options;
|
|
2786
|
+
this.id = `graph-${import_keys.PublicKey.random().truncate()}`;
|
|
2787
|
+
this._nodes = /* @__PURE__ */ new Map();
|
|
2718
2788
|
this._functions = [];
|
|
2719
|
-
this.update = new
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
this.
|
|
2723
|
-
}
|
|
2724
|
-
this._sheetId = this._graph.hf.getSheetId(name);
|
|
2725
|
-
this._options = {
|
|
2726
|
-
...defaultOptions,
|
|
2727
|
-
...options
|
|
2728
|
-
};
|
|
2729
|
-
this.reset();
|
|
2730
|
-
}
|
|
2731
|
-
get graph() {
|
|
2732
|
-
return this._graph;
|
|
2733
|
-
}
|
|
2734
|
-
get sheet() {
|
|
2735
|
-
return this._sheet;
|
|
2736
|
-
}
|
|
2737
|
-
get readonly() {
|
|
2738
|
-
return this._options.readonly;
|
|
2739
|
-
}
|
|
2740
|
-
get bounds() {
|
|
2741
|
-
return {
|
|
2742
|
-
rows: this._sheet.rows.length,
|
|
2743
|
-
columns: this._sheet.columns.length
|
|
2744
|
-
};
|
|
2745
|
-
}
|
|
2746
|
-
get functions() {
|
|
2747
|
-
const hfFunctions = this._graph.hf.getRegisteredFunctionNames().map((name) => defaultFunctions.find((fn) => fn.name === name) ?? {
|
|
2748
|
-
name
|
|
2789
|
+
this.update = new import_async.Event();
|
|
2790
|
+
this.context = new FunctionContext(this._hf, this._space, this._options);
|
|
2791
|
+
this._hf.updateConfig({
|
|
2792
|
+
context: this.context
|
|
2749
2793
|
});
|
|
2750
|
-
const
|
|
2751
|
-
|
|
2752
|
-
|
|
2794
|
+
const onValuesUpdate = (changes) => {
|
|
2795
|
+
for (const change of changes) {
|
|
2796
|
+
if (change instanceof import_hyperformula.ExportedCellChange) {
|
|
2797
|
+
const { sheet } = change;
|
|
2798
|
+
const node = this._nodes.get(sheet);
|
|
2799
|
+
if (node) {
|
|
2800
|
+
node.update.emit({
|
|
2801
|
+
type: "valuesUpdated",
|
|
2802
|
+
change
|
|
2803
|
+
});
|
|
2804
|
+
}
|
|
2805
|
+
}
|
|
2806
|
+
}
|
|
2807
|
+
};
|
|
2808
|
+
this._hf.on("valuesUpdated", onValuesUpdate);
|
|
2809
|
+
this._ctx.onDispose(() => this._hf.off("valuesUpdated", onValuesUpdate));
|
|
2810
|
+
}
|
|
2811
|
+
get hf() {
|
|
2812
|
+
return this._hf;
|
|
2813
|
+
}
|
|
2814
|
+
// refresh() {
|
|
2815
|
+
// log('refresh', { id: this.id });
|
|
2816
|
+
// this.update.emit();
|
|
2817
|
+
// }
|
|
2818
|
+
getFunctions({ standard, echo } = {
|
|
2819
|
+
standard: true,
|
|
2820
|
+
echo: true
|
|
2821
|
+
}) {
|
|
2753
2822
|
return [
|
|
2754
|
-
...
|
|
2755
|
-
|
|
2823
|
+
...standard ? this._hf.getRegisteredFunctionNames().map((name) => defaultFunctions.find((fn) => fn.name === name) ?? {
|
|
2824
|
+
name
|
|
2825
|
+
}) : [],
|
|
2826
|
+
...echo ? this._functions.map((fn) => ({
|
|
2827
|
+
name: fn.binding
|
|
2828
|
+
})) : []
|
|
2756
2829
|
];
|
|
2757
2830
|
}
|
|
2758
|
-
get initialized() {
|
|
2759
|
-
return !!this._ctx;
|
|
2760
|
-
}
|
|
2761
2831
|
/**
|
|
2762
|
-
*
|
|
2832
|
+
* Get or create cell representing a sheet.
|
|
2763
2833
|
*/
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
(0, import_invariant.invariant)(!this.initialized, "Already initialized.", {
|
|
2774
|
-
F: __dxlog_file4,
|
|
2775
|
-
L: 143,
|
|
2834
|
+
// TODO(burdon): Async (open node).
|
|
2835
|
+
// The graph should be an extensible factory that plugins extend with model constructors.
|
|
2836
|
+
// This would enable on-the-fly instantiation of new models when then are referenced.
|
|
2837
|
+
// E.g., Cross-object reference would be stored as "ObjectId!A1"
|
|
2838
|
+
// The graph would then load the object and create a ComputeNode (model) of the appropriate type.
|
|
2839
|
+
async getOrCreateNode(name) {
|
|
2840
|
+
(0, import_invariant.invariant)(name.length, void 0, {
|
|
2841
|
+
F: __dxlog_file3,
|
|
2842
|
+
L: 193,
|
|
2776
2843
|
S: this,
|
|
2777
2844
|
A: [
|
|
2778
|
-
"
|
|
2779
|
-
"
|
|
2845
|
+
"name.length",
|
|
2846
|
+
""
|
|
2780
2847
|
]
|
|
2781
2848
|
});
|
|
2782
|
-
this.
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
}
|
|
2792
|
-
this.reset();
|
|
2793
|
-
const unsubscribe = this._graph.update.on(() => this.update.emit());
|
|
2794
|
-
this._ctx.onDispose(unsubscribe);
|
|
2795
|
-
if (this._space) {
|
|
2796
|
-
const { Filter } = await import("@dxos/client/echo");
|
|
2797
|
-
const { FunctionType } = await import("@dxos/plugin-script/types");
|
|
2798
|
-
const query = this._space?.db.query(Filter.schema(FunctionType));
|
|
2799
|
-
const unsubscribe2 = query.subscribe(({ objects }) => {
|
|
2800
|
-
this._functions = objects.filter((fn) => fn.binding);
|
|
2801
|
-
this.update.emit();
|
|
2849
|
+
if (!this._hf.doesSheetExist(name)) {
|
|
2850
|
+
import_log.log.info("created node", {
|
|
2851
|
+
space: this._space?.id,
|
|
2852
|
+
name
|
|
2853
|
+
}, {
|
|
2854
|
+
F: __dxlog_file3,
|
|
2855
|
+
L: 195,
|
|
2856
|
+
S: this,
|
|
2857
|
+
C: (f, a) => f(...a)
|
|
2802
2858
|
});
|
|
2803
|
-
this.
|
|
2859
|
+
this._hf.addSheet(name);
|
|
2804
2860
|
}
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
id: this.id
|
|
2810
|
-
}, {
|
|
2811
|
-
F: __dxlog_file4,
|
|
2812
|
-
L: 174,
|
|
2861
|
+
const sheetId = this._hf.getSheetId(name);
|
|
2862
|
+
(0, import_invariant.invariant)(sheetId !== void 0, void 0, {
|
|
2863
|
+
F: __dxlog_file3,
|
|
2864
|
+
L: 201,
|
|
2813
2865
|
S: this,
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
await this._ctx.dispose();
|
|
2818
|
-
this._ctx = void 0;
|
|
2819
|
-
}
|
|
2820
|
-
}
|
|
2821
|
-
/**
|
|
2822
|
-
* Update engine.
|
|
2823
|
-
* NOTE: This resets the undo history.
|
|
2824
|
-
* @deprecated
|
|
2825
|
-
*/
|
|
2826
|
-
reset() {
|
|
2827
|
-
this._graph.hf.clearSheet(this._sheetId);
|
|
2828
|
-
Object.entries(this._sheet.cells).forEach(([key, { value }]) => {
|
|
2829
|
-
const { column, row } = this.addressFromIndex(key);
|
|
2830
|
-
if (typeof value === "string" && value.charAt(0) === "=") {
|
|
2831
|
-
value = this.mapFormulaBindingToFormula(this.mapFormulaBindingFromId(this.mapFormulaIndicesToRefs(value)));
|
|
2832
|
-
}
|
|
2833
|
-
this._graph.hf.setCellContents({
|
|
2834
|
-
sheet: this._sheetId,
|
|
2835
|
-
row,
|
|
2836
|
-
col: column
|
|
2837
|
-
}, value);
|
|
2838
|
-
});
|
|
2839
|
-
}
|
|
2840
|
-
/**
|
|
2841
|
-
* Recalculate formulas.
|
|
2842
|
-
* NOTE: This resets the undo history.
|
|
2843
|
-
* https://hyperformula.handsontable.com/guide/volatile-functions.html#volatile-actions
|
|
2844
|
-
* @deprecated
|
|
2845
|
-
*/
|
|
2846
|
-
// TODO(burdon): Remove.
|
|
2847
|
-
recalculate() {
|
|
2848
|
-
this._graph.hf.rebuildAndRecalculate();
|
|
2849
|
-
}
|
|
2850
|
-
insertRows(i, n = 1) {
|
|
2851
|
-
this._insertIndices(this._sheet.rows, i, n, DEFAULT_ROWS);
|
|
2852
|
-
this.reset();
|
|
2853
|
-
}
|
|
2854
|
-
insertColumns(i, n = 1) {
|
|
2855
|
-
this._insertIndices(this._sheet.columns, i, n, DEFAULT_COLUMNS);
|
|
2856
|
-
this.reset();
|
|
2857
|
-
}
|
|
2858
|
-
//
|
|
2859
|
-
// Undoable actions.
|
|
2860
|
-
// TODO(burdon): Group undoable methods; consistently update hf/sheet.
|
|
2861
|
-
//
|
|
2862
|
-
/**
|
|
2863
|
-
* Clear range of values.
|
|
2864
|
-
*/
|
|
2865
|
-
clear(range) {
|
|
2866
|
-
const topLeft = getTopLeft(range);
|
|
2867
|
-
const values = this._iterRange(range, () => null);
|
|
2868
|
-
this._graph.hf.setCellContents(toSimpleCellAddress(this._sheetId, topLeft), values);
|
|
2869
|
-
this._iterRange(range, (cell) => {
|
|
2870
|
-
const idx = this.addressToIndex(cell);
|
|
2871
|
-
delete this._sheet.cells[idx];
|
|
2872
|
-
});
|
|
2873
|
-
}
|
|
2874
|
-
cut(range) {
|
|
2875
|
-
this._graph.hf.cut(toModelRange(this._sheetId, range));
|
|
2876
|
-
this._iterRange(range, (cell) => {
|
|
2877
|
-
const idx = this.addressToIndex(cell);
|
|
2878
|
-
delete this._sheet.cells[idx];
|
|
2879
|
-
});
|
|
2880
|
-
}
|
|
2881
|
-
copy(range) {
|
|
2882
|
-
this._graph.hf.copy(toModelRange(this._sheetId, range));
|
|
2883
|
-
}
|
|
2884
|
-
paste(cell) {
|
|
2885
|
-
if (!this._graph.hf.isClipboardEmpty()) {
|
|
2886
|
-
const changes = this._graph.hf.paste(toSimpleCellAddress(this._sheetId, cell));
|
|
2887
|
-
for (const change of changes) {
|
|
2888
|
-
if (change instanceof import_hyperformula3.ExportedCellChange) {
|
|
2889
|
-
const { address, newValue } = change;
|
|
2890
|
-
const idx = this.addressToIndex({
|
|
2891
|
-
row: address.row,
|
|
2892
|
-
column: address.col
|
|
2893
|
-
});
|
|
2894
|
-
this._sheet.cells[idx] = {
|
|
2895
|
-
value: newValue
|
|
2896
|
-
};
|
|
2897
|
-
}
|
|
2898
|
-
}
|
|
2899
|
-
}
|
|
2900
|
-
}
|
|
2901
|
-
// TODO(burdon): Display undo/redo state.
|
|
2902
|
-
undo() {
|
|
2903
|
-
if (this._graph.hf.isThereSomethingToUndo()) {
|
|
2904
|
-
this._graph.hf.undo();
|
|
2905
|
-
this.update.emit();
|
|
2906
|
-
}
|
|
2907
|
-
}
|
|
2908
|
-
redo() {
|
|
2909
|
-
if (this._graph.hf.isThereSomethingToRedo()) {
|
|
2910
|
-
this._graph.hf.redo();
|
|
2911
|
-
this.update.emit();
|
|
2912
|
-
}
|
|
2913
|
-
}
|
|
2914
|
-
/**
|
|
2915
|
-
* Get value from sheet.
|
|
2916
|
-
*/
|
|
2917
|
-
getCellValue(cell) {
|
|
2918
|
-
const idx = this.addressToIndex(cell);
|
|
2919
|
-
return this._sheet.cells[idx]?.value ?? null;
|
|
2920
|
-
}
|
|
2921
|
-
/**
|
|
2922
|
-
* Get value as a string for editing.
|
|
2923
|
-
*/
|
|
2924
|
-
getCellText(cell) {
|
|
2925
|
-
const value = this.getCellValue(cell);
|
|
2926
|
-
if (value == null) {
|
|
2927
|
-
return void 0;
|
|
2928
|
-
}
|
|
2929
|
-
if (typeof value === "string" && value.charAt(0) === "=") {
|
|
2930
|
-
return this.mapFormulaBindingFromId(this.mapFormulaIndicesToRefs(value));
|
|
2931
|
-
} else {
|
|
2932
|
-
return String(value);
|
|
2933
|
-
}
|
|
2934
|
-
}
|
|
2935
|
-
/**
|
|
2936
|
-
* Get array of raw values from sheet.
|
|
2937
|
-
*/
|
|
2938
|
-
getCellValues(range) {
|
|
2939
|
-
return this._iterRange(range, (cell) => this.getCellValue(cell));
|
|
2940
|
-
}
|
|
2941
|
-
/**
|
|
2942
|
-
* Gets the regular or computed value from the engine.
|
|
2943
|
-
*/
|
|
2944
|
-
getValue(cell) {
|
|
2945
|
-
const value = this._graph.hf.getCellValue(toSimpleCellAddress(this._sheetId, cell));
|
|
2946
|
-
if (value instanceof import_hyperformula3.DetailedCellError) {
|
|
2947
|
-
return value.toString();
|
|
2948
|
-
}
|
|
2949
|
-
return value;
|
|
2950
|
-
}
|
|
2951
|
-
/**
|
|
2952
|
-
* Get value type.
|
|
2953
|
-
*/
|
|
2954
|
-
getValueType(cell) {
|
|
2955
|
-
const addr = toSimpleCellAddress(this._sheetId, cell);
|
|
2956
|
-
const type = this._graph.hf.getCellValueDetailedType(addr);
|
|
2957
|
-
return typeMap[type];
|
|
2958
|
-
}
|
|
2959
|
-
/**
|
|
2960
|
-
* Sets the value, updating the sheet and engine.
|
|
2961
|
-
*/
|
|
2962
|
-
setValue(cell, value) {
|
|
2963
|
-
if (this._options.readonly) {
|
|
2964
|
-
throw new ReadonlyException();
|
|
2965
|
-
}
|
|
2966
|
-
let refresh = false;
|
|
2967
|
-
if (cell.row >= this._sheet.rows.length) {
|
|
2968
|
-
this._insertIndices(this._sheet.rows, cell.row, 1, DEFAULT_ROWS);
|
|
2969
|
-
refresh = true;
|
|
2970
|
-
}
|
|
2971
|
-
if (cell.column >= this._sheet.columns.length) {
|
|
2972
|
-
this._insertIndices(this._sheet.columns, cell.column, 1, DEFAULT_COLUMNS);
|
|
2973
|
-
refresh = true;
|
|
2974
|
-
}
|
|
2975
|
-
if (refresh) {
|
|
2976
|
-
this.reset();
|
|
2977
|
-
}
|
|
2978
|
-
this._graph.hf.setCellContents({
|
|
2979
|
-
sheet: this._sheetId,
|
|
2980
|
-
row: cell.row,
|
|
2981
|
-
col: cell.column
|
|
2982
|
-
}, [
|
|
2983
|
-
[
|
|
2984
|
-
typeof value === "string" && value.charAt(0) === "=" ? this.mapFormulaBindingToFormula(value) : value
|
|
2866
|
+
A: [
|
|
2867
|
+
"sheetId !== undefined",
|
|
2868
|
+
""
|
|
2985
2869
|
]
|
|
2986
|
-
]);
|
|
2987
|
-
const idx = this.addressToIndex(cell);
|
|
2988
|
-
if (value === void 0 || value === null) {
|
|
2989
|
-
delete this._sheet.cells[idx];
|
|
2990
|
-
} else {
|
|
2991
|
-
if (typeof value === "string" && value.charAt(0) === "=") {
|
|
2992
|
-
value = this.mapFormulaBindingToId(this.mapFormulaRefsToIndices(value));
|
|
2993
|
-
}
|
|
2994
|
-
this._sheet.cells[idx] = {
|
|
2995
|
-
value
|
|
2996
|
-
};
|
|
2997
|
-
}
|
|
2998
|
-
}
|
|
2999
|
-
/**
|
|
3000
|
-
* Sets values from a simple map.
|
|
3001
|
-
*/
|
|
3002
|
-
setValues(values) {
|
|
3003
|
-
Object.entries(values).forEach(([key, { value }]) => {
|
|
3004
|
-
this.setValue(addressFromA1Notation(key), value);
|
|
3005
2870
|
});
|
|
2871
|
+
const node = new ComputeNode(this, sheetId);
|
|
2872
|
+
await node.open();
|
|
2873
|
+
this._nodes.set(sheetId, node);
|
|
2874
|
+
return node;
|
|
3006
2875
|
}
|
|
3007
2876
|
/**
|
|
3008
|
-
*
|
|
2877
|
+
* Map bound value to custom function invocation.
|
|
2878
|
+
* E.g., "HELLO(...args)" => "EDGE("HELLO", ...args)".
|
|
3009
2879
|
*/
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
for (let row = rowRange[0]; row <= rowRange[1]; row++) {
|
|
3022
|
-
const rowCells = [];
|
|
3023
|
-
for (let column = columnRange[0]; column <= columnRange[1]; column++) {
|
|
3024
|
-
const value = cb({
|
|
3025
|
-
row,
|
|
3026
|
-
column
|
|
3027
|
-
});
|
|
3028
|
-
if (value !== void 0) {
|
|
3029
|
-
rowCells.push(value);
|
|
2880
|
+
mapFormulaToNative(formula) {
|
|
2881
|
+
return formula.replace(/['"]?([ \w]+)['"]?!/, (_match, name) => {
|
|
2882
|
+
if (name) {
|
|
2883
|
+
const objects = this._hf.getSheetNames().map((name2) => {
|
|
2884
|
+
const id = getSheetId(name2);
|
|
2885
|
+
return id ? this._space?.db.getObjectById(id) : void 0;
|
|
2886
|
+
}).filter(import_util.nonNullable);
|
|
2887
|
+
for (const obj of objects) {
|
|
2888
|
+
if (obj.name === name || obj.title === name) {
|
|
2889
|
+
return `${createSheetName(obj.id)}!`;
|
|
2890
|
+
}
|
|
3030
2891
|
}
|
|
3031
2892
|
}
|
|
3032
|
-
|
|
3033
|
-
}
|
|
3034
|
-
return rows;
|
|
3035
|
-
}
|
|
3036
|
-
/**
|
|
3037
|
-
*
|
|
3038
|
-
*/
|
|
3039
|
-
// TODO(burdon): Insert indices into sheet.
|
|
3040
|
-
_insertIndices(indices, i, n, max) {
|
|
3041
|
-
if (i + n > max) {
|
|
3042
|
-
throw new RangeException(i + n);
|
|
3043
|
-
}
|
|
3044
|
-
const idx = createIndices(n);
|
|
3045
|
-
indices.splice(i, 0, ...idx);
|
|
3046
|
-
}
|
|
3047
|
-
// TODO(burdon): Delete index.
|
|
3048
|
-
_deleteIndices(indices, i, n) {
|
|
3049
|
-
throw new Error("Not implemented");
|
|
3050
|
-
}
|
|
3051
|
-
// TODO(burdon): Move. Cannot use fractional without changing. Switch back to using unique IDs?
|
|
3052
|
-
_moveIndices(indices, i, j, n) {
|
|
3053
|
-
throw new Error("Not implemented");
|
|
3054
|
-
}
|
|
3055
|
-
//
|
|
3056
|
-
// Indices.
|
|
3057
|
-
//
|
|
3058
|
-
/**
|
|
3059
|
-
* E.g., "A1" => "x1@y1".
|
|
3060
|
-
*/
|
|
3061
|
-
addressToIndex(cell) {
|
|
3062
|
-
return `${this._sheet.columns[cell.column]}@${this._sheet.rows[cell.row]}`;
|
|
3063
|
-
}
|
|
3064
|
-
/**
|
|
3065
|
-
* E.g., "x1@y1" => "A1".
|
|
3066
|
-
*/
|
|
3067
|
-
addressFromIndex(idx) {
|
|
3068
|
-
const [column, row] = idx.split("@");
|
|
3069
|
-
return {
|
|
3070
|
-
column: this._sheet.columns.indexOf(column),
|
|
3071
|
-
row: this._sheet.rows.indexOf(row)
|
|
3072
|
-
};
|
|
3073
|
-
}
|
|
3074
|
-
/**
|
|
3075
|
-
* E.g., "A1:B2" => "x1@y1:x2@y2".
|
|
3076
|
-
*/
|
|
3077
|
-
rangeToIndex(range) {
|
|
3078
|
-
return [
|
|
3079
|
-
range.from,
|
|
3080
|
-
range.to ?? range.from
|
|
3081
|
-
].map((cell) => this.addressToIndex(cell)).join(":");
|
|
3082
|
-
}
|
|
3083
|
-
/**
|
|
3084
|
-
* E.g., "x1@y1:x2@y2" => "A1:B2".
|
|
3085
|
-
*/
|
|
3086
|
-
rangeFromIndex(idx) {
|
|
3087
|
-
const [from, to] = idx.split(":").map((idx2) => this.addressFromIndex(idx2));
|
|
3088
|
-
return {
|
|
3089
|
-
from,
|
|
3090
|
-
to
|
|
3091
|
-
};
|
|
3092
|
-
}
|
|
3093
|
-
/**
|
|
3094
|
-
* E.g., "HELLO()" => "EDGE("HELLO")".
|
|
3095
|
-
*/
|
|
3096
|
-
mapFormulaBindingToFormula(formula) {
|
|
3097
|
-
return formula.replace(/([a-zA-Z0-9]+)\((.*)\)/g, (match, binding, args) => {
|
|
2893
|
+
return `${name}!`;
|
|
2894
|
+
}).replace(/(\w+)\((.*)\)/g, (match, binding, args) => {
|
|
3098
2895
|
const fn = this._functions.find((fn2) => fn2.binding === binding);
|
|
3099
2896
|
if (!fn) {
|
|
3100
2897
|
return match;
|
|
3101
2898
|
}
|
|
3102
2899
|
if (args.trim() === "") {
|
|
3103
|
-
return
|
|
2900
|
+
return `${CUSTOM_FUNCTION}("${binding}")`;
|
|
2901
|
+
} else {
|
|
2902
|
+
return `${CUSTOM_FUNCTION}("${binding}", ${args})`;
|
|
3104
2903
|
}
|
|
3105
|
-
return `EDGE("${binding}", ${args})`;
|
|
3106
2904
|
});
|
|
3107
2905
|
}
|
|
3108
2906
|
/**
|
|
3109
|
-
*
|
|
2907
|
+
* Map from binding to fully qualified ECHO ID (to store).
|
|
2908
|
+
* E.g., HELLO() => spaceId:objectId()
|
|
3110
2909
|
*/
|
|
3111
|
-
|
|
3112
|
-
return formula.replace(/
|
|
3113
|
-
if (
|
|
3114
|
-
return
|
|
2910
|
+
mapFunctionBindingToId(formula) {
|
|
2911
|
+
return formula.replace(/(\w+)\((.*)\)/g, (match, binding, args) => {
|
|
2912
|
+
if (binding === CUSTOM_FUNCTION || defaultFunctions.find((fn2) => fn2.name === binding)) {
|
|
2913
|
+
return match;
|
|
2914
|
+
}
|
|
2915
|
+
const fn = this._functions.find((fn2) => fn2.binding === binding);
|
|
2916
|
+
if (fn) {
|
|
2917
|
+
const id = (0, import_echo.fullyQualifiedId)(fn);
|
|
2918
|
+
return `${id}(${args})`;
|
|
2919
|
+
} else {
|
|
2920
|
+
return match;
|
|
3115
2921
|
}
|
|
3116
|
-
return `${binding}(${args.slice(2)})`;
|
|
3117
|
-
});
|
|
3118
|
-
}
|
|
3119
|
-
/**
|
|
3120
|
-
* Map from binding to fully qualified ECHO ID.
|
|
3121
|
-
*/
|
|
3122
|
-
mapFormulaBindingToId(formula) {
|
|
3123
|
-
return this._options.mapFormulaBindingToId(this._functions)(formula);
|
|
3124
|
-
}
|
|
3125
|
-
/**
|
|
3126
|
-
* Map from fully qualified ECHO ID to binding.
|
|
3127
|
-
*/
|
|
3128
|
-
mapFormulaBindingFromId(formula) {
|
|
3129
|
-
return this._options.mapFormulaBindingFromId(this._functions)(formula);
|
|
3130
|
-
}
|
|
3131
|
-
/**
|
|
3132
|
-
* Map from A1 notation to indices.
|
|
3133
|
-
*/
|
|
3134
|
-
mapFormulaRefsToIndices(formula) {
|
|
3135
|
-
(0, import_invariant.invariant)(formula.charAt(0) === "=", void 0, {
|
|
3136
|
-
F: __dxlog_file4,
|
|
3137
|
-
L: 509,
|
|
3138
|
-
S: this,
|
|
3139
|
-
A: [
|
|
3140
|
-
"formula.charAt(0) === '='",
|
|
3141
|
-
""
|
|
3142
|
-
]
|
|
3143
|
-
});
|
|
3144
|
-
return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {
|
|
3145
|
-
return this.addressToIndex(addressFromA1Notation(match));
|
|
3146
|
-
});
|
|
3147
|
-
}
|
|
3148
|
-
/**
|
|
3149
|
-
* Map from indices to A1 notation.
|
|
3150
|
-
*/
|
|
3151
|
-
mapFormulaIndicesToRefs(formula) {
|
|
3152
|
-
(0, import_invariant.invariant)(formula.charAt(0) === "=", void 0, {
|
|
3153
|
-
F: __dxlog_file4,
|
|
3154
|
-
L: 519,
|
|
3155
|
-
S: this,
|
|
3156
|
-
A: [
|
|
3157
|
-
"formula.charAt(0) === '='",
|
|
3158
|
-
""
|
|
3159
|
-
]
|
|
3160
|
-
});
|
|
3161
|
-
return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {
|
|
3162
|
-
return addressToA1Notation(this.addressFromIndex(idx));
|
|
3163
2922
|
});
|
|
3164
2923
|
}
|
|
3165
|
-
//
|
|
3166
|
-
// Values
|
|
3167
|
-
//
|
|
3168
2924
|
/**
|
|
3169
|
-
*
|
|
3170
|
-
*
|
|
3171
|
-
* NOTE: TODAY() is number of FULL days since nullDate. It will typically be -1 days from NOW().
|
|
2925
|
+
* Map from fully qualified ECHO ID to binding (from store).
|
|
2926
|
+
* E.g., spaceId:objectId() => HELLO()
|
|
3172
2927
|
*/
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
return this._graph.hf.numberToTime(num);
|
|
3185
|
-
}
|
|
3186
|
-
};
|
|
3187
|
-
var parseNumberString = (str) => {
|
|
3188
|
-
return parseFloat(str.replace(/[^\d.]/g, ""));
|
|
3189
|
-
};
|
|
3190
|
-
var CustomPlugin = class extends FunctionPluginAsync {
|
|
3191
|
-
test(ast, state) {
|
|
3192
|
-
const handler = async () => {
|
|
3193
|
-
return Math.random();
|
|
3194
|
-
};
|
|
3195
|
-
return this.runAsyncFunction(ast, state, handler);
|
|
3196
|
-
}
|
|
3197
|
-
crypto(ast, state) {
|
|
3198
|
-
const handler = async (_currency) => {
|
|
3199
|
-
const currency = (_currency || "USD").toUpperCase();
|
|
3200
|
-
const result = await fetch(`https://api.coindesk.com/v1/bpi/currentprice/${currency}.json`);
|
|
3201
|
-
const data = await result.json();
|
|
3202
|
-
const rate = (0, import_util.getDeep)(data, [
|
|
3203
|
-
"bpi",
|
|
3204
|
-
currency,
|
|
3205
|
-
"rate"
|
|
3206
|
-
]);
|
|
3207
|
-
if (!rate) {
|
|
3208
|
-
return NaN;
|
|
2928
|
+
mapFunctionBindingFromId(formula) {
|
|
2929
|
+
return formula.replace(/(\w+):([a-zA-Z0-9]+)\((.*)\)/g, (match, spaceId, objectId, args) => {
|
|
2930
|
+
const id = `${spaceId}:${objectId}`;
|
|
2931
|
+
if (id.length !== OBJECT_ID_LENGTH) {
|
|
2932
|
+
return match;
|
|
2933
|
+
}
|
|
2934
|
+
const fn = this._functions.find((fn2) => (0, import_echo.fullyQualifiedId)(fn2) === id);
|
|
2935
|
+
if (fn?.binding) {
|
|
2936
|
+
return `${fn.binding}(${args})`;
|
|
2937
|
+
} else {
|
|
2938
|
+
return match;
|
|
3209
2939
|
}
|
|
3210
|
-
return parseNumberString(rate);
|
|
3211
|
-
};
|
|
3212
|
-
return this.runAsyncFunction(ast, state, handler, {
|
|
3213
|
-
ttl: 1e4
|
|
3214
2940
|
});
|
|
3215
2941
|
}
|
|
3216
|
-
|
|
3217
|
-
|
|
3218
|
-
|
|
3219
|
-
|
|
3220
|
-
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
-
argumentType: import_hyperformula4.FunctionArgumentType.STRING,
|
|
3228
|
-
optionalArg: true
|
|
3229
|
-
}
|
|
3230
|
-
],
|
|
3231
|
-
isVolatile: true
|
|
2942
|
+
async _open() {
|
|
2943
|
+
if (this._space) {
|
|
2944
|
+
const query = this._space.db.query(import_echo.Filter.schema(import_types.FunctionType));
|
|
2945
|
+
const unsubscribe = query.subscribe(({ objects }) => {
|
|
2946
|
+
this._functions = objects.filter(({ binding }) => binding);
|
|
2947
|
+
this.update.emit({
|
|
2948
|
+
type: "functionsUpdated"
|
|
2949
|
+
});
|
|
2950
|
+
});
|
|
2951
|
+
this._ctx.onDispose(unsubscribe);
|
|
2952
|
+
}
|
|
3232
2953
|
}
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
CRYPTO: "CRYPTO"
|
|
3238
|
-
},
|
|
3239
|
-
enUS: {
|
|
3240
|
-
TEST: "TEST",
|
|
3241
|
-
CRYPTO: "CRYPTO"
|
|
2954
|
+
async _close() {
|
|
2955
|
+
for (const node of this._nodes.values()) {
|
|
2956
|
+
await node.close();
|
|
2957
|
+
}
|
|
3242
2958
|
}
|
|
3243
2959
|
};
|
|
3244
2960
|
// Annotate the CommonJS export names for ESM import in node:
|
|
3245
2961
|
0 && (module.exports = {
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
|
|
3250
|
-
addressFromA1Notation,
|
|
3251
|
-
addressToA1Notation,
|
|
3252
|
-
columnLetter,
|
|
3253
|
-
createComputeGraph,
|
|
2962
|
+
ComputeGraph,
|
|
2963
|
+
ComputeGraphRegistry,
|
|
2964
|
+
ComputeNode,
|
|
2965
|
+
createSheetName,
|
|
3254
2966
|
defaultFunctions,
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
2967
|
+
defaultOptions,
|
|
2968
|
+
defaultPlugins,
|
|
2969
|
+
getSheetId
|
|
3258
2970
|
});
|
|
3259
|
-
//# sourceMappingURL=chunk-
|
|
2971
|
+
//# sourceMappingURL=chunk-P5QYYEHQ.cjs.map
|