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

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 (323) 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.cjs +4 -1
  58. package/dist/core/rows/coreRowsFeature.cjs.map +1 -1
  59. package/dist/core/rows/coreRowsFeature.js +4 -1
  60. package/dist/core/rows/coreRowsFeature.js.map +1 -1
  61. package/dist/core/rows/coreRowsFeature.types.d.cts +1 -1
  62. package/dist/core/rows/coreRowsFeature.types.d.ts +1 -1
  63. package/dist/core/rows/coreRowsFeature.utils.cjs +3 -4
  64. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  65. package/dist/core/rows/coreRowsFeature.utils.d.cts +1 -1
  66. package/dist/core/rows/coreRowsFeature.utils.d.ts +1 -1
  67. package/dist/core/rows/coreRowsFeature.utils.js +3 -4
  68. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  69. package/dist/core/table/constructTable.cjs +4 -10
  70. package/dist/core/table/constructTable.cjs.map +1 -1
  71. package/dist/core/table/constructTable.js +4 -10
  72. package/dist/core/table/constructTable.js.map +1 -1
  73. package/dist/experimental-worker-plugin.cjs +14 -0
  74. package/dist/experimental-worker-plugin.d.cts +5 -0
  75. package/dist/experimental-worker-plugin.d.ts +5 -0
  76. package/dist/experimental-worker-plugin.js +6 -0
  77. package/dist/features/column-faceting/columnFacetingFeature.cjs +12 -18
  78. package/dist/features/column-faceting/columnFacetingFeature.cjs.map +1 -1
  79. package/dist/features/column-faceting/columnFacetingFeature.js +12 -18
  80. package/dist/features/column-faceting/columnFacetingFeature.js.map +1 -1
  81. package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +1 -1
  82. package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +1 -1
  83. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +7 -25
  84. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
  85. package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +1 -1
  86. package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +1 -1
  87. package/dist/features/column-faceting/columnFacetingFeature.utils.js +7 -25
  88. package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
  89. package/dist/features/column-faceting/createFacetedRowModel.cjs +8 -14
  90. package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
  91. package/dist/features/column-faceting/createFacetedRowModel.d.cts +1 -1
  92. package/dist/features/column-faceting/createFacetedRowModel.d.ts +1 -1
  93. package/dist/features/column-faceting/createFacetedRowModel.js +8 -14
  94. package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
  95. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +1 -1
  96. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +1 -1
  97. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +10 -13
  98. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  99. package/dist/features/column-filtering/columnFilteringFeature.utils.js +10 -13
  100. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  101. package/dist/features/column-filtering/createFilteredRowModel.cjs +12 -18
  102. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  103. package/dist/features/column-filtering/createFilteredRowModel.d.cts +1 -1
  104. package/dist/features/column-filtering/createFilteredRowModel.d.ts +1 -1
  105. package/dist/features/column-filtering/createFilteredRowModel.js +12 -18
  106. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  107. package/dist/features/column-grouping/columnGroupingFeature.cjs +1 -4
  108. package/dist/features/column-grouping/columnGroupingFeature.cjs.map +1 -1
  109. package/dist/features/column-grouping/columnGroupingFeature.js +1 -4
  110. package/dist/features/column-grouping/columnGroupingFeature.js.map +1 -1
  111. package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +4 -4
  112. package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +4 -4
  113. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +8 -13
  114. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
  115. package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +2 -2
  116. package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +2 -2
  117. package/dist/features/column-grouping/columnGroupingFeature.utils.js +8 -13
  118. package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
  119. package/dist/features/column-grouping/createGroupedRowModel.cjs +3 -7
  120. package/dist/features/column-grouping/createGroupedRowModel.cjs.map +1 -1
  121. package/dist/features/column-grouping/createGroupedRowModel.d.cts +1 -1
  122. package/dist/features/column-grouping/createGroupedRowModel.d.ts +1 -1
  123. package/dist/features/column-grouping/createGroupedRowModel.js +3 -7
  124. package/dist/features/column-grouping/createGroupedRowModel.js.map +1 -1
  125. package/dist/features/column-ordering/columnOrderingFeature.cjs +13 -19
  126. package/dist/features/column-ordering/columnOrderingFeature.cjs.map +1 -1
  127. package/dist/features/column-ordering/columnOrderingFeature.js +13 -19
  128. package/dist/features/column-ordering/columnOrderingFeature.js.map +1 -1
  129. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +6 -11
  130. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
  131. package/dist/features/column-ordering/columnOrderingFeature.utils.js +6 -11
  132. package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
  133. package/dist/features/column-pinning/columnPinningFeature.cjs +78 -114
  134. package/dist/features/column-pinning/columnPinningFeature.cjs.map +1 -1
  135. package/dist/features/column-pinning/columnPinningFeature.js +78 -114
  136. package/dist/features/column-pinning/columnPinningFeature.js.map +1 -1
  137. package/dist/features/column-pinning/columnPinningFeature.types.d.cts +1 -1
  138. package/dist/features/column-pinning/columnPinningFeature.types.d.ts +1 -1
  139. package/dist/features/column-pinning/columnPinningFeature.utils.cjs +15 -28
  140. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  141. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +2 -2
  142. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +2 -2
  143. package/dist/features/column-pinning/columnPinningFeature.utils.js +15 -28
  144. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  145. package/dist/features/column-resizing/columnResizingFeature.utils.cjs +12 -16
  146. package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
  147. package/dist/features/column-resizing/columnResizingFeature.utils.js +12 -16
  148. package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
  149. package/dist/features/column-sizing/columnSizingFeature.cjs +24 -48
  150. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  151. package/dist/features/column-sizing/columnSizingFeature.js +24 -48
  152. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  153. package/dist/features/column-sizing/columnSizingFeature.utils.cjs +11 -18
  154. package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
  155. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +1 -1
  156. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +1 -1
  157. package/dist/features/column-sizing/columnSizingFeature.utils.js +11 -18
  158. package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
  159. package/dist/features/column-visibility/columnVisibilityFeature.cjs +25 -40
  160. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  161. package/dist/features/column-visibility/columnVisibilityFeature.js +25 -40
  162. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  163. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +1 -1
  164. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +1 -1
  165. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +3 -6
  166. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  167. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +1 -1
  168. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +1 -1
  169. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +3 -6
  170. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  171. package/dist/features/global-filtering/globalFilteringFeature.cjs +1 -2
  172. package/dist/features/global-filtering/globalFilteringFeature.cjs.map +1 -1
  173. package/dist/features/global-filtering/globalFilteringFeature.js +1 -2
  174. package/dist/features/global-filtering/globalFilteringFeature.js.map +1 -1
  175. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +3 -5
  176. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  177. package/dist/features/global-filtering/globalFilteringFeature.utils.js +3 -5
  178. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  179. package/dist/features/row-expanding/createExpandedRowModel.cjs +6 -10
  180. package/dist/features/row-expanding/createExpandedRowModel.cjs.map +1 -1
  181. package/dist/features/row-expanding/createExpandedRowModel.d.cts +1 -1
  182. package/dist/features/row-expanding/createExpandedRowModel.d.ts +1 -1
  183. package/dist/features/row-expanding/createExpandedRowModel.js +6 -10
  184. package/dist/features/row-expanding/createExpandedRowModel.js.map +1 -1
  185. package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +1 -1
  186. package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +1 -1
  187. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +8 -15
  188. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  189. package/dist/features/row-expanding/rowExpandingFeature.utils.js +8 -15
  190. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  191. package/dist/features/row-pagination/createPaginatedRowModel.cjs +6 -10
  192. package/dist/features/row-pagination/createPaginatedRowModel.cjs.map +1 -1
  193. package/dist/features/row-pagination/createPaginatedRowModel.d.cts +1 -1
  194. package/dist/features/row-pagination/createPaginatedRowModel.d.ts +1 -1
  195. package/dist/features/row-pagination/createPaginatedRowModel.js +6 -10
  196. package/dist/features/row-pagination/createPaginatedRowModel.js.map +1 -1
  197. package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +1 -1
  198. package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +1 -1
  199. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs +8 -14
  200. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs.map +1 -1
  201. package/dist/features/row-pagination/rowPaginationFeature.utils.js +8 -14
  202. package/dist/features/row-pagination/rowPaginationFeature.utils.js.map +1 -1
  203. package/dist/features/row-pinning/rowPinningFeature.cjs +4 -16
  204. package/dist/features/row-pinning/rowPinningFeature.cjs.map +1 -1
  205. package/dist/features/row-pinning/rowPinningFeature.js +4 -16
  206. package/dist/features/row-pinning/rowPinningFeature.js.map +1 -1
  207. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +7 -12
  208. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  209. package/dist/features/row-pinning/rowPinningFeature.utils.js +7 -12
  210. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  211. package/dist/features/row-selection/rowSelectionFeature.cjs +30 -60
  212. package/dist/features/row-selection/rowSelectionFeature.cjs.map +1 -1
  213. package/dist/features/row-selection/rowSelectionFeature.js +30 -60
  214. package/dist/features/row-selection/rowSelectionFeature.js.map +1 -1
  215. package/dist/features/row-selection/rowSelectionFeature.types.d.cts +1 -1
  216. package/dist/features/row-selection/rowSelectionFeature.types.d.ts +1 -1
  217. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +11 -18
  218. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  219. package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +1 -1
  220. package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +1 -1
  221. package/dist/features/row-selection/rowSelectionFeature.utils.js +12 -19
  222. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  223. package/dist/features/row-sorting/createSortedRowModel.cjs +20 -14
  224. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  225. package/dist/features/row-sorting/createSortedRowModel.d.cts +1 -1
  226. package/dist/features/row-sorting/createSortedRowModel.d.ts +1 -1
  227. package/dist/features/row-sorting/createSortedRowModel.js +21 -15
  228. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  229. package/dist/features/row-sorting/rowSortingFeature.types.d.cts +2 -2
  230. package/dist/features/row-sorting/rowSortingFeature.types.d.ts +2 -2
  231. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +10 -14
  232. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  233. package/dist/features/row-sorting/rowSortingFeature.utils.js +10 -14
  234. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  235. package/dist/flex-render.d.cts +1 -1
  236. package/dist/flex-render.d.ts +1 -1
  237. package/dist/fns/filterFns.cjs +8 -12
  238. package/dist/fns/filterFns.cjs.map +1 -1
  239. package/dist/fns/filterFns.js +8 -12
  240. package/dist/fns/filterFns.js.map +1 -1
  241. package/dist/index.cjs +1 -0
  242. package/dist/index.d.cts +18 -18
  243. package/dist/index.d.ts +18 -18
  244. package/dist/index.js +2 -2
  245. package/dist/store-reactivity-bindings.cjs +2 -2
  246. package/dist/store-reactivity-bindings.cjs.map +1 -1
  247. package/dist/store-reactivity-bindings.js +2 -2
  248. package/dist/store-reactivity-bindings.js.map +1 -1
  249. package/dist/types/Cell.d.cts +1 -1
  250. package/dist/types/Cell.d.ts +1 -1
  251. package/dist/types/Column.d.cts +7 -7
  252. package/dist/types/Column.d.ts +7 -7
  253. package/dist/types/ColumnDef.d.cts +6 -6
  254. package/dist/types/ColumnDef.d.ts +6 -6
  255. package/dist/types/Header.d.cts +1 -1
  256. package/dist/types/Header.d.ts +1 -1
  257. package/dist/types/Row.d.cts +2 -2
  258. package/dist/types/Row.d.ts +2 -2
  259. package/dist/types/RowModel.d.cts +4 -4
  260. package/dist/types/RowModel.d.ts +4 -4
  261. package/dist/types/RowModelFns.d.cts +2 -2
  262. package/dist/types/RowModelFns.d.ts +2 -2
  263. package/dist/types/Table.d.cts +9 -9
  264. package/dist/types/Table.d.ts +9 -9
  265. package/dist/types/TableFeatures.d.cts +4 -4
  266. package/dist/types/TableFeatures.d.ts +4 -4
  267. package/dist/types/TableOptions.d.cts +7 -7
  268. package/dist/types/TableOptions.d.ts +7 -7
  269. package/dist/types/TableState.d.cts +6 -6
  270. package/dist/types/TableState.d.ts +6 -6
  271. package/dist/utils.cjs +23 -12
  272. package/dist/utils.cjs.map +1 -1
  273. package/dist/utils.d.cts +6 -1
  274. package/dist/utils.d.ts +6 -1
  275. package/dist/utils.js +23 -13
  276. package/dist/utils.js.map +1 -1
  277. package/dist/worker/createTableWorker.cjs +189 -0
  278. package/dist/worker/createTableWorker.cjs.map +1 -0
  279. package/dist/worker/createTableWorker.d.cts +102 -0
  280. package/dist/worker/createTableWorker.d.ts +102 -0
  281. package/dist/worker/createTableWorker.js +186 -0
  282. package/dist/worker/createTableWorker.js.map +1 -0
  283. package/dist/worker/createWorkerRowModel.cjs +78 -0
  284. package/dist/worker/createWorkerRowModel.cjs.map +1 -0
  285. package/dist/worker/createWorkerRowModel.d.cts +42 -0
  286. package/dist/worker/createWorkerRowModel.d.ts +42 -0
  287. package/dist/worker/createWorkerRowModel.js +78 -0
  288. package/dist/worker/createWorkerRowModel.js.map +1 -0
  289. package/dist/worker/initTableWorker.cjs +100 -0
  290. package/dist/worker/initTableWorker.cjs.map +1 -0
  291. package/dist/worker/initTableWorker.d.cts +33 -0
  292. package/dist/worker/initTableWorker.d.ts +33 -0
  293. package/dist/worker/initTableWorker.js +100 -0
  294. package/dist/worker/initTableWorker.js.map +1 -0
  295. package/dist/worker/rebuildRowModel.cjs +72 -0
  296. package/dist/worker/rebuildRowModel.cjs.map +1 -0
  297. package/dist/worker/rebuildRowModel.d.cts +9 -0
  298. package/dist/worker/rebuildRowModel.d.ts +9 -0
  299. package/dist/worker/rebuildRowModel.js +72 -0
  300. package/dist/worker/rebuildRowModel.js.map +1 -0
  301. package/dist/worker/serializeRowModel.cjs +53 -0
  302. package/dist/worker/serializeRowModel.cjs.map +1 -0
  303. package/dist/worker/serializeRowModel.js +52 -0
  304. package/dist/worker/serializeRowModel.js.map +1 -0
  305. package/dist/worker/tableWorkerProtocol.cjs +29 -0
  306. package/dist/worker/tableWorkerProtocol.cjs.map +1 -0
  307. package/dist/worker/tableWorkerProtocol.d.cts +88 -0
  308. package/dist/worker/tableWorkerProtocol.d.ts +88 -0
  309. package/dist/worker/tableWorkerProtocol.js +27 -0
  310. package/dist/worker/tableWorkerProtocol.js.map +1 -0
  311. package/package.json +6 -2
  312. package/src/core/rows/coreRowsFeature.ts +1 -0
  313. package/src/experimental-worker-plugin.ts +22 -0
  314. package/src/features/row-selection/rowSelectionFeature.utils.ts +2 -1
  315. package/src/features/row-sorting/createSortedRowModel.ts +31 -10
  316. package/src/features/row-sorting/rowSortingFeature.utils.ts +2 -10
  317. package/src/utils.ts +21 -0
  318. package/src/worker/createTableWorker.ts +357 -0
  319. package/src/worker/createWorkerRowModel.ts +121 -0
  320. package/src/worker/initTableWorker.ts +164 -0
  321. package/src/worker/rebuildRowModel.ts +117 -0
  322. package/src/worker/serializeRowModel.ts +80 -0
  323. package/src/worker/tableWorkerProtocol.ts +105 -0
