@bilig/headless 0.8.0 → 0.8.2
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/README.md +15 -0
- package/dist/persistence.d.ts +1 -1
- package/dist/persistence.js +13 -11
- package/dist/persistence.js.map +1 -1
- package/dist/tracked-cell-index-changes.d.ts +1 -7
- package/dist/tracked-cell-index-changes.js +20 -434
- package/dist/tracked-cell-index-changes.js.map +1 -1
- package/dist/tracked-cell-lazy-physical-changes.d.ts +21 -0
- package/dist/tracked-cell-lazy-physical-changes.js +333 -0
- package/dist/tracked-cell-lazy-physical-changes.js.map +1 -0
- package/dist/tracked-cell-value-read.d.ts +18 -0
- package/dist/tracked-cell-value-read.js +46 -0
- package/dist/tracked-cell-value-read.js.map +1 -0
- package/dist/tracked-engine-event-refs.d.ts +1 -1
- package/dist/tracked-engine-event-refs.js +14 -4
- package/dist/tracked-engine-event-refs.js.map +1 -1
- package/dist/tracked-index-source-order.d.ts +5 -0
- package/dist/tracked-index-source-order.js +15 -0
- package/dist/tracked-index-source-order.js.map +1 -0
- package/dist/work-paper-address-format.d.ts +33 -0
- package/dist/work-paper-address-format.js +116 -0
- package/dist/work-paper-address-format.js.map +1 -0
- package/dist/work-paper-axis-helpers.d.ts +26 -0
- package/dist/work-paper-axis-helpers.js +104 -0
- package/dist/work-paper-axis-helpers.js.map +1 -0
- package/dist/work-paper-capability-checks.d.ts +17 -0
- package/dist/work-paper-capability-checks.js +101 -0
- package/dist/work-paper-capability-checks.js.map +1 -0
- package/dist/work-paper-capability-operations.d.ts +34 -0
- package/dist/work-paper-capability-operations.js +70 -0
- package/dist/work-paper-capability-operations.js.map +1 -0
- package/dist/work-paper-capability-surface.d.ts +97 -0
- package/dist/work-paper-capability-surface.js +236 -0
- package/dist/work-paper-capability-surface.js.map +1 -0
- package/dist/work-paper-cell-content-setter.d.ts +37 -0
- package/dist/work-paper-cell-content-setter.js +87 -0
- package/dist/work-paper-cell-content-setter.js.map +1 -0
- package/dist/work-paper-cell-mutation-refs.d.ts +23 -0
- package/dist/work-paper-cell-mutation-refs.js +50 -0
- package/dist/work-paper-cell-mutation-refs.js.map +1 -0
- package/dist/work-paper-cell-read.d.ts +41 -0
- package/dist/work-paper-cell-read.js +54 -0
- package/dist/work-paper-cell-read.js.map +1 -0
- package/dist/work-paper-clipboard-operations.d.ts +24 -0
- package/dist/work-paper-clipboard-operations.js +56 -0
- package/dist/work-paper-clipboard-operations.js.map +1 -0
- package/dist/work-paper-clipboard.d.ts +13 -0
- package/dist/work-paper-clipboard.js +19 -0
- package/dist/work-paper-clipboard.js.map +1 -0
- package/dist/work-paper-config.d.ts +11 -0
- package/dist/work-paper-config.js +247 -0
- package/dist/work-paper-config.js.map +1 -0
- package/dist/work-paper-date-time.d.ts +4 -0
- package/dist/work-paper-date-time.js +38 -0
- package/dist/work-paper-date-time.js.map +1 -0
- package/dist/work-paper-dependency-refs.d.ts +11 -0
- package/dist/work-paper-dependency-refs.js +74 -0
- package/dist/work-paper-dependency-refs.js.map +1 -0
- package/dist/work-paper-emitter.d.ts +22 -0
- package/dist/work-paper-emitter.js +130 -0
- package/dist/work-paper-emitter.js.map +1 -0
- package/dist/work-paper-engine-event-tracker.d.ts +24 -0
- package/dist/work-paper-engine-event-tracker.js +92 -0
- package/dist/work-paper-engine-event-tracker.js.map +1 -0
- package/dist/work-paper-errors.d.ts +4 -0
- package/dist/work-paper-errors.js +7 -0
- package/dist/work-paper-errors.js.map +1 -1
- package/dist/work-paper-existing-numeric-fast-path.d.ts +31 -0
- package/dist/work-paper-existing-numeric-fast-path.js +120 -0
- package/dist/work-paper-existing-numeric-fast-path.js.map +1 -0
- package/dist/work-paper-fill-helpers.d.ts +8 -0
- package/dist/work-paper-fill-helpers.js +34 -0
- package/dist/work-paper-fill-helpers.js.map +1 -0
- package/dist/work-paper-formula-analysis.d.ts +18 -0
- package/dist/work-paper-formula-analysis.js +54 -0
- package/dist/work-paper-formula-analysis.js.map +1 -0
- package/dist/work-paper-formula-rewrite.d.ts +22 -0
- package/dist/work-paper-formula-rewrite.js +71 -0
- package/dist/work-paper-formula-rewrite.js.map +1 -0
- package/dist/work-paper-function-registry.d.ts +39 -0
- package/dist/work-paper-function-registry.js +66 -0
- package/dist/work-paper-function-registry.js.map +1 -0
- package/dist/work-paper-history-operations.d.ts +15 -0
- package/dist/work-paper-history-operations.js +14 -0
- package/dist/work-paper-history-operations.js.map +1 -0
- package/dist/work-paper-history.d.ts +50 -0
- package/dist/work-paper-history.js +136 -0
- package/dist/work-paper-history.js.map +1 -0
- package/dist/work-paper-internals.d.ts +24 -0
- package/dist/work-paper-internals.js +59 -0
- package/dist/work-paper-internals.js.map +1 -0
- package/dist/work-paper-literal-mutation-queue.d.ts +18 -0
- package/dist/work-paper-literal-mutation-queue.js +40 -0
- package/dist/work-paper-literal-mutation-queue.js.map +1 -0
- package/dist/work-paper-matrix-application.d.ts +31 -0
- package/dist/work-paper-matrix-application.js +85 -0
- package/dist/work-paper-matrix-application.js.map +1 -0
- package/dist/work-paper-mutation-queues.d.ts +29 -0
- package/dist/work-paper-mutation-queues.js +72 -0
- package/dist/work-paper-mutation-queues.js.map +1 -0
- package/dist/work-paper-named-expression-fast-path.d.ts +37 -0
- package/dist/work-paper-named-expression-fast-path.js +100 -0
- package/dist/work-paper-named-expression-fast-path.js.map +1 -0
- package/dist/work-paper-named-expression-helpers.d.ts +54 -0
- package/dist/work-paper-named-expression-helpers.js +179 -0
- package/dist/work-paper-named-expression-helpers.js.map +1 -0
- package/dist/work-paper-named-expression-operations.d.ts +39 -0
- package/dist/work-paper-named-expression-operations.js +82 -0
- package/dist/work-paper-named-expression-operations.js.map +1 -0
- package/dist/work-paper-public-surface.d.ts +73 -0
- package/dist/work-paper-public-surface.js +165 -0
- package/dist/work-paper-public-surface.js.map +1 -0
- package/dist/work-paper-read-operations.d.ts +52 -0
- package/dist/work-paper-read-operations.js +185 -0
- package/dist/work-paper-read-operations.js.map +1 -0
- package/dist/work-paper-runtime-adapters.d.ts +144 -0
- package/dist/work-paper-runtime-adapters.js +256 -0
- package/dist/work-paper-runtime-adapters.js.map +1 -0
- package/dist/work-paper-runtime-helpers.d.ts +27 -0
- package/dist/work-paper-runtime-helpers.js +305 -0
- package/dist/work-paper-runtime-helpers.js.map +1 -0
- package/dist/work-paper-runtime-surface.d.ts +137 -0
- package/dist/work-paper-runtime-surface.js +702 -0
- package/dist/work-paper-runtime-surface.js.map +1 -0
- package/dist/work-paper-runtime.d.ts +56 -285
- package/dist/work-paper-runtime.js +403 -4809
- package/dist/work-paper-runtime.js.map +1 -1
- package/dist/work-paper-scratch-evaluator.js +29 -26
- package/dist/work-paper-scratch-evaluator.js.map +1 -1
- package/dist/work-paper-sheet-dimension-cache.d.ts +36 -0
- package/dist/work-paper-sheet-dimension-cache.js +158 -0
- package/dist/work-paper-sheet-dimension-cache.js.map +1 -0
- package/dist/work-paper-sheet-initialization.d.ts +19 -0
- package/dist/work-paper-sheet-initialization.js +93 -0
- package/dist/work-paper-sheet-initialization.js.map +1 -0
- package/dist/work-paper-sheet-inspection.d.ts +66 -0
- package/dist/work-paper-sheet-inspection.js +204 -0
- package/dist/work-paper-sheet-inspection.js.map +1 -0
- package/dist/work-paper-sheet-operations.d.ts +59 -0
- package/dist/work-paper-sheet-operations.js +104 -0
- package/dist/work-paper-sheet-operations.js.map +1 -0
- package/dist/work-paper-sheet-read.d.ts +21 -0
- package/dist/work-paper-sheet-read.js +32 -0
- package/dist/work-paper-sheet-read.js.map +1 -0
- package/dist/work-paper-sheet-rename-fast-path.d.ts +18 -0
- package/dist/work-paper-sheet-rename-fast-path.js +43 -0
- package/dist/work-paper-sheet-rename-fast-path.js.map +1 -0
- package/dist/work-paper-static-api.d.ts +18 -0
- package/dist/work-paper-static-api.js +44 -0
- package/dist/work-paper-static-api.js.map +1 -0
- package/dist/work-paper-static-registry.d.ts +21 -0
- package/dist/work-paper-static-registry.js +150 -0
- package/dist/work-paper-static-registry.js.map +1 -0
- package/dist/work-paper-tracked-change-reducer.d.ts +41 -0
- package/dist/work-paper-tracked-change-reducer.js +281 -0
- package/dist/work-paper-tracked-change-reducer.js.map +1 -0
- package/dist/work-paper-tracked-event-helpers.d.ts +89 -0
- package/dist/work-paper-tracked-event-helpers.js +366 -0
- package/dist/work-paper-tracked-event-helpers.js.map +1 -0
- package/dist/work-paper-types.d.ts +6 -5
- package/dist/work-paper-visibility-snapshot.d.ts +36 -0
- package/dist/work-paper-visibility-snapshot.js +62 -0
- package/dist/work-paper-visibility-snapshot.js.map +1 -0
- package/package.json +13 -5
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { parseFormula, serializeFormula } from '@bilig/formula';
|
|
2
|
+
import { WorkPaperParseError } from './work-paper-errors.js';
|
|
3
|
+
import { makeNamedExpressionKey, stripLeadingEquals, transformFormulaNode } from './work-paper-runtime-helpers.js';
|
|
4
|
+
export function rewriteWorkPaperFormulaForStorage(input) {
|
|
5
|
+
if (input.namedExpressions.size === 0 && input.functionAliasLookup.size === 0) {
|
|
6
|
+
return input.formula;
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const transformed = transformFormulaNode(parseFormula(stripLeadingEquals(input.formula)), (node) => {
|
|
10
|
+
if (node.kind === 'NameRef') {
|
|
11
|
+
return rewriteNameRefForStorage(node, input.ownerSheetId, input.namedExpressions);
|
|
12
|
+
}
|
|
13
|
+
if (node.kind === 'CallExpr') {
|
|
14
|
+
return rewriteCallForStorage(node, input.functionAliasLookup);
|
|
15
|
+
}
|
|
16
|
+
return node;
|
|
17
|
+
});
|
|
18
|
+
return serializeFormula(transformed);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw new WorkPaperParseError(input.messageOf(error, 'Unable to store formula'));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function restorePublicWorkPaperFormula(input) {
|
|
25
|
+
if (input.namedExpressions.size === 0 && input.internalFunctionLookup.size === 0) {
|
|
26
|
+
return input.formula;
|
|
27
|
+
}
|
|
28
|
+
const transformed = transformFormulaNode(parseFormula(input.formula), (node) => {
|
|
29
|
+
if (node.kind === 'NameRef') {
|
|
30
|
+
return rewriteNameRefForPublic(node, input.ownerSheetId, input.namedExpressions);
|
|
31
|
+
}
|
|
32
|
+
if (node.kind === 'CallExpr') {
|
|
33
|
+
return rewriteCallForPublic(node, input.internalFunctionLookup);
|
|
34
|
+
}
|
|
35
|
+
return node;
|
|
36
|
+
});
|
|
37
|
+
return serializeFormula(transformed);
|
|
38
|
+
}
|
|
39
|
+
function rewriteNameRefForStorage(node, ownerSheetId, namedExpressions) {
|
|
40
|
+
const scoped = namedExpressions.get(makeNamedExpressionKey(node.name, ownerSheetId));
|
|
41
|
+
if (scoped) {
|
|
42
|
+
return { ...node, name: scoped.internalName };
|
|
43
|
+
}
|
|
44
|
+
const workbookScoped = namedExpressions.get(makeNamedExpressionKey(node.name));
|
|
45
|
+
if (workbookScoped) {
|
|
46
|
+
return { ...node, name: workbookScoped.internalName };
|
|
47
|
+
}
|
|
48
|
+
return node;
|
|
49
|
+
}
|
|
50
|
+
function rewriteNameRefForPublic(node, ownerSheetId, namedExpressions) {
|
|
51
|
+
const exact = [...namedExpressions.values()].find((expression) => expression.internalName === node.name && expression.scope === ownerSheetId);
|
|
52
|
+
if (exact) {
|
|
53
|
+
return { ...node, name: exact.publicName };
|
|
54
|
+
}
|
|
55
|
+
return node;
|
|
56
|
+
}
|
|
57
|
+
function rewriteCallForStorage(node, functionAliasLookup) {
|
|
58
|
+
const binding = functionAliasLookup.get(node.callee.trim().toUpperCase());
|
|
59
|
+
if (!binding) {
|
|
60
|
+
return node;
|
|
61
|
+
}
|
|
62
|
+
return { ...node, callee: binding.internalName };
|
|
63
|
+
}
|
|
64
|
+
function rewriteCallForPublic(node, internalFunctionLookup) {
|
|
65
|
+
const binding = internalFunctionLookup.get(node.callee.trim().toUpperCase());
|
|
66
|
+
if (!binding) {
|
|
67
|
+
return node;
|
|
68
|
+
}
|
|
69
|
+
return { ...node, callee: binding.publicName };
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=work-paper-formula-rewrite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-formula-rewrite.js","sourceRoot":"","sources":["../src/work-paper-formula-rewrite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CellValue } from '@bilig/protocol';
|
|
2
|
+
import type { EvaluationResult } from '@bilig/formula';
|
|
3
|
+
import type { WorkPaperFunctionPluginDefinition, WorkPaperLanguagePackage } from './work-paper-types.js';
|
|
4
|
+
export type WorkPaperFunctionImplementation = (...args: CellValue[]) => EvaluationResult | CellValue | undefined;
|
|
5
|
+
export interface InternalFunctionBinding {
|
|
6
|
+
pluginId: string;
|
|
7
|
+
publicName: string;
|
|
8
|
+
internalName: string;
|
|
9
|
+
implementation?: WorkPaperFunctionImplementation;
|
|
10
|
+
}
|
|
11
|
+
export declare function listCapturedWorkPaperFunctionNames(args: {
|
|
12
|
+
readonly functionSnapshot: Iterable<InternalFunctionBinding>;
|
|
13
|
+
readonly language: WorkPaperLanguagePackage | undefined;
|
|
14
|
+
}): string[];
|
|
15
|
+
export declare function getCapturedWorkPaperFunctionPlugin(args: {
|
|
16
|
+
readonly functionId: string;
|
|
17
|
+
readonly functionAliasLookup: ReadonlyMap<string, InternalFunctionBinding>;
|
|
18
|
+
readonly getPluginById: (pluginId: string) => WorkPaperFunctionPluginDefinition | undefined;
|
|
19
|
+
}): WorkPaperFunctionPluginDefinition | undefined;
|
|
20
|
+
export declare function getCapturedWorkPaperFunctionPlugins(args: {
|
|
21
|
+
readonly functionSnapshot: Iterable<InternalFunctionBinding>;
|
|
22
|
+
readonly getPluginsById: (pluginIds: Iterable<string>) => WorkPaperFunctionPluginDefinition[];
|
|
23
|
+
}): WorkPaperFunctionPluginDefinition[];
|
|
24
|
+
export declare function captureWorkPaperFunctionRegistry(args: {
|
|
25
|
+
readonly workbookId: number;
|
|
26
|
+
readonly configFunctionPlugins: readonly WorkPaperFunctionPluginDefinition[] | undefined;
|
|
27
|
+
readonly plugins: Iterable<WorkPaperFunctionPluginDefinition>;
|
|
28
|
+
readonly functionSnapshot: Map<string, InternalFunctionBinding>;
|
|
29
|
+
readonly functionAliasLookup: Map<string, InternalFunctionBinding>;
|
|
30
|
+
readonly internalFunctionLookup: Map<string, InternalFunctionBinding>;
|
|
31
|
+
readonly globalCustomFunctions: Map<string, WorkPaperFunctionImplementation>;
|
|
32
|
+
}): void;
|
|
33
|
+
export declare function clearWorkPaperFunctionBindings(args: {
|
|
34
|
+
readonly functionSnapshot: Map<string, InternalFunctionBinding>;
|
|
35
|
+
readonly functionAliasLookup: Map<string, InternalFunctionBinding>;
|
|
36
|
+
readonly internalFunctionLookup: Map<string, InternalFunctionBinding>;
|
|
37
|
+
readonly globalCustomFunctions: Map<string, WorkPaperFunctionImplementation>;
|
|
38
|
+
readonly preserveInternalFunctionLookup?: boolean;
|
|
39
|
+
}): void;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { compareSheetNames } from './work-paper-sheet-inspection.js';
|
|
2
|
+
export function listCapturedWorkPaperFunctionNames(args) {
|
|
3
|
+
const functions = [...args.functionSnapshot]
|
|
4
|
+
.filter((binding) => binding.publicName === binding.publicName.toUpperCase())
|
|
5
|
+
.map((binding) => binding.publicName)
|
|
6
|
+
.toSorted(compareSheetNames);
|
|
7
|
+
if (!args.language?.functions) {
|
|
8
|
+
return functions;
|
|
9
|
+
}
|
|
10
|
+
return functions.map((name) => args.language?.functions?.[name] ?? name);
|
|
11
|
+
}
|
|
12
|
+
export function getCapturedWorkPaperFunctionPlugin(args) {
|
|
13
|
+
const binding = args.functionAliasLookup.get(args.functionId.trim().toUpperCase());
|
|
14
|
+
return binding ? args.getPluginById(binding.pluginId) : undefined;
|
|
15
|
+
}
|
|
16
|
+
export function getCapturedWorkPaperFunctionPlugins(args) {
|
|
17
|
+
const pluginIds = new Set([...args.functionSnapshot].map((binding) => binding.pluginId));
|
|
18
|
+
return args.getPluginsById(pluginIds);
|
|
19
|
+
}
|
|
20
|
+
export function captureWorkPaperFunctionRegistry(args) {
|
|
21
|
+
const allowedPluginIds = args.configFunctionPlugins && args.configFunctionPlugins.length > 0
|
|
22
|
+
? new Set(args.configFunctionPlugins.map((plugin) => plugin.id))
|
|
23
|
+
: undefined;
|
|
24
|
+
for (const plugin of args.plugins) {
|
|
25
|
+
if (allowedPluginIds && !allowedPluginIds.has(plugin.id)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
Object.keys(plugin.implementedFunctions).forEach((functionId) => {
|
|
29
|
+
const normalized = functionId.trim().toUpperCase();
|
|
30
|
+
const internalName = `__BILIG_WORKPAPER_FN_${args.workbookId}_${normalized}`;
|
|
31
|
+
const implementation = plugin.functions?.[normalized];
|
|
32
|
+
const binding = {
|
|
33
|
+
pluginId: plugin.id,
|
|
34
|
+
publicName: normalized,
|
|
35
|
+
internalName,
|
|
36
|
+
};
|
|
37
|
+
if (implementation !== undefined) {
|
|
38
|
+
binding.implementation = implementation;
|
|
39
|
+
}
|
|
40
|
+
args.functionSnapshot.set(normalized, binding);
|
|
41
|
+
args.functionAliasLookup.set(normalized, binding);
|
|
42
|
+
args.internalFunctionLookup.set(internalName, binding);
|
|
43
|
+
if (implementation) {
|
|
44
|
+
args.globalCustomFunctions.set(internalName, implementation);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
Object.entries(plugin.aliases ?? {}).forEach(([alias, target]) => {
|
|
48
|
+
const binding = args.functionSnapshot.get(target.trim().toUpperCase());
|
|
49
|
+
if (!binding) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
args.functionAliasLookup.set(alias.trim().toUpperCase(), binding);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function clearWorkPaperFunctionBindings(args) {
|
|
57
|
+
args.internalFunctionLookup.forEach((_binding, internalName) => {
|
|
58
|
+
args.globalCustomFunctions.delete(internalName);
|
|
59
|
+
});
|
|
60
|
+
args.functionSnapshot.clear();
|
|
61
|
+
args.functionAliasLookup.clear();
|
|
62
|
+
if (args.preserveInternalFunctionLookup !== true) {
|
|
63
|
+
args.internalFunctionLookup.clear();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=work-paper-function-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-function-registry.js","sourceRoot":"","sources":["../src/work-paper-function-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type WorkPaperHistoryRecord } from './work-paper-history.js';
|
|
2
|
+
import type { WorkPaperChange } from './work-paper-types.js';
|
|
3
|
+
export declare function applyWorkPaperHistoryOperation(args: {
|
|
4
|
+
readonly getStack: () => readonly WorkPaperHistoryRecord[];
|
|
5
|
+
readonly canUseTrackedMutationFastPath: () => boolean;
|
|
6
|
+
readonly captureTrackedChangesWithoutVisibilityCache: (mutate: () => void, options: {
|
|
7
|
+
readonly preservePendingTrackedPositions?: boolean;
|
|
8
|
+
}) => WorkPaperChange[];
|
|
9
|
+
readonly captureChanges: (mutate: () => void, options: {
|
|
10
|
+
readonly preservePendingTrackedPositions?: boolean;
|
|
11
|
+
}) => WorkPaperChange[];
|
|
12
|
+
readonly applyOperation: () => boolean;
|
|
13
|
+
readonly createMissingOperationError: () => Error;
|
|
14
|
+
readonly invalidateAllSheetDimensions: () => void;
|
|
15
|
+
}): WorkPaperChange[];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { workPaperHistoryTopIsCellMutations } from './work-paper-history.js';
|
|
2
|
+
export function applyWorkPaperHistoryOperation(args) {
|
|
3
|
+
const preservesPositions = !workPaperHistoryTopIsCellMutations(args.getStack());
|
|
4
|
+
const mutate = () => {
|
|
5
|
+
if (!args.applyOperation()) {
|
|
6
|
+
throw args.createMissingOperationError();
|
|
7
|
+
}
|
|
8
|
+
args.invalidateAllSheetDimensions();
|
|
9
|
+
};
|
|
10
|
+
return args.canUseTrackedMutationFastPath()
|
|
11
|
+
? args.captureTrackedChangesWithoutVisibilityCache(mutate, { preservePendingTrackedPositions: preservesPositions })
|
|
12
|
+
: args.captureChanges(mutate, { preservePendingTrackedPositions: preservesPositions });
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=work-paper-history-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-history-operations.js","sourceRoot":"","sources":["../src/work-paper-history-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAA+B,MAAM,yBAAyB,CAAA;AAGzG,MAAM,UAAU,8BAA8B,CAAC,IAW9C;IACC,MAAM,kBAAkB,GAAG,CAAC,kCAAkC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/E,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAA;QAC1C,CAAC;QACD,IAAI,CAAC,4BAA4B,EAAE,CAAA;IACrC,CAAC,CAAA;IACD,OAAO,IAAI,CAAC,6BAA6B,EAAE;QACzC,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC,MAAM,EAAE,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,CAAC;QACnH,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,CAAC,CAAA;AAC1F,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { RawCellContent } from './work-paper-types.js';
|
|
2
|
+
export type WorkPaperHistoryTransactionRecord = {
|
|
3
|
+
kind: 'ops';
|
|
4
|
+
ops: unknown[];
|
|
5
|
+
potentialNewCells?: number;
|
|
6
|
+
} | {
|
|
7
|
+
kind: 'single-op';
|
|
8
|
+
op: unknown;
|
|
9
|
+
potentialNewCells?: number;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'single-existing-numeric-cell-mutation';
|
|
12
|
+
sheetId: number;
|
|
13
|
+
row: number;
|
|
14
|
+
col: number;
|
|
15
|
+
cellIndex: number;
|
|
16
|
+
value: number;
|
|
17
|
+
potentialNewCells?: number;
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'cell-mutations';
|
|
20
|
+
refs: Array<{
|
|
21
|
+
sheetId: number;
|
|
22
|
+
mutation: {
|
|
23
|
+
kind: 'setCellValue';
|
|
24
|
+
row: number;
|
|
25
|
+
col: number;
|
|
26
|
+
value: RawCellContent;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'setCellFormula';
|
|
29
|
+
row: number;
|
|
30
|
+
col: number;
|
|
31
|
+
formula: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: 'clearCell';
|
|
34
|
+
row: number;
|
|
35
|
+
col: number;
|
|
36
|
+
};
|
|
37
|
+
}>;
|
|
38
|
+
potentialNewCells?: number;
|
|
39
|
+
};
|
|
40
|
+
export interface WorkPaperHistoryRecord {
|
|
41
|
+
forward: WorkPaperHistoryTransactionRecord;
|
|
42
|
+
inverse: WorkPaperHistoryTransactionRecord;
|
|
43
|
+
}
|
|
44
|
+
export type WorkPaperSheetNameResolver = (sheetId: number) => string | undefined;
|
|
45
|
+
export declare function readWorkPaperHistoryStack(owner: object, propertyName: 'undoStack' | 'redoStack'): WorkPaperHistoryRecord[];
|
|
46
|
+
export declare function workPaperHistoryTopIsCellMutations(stack: readonly WorkPaperHistoryRecord[]): boolean;
|
|
47
|
+
export declare function clearWorkPaperHistoryStacks(undoStack: WorkPaperHistoryRecord[], redoStack: WorkPaperHistoryRecord[]): void;
|
|
48
|
+
export declare function workPaperHistoryTransactionOps(record: WorkPaperHistoryTransactionRecord, resolveSheetName: WorkPaperSheetNameResolver): unknown[];
|
|
49
|
+
export declare function tryMergeTypedCellMutationHistory(entries: readonly WorkPaperHistoryRecord[]): WorkPaperHistoryRecord | null;
|
|
50
|
+
export declare function mergeWorkPaperUndoHistory(undoStack: WorkPaperHistoryRecord[], startIndex: number, resolveSheetName: WorkPaperSheetNameResolver): void;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { formatAddress } from '@bilig/formula';
|
|
2
|
+
function isWorkPaperHistoryRecordArray(value) {
|
|
3
|
+
return Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
export function readWorkPaperHistoryStack(owner, propertyName) {
|
|
6
|
+
const stack = Reflect.get(owner, propertyName);
|
|
7
|
+
if (!isWorkPaperHistoryRecordArray(stack)) {
|
|
8
|
+
return [];
|
|
9
|
+
}
|
|
10
|
+
return stack;
|
|
11
|
+
}
|
|
12
|
+
export function workPaperHistoryTopIsCellMutations(stack) {
|
|
13
|
+
const kind = stack.at(-1)?.forward.kind;
|
|
14
|
+
return kind === 'cell-mutations' || kind === 'single-existing-numeric-cell-mutation';
|
|
15
|
+
}
|
|
16
|
+
export function clearWorkPaperHistoryStacks(undoStack, redoStack) {
|
|
17
|
+
undoStack.length = 0;
|
|
18
|
+
redoStack.length = 0;
|
|
19
|
+
}
|
|
20
|
+
export function workPaperHistoryTransactionOps(record, resolveSheetName) {
|
|
21
|
+
switch (record.kind) {
|
|
22
|
+
case 'ops':
|
|
23
|
+
return record.ops;
|
|
24
|
+
case 'single-op':
|
|
25
|
+
return [record.op];
|
|
26
|
+
case 'single-existing-numeric-cell-mutation': {
|
|
27
|
+
const sheetName = resolveSheetName(record.sheetId);
|
|
28
|
+
return sheetName
|
|
29
|
+
? [
|
|
30
|
+
{
|
|
31
|
+
kind: 'setCellValue',
|
|
32
|
+
sheetName,
|
|
33
|
+
address: formatAddress(record.row, record.col),
|
|
34
|
+
value: record.value,
|
|
35
|
+
},
|
|
36
|
+
]
|
|
37
|
+
: [];
|
|
38
|
+
}
|
|
39
|
+
case 'cell-mutations':
|
|
40
|
+
return record.refs.flatMap((ref) => {
|
|
41
|
+
const sheetName = resolveSheetName(ref.sheetId);
|
|
42
|
+
if (!sheetName) {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const address = formatAddress(ref.mutation.row, ref.mutation.col);
|
|
46
|
+
switch (ref.mutation.kind) {
|
|
47
|
+
case 'setCellValue':
|
|
48
|
+
return [
|
|
49
|
+
{
|
|
50
|
+
kind: 'setCellValue',
|
|
51
|
+
sheetName,
|
|
52
|
+
address,
|
|
53
|
+
value: ref.mutation.value,
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
case 'setCellFormula':
|
|
57
|
+
return [
|
|
58
|
+
{
|
|
59
|
+
kind: 'setCellFormula',
|
|
60
|
+
sheetName,
|
|
61
|
+
address,
|
|
62
|
+
formula: ref.mutation.formula,
|
|
63
|
+
},
|
|
64
|
+
];
|
|
65
|
+
case 'clearCell':
|
|
66
|
+
return [
|
|
67
|
+
{
|
|
68
|
+
kind: 'clearCell',
|
|
69
|
+
sheetName,
|
|
70
|
+
address,
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function tryMergeTypedCellMutationHistory(entries) {
|
|
78
|
+
if (entries.length === 0 || entries.some((entry) => entry.forward.kind !== 'cell-mutations' || entry.inverse.kind !== 'cell-mutations')) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const forward = {
|
|
82
|
+
kind: 'cell-mutations',
|
|
83
|
+
refs: entries.flatMap((entry) => (entry.forward.kind === 'cell-mutations' ? entry.forward.refs : [])),
|
|
84
|
+
};
|
|
85
|
+
const forwardPotentialNewCells = sumNumbers(entries.map((entry) => entry.forward.potentialNewCells));
|
|
86
|
+
if (forwardPotentialNewCells !== undefined) {
|
|
87
|
+
forward.potentialNewCells = forwardPotentialNewCells;
|
|
88
|
+
}
|
|
89
|
+
const inverse = {
|
|
90
|
+
kind: 'cell-mutations',
|
|
91
|
+
refs: entries.toReversed().flatMap((entry) => (entry.inverse.kind === 'cell-mutations' ? entry.inverse.refs : [])),
|
|
92
|
+
};
|
|
93
|
+
const inversePotentialNewCells = sumNumbers(entries.map((entry) => entry.inverse.potentialNewCells));
|
|
94
|
+
if (inversePotentialNewCells !== undefined) {
|
|
95
|
+
inverse.potentialNewCells = inversePotentialNewCells;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
forward,
|
|
99
|
+
inverse,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export function mergeWorkPaperUndoHistory(undoStack, startIndex, resolveSheetName) {
|
|
103
|
+
if (undoStack.length - startIndex <= 1) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const entries = undoStack.splice(startIndex);
|
|
107
|
+
const merged = tryMergeTypedCellMutationHistory(entries) ?? mergeWorkPaperOperationHistory(entries, resolveSheetName);
|
|
108
|
+
undoStack.push(merged);
|
|
109
|
+
}
|
|
110
|
+
function mergeWorkPaperOperationHistory(entries, resolveSheetName) {
|
|
111
|
+
const forward = {
|
|
112
|
+
kind: 'ops',
|
|
113
|
+
ops: entries.flatMap((entry) => workPaperHistoryTransactionOps(entry.forward, resolveSheetName)),
|
|
114
|
+
};
|
|
115
|
+
const forwardPotentialNewCells = sumNumbers(entries.map((entry) => entry.forward.potentialNewCells));
|
|
116
|
+
if (forwardPotentialNewCells !== undefined) {
|
|
117
|
+
forward.potentialNewCells = forwardPotentialNewCells;
|
|
118
|
+
}
|
|
119
|
+
const inverse = {
|
|
120
|
+
kind: 'ops',
|
|
121
|
+
ops: entries.toReversed().flatMap((entry) => workPaperHistoryTransactionOps(entry.inverse, resolveSheetName)),
|
|
122
|
+
};
|
|
123
|
+
const inversePotentialNewCells = sumNumbers(entries.map((entry) => entry.inverse.potentialNewCells));
|
|
124
|
+
if (inversePotentialNewCells !== undefined) {
|
|
125
|
+
inverse.potentialNewCells = inversePotentialNewCells;
|
|
126
|
+
}
|
|
127
|
+
return { forward, inverse };
|
|
128
|
+
}
|
|
129
|
+
function sumNumbers(values) {
|
|
130
|
+
const filtered = values.filter((value) => typeof value === 'number');
|
|
131
|
+
if (filtered.length === 0) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
return filtered.reduce((sum, value) => sum + value, 0);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=work-paper-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-history.js","sourceRoot":"","sources":["../src/work-paper-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type CellValue } from '@bilig/protocol';
|
|
2
|
+
import type { RawCellContent, WorkPaperAddressLike, WorkPaperCellAddress, WorkPaperCellRange, WorkPaperChange, WorkPaperDependencyRef, WorkPaperInternals, WorkPaperSheetDimensions } from './work-paper-types.js';
|
|
3
|
+
export interface WorkPaperInternalsHooks {
|
|
4
|
+
readonly getCellDependents: (reference: WorkPaperAddressLike) => WorkPaperDependencyRef[];
|
|
5
|
+
readonly getCellFormula: (address: WorkPaperCellAddress) => string | undefined;
|
|
6
|
+
readonly getCellPrecedents: (reference: WorkPaperAddressLike) => WorkPaperDependencyRef[];
|
|
7
|
+
readonly getCellValue: (address: WorkPaperCellAddress) => CellValue;
|
|
8
|
+
readonly getNamedExpressionsFromFormula: (formula: string) => string[];
|
|
9
|
+
readonly getRangeSerialized: (range: WorkPaperCellRange) => RawCellContent[][];
|
|
10
|
+
readonly getRangeValues: (range: WorkPaperCellRange) => CellValue[][];
|
|
11
|
+
readonly getSheetDimensions: (sheetId: number) => WorkPaperSheetDimensions;
|
|
12
|
+
readonly getSheetId: (name: string) => number | undefined;
|
|
13
|
+
readonly getSheetName: (sheetId: number) => string | undefined;
|
|
14
|
+
readonly getSheetNames: () => string[];
|
|
15
|
+
readonly hasCellValueOrFormula: (address: WorkPaperCellAddress) => boolean;
|
|
16
|
+
readonly isCellPartOfArray: (address: WorkPaperCellAddress) => boolean;
|
|
17
|
+
readonly normalizeFormula: (formula: string) => string;
|
|
18
|
+
readonly recalculate: () => WorkPaperChange[];
|
|
19
|
+
readonly calculateFormula: (formula: string, scope?: number) => CellValue | CellValue[][];
|
|
20
|
+
readonly countSheets: () => number;
|
|
21
|
+
readonly validateFormula: (formula: string) => boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function createWorkPaperInternals(hooks: WorkPaperInternalsHooks): WorkPaperInternals;
|
|
24
|
+
export declare function doesWorkPaperColumnSearchValueMatch(value: CellValue, matcher: string | ((value: CellValue) => boolean)): boolean;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ValueTag } from '@bilig/protocol';
|
|
2
|
+
export function createWorkPaperInternals(hooks) {
|
|
3
|
+
return Object.freeze({
|
|
4
|
+
graph: Object.freeze({
|
|
5
|
+
getDependents: hooks.getCellDependents,
|
|
6
|
+
getPrecedents: hooks.getCellPrecedents,
|
|
7
|
+
}),
|
|
8
|
+
rangeMapping: Object.freeze({
|
|
9
|
+
getValues: hooks.getRangeValues,
|
|
10
|
+
getSerialized: hooks.getRangeSerialized,
|
|
11
|
+
}),
|
|
12
|
+
arrayMapping: Object.freeze({
|
|
13
|
+
isPartOfArray: hooks.isCellPartOfArray,
|
|
14
|
+
getFormula: hooks.getCellFormula,
|
|
15
|
+
}),
|
|
16
|
+
sheetMapping: Object.freeze({
|
|
17
|
+
getSheetName: hooks.getSheetName,
|
|
18
|
+
getSheetId: hooks.getSheetId,
|
|
19
|
+
getSheetNames: hooks.getSheetNames,
|
|
20
|
+
countSheets: hooks.countSheets,
|
|
21
|
+
}),
|
|
22
|
+
addressMapping: Object.freeze({
|
|
23
|
+
has: hooks.hasCellValueOrFormula,
|
|
24
|
+
getValue: hooks.getCellValue,
|
|
25
|
+
getFormula: hooks.getCellFormula,
|
|
26
|
+
}),
|
|
27
|
+
dependencyGraph: Object.freeze({
|
|
28
|
+
getCellDependents: hooks.getCellDependents,
|
|
29
|
+
getCellPrecedents: hooks.getCellPrecedents,
|
|
30
|
+
}),
|
|
31
|
+
evaluator: Object.freeze({
|
|
32
|
+
recalculate: hooks.recalculate,
|
|
33
|
+
calculateFormula: hooks.calculateFormula,
|
|
34
|
+
}),
|
|
35
|
+
columnSearch: Object.freeze({
|
|
36
|
+
find: (sheetId, column, matcher) => {
|
|
37
|
+
const dimensions = hooks.getSheetDimensions(sheetId);
|
|
38
|
+
const matches = [];
|
|
39
|
+
for (let row = 0; row < dimensions.height; row += 1) {
|
|
40
|
+
const address = { sheet: sheetId, row, col: column };
|
|
41
|
+
const value = hooks.getCellValue(address);
|
|
42
|
+
if (doesWorkPaperColumnSearchValueMatch(value, matcher)) {
|
|
43
|
+
matches.push(address);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return matches;
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
lazilyTransformingAstService: Object.freeze({
|
|
50
|
+
normalizeFormula: hooks.normalizeFormula,
|
|
51
|
+
validateFormula: hooks.validateFormula,
|
|
52
|
+
getNamedExpressionsFromFormula: hooks.getNamedExpressionsFromFormula,
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export function doesWorkPaperColumnSearchValueMatch(value, matcher) {
|
|
57
|
+
return typeof matcher === 'string' ? value.tag === ValueTag.String && value.value === matcher : matcher(value);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=work-paper-internals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-internals.js","sourceRoot":"","sources":["../src/work-paper-internals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,iBAAiB,CAAA;AAiC1D,MAAM,UAAU,wBAAwB,CAAC,KAA8B;IACrE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YACnB,aAAa,EAAE,KAAK,CAAC,iBAAiB;YACtC,aAAa,EAAE,KAAK,CAAC,iBAAiB;SACvC,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1B,SAAS,EAAE,KAAK,CAAC,cAAc;YAC/B,aAAa,EAAE,KAAK,CAAC,kBAAkB;SACxC,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1B,aAAa,EAAE,KAAK,CAAC,iBAAiB;YACtC,UAAU,EAAE,KAAK,CAAC,cAAc;SACjC,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC;QACF,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC;YAC5B,GAAG,EAAE,KAAK,CAAC,qBAAqB;YAChC,QAAQ,EAAE,KAAK,CAAC,YAAY;YAC5B,UAAU,EAAE,KAAK,CAAC,cAAc;SACjC,CAAC;QACF,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC;YAC7B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;SAC3C,CAAC;QACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACvB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;SACzC,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,CAAC,OAAe,EAAE,MAAc,EAAE,OAAiD,EAA0B,EAAE;gBACnH,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;gBACpD,MAAM,OAAO,GAA2B,EAAE,CAAA;gBAC1C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;oBACpD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;oBACpD,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;oBACzC,IAAI,mCAAmC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;wBACxD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACvB,CAAC;gBACH,CAAC;gBACD,OAAO,OAAO,CAAA;YAChB,CAAC;SACF,CAAC;QACF,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,8BAA8B,EAAE,KAAK,CAAC,8BAA8B;SACrE,CAAC;KACH,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,KAAgB,EAAE,OAAiD;IACrH,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAChH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { EngineCellMutationRef } from '@bilig/core';
|
|
2
|
+
import type { RawCellContent } from './work-paper-types.js';
|
|
3
|
+
export declare function buildWorkPaperRawCellMutation(args: {
|
|
4
|
+
readonly row: number;
|
|
5
|
+
readonly col: number;
|
|
6
|
+
readonly content: RawCellContent;
|
|
7
|
+
readonly rewriteFormulaForStorage: (formula: string) => string;
|
|
8
|
+
}): EngineCellMutationRef['mutation'];
|
|
9
|
+
export declare function tryEnqueueWorkPaperLiteralMutation(args: {
|
|
10
|
+
readonly enabled: boolean;
|
|
11
|
+
readonly queue: EngineCellMutationRef[];
|
|
12
|
+
readonly sheetId: number;
|
|
13
|
+
readonly row: number;
|
|
14
|
+
readonly col: number;
|
|
15
|
+
readonly content: RawCellContent;
|
|
16
|
+
readonly cellIndex: number | undefined;
|
|
17
|
+
readonly addPotentialNewCell: () => void;
|
|
18
|
+
}): boolean;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { isDeferredBatchLiteralContent, isFormulaContent, stripLeadingEquals } from './work-paper-runtime-helpers.js';
|
|
2
|
+
export function buildWorkPaperRawCellMutation(args) {
|
|
3
|
+
if (args.content === null) {
|
|
4
|
+
return { kind: 'clearCell', row: args.row, col: args.col };
|
|
5
|
+
}
|
|
6
|
+
if (isFormulaContent(args.content)) {
|
|
7
|
+
return {
|
|
8
|
+
kind: 'setCellFormula',
|
|
9
|
+
row: args.row,
|
|
10
|
+
col: args.col,
|
|
11
|
+
formula: args.rewriteFormulaForStorage(stripLeadingEquals(args.content)),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
kind: 'setCellValue',
|
|
16
|
+
row: args.row,
|
|
17
|
+
col: args.col,
|
|
18
|
+
value: args.content,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function tryEnqueueWorkPaperLiteralMutation(args) {
|
|
22
|
+
if (!args.enabled || !isDeferredBatchLiteralContent(args.content) || isFormulaContent(args.content)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
args.queue.push({
|
|
26
|
+
sheetId: args.sheetId,
|
|
27
|
+
mutation: buildWorkPaperRawCellMutation({
|
|
28
|
+
row: args.row,
|
|
29
|
+
col: args.col,
|
|
30
|
+
content: args.content,
|
|
31
|
+
rewriteFormulaForStorage: (formula) => formula,
|
|
32
|
+
}),
|
|
33
|
+
...(args.cellIndex !== undefined ? { cellIndex: args.cellIndex } : {}),
|
|
34
|
+
});
|
|
35
|
+
if (args.content !== null && args.cellIndex === undefined) {
|
|
36
|
+
args.addPotentialNewCell();
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=work-paper-literal-mutation-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-paper-literal-mutation-queue.js","sourceRoot":"","sources":["../src/work-paper-literal-mutation-queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAGrH,MAAM,UAAU,6BAA6B,CAAC,IAK7C;IACC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5D,CAAC;IACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACzE,CAAA;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,OAAO;KACpB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,IASlD;IACC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpG,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACd,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,6BAA6B,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;SAC/C,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvE,CAAC,CAAA;IACF,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1D,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { EngineCellMutationRef } from '@bilig/core';
|
|
2
|
+
import type { RawCellContent, WorkPaperCellAddress, WorkPaperSheet } from './work-paper-types.js';
|
|
3
|
+
export interface WorkPaperCellMutationApplyOptions {
|
|
4
|
+
captureUndo?: boolean;
|
|
5
|
+
potentialNewCells?: number;
|
|
6
|
+
source?: 'local' | 'restore';
|
|
7
|
+
returnUndoOps?: boolean;
|
|
8
|
+
reuseRefs?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface WorkPaperMatrixApplyOptions {
|
|
11
|
+
captureUndo?: boolean;
|
|
12
|
+
deferLiteralAddresses?: ReadonlySet<string>;
|
|
13
|
+
skipNulls?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function applyWorkPaperSerializedMatrix(input: {
|
|
16
|
+
readonly applyCellMutationRefs: (refs: readonly EngineCellMutationRef[], options: WorkPaperCellMutationApplyOptions) => void;
|
|
17
|
+
readonly applyRawContent: (address: WorkPaperCellAddress, content: RawCellContent) => void;
|
|
18
|
+
readonly flushPendingBatchOps: () => void;
|
|
19
|
+
readonly rewriteFormulaForStorage: (formula: string, ownerSheetId: number) => string;
|
|
20
|
+
readonly serialized: RawCellContent[][];
|
|
21
|
+
readonly sourceAnchor: WorkPaperCellAddress;
|
|
22
|
+
readonly targetLeftCorner: WorkPaperCellAddress;
|
|
23
|
+
}): void;
|
|
24
|
+
export declare function applyWorkPaperMatrixContents(input: {
|
|
25
|
+
readonly address: WorkPaperCellAddress;
|
|
26
|
+
readonly applyCellMutationRefs: (refs: readonly EngineCellMutationRef[], options: WorkPaperCellMutationApplyOptions) => void;
|
|
27
|
+
readonly content: WorkPaperSheet;
|
|
28
|
+
readonly flushPendingBatchOps: () => void;
|
|
29
|
+
readonly options?: WorkPaperMatrixApplyOptions;
|
|
30
|
+
readonly rewriteFormulaForStorage: (formula: string, ownerSheetId: number) => string;
|
|
31
|
+
}): void;
|