@tanstack/table-core 9.0.0-beta.31 → 9.0.0-beta.33

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 (310) hide show
  1. package/dist/core/cells/constructCell.cjs +1 -4
  2. package/dist/core/cells/constructCell.cjs.map +1 -1
  3. package/dist/core/cells/constructCell.d.cts +1 -1
  4. package/dist/core/cells/constructCell.d.ts +1 -1
  5. package/dist/core/cells/constructCell.js +1 -4
  6. package/dist/core/cells/constructCell.js.map +1 -1
  7. package/dist/core/cells/coreCellsFeature.types.d.cts +1 -1
  8. package/dist/core/cells/coreCellsFeature.types.d.ts +1 -1
  9. package/dist/core/cells/coreCellsFeature.utils.d.cts +1 -1
  10. package/dist/core/cells/coreCellsFeature.utils.d.ts +1 -1
  11. package/dist/core/columns/constructColumn.cjs +3 -9
  12. package/dist/core/columns/constructColumn.cjs.map +1 -1
  13. package/dist/core/columns/constructColumn.js +3 -9
  14. package/dist/core/columns/constructColumn.js.map +1 -1
  15. package/dist/core/columns/coreColumnsFeature.cjs +12 -18
  16. package/dist/core/columns/coreColumnsFeature.cjs.map +1 -1
  17. package/dist/core/columns/coreColumnsFeature.js +12 -18
  18. package/dist/core/columns/coreColumnsFeature.js.map +1 -1
  19. package/dist/core/columns/coreColumnsFeature.utils.cjs +2 -6
  20. package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
  21. package/dist/core/columns/coreColumnsFeature.utils.js +2 -6
  22. package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
  23. package/dist/core/headers/buildHeaderGroups.cjs +1 -2
  24. package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
  25. package/dist/core/headers/buildHeaderGroups.js +1 -2
  26. package/dist/core/headers/buildHeaderGroups.js.map +1 -1
  27. package/dist/core/headers/constructHeader.cjs +1 -4
  28. package/dist/core/headers/constructHeader.cjs.map +1 -1
  29. package/dist/core/headers/constructHeader.js +1 -4
  30. package/dist/core/headers/constructHeader.js.map +1 -1
  31. package/dist/core/headers/coreHeadersFeature.cjs +8 -11
  32. package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
  33. package/dist/core/headers/coreHeadersFeature.js +8 -11
  34. package/dist/core/headers/coreHeadersFeature.js.map +1 -1
  35. package/dist/core/headers/coreHeadersFeature.utils.cjs +2 -4
  36. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  37. package/dist/core/headers/coreHeadersFeature.utils.js +2 -4
  38. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  39. package/dist/core/row-models/coreRowModelsFeature.types.d.cts +3 -3
  40. package/dist/core/row-models/coreRowModelsFeature.types.d.ts +3 -3
  41. package/dist/core/row-models/coreRowModelsFeature.utils.cjs +6 -24
  42. package/dist/core/row-models/coreRowModelsFeature.utils.cjs.map +1 -1
  43. package/dist/core/row-models/coreRowModelsFeature.utils.d.cts +1 -1
  44. package/dist/core/row-models/coreRowModelsFeature.utils.d.ts +1 -1
  45. package/dist/core/row-models/coreRowModelsFeature.utils.js +6 -24
  46. package/dist/core/row-models/coreRowModelsFeature.utils.js.map +1 -1
  47. package/dist/core/row-models/createCoreRowModel.cjs +2 -3
  48. package/dist/core/row-models/createCoreRowModel.cjs.map +1 -1
  49. package/dist/core/row-models/createCoreRowModel.d.cts +1 -1
  50. package/dist/core/row-models/createCoreRowModel.d.ts +1 -1
  51. package/dist/core/row-models/createCoreRowModel.js +2 -3
  52. package/dist/core/row-models/createCoreRowModel.js.map +1 -1
  53. package/dist/core/rows/constructRow.cjs +2 -8
  54. package/dist/core/rows/constructRow.cjs.map +1 -1
  55. package/dist/core/rows/constructRow.js +2 -8
  56. package/dist/core/rows/constructRow.js.map +1 -1
  57. package/dist/core/rows/coreRowsFeature.types.d.cts +1 -1
  58. package/dist/core/rows/coreRowsFeature.types.d.ts +1 -1
  59. package/dist/core/rows/coreRowsFeature.utils.cjs +3 -4
  60. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  61. package/dist/core/rows/coreRowsFeature.utils.d.cts +1 -1
  62. package/dist/core/rows/coreRowsFeature.utils.d.ts +1 -1
  63. package/dist/core/rows/coreRowsFeature.utils.js +3 -4
  64. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  65. package/dist/core/table/constructTable.cjs +4 -10
  66. package/dist/core/table/constructTable.cjs.map +1 -1
  67. package/dist/core/table/constructTable.js +4 -10
  68. package/dist/core/table/constructTable.js.map +1 -1
  69. package/dist/experimental-worker-plugin.cjs +14 -0
  70. package/dist/experimental-worker-plugin.d.cts +5 -0
  71. package/dist/experimental-worker-plugin.d.ts +5 -0
  72. package/dist/experimental-worker-plugin.js +6 -0
  73. package/dist/features/column-faceting/columnFacetingFeature.cjs +12 -18
  74. package/dist/features/column-faceting/columnFacetingFeature.cjs.map +1 -1
  75. package/dist/features/column-faceting/columnFacetingFeature.js +12 -18
  76. package/dist/features/column-faceting/columnFacetingFeature.js.map +1 -1
  77. package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +1 -1
  78. package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +1 -1
  79. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +7 -25
  80. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
  81. package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +1 -1
  82. package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +1 -1
  83. package/dist/features/column-faceting/columnFacetingFeature.utils.js +7 -25
  84. package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
  85. package/dist/features/column-faceting/createFacetedRowModel.cjs +8 -14
  86. package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
  87. package/dist/features/column-faceting/createFacetedRowModel.d.cts +1 -1
  88. package/dist/features/column-faceting/createFacetedRowModel.d.ts +1 -1
  89. package/dist/features/column-faceting/createFacetedRowModel.js +8 -14
  90. package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
  91. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +1 -1
  92. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +1 -1
  93. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +10 -13
  94. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  95. package/dist/features/column-filtering/columnFilteringFeature.utils.js +10 -13
  96. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  97. package/dist/features/column-filtering/createFilteredRowModel.cjs +12 -18
  98. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  99. package/dist/features/column-filtering/createFilteredRowModel.d.cts +1 -1
  100. package/dist/features/column-filtering/createFilteredRowModel.d.ts +1 -1
  101. package/dist/features/column-filtering/createFilteredRowModel.js +12 -18
  102. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  103. package/dist/features/column-grouping/columnGroupingFeature.cjs +1 -4
  104. package/dist/features/column-grouping/columnGroupingFeature.cjs.map +1 -1
  105. package/dist/features/column-grouping/columnGroupingFeature.js +1 -4
  106. package/dist/features/column-grouping/columnGroupingFeature.js.map +1 -1
  107. package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +4 -4
  108. package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +4 -4
  109. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +8 -13
  110. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
  111. package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +2 -2
  112. package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +2 -2
  113. package/dist/features/column-grouping/columnGroupingFeature.utils.js +8 -13
  114. package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
  115. package/dist/features/column-grouping/createGroupedRowModel.cjs +3 -7
  116. package/dist/features/column-grouping/createGroupedRowModel.cjs.map +1 -1
  117. package/dist/features/column-grouping/createGroupedRowModel.d.cts +1 -1
  118. package/dist/features/column-grouping/createGroupedRowModel.d.ts +1 -1
  119. package/dist/features/column-grouping/createGroupedRowModel.js +3 -7
  120. package/dist/features/column-grouping/createGroupedRowModel.js.map +1 -1
  121. package/dist/features/column-ordering/columnOrderingFeature.cjs +13 -19
  122. package/dist/features/column-ordering/columnOrderingFeature.cjs.map +1 -1
  123. package/dist/features/column-ordering/columnOrderingFeature.js +13 -19
  124. package/dist/features/column-ordering/columnOrderingFeature.js.map +1 -1
  125. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +6 -11
  126. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
  127. package/dist/features/column-ordering/columnOrderingFeature.utils.js +6 -11
  128. package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
  129. package/dist/features/column-pinning/columnPinningFeature.cjs +78 -114
  130. package/dist/features/column-pinning/columnPinningFeature.cjs.map +1 -1
  131. package/dist/features/column-pinning/columnPinningFeature.js +78 -114
  132. package/dist/features/column-pinning/columnPinningFeature.js.map +1 -1
  133. package/dist/features/column-pinning/columnPinningFeature.types.d.cts +1 -1
  134. package/dist/features/column-pinning/columnPinningFeature.types.d.ts +1 -1
  135. package/dist/features/column-pinning/columnPinningFeature.utils.cjs +15 -28
  136. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  137. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +2 -2
  138. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +2 -2
  139. package/dist/features/column-pinning/columnPinningFeature.utils.js +15 -28
  140. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  141. package/dist/features/column-resizing/columnResizingFeature.utils.cjs +12 -16
  142. package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
  143. package/dist/features/column-resizing/columnResizingFeature.utils.js +12 -16
  144. package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
  145. package/dist/features/column-sizing/columnSizingFeature.cjs +24 -48
  146. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  147. package/dist/features/column-sizing/columnSizingFeature.js +24 -48
  148. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  149. package/dist/features/column-sizing/columnSizingFeature.utils.cjs +11 -18
  150. package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
  151. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +1 -1
  152. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +1 -1
  153. package/dist/features/column-sizing/columnSizingFeature.utils.js +11 -18
  154. package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
  155. package/dist/features/column-visibility/columnVisibilityFeature.cjs +25 -40
  156. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  157. package/dist/features/column-visibility/columnVisibilityFeature.js +25 -40
  158. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  159. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +1 -1
  160. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +1 -1
  161. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +3 -6
  162. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  163. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +1 -1
  164. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +1 -1
  165. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +3 -6
  166. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  167. package/dist/features/global-filtering/globalFilteringFeature.cjs +1 -2
  168. package/dist/features/global-filtering/globalFilteringFeature.cjs.map +1 -1
  169. package/dist/features/global-filtering/globalFilteringFeature.js +1 -2
  170. package/dist/features/global-filtering/globalFilteringFeature.js.map +1 -1
  171. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +3 -5
  172. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  173. package/dist/features/global-filtering/globalFilteringFeature.utils.js +3 -5
  174. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  175. package/dist/features/row-expanding/createExpandedRowModel.cjs +6 -10
  176. package/dist/features/row-expanding/createExpandedRowModel.cjs.map +1 -1
  177. package/dist/features/row-expanding/createExpandedRowModel.d.cts +1 -1
  178. package/dist/features/row-expanding/createExpandedRowModel.d.ts +1 -1
  179. package/dist/features/row-expanding/createExpandedRowModel.js +6 -10
  180. package/dist/features/row-expanding/createExpandedRowModel.js.map +1 -1
  181. package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +1 -1
  182. package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +1 -1
  183. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +8 -15
  184. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  185. package/dist/features/row-expanding/rowExpandingFeature.utils.js +8 -15
  186. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  187. package/dist/features/row-pagination/createPaginatedRowModel.cjs +6 -10
  188. package/dist/features/row-pagination/createPaginatedRowModel.cjs.map +1 -1
  189. package/dist/features/row-pagination/createPaginatedRowModel.d.cts +1 -1
  190. package/dist/features/row-pagination/createPaginatedRowModel.d.ts +1 -1
  191. package/dist/features/row-pagination/createPaginatedRowModel.js +6 -10
  192. package/dist/features/row-pagination/createPaginatedRowModel.js.map +1 -1
  193. package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +1 -1
  194. package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +1 -1
  195. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs +8 -14
  196. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs.map +1 -1
  197. package/dist/features/row-pagination/rowPaginationFeature.utils.js +8 -14
  198. package/dist/features/row-pagination/rowPaginationFeature.utils.js.map +1 -1
  199. package/dist/features/row-pinning/rowPinningFeature.cjs +4 -16
  200. package/dist/features/row-pinning/rowPinningFeature.cjs.map +1 -1
  201. package/dist/features/row-pinning/rowPinningFeature.js +4 -16
  202. package/dist/features/row-pinning/rowPinningFeature.js.map +1 -1
  203. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +7 -12
  204. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  205. package/dist/features/row-pinning/rowPinningFeature.utils.js +7 -12
  206. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  207. package/dist/features/row-selection/rowSelectionFeature.cjs +30 -60
  208. package/dist/features/row-selection/rowSelectionFeature.cjs.map +1 -1
  209. package/dist/features/row-selection/rowSelectionFeature.js +30 -60
  210. package/dist/features/row-selection/rowSelectionFeature.js.map +1 -1
  211. package/dist/features/row-selection/rowSelectionFeature.types.d.cts +1 -1
  212. package/dist/features/row-selection/rowSelectionFeature.types.d.ts +1 -1
  213. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +10 -17
  214. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  215. package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +1 -1
  216. package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +1 -1
  217. package/dist/features/row-selection/rowSelectionFeature.utils.js +10 -17
  218. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  219. package/dist/features/row-sorting/createSortedRowModel.cjs +3 -7
  220. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  221. package/dist/features/row-sorting/createSortedRowModel.d.cts +1 -1
  222. package/dist/features/row-sorting/createSortedRowModel.d.ts +1 -1
  223. package/dist/features/row-sorting/createSortedRowModel.js +3 -7
  224. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  225. package/dist/features/row-sorting/rowSortingFeature.types.d.cts +2 -2
  226. package/dist/features/row-sorting/rowSortingFeature.types.d.ts +2 -2
  227. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +9 -13
  228. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  229. package/dist/features/row-sorting/rowSortingFeature.utils.js +9 -13
  230. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  231. package/dist/flex-render.d.cts +1 -1
  232. package/dist/flex-render.d.ts +1 -1
  233. package/dist/fns/filterFns.cjs +8 -12
  234. package/dist/fns/filterFns.cjs.map +1 -1
  235. package/dist/fns/filterFns.js +8 -12
  236. package/dist/fns/filterFns.js.map +1 -1
  237. package/dist/index.d.cts +16 -16
  238. package/dist/index.d.ts +16 -16
  239. package/dist/store-reactivity-bindings.cjs +2 -2
  240. package/dist/store-reactivity-bindings.cjs.map +1 -1
  241. package/dist/store-reactivity-bindings.js +2 -2
  242. package/dist/store-reactivity-bindings.js.map +1 -1
  243. package/dist/types/Cell.d.cts +1 -1
  244. package/dist/types/Cell.d.ts +1 -1
  245. package/dist/types/Column.d.cts +7 -7
  246. package/dist/types/Column.d.ts +7 -7
  247. package/dist/types/ColumnDef.d.cts +6 -6
  248. package/dist/types/ColumnDef.d.ts +6 -6
  249. package/dist/types/Header.d.cts +1 -1
  250. package/dist/types/Header.d.ts +1 -1
  251. package/dist/types/Row.d.cts +2 -2
  252. package/dist/types/Row.d.ts +2 -2
  253. package/dist/types/RowModel.d.cts +4 -4
  254. package/dist/types/RowModel.d.ts +4 -4
  255. package/dist/types/RowModelFns.d.cts +2 -2
  256. package/dist/types/RowModelFns.d.ts +2 -2
  257. package/dist/types/Table.d.cts +9 -9
  258. package/dist/types/Table.d.ts +9 -9
  259. package/dist/types/TableFeatures.d.cts +4 -4
  260. package/dist/types/TableFeatures.d.ts +4 -4
  261. package/dist/types/TableOptions.d.cts +7 -7
  262. package/dist/types/TableOptions.d.ts +7 -7
  263. package/dist/types/TableState.d.cts +6 -6
  264. package/dist/types/TableState.d.ts +6 -6
  265. package/dist/utils.cjs +9 -12
  266. package/dist/utils.cjs.map +1 -1
  267. package/dist/utils.js +9 -12
  268. package/dist/utils.js.map +1 -1
  269. package/dist/worker/createTableWorker.cjs +189 -0
  270. package/dist/worker/createTableWorker.cjs.map +1 -0
  271. package/dist/worker/createTableWorker.d.cts +102 -0
  272. package/dist/worker/createTableWorker.d.ts +102 -0
  273. package/dist/worker/createTableWorker.js +186 -0
  274. package/dist/worker/createTableWorker.js.map +1 -0
  275. package/dist/worker/createWorkerRowModel.cjs +78 -0
  276. package/dist/worker/createWorkerRowModel.cjs.map +1 -0
  277. package/dist/worker/createWorkerRowModel.d.cts +42 -0
  278. package/dist/worker/createWorkerRowModel.d.ts +42 -0
  279. package/dist/worker/createWorkerRowModel.js +78 -0
  280. package/dist/worker/createWorkerRowModel.js.map +1 -0
  281. package/dist/worker/initTableWorker.cjs +100 -0
  282. package/dist/worker/initTableWorker.cjs.map +1 -0
  283. package/dist/worker/initTableWorker.d.cts +33 -0
  284. package/dist/worker/initTableWorker.d.ts +33 -0
  285. package/dist/worker/initTableWorker.js +100 -0
  286. package/dist/worker/initTableWorker.js.map +1 -0
  287. package/dist/worker/rebuildRowModel.cjs +72 -0
  288. package/dist/worker/rebuildRowModel.cjs.map +1 -0
  289. package/dist/worker/rebuildRowModel.d.cts +9 -0
  290. package/dist/worker/rebuildRowModel.d.ts +9 -0
  291. package/dist/worker/rebuildRowModel.js +72 -0
  292. package/dist/worker/rebuildRowModel.js.map +1 -0
  293. package/dist/worker/serializeRowModel.cjs +53 -0
  294. package/dist/worker/serializeRowModel.cjs.map +1 -0
  295. package/dist/worker/serializeRowModel.js +52 -0
  296. package/dist/worker/serializeRowModel.js.map +1 -0
  297. package/dist/worker/tableWorkerProtocol.cjs +29 -0
  298. package/dist/worker/tableWorkerProtocol.cjs.map +1 -0
  299. package/dist/worker/tableWorkerProtocol.d.cts +88 -0
  300. package/dist/worker/tableWorkerProtocol.d.ts +88 -0
  301. package/dist/worker/tableWorkerProtocol.js +27 -0
  302. package/dist/worker/tableWorkerProtocol.js.map +1 -0
  303. package/package.json +6 -2
  304. package/src/experimental-worker-plugin.ts +22 -0
  305. package/src/worker/createTableWorker.ts +357 -0
  306. package/src/worker/createWorkerRowModel.ts +121 -0
  307. package/src/worker/initTableWorker.ts +164 -0
  308. package/src/worker/rebuildRowModel.ts +117 -0
  309. package/src/worker/serializeRowModel.ts +80 -0
  310. package/src/worker/tableWorkerProtocol.ts +105 -0
