@tanstack/table-core 9.0.0-beta.5 → 9.0.0-beta.51

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 (602) hide show
  1. package/README.md +2 -0
  2. package/dist/core/cells/constructCell.cjs +1 -4
  3. package/dist/core/cells/constructCell.cjs.map +1 -1
  4. package/dist/core/cells/constructCell.d.cts +4 -4
  5. package/dist/core/cells/constructCell.d.ts +4 -4
  6. package/dist/core/cells/constructCell.js +1 -4
  7. package/dist/core/cells/constructCell.js.map +1 -1
  8. package/dist/core/cells/coreCellsFeature.types.d.cts +7 -7
  9. package/dist/core/cells/coreCellsFeature.types.d.ts +7 -7
  10. package/dist/core/cells/coreCellsFeature.utils.d.cts +4 -4
  11. package/dist/core/cells/coreCellsFeature.utils.d.ts +4 -4
  12. package/dist/core/columns/constructColumn.cjs +4 -5
  13. package/dist/core/columns/constructColumn.cjs.map +1 -1
  14. package/dist/core/columns/constructColumn.d.cts +3 -3
  15. package/dist/core/columns/constructColumn.d.ts +3 -3
  16. package/dist/core/columns/constructColumn.js +4 -5
  17. package/dist/core/columns/constructColumn.js.map +1 -1
  18. package/dist/core/columns/coreColumnsFeature.cjs +12 -18
  19. package/dist/core/columns/coreColumnsFeature.cjs.map +1 -1
  20. package/dist/core/columns/coreColumnsFeature.js +12 -18
  21. package/dist/core/columns/coreColumnsFeature.js.map +1 -1
  22. package/dist/core/columns/coreColumnsFeature.types.d.cts +7 -7
  23. package/dist/core/columns/coreColumnsFeature.types.d.ts +7 -7
  24. package/dist/core/columns/coreColumnsFeature.utils.cjs +4 -8
  25. package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
  26. package/dist/core/columns/coreColumnsFeature.utils.d.cts +9 -9
  27. package/dist/core/columns/coreColumnsFeature.utils.d.ts +9 -9
  28. package/dist/core/columns/coreColumnsFeature.utils.js +5 -9
  29. package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
  30. package/dist/core/coreFeatures.cjs.map +1 -1
  31. package/dist/core/coreFeatures.d.cts +1 -1
  32. package/dist/core/coreFeatures.d.ts +1 -1
  33. package/dist/core/coreFeatures.js.map +1 -1
  34. package/dist/core/headers/buildHeaderGroups.cjs +1 -2
  35. package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
  36. package/dist/core/headers/buildHeaderGroups.d.cts +2 -2
  37. package/dist/core/headers/buildHeaderGroups.d.ts +2 -2
  38. package/dist/core/headers/buildHeaderGroups.js +1 -2
  39. package/dist/core/headers/buildHeaderGroups.js.map +1 -1
  40. package/dist/core/headers/constructHeader.cjs +1 -4
  41. package/dist/core/headers/constructHeader.cjs.map +1 -1
  42. package/dist/core/headers/constructHeader.d.cts +2 -2
  43. package/dist/core/headers/constructHeader.d.ts +2 -2
  44. package/dist/core/headers/constructHeader.js +1 -4
  45. package/dist/core/headers/constructHeader.js.map +1 -1
  46. package/dist/core/headers/coreHeadersFeature.cjs +8 -11
  47. package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
  48. package/dist/core/headers/coreHeadersFeature.js +8 -11
  49. package/dist/core/headers/coreHeadersFeature.js.map +1 -1
  50. package/dist/core/headers/coreHeadersFeature.types.d.cts +6 -6
  51. package/dist/core/headers/coreHeadersFeature.types.d.ts +6 -6
  52. package/dist/core/headers/coreHeadersFeature.utils.cjs +8 -10
  53. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  54. package/dist/core/headers/coreHeadersFeature.utils.d.cts +6 -6
  55. package/dist/core/headers/coreHeadersFeature.utils.d.ts +6 -6
  56. package/dist/core/headers/coreHeadersFeature.utils.js +8 -10
  57. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  58. package/dist/core/row-models/coreRowModelsFeature.types.d.cts +7 -15
  59. package/dist/core/row-models/coreRowModelsFeature.types.d.ts +7 -15
  60. package/dist/core/row-models/coreRowModelsFeature.utils.cjs +8 -26
  61. package/dist/core/row-models/coreRowModelsFeature.utils.cjs.map +1 -1
  62. package/dist/core/row-models/coreRowModelsFeature.utils.d.cts +16 -16
  63. package/dist/core/row-models/coreRowModelsFeature.utils.d.ts +16 -16
  64. package/dist/core/row-models/coreRowModelsFeature.utils.js +8 -26
  65. package/dist/core/row-models/coreRowModelsFeature.utils.js.map +1 -1
  66. package/dist/core/row-models/createCoreRowModel.cjs +4 -6
  67. package/dist/core/row-models/createCoreRowModel.cjs.map +1 -1
  68. package/dist/core/row-models/createCoreRowModel.d.cts +2 -2
  69. package/dist/core/row-models/createCoreRowModel.d.ts +2 -2
  70. package/dist/core/row-models/createCoreRowModel.js +5 -7
  71. package/dist/core/row-models/createCoreRowModel.js.map +1 -1
  72. package/dist/core/rows/constructRow.cjs +6 -10
  73. package/dist/core/rows/constructRow.cjs.map +1 -1
  74. package/dist/core/rows/constructRow.d.cts +2 -2
  75. package/dist/core/rows/constructRow.d.ts +2 -2
  76. package/dist/core/rows/constructRow.js +7 -10
  77. package/dist/core/rows/constructRow.js.map +1 -1
  78. package/dist/core/rows/coreRowsFeature.cjs +18 -2
  79. package/dist/core/rows/coreRowsFeature.cjs.map +1 -1
  80. package/dist/core/rows/coreRowsFeature.js +19 -3
  81. package/dist/core/rows/coreRowsFeature.js.map +1 -1
  82. package/dist/core/rows/coreRowsFeature.types.d.cts +41 -7
  83. package/dist/core/rows/coreRowsFeature.types.d.ts +41 -7
  84. package/dist/core/rows/coreRowsFeature.utils.cjs +62 -8
  85. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  86. package/dist/core/rows/coreRowsFeature.utils.d.cts +24 -5
  87. package/dist/core/rows/coreRowsFeature.utils.d.ts +24 -5
  88. package/dist/core/rows/coreRowsFeature.utils.js +61 -10
  89. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  90. package/dist/core/table/constructTable.cjs +24 -14
  91. package/dist/core/table/constructTable.cjs.map +1 -1
  92. package/dist/core/table/constructTable.d.cts +1 -1
  93. package/dist/core/table/constructTable.d.ts +1 -1
  94. package/dist/core/table/constructTable.js +24 -14
  95. package/dist/core/table/constructTable.js.map +1 -1
  96. package/dist/core/table/coreTablesFeature.types.d.cts +32 -19
  97. package/dist/core/table/coreTablesFeature.types.d.ts +32 -19
  98. package/dist/core/table/coreTablesFeature.utils.cjs +38 -14
  99. package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
  100. package/dist/core/table/coreTablesFeature.utils.d.cts +10 -7
  101. package/dist/core/table/coreTablesFeature.utils.d.ts +10 -7
  102. package/dist/core/table/coreTablesFeature.utils.js +38 -14
  103. package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
  104. package/dist/experimental-worker-plugin.cjs +14 -0
  105. package/dist/experimental-worker-plugin.d.cts +5 -0
  106. package/dist/experimental-worker-plugin.d.ts +5 -0
  107. package/dist/experimental-worker-plugin.js +6 -0
  108. package/dist/features/column-faceting/columnFacetingFeature.cjs +12 -18
  109. package/dist/features/column-faceting/columnFacetingFeature.cjs.map +1 -1
  110. package/dist/features/column-faceting/columnFacetingFeature.js +12 -18
  111. package/dist/features/column-faceting/columnFacetingFeature.js.map +1 -1
  112. package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +15 -33
  113. package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +15 -33
  114. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +23 -12
  115. package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
  116. package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +9 -9
  117. package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +9 -9
  118. package/dist/features/column-faceting/columnFacetingFeature.utils.js +24 -12
  119. package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
  120. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs +7 -4
  121. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs.map +1 -1
  122. package/dist/features/column-faceting/createFacetedMinMaxValues.d.cts +1 -1
  123. package/dist/features/column-faceting/createFacetedMinMaxValues.d.ts +1 -1
  124. package/dist/features/column-faceting/createFacetedMinMaxValues.js +8 -5
  125. package/dist/features/column-faceting/createFacetedMinMaxValues.js.map +1 -1
  126. package/dist/features/column-faceting/createFacetedRowModel.cjs +10 -15
  127. package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
  128. package/dist/features/column-faceting/createFacetedRowModel.d.cts +2 -2
  129. package/dist/features/column-faceting/createFacetedRowModel.d.ts +2 -2
  130. package/dist/features/column-faceting/createFacetedRowModel.js +10 -15
  131. package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
  132. package/dist/features/column-faceting/createFacetedUniqueValues.cjs +10 -6
  133. package/dist/features/column-faceting/createFacetedUniqueValues.cjs.map +1 -1
  134. package/dist/features/column-faceting/createFacetedUniqueValues.d.cts +1 -1
  135. package/dist/features/column-faceting/createFacetedUniqueValues.d.ts +1 -1
  136. package/dist/features/column-faceting/createFacetedUniqueValues.js +11 -7
  137. package/dist/features/column-faceting/createFacetedUniqueValues.js.map +1 -1
  138. package/dist/features/column-filtering/columnFilteringFeature.cjs +2 -2
  139. package/dist/features/column-filtering/columnFilteringFeature.cjs.map +1 -1
  140. package/dist/features/column-filtering/columnFilteringFeature.js +3 -3
  141. package/dist/features/column-filtering/columnFilteringFeature.js.map +1 -1
  142. package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +83 -29
  143. package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +83 -29
  144. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +23 -17
  145. package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
  146. package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +18 -14
  147. package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +18 -14
  148. package/dist/features/column-filtering/columnFilteringFeature.utils.js +23 -17
  149. package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
  150. package/dist/features/column-filtering/createFilteredRowModel.cjs +29 -25
  151. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  152. package/dist/features/column-filtering/createFilteredRowModel.d.cts +10 -4
  153. package/dist/features/column-filtering/createFilteredRowModel.d.ts +10 -4
  154. package/dist/features/column-filtering/createFilteredRowModel.js +30 -26
  155. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  156. package/dist/features/column-filtering/filterFns.cjs +399 -0
  157. package/dist/features/column-filtering/filterFns.cjs.map +1 -0
  158. package/dist/features/column-filtering/filterFns.d.cts +210 -0
  159. package/dist/features/column-filtering/filterFns.d.ts +210 -0
  160. package/dist/features/column-filtering/filterFns.js +375 -0
  161. package/dist/features/column-filtering/filterFns.js.map +1 -0
  162. package/dist/features/column-filtering/filterRowsUtils.cjs +3 -2
  163. package/dist/features/column-filtering/filterRowsUtils.cjs.map +1 -1
  164. package/dist/features/column-filtering/filterRowsUtils.js +3 -2
  165. package/dist/features/column-filtering/filterRowsUtils.js.map +1 -1
  166. package/dist/features/column-grouping/columnGroupingFeature.cjs +4 -16
  167. package/dist/features/column-grouping/columnGroupingFeature.cjs.map +1 -1
  168. package/dist/features/column-grouping/columnGroupingFeature.d.cts +1 -1
  169. package/dist/features/column-grouping/columnGroupingFeature.d.ts +1 -1
  170. package/dist/features/column-grouping/columnGroupingFeature.js +6 -18
  171. package/dist/features/column-grouping/columnGroupingFeature.js.map +1 -1
  172. package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +14 -50
  173. package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +14 -50
  174. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +6 -61
  175. package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
  176. package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +12 -49
  177. package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +12 -49
  178. package/dist/features/column-grouping/columnGroupingFeature.utils.js +8 -60
  179. package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
  180. package/dist/features/column-grouping/createGroupedRowModel.cjs +37 -24
  181. package/dist/features/column-grouping/createGroupedRowModel.cjs.map +1 -1
  182. package/dist/features/column-grouping/createGroupedRowModel.d.cts +6 -4
  183. package/dist/features/column-grouping/createGroupedRowModel.d.ts +6 -4
  184. package/dist/features/column-grouping/createGroupedRowModel.js +39 -26
  185. package/dist/features/column-grouping/createGroupedRowModel.js.map +1 -1
  186. package/dist/features/column-ordering/columnOrderingFeature.cjs +17 -21
  187. package/dist/features/column-ordering/columnOrderingFeature.cjs.map +1 -1
  188. package/dist/features/column-ordering/columnOrderingFeature.js +18 -22
  189. package/dist/features/column-ordering/columnOrderingFeature.js.map +1 -1
  190. package/dist/features/column-ordering/columnOrderingFeature.types.d.cts +28 -3
  191. package/dist/features/column-ordering/columnOrderingFeature.types.d.ts +28 -3
  192. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +35 -15
  193. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
  194. package/dist/features/column-ordering/columnOrderingFeature.utils.d.cts +26 -14
  195. package/dist/features/column-ordering/columnOrderingFeature.utils.d.ts +26 -14
  196. package/dist/features/column-ordering/columnOrderingFeature.utils.js +36 -17
  197. package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
  198. package/dist/features/column-pinning/columnPinningFeature.cjs +124 -143
  199. package/dist/features/column-pinning/columnPinningFeature.cjs.map +1 -1
  200. package/dist/features/column-pinning/columnPinningFeature.d.cts +6 -1
  201. package/dist/features/column-pinning/columnPinningFeature.d.ts +6 -1
  202. package/dist/features/column-pinning/columnPinningFeature.js +125 -144
  203. package/dist/features/column-pinning/columnPinningFeature.js.map +1 -1
  204. package/dist/features/column-pinning/columnPinningFeature.types.d.cts +52 -41
  205. package/dist/features/column-pinning/columnPinningFeature.types.d.ts +52 -41
  206. package/dist/features/column-pinning/columnPinningFeature.utils.cjs +161 -162
  207. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  208. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +101 -92
  209. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +101 -92
  210. package/dist/features/column-pinning/columnPinningFeature.utils.js +148 -149
  211. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  212. package/dist/features/column-resizing/columnResizingFeature.types.d.cts +1 -4
  213. package/dist/features/column-resizing/columnResizingFeature.types.d.ts +1 -4
  214. package/dist/features/column-resizing/columnResizingFeature.utils.cjs +84 -44
  215. package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
  216. package/dist/features/column-resizing/columnResizingFeature.utils.d.cts +6 -6
  217. package/dist/features/column-resizing/columnResizingFeature.utils.d.ts +6 -6
  218. package/dist/features/column-resizing/columnResizingFeature.utils.js +85 -45
  219. package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
  220. package/dist/features/column-sizing/columnSizingFeature.cjs +33 -67
  221. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  222. package/dist/features/column-sizing/columnSizingFeature.js +34 -68
  223. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  224. package/dist/features/column-sizing/columnSizingFeature.types.d.cts +52 -9
  225. package/dist/features/column-sizing/columnSizingFeature.types.d.ts +52 -9
  226. package/dist/features/column-sizing/columnSizingFeature.utils.cjs +88 -45
  227. package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
  228. package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +43 -25
  229. package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +43 -25
  230. package/dist/features/column-sizing/columnSizingFeature.utils.js +88 -46
  231. package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
  232. package/dist/features/column-visibility/columnVisibilityFeature.cjs +25 -36
  233. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  234. package/dist/features/column-visibility/columnVisibilityFeature.js +25 -36
  235. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  236. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +3 -3
  237. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +3 -3
  238. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +30 -29
  239. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  240. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +18 -18
  241. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +18 -18
  242. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +31 -30
  243. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  244. package/dist/features/global-filtering/globalFilteringFeature.cjs +1 -2
  245. package/dist/features/global-filtering/globalFilteringFeature.cjs.map +1 -1
  246. package/dist/features/global-filtering/globalFilteringFeature.js +1 -2
  247. package/dist/features/global-filtering/globalFilteringFeature.js.map +1 -1
  248. package/dist/features/global-filtering/globalFilteringFeature.types.d.cts +2 -2
  249. package/dist/features/global-filtering/globalFilteringFeature.types.d.ts +2 -2
  250. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +6 -6
  251. package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
  252. package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +8 -11
  253. package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +8 -11
  254. package/dist/features/global-filtering/globalFilteringFeature.utils.js +6 -6
  255. package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
  256. package/dist/features/row-aggregation/aggregationFns.cjs +246 -0
  257. package/dist/features/row-aggregation/aggregationFns.cjs.map +1 -0
  258. package/dist/features/row-aggregation/aggregationFns.d.cts +68 -0
  259. package/dist/features/row-aggregation/aggregationFns.d.ts +68 -0
  260. package/dist/features/row-aggregation/aggregationFns.js +235 -0
  261. package/dist/features/row-aggregation/aggregationFns.js.map +1 -0
  262. package/dist/features/row-aggregation/rowAggregationFeature.cjs +39 -0
  263. package/dist/features/row-aggregation/rowAggregationFeature.cjs.map +1 -0
  264. package/dist/features/row-aggregation/rowAggregationFeature.d.cts +10 -0
  265. package/dist/features/row-aggregation/rowAggregationFeature.d.ts +10 -0
  266. package/dist/features/row-aggregation/rowAggregationFeature.js +39 -0
  267. package/dist/features/row-aggregation/rowAggregationFeature.js.map +1 -0
  268. package/dist/features/row-aggregation/rowAggregationFeature.types.cjs +13 -0
  269. package/dist/features/row-aggregation/rowAggregationFeature.types.cjs.map +1 -0
  270. package/dist/features/row-aggregation/rowAggregationFeature.types.d.cts +195 -0
  271. package/dist/features/row-aggregation/rowAggregationFeature.types.d.ts +195 -0
  272. package/dist/features/row-aggregation/rowAggregationFeature.types.js +12 -0
  273. package/dist/features/row-aggregation/rowAggregationFeature.types.js.map +1 -0
  274. package/dist/features/row-aggregation/rowAggregationFeature.utils.cjs +212 -0
  275. package/dist/features/row-aggregation/rowAggregationFeature.utils.cjs.map +1 -0
  276. package/dist/features/row-aggregation/rowAggregationFeature.utils.d.cts +34 -0
  277. package/dist/features/row-aggregation/rowAggregationFeature.utils.d.ts +34 -0
  278. package/dist/features/row-aggregation/rowAggregationFeature.utils.js +206 -0
  279. package/dist/features/row-aggregation/rowAggregationFeature.utils.js.map +1 -0
  280. package/dist/features/row-expanding/createExpandedRowModel.cjs +6 -10
  281. package/dist/features/row-expanding/createExpandedRowModel.cjs.map +1 -1
  282. package/dist/features/row-expanding/createExpandedRowModel.d.cts +2 -2
  283. package/dist/features/row-expanding/createExpandedRowModel.d.ts +2 -2
  284. package/dist/features/row-expanding/createExpandedRowModel.js +6 -10
  285. package/dist/features/row-expanding/createExpandedRowModel.js.map +1 -1
  286. package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +6 -15
  287. package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +6 -15
  288. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +28 -26
  289. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  290. package/dist/features/row-expanding/rowExpandingFeature.utils.d.cts +10 -10
  291. package/dist/features/row-expanding/rowExpandingFeature.utils.d.ts +10 -10
  292. package/dist/features/row-expanding/rowExpandingFeature.utils.js +29 -27
  293. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  294. package/dist/features/row-pagination/createPaginatedRowModel.cjs +6 -10
  295. package/dist/features/row-pagination/createPaginatedRowModel.cjs.map +1 -1
  296. package/dist/features/row-pagination/createPaginatedRowModel.d.cts +2 -2
  297. package/dist/features/row-pagination/createPaginatedRowModel.d.ts +2 -2
  298. package/dist/features/row-pagination/createPaginatedRowModel.js +6 -10
  299. package/dist/features/row-pagination/createPaginatedRowModel.js.map +1 -1
  300. package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +5 -14
  301. package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +5 -14
  302. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs +9 -15
  303. package/dist/features/row-pagination/rowPaginationFeature.utils.cjs.map +1 -1
  304. package/dist/features/row-pagination/rowPaginationFeature.utils.d.cts +17 -17
  305. package/dist/features/row-pagination/rowPaginationFeature.utils.d.ts +17 -17
  306. package/dist/features/row-pagination/rowPaginationFeature.utils.js +9 -15
  307. package/dist/features/row-pagination/rowPaginationFeature.utils.js.map +1 -1
  308. package/dist/features/row-pinning/rowPinningFeature.cjs +4 -16
  309. package/dist/features/row-pinning/rowPinningFeature.cjs.map +1 -1
  310. package/dist/features/row-pinning/rowPinningFeature.js +4 -16
  311. package/dist/features/row-pinning/rowPinningFeature.js.map +1 -1
  312. package/dist/features/row-pinning/rowPinningFeature.types.d.cts +2 -2
  313. package/dist/features/row-pinning/rowPinningFeature.types.d.ts +2 -2
  314. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +9 -14
  315. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  316. package/dist/features/row-pinning/rowPinningFeature.utils.d.cts +7 -7
  317. package/dist/features/row-pinning/rowPinningFeature.utils.d.ts +7 -7
  318. package/dist/features/row-pinning/rowPinningFeature.utils.js +9 -14
  319. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  320. package/dist/features/row-selection/rowSelectionFeature.cjs +66 -22
  321. package/dist/features/row-selection/rowSelectionFeature.cjs.map +1 -1
  322. package/dist/features/row-selection/rowSelectionFeature.js +67 -23
  323. package/dist/features/row-selection/rowSelectionFeature.js.map +1 -1
  324. package/dist/features/row-selection/rowSelectionFeature.types.d.cts +49 -11
  325. package/dist/features/row-selection/rowSelectionFeature.types.d.ts +49 -11
  326. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +128 -72
  327. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  328. package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +57 -30
  329. package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +57 -30
  330. package/dist/features/row-selection/rowSelectionFeature.utils.js +129 -74
  331. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  332. package/dist/features/row-sorting/createSortedRowModel.cjs +69 -50
  333. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  334. package/dist/features/row-sorting/createSortedRowModel.d.cts +10 -4
  335. package/dist/features/row-sorting/createSortedRowModel.d.ts +10 -4
  336. package/dist/features/row-sorting/createSortedRowModel.js +70 -51
  337. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  338. package/dist/features/row-sorting/rowSortingFeature.types.d.cts +54 -22
  339. package/dist/features/row-sorting/rowSortingFeature.types.d.ts +54 -22
  340. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +31 -17
  341. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  342. package/dist/features/row-sorting/rowSortingFeature.utils.d.cts +16 -16
  343. package/dist/features/row-sorting/rowSortingFeature.utils.d.ts +16 -16
  344. package/dist/features/row-sorting/rowSortingFeature.utils.js +31 -17
  345. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  346. package/dist/features/row-sorting/sortFns.cjs +226 -0
  347. package/dist/features/row-sorting/sortFns.cjs.map +1 -0
  348. package/dist/features/row-sorting/sortFns.d.cts +98 -0
  349. package/dist/features/row-sorting/sortFns.d.ts +98 -0
  350. package/dist/features/row-sorting/sortFns.js +217 -0
  351. package/dist/features/row-sorting/sortFns.js.map +1 -0
  352. package/dist/features/stockFeatures.cjs +2 -0
  353. package/dist/features/stockFeatures.cjs.map +1 -1
  354. package/dist/features/stockFeatures.d.cts +2 -0
  355. package/dist/features/stockFeatures.d.ts +2 -0
  356. package/dist/features/stockFeatures.js +2 -0
  357. package/dist/features/stockFeatures.js.map +1 -1
  358. package/dist/flex-render.d.cts +1 -1
  359. package/dist/flex-render.d.ts +1 -1
  360. package/dist/helpers/columnHelper.cjs.map +1 -1
  361. package/dist/helpers/columnHelper.d.cts +2 -2
  362. package/dist/helpers/columnHelper.d.ts +2 -2
  363. package/dist/helpers/columnHelper.js.map +1 -1
  364. package/dist/helpers/metaHelper.cjs +30 -0
  365. package/dist/helpers/metaHelper.cjs.map +1 -0
  366. package/dist/helpers/metaHelper.d.cts +26 -0
  367. package/dist/helpers/metaHelper.d.ts +26 -0
  368. package/dist/helpers/metaHelper.js +29 -0
  369. package/dist/helpers/metaHelper.js.map +1 -0
  370. package/dist/helpers/tableFeatures.cjs +32 -3
  371. package/dist/helpers/tableFeatures.cjs.map +1 -1
  372. package/dist/helpers/tableFeatures.d.cts +34 -5
  373. package/dist/helpers/tableFeatures.d.ts +34 -5
  374. package/dist/helpers/tableFeatures.js +32 -3
  375. package/dist/helpers/tableFeatures.js.map +1 -1
  376. package/dist/index.cjs +23 -3
  377. package/dist/index.d.cts +31 -28
  378. package/dist/index.d.ts +31 -28
  379. package/dist/index.js +8 -5
  380. package/dist/static-functions.cjs +30 -19
  381. package/dist/static-functions.d.cts +8 -7
  382. package/dist/static-functions.d.ts +8 -7
  383. package/dist/static-functions.js +8 -7
  384. package/dist/store-reactivity-bindings.cjs +3 -3
  385. package/dist/store-reactivity-bindings.cjs.map +1 -1
  386. package/dist/store-reactivity-bindings.d.cts +1 -1
  387. package/dist/store-reactivity-bindings.d.ts +1 -1
  388. package/dist/store-reactivity-bindings.js +3 -3
  389. package/dist/store-reactivity-bindings.js.map +1 -1
  390. package/dist/types/Cell.d.cts +4 -2
  391. package/dist/types/Cell.d.ts +4 -2
  392. package/dist/types/Column.d.cts +15 -15
  393. package/dist/types/Column.d.ts +15 -15
  394. package/dist/types/ColumnDef.d.cts +30 -14
  395. package/dist/types/ColumnDef.d.ts +30 -14
  396. package/dist/types/Header.d.cts +2 -2
  397. package/dist/types/Header.d.ts +2 -2
  398. package/dist/types/HeaderGroup.d.cts +2 -2
  399. package/dist/types/HeaderGroup.d.ts +2 -2
  400. package/dist/types/Row.d.cts +6 -4
  401. package/dist/types/Row.d.ts +6 -4
  402. package/dist/types/RowModel.d.cts +11 -23
  403. package/dist/types/RowModel.d.ts +11 -23
  404. package/dist/types/RowModelFns.d.cts +4 -4
  405. package/dist/types/RowModelFns.d.ts +4 -4
  406. package/dist/types/Table.d.cts +26 -31
  407. package/dist/types/Table.d.ts +26 -31
  408. package/dist/types/TableFeatures.d.cts +350 -22
  409. package/dist/types/TableFeatures.d.ts +350 -22
  410. package/dist/types/TableOptions.d.cts +22 -14
  411. package/dist/types/TableOptions.d.ts +22 -14
  412. package/dist/types/TableState.d.cts +6 -6
  413. package/dist/types/TableState.d.ts +6 -6
  414. package/dist/types/type-utils.d.cts +8 -1
  415. package/dist/types/type-utils.d.ts +8 -1
  416. package/dist/utils.cjs +51 -29
  417. package/dist/utils.cjs.map +1 -1
  418. package/dist/utils.d.cts +30 -8
  419. package/dist/utils.d.ts +30 -8
  420. package/dist/utils.js +49 -30
  421. package/dist/utils.js.map +1 -1
  422. package/dist/worker/createTableWorker.cjs +189 -0
  423. package/dist/worker/createTableWorker.cjs.map +1 -0
  424. package/dist/worker/createTableWorker.d.cts +102 -0
  425. package/dist/worker/createTableWorker.d.ts +102 -0
  426. package/dist/worker/createTableWorker.js +186 -0
  427. package/dist/worker/createTableWorker.js.map +1 -0
  428. package/dist/worker/createWorkerRowModel.cjs +78 -0
  429. package/dist/worker/createWorkerRowModel.cjs.map +1 -0
  430. package/dist/worker/createWorkerRowModel.d.cts +42 -0
  431. package/dist/worker/createWorkerRowModel.d.ts +42 -0
  432. package/dist/worker/createWorkerRowModel.js +78 -0
  433. package/dist/worker/createWorkerRowModel.js.map +1 -0
  434. package/dist/worker/initTableWorker.cjs +100 -0
  435. package/dist/worker/initTableWorker.cjs.map +1 -0
  436. package/dist/worker/initTableWorker.d.cts +33 -0
  437. package/dist/worker/initTableWorker.d.ts +33 -0
  438. package/dist/worker/initTableWorker.js +100 -0
  439. package/dist/worker/initTableWorker.js.map +1 -0
  440. package/dist/worker/rebuildRowModel.cjs +72 -0
  441. package/dist/worker/rebuildRowModel.cjs.map +1 -0
  442. package/dist/worker/rebuildRowModel.d.cts +9 -0
  443. package/dist/worker/rebuildRowModel.d.ts +9 -0
  444. package/dist/worker/rebuildRowModel.js +72 -0
  445. package/dist/worker/rebuildRowModel.js.map +1 -0
  446. package/dist/worker/serializeRowModel.cjs +53 -0
  447. package/dist/worker/serializeRowModel.cjs.map +1 -0
  448. package/dist/worker/serializeRowModel.js +52 -0
  449. package/dist/worker/serializeRowModel.js.map +1 -0
  450. package/dist/worker/tableWorkerProtocol.cjs +29 -0
  451. package/dist/worker/tableWorkerProtocol.cjs.map +1 -0
  452. package/dist/worker/tableWorkerProtocol.d.cts +88 -0
  453. package/dist/worker/tableWorkerProtocol.d.ts +88 -0
  454. package/dist/worker/tableWorkerProtocol.js +27 -0
  455. package/dist/worker/tableWorkerProtocol.js.map +1 -0
  456. package/package.json +8 -3
  457. package/skills/aggregation/SKILL.md +141 -0
  458. package/skills/api-not-found/SKILL.md +113 -0
  459. package/skills/client-vs-server/SKILL.md +164 -0
  460. package/skills/column-faceting/SKILL.md +97 -0
  461. package/skills/column-filtering/SKILL.md +87 -0
  462. package/skills/column-ordering/SKILL.md +75 -0
  463. package/skills/column-pinning/SKILL.md +89 -0
  464. package/skills/column-resizing/SKILL.md +91 -0
  465. package/skills/column-sizing/SKILL.md +72 -0
  466. package/skills/column-visibility/SKILL.md +75 -0
  467. package/skills/core/SKILL.md +175 -0
  468. package/skills/custom-features/SKILL.md +235 -0
  469. package/skills/expanding/SKILL.md +80 -0
  470. package/skills/global-filtering/SKILL.md +84 -0
  471. package/skills/grouping/SKILL.md +51 -401
  472. package/skills/migrate-v8-to-v9/SKILL.md +274 -416
  473. package/skills/pagination/SKILL.md +37 -344
  474. package/skills/row-pinning/SKILL.md +47 -234
  475. package/skills/row-selection/SKILL.md +75 -302
  476. package/skills/sorting/SKILL.md +45 -303
  477. package/skills/table-features/SKILL.md +159 -0
  478. package/skills/typescript/SKILL.md +126 -0
  479. package/src/core/cells/coreCellsFeature.types.ts +6 -6
  480. package/src/core/columns/constructColumn.ts +6 -0
  481. package/src/core/columns/coreColumnsFeature.types.ts +8 -8
  482. package/src/core/columns/coreColumnsFeature.utils.ts +4 -4
  483. package/src/core/coreFeatures.ts +1 -1
  484. package/src/core/headers/buildHeaderGroups.ts +4 -2
  485. package/src/core/headers/coreHeadersFeature.types.ts +12 -12
  486. package/src/core/headers/coreHeadersFeature.utils.ts +7 -8
  487. package/src/core/row-models/coreRowModelsFeature.types.ts +6 -20
  488. package/src/core/row-models/coreRowModelsFeature.utils.ts +8 -8
  489. package/src/core/row-models/createCoreRowModel.ts +7 -6
  490. package/src/core/rows/constructRow.ts +4 -2
  491. package/src/core/rows/coreRowsFeature.ts +21 -0
  492. package/src/core/rows/coreRowsFeature.types.ts +45 -8
  493. package/src/core/rows/coreRowsFeature.utils.ts +93 -5
  494. package/src/core/table/constructTable.ts +44 -6
  495. package/src/core/table/coreTablesFeature.types.ts +45 -20
  496. package/src/core/table/coreTablesFeature.utils.ts +59 -19
  497. package/src/experimental-worker-plugin.ts +22 -0
  498. package/src/features/column-faceting/columnFacetingFeature.types.ts +17 -48
  499. package/src/features/column-faceting/columnFacetingFeature.utils.ts +53 -18
  500. package/src/features/column-faceting/createFacetedMinMaxValues.ts +33 -7
  501. package/src/features/column-faceting/createFacetedRowModel.ts +8 -1
  502. package/src/features/column-faceting/createFacetedUniqueValues.ts +41 -10
  503. package/src/features/column-filtering/columnFilteringFeature.ts +3 -2
  504. package/src/features/column-filtering/columnFilteringFeature.types.ts +117 -41
  505. package/src/features/column-filtering/columnFilteringFeature.utils.ts +37 -23
  506. package/src/features/column-filtering/createFilteredRowModel.ts +28 -17
  507. package/src/features/column-filtering/filterFns.ts +533 -0
  508. package/src/features/column-filtering/filterRowsUtils.ts +3 -2
  509. package/src/features/column-grouping/columnGroupingFeature.ts +3 -21
  510. package/src/features/column-grouping/columnGroupingFeature.types.ts +21 -95
  511. package/src/features/column-grouping/columnGroupingFeature.utils.ts +4 -87
  512. package/src/features/column-grouping/createGroupedRowModel.ts +46 -45
  513. package/src/features/column-ordering/columnOrderingFeature.ts +12 -7
  514. package/src/features/column-ordering/columnOrderingFeature.types.ts +29 -3
  515. package/src/features/column-ordering/columnOrderingFeature.utils.ts +59 -8
  516. package/src/features/column-pinning/columnPinningFeature.ts +76 -59
  517. package/src/features/column-pinning/columnPinningFeature.types.ts +53 -42
  518. package/src/features/column-pinning/columnPinningFeature.utils.ts +184 -170
  519. package/src/features/column-resizing/columnResizingFeature.types.ts +1 -4
  520. package/src/features/column-resizing/columnResizingFeature.utils.ts +120 -52
  521. package/src/features/column-sizing/columnSizingFeature.ts +24 -24
  522. package/src/features/column-sizing/columnSizingFeature.types.ts +53 -8
  523. package/src/features/column-sizing/columnSizingFeature.utils.ts +143 -62
  524. package/src/features/column-visibility/columnVisibilityFeature.ts +4 -0
  525. package/src/features/column-visibility/columnVisibilityFeature.types.ts +4 -4
  526. package/src/features/column-visibility/columnVisibilityFeature.utils.ts +48 -30
  527. package/src/features/global-filtering/globalFilteringFeature.types.ts +4 -4
  528. package/src/features/global-filtering/globalFilteringFeature.utils.ts +13 -5
  529. package/src/features/row-aggregation/aggregationFns.ts +345 -0
  530. package/src/features/row-aggregation/rowAggregationFeature.ts +60 -0
  531. package/src/features/row-aggregation/rowAggregationFeature.types.ts +339 -0
  532. package/src/features/row-aggregation/rowAggregationFeature.utils.ts +430 -0
  533. package/src/features/row-expanding/rowExpandingFeature.types.ts +8 -23
  534. package/src/features/row-expanding/rowExpandingFeature.utils.ts +38 -13
  535. package/src/features/row-pagination/createPaginatedRowModel.ts +1 -1
  536. package/src/features/row-pagination/rowPaginationFeature.types.ts +6 -21
  537. package/src/features/row-pagination/rowPaginationFeature.utils.ts +1 -1
  538. package/src/features/row-pinning/rowPinningFeature.types.ts +4 -4
  539. package/src/features/row-selection/rowSelectionFeature.ts +53 -3
  540. package/src/features/row-selection/rowSelectionFeature.types.ts +54 -10
  541. package/src/features/row-selection/rowSelectionFeature.utils.ts +273 -91
  542. package/src/features/row-sorting/createSortedRowModel.ts +107 -75
  543. package/src/features/row-sorting/rowSortingFeature.types.ts +87 -34
  544. package/src/features/row-sorting/rowSortingFeature.utils.ts +49 -23
  545. package/src/features/row-sorting/sortFns.ts +366 -0
  546. package/src/features/stockFeatures.ts +3 -0
  547. package/src/helpers/columnHelper.ts +4 -4
  548. package/src/helpers/metaHelper.ts +24 -0
  549. package/src/helpers/tableFeatures.ts +37 -5
  550. package/src/index.ts +8 -8
  551. package/src/static-functions.ts +1 -0
  552. package/src/store-reactivity-bindings.ts +1 -1
  553. package/src/types/Cell.ts +4 -2
  554. package/src/types/Column.ts +13 -9
  555. package/src/types/ColumnDef.ts +40 -10
  556. package/src/types/Header.ts +2 -2
  557. package/src/types/HeaderGroup.ts +6 -6
  558. package/src/types/Row.ts +6 -4
  559. package/src/types/RowModel.ts +19 -74
  560. package/src/types/RowModelFns.ts +10 -10
  561. package/src/types/Table.ts +52 -27
  562. package/src/types/TableFeatures.ts +392 -14
  563. package/src/types/TableOptions.ts +67 -14
  564. package/src/types/TableState.ts +15 -1
  565. package/src/types/type-utils.ts +8 -0
  566. package/src/utils.ts +60 -8
  567. package/src/worker/createTableWorker.ts +357 -0
  568. package/src/worker/createWorkerRowModel.ts +121 -0
  569. package/src/worker/initTableWorker.ts +164 -0
  570. package/src/worker/rebuildRowModel.ts +120 -0
  571. package/src/worker/serializeRowModel.ts +80 -0
  572. package/src/worker/tableWorkerProtocol.ts +105 -0
  573. package/dist/fns/aggregationFns.cjs +0 -161
  574. package/dist/fns/aggregationFns.cjs.map +0 -1
  575. package/dist/fns/aggregationFns.d.cts +0 -85
  576. package/dist/fns/aggregationFns.d.ts +0 -85
  577. package/dist/fns/aggregationFns.js +0 -151
  578. package/dist/fns/aggregationFns.js.map +0 -1
  579. package/dist/fns/filterFns.cjs +0 -201
  580. package/dist/fns/filterFns.cjs.map +0 -1
  581. package/dist/fns/filterFns.d.cts +0 -167
  582. package/dist/fns/filterFns.d.ts +0 -167
  583. package/dist/fns/filterFns.js +0 -185
  584. package/dist/fns/filterFns.js.map +0 -1
  585. package/dist/fns/sortFns.cjs +0 -118
  586. package/dist/fns/sortFns.cjs.map +0 -1
  587. package/dist/fns/sortFns.d.cts +0 -65
  588. package/dist/fns/sortFns.d.ts +0 -65
  589. package/dist/fns/sortFns.js +0 -110
  590. package/dist/fns/sortFns.js.map +0 -1
  591. package/skills/column-definitions/SKILL.md +0 -333
  592. package/skills/column-layout/SKILL.md +0 -328
  593. package/skills/column-layout/references/subsystems.md +0 -220
  594. package/skills/customizing-feature-behavior/SKILL.md +0 -416
  595. package/skills/filtering/SKILL.md +0 -357
  596. package/skills/filtering/references/faceting-and-fuzzy.md +0 -191
  597. package/skills/row-expanding/SKILL.md +0 -348
  598. package/skills/setup/SKILL.md +0 -400
  599. package/skills/state-management/SKILL.md +0 -388
  600. package/src/fns/aggregationFns.ts +0 -245
  601. package/src/fns/filterFns.ts +0 -382
  602. package/src/fns/sortFns.ts +0 -217