@@ -0,0 +1,164 @@
1
+ import { constructTable } from '../core/table/constructTable'
2
+ import { storeReactivityBindings } from '../store-reactivity-bindings'
3
+ import { makeObjectMap } from '../utils'
4
+ import { serializeRowModel } from './serializeRowModel'
5
+ import type { RowData } from '../types/type-utils'
6
+ import type { TableFeatures } from '../types/TableFeatures'
7
+ import type { TableOptions } from '../types/TableOptions'
8
+ import type { Table_Internal } from '../types/Table'
9
+ import type {
10
+ TableWorkerRequest,
11
+ TableWorkerResult,
12
+ TableWorkerStage,
13
+ TableWorkerStagePayload,
14
+ } from './tableWorkerProtocol'
15
+
16
+ export type TableWorkerConfig<
17
+ TFeatures extends TableFeatures,
18
+ TData extends RowData,
19
+ > = Omit<TableOptions<TFeatures, TData>, 'data'>
20
+
21
+ function capitalize(stage: string) {
22
+ return stage.charAt(0).toUpperCase() + stage.slice(1)
23
+ }
24
+
25
+ /** Flatten column-group defs to leaf defs (mirrors core's id resolution). */
26
+ function flattenColumnDefs(defs: Array<any>): Array<any> {
27
+ return defs.flatMap((def) =>
28
+ def.columns ? flattenColumnDefs(def.columns) : [def],
29
+ )
30
+ }
31
+
32
+ /**
33
+ * Runs a headless "shadow table" inside a dedicated Web Worker.
34
+ *
35
+ * Call this from a user-authored worker entry file, passing the same columns
36
+ * and processing features used on the main thread. The shadow table runs the
37
+ * real table-core row model pipeline (real fns, real Row objects) off the
38
+ * main thread and posts back one payload per stage the main thread requested:
39
+ * a transferable index permutation for flat results, a serialized row tree
40
+ * (with eagerly computed aggregates) when grouping produces synthetic rows.
41
+ *
42
+ * Everything passed here must be thread-portable: `accessorKey` columns or
43
+ * accessors defined in a shared module, and fns from registries or shared
44
+ * modules (no closures over app state).
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * // table.worker.ts
49
+ * import { initTableWorker } from '@tanstack/table-core/experimental-worker-plugin'
50
+ * import { columns, sharedFeatures } from './tableConfig'
51
+ *
52
+ * initTableWorker({ features: sharedFeatures, columns })
53
+ * ```
54
+ */
55
+ export function initTableWorker<
56
+ TFeatures extends TableFeatures,
57
+ TData extends RowData,
58
+ >(config: TableWorkerConfig<TFeatures, TData>): void {
59
+ let table: Table_Internal<TFeatures, TData> | undefined
60
+ let dataVersion = 0
61
+ let coreIndexById: Record<string, number> = makeObjectMap()
62
+ let aggregateColumnIds: Array<string> = []
63
+ // Last-sent model identity per stage: the memoized getters return stable
64
+ // objects when their inputs did not change, so identity equality is exactly
65
+ // "this stage's result is unchanged".
66
+ let lastSentModels: { [K in TableWorkerStage]?: unknown } = {}
67
+
68
+ self.onmessage = (event: MessageEvent<TableWorkerRequest<TData>>) => {
69
+ const message = event.data
70
+
71
+ if (message.type === 'data') {
72
+ dataVersion = message.dataVersion
73
+ lastSentModels = {}
74
+ if (!table) {
75
+ table = constructTable<TFeatures, TData>({
76
+ ...(config as TableOptions<TFeatures, TData>),
77
+ features: {
78
+ coreReactivityFeature: storeReactivityBindings(),
79
+ ...config.features,
80
+ },
81
+ data: message.data,
82
+ }) as unknown as Table_Internal<TFeatures, TData>
83
+ // Only columns with an explicit aggregation get eagerly aggregated
84
+ // per group. Sync tables aggregate lazily (visible cells only), so
85
+ // auto-aggregating every column would explode on high-cardinality
86
+ // grouping for values nothing renders. Read the RAW column defs:
87
+ // columnGroupingFeature injects default aggregatedCell/aggregationFn
88
+ // into every resolved columnDef, so the resolved defs can't tell
89
+ // explicit from default.
90
+ aggregateColumnIds = flattenColumnDefs(config.columns as Array<any>)
91
+ .filter(
92
+ (def) => def.aggregationFn != null || def.aggregatedCell != null,
93
+ )
94
+ .map(
95
+ (def) =>
96
+ def.id ??
97
+ (typeof def.accessorKey === 'string'
98
+ ? def.accessorKey.replaceAll('.', '_')
99
+ : undefined),
100
+ )
101
+ .filter((id): id is string => id != null)
102
+ } else {
103
+ table.setOptions((prev) => ({ ...prev, data: message.data }))
104
+ }
105
+ // Map row ids to data positions once per dataset; serialization uses it
106
+ // to express every stage result in terms of core row positions.
107
+ const coreFlatRows = table.getCoreRowModel().flatRows
108
+ coreIndexById = makeObjectMap()
109
+ for (let i = 0; i < coreFlatRows.length; i++) {
110
+ coreIndexById[coreFlatRows[i]!.id] = i
111
+ }
112
+ return
113
+ }
114
+
115
+ if (!table) return
116
+
117
+ const start = performance.now()
118
+
119
+ // Apply the serializable state slices to the shadow table's base atoms.
120
+ table._reactivity.batch(() => {
121
+ for (const [key, value] of Object.entries(message.state)) {
122
+ const baseAtom = (table!.baseAtoms as Record<string, any>)[key]
123
+ if (baseAtom && value !== undefined) {
124
+ baseAtom.set(value)
125
+ }
126
+ }
127
+ })
128
+
129
+ // Compute exactly the stages the main thread requested, skipping any this
130
+ // shadow table has no row model factory for (the main thread warns).
131
+ const stages: { [K in TableWorkerStage]?: TableWorkerStagePayload } = {}
132
+ const transfer: Array<Transferable> = []
133
+
134
+ for (const stage of message.stages) {
135
+ if (!(config.features as Record<string, unknown>)[`${stage}RowModel`]) {
136
+ continue
137
+ }
138
+ const model = (table as any)[`get${capitalize(stage)}RowModel`]()
139
+ // Memoized getters return the same object when inputs are unchanged;
140
+ // skip re-serializing (and the main thread skips rebuilding). Safe under
141
+ // single-flight: results are never dropped within a dataVersion.
142
+ if (lastSentModels[stage] === model) {
143
+ stages[stage] = { kind: 'unchanged' }
144
+ continue
145
+ }
146
+ lastSentModels[stage] = model
147
+ stages[stage] = serializeRowModel(
148
+ model,
149
+ coreIndexById,
150
+ aggregateColumnIds,
151
+ transfer,
152
+ )
153
+ }
154
+
155
+ const response: TableWorkerResult = {
156
+ type: 'result',
157
+ requestId: message.requestId,
158
+ dataVersion,
159
+ stages,
160
+ computeMs: performance.now() - start,
161
+ }
162
+ postMessage(response, { transfer })
163
+ }
164
+ }
@@ -0,0 +1,117 @@
1
+ import { constructRow } from '../core/rows/constructRow'
2
+ import { hasOwn } from '../utils'
3
+ import type { RowModel } from '../core/row-models/coreRowModelsFeature.types'
4
+ import type { Table_Internal } from '../types/Table'
5
+ import type {
6
+ TableWorkerRowNode,
7
+ TableWorkerStagePayload,
8
+ } from './tableWorkerProtocol'
9
+
10
+ /** Payloads that carry data; `unchanged` never reaches the rebuilder. */
11
+ export type TableWorkerDataPayload = Exclude<
12
+ TableWorkerStagePayload,
13
+ { kind: 'unchanged' }
14
+ >
15
+
16
+ type AnyTable = Table_Internal<any, any>
17
+
18
+ // Main-thread side: payload + this table's core rows -> RowModel. Mirrors how
19
+ // the sync row models treat rows: data rows are reused (with depth/parentId
20
+ // rewritten, exactly like createGroupedRowModel does), synthetic group rows
21
+ // are reconstructed via constructRow with their worker-computed aggregates
22
+ // pre-seeded so no aggregation ever runs on the main thread.
23
+
24
+ function collectLeafRows(subRows: Array<any>, out: Array<any>) {
25
+ for (let i = 0; i < subRows.length; i++) {
26
+ const row = subRows[i]
27
+ if (row.groupingColumnId == null) {
28
+ out.push(row)
29
+ } else {
30
+ collectLeafRows(row.subRows, out)
31
+ }
32
+ }
33
+ }
34
+
35
+ export function rebuildRowModel(
36
+ table: AnyTable,
37
+ payload: TableWorkerDataPayload,
38
+ /**
39
+ * Whether a flat payload should rewrite row depth/parentId. Mirrors core:
40
+ * the grouped model's passthrough resets them, the filtered model never
41
+ * touches them. Without this distinction a filtered rebuild could zero the
42
+ * depths a grouped/sorted tree rebuild just assigned to shared row objects.
43
+ */
44
+ resetDepths: boolean,
45
+ ): RowModel<any, any> {
46
+ const core = table.getCoreRowModel()
47
+
48
+ if (payload.kind === 'flat') {
49
+ const { indices } = payload
50
+ const rows = new Array(indices.length)
51
+ for (let i = 0; i < indices.length; i++) {
52
+ const row: any = core.flatRows[indices[i]!]!
53
+ if (resetDepths) {
54
+ row.depth = 0
55
+ row.parentId = undefined
56
+ }
57
+ rows[i] = row
58
+ }
59
+ return { rows, flatRows: rows, rowsById: core.rowsById }
60
+ }
61
+
62
+ const flatRows: Array<any> = []
63
+ // Data rows resolve through the prototype chain to the core map; only
64
+ // synthetic group rows are added on top.
65
+ const rowsById: Record<string, any> = Object.create(core.rowsById)
66
+
67
+ const rebuildRows = (
68
+ nodes: Array<TableWorkerRowNode>,
69
+ depth: number,
70
+ parentId: string | undefined,
71
+ ): Array<any> => {
72
+ const rows = new Array(nodes.length)
73
+ for (let i = 0; i < nodes.length; i++) {
74
+ const node = nodes[i]!
75
+ if (typeof node === 'number') {
76
+ const row: any = core.flatRows[node]!
77
+ row.depth = depth
78
+ row.parentId = parentId
79
+ flatRows.push(row)
80
+ rows[i] = row
81
+ continue
82
+ }
83
+
84
+ const subRows = rebuildRows(node.children, depth + 1, node.id)
85
+ const leafRows: Array<any> = []
86
+ collectLeafRows(subRows, leafRows)
87
+
88
+ const row: any = constructRow(
89
+ table,
90
+ node.id,
91
+ leafRows[0]?.original,
92
+ node.index,
93
+ depth,
94
+ undefined,
95
+ parentId,
96
+ )
97
+ const aggregates = node.aggregates
98
+ Object.assign(row, {
99
+ groupingColumnId: node.groupingColumnId,
100
+ groupingValue: node.groupingValue,
101
+ subRows,
102
+ leafRows,
103
+ getValue: (columnId: string) =>
104
+ hasOwn(aggregates, columnId) ? aggregates[columnId] : undefined,
105
+ })
106
+
107
+ flatRows.push(row)
108
+ rowsById[node.id] = row
109
+ rows[i] = row
110
+ }
111
+ return rows
112
+ }
113
+
114
+ const rows = rebuildRows(payload.children, 0, undefined)
115
+
116
+ return { rows, flatRows, rowsById }
117
+ }
@@ -0,0 +1,80 @@
1
+ import type { RowModel } from '../core/row-models/coreRowModelsFeature.types'
2
+ import type {
3
+ TableWorkerRowNode,
4
+ TableWorkerStagePayload,
5
+ } from './tableWorkerProtocol'
6
+
7
+ // Worker-side: RowModel -> transferable payload. Stage-agnostic; the payload
8
+ // kind is chosen from the model's shape (synthetic rows present or not).
9
+
10
+ function isCloneSafe(value: unknown): boolean {
11
+ return typeof value !== 'function' && typeof value !== 'symbol'
12
+ }
13
+
14
+ function serializeRows(
15
+ rows: Array<any>,
16
+ coreIndexById: Record<string, number>,
17
+ aggregateColumnIds: Array<string>,
18
+ ): Array<TableWorkerRowNode> {
19
+ const nodes = new Array<TableWorkerRowNode>(rows.length)
20
+ for (let i = 0; i < rows.length; i++) {
21
+ const row = rows[i]
22
+ if (row.groupingColumnId == null) {
23
+ // Data row: its position in `options.data` is all the main thread needs.
24
+ nodes[i] = coreIndexById[row.id]!
25
+ continue
26
+ }
27
+ // Synthetic group row: compute aggregates eagerly (the expensive per-group
28
+ // work we want off the main thread), but only for columns with an explicit
29
+ // aggregation; sync tables aggregate lazily, so eagerly auto-aggregating
30
+ // every column would explode on high-cardinality grouping.
31
+ const aggregates: Record<string, unknown> = {}
32
+ for (let c = 0; c < aggregateColumnIds.length; c++) {
33
+ const columnId = aggregateColumnIds[c]!
34
+ const value = row.getValue(columnId)
35
+ if (value !== undefined && isCloneSafe(value)) {
36
+ aggregates[columnId] = value
37
+ }
38
+ }
39
+ // The group's own column always serializes its display value (the first
40
+ // leaf's value) so grouped cells render.
41
+ if (!(row.groupingColumnId in aggregates)) {
42
+ const value = row.getValue(row.groupingColumnId)
43
+ if (value !== undefined && isCloneSafe(value)) {
44
+ aggregates[row.groupingColumnId] = value
45
+ }
46
+ }
47
+ nodes[i] = {
48
+ id: row.id,
49
+ groupingColumnId: row.groupingColumnId,
50
+ groupingValue: row.groupingValue,
51
+ index: row.index,
52
+ aggregates,
53
+ children: serializeRows(row.subRows, coreIndexById, aggregateColumnIds),
54
+ }
55
+ }
56
+ return nodes
57
+ }
58
+
59
+ export function serializeRowModel(
60
+ model: RowModel<any, any>,
61
+ coreIndexById: Record<string, number>,
62
+ aggregateColumnIds: Array<string>,
63
+ transfer: Array<Transferable>,
64
+ ): TableWorkerStagePayload {
65
+ // Flat fast path: no synthetic rows anywhere (flatRows === rows for flat
66
+ // data). A Uint32Array permutation transfers at zero-copy cost.
67
+ if (model.flatRows.length === model.rows.length) {
68
+ const indices = new Uint32Array(model.rows.length)
69
+ for (let i = 0; i < indices.length; i++) {
70
+ indices[i] = coreIndexById[model.rows[i]!.id]!
71
+ }
72
+ transfer.push(indices.buffer)
73
+ return { kind: 'flat', indices }
74
+ }
75
+
76
+ return {
77
+ kind: 'tree',
78
+ children: serializeRows(model.rows, coreIndexById, aggregateColumnIds),
79
+ }
80
+ }
@@ -0,0 +1,105 @@
1
+ import type { RowData } from '../types/type-utils'
2
+
3
+ /**
4
+ * Row model stages that can be offloaded to the worker, in pipeline order.
5
+ * Everything else in this module is derived from this list; adding a stage
6
+ * means adding an entry here and to `tableWorkerStageStateDeps`.
7
+ */
8
+ export const tableWorkerPipeline = [
9
+ 'filtered',
10
+ 'grouped',
11
+ 'sorted',
12
+ 'expanded',
13
+ ] as const
14
+
15
+ export type TableWorkerStage = (typeof tableWorkerPipeline)[number]
16
+
17
+ /**
18
+ * The state slices each stage's computation depends on. The main thread sends
19
+ * the union of deps for its registered stages; a change to any of them
20
+ * triggers one worker round trip.
21
+ */
22
+ export const tableWorkerStageStateDeps: Record<
23
+ TableWorkerStage,
24
+ Array<string>
25
+ > = {
26
+ filtered: ['columnFilters', 'globalFilter'],
27
+ grouped: ['grouping'],
28
+ sorted: ['sorting'],
29
+ expanded: ['expanded'],
30
+ }
31
+
32
+ /**
33
+ * A serialized synthetic (group) row. Leaf rows serialize as their position in
34
+ * `options.data`; group rows carry what `constructRow` + the grouped row model
35
+ * need to rebuild them, plus eagerly computed aggregate values so no
36
+ * aggregation runs on the main thread.
37
+ */
38
+ export interface TableWorkerGroupNode {
39
+ id: string
40
+ groupingColumnId: string
41
+ groupingValue: unknown
42
+ index: number
43
+ aggregates: Record<string, unknown>
44
+ children: Array<TableWorkerRowNode>
45
+ }
46
+
47
+ export type TableWorkerRowNode = number | TableWorkerGroupNode
48
+
49
+ /**
50
+ * A stage result. Flat models (every row is a data row) travel as a
51
+ * transferable index permutation; models containing synthetic rows (grouping)
52
+ * travel as a tree. The kind is chosen from the model's actual shape at
53
+ * runtime, not from the stage name: a sorted model is flat without grouping
54
+ * and a tree with it.
55
+ *
56
+ * `unchanged` means the stage's model is identical to the last one sent for
57
+ * this dataset (its memoized inputs did not change); the main thread keeps
58
+ * its previous result and skips the rebuild entirely.
59
+ */
60
+ export type TableWorkerStagePayload =
61
+ | { kind: 'flat'; indices: Uint32Array }
62
+ | { kind: 'tree'; children: Array<TableWorkerRowNode> }
63
+ | { kind: 'unchanged' }
64
+
65
+ export type TableWorkerRequest<TData extends RowData = any> =
66
+ | {
67
+ type: 'data'
68
+ dataVersion: number
69
+ data: Array<TData>
70
+ }
71
+ | {
72
+ type: 'process'
73
+ requestId: number
74
+ dataVersion: number
75
+ /** The stages the main thread has worker-backed row models for. */
76
+ stages: Array<TableWorkerStage>
77
+ /** Serializable state slices (union of the stages' deps). */
78
+ state: Record<string, unknown>
79
+ }
80
+
81
+ export interface TableWorkerResult {
82
+ type: 'result'
83
+ requestId: number
84
+ dataVersion: number
85
+ stages: { [K in TableWorkerStage]?: TableWorkerStagePayload }
86
+ computeMs: number
87
+ }
88
+
89
+ export type TableWorkerResponse = TableWorkerResult
90
+
91
+ /**
92
+ * The state slice added by `workerRowModelsFeature`. `version` bumps when a
93
+ * worker result lands (driving re-renders through the normal state path);
94
+ * `isPending` is true while a request is in flight. The timing fields expose
95
+ * the last result's worker compute time and full round trip for devtools and
96
+ * debugging.
97
+ */
98
+ export interface TableState_WorkerRowModels {
99
+ workerRowModels: {
100
+ version: number
101
+ isPending: boolean
102
+ lastComputeMs?: number
103
+ lastRoundTripMs?: number
104
+ }
105
+ }