@@ -0,0 +1,100 @@
1
+ const require_utils = require('../utils.cjs');
2
+ const require_constructTable = require('../core/table/constructTable.cjs');
3
+ const require_store_reactivity_bindings = require('../store-reactivity-bindings.cjs');
4
+ const require_serializeRowModel = require('./serializeRowModel.cjs');
5
+
6
+ //#region src/worker/initTableWorker.ts
7
+ function capitalize(stage) {
8
+ return stage.charAt(0).toUpperCase() + stage.slice(1);
9
+ }
10
+ /** Flatten column-group defs to leaf defs (mirrors core's id resolution). */
11
+ function flattenColumnDefs(defs) {
12
+ return defs.flatMap((def) => def.columns ? flattenColumnDefs(def.columns) : [def]);
13
+ }
14
+ /**
15
+ * Runs a headless "shadow table" inside a dedicated Web Worker.
16
+ *
17
+ * Call this from a user-authored worker entry file, passing the same columns
18
+ * and processing features used on the main thread. The shadow table runs the
19
+ * real table-core row model pipeline (real fns, real Row objects) off the
20
+ * main thread and posts back one payload per stage the main thread requested:
21
+ * a transferable index permutation for flat results, a serialized row tree
22
+ * (with eagerly computed aggregates) when grouping produces synthetic rows.
23
+ *
24
+ * Everything passed here must be thread-portable: `accessorKey` columns or
25
+ * accessors defined in a shared module, and fns from registries or shared
26
+ * modules (no closures over app state).
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // table.worker.ts
31
+ * import { initTableWorker } from '@tanstack/table-core/experimental-worker-plugin'
32
+ * import { columns, sharedFeatures } from './tableConfig'
33
+ *
34
+ * initTableWorker({ features: sharedFeatures, columns })
35
+ * ```
36
+ */
37
+ function initTableWorker(config) {
38
+ let table;
39
+ let dataVersion = 0;
40
+ let coreIndexById = require_utils.makeObjectMap();
41
+ let aggregateColumnIds = [];
42
+ let lastSentModels = {};
43
+ self.onmessage = (event) => {
44
+ const message = event.data;
45
+ if (message.type === "data") {
46
+ dataVersion = message.dataVersion;
47
+ lastSentModels = {};
48
+ if (!table) {
49
+ table = require_constructTable.constructTable({
50
+ ...config,
51
+ features: {
52
+ coreReactivityFeature: require_store_reactivity_bindings.storeReactivityBindings(),
53
+ ...config.features
54
+ },
55
+ data: message.data
56
+ });
57
+ aggregateColumnIds = flattenColumnDefs(config.columns).filter((def) => def.aggregationFn != null || def.aggregatedCell != null).map((def) => def.id ?? (typeof def.accessorKey === "string" ? def.accessorKey.replaceAll(".", "_") : void 0)).filter((id) => id != null);
58
+ } else table.setOptions((prev) => ({
59
+ ...prev,
60
+ data: message.data
61
+ }));
62
+ const coreFlatRows = table.getCoreRowModel().flatRows;
63
+ coreIndexById = require_utils.makeObjectMap();
64
+ for (let i = 0; i < coreFlatRows.length; i++) coreIndexById[coreFlatRows[i].id] = i;
65
+ return;
66
+ }
67
+ if (!table) return;
68
+ const start = performance.now();
69
+ table._reactivity.batch(() => {
70
+ for (const [key, value] of Object.entries(message.state)) {
71
+ const baseAtom = table.baseAtoms[key];
72
+ if (baseAtom && value !== void 0) baseAtom.set(value);
73
+ }
74
+ });
75
+ const stages = {};
76
+ const transfer = [];
77
+ for (const stage of message.stages) {
78
+ if (!config.features[`${stage}RowModel`]) continue;
79
+ const model = table[`get${capitalize(stage)}RowModel`]();
80
+ if (lastSentModels[stage] === model) {
81
+ stages[stage] = { kind: "unchanged" };
82
+ continue;
83
+ }
84
+ lastSentModels[stage] = model;
85
+ stages[stage] = require_serializeRowModel.serializeRowModel(model, coreIndexById, aggregateColumnIds, transfer);
86
+ }
87
+ const response = {
88
+ type: "result",
89
+ requestId: message.requestId,
90
+ dataVersion,
91
+ stages,
92
+ computeMs: performance.now() - start
93
+ };
94
+ postMessage(response, { transfer });
95
+ };
96
+ }
97
+
98
+ //#endregion
99
+ exports.initTableWorker = initTableWorker;
100
+ //# sourceMappingURL=initTableWorker.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initTableWorker.cjs","names":["makeObjectMap","constructTable","storeReactivityBindings","serializeRowModel"],"sources":["../../src/worker/initTableWorker.ts"],"sourcesContent":["import { constructTable } from '../core/table/constructTable'\nimport { storeReactivityBindings } from '../store-reactivity-bindings'\nimport { makeObjectMap } from '../utils'\nimport { serializeRowModel } from './serializeRowModel'\nimport type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { TableOptions } from '../types/TableOptions'\nimport type { Table_Internal } from '../types/Table'\nimport type {\n TableWorkerRequest,\n TableWorkerResult,\n TableWorkerStage,\n TableWorkerStagePayload,\n} from './tableWorkerProtocol'\n\nexport type TableWorkerConfig<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = Omit<TableOptions<TFeatures, TData>, 'data'>\n\nfunction capitalize(stage: string) {\n return stage.charAt(0).toUpperCase() + stage.slice(1)\n}\n\n/** Flatten column-group defs to leaf defs (mirrors core's id resolution). */\nfunction flattenColumnDefs(defs: Array<any>): Array<any> {\n return defs.flatMap((def) =>\n def.columns ? flattenColumnDefs(def.columns) : [def],\n )\n}\n\n/**\n * Runs a headless \"shadow table\" inside a dedicated Web Worker.\n *\n * Call this from a user-authored worker entry file, passing the same columns\n * and processing features used on the main thread. The shadow table runs the\n * real table-core row model pipeline (real fns, real Row objects) off the\n * main thread and posts back one payload per stage the main thread requested:\n * a transferable index permutation for flat results, a serialized row tree\n * (with eagerly computed aggregates) when grouping produces synthetic rows.\n *\n * Everything passed here must be thread-portable: `accessorKey` columns or\n * accessors defined in a shared module, and fns from registries or shared\n * modules (no closures over app state).\n *\n * @example\n * ```ts\n * // table.worker.ts\n * import { initTableWorker } from '@tanstack/table-core/experimental-worker-plugin'\n * import { columns, sharedFeatures } from './tableConfig'\n *\n * initTableWorker({ features: sharedFeatures, columns })\n * ```\n */\nexport function initTableWorker<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(config: TableWorkerConfig<TFeatures, TData>): void {\n let table: Table_Internal<TFeatures, TData> | undefined\n let dataVersion = 0\n let coreIndexById: Record<string, number> = makeObjectMap()\n let aggregateColumnIds: Array<string> = []\n // Last-sent model identity per stage: the memoized getters return stable\n // objects when their inputs did not change, so identity equality is exactly\n // \"this stage's result is unchanged\".\n let lastSentModels: { [K in TableWorkerStage]?: unknown } = {}\n\n self.onmessage = (event: MessageEvent<TableWorkerRequest<TData>>) => {\n const message = event.data\n\n if (message.type === 'data') {\n dataVersion = message.dataVersion\n lastSentModels = {}\n if (!table) {\n table = constructTable<TFeatures, TData>({\n ...(config as TableOptions<TFeatures, TData>),\n features: {\n coreReactivityFeature: storeReactivityBindings(),\n ...config.features,\n },\n data: message.data,\n }) as unknown as Table_Internal<TFeatures, TData>\n // Only columns with an explicit aggregation get eagerly aggregated\n // per group. Sync tables aggregate lazily (visible cells only), so\n // auto-aggregating every column would explode on high-cardinality\n // grouping for values nothing renders. Read the RAW column defs:\n // columnGroupingFeature injects default aggregatedCell/aggregationFn\n // into every resolved columnDef, so the resolved defs can't tell\n // explicit from default.\n aggregateColumnIds = flattenColumnDefs(config.columns as Array<any>)\n .filter(\n (def) => def.aggregationFn != null || def.aggregatedCell != null,\n )\n .map(\n (def) =>\n def.id ??\n (typeof def.accessorKey === 'string'\n ? def.accessorKey.replaceAll('.', '_')\n : undefined),\n )\n .filter((id): id is string => id != null)\n } else {\n table.setOptions((prev) => ({ ...prev, data: message.data }))\n }\n // Map row ids to data positions once per dataset; serialization uses it\n // to express every stage result in terms of core row positions.\n const coreFlatRows = table.getCoreRowModel().flatRows\n coreIndexById = makeObjectMap()\n for (let i = 0; i < coreFlatRows.length; i++) {\n coreIndexById[coreFlatRows[i]!.id] = i\n }\n return\n }\n\n if (!table) return\n\n const start = performance.now()\n\n // Apply the serializable state slices to the shadow table's base atoms.\n table._reactivity.batch(() => {\n for (const [key, value] of Object.entries(message.state)) {\n const baseAtom = (table!.baseAtoms as Record<string, any>)[key]\n if (baseAtom && value !== undefined) {\n baseAtom.set(value)\n }\n }\n })\n\n // Compute exactly the stages the main thread requested, skipping any this\n // shadow table has no row model factory for (the main thread warns).\n const stages: { [K in TableWorkerStage]?: TableWorkerStagePayload } = {}\n const transfer: Array<Transferable> = []\n\n for (const stage of message.stages) {\n if (!(config.features as Record<string, unknown>)[`${stage}RowModel`]) {\n continue\n }\n const model = (table as any)[`get${capitalize(stage)}RowModel`]()\n // Memoized getters return the same object when inputs are unchanged;\n // skip re-serializing (and the main thread skips rebuilding). Safe under\n // single-flight: results are never dropped within a dataVersion.\n if (lastSentModels[stage] === model) {\n stages[stage] = { kind: 'unchanged' }\n continue\n }\n lastSentModels[stage] = model\n stages[stage] = serializeRowModel(\n model,\n coreIndexById,\n aggregateColumnIds,\n transfer,\n )\n }\n\n const response: TableWorkerResult = {\n type: 'result',\n requestId: message.requestId,\n dataVersion,\n stages,\n computeMs: performance.now() - start,\n }\n postMessage(response, { transfer })\n }\n}\n"],"mappings":";;;;;;AAoBA,SAAS,WAAW,OAAe;CACjC,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC;AACtD;;AAGA,SAAS,kBAAkB,MAA8B;CACvD,OAAO,KAAK,SAAS,QACnB,IAAI,UAAU,kBAAkB,IAAI,OAAO,IAAI,CAAC,GAAG,CACrD;AACF;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,gBAGd,QAAmD;CACnD,IAAI;CACJ,IAAI,cAAc;CAClB,IAAI,gBAAwCA,4BAAc;CAC1D,IAAI,qBAAoC,CAAC;CAIzC,IAAI,iBAAwD,CAAC;CAE7D,KAAK,aAAa,UAAmD;EACnE,MAAM,UAAU,MAAM;EAEtB,IAAI,QAAQ,SAAS,QAAQ;GAC3B,cAAc,QAAQ;GACtB,iBAAiB,CAAC;GAClB,IAAI,CAAC,OAAO;IACV,QAAQC,sCAAiC;KACvC,GAAI;KACJ,UAAU;MACR,uBAAuBC,0DAAwB;MAC/C,GAAG,OAAO;KACZ;KACA,MAAM,QAAQ;IAChB,CAAC;IAQD,qBAAqB,kBAAkB,OAAO,OAAqB,CAAC,CACjE,QACE,QAAQ,IAAI,iBAAiB,QAAQ,IAAI,kBAAkB,IAC9D,CAAC,CACA,KACE,QACC,IAAI,OACH,OAAO,IAAI,gBAAgB,WACxB,IAAI,YAAY,WAAW,KAAK,GAAG,IACnC,OACR,CAAC,CACA,QAAQ,OAAqB,MAAM,IAAI;GAC5C,OACE,MAAM,YAAY,UAAU;IAAE,GAAG;IAAM,MAAM,QAAQ;GAAK,EAAE;GAI9D,MAAM,eAAe,MAAM,gBAAgB,CAAC,CAAC;GAC7C,gBAAgBF,4BAAc;GAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KACvC,cAAc,aAAa,EAAE,CAAE,MAAM;GAEvC;EACF;EAEA,IAAI,CAAC,OAAO;EAEZ,MAAM,QAAQ,YAAY,IAAI;EAG9B,MAAM,YAAY,YAAY;GAC5B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,KAAK,GAAG;IACxD,MAAM,WAAY,MAAO,UAAkC;IAC3D,IAAI,YAAY,UAAU,QACxB,SAAS,IAAI,KAAK;GAEtB;EACF,CAAC;EAID,MAAM,SAAgE,CAAC;EACvE,MAAM,WAAgC,CAAC;EAEvC,KAAK,MAAM,SAAS,QAAQ,QAAQ;GAClC,IAAI,CAAE,OAAO,SAAqC,GAAG,MAAM,YACzD;GAEF,MAAM,QAAS,MAAc,MAAM,WAAW,KAAK,EAAE,UAAU,CAAC;GAIhE,IAAI,eAAe,WAAW,OAAO;IACnC,OAAO,SAAS,EAAE,MAAM,YAAY;IACpC;GACF;GACA,eAAe,SAAS;GACxB,OAAO,SAASG,4CACd,OACA,eACA,oBACA,QACF;EACF;EAEA,MAAM,WAA8B;GAClC,MAAM;GACN,WAAW,QAAQ;GACnB;GACA;GACA,WAAW,YAAY,IAAI,IAAI;EACjC;EACA,YAAY,UAAU,EAAE,SAAS,CAAC;CACpC;AACF"}
@@ -0,0 +1,33 @@
1
+ import { RowData } from "../types/type-utils.cjs";
2
+ import { TableOptions } from "../types/TableOptions.cjs";
3
+ import { TableFeatures } from "../types/TableFeatures.cjs";
4
+
5
+ //#region src/worker/initTableWorker.d.ts
6
+ type TableWorkerConfig<TFeatures extends TableFeatures, TData extends RowData> = Omit<TableOptions<TFeatures, TData>, 'data'>;
7
+ /**
8
+ * Runs a headless "shadow table" inside a dedicated Web Worker.
9
+ *
10
+ * Call this from a user-authored worker entry file, passing the same columns
11
+ * and processing features used on the main thread. The shadow table runs the
12
+ * real table-core row model pipeline (real fns, real Row objects) off the
13
+ * main thread and posts back one payload per stage the main thread requested:
14
+ * a transferable index permutation for flat results, a serialized row tree
15
+ * (with eagerly computed aggregates) when grouping produces synthetic rows.
16
+ *
17
+ * Everything passed here must be thread-portable: `accessorKey` columns or
18
+ * accessors defined in a shared module, and fns from registries or shared
19
+ * modules (no closures over app state).
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * // table.worker.ts
24
+ * import { initTableWorker } from '@tanstack/table-core/experimental-worker-plugin'
25
+ * import { columns, sharedFeatures } from './tableConfig'
26
+ *
27
+ * initTableWorker({ features: sharedFeatures, columns })
28
+ * ```
29
+ */
30
+ declare function initTableWorker<TFeatures extends TableFeatures, TData extends RowData>(config: TableWorkerConfig<TFeatures, TData>): void;
31
+ //#endregion
32
+ export { TableWorkerConfig, initTableWorker };
33
+ //# sourceMappingURL=initTableWorker.d.cts.map
@@ -0,0 +1,33 @@
1
+ import { RowData } from "../types/type-utils.js";
2
+ import { TableOptions } from "../types/TableOptions.js";
3
+ import { TableFeatures } from "../types/TableFeatures.js";
4
+
5
+ //#region src/worker/initTableWorker.d.ts
6
+ type TableWorkerConfig<TFeatures extends TableFeatures, TData extends RowData> = Omit<TableOptions<TFeatures, TData>, 'data'>;
7
+ /**
8
+ * Runs a headless "shadow table" inside a dedicated Web Worker.
9
+ *
10
+ * Call this from a user-authored worker entry file, passing the same columns
11
+ * and processing features used on the main thread. The shadow table runs the
12
+ * real table-core row model pipeline (real fns, real Row objects) off the
13
+ * main thread and posts back one payload per stage the main thread requested:
14
+ * a transferable index permutation for flat results, a serialized row tree
15
+ * (with eagerly computed aggregates) when grouping produces synthetic rows.
16
+ *
17
+ * Everything passed here must be thread-portable: `accessorKey` columns or
18
+ * accessors defined in a shared module, and fns from registries or shared
19
+ * modules (no closures over app state).
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * // table.worker.ts
24
+ * import { initTableWorker } from '@tanstack/table-core/experimental-worker-plugin'
25
+ * import { columns, sharedFeatures } from './tableConfig'
26
+ *
27
+ * initTableWorker({ features: sharedFeatures, columns })
28
+ * ```
29
+ */
30
+ declare function initTableWorker<TFeatures extends TableFeatures, TData extends RowData>(config: TableWorkerConfig<TFeatures, TData>): void;
31
+ //#endregion
32
+ export { TableWorkerConfig, initTableWorker };
33
+ //# sourceMappingURL=initTableWorker.d.ts.map
@@ -0,0 +1,100 @@
1
+ import { makeObjectMap } from "../utils.js";
2
+ import { constructTable } from "../core/table/constructTable.js";
3
+ import { storeReactivityBindings } from "../store-reactivity-bindings.js";
4
+ import { serializeRowModel } from "./serializeRowModel.js";
5
+
6
+ //#region src/worker/initTableWorker.ts
7
+ function capitalize(stage) {
8
+ return stage.charAt(0).toUpperCase() + stage.slice(1);
9
+ }
10
+ /** Flatten column-group defs to leaf defs (mirrors core's id resolution). */
11
+ function flattenColumnDefs(defs) {
12
+ return defs.flatMap((def) => def.columns ? flattenColumnDefs(def.columns) : [def]);
13
+ }
14
+ /**
15
+ * Runs a headless "shadow table" inside a dedicated Web Worker.
16
+ *
17
+ * Call this from a user-authored worker entry file, passing the same columns
18
+ * and processing features used on the main thread. The shadow table runs the
19
+ * real table-core row model pipeline (real fns, real Row objects) off the
20
+ * main thread and posts back one payload per stage the main thread requested:
21
+ * a transferable index permutation for flat results, a serialized row tree
22
+ * (with eagerly computed aggregates) when grouping produces synthetic rows.
23
+ *
24
+ * Everything passed here must be thread-portable: `accessorKey` columns or
25
+ * accessors defined in a shared module, and fns from registries or shared
26
+ * modules (no closures over app state).
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // table.worker.ts
31
+ * import { initTableWorker } from '@tanstack/table-core/experimental-worker-plugin'
32
+ * import { columns, sharedFeatures } from './tableConfig'
33
+ *
34
+ * initTableWorker({ features: sharedFeatures, columns })
35
+ * ```
36
+ */
37
+ function initTableWorker(config) {
38
+ let table;
39
+ let dataVersion = 0;
40
+ let coreIndexById = makeObjectMap();
41
+ let aggregateColumnIds = [];
42
+ let lastSentModels = {};
43
+ self.onmessage = (event) => {
44
+ const message = event.data;
45
+ if (message.type === "data") {
46
+ dataVersion = message.dataVersion;
47
+ lastSentModels = {};
48
+ if (!table) {
49
+ table = constructTable({
50
+ ...config,
51
+ features: {
52
+ coreReactivityFeature: storeReactivityBindings(),
53
+ ...config.features
54
+ },
55
+ data: message.data
56
+ });
57
+ aggregateColumnIds = flattenColumnDefs(config.columns).filter((def) => def.aggregationFn != null || def.aggregatedCell != null).map((def) => def.id ?? (typeof def.accessorKey === "string" ? def.accessorKey.replaceAll(".", "_") : void 0)).filter((id) => id != null);
58
+ } else table.setOptions((prev) => ({
59
+ ...prev,
60
+ data: message.data
61
+ }));
62
+ const coreFlatRows = table.getCoreRowModel().flatRows;
63
+ coreIndexById = makeObjectMap();
64
+ for (let i = 0; i < coreFlatRows.length; i++) coreIndexById[coreFlatRows[i].id] = i;
65
+ return;
66
+ }
67
+ if (!table) return;
68
+ const start = performance.now();
69
+ table._reactivity.batch(() => {
70
+ for (const [key, value] of Object.entries(message.state)) {
71
+ const baseAtom = table.baseAtoms[key];
72
+ if (baseAtom && value !== void 0) baseAtom.set(value);
73
+ }
74
+ });
75
+ const stages = {};
76
+ const transfer = [];
77
+ for (const stage of message.stages) {
78
+ if (!config.features[`${stage}RowModel`]) continue;
79
+ const model = table[`get${capitalize(stage)}RowModel`]();
80
+ if (lastSentModels[stage] === model) {
81
+ stages[stage] = { kind: "unchanged" };
82
+ continue;
83
+ }
84
+ lastSentModels[stage] = model;
85
+ stages[stage] = serializeRowModel(model, coreIndexById, aggregateColumnIds, transfer);
86
+ }
87
+ const response = {
88
+ type: "result",
89
+ requestId: message.requestId,
90
+ dataVersion,
91
+ stages,
92
+ computeMs: performance.now() - start
93
+ };
94
+ postMessage(response, { transfer });
95
+ };
96
+ }
97
+
98
+ //#endregion
99
+ export { initTableWorker };
100
+ //# sourceMappingURL=initTableWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initTableWorker.js","names":[],"sources":["../../src/worker/initTableWorker.ts"],"sourcesContent":["import { constructTable } from '../core/table/constructTable'\nimport { storeReactivityBindings } from '../store-reactivity-bindings'\nimport { makeObjectMap } from '../utils'\nimport { serializeRowModel } from './serializeRowModel'\nimport type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { TableOptions } from '../types/TableOptions'\nimport type { Table_Internal } from '../types/Table'\nimport type {\n TableWorkerRequest,\n TableWorkerResult,\n TableWorkerStage,\n TableWorkerStagePayload,\n} from './tableWorkerProtocol'\n\nexport type TableWorkerConfig<\n TFeatures extends TableFeatures,\n TData extends RowData,\n> = Omit<TableOptions<TFeatures, TData>, 'data'>\n\nfunction capitalize(stage: string) {\n return stage.charAt(0).toUpperCase() + stage.slice(1)\n}\n\n/** Flatten column-group defs to leaf defs (mirrors core's id resolution). */\nfunction flattenColumnDefs(defs: Array<any>): Array<any> {\n return defs.flatMap((def) =>\n def.columns ? flattenColumnDefs(def.columns) : [def],\n )\n}\n\n/**\n * Runs a headless \"shadow table\" inside a dedicated Web Worker.\n *\n * Call this from a user-authored worker entry file, passing the same columns\n * and processing features used on the main thread. The shadow table runs the\n * real table-core row model pipeline (real fns, real Row objects) off the\n * main thread and posts back one payload per stage the main thread requested:\n * a transferable index permutation for flat results, a serialized row tree\n * (with eagerly computed aggregates) when grouping produces synthetic rows.\n *\n * Everything passed here must be thread-portable: `accessorKey` columns or\n * accessors defined in a shared module, and fns from registries or shared\n * modules (no closures over app state).\n *\n * @example\n * ```ts\n * // table.worker.ts\n * import { initTableWorker } from '@tanstack/table-core/experimental-worker-plugin'\n * import { columns, sharedFeatures } from './tableConfig'\n *\n * initTableWorker({ features: sharedFeatures, columns })\n * ```\n */\nexport function initTableWorker<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(config: TableWorkerConfig<TFeatures, TData>): void {\n let table: Table_Internal<TFeatures, TData> | undefined\n let dataVersion = 0\n let coreIndexById: Record<string, number> = makeObjectMap()\n let aggregateColumnIds: Array<string> = []\n // Last-sent model identity per stage: the memoized getters return stable\n // objects when their inputs did not change, so identity equality is exactly\n // \"this stage's result is unchanged\".\n let lastSentModels: { [K in TableWorkerStage]?: unknown } = {}\n\n self.onmessage = (event: MessageEvent<TableWorkerRequest<TData>>) => {\n const message = event.data\n\n if (message.type === 'data') {\n dataVersion = message.dataVersion\n lastSentModels = {}\n if (!table) {\n table = constructTable<TFeatures, TData>({\n ...(config as TableOptions<TFeatures, TData>),\n features: {\n coreReactivityFeature: storeReactivityBindings(),\n ...config.features,\n },\n data: message.data,\n }) as unknown as Table_Internal<TFeatures, TData>\n // Only columns with an explicit aggregation get eagerly aggregated\n // per group. Sync tables aggregate lazily (visible cells only), so\n // auto-aggregating every column would explode on high-cardinality\n // grouping for values nothing renders. Read the RAW column defs:\n // columnGroupingFeature injects default aggregatedCell/aggregationFn\n // into every resolved columnDef, so the resolved defs can't tell\n // explicit from default.\n aggregateColumnIds = flattenColumnDefs(config.columns as Array<any>)\n .filter(\n (def) => def.aggregationFn != null || def.aggregatedCell != null,\n )\n .map(\n (def) =>\n def.id ??\n (typeof def.accessorKey === 'string'\n ? def.accessorKey.replaceAll('.', '_')\n : undefined),\n )\n .filter((id): id is string => id != null)\n } else {\n table.setOptions((prev) => ({ ...prev, data: message.data }))\n }\n // Map row ids to data positions once per dataset; serialization uses it\n // to express every stage result in terms of core row positions.\n const coreFlatRows = table.getCoreRowModel().flatRows\n coreIndexById = makeObjectMap()\n for (let i = 0; i < coreFlatRows.length; i++) {\n coreIndexById[coreFlatRows[i]!.id] = i\n }\n return\n }\n\n if (!table) return\n\n const start = performance.now()\n\n // Apply the serializable state slices to the shadow table's base atoms.\n table._reactivity.batch(() => {\n for (const [key, value] of Object.entries(message.state)) {\n const baseAtom = (table!.baseAtoms as Record<string, any>)[key]\n if (baseAtom && value !== undefined) {\n baseAtom.set(value)\n }\n }\n })\n\n // Compute exactly the stages the main thread requested, skipping any this\n // shadow table has no row model factory for (the main thread warns).\n const stages: { [K in TableWorkerStage]?: TableWorkerStagePayload } = {}\n const transfer: Array<Transferable> = []\n\n for (const stage of message.stages) {\n if (!(config.features as Record<string, unknown>)[`${stage}RowModel`]) {\n continue\n }\n const model = (table as any)[`get${capitalize(stage)}RowModel`]()\n // Memoized getters return the same object when inputs are unchanged;\n // skip re-serializing (and the main thread skips rebuilding). Safe under\n // single-flight: results are never dropped within a dataVersion.\n if (lastSentModels[stage] === model) {\n stages[stage] = { kind: 'unchanged' }\n continue\n }\n lastSentModels[stage] = model\n stages[stage] = serializeRowModel(\n model,\n coreIndexById,\n aggregateColumnIds,\n transfer,\n )\n }\n\n const response: TableWorkerResult = {\n type: 'result',\n requestId: message.requestId,\n dataVersion,\n stages,\n computeMs: performance.now() - start,\n }\n postMessage(response, { transfer })\n }\n}\n"],"mappings":";;;;;;AAoBA,SAAS,WAAW,OAAe;CACjC,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC;AACtD;;AAGA,SAAS,kBAAkB,MAA8B;CACvD,OAAO,KAAK,SAAS,QACnB,IAAI,UAAU,kBAAkB,IAAI,OAAO,IAAI,CAAC,GAAG,CACrD;AACF;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,gBAGd,QAAmD;CACnD,IAAI;CACJ,IAAI,cAAc;CAClB,IAAI,gBAAwC,cAAc;CAC1D,IAAI,qBAAoC,CAAC;CAIzC,IAAI,iBAAwD,CAAC;CAE7D,KAAK,aAAa,UAAmD;EACnE,MAAM,UAAU,MAAM;EAEtB,IAAI,QAAQ,SAAS,QAAQ;GAC3B,cAAc,QAAQ;GACtB,iBAAiB,CAAC;GAClB,IAAI,CAAC,OAAO;IACV,QAAQ,eAAiC;KACvC,GAAI;KACJ,UAAU;MACR,uBAAuB,wBAAwB;MAC/C,GAAG,OAAO;KACZ;KACA,MAAM,QAAQ;IAChB,CAAC;IAQD,qBAAqB,kBAAkB,OAAO,OAAqB,CAAC,CACjE,QACE,QAAQ,IAAI,iBAAiB,QAAQ,IAAI,kBAAkB,IAC9D,CAAC,CACA,KACE,QACC,IAAI,OACH,OAAO,IAAI,gBAAgB,WACxB,IAAI,YAAY,WAAW,KAAK,GAAG,IACnC,OACR,CAAC,CACA,QAAQ,OAAqB,MAAM,IAAI;GAC5C,OACE,MAAM,YAAY,UAAU;IAAE,GAAG;IAAM,MAAM,QAAQ;GAAK,EAAE;GAI9D,MAAM,eAAe,MAAM,gBAAgB,CAAC,CAAC;GAC7C,gBAAgB,cAAc;GAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KACvC,cAAc,aAAa,EAAE,CAAE,MAAM;GAEvC;EACF;EAEA,IAAI,CAAC,OAAO;EAEZ,MAAM,QAAQ,YAAY,IAAI;EAG9B,MAAM,YAAY,YAAY;GAC5B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,KAAK,GAAG;IACxD,MAAM,WAAY,MAAO,UAAkC;IAC3D,IAAI,YAAY,UAAU,QACxB,SAAS,IAAI,KAAK;GAEtB;EACF,CAAC;EAID,MAAM,SAAgE,CAAC;EACvE,MAAM,WAAgC,CAAC;EAEvC,KAAK,MAAM,SAAS,QAAQ,QAAQ;GAClC,IAAI,CAAE,OAAO,SAAqC,GAAG,MAAM,YACzD;GAEF,MAAM,QAAS,MAAc,MAAM,WAAW,KAAK,EAAE,UAAU,CAAC;GAIhE,IAAI,eAAe,WAAW,OAAO;IACnC,OAAO,SAAS,EAAE,MAAM,YAAY;IACpC;GACF;GACA,eAAe,SAAS;GACxB,OAAO,SAAS,kBACd,OACA,eACA,oBACA,QACF;EACF;EAEA,MAAM,WAA8B;GAClC,MAAM;GACN,WAAW,QAAQ;GACnB;GACA;GACA,WAAW,YAAY,IAAI,IAAI;EACjC;EACA,YAAY,UAAU,EAAE,SAAS,CAAC;CACpC;AACF"}
@@ -0,0 +1,72 @@
1
+ const require_utils = require('../utils.cjs');
2
+ const require_constructRow = require('../core/rows/constructRow.cjs');
3
+
4
+ //#region src/worker/rebuildRowModel.ts
5
+ function collectLeafRows(subRows, out) {
6
+ for (let i = 0; i < subRows.length; i++) {
7
+ const row = subRows[i];
8
+ if (row.groupingColumnId == null) out.push(row);
9
+ else collectLeafRows(row.subRows, out);
10
+ }
11
+ }
12
+ function rebuildRowModel(table, payload, resetDepths) {
13
+ const core = table.getCoreRowModel();
14
+ if (payload.kind === "flat") {
15
+ const { indices } = payload;
16
+ const rows = new Array(indices.length);
17
+ for (let i = 0; i < indices.length; i++) {
18
+ const row = core.flatRows[indices[i]];
19
+ if (resetDepths) {
20
+ row.depth = 0;
21
+ row.parentId = void 0;
22
+ }
23
+ rows[i] = row;
24
+ }
25
+ return {
26
+ rows,
27
+ flatRows: rows,
28
+ rowsById: core.rowsById
29
+ };
30
+ }
31
+ const flatRows = [];
32
+ const rowsById = Object.create(core.rowsById);
33
+ const rebuildRows = (nodes, depth, parentId) => {
34
+ const rows = new Array(nodes.length);
35
+ for (let i = 0; i < nodes.length; i++) {
36
+ const node = nodes[i];
37
+ if (typeof node === "number") {
38
+ const row = core.flatRows[node];
39
+ row.depth = depth;
40
+ row.parentId = parentId;
41
+ flatRows.push(row);
42
+ rows[i] = row;
43
+ continue;
44
+ }
45
+ const subRows = rebuildRows(node.children, depth + 1, node.id);
46
+ const leafRows = [];
47
+ collectLeafRows(subRows, leafRows);
48
+ const row = require_constructRow.constructRow(table, node.id, leafRows[0]?.original, node.index, depth, void 0, parentId);
49
+ const aggregates = node.aggregates;
50
+ Object.assign(row, {
51
+ groupingColumnId: node.groupingColumnId,
52
+ groupingValue: node.groupingValue,
53
+ subRows,
54
+ leafRows,
55
+ getValue: (columnId) => require_utils.hasOwn(aggregates, columnId) ? aggregates[columnId] : void 0
56
+ });
57
+ flatRows.push(row);
58
+ rowsById[node.id] = row;
59
+ rows[i] = row;
60
+ }
61
+ return rows;
62
+ };
63
+ return {
64
+ rows: rebuildRows(payload.children, 0, void 0),
65
+ flatRows,
66
+ rowsById
67
+ };
68
+ }
69
+
70
+ //#endregion
71
+ exports.rebuildRowModel = rebuildRowModel;
72
+ //# sourceMappingURL=rebuildRowModel.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rebuildRowModel.cjs","names":["constructRow","hasOwn"],"sources":["../../src/worker/rebuildRowModel.ts"],"sourcesContent":["import { constructRow } from '../core/rows/constructRow'\nimport { hasOwn } from '../utils'\nimport type { RowModel } from '../core/row-models/coreRowModelsFeature.types'\nimport type { Table_Internal } from '../types/Table'\nimport type {\n TableWorkerRowNode,\n TableWorkerStagePayload,\n} from './tableWorkerProtocol'\n\n/** Payloads that carry data; `unchanged` never reaches the rebuilder. */\nexport type TableWorkerDataPayload = Exclude<\n TableWorkerStagePayload,\n { kind: 'unchanged' }\n>\n\ntype AnyTable = Table_Internal<any, any>\n\n// Main-thread side: payload + this table's core rows -> RowModel. Mirrors how\n// the sync row models treat rows: data rows are reused (with depth/parentId\n// rewritten, exactly like createGroupedRowModel does), synthetic group rows\n// are reconstructed via constructRow with their worker-computed aggregates\n// pre-seeded so no aggregation ever runs on the main thread.\n\nfunction collectLeafRows(subRows: Array<any>, out: Array<any>) {\n for (let i = 0; i < subRows.length; i++) {\n const row = subRows[i]\n if (row.groupingColumnId == null) {\n out.push(row)\n } else {\n collectLeafRows(row.subRows, out)\n }\n }\n}\n\nexport function rebuildRowModel(\n table: AnyTable,\n payload: TableWorkerDataPayload,\n /**\n * Whether a flat payload should rewrite row depth/parentId. Mirrors core:\n * the grouped model's passthrough resets them, the filtered model never\n * touches them. Without this distinction a filtered rebuild could zero the\n * depths a grouped/sorted tree rebuild just assigned to shared row objects.\n */\n resetDepths: boolean,\n): RowModel<any, any> {\n const core = table.getCoreRowModel()\n\n if (payload.kind === 'flat') {\n const { indices } = payload\n const rows = new Array(indices.length)\n for (let i = 0; i < indices.length; i++) {\n const row: any = core.flatRows[indices[i]!]!\n if (resetDepths) {\n row.depth = 0\n row.parentId = undefined\n }\n rows[i] = row\n }\n return { rows, flatRows: rows, rowsById: core.rowsById }\n }\n\n const flatRows: Array<any> = []\n // Data rows resolve through the prototype chain to the core map; only\n // synthetic group rows are added on top.\n const rowsById: Record<string, any> = Object.create(core.rowsById)\n\n const rebuildRows = (\n nodes: Array<TableWorkerRowNode>,\n depth: number,\n parentId: string | undefined,\n ): Array<any> => {\n const rows = new Array(nodes.length)\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]!\n if (typeof node === 'number') {\n const row: any = core.flatRows[node]!\n row.depth = depth\n row.parentId = parentId\n flatRows.push(row)\n rows[i] = row\n continue\n }\n\n const subRows = rebuildRows(node.children, depth + 1, node.id)\n const leafRows: Array<any> = []\n collectLeafRows(subRows, leafRows)\n\n const row: any = constructRow(\n table,\n node.id,\n leafRows[0]?.original,\n node.index,\n depth,\n undefined,\n parentId,\n )\n const aggregates = node.aggregates\n Object.assign(row, {\n groupingColumnId: node.groupingColumnId,\n groupingValue: node.groupingValue,\n subRows,\n leafRows,\n getValue: (columnId: string) =>\n hasOwn(aggregates, columnId) ? aggregates[columnId] : undefined,\n })\n\n flatRows.push(row)\n rowsById[node.id] = row\n rows[i] = row\n }\n return rows\n }\n\n const rows = rebuildRows(payload.children, 0, undefined)\n\n return { rows, flatRows, rowsById }\n}\n"],"mappings":";;;;AAuBA,SAAS,gBAAgB,SAAqB,KAAiB;CAC7D,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,MAAM,MAAM,QAAQ;EACpB,IAAI,IAAI,oBAAoB,MAC1B,IAAI,KAAK,GAAG;OAEZ,gBAAgB,IAAI,SAAS,GAAG;CAEpC;AACF;AAEA,SAAgB,gBACd,OACA,SAOA,aACoB;CACpB,MAAM,OAAO,MAAM,gBAAgB;CAEnC,IAAI,QAAQ,SAAS,QAAQ;EAC3B,MAAM,EAAE,YAAY;EACpB,MAAM,OAAO,IAAI,MAAM,QAAQ,MAAM;EACrC,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,MAAM,MAAW,KAAK,SAAS,QAAQ;GACvC,IAAI,aAAa;IACf,IAAI,QAAQ;IACZ,IAAI,WAAW;GACjB;GACA,KAAK,KAAK;EACZ;EACA,OAAO;GAAE;GAAM,UAAU;GAAM,UAAU,KAAK;EAAS;CACzD;CAEA,MAAM,WAAuB,CAAC;CAG9B,MAAM,WAAgC,OAAO,OAAO,KAAK,QAAQ;CAEjE,MAAM,eACJ,OACA,OACA,aACe;EACf,MAAM,OAAO,IAAI,MAAM,MAAM,MAAM;EACnC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,MAAM,OAAO,MAAM;GACnB,IAAI,OAAO,SAAS,UAAU;IAC5B,MAAM,MAAW,KAAK,SAAS;IAC/B,IAAI,QAAQ;IACZ,IAAI,WAAW;IACf,SAAS,KAAK,GAAG;IACjB,KAAK,KAAK;IACV;GACF;GAEA,MAAM,UAAU,YAAY,KAAK,UAAU,QAAQ,GAAG,KAAK,EAAE;GAC7D,MAAM,WAAuB,CAAC;GAC9B,gBAAgB,SAAS,QAAQ;GAEjC,MAAM,MAAWA,kCACf,OACA,KAAK,IACL,SAAS,EAAE,EAAE,UACb,KAAK,OACL,OACA,QACA,QACF;GACA,MAAM,aAAa,KAAK;GACxB,OAAO,OAAO,KAAK;IACjB,kBAAkB,KAAK;IACvB,eAAe,KAAK;IACpB;IACA;IACA,WAAW,aACTC,qBAAO,YAAY,QAAQ,IAAI,WAAW,YAAY;GAC1D,CAAC;GAED,SAAS,KAAK,GAAG;GACjB,SAAS,KAAK,MAAM;GACpB,KAAK,KAAK;EACZ;EACA,OAAO;CACT;CAIA,OAAO;EAAE,MAFI,YAAY,QAAQ,UAAU,GAAG,MAElC;EAAG;EAAU;CAAS;AACpC"}
@@ -0,0 +1,9 @@
1
+ import { TableWorkerStagePayload } from "./tableWorkerProtocol.cjs";
2
+ //#region src/worker/rebuildRowModel.d.ts
3
+ /** Payloads that carry data; `unchanged` never reaches the rebuilder. */
4
+ type TableWorkerDataPayload = Exclude<TableWorkerStagePayload, {
5
+ kind: 'unchanged';
6
+ }>;
7
+ //#endregion
8
+ export { TableWorkerDataPayload };
9
+ //# sourceMappingURL=rebuildRowModel.d.cts.map
@@ -0,0 +1,9 @@
1
+ import { TableWorkerStagePayload } from "./tableWorkerProtocol.js";
2
+ //#region src/worker/rebuildRowModel.d.ts
3
+ /** Payloads that carry data; `unchanged` never reaches the rebuilder. */
4
+ type TableWorkerDataPayload = Exclude<TableWorkerStagePayload, {
5
+ kind: 'unchanged';
6
+ }>;
7
+ //#endregion
8
+ export { TableWorkerDataPayload };
9
+ //# sourceMappingURL=rebuildRowModel.d.ts.map
@@ -0,0 +1,72 @@
1
+ import { hasOwn } from "../utils.js";
2
+ import { constructRow } from "../core/rows/constructRow.js";
3
+
4
+ //#region src/worker/rebuildRowModel.ts
5
+ function collectLeafRows(subRows, out) {
6
+ for (let i = 0; i < subRows.length; i++) {
7
+ const row = subRows[i];
8
+ if (row.groupingColumnId == null) out.push(row);
9
+ else collectLeafRows(row.subRows, out);
10
+ }
11
+ }
12
+ function rebuildRowModel(table, payload, resetDepths) {
13
+ const core = table.getCoreRowModel();
14
+ if (payload.kind === "flat") {
15
+ const { indices } = payload;
16
+ const rows = new Array(indices.length);
17
+ for (let i = 0; i < indices.length; i++) {
18
+ const row = core.flatRows[indices[i]];
19
+ if (resetDepths) {
20
+ row.depth = 0;
21
+ row.parentId = void 0;
22
+ }
23
+ rows[i] = row;
24
+ }
25
+ return {
26
+ rows,
27
+ flatRows: rows,
28
+ rowsById: core.rowsById
29
+ };
30
+ }
31
+ const flatRows = [];
32
+ const rowsById = Object.create(core.rowsById);
33
+ const rebuildRows = (nodes, depth, parentId) => {
34
+ const rows = new Array(nodes.length);
35
+ for (let i = 0; i < nodes.length; i++) {
36
+ const node = nodes[i];
37
+ if (typeof node === "number") {
38
+ const row = core.flatRows[node];
39
+ row.depth = depth;
40
+ row.parentId = parentId;
41
+ flatRows.push(row);
42
+ rows[i] = row;
43
+ continue;
44
+ }
45
+ const subRows = rebuildRows(node.children, depth + 1, node.id);
46
+ const leafRows = [];
47
+ collectLeafRows(subRows, leafRows);
48
+ const row = constructRow(table, node.id, leafRows[0]?.original, node.index, depth, void 0, parentId);
49
+ const aggregates = node.aggregates;
50
+ Object.assign(row, {
51
+ groupingColumnId: node.groupingColumnId,
52
+ groupingValue: node.groupingValue,
53
+ subRows,
54
+ leafRows,
55
+ getValue: (columnId) => hasOwn(aggregates, columnId) ? aggregates[columnId] : void 0
56
+ });
57
+ flatRows.push(row);
58
+ rowsById[node.id] = row;
59
+ rows[i] = row;
60
+ }
61
+ return rows;
62
+ };
63
+ return {
64
+ rows: rebuildRows(payload.children, 0, void 0),
65
+ flatRows,
66
+ rowsById
67
+ };
68
+ }
69
+
70
+ //#endregion
71
+ export { rebuildRowModel };
72
+ //# sourceMappingURL=rebuildRowModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rebuildRowModel.js","names":[],"sources":["../../src/worker/rebuildRowModel.ts"],"sourcesContent":["import { constructRow } from '../core/rows/constructRow'\nimport { hasOwn } from '../utils'\nimport type { RowModel } from '../core/row-models/coreRowModelsFeature.types'\nimport type { Table_Internal } from '../types/Table'\nimport type {\n TableWorkerRowNode,\n TableWorkerStagePayload,\n} from './tableWorkerProtocol'\n\n/** Payloads that carry data; `unchanged` never reaches the rebuilder. */\nexport type TableWorkerDataPayload = Exclude<\n TableWorkerStagePayload,\n { kind: 'unchanged' }\n>\n\ntype AnyTable = Table_Internal<any, any>\n\n// Main-thread side: payload + this table's core rows -> RowModel. Mirrors how\n// the sync row models treat rows: data rows are reused (with depth/parentId\n// rewritten, exactly like createGroupedRowModel does), synthetic group rows\n// are reconstructed via constructRow with their worker-computed aggregates\n// pre-seeded so no aggregation ever runs on the main thread.\n\nfunction collectLeafRows(subRows: Array<any>, out: Array<any>) {\n for (let i = 0; i < subRows.length; i++) {\n const row = subRows[i]\n if (row.groupingColumnId == null) {\n out.push(row)\n } else {\n collectLeafRows(row.subRows, out)\n }\n }\n}\n\nexport function rebuildRowModel(\n table: AnyTable,\n payload: TableWorkerDataPayload,\n /**\n * Whether a flat payload should rewrite row depth/parentId. Mirrors core:\n * the grouped model's passthrough resets them, the filtered model never\n * touches them. Without this distinction a filtered rebuild could zero the\n * depths a grouped/sorted tree rebuild just assigned to shared row objects.\n */\n resetDepths: boolean,\n): RowModel<any, any> {\n const core = table.getCoreRowModel()\n\n if (payload.kind === 'flat') {\n const { indices } = payload\n const rows = new Array(indices.length)\n for (let i = 0; i < indices.length; i++) {\n const row: any = core.flatRows[indices[i]!]!\n if (resetDepths) {\n row.depth = 0\n row.parentId = undefined\n }\n rows[i] = row\n }\n return { rows, flatRows: rows, rowsById: core.rowsById }\n }\n\n const flatRows: Array<any> = []\n // Data rows resolve through the prototype chain to the core map; only\n // synthetic group rows are added on top.\n const rowsById: Record<string, any> = Object.create(core.rowsById)\n\n const rebuildRows = (\n nodes: Array<TableWorkerRowNode>,\n depth: number,\n parentId: string | undefined,\n ): Array<any> => {\n const rows = new Array(nodes.length)\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i]!\n if (typeof node === 'number') {\n const row: any = core.flatRows[node]!\n row.depth = depth\n row.parentId = parentId\n flatRows.push(row)\n rows[i] = row\n continue\n }\n\n const subRows = rebuildRows(node.children, depth + 1, node.id)\n const leafRows: Array<any> = []\n collectLeafRows(subRows, leafRows)\n\n const row: any = constructRow(\n table,\n node.id,\n leafRows[0]?.original,\n node.index,\n depth,\n undefined,\n parentId,\n )\n const aggregates = node.aggregates\n Object.assign(row, {\n groupingColumnId: node.groupingColumnId,\n groupingValue: node.groupingValue,\n subRows,\n leafRows,\n getValue: (columnId: string) =>\n hasOwn(aggregates, columnId) ? aggregates[columnId] : undefined,\n })\n\n flatRows.push(row)\n rowsById[node.id] = row\n rows[i] = row\n }\n return rows\n }\n\n const rows = rebuildRows(payload.children, 0, undefined)\n\n return { rows, flatRows, rowsById }\n}\n"],"mappings":";;;;AAuBA,SAAS,gBAAgB,SAAqB,KAAiB;CAC7D,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,MAAM,MAAM,QAAQ;EACpB,IAAI,IAAI,oBAAoB,MAC1B,IAAI,KAAK,GAAG;OAEZ,gBAAgB,IAAI,SAAS,GAAG;CAEpC;AACF;AAEA,SAAgB,gBACd,OACA,SAOA,aACoB;CACpB,MAAM,OAAO,MAAM,gBAAgB;CAEnC,IAAI,QAAQ,SAAS,QAAQ;EAC3B,MAAM,EAAE,YAAY;EACpB,MAAM,OAAO,IAAI,MAAM,QAAQ,MAAM;EACrC,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,MAAM,MAAW,KAAK,SAAS,QAAQ;GACvC,IAAI,aAAa;IACf,IAAI,QAAQ;IACZ,IAAI,WAAW;GACjB;GACA,KAAK,KAAK;EACZ;EACA,OAAO;GAAE;GAAM,UAAU;GAAM,UAAU,KAAK;EAAS;CACzD;CAEA,MAAM,WAAuB,CAAC;CAG9B,MAAM,WAAgC,OAAO,OAAO,KAAK,QAAQ;CAEjE,MAAM,eACJ,OACA,OACA,aACe;EACf,MAAM,OAAO,IAAI,MAAM,MAAM,MAAM;EACnC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,MAAM,OAAO,MAAM;GACnB,IAAI,OAAO,SAAS,UAAU;IAC5B,MAAM,MAAW,KAAK,SAAS;IAC/B,IAAI,QAAQ;IACZ,IAAI,WAAW;IACf,SAAS,KAAK,GAAG;IACjB,KAAK,KAAK;IACV;GACF;GAEA,MAAM,UAAU,YAAY,KAAK,UAAU,QAAQ,GAAG,KAAK,EAAE;GAC7D,MAAM,WAAuB,CAAC;GAC9B,gBAAgB,SAAS,QAAQ;GAEjC,MAAM,MAAW,aACf,OACA,KAAK,IACL,SAAS,EAAE,EAAE,UACb,KAAK,OACL,OACA,QACA,QACF;GACA,MAAM,aAAa,KAAK;GACxB,OAAO,OAAO,KAAK;IACjB,kBAAkB,KAAK;IACvB,eAAe,KAAK;IACpB;IACA;IACA,WAAW,aACT,OAAO,YAAY,QAAQ,IAAI,WAAW,YAAY;GAC1D,CAAC;GAED,SAAS,KAAK,GAAG;GACjB,SAAS,KAAK,MAAM;GACpB,KAAK,KAAK;EACZ;EACA,OAAO;CACT;CAIA,OAAO;EAAE,MAFI,YAAY,QAAQ,UAAU,GAAG,MAElC;EAAG;EAAU;CAAS;AACpC"}
@@ -0,0 +1,53 @@
1
+
2
+ //#region src/worker/serializeRowModel.ts
3
+ function isCloneSafe(value) {
4
+ return typeof value !== "function" && typeof value !== "symbol";
5
+ }
6
+ function serializeRows(rows, coreIndexById, aggregateColumnIds) {
7
+ const nodes = new Array(rows.length);
8
+ for (let i = 0; i < rows.length; i++) {
9
+ const row = rows[i];
10
+ if (row.groupingColumnId == null) {
11
+ nodes[i] = coreIndexById[row.id];
12
+ continue;
13
+ }
14
+ const aggregates = {};
15
+ for (let c = 0; c < aggregateColumnIds.length; c++) {
16
+ const columnId = aggregateColumnIds[c];
17
+ const value = row.getValue(columnId);
18
+ if (value !== void 0 && isCloneSafe(value)) aggregates[columnId] = value;
19
+ }
20
+ if (!(row.groupingColumnId in aggregates)) {
21
+ const value = row.getValue(row.groupingColumnId);
22
+ if (value !== void 0 && isCloneSafe(value)) aggregates[row.groupingColumnId] = value;
23
+ }
24
+ nodes[i] = {
25
+ id: row.id,
26
+ groupingColumnId: row.groupingColumnId,
27
+ groupingValue: row.groupingValue,
28
+ index: row.index,
29
+ aggregates,
30
+ children: serializeRows(row.subRows, coreIndexById, aggregateColumnIds)
31
+ };
32
+ }
33
+ return nodes;
34
+ }
35
+ function serializeRowModel(model, coreIndexById, aggregateColumnIds, transfer) {
36
+ if (model.flatRows.length === model.rows.length) {
37
+ const indices = new Uint32Array(model.rows.length);
38
+ for (let i = 0; i < indices.length; i++) indices[i] = coreIndexById[model.rows[i].id];
39
+ transfer.push(indices.buffer);
40
+ return {
41
+ kind: "flat",
42
+ indices
43
+ };
44
+ }
45
+ return {
46
+ kind: "tree",
47
+ children: serializeRows(model.rows, coreIndexById, aggregateColumnIds)
48
+ };
49
+ }
50
+
51
+ //#endregion
52
+ exports.serializeRowModel = serializeRowModel;
53
+ //# sourceMappingURL=serializeRowModel.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeRowModel.cjs","names":[],"sources":["../../src/worker/serializeRowModel.ts"],"sourcesContent":["import type { RowModel } from '../core/row-models/coreRowModelsFeature.types'\nimport type {\n TableWorkerRowNode,\n TableWorkerStagePayload,\n} from './tableWorkerProtocol'\n\n// Worker-side: RowModel -> transferable payload. Stage-agnostic; the payload\n// kind is chosen from the model's shape (synthetic rows present or not).\n\nfunction isCloneSafe(value: unknown): boolean {\n return typeof value !== 'function' && typeof value !== 'symbol'\n}\n\nfunction serializeRows(\n rows: Array<any>,\n coreIndexById: Record<string, number>,\n aggregateColumnIds: Array<string>,\n): Array<TableWorkerRowNode> {\n const nodes = new Array<TableWorkerRowNode>(rows.length)\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n if (row.groupingColumnId == null) {\n // Data row: its position in `options.data` is all the main thread needs.\n nodes[i] = coreIndexById[row.id]!\n continue\n }\n // Synthetic group row: compute aggregates eagerly (the expensive per-group\n // work we want off the main thread), but only for columns with an explicit\n // aggregation; sync tables aggregate lazily, so eagerly auto-aggregating\n // every column would explode on high-cardinality grouping.\n const aggregates: Record<string, unknown> = {}\n for (let c = 0; c < aggregateColumnIds.length; c++) {\n const columnId = aggregateColumnIds[c]!\n const value = row.getValue(columnId)\n if (value !== undefined && isCloneSafe(value)) {\n aggregates[columnId] = value\n }\n }\n // The group's own column always serializes its display value (the first\n // leaf's value) so grouped cells render.\n if (!(row.groupingColumnId in aggregates)) {\n const value = row.getValue(row.groupingColumnId)\n if (value !== undefined && isCloneSafe(value)) {\n aggregates[row.groupingColumnId] = value\n }\n }\n nodes[i] = {\n id: row.id,\n groupingColumnId: row.groupingColumnId,\n groupingValue: row.groupingValue,\n index: row.index,\n aggregates,\n children: serializeRows(row.subRows, coreIndexById, aggregateColumnIds),\n }\n }\n return nodes\n}\n\nexport function serializeRowModel(\n model: RowModel<any, any>,\n coreIndexById: Record<string, number>,\n aggregateColumnIds: Array<string>,\n transfer: Array<Transferable>,\n): TableWorkerStagePayload {\n // Flat fast path: no synthetic rows anywhere (flatRows === rows for flat\n // data). A Uint32Array permutation transfers at zero-copy cost.\n if (model.flatRows.length === model.rows.length) {\n const indices = new Uint32Array(model.rows.length)\n for (let i = 0; i < indices.length; i++) {\n indices[i] = coreIndexById[model.rows[i]!.id]!\n }\n transfer.push(indices.buffer)\n return { kind: 'flat', indices }\n }\n\n return {\n kind: 'tree',\n children: serializeRows(model.rows, coreIndexById, aggregateColumnIds),\n }\n}\n"],"mappings":";;AASA,SAAS,YAAY,OAAyB;CAC5C,OAAO,OAAO,UAAU,cAAc,OAAO,UAAU;AACzD;AAEA,SAAS,cACP,MACA,eACA,oBAC2B;CAC3B,MAAM,QAAQ,IAAI,MAA0B,KAAK,MAAM;CACvD,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,MAAM,KAAK;EACjB,IAAI,IAAI,oBAAoB,MAAM;GAEhC,MAAM,KAAK,cAAc,IAAI;GAC7B;EACF;EAKA,MAAM,aAAsC,CAAC;EAC7C,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;GAClD,MAAM,WAAW,mBAAmB;GACpC,MAAM,QAAQ,IAAI,SAAS,QAAQ;GACnC,IAAI,UAAU,UAAa,YAAY,KAAK,GAC1C,WAAW,YAAY;EAE3B;EAGA,IAAI,EAAE,IAAI,oBAAoB,aAAa;GACzC,MAAM,QAAQ,IAAI,SAAS,IAAI,gBAAgB;GAC/C,IAAI,UAAU,UAAa,YAAY,KAAK,GAC1C,WAAW,IAAI,oBAAoB;EAEvC;EACA,MAAM,KAAK;GACT,IAAI,IAAI;GACR,kBAAkB,IAAI;GACtB,eAAe,IAAI;GACnB,OAAO,IAAI;GACX;GACA,UAAU,cAAc,IAAI,SAAS,eAAe,kBAAkB;EACxE;CACF;CACA,OAAO;AACT;AAEA,SAAgB,kBACd,OACA,eACA,oBACA,UACyB;CAGzB,IAAI,MAAM,SAAS,WAAW,MAAM,KAAK,QAAQ;EAC/C,MAAM,UAAU,IAAI,YAAY,MAAM,KAAK,MAAM;EACjD,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAClC,QAAQ,KAAK,cAAc,MAAM,KAAK,EAAE,CAAE;EAE5C,SAAS,KAAK,QAAQ,MAAM;EAC5B,OAAO;GAAE,MAAM;GAAQ;EAAQ;CACjC;CAEA,OAAO;EACL,MAAM;EACN,UAAU,cAAc,MAAM,MAAM,eAAe,kBAAkB;CACvE;AACF"}
@@ -0,0 +1,52 @@
1
+ //#region src/worker/serializeRowModel.ts
2
+ function isCloneSafe(value) {
3
+ return typeof value !== "function" && typeof value !== "symbol";
4
+ }
5
+ function serializeRows(rows, coreIndexById, aggregateColumnIds) {
6
+ const nodes = new Array(rows.length);
7
+ for (let i = 0; i < rows.length; i++) {
8
+ const row = rows[i];
9
+ if (row.groupingColumnId == null) {
10
+ nodes[i] = coreIndexById[row.id];
11
+ continue;
12
+ }
13
+ const aggregates = {};
14
+ for (let c = 0; c < aggregateColumnIds.length; c++) {
15
+ const columnId = aggregateColumnIds[c];
16
+ const value = row.getValue(columnId);
17
+ if (value !== void 0 && isCloneSafe(value)) aggregates[columnId] = value;
18
+ }
19
+ if (!(row.groupingColumnId in aggregates)) {
20
+ const value = row.getValue(row.groupingColumnId);
21
+ if (value !== void 0 && isCloneSafe(value)) aggregates[row.groupingColumnId] = value;
22
+ }
23
+ nodes[i] = {
24
+ id: row.id,
25
+ groupingColumnId: row.groupingColumnId,
26
+ groupingValue: row.groupingValue,
27
+ index: row.index,
28
+ aggregates,
29
+ children: serializeRows(row.subRows, coreIndexById, aggregateColumnIds)
30
+ };
31
+ }
32
+ return nodes;
33
+ }
34
+ function serializeRowModel(model, coreIndexById, aggregateColumnIds, transfer) {
35
+ if (model.flatRows.length === model.rows.length) {
36
+ const indices = new Uint32Array(model.rows.length);
37
+ for (let i = 0; i < indices.length; i++) indices[i] = coreIndexById[model.rows[i].id];
38
+ transfer.push(indices.buffer);
39
+ return {
40
+ kind: "flat",
41
+ indices
42
+ };
43
+ }
44
+ return {
45
+ kind: "tree",
46
+ children: serializeRows(model.rows, coreIndexById, aggregateColumnIds)
47
+ };
48
+ }
49
+
50
+ //#endregion
51
+ export { serializeRowModel };
52
+ //# sourceMappingURL=serializeRowModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeRowModel.js","names":[],"sources":["../../src/worker/serializeRowModel.ts"],"sourcesContent":["import type { RowModel } from '../core/row-models/coreRowModelsFeature.types'\nimport type {\n TableWorkerRowNode,\n TableWorkerStagePayload,\n} from './tableWorkerProtocol'\n\n// Worker-side: RowModel -> transferable payload. Stage-agnostic; the payload\n// kind is chosen from the model's shape (synthetic rows present or not).\n\nfunction isCloneSafe(value: unknown): boolean {\n return typeof value !== 'function' && typeof value !== 'symbol'\n}\n\nfunction serializeRows(\n rows: Array<any>,\n coreIndexById: Record<string, number>,\n aggregateColumnIds: Array<string>,\n): Array<TableWorkerRowNode> {\n const nodes = new Array<TableWorkerRowNode>(rows.length)\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n if (row.groupingColumnId == null) {\n // Data row: its position in `options.data` is all the main thread needs.\n nodes[i] = coreIndexById[row.id]!\n continue\n }\n // Synthetic group row: compute aggregates eagerly (the expensive per-group\n // work we want off the main thread), but only for columns with an explicit\n // aggregation; sync tables aggregate lazily, so eagerly auto-aggregating\n // every column would explode on high-cardinality grouping.\n const aggregates: Record<string, unknown> = {}\n for (let c = 0; c < aggregateColumnIds.length; c++) {\n const columnId = aggregateColumnIds[c]!\n const value = row.getValue(columnId)\n if (value !== undefined && isCloneSafe(value)) {\n aggregates[columnId] = value\n }\n }\n // The group's own column always serializes its display value (the first\n // leaf's value) so grouped cells render.\n if (!(row.groupingColumnId in aggregates)) {\n const value = row.getValue(row.groupingColumnId)\n if (value !== undefined && isCloneSafe(value)) {\n aggregates[row.groupingColumnId] = value\n }\n }\n nodes[i] = {\n id: row.id,\n groupingColumnId: row.groupingColumnId,\n groupingValue: row.groupingValue,\n index: row.index,\n aggregates,\n children: serializeRows(row.subRows, coreIndexById, aggregateColumnIds),\n }\n }\n return nodes\n}\n\nexport function serializeRowModel(\n model: RowModel<any, any>,\n coreIndexById: Record<string, number>,\n aggregateColumnIds: Array<string>,\n transfer: Array<Transferable>,\n): TableWorkerStagePayload {\n // Flat fast path: no synthetic rows anywhere (flatRows === rows for flat\n // data). A Uint32Array permutation transfers at zero-copy cost.\n if (model.flatRows.length === model.rows.length) {\n const indices = new Uint32Array(model.rows.length)\n for (let i = 0; i < indices.length; i++) {\n indices[i] = coreIndexById[model.rows[i]!.id]!\n }\n transfer.push(indices.buffer)\n return { kind: 'flat', indices }\n }\n\n return {\n kind: 'tree',\n children: serializeRows(model.rows, coreIndexById, aggregateColumnIds),\n }\n}\n"],"mappings":";AASA,SAAS,YAAY,OAAyB;CAC5C,OAAO,OAAO,UAAU,cAAc,OAAO,UAAU;AACzD;AAEA,SAAS,cACP,MACA,eACA,oBAC2B;CAC3B,MAAM,QAAQ,IAAI,MAA0B,KAAK,MAAM;CACvD,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,MAAM,KAAK;EACjB,IAAI,IAAI,oBAAoB,MAAM;GAEhC,MAAM,KAAK,cAAc,IAAI;GAC7B;EACF;EAKA,MAAM,aAAsC,CAAC;EAC7C,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;GAClD,MAAM,WAAW,mBAAmB;GACpC,MAAM,QAAQ,IAAI,SAAS,QAAQ;GACnC,IAAI,UAAU,UAAa,YAAY,KAAK,GAC1C,WAAW,YAAY;EAE3B;EAGA,IAAI,EAAE,IAAI,oBAAoB,aAAa;GACzC,MAAM,QAAQ,IAAI,SAAS,IAAI,gBAAgB;GAC/C,IAAI,UAAU,UAAa,YAAY,KAAK,GAC1C,WAAW,IAAI,oBAAoB;EAEvC;EACA,MAAM,KAAK;GACT,IAAI,IAAI;GACR,kBAAkB,IAAI;GACtB,eAAe,IAAI;GACnB,OAAO,IAAI;GACX;GACA,UAAU,cAAc,IAAI,SAAS,eAAe,kBAAkB;EACxE;CACF;CACA,OAAO;AACT;AAEA,SAAgB,kBACd,OACA,eACA,oBACA,UACyB;CAGzB,IAAI,MAAM,SAAS,WAAW,MAAM,KAAK,QAAQ;EAC/C,MAAM,UAAU,IAAI,YAAY,MAAM,KAAK,MAAM;EACjD,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAClC,QAAQ,KAAK,cAAc,MAAM,KAAK,EAAE,CAAE;EAE5C,SAAS,KAAK,QAAQ,MAAM;EAC5B,OAAO;GAAE,MAAM;GAAQ;EAAQ;CACjC;CAEA,OAAO;EACL,MAAM;EACN,UAAU,cAAc,MAAM,MAAM,eAAe,kBAAkB;CACvE;AACF"}