package/src/utils.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Table, Table_Internal } from './types/Table'
1
+ import type { Table_Internal } from './types/Table'
2
2
  import type { NoInfer, RowData, Updater } from './types/type-utils'
3
3
  import type { TableFeatures } from './types/TableFeatures'
4
4
  import type { TableState, TableState_All } from './types/TableState'
@@ -31,12 +31,17 @@ export function cloneState<T>(value: T): T {
31
31
  return value
32
32
  }
33
33
 
34
- const copy: Record<string, unknown> = {}
34
+ const copy: Record<string, unknown> = proto === null ? makeObjectMap() : {}
35
35
  const keys = Object.keys(value)
36
36
 
37
37
  for (let i = 0; i < keys.length; i++) {
38
38
  const key = keys[i]!
39
- copy[key] = cloneState((value as Record<string, unknown>)[key])
39
+ Object.defineProperty(copy, key, {
40
+ configurable: true,
41
+ enumerable: true,
42
+ value: cloneState((value as Record<string, unknown>)[key]),
43
+ writable: true,
44
+ })
40
45
  }
41
46
 
42
47
  return copy as T
@@ -45,6 +50,45 @@ export function cloneState<T>(value: T): T {
45
50
  return value
46
51
  }
47
52
 
53
+ /**
54
+ * Copies prototype-instance own properties without carrying over lazy memo
55
+ * closures or the per-row cell cache, both of which are bound to the source
56
+ * instance (cached cells reference the source row).
57
+ */
58
+ export function copyInstancePropertiesWithoutMemos<
59
+ TTarget extends Record<string, any>,
60
+ TSource extends Record<string, any>,
61
+ >(target: TTarget, source: TSource): TTarget & TSource {
62
+ const keys = Object.keys(source)
63
+ const targetRecord = target as Record<string, any>
64
+
65
+ for (let i = 0; i < keys.length; i++) {
66
+ const key = keys[i]!
67
+ if (!key.startsWith('_memo_') && key !== '_cellsCache') {
68
+ targetRecord[key] = source[key]
69
+ }
70
+ }
71
+
72
+ return target as TTarget & TSource
73
+ }
74
+
75
+ /**
76
+ * Creates an object intended only for string-keyed dictionary lookups.
77
+ *
78
+ * The null prototype keeps user-controlled ids such as `__proto__` and
79
+ * `hasOwnProperty` as plain data keys.
80
+ */
81
+ export function makeObjectMap<TValue = unknown>(): Record<string, TValue> {
82
+ return Object.create(null) as Record<string, TValue>
83
+ }
84
+
85
+ /**
86
+ * Checks whether an object owns a key, including null-prototype dictionaries.
87
+ */
88
+ export function hasOwn(obj: object, key: PropertyKey): boolean {
89
+ return Object.prototype.hasOwnProperty.call(obj, key)
90
+ }
91
+
48
92
  /**
49
93
  * Creates a table state updater for a single state slice.
50
94
  *
@@ -53,7 +97,16 @@ export function cloneState<T>(value: T): T {
53
97
  export function makeStateUpdater<
54
98
  TFeatures extends TableFeatures,
55
99
  K extends (string & {}) | keyof TableState_All | keyof TableState<TFeatures>,
56
- >(key: K, instance: Table<TFeatures, any>) {
100
+ >(
101
+ key: K,
102
+ // Minimal structural shape so any table view (public `Table`,
103
+ // `Table_Internal`, or a custom plugin table) can be passed without forcing
104
+ // the compiler to relate the full table types.
105
+ instance: {
106
+ readonly options: { readonly atoms?: object | undefined }
107
+ readonly baseAtoms: object
108
+ },
109
+ ) {
57
110
  return (updater: Updater<TableState<any>[K & keyof TableState<any>]>) => {
58
111
  const externalAtom = (instance.options as any).atoms?.[key]
59
112
  const targetAtom = externalAtom ?? (instance.baseAtoms as any)[key]
@@ -201,8 +254,7 @@ export function tableMemo<
201
254
  let debugCache: boolean | undefined
202
255
 
203
256
  if (process.env.NODE_ENV === 'development') {
204
- const { debugCache: _debugCache, debugAll } = table.options
205
- debugCache = _debugCache
257
+ const { debugAll } = table.options
206
258
  const { parentName } = getFunctionNameInfo(fnName, '.')
207
259
 
208
260
  const debugByParent =
@@ -307,7 +359,7 @@ export function tableMemo<
307
359
  })
308
360
  }
309
361
 
310
- export interface API<TDeps extends ReadonlyArray<any>, TDepArgs> {
362
+ export interface API<_TDeps extends ReadonlyArray<any>, _TDepArgs> {
311
363
  fn: (...args: any) => any
312
364
  memoDeps?: (depArgs?: any) => [...any] | undefined
313
365
  }
@@ -362,7 +414,7 @@ export function assignTableAPIs<
362
414
  }
363
415
  }
364
416
 
365
- export interface PrototypeAPI<TDeps extends ReadonlyArray<any>, TDepArgs> {
417
+ export interface PrototypeAPI<_TDeps extends ReadonlyArray<any>, _TDepArgs> {
366
418
  fn: (self: any, ...args: any) => any
367
419
  memoDeps?: (self: any, depArgs?: any) => [...any] | undefined
368
420
  }
@@ -0,0 +1,357 @@
1
+ import { table_autoResetPageIndex } from '../features/row-pagination/rowPaginationFeature.utils'
2
+ import { table_autoResetExpanded } from '../features/row-expanding/rowExpandingFeature.utils'
3
+ import {
4
+ tableWorkerPipeline,
5
+ tableWorkerStageStateDeps,
6
+ } from './tableWorkerProtocol'
7
+ import type { Table_Internal } from '../types/Table'
8
+ import type { TableFeature } from '../types/TableFeatures'
9
+ import type { TableWorkerDataPayload } from './rebuildRowModel'
10
+ import type {
11
+ TableState_WorkerRowModels,
12
+ TableWorkerResponse,
13
+ TableWorkerStage,
14
+ TableWorkerStagePayload,
15
+ } from './tableWorkerProtocol'
16
+
17
+ // Importing anything from this module (e.g. `workerRowModelsFeature`)
18
+ // registers the plugin key and its state slice with the core type maps, so
19
+ // userland needs no `declare module` of its own. Apps that never use worker
20
+ // row models never load this module and never see the types.
21
+ declare module '../types/TableFeatures' {
22
+ interface Plugins {
23
+ workerRowModelsFeature: TableFeature
24
+ }
25
+ }
26
+ declare module '../types/TableState' {
27
+ interface TableState_FeatureMap {
28
+ workerRowModelsFeature: TableState_WorkerRowModels
29
+ }
30
+ }
31
+
32
+ export interface TableWorkerOptions {
33
+ /**
34
+ * Creates the dedicated worker that runs the shadow table. The worker entry
35
+ * must call `initTableWorker` with the same columns and processing config.
36
+ *
37
+ * The `new Worker(new URL(...))` expression must live in your code (not the
38
+ * library) so your bundler can statically discover and bundle the worker
39
+ * entry file.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * createWorker: () =>
44
+ * new Worker(new URL('./table.worker.ts', import.meta.url), {
45
+ * type: 'module',
46
+ * })
47
+ * ```
48
+ */
49
+ createWorker: () => Worker
50
+ }
51
+
52
+ export interface TableWorkerBridge {
53
+ worker: Worker | null
54
+ /** The worker errored (load failure or uncaught throw); stop posting. */
55
+ failed: boolean
56
+ lastData: unknown
57
+ dataVersion: number
58
+ requestId: number
59
+ resultRequestId: number
60
+ /** A process request has been posted and its result has not arrived yet. */
61
+ inFlight: boolean
62
+ /** State changed since the last posted request; post when possible. */
63
+ needsProcess: boolean
64
+ sentAt: number
65
+ /** The stages registered on this table (grows as factories initialize). */
66
+ stages: Set<TableWorkerStage>
67
+ /** Snapshot of state refs + stage count captured at the last post. */
68
+ sentState: Record<string, unknown> | null
69
+ sentStageCount: number
70
+ /** Latest observed state refs, posted on the trailing edge if in flight. */
71
+ lastState: Record<string, unknown>
72
+ results: { [K in TableWorkerStage]?: TableWorkerDataPayload }
73
+ /** Bumped per stage only when that stage's payload actually changed. */
74
+ stageVersions: { [K in TableWorkerStage]?: number }
75
+ }
76
+
77
+ type AnyTable = Table_Internal<any, any>
78
+
79
+ /**
80
+ * A handle shared by every worker-backed row model on a table. It owns the
81
+ * worker instance and the per-table request/result bookkeeping, so registering
82
+ * one stage or four costs exactly one worker and one round trip per change.
83
+ */
84
+ export interface TableWorker {
85
+ _options: TableWorkerOptions
86
+ _bridges: WeakMap<object, TableWorkerBridge>
87
+ _liveBridges: Set<TableWorkerBridge>
88
+ /**
89
+ * Terminates every worker created through this handle and resets the
90
+ * bookkeeping. Safe to call at any time: the next row model read lazily
91
+ * recreates the worker and re-sends the data (self-healing). Note that
92
+ * nothing calls this automatically yet; React StrictMode double-mounts and
93
+ * HMR updates still leak a worker in development until the reactivity
94
+ * bindings grow a real `unmount` hook.
95
+ */
96
+ terminate: () => void
97
+ }
98
+
99
+ /**
100
+ * Registers the `workerRowModels` state slice
101
+ * (`{ version, isPending, lastComputeMs, lastRoundTripMs }`). Worker results
102
+ * land by bumping `version`, so re-renders flow through the exact same state
103
+ * mechanism as every other table state change.
104
+ */
105
+ export const workerRowModelsFeature: TableFeature = {
106
+ getInitialState: (initialState: any) => ({
107
+ workerRowModels: { version: 0, isPending: false },
108
+ ...initialState,
109
+ }),
110
+ }
111
+
112
+ /**
113
+ * Creates the shared worker handle for a table's worker-backed row models.
114
+ * Pass it to `createWorkerRowModel()` once per stage you want offloaded.
115
+ */
116
+ export function createTableWorker(options: TableWorkerOptions): TableWorker {
117
+ const liveBridges = new Set<TableWorkerBridge>()
118
+ return {
119
+ _options: options,
120
+ _bridges: new WeakMap(),
121
+ _liveBridges: liveBridges,
122
+ terminate: () => {
123
+ for (const bridge of liveBridges) {
124
+ bridge.worker?.terminate()
125
+ bridge.worker = null
126
+ bridge.failed = false
127
+ bridge.lastData = undefined
128
+ bridge.inFlight = false
129
+ bridge.needsProcess = true
130
+ bridge.sentState = null
131
+ bridge.sentStageCount = 0
132
+ }
133
+ liveBridges.clear()
134
+ },
135
+ }
136
+ }
137
+
138
+ export function getTableWorkerBridge(
139
+ tableWorker: TableWorker,
140
+ table: AnyTable,
141
+ ): TableWorkerBridge {
142
+ let bridge = tableWorker._bridges.get(table)
143
+ if (!bridge) {
144
+ bridge = {
145
+ worker: null,
146
+ failed: false,
147
+ lastData: undefined,
148
+ dataVersion: 0,
149
+ requestId: 0,
150
+ resultRequestId: 0,
151
+ inFlight: false,
152
+ needsProcess: true,
153
+ sentAt: 0,
154
+ stages: new Set(),
155
+ sentState: null,
156
+ sentStageCount: 0,
157
+ lastState: {},
158
+ results: {},
159
+ stageVersions: {},
160
+ }
161
+ tableWorker._bridges.set(table, bridge)
162
+ }
163
+ return bridge
164
+ }
165
+
166
+ /** Shallow reference comparison; atoms return stable refs when unchanged. */
167
+ function statesEqual(
168
+ a: Record<string, unknown> | null,
169
+ b: Record<string, unknown>,
170
+ ): boolean {
171
+ if (a === null) return false
172
+ const aKeys = Object.keys(a)
173
+ const bKeys = Object.keys(b)
174
+ if (aKeys.length !== bKeys.length) return false
175
+ for (const key of bKeys) {
176
+ if (a[key] !== b[key]) return false
177
+ }
178
+ return true
179
+ }
180
+
181
+ function setWorkerRowModelsState(
182
+ table: AnyTable,
183
+ update: (prev: any) => Record<string, unknown>,
184
+ ) {
185
+ const stateAtom = (table.baseAtoms as Record<string, any>).workerRowModels
186
+ stateAtom?.set((prev: any) => update(prev ?? { version: 0 }))
187
+ }
188
+
189
+ function postProcess(table: AnyTable, bridge: TableWorkerBridge): void {
190
+ const stages = tableWorkerPipeline.filter((stage) => bridge.stages.has(stage))
191
+ bridge.needsProcess = false
192
+ bridge.sentState = bridge.lastState
193
+ bridge.sentStageCount = bridge.stages.size
194
+ bridge.inFlight = true
195
+ bridge.sentAt = performance.now()
196
+ const requestId = ++bridge.requestId
197
+ bridge.worker!.postMessage({
198
+ type: 'process',
199
+ requestId,
200
+ dataVersion: bridge.dataVersion,
201
+ stages,
202
+ state: bridge.lastState,
203
+ })
204
+ // postProcess can run during render (via sync); defer the pending write.
205
+ table._reactivity.schedule(() => {
206
+ if (bridge.requestId === requestId && bridge.resultRequestId < requestId) {
207
+ setWorkerRowModelsState(table, (prev) => ({ ...prev, isPending: true }))
208
+ }
209
+ })
210
+ }
211
+
212
+ function handleResult(
213
+ table: AnyTable,
214
+ bridge: TableWorkerBridge,
215
+ message: TableWorkerResponse,
216
+ ) {
217
+ if (message.requestId !== bridge.requestId) return
218
+ bridge.inFlight = false
219
+ bridge.resultRequestId = message.requestId
220
+
221
+ // A data change raced this request: the result is for the old dataset.
222
+ // Drop it and immediately re-process against the new data.
223
+ if (message.dataVersion !== bridge.dataVersion) {
224
+ postProcess(table, bridge)
225
+ return
226
+ }
227
+
228
+ // Merge stage payloads: `unchanged` keeps the previous result (and its
229
+ // rebuilt model, via the per-stage version), changed payloads replace it.
230
+ let anyChanged = false
231
+ let groupedChanged = false
232
+ for (const [stage, payload] of Object.entries(message.stages) as Array<
233
+ [TableWorkerStage, TableWorkerStagePayload]
234
+ >) {
235
+ if (payload.kind === 'unchanged') continue
236
+ bridge.results[stage] = payload
237
+ bridge.stageVersions[stage] = (bridge.stageVersions[stage] ?? 0) + 1
238
+ anyChanged = true
239
+ if (stage === 'grouped') groupedChanged = true
240
+ }
241
+
242
+ const roundTripMs = performance.now() - bridge.sentAt
243
+ setWorkerRowModelsState(table, (prev) => ({
244
+ version: (prev.version ?? 0) + 1,
245
+ isPending: false,
246
+ lastComputeMs: message.computeMs,
247
+ lastRoundTripMs: roundTripMs,
248
+ }))
249
+
250
+ // The async equivalent of the sync models' `onAfterUpdate` hooks. The
251
+ // worker's unchanged-detection is its memo identity, so `groupedChanged`
252
+ // mirrors exactly when the sync grouped model would have recomputed (and
253
+ // reset expansion).
254
+ if (anyChanged) {
255
+ table._reactivity.schedule(() =>
256
+ table._reactivity.untrack(() => {
257
+ if (groupedChanged) {
258
+ table_autoResetExpanded(table)
259
+ }
260
+ table_autoResetPageIndex(table)
261
+ }),
262
+ )
263
+ }
264
+
265
+ // Trailing edge: state changed while this request was in flight.
266
+ if (bridge.needsProcess) {
267
+ postProcess(table, bridge)
268
+ }
269
+ }
270
+
271
+ function handleError(
272
+ table: AnyTable,
273
+ bridge: TableWorkerBridge,
274
+ event: unknown,
275
+ ) {
276
+ if (bridge.failed) return
277
+ bridge.failed = true
278
+ bridge.inFlight = false
279
+ console.error(
280
+ '[table-worker] The table worker failed; worker row models will keep ' +
281
+ 'their last results and stop updating. Check that the worker entry ' +
282
+ 'loads and that its initTableWorker() config is thread-portable.',
283
+ event,
284
+ )
285
+ bridge.worker?.terminate()
286
+ bridge.worker = null
287
+ setWorkerRowModelsState(table, (prev) => ({ ...prev, isPending: false }))
288
+ }
289
+
290
+ function ensureWorker(
291
+ tableWorker: TableWorker,
292
+ table: AnyTable,
293
+ bridge: TableWorkerBridge,
294
+ ) {
295
+ if (bridge.worker) return
296
+ bridge.worker = tableWorker._options.createWorker()
297
+ tableWorker._liveBridges.add(bridge)
298
+ bridge.worker.onmessage = (event: MessageEvent<TableWorkerResponse>) => {
299
+ handleResult(table, bridge, event.data)
300
+ }
301
+ bridge.worker.onerror = (event) => handleError(table, bridge, event)
302
+ bridge.worker.onmessageerror = (event) => handleError(table, bridge, event)
303
+ }
304
+
305
+ /**
306
+ * Pull-based sync, called at the top of every worker-backed row model read
307
+ * (i.e. every render). Posts data on identity change and a single-flight
308
+ * process request on state change; both are cheap no-ops otherwise, and
309
+ * multiple stages sharing the handle dedupe onto one request.
310
+ */
311
+ export function syncTableWorker(tableWorker: TableWorker, table: AnyTable) {
312
+ // SSR: no Worker global. Getters fall back to pre-stage models, so the
313
+ // server renders unprocessed rows and the client takes over after hydration.
314
+ if (typeof Worker === 'undefined') return
315
+
316
+ const bridge = getTableWorkerBridge(tableWorker, table)
317
+ if (bridge.failed) return
318
+ ensureWorker(tableWorker, table, bridge)
319
+
320
+ const data = table.options.data
321
+ if (data !== bridge.lastData) {
322
+ bridge.lastData = data
323
+ bridge.dataVersion++
324
+ bridge.worker!.postMessage({
325
+ type: 'data',
326
+ dataVersion: bridge.dataVersion,
327
+ data,
328
+ })
329
+ bridge.needsProcess = true
330
+ }
331
+
332
+ // Union of the registered stages' state deps, compared by reference (atoms
333
+ // return stable refs when a slice did not change).
334
+ const atoms = table.atoms as Record<string, any>
335
+ const state: Record<string, unknown> = {}
336
+ for (const stage of bridge.stages) {
337
+ for (const key of tableWorkerStageStateDeps[stage]) {
338
+ state[key] = atoms[key]?.get()
339
+ }
340
+ }
341
+ bridge.lastState = state
342
+
343
+ if (
344
+ !bridge.needsProcess &&
345
+ (!statesEqual(bridge.sentState, state) ||
346
+ bridge.stages.size !== bridge.sentStageCount)
347
+ ) {
348
+ bridge.needsProcess = true
349
+ }
350
+
351
+ // Single-flight: at most one request in the worker at a time. If one is in
352
+ // flight, the latest state is posted from the result handler (trailing
353
+ // edge), so rapid input coalesces instead of queueing doomed computes.
354
+ if (bridge.needsProcess && !bridge.inFlight) {
355
+ postProcess(table, bridge)
356
+ }
357
+ }
@@ -0,0 +1,121 @@
1
+ import { tableMemo } from '../utils'
2
+ import { getTableWorkerBridge, syncTableWorker } from './createTableWorker'
3
+ import { rebuildRowModel } from './rebuildRowModel'
4
+ import { tableWorkerPipeline } from './tableWorkerProtocol'
5
+ import type { RowModel } from '../core/row-models/coreRowModelsFeature.types'
6
+ import type { Table, Table_Internal } from '../types/Table'
7
+ import type { TableFeatures } from '../types/TableFeatures'
8
+ import type { RowData } from '../types/type-utils'
9
+ import type { TableWorker } from './createTableWorker'
10
+ import type { TableWorkerStage } from './tableWorkerProtocol'
11
+
12
+ type AnyTable = Table_Internal<any, any>
13
+
14
+ function capitalize(stage: string) {
15
+ return stage.charAt(0).toUpperCase() + stage.slice(1)
16
+ }
17
+
18
+ /**
19
+ * Turns any row model stage into a worker-backed one. The returned factory
20
+ * plugs into the standard feature slot for that stage, so it composes with
21
+ * the rest of the pipeline exactly like the sync factory it replaces.
22
+ *
23
+ * Register only the stages you want offloaded; each import is independent and
24
+ * tree-shakable. All stages on a table share one worker and one round trip
25
+ * per state change via the `tableWorker` handle. Until a result lands, the
26
+ * stage returns its pre-stage model (stale-while-revalidate).
27
+ *
28
+ * Offloaded stages must form a contiguous prefix of the pipeline
29
+ * (filtered -> grouped -> sorted -> expanded): a stage's worker result encodes
30
+ * everything upstream as computed in the worker, so any upstream stage
31
+ * registered on the main thread must be offloaded too. A dev warning fires on
32
+ * mismatches.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const tableWorker = createTableWorker({ createWorker })
37
+ *
38
+ * const features = tableFeatures({
39
+ * rowSortingFeature,
40
+ * columnGroupingFeature,
41
+ * workerRowModelsFeature,
42
+ * filteredRowModel: createWorkerRowModel(tableWorker, 'filtered'),
43
+ * groupedRowModel: createWorkerRowModel(tableWorker, 'grouped'),
44
+ * sortedRowModel: createWorkerRowModel(tableWorker, 'sorted'),
45
+ * })
46
+ * ```
47
+ */
48
+ export function createWorkerRowModel(
49
+ tableWorker: TableWorker,
50
+ stage: TableWorkerStage,
51
+ ) {
52
+ return <TFeatures extends TableFeatures, TData extends RowData>(
53
+ _table: Table<TFeatures, TData>,
54
+ ): (() => RowModel<TFeatures, TData>) => {
55
+ const table = _table as unknown as AnyTable
56
+ // Stages register per table as their factories initialize (first read).
57
+ // The first render may therefore fire one extra coalesced request while
58
+ // the stage set grows; single-flight makes it a cheap trailing request.
59
+ getTableWorkerBridge(tableWorker, table).stages.add(stage)
60
+ let warned = false
61
+
62
+ const warnOnce = (message: string) => {
63
+ if (process.env.NODE_ENV === 'development' && !warned) {
64
+ warned = true
65
+ console.warn(`[table-worker] ${message}`)
66
+ }
67
+ }
68
+
69
+ const memoized = tableMemo({
70
+ table,
71
+ fnName: `table.get${capitalize(stage)}RowModel`,
72
+ // The per-stage version bumps only when this stage's payload actually
73
+ // changed, so stages the worker reported as `unchanged` skip the O(n)
74
+ // rebuild entirely (the re-render itself rides the state slice bump).
75
+ memoDeps: () => [
76
+ table.getCoreRowModel(),
77
+ getTableWorkerBridge(tableWorker, table).stageVersions[stage],
78
+ ],
79
+ fn: () => {
80
+ const bridge = getTableWorkerBridge(tableWorker, table)
81
+ const payload = bridge.results[stage]
82
+ if (!payload) {
83
+ if (bridge.resultRequestId > 0) {
84
+ warnOnce(
85
+ `The worker returned no '${stage}' result. Make sure the ` +
86
+ `worker's initTableWorker() config registers a ` +
87
+ `${stage}RowModel factory.`,
88
+ )
89
+ }
90
+ return (table as any)[`getPre${capitalize(stage)}RowModel`]()
91
+ }
92
+ // Contiguous-prefix check: any upstream stage registered on this
93
+ // table must also have a worker result, or it is silently bypassed.
94
+ if (bridge.resultRequestId > 0) {
95
+ for (const upstream of tableWorkerPipeline) {
96
+ if (upstream === stage) break
97
+ if (
98
+ (table.options.features as Record<string, unknown>)[
99
+ `${upstream}RowModel`
100
+ ] &&
101
+ !bridge.results[upstream]
102
+ ) {
103
+ warnOnce(
104
+ `This table has a ${upstream}RowModel, but the worker result ` +
105
+ `for '${stage}' was computed without an offloaded ` +
106
+ `'${upstream}' stage, so it is bypassed. Offload it too ` +
107
+ `with createWorkerRowModel(tableWorker, '${upstream}').`,
108
+ )
109
+ }
110
+ }
111
+ }
112
+ return rebuildRowModel(table, payload, stage !== 'filtered')
113
+ },
114
+ })
115
+
116
+ return () => {
117
+ syncTableWorker(tableWorker, table)
118
+ return memoized()
119
+ }
120
+ }
121
+ }