@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.
Files changed (164) hide show
  1. package/README.md +15 -0
  2. package/dist/persistence.d.ts +1 -1
  3. package/dist/persistence.js +13 -11
  4. package/dist/persistence.js.map +1 -1
  5. package/dist/tracked-cell-index-changes.d.ts +1 -7
  6. package/dist/tracked-cell-index-changes.js +20 -434
  7. package/dist/tracked-cell-index-changes.js.map +1 -1
  8. package/dist/tracked-cell-lazy-physical-changes.d.ts +21 -0
  9. package/dist/tracked-cell-lazy-physical-changes.js +333 -0
  10. package/dist/tracked-cell-lazy-physical-changes.js.map +1 -0
  11. package/dist/tracked-cell-value-read.d.ts +18 -0
  12. package/dist/tracked-cell-value-read.js +46 -0
  13. package/dist/tracked-cell-value-read.js.map +1 -0
  14. package/dist/tracked-engine-event-refs.d.ts +1 -1
  15. package/dist/tracked-engine-event-refs.js +14 -4
  16. package/dist/tracked-engine-event-refs.js.map +1 -1
  17. package/dist/tracked-index-source-order.d.ts +5 -0
  18. package/dist/tracked-index-source-order.js +15 -0
  19. package/dist/tracked-index-source-order.js.map +1 -0
  20. package/dist/work-paper-address-format.d.ts +33 -0
  21. package/dist/work-paper-address-format.js +116 -0
  22. package/dist/work-paper-address-format.js.map +1 -0
  23. package/dist/work-paper-axis-helpers.d.ts +26 -0
  24. package/dist/work-paper-axis-helpers.js +104 -0
  25. package/dist/work-paper-axis-helpers.js.map +1 -0
  26. package/dist/work-paper-capability-checks.d.ts +17 -0
  27. package/dist/work-paper-capability-checks.js +101 -0
  28. package/dist/work-paper-capability-checks.js.map +1 -0
  29. package/dist/work-paper-capability-operations.d.ts +34 -0
  30. package/dist/work-paper-capability-operations.js +70 -0
  31. package/dist/work-paper-capability-operations.js.map +1 -0
  32. package/dist/work-paper-capability-surface.d.ts +97 -0
  33. package/dist/work-paper-capability-surface.js +236 -0
  34. package/dist/work-paper-capability-surface.js.map +1 -0
  35. package/dist/work-paper-cell-content-setter.d.ts +37 -0
  36. package/dist/work-paper-cell-content-setter.js +87 -0
  37. package/dist/work-paper-cell-content-setter.js.map +1 -0
  38. package/dist/work-paper-cell-mutation-refs.d.ts +23 -0
  39. package/dist/work-paper-cell-mutation-refs.js +50 -0
  40. package/dist/work-paper-cell-mutation-refs.js.map +1 -0
  41. package/dist/work-paper-cell-read.d.ts +41 -0
  42. package/dist/work-paper-cell-read.js +54 -0
  43. package/dist/work-paper-cell-read.js.map +1 -0
  44. package/dist/work-paper-clipboard-operations.d.ts +24 -0
  45. package/dist/work-paper-clipboard-operations.js +56 -0
  46. package/dist/work-paper-clipboard-operations.js.map +1 -0
  47. package/dist/work-paper-clipboard.d.ts +13 -0
  48. package/dist/work-paper-clipboard.js +19 -0
  49. package/dist/work-paper-clipboard.js.map +1 -0
  50. package/dist/work-paper-config.d.ts +11 -0
  51. package/dist/work-paper-config.js +247 -0
  52. package/dist/work-paper-config.js.map +1 -0
  53. package/dist/work-paper-date-time.d.ts +4 -0
  54. package/dist/work-paper-date-time.js +38 -0
  55. package/dist/work-paper-date-time.js.map +1 -0
  56. package/dist/work-paper-dependency-refs.d.ts +11 -0
  57. package/dist/work-paper-dependency-refs.js +74 -0
  58. package/dist/work-paper-dependency-refs.js.map +1 -0
  59. package/dist/work-paper-emitter.d.ts +22 -0
  60. package/dist/work-paper-emitter.js +130 -0
  61. package/dist/work-paper-emitter.js.map +1 -0
  62. package/dist/work-paper-engine-event-tracker.d.ts +24 -0
  63. package/dist/work-paper-engine-event-tracker.js +92 -0
  64. package/dist/work-paper-engine-event-tracker.js.map +1 -0
  65. package/dist/work-paper-errors.d.ts +4 -0
  66. package/dist/work-paper-errors.js +7 -0
  67. package/dist/work-paper-errors.js.map +1 -1
  68. package/dist/work-paper-existing-numeric-fast-path.d.ts +31 -0
  69. package/dist/work-paper-existing-numeric-fast-path.js +120 -0
  70. package/dist/work-paper-existing-numeric-fast-path.js.map +1 -0
  71. package/dist/work-paper-fill-helpers.d.ts +8 -0
  72. package/dist/work-paper-fill-helpers.js +34 -0
  73. package/dist/work-paper-fill-helpers.js.map +1 -0
  74. package/dist/work-paper-formula-analysis.d.ts +18 -0
  75. package/dist/work-paper-formula-analysis.js +54 -0
  76. package/dist/work-paper-formula-analysis.js.map +1 -0
  77. package/dist/work-paper-formula-rewrite.d.ts +22 -0
  78. package/dist/work-paper-formula-rewrite.js +71 -0
  79. package/dist/work-paper-formula-rewrite.js.map +1 -0
  80. package/dist/work-paper-function-registry.d.ts +39 -0
  81. package/dist/work-paper-function-registry.js +66 -0
  82. package/dist/work-paper-function-registry.js.map +1 -0
  83. package/dist/work-paper-history-operations.d.ts +15 -0
  84. package/dist/work-paper-history-operations.js +14 -0
  85. package/dist/work-paper-history-operations.js.map +1 -0
  86. package/dist/work-paper-history.d.ts +50 -0
  87. package/dist/work-paper-history.js +136 -0
  88. package/dist/work-paper-history.js.map +1 -0
  89. package/dist/work-paper-internals.d.ts +24 -0
  90. package/dist/work-paper-internals.js +59 -0
  91. package/dist/work-paper-internals.js.map +1 -0
  92. package/dist/work-paper-literal-mutation-queue.d.ts +18 -0
  93. package/dist/work-paper-literal-mutation-queue.js +40 -0
  94. package/dist/work-paper-literal-mutation-queue.js.map +1 -0
  95. package/dist/work-paper-matrix-application.d.ts +31 -0
  96. package/dist/work-paper-matrix-application.js +85 -0
  97. package/dist/work-paper-matrix-application.js.map +1 -0
  98. package/dist/work-paper-mutation-queues.d.ts +29 -0
  99. package/dist/work-paper-mutation-queues.js +72 -0
  100. package/dist/work-paper-mutation-queues.js.map +1 -0
  101. package/dist/work-paper-named-expression-fast-path.d.ts +37 -0
  102. package/dist/work-paper-named-expression-fast-path.js +100 -0
  103. package/dist/work-paper-named-expression-fast-path.js.map +1 -0
  104. package/dist/work-paper-named-expression-helpers.d.ts +54 -0
  105. package/dist/work-paper-named-expression-helpers.js +179 -0
  106. package/dist/work-paper-named-expression-helpers.js.map +1 -0
  107. package/dist/work-paper-named-expression-operations.d.ts +39 -0
  108. package/dist/work-paper-named-expression-operations.js +82 -0
  109. package/dist/work-paper-named-expression-operations.js.map +1 -0
  110. package/dist/work-paper-public-surface.d.ts +73 -0
  111. package/dist/work-paper-public-surface.js +165 -0
  112. package/dist/work-paper-public-surface.js.map +1 -0
  113. package/dist/work-paper-read-operations.d.ts +52 -0
  114. package/dist/work-paper-read-operations.js +185 -0
  115. package/dist/work-paper-read-operations.js.map +1 -0
  116. package/dist/work-paper-runtime-adapters.d.ts +144 -0
  117. package/dist/work-paper-runtime-adapters.js +256 -0
  118. package/dist/work-paper-runtime-adapters.js.map +1 -0
  119. package/dist/work-paper-runtime-helpers.d.ts +27 -0
  120. package/dist/work-paper-runtime-helpers.js +305 -0
  121. package/dist/work-paper-runtime-helpers.js.map +1 -0
  122. package/dist/work-paper-runtime-surface.d.ts +137 -0
  123. package/dist/work-paper-runtime-surface.js +702 -0
  124. package/dist/work-paper-runtime-surface.js.map +1 -0
  125. package/dist/work-paper-runtime.d.ts +56 -285
  126. package/dist/work-paper-runtime.js +403 -4809
  127. package/dist/work-paper-runtime.js.map +1 -1
  128. package/dist/work-paper-scratch-evaluator.js +29 -26
  129. package/dist/work-paper-scratch-evaluator.js.map +1 -1
  130. package/dist/work-paper-sheet-dimension-cache.d.ts +36 -0
  131. package/dist/work-paper-sheet-dimension-cache.js +158 -0
  132. package/dist/work-paper-sheet-dimension-cache.js.map +1 -0
  133. package/dist/work-paper-sheet-initialization.d.ts +19 -0
  134. package/dist/work-paper-sheet-initialization.js +93 -0
  135. package/dist/work-paper-sheet-initialization.js.map +1 -0
  136. package/dist/work-paper-sheet-inspection.d.ts +66 -0
  137. package/dist/work-paper-sheet-inspection.js +204 -0
  138. package/dist/work-paper-sheet-inspection.js.map +1 -0
  139. package/dist/work-paper-sheet-operations.d.ts +59 -0
  140. package/dist/work-paper-sheet-operations.js +104 -0
  141. package/dist/work-paper-sheet-operations.js.map +1 -0
  142. package/dist/work-paper-sheet-read.d.ts +21 -0
  143. package/dist/work-paper-sheet-read.js +32 -0
  144. package/dist/work-paper-sheet-read.js.map +1 -0
  145. package/dist/work-paper-sheet-rename-fast-path.d.ts +18 -0
  146. package/dist/work-paper-sheet-rename-fast-path.js +43 -0
  147. package/dist/work-paper-sheet-rename-fast-path.js.map +1 -0
  148. package/dist/work-paper-static-api.d.ts +18 -0
  149. package/dist/work-paper-static-api.js +44 -0
  150. package/dist/work-paper-static-api.js.map +1 -0
  151. package/dist/work-paper-static-registry.d.ts +21 -0
  152. package/dist/work-paper-static-registry.js +150 -0
  153. package/dist/work-paper-static-registry.js.map +1 -0
  154. package/dist/work-paper-tracked-change-reducer.d.ts +41 -0
  155. package/dist/work-paper-tracked-change-reducer.js +281 -0
  156. package/dist/work-paper-tracked-change-reducer.js.map +1 -0
  157. package/dist/work-paper-tracked-event-helpers.d.ts +89 -0
  158. package/dist/work-paper-tracked-event-helpers.js +366 -0
  159. package/dist/work-paper-tracked-event-helpers.js.map +1 -0
  160. package/dist/work-paper-types.d.ts +6 -5
  161. package/dist/work-paper-visibility-snapshot.d.ts +36 -0
  162. package/dist/work-paper-visibility-snapshot.js +62 -0
  163. package/dist/work-paper-visibility-snapshot.js.map +1 -0
  164. package/package.json +13 -5
@@ -0,0 +1,366 @@
1
+ import { ValueTag } from '@bilig/protocol';
2
+ import { scalarValueFromLiteral } from './work-paper-runtime-helpers.js';
3
+ export const TRUSTED_TRACKED_PHYSICAL_SHEET_ID_PROPERTY = '__biligTrackedPhysicalSheetId';
4
+ export const TRUSTED_TRACKED_PHYSICAL_SORTED_SPLIT_PROPERTY = '__biligTrackedPhysicalSortedSliceSplit';
5
+ export const TINY_TRACKED_CHANGE_LIMIT = 4;
6
+ export function readTrustedPhysicalTrackedChangeMetadata(changedCellIndices) {
7
+ const trustedPhysicalSheetId = Reflect.get(changedCellIndices, TRUSTED_TRACKED_PHYSICAL_SHEET_ID_PROPERTY);
8
+ if (typeof trustedPhysicalSheetId !== 'number' || !Number.isInteger(trustedPhysicalSheetId) || trustedPhysicalSheetId < 0) {
9
+ return undefined;
10
+ }
11
+ const trustedSortedSliceSplit = Reflect.get(changedCellIndices, TRUSTED_TRACKED_PHYSICAL_SORTED_SPLIT_PROPERTY);
12
+ return typeof trustedSortedSliceSplit === 'number' && Number.isInteger(trustedSortedSliceSplit) && trustedSortedSliceSplit > 0
13
+ ? { trustedPhysicalSheetId, trustedSortedSliceSplit }
14
+ : { trustedPhysicalSheetId };
15
+ }
16
+ export function trackedEventHasNoValueChanges(event) {
17
+ return (event.invalidation !== 'full' &&
18
+ event.changedCellIndices.length === 0 &&
19
+ !(event.patches?.some((patch) => patch.kind === 'cell') ?? false));
20
+ }
21
+ export function countPotentialNewTrackedCellMutations(refs) {
22
+ let count = 0;
23
+ for (let index = 0; index < refs.length; index += 1) {
24
+ const ref = refs[index];
25
+ if (ref && ref.cellIndex === undefined && ref.mutation.kind !== 'clearCell') {
26
+ count += 1;
27
+ }
28
+ }
29
+ return count;
30
+ }
31
+ export function canSkipDimensionUpdateAfterLiteralMutation(refs, potentialNewCells) {
32
+ if (potentialNewCells !== 0 || refs.length === 0) {
33
+ return false;
34
+ }
35
+ for (let index = 0; index < refs.length; index += 1) {
36
+ const ref = refs[index];
37
+ if (ref?.cellIndex === undefined || ref.mutation.kind !== 'setCellValue' || ref.mutation.value === null) {
38
+ return false;
39
+ }
40
+ }
41
+ return true;
42
+ }
43
+ export function readTrackedRuntimeCellValue(cellStore, cellIndex, strings) {
44
+ const tag = cellStore.tags[cellIndex] ?? ValueTag.Empty;
45
+ switch (tag) {
46
+ case ValueTag.Number:
47
+ return { tag: ValueTag.Number, value: cellStore.numbers[cellIndex] ?? 0 };
48
+ case ValueTag.Boolean:
49
+ return { tag: ValueTag.Boolean, value: (cellStore.numbers[cellIndex] ?? 0) !== 0 };
50
+ case ValueTag.String:
51
+ return cellStore.getValue(cellIndex, (stringId) => strings.get(stringId));
52
+ case ValueTag.Error:
53
+ return { tag: ValueTag.Error, code: cellStore.errors[cellIndex] };
54
+ case ValueTag.Empty:
55
+ default:
56
+ return { tag: ValueTag.Empty };
57
+ }
58
+ }
59
+ export function existingNumericMutationChangedCellCount(result) {
60
+ return result.changedCellIndices?.length ?? result.changedCellCount ?? 0;
61
+ }
62
+ export function existingNumericMutationChangedCellAt(result, index) {
63
+ if (result.changedCellIndices) {
64
+ return result.changedCellIndices[index];
65
+ }
66
+ if (index === 0) {
67
+ return result.firstChangedCellIndex;
68
+ }
69
+ if (index === 1) {
70
+ return result.secondChangedCellIndex;
71
+ }
72
+ return undefined;
73
+ }
74
+ export function materializeExistingNumericMutationChangedCellIndices(result) {
75
+ if (result.changedCellIndices) {
76
+ return result.changedCellIndices;
77
+ }
78
+ const count = existingNumericMutationChangedCellCount(result);
79
+ const changed = new Uint32Array(count);
80
+ for (let index = 0; index < count; index += 1) {
81
+ changed[index] = existingNumericMutationChangedCellAt(result, index) ?? 0;
82
+ }
83
+ return changed;
84
+ }
85
+ export function trackedEventFromExistingNumericMutationResult(result) {
86
+ let sortedDisjoint = true;
87
+ let previous = -1;
88
+ let firstChangedCellIndex;
89
+ let lastChangedCellIndex;
90
+ const changedCellCount = existingNumericMutationChangedCellCount(result);
91
+ for (let index = 0; index < changedCellCount; index += 1) {
92
+ const cellIndex = existingNumericMutationChangedCellAt(result, index) ?? -1;
93
+ if (index === 0) {
94
+ firstChangedCellIndex = cellIndex;
95
+ }
96
+ if (!Number.isInteger(cellIndex) || cellIndex < 0 || cellIndex <= previous) {
97
+ sortedDisjoint = false;
98
+ }
99
+ previous = cellIndex;
100
+ lastChangedCellIndex = cellIndex;
101
+ }
102
+ return {
103
+ invalidation: 'cells',
104
+ changedCellIndices: materializeExistingNumericMutationChangedCellIndices(result),
105
+ changedInputCount: 1,
106
+ explicitChangedCount: result.explicitChangedCount,
107
+ changedCellIndicesSortedDisjoint: sortedDisjoint,
108
+ ...(firstChangedCellIndex === undefined ? {} : { firstChangedCellIndex }),
109
+ ...(lastChangedCellIndex === undefined ? {} : { lastChangedCellIndex }),
110
+ hasInvalidatedRanges: false,
111
+ hasInvalidatedRows: false,
112
+ hasInvalidatedColumns: false,
113
+ };
114
+ }
115
+ export function readTrackedCellChange(input) {
116
+ const { cellIndex, strings, trackedA1, workbook } = input;
117
+ const cellStore = workbook.cellStore;
118
+ const sheetId = cellStore.sheetIds[cellIndex];
119
+ if (sheetId === undefined) {
120
+ return undefined;
121
+ }
122
+ const sheet = workbook.getSheetById(sheetId);
123
+ const sheetName = sheet?.name ?? workbook.getSheetNameById(sheetId);
124
+ if (sheetName === undefined) {
125
+ return undefined;
126
+ }
127
+ let row;
128
+ let col;
129
+ if (!sheet || sheet.structureVersion === 1) {
130
+ const physicalRow = cellStore.rows[cellIndex];
131
+ const physicalCol = cellStore.cols[cellIndex];
132
+ if (physicalRow === undefined || physicalCol === undefined) {
133
+ return undefined;
134
+ }
135
+ row = physicalRow;
136
+ col = physicalCol;
137
+ }
138
+ else {
139
+ const position = workbook.getCellPosition(cellIndex);
140
+ if (!position) {
141
+ return undefined;
142
+ }
143
+ row = position.row;
144
+ col = position.col;
145
+ }
146
+ return {
147
+ kind: 'cell',
148
+ address: { sheet: sheetId, row, col },
149
+ sheetName,
150
+ a1: trackedA1(row, col),
151
+ newValue: readTrackedRuntimeCellValue(cellStore, cellIndex, strings),
152
+ };
153
+ }
154
+ export function readTinySortedPhysicalTrackedEventChanges(input) {
155
+ const { event, strings, trackedA1, workbook } = input;
156
+ if (!event.changedCellIndicesSortedDisjoint) {
157
+ return null;
158
+ }
159
+ const cellStore = workbook.cellStore;
160
+ const firstCellIndex = event.changedCellIndices[0];
161
+ if (firstCellIndex === undefined) {
162
+ return [];
163
+ }
164
+ const sheetId = cellStore.sheetIds[firstCellIndex];
165
+ if (sheetId === undefined) {
166
+ return [];
167
+ }
168
+ const sheet = workbook.getSheetById(sheetId);
169
+ if (sheet && sheet.structureVersion !== 1) {
170
+ return null;
171
+ }
172
+ const sheetName = sheet?.name ?? workbook.getSheetNameById(sheetId);
173
+ if (sheetName === undefined) {
174
+ return null;
175
+ }
176
+ const changes = [];
177
+ let previousRow = -1;
178
+ let previousCol = -1;
179
+ for (let index = 0; index < event.changedCellIndices.length; index += 1) {
180
+ const cellIndex = event.changedCellIndices[index];
181
+ if (cellStore.sheetIds[cellIndex] !== sheetId) {
182
+ return null;
183
+ }
184
+ const row = cellStore.rows[cellIndex];
185
+ const col = cellStore.cols[cellIndex];
186
+ if (row === undefined || col === undefined) {
187
+ return null;
188
+ }
189
+ if (row < previousRow || (row === previousRow && col < previousCol)) {
190
+ return null;
191
+ }
192
+ changes.push({
193
+ kind: 'cell',
194
+ address: { sheet: sheetId, row, col },
195
+ sheetName,
196
+ a1: trackedA1(row, col),
197
+ newValue: readTrackedRuntimeCellValue(cellStore, cellIndex, strings),
198
+ });
199
+ previousRow = row;
200
+ previousCol = col;
201
+ }
202
+ return changes;
203
+ }
204
+ export function tryBuildDirectSingleLiteralTrackedChange(input) {
205
+ const { cellStore, events, expected, strings, trackedA1 } = input;
206
+ if (expected === undefined || expected.cellIndex === undefined || events.length !== 1) {
207
+ return null;
208
+ }
209
+ const event = events[0];
210
+ if (event.invalidation === 'full' ||
211
+ event.patches !== undefined ||
212
+ event.changedCellIndices.length < 1 ||
213
+ event.changedCellIndices.length > 2 ||
214
+ event.changedCellIndices[0] !== expected.cellIndex ||
215
+ event.hasInvalidatedRanges ||
216
+ event.hasInvalidatedRows ||
217
+ event.hasInvalidatedColumns) {
218
+ return null;
219
+ }
220
+ const literalChange = {
221
+ kind: 'cell',
222
+ address: { sheet: expected.address.sheet, row: expected.address.row, col: expected.address.col },
223
+ sheetName: expected.sheetName,
224
+ a1: trackedA1(expected.address.row, expected.address.col),
225
+ newValue: scalarValueFromLiteral(expected.value),
226
+ };
227
+ if (event.changedCellIndices.length === 1) {
228
+ return [literalChange];
229
+ }
230
+ const formulaCellIndex = event.changedCellIndices[1];
231
+ if (cellStore.sheetIds[formulaCellIndex] !== expected.address.sheet || !expected.isPhysicalSheet) {
232
+ return null;
233
+ }
234
+ const formulaRow = cellStore.rows[formulaCellIndex];
235
+ const formulaCol = cellStore.cols[formulaCellIndex];
236
+ if (formulaRow === undefined ||
237
+ formulaCol === undefined ||
238
+ formulaRow < expected.address.row ||
239
+ (formulaRow === expected.address.row && formulaCol < expected.address.col)) {
240
+ return null;
241
+ }
242
+ return [
243
+ literalChange,
244
+ {
245
+ kind: 'cell',
246
+ address: { sheet: expected.address.sheet, row: formulaRow, col: formulaCol },
247
+ sheetName: expected.sheetName,
248
+ a1: trackedA1(formulaRow, formulaCol),
249
+ newValue: readTrackedRuntimeCellValue(cellStore, formulaCellIndex, strings),
250
+ },
251
+ ];
252
+ }
253
+ export function tryBuildDirectExistingNumericTrackedChanges(input) {
254
+ const { address, cellIndex, cellStore, isPhysicalSheet, orderChanges, result, sheetName, strings, trackedA1, value } = input;
255
+ const changedCellCount = result.changedCellIndices?.length ?? result.changedCellCount ?? 0;
256
+ const firstChangedCellIndex = result.changedCellIndices?.[0] ?? result.firstChangedCellIndex;
257
+ if (changedCellCount < 1 || firstChangedCellIndex !== cellIndex) {
258
+ return null;
259
+ }
260
+ const literalChange = {
261
+ kind: 'cell',
262
+ address: { sheet: address.sheet, row: address.row, col: address.col },
263
+ sheetName,
264
+ a1: trackedA1(address.row, address.col),
265
+ newValue: { tag: ValueTag.Number, value },
266
+ };
267
+ if (changedCellCount === 1) {
268
+ return [literalChange];
269
+ }
270
+ if (!isPhysicalSheet) {
271
+ return null;
272
+ }
273
+ if (changedCellCount > 2) {
274
+ const changedCellIndices = result.changedCellIndices;
275
+ if (changedCellIndices === undefined) {
276
+ return null;
277
+ }
278
+ const changes = [];
279
+ changes.length = changedCellCount;
280
+ changes[0] = literalChange;
281
+ let alreadySorted = true;
282
+ let previousRow = address.row;
283
+ let previousCol = address.col;
284
+ for (let index = 1; index < changedCellCount; index += 1) {
285
+ const changedCellIndex = changedCellIndices[index];
286
+ if (cellStore.sheetIds[changedCellIndex] !== address.sheet) {
287
+ return null;
288
+ }
289
+ const row = cellStore.rows[changedCellIndex];
290
+ const col = cellStore.cols[changedCellIndex];
291
+ if (row === undefined || col === undefined) {
292
+ return null;
293
+ }
294
+ if (row < previousRow || (row === previousRow && col < previousCol)) {
295
+ alreadySorted = false;
296
+ }
297
+ changes[index] = {
298
+ kind: 'cell',
299
+ address: { sheet: address.sheet, row, col },
300
+ sheetName,
301
+ a1: trackedA1(row, col),
302
+ newValue: readTrackedRuntimeCellValue(cellStore, changedCellIndex, strings),
303
+ };
304
+ previousRow = row;
305
+ previousCol = col;
306
+ }
307
+ return alreadySorted ? changes : orderChanges(changes, result.explicitChangedCount);
308
+ }
309
+ const formulaCellIndex = result.changedCellIndices?.[1] ?? result.secondChangedCellIndex;
310
+ if (formulaCellIndex === undefined || cellStore.sheetIds[formulaCellIndex] !== address.sheet) {
311
+ return null;
312
+ }
313
+ const formulaRow = result.secondChangedRow ?? cellStore.rows[formulaCellIndex];
314
+ const formulaCol = result.secondChangedCol ?? cellStore.cols[formulaCellIndex];
315
+ if (formulaRow === undefined ||
316
+ formulaCol === undefined ||
317
+ formulaRow < address.row ||
318
+ (formulaRow === address.row && formulaCol < address.col)) {
319
+ return null;
320
+ }
321
+ return [
322
+ literalChange,
323
+ {
324
+ kind: 'cell',
325
+ address: { sheet: address.sheet, row: formulaRow, col: formulaCol },
326
+ sheetName,
327
+ a1: trackedA1(formulaRow, formulaCol),
328
+ newValue: result.secondChangedNumericValue === undefined
329
+ ? readTrackedRuntimeCellValue(cellStore, formulaCellIndex, strings)
330
+ : { tag: ValueTag.Number, value: result.secondChangedNumericValue },
331
+ },
332
+ ];
333
+ }
334
+ export function withEventChanges(event, changes) {
335
+ switch (event.eventName) {
336
+ case 'sheetAdded':
337
+ return event;
338
+ case 'sheetRemoved':
339
+ return {
340
+ eventName: 'sheetRemoved',
341
+ payload: {
342
+ ...event.payload,
343
+ changes,
344
+ },
345
+ };
346
+ case 'sheetRenamed':
347
+ return event;
348
+ case 'namedExpressionAdded':
349
+ return {
350
+ eventName: 'namedExpressionAdded',
351
+ payload: {
352
+ ...event.payload,
353
+ changes,
354
+ },
355
+ };
356
+ case 'namedExpressionRemoved':
357
+ return {
358
+ eventName: 'namedExpressionRemoved',
359
+ payload: {
360
+ ...event.payload,
361
+ changes,
362
+ },
363
+ };
364
+ }
365
+ }
366
+ //# sourceMappingURL=work-paper-tracked-event-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-paper-tracked-event-helpers.js","sourceRoot":"","sources":["../src/work-paper-tracked-event-helpers.ts"],"names":[],"mappings":"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"}
@@ -112,13 +112,14 @@ export interface WorkPaperConfig {
112
112
  accentSensitive?: boolean;
113
113
  caseSensitive?: boolean;
114
114
  caseFirst?: 'upper' | 'lower' | 'false';
115
- chooseAddressMappingPolicy?: WorkPaperChooseAddressMappingPolicy;
116
- context?: WorkPaperContextValue;
115
+ chooseAddressMappingPolicy?: WorkPaperChooseAddressMappingPolicy | undefined;
116
+ context?: WorkPaperContextValue | undefined;
117
117
  currencySymbol?: string[];
118
118
  dateFormats?: string[];
119
119
  functionArgSeparator?: string;
120
120
  decimalSeparator?: '.' | ',';
121
121
  evaluateNullToZero?: boolean;
122
+ evaluationTimeoutMs?: number | undefined;
122
123
  functionPlugins?: WorkPaperFunctionPluginDefinition[];
123
124
  ignorePunctuation?: boolean;
124
125
  language?: string;
@@ -137,11 +138,11 @@ export interface WorkPaperConfig {
137
138
  day: number;
138
139
  };
139
140
  nullYear?: number;
140
- parseDateTime?: WorkPaperParseDateTime;
141
+ parseDateTime?: WorkPaperParseDateTime | undefined;
141
142
  precisionEpsilon?: number;
142
143
  precisionRounding?: number;
143
- stringifyDateTime?: WorkPaperStringifyDateTime;
144
- stringifyDuration?: WorkPaperStringifyDuration;
144
+ stringifyDateTime?: WorkPaperStringifyDateTime | undefined;
145
+ stringifyDuration?: WorkPaperStringifyDuration | undefined;
145
146
  smartRounding?: boolean;
146
147
  thousandSeparator?: '' | ',' | '.';
147
148
  timeFormats?: string[];
@@ -0,0 +1,36 @@
1
+ import { type CellValue } from '@bilig/protocol';
2
+ import type { WorkPaperChange } from './work-paper-types.js';
3
+ export interface WorkPaperVisibilityCellStore {
4
+ readonly getValue: (cellIndex: number, readString: (id: number) => string) => CellValue;
5
+ }
6
+ export interface WorkPaperVisibilityStringPool {
7
+ readonly get: (id: number) => string;
8
+ }
9
+ export interface WorkPaperVisibilitySheetRecord {
10
+ readonly id: number;
11
+ readonly name: string;
12
+ readonly order: number;
13
+ readonly grid: {
14
+ readonly forEachCellEntry: (visit: (cellIndex: number, row: number, col: number) => void) => void;
15
+ };
16
+ }
17
+ export interface SheetStateSnapshot {
18
+ readonly sheetId: number;
19
+ readonly sheetName: string;
20
+ readonly order: number;
21
+ readonly cells: Map<number, CellValue>;
22
+ }
23
+ export type VisibilitySnapshot = Map<number, SheetStateSnapshot>;
24
+ export declare function captureWorkPaperVisibilitySnapshot(input: {
25
+ readonly sheets: readonly WorkPaperVisibilitySheetRecord[];
26
+ readonly cellStore: WorkPaperVisibilityCellStore;
27
+ readonly strings: WorkPaperVisibilityStringPool;
28
+ }): VisibilitySnapshot;
29
+ export declare function computeWorkPaperCellChangesFromVisibilitySnapshots(input: {
30
+ readonly beforeVisibility: VisibilitySnapshot;
31
+ readonly afterVisibility: VisibilitySnapshot;
32
+ readonly sheets: readonly {
33
+ readonly id: number;
34
+ readonly order: number;
35
+ }[];
36
+ }): WorkPaperChange[];
@@ -0,0 +1,62 @@
1
+ import { MAX_COLS, MAX_ROWS, ValueTag } from '@bilig/protocol';
2
+ import { formatAddress } from '@bilig/formula';
3
+ import { orderWorkPaperCellChanges } from './change-order.js';
4
+ import { emptyValue, valuesEqual } from './work-paper-runtime-helpers.js';
5
+ const VISIBILITY_SHEET_STRIDE = MAX_ROWS * MAX_COLS;
6
+ export function captureWorkPaperVisibilitySnapshot(input) {
7
+ const snapshot = new Map();
8
+ input.sheets.forEach((sheet) => {
9
+ const cells = new Map();
10
+ sheet.grid.forEachCellEntry((cellIndex, row, col) => {
11
+ const value = input.cellStore.getValue(cellIndex, (id) => input.strings.get(id));
12
+ if (value.tag === ValueTag.Empty) {
13
+ return;
14
+ }
15
+ cells.set(sheetCellVisibilityKey(sheet.id, row, col), value);
16
+ });
17
+ snapshot.set(sheet.id, {
18
+ sheetId: sheet.id,
19
+ sheetName: sheet.name,
20
+ order: sheet.order,
21
+ cells,
22
+ });
23
+ });
24
+ return snapshot;
25
+ }
26
+ export function computeWorkPaperCellChangesFromVisibilitySnapshots(input) {
27
+ const cellChanges = [];
28
+ input.afterVisibility.forEach((afterSheet, sheetId) => {
29
+ const beforeSheet = input.beforeVisibility.get(sheetId);
30
+ const cellKeys = new Set([...(beforeSheet?.cells.keys() ?? []), ...afterSheet.cells.keys()]);
31
+ [...cellKeys]
32
+ .toSorted((left, right) => left - right)
33
+ .forEach((cellKey) => {
34
+ const beforeValue = beforeSheet?.cells.get(cellKey) ?? emptyValue();
35
+ const afterValue = afterSheet.cells.get(cellKey) ?? emptyValue();
36
+ if (valuesEqual(beforeValue, afterValue)) {
37
+ return;
38
+ }
39
+ const { row, col } = visibilityKeyPosition(afterSheet.sheetId, cellKey);
40
+ const address = formatAddress(row, col);
41
+ cellChanges.push({
42
+ kind: 'cell',
43
+ address: { sheet: sheetId, row, col },
44
+ sheetName: afterSheet.sheetName,
45
+ a1: address,
46
+ newValue: afterValue,
47
+ });
48
+ });
49
+ });
50
+ return orderWorkPaperCellChanges(cellChanges, input.sheets);
51
+ }
52
+ function sheetCellVisibilityKey(sheetId, row, col) {
53
+ return sheetId * VISIBILITY_SHEET_STRIDE + row * MAX_COLS + col;
54
+ }
55
+ function visibilityKeyPosition(sheetId, cellKey) {
56
+ const localKey = cellKey - sheetId * VISIBILITY_SHEET_STRIDE;
57
+ return {
58
+ row: Math.floor(localKey / MAX_COLS),
59
+ col: localKey % MAX_COLS,
60
+ };
61
+ }
62
+ //# sourceMappingURL=work-paper-visibility-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-paper-visibility-snapshot.js","sourceRoot":"","sources":["../src/work-paper-visibility-snapshot.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,20 @@
1
1
  {
2
2
  "name": "@bilig/headless",
3
- "version": "0.8.0",
4
- "description": "WorkPaper spreadsheet workbook facade for bilig with HyperFormula-style workflows.",
3
+ "version": "0.8.2",
4
+ "description": "Headless spreadsheet engine and WorkPaper workbook facade for Node services, coding agents, and HyperFormula-style workflows.",
5
5
  "keywords": [
6
+ "agent",
7
+ "automation",
6
8
  "bilig",
7
9
  "formula",
10
+ "formula-engine",
8
11
  "headless",
12
+ "headless-spreadsheet",
13
+ "hyperformula",
14
+ "local-first",
15
+ "node",
9
16
  "spreadsheet",
17
+ "spreadsheet-engine",
10
18
  "workbook"
11
19
  ],
12
20
  "homepage": "https://github.com/proompteng/bilig/tree/main/packages/headless#readme",
@@ -41,9 +49,9 @@
41
49
  "build": "rm -rf dist tsconfig.tsbuildinfo && tsc -p tsconfig.json"
42
50
  },
43
51
  "dependencies": {
44
- "@bilig/core": "0.8.0",
45
- "@bilig/formula": "0.8.0",
46
- "@bilig/protocol": "0.8.0"
52
+ "@bilig/core": "0.8.2",
53
+ "@bilig/formula": "0.8.2",
54
+ "@bilig/protocol": "0.8.2"
47
55
  },
48
56
  "engines": {
49
57
  "node": ">=24.0.0"