@platforma-sdk/model 1.79.27 → 1.80.0

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 (356) hide show
  1. package/dist/block_model.d.ts +2 -0
  2. package/dist/block_model.d.ts.map +1 -1
  3. package/dist/columns/column.cjs +28 -0
  4. package/dist/columns/column.cjs.map +1 -0
  5. package/dist/columns/column.d.ts +30 -0
  6. package/dist/columns/column.d.ts.map +1 -0
  7. package/dist/columns/column.js +27 -0
  8. package/dist/columns/column.js.map +1 -0
  9. package/dist/columns/column_lazy.cjs +248 -0
  10. package/dist/columns/column_lazy.cjs.map +1 -0
  11. package/dist/columns/column_lazy.d.ts +137 -0
  12. package/dist/columns/column_lazy.d.ts.map +1 -0
  13. package/dist/columns/column_lazy.js +245 -0
  14. package/dist/columns/column_lazy.js.map +1 -0
  15. package/dist/columns/column_providers/index.cjs +62 -0
  16. package/dist/columns/column_providers/index.cjs.map +1 -0
  17. package/dist/columns/column_providers/index.d.ts +30 -0
  18. package/dist/columns/column_providers/index.d.ts.map +1 -0
  19. package/dist/columns/column_providers/index.js +53 -0
  20. package/dist/columns/column_providers/index.js.map +1 -0
  21. package/dist/columns/column_providers/providers.cjs +123 -0
  22. package/dist/columns/column_providers/providers.cjs.map +1 -0
  23. package/dist/columns/column_providers/providers.d.ts +75 -0
  24. package/dist/columns/column_providers/providers.d.ts.map +1 -0
  25. package/dist/columns/column_providers/providers.js +118 -0
  26. package/dist/columns/column_providers/providers.js.map +1 -0
  27. package/dist/columns/column_providers/types.d.ts +23 -0
  28. package/dist/columns/column_providers/types.d.ts.map +1 -0
  29. package/dist/columns/column_recipes/column_discovered_recipe.cjs +180 -0
  30. package/dist/columns/column_recipes/column_discovered_recipe.cjs.map +1 -0
  31. package/dist/columns/column_recipes/column_discovered_recipe.d.ts +120 -0
  32. package/dist/columns/column_recipes/column_discovered_recipe.d.ts.map +1 -0
  33. package/dist/columns/column_recipes/column_discovered_recipe.js +180 -0
  34. package/dist/columns/column_recipes/column_discovered_recipe.js.map +1 -0
  35. package/dist/columns/column_recipes/column_filtered_recipe.cjs +133 -0
  36. package/dist/columns/column_recipes/column_filtered_recipe.cjs.map +1 -0
  37. package/dist/columns/column_recipes/column_filtered_recipe.d.ts +75 -0
  38. package/dist/columns/column_recipes/column_filtered_recipe.d.ts.map +1 -0
  39. package/dist/columns/column_recipes/column_filtered_recipe.js +133 -0
  40. package/dist/columns/column_recipes/column_filtered_recipe.js.map +1 -0
  41. package/dist/columns/column_recipes/column_overrided_recipe.cjs +101 -0
  42. package/dist/columns/column_recipes/column_overrided_recipe.cjs.map +1 -0
  43. package/dist/columns/column_recipes/column_overrided_recipe.d.ts +73 -0
  44. package/dist/columns/column_recipes/column_overrided_recipe.d.ts.map +1 -0
  45. package/dist/columns/column_recipes/column_overrided_recipe.js +101 -0
  46. package/dist/columns/column_recipes/column_overrided_recipe.js.map +1 -0
  47. package/dist/columns/column_recipes/index.cjs +72 -0
  48. package/dist/columns/column_recipes/index.cjs.map +1 -0
  49. package/dist/columns/column_recipes/index.d.ts +52 -0
  50. package/dist/columns/column_recipes/index.d.ts.map +1 -0
  51. package/dist/columns/column_recipes/index.js +68 -0
  52. package/dist/columns/column_recipes/index.js.map +1 -0
  53. package/dist/columns/column_recipes/leaf_rebrand.cjs +22 -0
  54. package/dist/columns/column_recipes/leaf_rebrand.cjs.map +1 -0
  55. package/dist/columns/column_recipes/leaf_rebrand.js +22 -0
  56. package/dist/columns/column_recipes/leaf_rebrand.js.map +1 -0
  57. package/dist/columns/column_recipes/types.d.ts +101 -0
  58. package/dist/columns/column_recipes/types.d.ts.map +1 -0
  59. package/dist/columns/columns_collection.cjs +124 -0
  60. package/dist/columns/columns_collection.cjs.map +1 -0
  61. package/dist/columns/columns_collection.d.ts +64 -0
  62. package/dist/columns/columns_collection.d.ts.map +1 -0
  63. package/dist/columns/columns_collection.js +122 -0
  64. package/dist/columns/columns_collection.js.map +1 -0
  65. package/dist/columns/derive_axis_values_labels.cjs +76 -0
  66. package/dist/columns/derive_axis_values_labels.cjs.map +1 -0
  67. package/dist/columns/derive_axis_values_labels.d.ts +30 -0
  68. package/dist/columns/derive_axis_values_labels.d.ts.map +1 -0
  69. package/dist/columns/derive_axis_values_labels.js +76 -0
  70. package/dist/columns/derive_axis_values_labels.js.map +1 -0
  71. package/dist/columns/expand_by_partition.cjs +53 -56
  72. package/dist/columns/expand_by_partition.cjs.map +1 -1
  73. package/dist/columns/expand_by_partition.d.ts +22 -18
  74. package/dist/columns/expand_by_partition.d.ts.map +1 -1
  75. package/dist/columns/expand_by_partition.js +55 -58
  76. package/dist/columns/expand_by_partition.js.map +1 -1
  77. package/dist/columns/index.cjs +44 -18
  78. package/dist/columns/index.d.ts +15 -7
  79. package/dist/columns/index.js +12 -6
  80. package/dist/columns/utils.cjs +186 -0
  81. package/dist/columns/utils.cjs.map +1 -0
  82. package/dist/columns/utils.d.ts +96 -0
  83. package/dist/columns/utils.d.ts.map +1 -0
  84. package/dist/columns/utils.js +179 -0
  85. package/dist/columns/utils.js.map +1 -0
  86. package/dist/components/PFrameForGraphs.cjs +1 -0
  87. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  88. package/dist/components/PFrameForGraphs.d.ts +1 -1
  89. package/dist/components/PFrameForGraphs.d.ts.map +1 -1
  90. package/dist/components/PFrameForGraphs.js +1 -0
  91. package/dist/components/PFrameForGraphs.js.map +1 -1
  92. package/dist/components/PlDataTable/columnResolver.cjs +28 -0
  93. package/dist/components/PlDataTable/columnResolver.cjs.map +1 -0
  94. package/dist/components/PlDataTable/columnResolver.js +28 -0
  95. package/dist/components/PlDataTable/columnResolver.js.map +1 -0
  96. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +4 -2
  97. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
  98. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +4 -2
  99. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
  100. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +20 -25
  101. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
  102. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +20 -25
  103. package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
  104. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +58 -26
  105. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
  106. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +1 -1
  107. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
  108. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +60 -28
  109. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
  110. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +224 -194
  111. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
  112. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +13 -16
  113. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
  114. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +228 -198
  115. package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
  116. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +40 -98
  117. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
  118. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -8
  119. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -1
  120. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +40 -98
  121. package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
  122. package/dist/components/PlDataTable/createPlDataTable/index.cjs +1 -1
  123. package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
  124. package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -2
  125. package/dist/components/PlDataTable/createPlDataTable/index.js +2 -2
  126. package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
  127. package/dist/components/PlDataTable/createPlDataTable/utils.cjs +51 -169
  128. package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
  129. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +1 -1
  130. package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
  131. package/dist/components/PlDataTable/createPlDataTable/utils.js +52 -166
  132. package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
  133. package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
  134. package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +1 -1
  135. package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
  136. package/dist/components/PlDataTable/index.cjs +1 -1
  137. package/dist/components/PlDataTable/index.d.ts +4 -4
  138. package/dist/components/PlDataTable/index.js +2 -2
  139. package/dist/components/PlDataTable/labels.cjs +0 -1
  140. package/dist/components/PlDataTable/labels.cjs.map +1 -1
  141. package/dist/components/PlDataTable/labels.js +0 -1
  142. package/dist/components/PlDataTable/labels.js.map +1 -1
  143. package/dist/components/PlDataTable/state-migration.cjs +107 -10
  144. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  145. package/dist/components/PlDataTable/state-migration.d.ts +5 -4
  146. package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
  147. package/dist/components/PlDataTable/state-migration.js +107 -10
  148. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  149. package/dist/components/PlDataTable/typesV7.d.ts +1 -36
  150. package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
  151. package/dist/components/PlDataTable/typesV8.d.ts +123 -0
  152. package/dist/components/PlDataTable/typesV8.d.ts.map +1 -0
  153. package/dist/components/PlDatasetSelector/build_dataset_options.cjs +27 -34
  154. package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
  155. package/dist/components/PlDatasetSelector/build_dataset_options.d.ts.map +1 -1
  156. package/dist/components/PlDatasetSelector/build_dataset_options.js +27 -34
  157. package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
  158. package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +28 -33
  159. package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
  160. package/dist/components/PlDatasetSelector/enrichment_discovery.js +29 -34
  161. package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
  162. package/dist/components/PlDatasetSelector/filter_discovery.cjs +27 -17
  163. package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
  164. package/dist/components/PlDatasetSelector/filter_discovery.d.ts +24 -10
  165. package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
  166. package/dist/components/PlDatasetSelector/filter_discovery.js +28 -18
  167. package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
  168. package/dist/components/PlDatasetSelector/index.d.ts +2 -2
  169. package/dist/components/index.cjs +1 -1
  170. package/dist/components/index.d.ts +5 -5
  171. package/dist/components/index.js +2 -2
  172. package/dist/filters/converters/filterToQuery.cjs +5 -6
  173. package/dist/filters/converters/filterToQuery.cjs.map +1 -1
  174. package/dist/filters/converters/filterToQuery.d.ts +12 -3
  175. package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
  176. package/dist/filters/converters/filterToQuery.js +5 -6
  177. package/dist/filters/converters/filterToQuery.js.map +1 -1
  178. package/dist/filters/converters/index.d.ts +2 -2
  179. package/dist/filters/index.d.ts +2 -2
  180. package/dist/index.cjs +64 -35
  181. package/dist/index.d.ts +23 -15
  182. package/dist/index.js +15 -9
  183. package/dist/labels/derive_distinct_labels.cjs.map +1 -1
  184. package/dist/labels/derive_distinct_labels.d.ts +1 -2
  185. package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
  186. package/dist/labels/derive_distinct_labels.js.map +1 -1
  187. package/dist/labels/derive_distinct_tooltips.cjs +1 -1
  188. package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
  189. package/dist/labels/derive_distinct_tooltips.d.ts +6 -3
  190. package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
  191. package/dist/labels/derive_distinct_tooltips.js +1 -1
  192. package/dist/labels/derive_distinct_tooltips.js.map +1 -1
  193. package/dist/package.cjs +1 -1
  194. package/dist/package.js +1 -1
  195. package/dist/pframe_utils/axes.cjs.map +1 -1
  196. package/dist/pframe_utils/axes.d.ts +2 -2
  197. package/dist/pframe_utils/axes.d.ts.map +1 -1
  198. package/dist/pframe_utils/axes.js.map +1 -1
  199. package/dist/pframe_utils/columns.cjs +6 -10
  200. package/dist/pframe_utils/columns.cjs.map +1 -1
  201. package/dist/pframe_utils/columns.d.ts +4 -4
  202. package/dist/pframe_utils/columns.d.ts.map +1 -1
  203. package/dist/pframe_utils/columns.js +7 -11
  204. package/dist/pframe_utils/columns.js.map +1 -1
  205. package/dist/pframe_utils/index.cjs.map +1 -1
  206. package/dist/pframe_utils/index.d.ts +1 -1
  207. package/dist/pframe_utils/index.d.ts.map +1 -1
  208. package/dist/pframe_utils/index.js.map +1 -1
  209. package/dist/render/accessor.cjs +15 -16
  210. package/dist/render/accessor.cjs.map +1 -1
  211. package/dist/render/accessor.d.ts +7 -10
  212. package/dist/render/accessor.d.ts.map +1 -1
  213. package/dist/render/accessor.js +15 -16
  214. package/dist/render/accessor.js.map +1 -1
  215. package/dist/render/api.cjs +34 -36
  216. package/dist/render/api.cjs.map +1 -1
  217. package/dist/render/api.d.ts +30 -20
  218. package/dist/render/api.d.ts.map +1 -1
  219. package/dist/render/api.js +35 -38
  220. package/dist/render/api.js.map +1 -1
  221. package/dist/render/index.cjs +4 -0
  222. package/dist/render/index.d.ts +4 -4
  223. package/dist/render/index.js +3 -2
  224. package/dist/render/internal.cjs +3 -2
  225. package/dist/render/internal.cjs.map +1 -1
  226. package/dist/render/internal.d.ts +17 -9
  227. package/dist/render/internal.d.ts.map +1 -1
  228. package/dist/render/internal.js +3 -2
  229. package/dist/render/internal.js.map +1 -1
  230. package/dist/render/util/axis_filtering.cjs.map +1 -1
  231. package/dist/render/util/axis_filtering.js.map +1 -1
  232. package/dist/render/util/column_collection.cjs +6 -4
  233. package/dist/render/util/column_collection.cjs.map +1 -1
  234. package/dist/render/util/column_collection.d.ts +9 -9
  235. package/dist/render/util/column_collection.d.ts.map +1 -1
  236. package/dist/render/util/column_collection.js +6 -4
  237. package/dist/render/util/column_collection.js.map +1 -1
  238. package/dist/render/util/index.d.ts +2 -2
  239. package/dist/render/util/pcolumn_data.cjs +1 -1
  240. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  241. package/dist/render/util/pcolumn_data.d.ts +3 -3
  242. package/dist/render/util/pcolumn_data.d.ts.map +1 -1
  243. package/dist/render/util/pcolumn_data.js +1 -1
  244. package/dist/render/util/pcolumn_data.js.map +1 -1
  245. package/dist/services/block_services.cjs +2 -1
  246. package/dist/services/block_services.cjs.map +1 -1
  247. package/dist/services/block_services.d.ts +1 -0
  248. package/dist/services/block_services.d.ts.map +1 -1
  249. package/dist/services/block_services.js +2 -1
  250. package/dist/services/block_services.js.map +1 -1
  251. package/dist/services/get_services.cjs +2 -2
  252. package/dist/services/get_services.cjs.map +1 -1
  253. package/dist/services/get_services.d.ts +4 -1
  254. package/dist/services/get_services.d.ts.map +1 -1
  255. package/dist/services/get_services.js +2 -2
  256. package/dist/services/get_services.js.map +1 -1
  257. package/package.json +10 -8
  258. package/src/columns/__test_helpers__/collection_driver.ts +197 -0
  259. package/src/columns/__test_helpers__/stub_registry.ts +134 -0
  260. package/src/columns/column.ts +46 -0
  261. package/src/columns/column_lazy.test.ts +201 -0
  262. package/src/columns/column_lazy.ts +311 -0
  263. package/src/columns/column_providers/index.ts +78 -0
  264. package/src/columns/column_providers/providers.ts +193 -0
  265. package/src/columns/column_providers/types.ts +24 -0
  266. package/src/columns/column_recipes/column_discovered_recipe.ts +231 -0
  267. package/src/columns/column_recipes/column_filtered_recipe.ts +184 -0
  268. package/src/columns/column_recipes/column_overrided_recipe.ts +146 -0
  269. package/src/columns/column_recipes/column_recipes.test.ts +681 -0
  270. package/src/columns/column_recipes/index.ts +127 -0
  271. package/src/columns/column_recipes/leaf_rebrand.ts +28 -0
  272. package/src/columns/column_recipes/types.ts +113 -0
  273. package/src/columns/columns_collection.test.ts +164 -0
  274. package/src/columns/columns_collection.ts +170 -0
  275. package/src/columns/derive_axis_values_labels.ts +98 -0
  276. package/src/columns/expand_by_partition.test.ts +146 -110
  277. package/src/columns/expand_by_partition.ts +72 -84
  278. package/src/columns/index.ts +7 -5
  279. package/src/columns/utils.test.ts +249 -0
  280. package/src/columns/utils.ts +226 -0
  281. package/src/components/PFrameForGraphs.ts +3 -1
  282. package/src/components/PlAnnotations/filters_ui.test.ts +46 -47
  283. package/src/components/PlDataTable/columnResolver.test.ts +122 -0
  284. package/src/components/PlDataTable/columnResolver.ts +57 -0
  285. package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +9 -9
  286. package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +31 -63
  287. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +85 -58
  288. package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +316 -354
  289. package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +48 -144
  290. package/src/components/PlDataTable/createPlDataTable/index.ts +2 -2
  291. package/src/components/PlDataTable/createPlDataTable/utils.test.ts +60 -69
  292. package/src/components/PlDataTable/createPlDataTable/utils.ts +65 -173
  293. package/src/components/PlDataTable/createPlDataTableSheet.ts +1 -1
  294. package/src/components/PlDataTable/index.ts +4 -2
  295. package/src/components/PlDataTable/labels.ts +4 -33
  296. package/src/components/PlDataTable/state-migration.ts +151 -22
  297. package/src/components/PlDataTable/typesV8.ts +188 -0
  298. package/src/components/PlDatasetSelector/build_dataset_options.ts +35 -60
  299. package/src/components/PlDatasetSelector/enrichment_discovery.ts +65 -61
  300. package/src/components/PlDatasetSelector/filter_discovery.test.ts +110 -72
  301. package/src/components/PlDatasetSelector/filter_discovery.ts +51 -31
  302. package/src/filters/converters/filterToQuery.test.ts +15 -8
  303. package/src/filters/converters/filterToQuery.ts +22 -9
  304. package/src/filters/converters/filterUiToExpressionImpl.test.ts +35 -36
  305. package/src/labels/derive_distinct_labels.ts +1 -1
  306. package/src/labels/derive_distinct_tooltips.test.ts +7 -4
  307. package/src/labels/derive_distinct_tooltips.ts +3 -3
  308. package/src/pframe_utils/axes.ts +2 -2
  309. package/src/pframe_utils/columns.ts +14 -23
  310. package/src/pframe_utils/index.ts +1 -1
  311. package/src/render/accessor.ts +35 -38
  312. package/src/render/api.ts +45 -61
  313. package/src/render/index.ts +2 -1
  314. package/src/render/internal.ts +43 -10
  315. package/src/render/util/axis_filtering.ts +0 -1
  316. package/src/render/util/column_collection.ts +17 -17
  317. package/src/render/util/pcolumn_data.ts +5 -9
  318. package/src/services/block_services.ts +1 -0
  319. package/src/services/get_services.ts +5 -2
  320. package/dist/columns/column_collection_builder.cjs +0 -241
  321. package/dist/columns/column_collection_builder.cjs.map +0 -1
  322. package/dist/columns/column_collection_builder.d.ts +0 -119
  323. package/dist/columns/column_collection_builder.d.ts.map +0 -1
  324. package/dist/columns/column_collection_builder.js +0 -241
  325. package/dist/columns/column_collection_builder.js.map +0 -1
  326. package/dist/columns/column_selector.cjs +0 -49
  327. package/dist/columns/column_selector.cjs.map +0 -1
  328. package/dist/columns/column_selector.d.ts +0 -33
  329. package/dist/columns/column_selector.d.ts.map +0 -1
  330. package/dist/columns/column_selector.js +0 -47
  331. package/dist/columns/column_selector.js.map +0 -1
  332. package/dist/columns/column_snapshot.cjs +0 -19
  333. package/dist/columns/column_snapshot.cjs.map +0 -1
  334. package/dist/columns/column_snapshot.d.ts +0 -39
  335. package/dist/columns/column_snapshot.d.ts.map +0 -1
  336. package/dist/columns/column_snapshot.js +0 -18
  337. package/dist/columns/column_snapshot.js.map +0 -1
  338. package/dist/columns/column_snapshot_provider.cjs +0 -137
  339. package/dist/columns/column_snapshot_provider.cjs.map +0 -1
  340. package/dist/columns/column_snapshot_provider.d.ts +0 -74
  341. package/dist/columns/column_snapshot_provider.d.ts.map +0 -1
  342. package/dist/columns/column_snapshot_provider.js +0 -133
  343. package/dist/columns/column_snapshot_provider.js.map +0 -1
  344. package/dist/columns/ctx_column_sources.cjs +0 -80
  345. package/dist/columns/ctx_column_sources.cjs.map +0 -1
  346. package/dist/columns/ctx_column_sources.d.ts +0 -30
  347. package/dist/columns/ctx_column_sources.d.ts.map +0 -1
  348. package/dist/columns/ctx_column_sources.js +0 -79
  349. package/dist/columns/ctx_column_sources.js.map +0 -1
  350. package/src/columns/column_collection_builder.test.ts +0 -484
  351. package/src/columns/column_collection_builder.ts +0 -485
  352. package/src/columns/column_selector.test.ts +0 -90
  353. package/src/columns/column_selector.ts +0 -100
  354. package/src/columns/column_snapshot.ts +0 -58
  355. package/src/columns/column_snapshot_provider.ts +0 -194
  356. package/src/columns/ctx_column_sources.ts +0 -99
@@ -0,0 +1,101 @@
1
+ const require_leaf_rebrand = require("./leaf_rebrand.cjs");
2
+ const require_index = require("./index.cjs");
3
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
4
+ //#region src/columns/column_recipes/column_overrided_recipe.ts
5
+ /**
6
+ * Recipe wrapper that overlays {@link SpecOverrides} on top of any other
7
+ * recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.
8
+ *
9
+ * Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.
10
+ * Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge
11
+ * `specOverrides` at the current level and keep wrapper depth constant.
12
+ *
13
+ * This invariant matches the one enforced inside `unwrapOverrides` from
14
+ * pl-model-common: it explicitly throws on a nested override-wrap.
15
+ */
16
+ var ColumnOverriddenRecipe = class ColumnOverriddenRecipe {
17
+ inner;
18
+ overrides;
19
+ /**
20
+ * Wrap any recipe with overrides. If `inner` is already a
21
+ * {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones
22
+ * and returns a new Overridden sharing the original `inner`. No
23
+ * `Overridden<Overridden<X>>` is produced.
24
+ */
25
+ static wrap(col, overrides) {
26
+ if (col instanceof ColumnOverriddenRecipe) return new ColumnOverriddenRecipe(col.inner, (0, _milaboratories_pl_model_common.mergeSpecOverrides)(col.overrides, overrides));
27
+ return new ColumnOverriddenRecipe(col, overrides);
28
+ }
29
+ /**
30
+ * Static counterpart to {@link wrap}: returns the resolution status of a
31
+ * {@link ColumnOverriddenKey} without constructing the recipe. Overrides
32
+ * do not add references — status collapses to the source's status.
33
+ */
34
+ static getStatusByKey(key, opts = {}) {
35
+ return require_index.ColumnRecipe.getStatus(key.source, opts);
36
+ }
37
+ id;
38
+ specCache;
39
+ queryCache;
40
+ dataStatusCache;
41
+ constructor(inner, overrides) {
42
+ this.inner = inner;
43
+ this.overrides = overrides;
44
+ this.id = (0, _milaboratories_pl_model_common.createColumnOverriddenId)({
45
+ source: inner.id,
46
+ specOverrides: overrides
47
+ });
48
+ }
49
+ /** Wrapped recipe — exposed so external walkers can descend. */
50
+ getInner() {
51
+ return this.inner;
52
+ }
53
+ /**
54
+ * `inner` owns all references; overrides are a pure spec patch and do not
55
+ * introduce new column refs.
56
+ */
57
+ getReferencedIds() {
58
+ return this.inner.getReferencedIds();
59
+ }
60
+ getDataStatus() {
61
+ if (this.dataStatusCache === void 0) this.dataStatusCache = { value: this.inner.getDataStatus() };
62
+ return this.dataStatusCache.value;
63
+ }
64
+ /**
65
+ * Take the inner spec and overlay our overrides. `applySpecOverrides`
66
+ * extracts the overrides from `this.id` itself.
67
+ */
68
+ getSpec() {
69
+ if (this.specCache === void 0) this.specCache = { value: (0, _milaboratories_pl_model_common.applySpecOverrides)(this.inner.getSpec(), this.id) };
70
+ return this.specCache.value;
71
+ }
72
+ /**
73
+ * Emit a client-side `specOverride` node wrapping the inner query.
74
+ *
75
+ * This is a structural-but-collapsible node: it carries the override
76
+ * patch through the query tree so consumers see the full recipe shape,
77
+ * but it is collapsed at the host boundary (`resolvePColumn`) before
78
+ * the query reaches pframe-engine. The engine never sees this node.
79
+ *
80
+ * Overrides do not change query topology — they are a pure spec patch.
81
+ */
82
+ getQuery() {
83
+ if (this.queryCache === void 0) this.queryCache = { value: {
84
+ type: "specOverride",
85
+ input: require_leaf_rebrand.rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),
86
+ override: this.overrides
87
+ } };
88
+ return this.queryCache.value;
89
+ }
90
+ /**
91
+ * Flat merge: new overrides merge with existing ones; `inner` is unchanged.
92
+ * The result is an Overridden of the same depth.
93
+ */
94
+ withSpecs(overrides) {
95
+ return ColumnOverriddenRecipe.wrap(this, overrides);
96
+ }
97
+ };
98
+ //#endregion
99
+ exports.ColumnOverriddenRecipe = ColumnOverriddenRecipe;
100
+
101
+ //# sourceMappingURL=column_overrided_recipe.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column_overrided_recipe.cjs","names":["ColumnRecipe","rebrandLeafId"],"sources":["../../../src/columns/column_recipes/column_overrided_recipe.ts"],"sourcesContent":["import {\n applySpecOverrides,\n createColumnOverriddenId,\n mergeSpecOverrides,\n type ColumnOverriddenId,\n type ColumnOverriddenKey,\n type ColumnUniversalId,\n type PColumnSpec,\n type PObjectId,\n type SpecOverrides,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx } from \"../../render/internal\";\nimport type { ColumnFieldStatus, ColumnResolutionStatus } from \"./types\";\nimport { ColumnRecipe } from \"./index\";\nimport { Column } from \"../column\";\nimport { rebrandLeafId } from \"./leaf_rebrand\";\n\n/**\n * A recipe whose id is not an Overridden wrap — valid `source` for Overridden.\n * Mirrors the spec-level invariant on {@link ColumnOverriddenKey.source}.\n */\ntype NonOverriddenColumn = Column<Exclude<ColumnUniversalId, ColumnOverriddenId>>;\n\n/**\n * Recipe wrapper that overlays {@link SpecOverrides} on top of any other\n * recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.\n *\n * Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.\n * Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge\n * `specOverrides` at the current level and keep wrapper depth constant.\n *\n * This invariant matches the one enforced inside `unwrapOverrides` from\n * pl-model-common: it explicitly throws on a nested override-wrap.\n */\nexport class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {\n /**\n * Wrap any recipe with overrides. If `inner` is already a\n * {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones\n * and returns a new Overridden sharing the original `inner`. No\n * `Overridden<Overridden<X>>` is produced.\n */\n static wrap(col: Column, overrides: SpecOverrides): ColumnOverriddenRecipe {\n if (col instanceof ColumnOverriddenRecipe) {\n return new ColumnOverriddenRecipe(col.inner, mergeSpecOverrides(col.overrides, overrides));\n }\n // `inner` is not an Overridden wrap (the `instanceof` branch above handles\n // that). Narrow the id union here so the constructor parameter stays\n // honest with `ColumnOverriddenKey.source`.\n return new ColumnOverriddenRecipe(col as NonOverriddenColumn, overrides);\n }\n\n /**\n * Static counterpart to {@link wrap}: returns the resolution status of a\n * {@link ColumnOverriddenKey} without constructing the recipe. Overrides\n * do not add references — status collapses to the source's status.\n */\n static getStatusByKey(\n key: ColumnOverriddenKey,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n ): ColumnResolutionStatus {\n return ColumnRecipe.getStatus(key.source, opts);\n }\n\n readonly id: ColumnOverriddenId;\n private specCache?: { readonly value: PColumnSpec };\n private queryCache?: { readonly value: SpecQuery };\n private dataStatusCache?: { readonly value: ColumnFieldStatus };\n\n private constructor(\n private readonly inner: NonOverriddenColumn,\n private readonly overrides: SpecOverrides,\n ) {\n this.id = createColumnOverriddenId({\n source: inner.id,\n specOverrides: overrides,\n });\n }\n\n /** Wrapped recipe — exposed so external walkers can descend. */\n getInner(): Column {\n return this.inner;\n }\n\n /**\n * `inner` owns all references; overrides are a pure spec patch and do not\n * introduce new column refs.\n */\n getReferencedIds(): PObjectId[] {\n return this.inner.getReferencedIds();\n }\n\n getDataStatus(): ColumnFieldStatus {\n if (this.dataStatusCache === undefined) {\n this.dataStatusCache = { value: this.inner.getDataStatus() };\n }\n return this.dataStatusCache.value;\n }\n\n /**\n * Take the inner spec and overlay our overrides. `applySpecOverrides`\n * extracts the overrides from `this.id` itself.\n */\n getSpec(): PColumnSpec {\n if (this.specCache === undefined) {\n this.specCache = { value: applySpecOverrides(this.inner.getSpec(), this.id) };\n }\n return this.specCache.value;\n }\n\n /**\n * Emit a client-side `specOverride` node wrapping the inner query.\n *\n * This is a structural-but-collapsible node: it carries the override\n * patch through the query tree so consumers see the full recipe shape,\n * but it is collapsed at the host boundary (`resolvePColumn`) before\n * the query reaches pframe-engine. The engine never sees this node.\n *\n * Overrides do not change query topology — they are a pure spec patch.\n */\n getQuery(): SpecQuery {\n if (this.queryCache === undefined) {\n // Rebrand the inner column leaf to this.id (rich Overridden id) so\n // filter/sort references emitted with this recipe's id match the\n // leaf the engine sees. The specOverride node still wraps the leaf\n // and is collapsed at the host boundary into a spec patch on the\n // resolved PColumn.\n this.queryCache = {\n value: {\n type: \"specOverride\",\n input: rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),\n override: this.overrides,\n },\n };\n }\n return this.queryCache.value;\n }\n\n /**\n * Flat merge: new overrides merge with existing ones; `inner` is unchanged.\n * The result is an Overridden of the same depth.\n */\n withSpecs(overrides: SpecOverrides): Column {\n return ColumnOverriddenRecipe.wrap(this, overrides);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmCA,IAAa,yBAAb,MAAa,uBAA6D;CAmCrD;CACA;;;;;;;CA7BnB,OAAO,KAAK,KAAa,WAAkD;EACzE,IAAI,eAAe,wBACjB,OAAO,IAAI,uBAAuB,IAAI,QAAA,GAAA,gCAAA,mBAAA,CAA0B,IAAI,WAAW,SAAS,CAAC;EAK3F,OAAO,IAAI,uBAAuB,KAA4B,SAAS;CACzE;;;;;;CAOA,OAAO,eACL,KACA,OAAqC,CAAC,GACd;EACxB,OAAOA,cAAAA,aAAa,UAAU,IAAI,QAAQ,IAAI;CAChD;CAEA;CACA;CACA;CACA;CAEA,YACE,OACA,WACA;EAFiB,KAAA,QAAA;EACA,KAAA,YAAA;EAEjB,KAAK,MAAA,GAAA,gCAAA,yBAAA,CAA8B;GACjC,QAAQ,MAAM;GACd,eAAe;EACjB,CAAC;CACH;;CAGA,WAAmB;EACjB,OAAO,KAAK;CACd;;;;;CAMA,mBAAgC;EAC9B,OAAO,KAAK,MAAM,iBAAiB;CACrC;CAEA,gBAAmC;EACjC,IAAI,KAAK,oBAAoB,KAAA,GAC3B,KAAK,kBAAkB,EAAE,OAAO,KAAK,MAAM,cAAc,EAAE;EAE7D,OAAO,KAAK,gBAAgB;CAC9B;;;;;CAMA,UAAuB;EACrB,IAAI,KAAK,cAAc,KAAA,GACrB,KAAK,YAAY,EAAE,QAAA,GAAA,gCAAA,mBAAA,CAA0B,KAAK,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAE;EAE9E,OAAO,KAAK,UAAU;CACxB;;;;;;;;;;;CAYA,WAAsB;EACpB,IAAI,KAAK,eAAe,KAAA,GAMtB,KAAK,aAAa,EAChB,OAAO;GACL,MAAM;GACN,OAAOC,qBAAAA,cAAc,KAAK,MAAM,SAAS,GAAG,KAAK,MAAM,IAAI,KAAK,EAAE;GAClE,UAAU,KAAK;EACjB,EACF;EAEF,OAAO,KAAK,WAAW;CACzB;;;;;CAMA,UAAU,WAAkC;EAC1C,OAAO,uBAAuB,KAAK,MAAM,SAAS;CACpD;AACF"}
@@ -0,0 +1,73 @@
1
+ import { GlobalCfgRenderCtx } from "../../render/internal.js";
2
+ import { ColumnFieldStatus, ColumnResolutionStatus } from "./types.js";
3
+ import { Column } from "../column.js";
4
+ import { ColumnOverriddenId, ColumnOverriddenKey, PColumnSpec, PObjectId, SpecOverrides, SpecQuery } from "@milaboratories/pl-model-common";
5
+
6
+ //#region src/columns/column_recipes/column_overrided_recipe.d.ts
7
+ /**
8
+ * Recipe wrapper that overlays {@link SpecOverrides} on top of any other
9
+ * recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.
10
+ *
11
+ * Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.
12
+ * Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge
13
+ * `specOverrides` at the current level and keep wrapper depth constant.
14
+ *
15
+ * This invariant matches the one enforced inside `unwrapOverrides` from
16
+ * pl-model-common: it explicitly throws on a nested override-wrap.
17
+ */
18
+ declare class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {
19
+ private readonly inner;
20
+ private readonly overrides;
21
+ /**
22
+ * Wrap any recipe with overrides. If `inner` is already a
23
+ * {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones
24
+ * and returns a new Overridden sharing the original `inner`. No
25
+ * `Overridden<Overridden<X>>` is produced.
26
+ */
27
+ static wrap(col: Column, overrides: SpecOverrides): ColumnOverriddenRecipe;
28
+ /**
29
+ * Static counterpart to {@link wrap}: returns the resolution status of a
30
+ * {@link ColumnOverriddenKey} without constructing the recipe. Overrides
31
+ * do not add references — status collapses to the source's status.
32
+ */
33
+ static getStatusByKey(key: ColumnOverriddenKey, opts?: {
34
+ ctx?: GlobalCfgRenderCtx;
35
+ }): ColumnResolutionStatus;
36
+ readonly id: ColumnOverriddenId;
37
+ private specCache?;
38
+ private queryCache?;
39
+ private dataStatusCache?;
40
+ private constructor();
41
+ /** Wrapped recipe — exposed so external walkers can descend. */
42
+ getInner(): Column;
43
+ /**
44
+ * `inner` owns all references; overrides are a pure spec patch and do not
45
+ * introduce new column refs.
46
+ */
47
+ getReferencedIds(): PObjectId[];
48
+ getDataStatus(): ColumnFieldStatus;
49
+ /**
50
+ * Take the inner spec and overlay our overrides. `applySpecOverrides`
51
+ * extracts the overrides from `this.id` itself.
52
+ */
53
+ getSpec(): PColumnSpec;
54
+ /**
55
+ * Emit a client-side `specOverride` node wrapping the inner query.
56
+ *
57
+ * This is a structural-but-collapsible node: it carries the override
58
+ * patch through the query tree so consumers see the full recipe shape,
59
+ * but it is collapsed at the host boundary (`resolvePColumn`) before
60
+ * the query reaches pframe-engine. The engine never sees this node.
61
+ *
62
+ * Overrides do not change query topology — they are a pure spec patch.
63
+ */
64
+ getQuery(): SpecQuery;
65
+ /**
66
+ * Flat merge: new overrides merge with existing ones; `inner` is unchanged.
67
+ * The result is an Overridden of the same depth.
68
+ */
69
+ withSpecs(overrides: SpecOverrides): Column;
70
+ }
71
+ //#endregion
72
+ export { ColumnOverriddenRecipe };
73
+ //# sourceMappingURL=column_overrided_recipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column_overrided_recipe.d.ts","names":[],"sources":["../../../src/columns/column_recipes/column_overrided_recipe.ts"],"mappings":";;;;;;;;AAmCA;;;;;;;;;cAAa,sBAAA,YAAkC,MAAA,CAAO,kBAAA;EAAA,iBAmCjC,KAAA;EAAA,iBACA,SAAA;EAiBC;;;;;;EAAA,OA9Cb,IAAA,CAAK,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,aAAA,GAAgB,sBAAA;EAPD;;;;;EAAA,OAsB5C,cAAA,CACL,GAAA,EAAK,mBAAA,EACL,IAAA;IAAQ,GAAA,GAAM,kBAAA;EAAA,IACb,sBAAA;EAAA,SAIM,EAAA,EAAI,kBAAA;EAAA,QACL,SAAA;EAAA,QACA,UAAA;EAAA,QACA,eAAA;EAAA,QAED,WAAA;EAXA;EAsBP,QAAA,IAAY,MAAA;EArBF;;;;EA6BV,gBAAA,IAAoB,SAAA;EAIpB,aAAA,IAAiB,iBAAA;EA3BT;;;;EAsCR,OAAA,IAAW,WAAA;EAvBC;;;;;;;;;;EAwCZ,QAAA,IAAY,SAAA;EAsBF;;;AAAiC;EAA3C,SAAA,CAAU,SAAA,EAAW,aAAA,GAAgB,MAAA;AAAA"}
@@ -0,0 +1,101 @@
1
+ import { rebrandLeafId } from "./leaf_rebrand.js";
2
+ import { ColumnRecipe } from "./index.js";
3
+ import { applySpecOverrides, createColumnOverriddenId, mergeSpecOverrides } from "@milaboratories/pl-model-common";
4
+ //#region src/columns/column_recipes/column_overrided_recipe.ts
5
+ /**
6
+ * Recipe wrapper that overlays {@link SpecOverrides} on top of any other
7
+ * recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.
8
+ *
9
+ * Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.
10
+ * Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge
11
+ * `specOverrides` at the current level and keep wrapper depth constant.
12
+ *
13
+ * This invariant matches the one enforced inside `unwrapOverrides` from
14
+ * pl-model-common: it explicitly throws on a nested override-wrap.
15
+ */
16
+ var ColumnOverriddenRecipe = class ColumnOverriddenRecipe {
17
+ inner;
18
+ overrides;
19
+ /**
20
+ * Wrap any recipe with overrides. If `inner` is already a
21
+ * {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones
22
+ * and returns a new Overridden sharing the original `inner`. No
23
+ * `Overridden<Overridden<X>>` is produced.
24
+ */
25
+ static wrap(col, overrides) {
26
+ if (col instanceof ColumnOverriddenRecipe) return new ColumnOverriddenRecipe(col.inner, mergeSpecOverrides(col.overrides, overrides));
27
+ return new ColumnOverriddenRecipe(col, overrides);
28
+ }
29
+ /**
30
+ * Static counterpart to {@link wrap}: returns the resolution status of a
31
+ * {@link ColumnOverriddenKey} without constructing the recipe. Overrides
32
+ * do not add references — status collapses to the source's status.
33
+ */
34
+ static getStatusByKey(key, opts = {}) {
35
+ return ColumnRecipe.getStatus(key.source, opts);
36
+ }
37
+ id;
38
+ specCache;
39
+ queryCache;
40
+ dataStatusCache;
41
+ constructor(inner, overrides) {
42
+ this.inner = inner;
43
+ this.overrides = overrides;
44
+ this.id = createColumnOverriddenId({
45
+ source: inner.id,
46
+ specOverrides: overrides
47
+ });
48
+ }
49
+ /** Wrapped recipe — exposed so external walkers can descend. */
50
+ getInner() {
51
+ return this.inner;
52
+ }
53
+ /**
54
+ * `inner` owns all references; overrides are a pure spec patch and do not
55
+ * introduce new column refs.
56
+ */
57
+ getReferencedIds() {
58
+ return this.inner.getReferencedIds();
59
+ }
60
+ getDataStatus() {
61
+ if (this.dataStatusCache === void 0) this.dataStatusCache = { value: this.inner.getDataStatus() };
62
+ return this.dataStatusCache.value;
63
+ }
64
+ /**
65
+ * Take the inner spec and overlay our overrides. `applySpecOverrides`
66
+ * extracts the overrides from `this.id` itself.
67
+ */
68
+ getSpec() {
69
+ if (this.specCache === void 0) this.specCache = { value: applySpecOverrides(this.inner.getSpec(), this.id) };
70
+ return this.specCache.value;
71
+ }
72
+ /**
73
+ * Emit a client-side `specOverride` node wrapping the inner query.
74
+ *
75
+ * This is a structural-but-collapsible node: it carries the override
76
+ * patch through the query tree so consumers see the full recipe shape,
77
+ * but it is collapsed at the host boundary (`resolvePColumn`) before
78
+ * the query reaches pframe-engine. The engine never sees this node.
79
+ *
80
+ * Overrides do not change query topology — they are a pure spec patch.
81
+ */
82
+ getQuery() {
83
+ if (this.queryCache === void 0) this.queryCache = { value: {
84
+ type: "specOverride",
85
+ input: rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),
86
+ override: this.overrides
87
+ } };
88
+ return this.queryCache.value;
89
+ }
90
+ /**
91
+ * Flat merge: new overrides merge with existing ones; `inner` is unchanged.
92
+ * The result is an Overridden of the same depth.
93
+ */
94
+ withSpecs(overrides) {
95
+ return ColumnOverriddenRecipe.wrap(this, overrides);
96
+ }
97
+ };
98
+ //#endregion
99
+ export { ColumnOverriddenRecipe };
100
+
101
+ //# sourceMappingURL=column_overrided_recipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column_overrided_recipe.js","names":[],"sources":["../../../src/columns/column_recipes/column_overrided_recipe.ts"],"sourcesContent":["import {\n applySpecOverrides,\n createColumnOverriddenId,\n mergeSpecOverrides,\n type ColumnOverriddenId,\n type ColumnOverriddenKey,\n type ColumnUniversalId,\n type PColumnSpec,\n type PObjectId,\n type SpecOverrides,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx } from \"../../render/internal\";\nimport type { ColumnFieldStatus, ColumnResolutionStatus } from \"./types\";\nimport { ColumnRecipe } from \"./index\";\nimport { Column } from \"../column\";\nimport { rebrandLeafId } from \"./leaf_rebrand\";\n\n/**\n * A recipe whose id is not an Overridden wrap — valid `source` for Overridden.\n * Mirrors the spec-level invariant on {@link ColumnOverriddenKey.source}.\n */\ntype NonOverriddenColumn = Column<Exclude<ColumnUniversalId, ColumnOverriddenId>>;\n\n/**\n * Recipe wrapper that overlays {@link SpecOverrides} on top of any other\n * recipe. The id is `ColumnOverriddenKey { source: inner.id, specOverrides }`.\n *\n * Flat-merge invariant: `inner` is never another {@link ColumnOverriddenRecipe}.\n * Repeated overrides go through {@link wrap} / {@link withSpecs}, which merge\n * `specOverrides` at the current level and keep wrapper depth constant.\n *\n * This invariant matches the one enforced inside `unwrapOverrides` from\n * pl-model-common: it explicitly throws on a nested override-wrap.\n */\nexport class ColumnOverriddenRecipe implements Column<ColumnOverriddenId> {\n /**\n * Wrap any recipe with overrides. If `inner` is already a\n * {@link ColumnOverriddenRecipe}, merges `overrides` into the existing ones\n * and returns a new Overridden sharing the original `inner`. No\n * `Overridden<Overridden<X>>` is produced.\n */\n static wrap(col: Column, overrides: SpecOverrides): ColumnOverriddenRecipe {\n if (col instanceof ColumnOverriddenRecipe) {\n return new ColumnOverriddenRecipe(col.inner, mergeSpecOverrides(col.overrides, overrides));\n }\n // `inner` is not an Overridden wrap (the `instanceof` branch above handles\n // that). Narrow the id union here so the constructor parameter stays\n // honest with `ColumnOverriddenKey.source`.\n return new ColumnOverriddenRecipe(col as NonOverriddenColumn, overrides);\n }\n\n /**\n * Static counterpart to {@link wrap}: returns the resolution status of a\n * {@link ColumnOverriddenKey} without constructing the recipe. Overrides\n * do not add references — status collapses to the source's status.\n */\n static getStatusByKey(\n key: ColumnOverriddenKey,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n ): ColumnResolutionStatus {\n return ColumnRecipe.getStatus(key.source, opts);\n }\n\n readonly id: ColumnOverriddenId;\n private specCache?: { readonly value: PColumnSpec };\n private queryCache?: { readonly value: SpecQuery };\n private dataStatusCache?: { readonly value: ColumnFieldStatus };\n\n private constructor(\n private readonly inner: NonOverriddenColumn,\n private readonly overrides: SpecOverrides,\n ) {\n this.id = createColumnOverriddenId({\n source: inner.id,\n specOverrides: overrides,\n });\n }\n\n /** Wrapped recipe — exposed so external walkers can descend. */\n getInner(): Column {\n return this.inner;\n }\n\n /**\n * `inner` owns all references; overrides are a pure spec patch and do not\n * introduce new column refs.\n */\n getReferencedIds(): PObjectId[] {\n return this.inner.getReferencedIds();\n }\n\n getDataStatus(): ColumnFieldStatus {\n if (this.dataStatusCache === undefined) {\n this.dataStatusCache = { value: this.inner.getDataStatus() };\n }\n return this.dataStatusCache.value;\n }\n\n /**\n * Take the inner spec and overlay our overrides. `applySpecOverrides`\n * extracts the overrides from `this.id` itself.\n */\n getSpec(): PColumnSpec {\n if (this.specCache === undefined) {\n this.specCache = { value: applySpecOverrides(this.inner.getSpec(), this.id) };\n }\n return this.specCache.value;\n }\n\n /**\n * Emit a client-side `specOverride` node wrapping the inner query.\n *\n * This is a structural-but-collapsible node: it carries the override\n * patch through the query tree so consumers see the full recipe shape,\n * but it is collapsed at the host boundary (`resolvePColumn`) before\n * the query reaches pframe-engine. The engine never sees this node.\n *\n * Overrides do not change query topology — they are a pure spec patch.\n */\n getQuery(): SpecQuery {\n if (this.queryCache === undefined) {\n // Rebrand the inner column leaf to this.id (rich Overridden id) so\n // filter/sort references emitted with this recipe's id match the\n // leaf the engine sees. The specOverride node still wraps the leaf\n // and is collapsed at the host boundary into a spec patch on the\n // resolved PColumn.\n this.queryCache = {\n value: {\n type: \"specOverride\",\n input: rebrandLeafId(this.inner.getQuery(), this.inner.id, this.id),\n override: this.overrides,\n },\n };\n }\n return this.queryCache.value;\n }\n\n /**\n * Flat merge: new overrides merge with existing ones; `inner` is unchanged.\n * The result is an Overridden of the same depth.\n */\n withSpecs(overrides: SpecOverrides): Column {\n return ColumnOverriddenRecipe.wrap(this, overrides);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmCA,IAAa,yBAAb,MAAa,uBAA6D;CAmCrD;CACA;;;;;;;CA7BnB,OAAO,KAAK,KAAa,WAAkD;EACzE,IAAI,eAAe,wBACjB,OAAO,IAAI,uBAAuB,IAAI,OAAO,mBAAmB,IAAI,WAAW,SAAS,CAAC;EAK3F,OAAO,IAAI,uBAAuB,KAA4B,SAAS;CACzE;;;;;;CAOA,OAAO,eACL,KACA,OAAqC,CAAC,GACd;EACxB,OAAO,aAAa,UAAU,IAAI,QAAQ,IAAI;CAChD;CAEA;CACA;CACA;CACA;CAEA,YACE,OACA,WACA;EAFiB,KAAA,QAAA;EACA,KAAA,YAAA;EAEjB,KAAK,KAAK,yBAAyB;GACjC,QAAQ,MAAM;GACd,eAAe;EACjB,CAAC;CACH;;CAGA,WAAmB;EACjB,OAAO,KAAK;CACd;;;;;CAMA,mBAAgC;EAC9B,OAAO,KAAK,MAAM,iBAAiB;CACrC;CAEA,gBAAmC;EACjC,IAAI,KAAK,oBAAoB,KAAA,GAC3B,KAAK,kBAAkB,EAAE,OAAO,KAAK,MAAM,cAAc,EAAE;EAE7D,OAAO,KAAK,gBAAgB;CAC9B;;;;;CAMA,UAAuB;EACrB,IAAI,KAAK,cAAc,KAAA,GACrB,KAAK,YAAY,EAAE,OAAO,mBAAmB,KAAK,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAE;EAE9E,OAAO,KAAK,UAAU;CACxB;;;;;;;;;;;CAYA,WAAsB;EACpB,IAAI,KAAK,eAAe,KAAA,GAMtB,KAAK,aAAa,EAChB,OAAO;GACL,MAAM;GACN,OAAO,cAAc,KAAK,MAAM,SAAS,GAAG,KAAK,MAAM,IAAI,KAAK,EAAE;GAClE,UAAU,KAAK;EACjB,EACF;EAEF,OAAO,KAAK,WAAW;CACzB;;;;;CAMA,UAAU,WAAkC;EAC1C,OAAO,uBAAuB,KAAK,MAAM,SAAS;CACpD;AACF"}
@@ -0,0 +1,72 @@
1
+ const require_column_discovered_recipe = require("./column_discovered_recipe.cjs");
2
+ const require_column_filtered_recipe = require("./column_filtered_recipe.cjs");
3
+ const require_column_overrided_recipe = require("./column_overrided_recipe.cjs");
4
+ const require_column_lazy = require("../column_lazy.cjs");
5
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
6
+ //#region src/columns/column_recipes/index.ts
7
+ /**
8
+ * Build a `ColumnRecipe` from a stringified id. Dispatches to the matching
9
+ * concrete recipe variant based on the id's encoding and recurses on
10
+ * wrappers' inner `source`:
11
+ *
12
+ * - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`
13
+ * - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}
14
+ * - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,
15
+ * then {@link ColumnOverriddenRecipe.wrap}
16
+ * - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,
17
+ * then {@link ColumnFilteredRecipe.wrap}
18
+ *
19
+ * Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,
20
+ * which needs an anchor map to resolve) or when a nested source itself
21
+ * cannot be built.
22
+ */
23
+ function ColumnRecipeBuild(id, opts = {}) {
24
+ const parsed = (0, _milaboratories_pl_model_common.parseColumnIdSafely)(id);
25
+ if ((0, _milaboratories_pl_model_common.isPObjectKey)(parsed)) return require_column_lazy.ColumnLazyImpl.fromId(id, opts);
26
+ if ((0, _milaboratories_pl_model_common.isColumnDiscoveredKey)(parsed)) return require_column_discovered_recipe.ColumnDiscoveredRecipe.fromKey(parsed, opts);
27
+ if ((0, _milaboratories_pl_model_common.isColumnOverriddenKey)(parsed)) {
28
+ const inner = ColumnRecipe(parsed.source, opts);
29
+ if (inner === void 0) return void 0;
30
+ return require_column_overrided_recipe.ColumnOverriddenRecipe.wrap(inner, parsed.specOverrides);
31
+ }
32
+ if ((0, _milaboratories_pl_model_common.isColumnFilteredKey)(parsed)) {
33
+ if (typeof parsed.source !== "string") throw new Error(`Unsupported ColumnRecipe id variant: filtered column with non-string source (${JSON.stringify(parsed.source)})`);
34
+ const inner = ColumnRecipe(parsed.source, opts);
35
+ if (inner === void 0) return void 0;
36
+ return require_column_filtered_recipe.ColumnFilteredRecipe.wrap(inner, parsed.axisFilters);
37
+ }
38
+ throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);
39
+ }
40
+ /**
41
+ * Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on
42
+ * the parsed id shape to the matching `getStatusBy*` static — never
43
+ * constructs the recipe. Use this at boundaries (resolver, filter/sort
44
+ * targets) to throw early on `absent` instead of silently producing an empty
45
+ * recipe via {@link ColumnRecipeBuild}.
46
+ */
47
+ function ColumnRecipeGetStatus(id, opts = {}) {
48
+ const parsed = (0, _milaboratories_pl_model_common.parseColumnIdSafely)(id);
49
+ if ((0, _milaboratories_pl_model_common.isPObjectKey)(parsed)) return require_column_lazy.ColumnLazyImpl.getStatusById(id, opts);
50
+ if ((0, _milaboratories_pl_model_common.isColumnDiscoveredKey)(parsed)) return require_column_discovered_recipe.ColumnDiscoveredRecipe.getStatusByKey(parsed, opts);
51
+ if ((0, _milaboratories_pl_model_common.isColumnOverriddenKey)(parsed)) return require_column_overrided_recipe.ColumnOverriddenRecipe.getStatusByKey(parsed, opts);
52
+ if ((0, _milaboratories_pl_model_common.isColumnFilteredKey)(parsed)) return require_column_filtered_recipe.ColumnFilteredRecipe.getStatusByKey(parsed, opts);
53
+ throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);
54
+ }
55
+ const ColumnRecipe = Object.assign(ColumnRecipeBuild, { getStatus: ColumnRecipeGetStatus });
56
+ /**
57
+ * Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the
58
+ * wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},
59
+ * {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,
60
+ * or a recipe and you want to branch on the recipe case.
61
+ */
62
+ function isColumnRecipe(value) {
63
+ return value instanceof require_column_lazy.ColumnLazyImpl || value instanceof require_column_discovered_recipe.ColumnDiscoveredRecipe || value instanceof require_column_filtered_recipe.ColumnFilteredRecipe || value instanceof require_column_overrided_recipe.ColumnOverriddenRecipe;
64
+ }
65
+ //#endregion
66
+ exports.ColumnDiscoveredRecipe = require_column_discovered_recipe.ColumnDiscoveredRecipe;
67
+ exports.ColumnFilteredRecipe = require_column_filtered_recipe.ColumnFilteredRecipe;
68
+ exports.ColumnOverriddenRecipe = require_column_overrided_recipe.ColumnOverriddenRecipe;
69
+ exports.ColumnRecipe = ColumnRecipe;
70
+ exports.isColumnRecipe = isColumnRecipe;
71
+
72
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["ColumnLazyImpl","ColumnDiscoveredRecipe","ColumnOverriddenRecipe","ColumnFilteredRecipe"],"sources":["../../../src/columns/column_recipes/index.ts"],"sourcesContent":["import {\n isColumnDiscoveredKey,\n isColumnOverriddenKey,\n parseColumnIdSafely,\n type ColumnUniversalId,\n type PObjectId,\n isPObjectKey,\n isColumnFilteredKey,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx } from \"../../render/internal\";\nimport { ColumnLazyImpl } from \"../column_lazy\";\nimport { ColumnDiscoveredRecipe } from \"./column_discovered_recipe\";\nimport { ColumnFilteredRecipe } from \"./column_filtered_recipe\";\nimport { ColumnOverriddenRecipe } from \"./column_overrided_recipe\";\nimport type {\n ColumnRecipe as ColumnRecipeBase,\n ColumnRecipeId,\n ColumnResolutionStatus,\n} from \"./types\";\n\nexport type { ColumnFieldStatus, ColumnRecipeId, ColumnResolutionStatus, SpecQuery } from \"./types\";\nexport { ColumnAbsentError } from \"../column_lazy\";\nexport { ColumnDiscoveredRecipe } from \"./column_discovered_recipe\";\nexport { ColumnFilteredRecipe } from \"./column_filtered_recipe\";\nexport { ColumnOverriddenRecipe } from \"./column_overrided_recipe\";\n\n// Re-declare the interface locally so the name can merge with the dispatcher\n// value declared below: a single name `ColumnRecipe` resolves to the\n// interface in type position and to the factory function (`Object.assign`d\n// with `.getStatus`) in value position.\n// (Type-only re-exports do not participate in TS declaration merging.)\nexport interface ColumnRecipe<\n ID extends ColumnRecipeId = ColumnRecipeId,\n> extends ColumnRecipeBase<ID> {}\n\n/**\n * Build a `ColumnRecipe` from a stringified id. Dispatches to the matching\n * concrete recipe variant based on the id's encoding and recurses on\n * wrappers' inner `source`:\n *\n * - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`\n * - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}\n * - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,\n * then {@link ColumnOverriddenRecipe.wrap}\n * - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,\n * then {@link ColumnFilteredRecipe.wrap}\n *\n * Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,\n * which needs an anchor map to resolve) or when a nested source itself\n * cannot be built.\n */\nfunction ColumnRecipeBuild(\n id: ColumnUniversalId,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): undefined | ColumnRecipe {\n const parsed = parseColumnIdSafely(id);\n\n if (isPObjectKey(parsed)) {\n return ColumnLazyImpl.fromId(id as PObjectId, opts);\n }\n\n if (isColumnDiscoveredKey(parsed)) {\n return ColumnDiscoveredRecipe.fromKey(parsed, opts);\n }\n\n if (isColumnOverriddenKey(parsed)) {\n const inner = ColumnRecipe(parsed.source, opts);\n if (inner === undefined) return undefined;\n return ColumnOverriddenRecipe.wrap(inner, parsed.specOverrides);\n }\n\n if (isColumnFilteredKey(parsed)) {\n // ColumnFilteredKey.source is a stringified ColumnUniversalId (leaf or\n // any nested wrapper). Legacy `FilteredPColumnId` with an AnchoredPColumnId\n // (object) source is not supported here — guard against it explicitly.\n if (typeof parsed.source !== \"string\") {\n throw new Error(\n `Unsupported ColumnRecipe id variant: filtered column with non-string source (${JSON.stringify(parsed.source)})`,\n );\n }\n const inner = ColumnRecipe(parsed.source, opts);\n if (inner === undefined) return undefined;\n return ColumnFilteredRecipe.wrap(inner, parsed.axisFilters);\n }\n\n throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);\n}\n\n/**\n * Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on\n * the parsed id shape to the matching `getStatusBy*` static — never\n * constructs the recipe. Use this at boundaries (resolver, filter/sort\n * targets) to throw early on `absent` instead of silently producing an empty\n * recipe via {@link ColumnRecipeBuild}.\n */\nfunction ColumnRecipeGetStatus(\n id: ColumnUniversalId,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): ColumnResolutionStatus {\n const parsed = parseColumnIdSafely(id);\n if (isPObjectKey(parsed)) return ColumnLazyImpl.getStatusById(id as PObjectId, opts);\n if (isColumnDiscoveredKey(parsed)) return ColumnDiscoveredRecipe.getStatusByKey(parsed, opts);\n if (isColumnOverriddenKey(parsed)) return ColumnOverriddenRecipe.getStatusByKey(parsed, opts);\n if (isColumnFilteredKey(parsed)) return ColumnFilteredRecipe.getStatusByKey(parsed, opts);\n throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);\n}\n\nexport const ColumnRecipe: typeof ColumnRecipeBuild & {\n readonly getStatus: typeof ColumnRecipeGetStatus;\n} = Object.assign(ColumnRecipeBuild, {\n getStatus: ColumnRecipeGetStatus,\n});\n\n/**\n * Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the\n * wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},\n * {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,\n * or a recipe and you want to branch on the recipe case.\n */\nexport function isColumnRecipe(value: unknown): value is ColumnRecipe {\n return (\n value instanceof ColumnLazyImpl ||\n value instanceof ColumnDiscoveredRecipe ||\n value instanceof ColumnFilteredRecipe ||\n value instanceof ColumnOverriddenRecipe\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmDA,SAAS,kBACP,IACA,OAAqC,CAAC,GACZ;CAC1B,MAAM,UAAA,GAAA,gCAAA,oBAAA,CAA6B,EAAE;CAErC,KAAA,GAAA,gCAAA,aAAA,CAAiB,MAAM,GACrB,OAAOA,oBAAAA,eAAe,OAAO,IAAiB,IAAI;CAGpD,KAAA,GAAA,gCAAA,sBAAA,CAA0B,MAAM,GAC9B,OAAOC,iCAAAA,uBAAuB,QAAQ,QAAQ,IAAI;CAGpD,KAAA,GAAA,gCAAA,sBAAA,CAA0B,MAAM,GAAG;EACjC,MAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;EAC9C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,OAAOC,gCAAAA,uBAAuB,KAAK,OAAO,OAAO,aAAa;CAChE;CAEA,KAAA,GAAA,gCAAA,oBAAA,CAAwB,MAAM,GAAG;EAI/B,IAAI,OAAO,OAAO,WAAW,UAC3B,MAAM,IAAI,MACR,gFAAgF,KAAK,UAAU,OAAO,MAAM,EAAE,EAChH;EAEF,MAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;EAC9C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,OAAOC,+BAAAA,qBAAqB,KAAK,OAAO,OAAO,WAAW;CAC5D;CAEA,MAAM,IAAI,MAAM,wCAAwC,IAAI;AAC9D;;;;;;;;AASA,SAAS,sBACP,IACA,OAAqC,CAAC,GACd;CACxB,MAAM,UAAA,GAAA,gCAAA,oBAAA,CAA6B,EAAE;CACrC,KAAA,GAAA,gCAAA,aAAA,CAAiB,MAAM,GAAG,OAAOH,oBAAAA,eAAe,cAAc,IAAiB,IAAI;CACnF,KAAA,GAAA,gCAAA,sBAAA,CAA0B,MAAM,GAAG,OAAOC,iCAAAA,uBAAuB,eAAe,QAAQ,IAAI;CAC5F,KAAA,GAAA,gCAAA,sBAAA,CAA0B,MAAM,GAAG,OAAOC,gCAAAA,uBAAuB,eAAe,QAAQ,IAAI;CAC5F,KAAA,GAAA,gCAAA,oBAAA,CAAwB,MAAM,GAAG,OAAOC,+BAAAA,qBAAqB,eAAe,QAAQ,IAAI;CACxF,MAAM,IAAI,MAAM,wCAAwC,IAAI;AAC9D;AAEA,MAAa,eAET,OAAO,OAAO,mBAAmB,EACnC,WAAW,sBACb,CAAC;;;;;;;AAQD,SAAgB,eAAe,OAAuC;CACpE,OACE,iBAAiBH,oBAAAA,kBACjB,iBAAiBC,iCAAAA,0BACjB,iBAAiBE,+BAAAA,wBACjB,iBAAiBD,gCAAAA;AAErB"}
@@ -0,0 +1,52 @@
1
+ import { GlobalCfgRenderCtx } from "../../render/internal.js";
2
+ import { ColumnFieldStatus, ColumnRecipe as ColumnRecipe$1, ColumnRecipeId, ColumnResolutionStatus, SpecQuery as SpecQuery$1 } from "./types.js";
3
+ import { ColumnAbsentError } from "../column_lazy.js";
4
+ import { ColumnDiscoveredRecipe } from "./column_discovered_recipe.js";
5
+ import { ColumnFilteredRecipe } from "./column_filtered_recipe.js";
6
+ import { ColumnOverriddenRecipe } from "./column_overrided_recipe.js";
7
+ import { ColumnUniversalId } from "@milaboratories/pl-model-common";
8
+
9
+ //#region src/columns/column_recipes/index.d.ts
10
+ interface ColumnRecipe<ID extends ColumnRecipeId = ColumnRecipeId> extends ColumnRecipe$1<ID> {}
11
+ /**
12
+ * Build a `ColumnRecipe` from a stringified id. Dispatches to the matching
13
+ * concrete recipe variant based on the id's encoding and recurses on
14
+ * wrappers' inner `source`:
15
+ *
16
+ * - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`
17
+ * - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}
18
+ * - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,
19
+ * then {@link ColumnOverriddenRecipe.wrap}
20
+ * - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,
21
+ * then {@link ColumnFilteredRecipe.wrap}
22
+ *
23
+ * Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,
24
+ * which needs an anchor map to resolve) or when a nested source itself
25
+ * cannot be built.
26
+ */
27
+ declare function ColumnRecipeBuild(id: ColumnUniversalId, opts?: {
28
+ ctx?: GlobalCfgRenderCtx;
29
+ }): undefined | ColumnRecipe;
30
+ /**
31
+ * Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on
32
+ * the parsed id shape to the matching `getStatusBy*` static — never
33
+ * constructs the recipe. Use this at boundaries (resolver, filter/sort
34
+ * targets) to throw early on `absent` instead of silently producing an empty
35
+ * recipe via {@link ColumnRecipeBuild}.
36
+ */
37
+ declare function ColumnRecipeGetStatus(id: ColumnUniversalId, opts?: {
38
+ ctx?: GlobalCfgRenderCtx;
39
+ }): ColumnResolutionStatus;
40
+ declare const ColumnRecipe: typeof ColumnRecipeBuild & {
41
+ readonly getStatus: typeof ColumnRecipeGetStatus;
42
+ };
43
+ /**
44
+ * Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the
45
+ * wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},
46
+ * {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,
47
+ * or a recipe and you want to branch on the recipe case.
48
+ */
49
+ declare function isColumnRecipe(value: unknown): value is ColumnRecipe;
50
+ //#endregion
51
+ export { ColumnDiscoveredRecipe, ColumnFilteredRecipe, ColumnOverriddenRecipe, ColumnRecipe, type ColumnRecipeId, type SpecQuery$1 as SpecQuery, isColumnRecipe };
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/columns/column_recipes/index.ts"],"mappings":";;;;;;;;;UA+BiB,YAAA,YACJ,cAAA,GAAiB,cAAA,UACpB,cAAA,CAAiB,EAAA;;;;;;;;;;;;;;;AAAE;AAAI;iBAkBxB,iBAAA,CACP,EAAA,EAAI,iBAAA,EACJ,IAAA;EAAQ,GAAA,GAAM,kBAAA;AAAA,gBACD,YAAA;;;;;;;;iBAyCN,qBAAA,CACP,EAAA,EAAI,iBAAA,EACJ,IAAA;EAAQ,GAAA,GAAM,kBAAA;AAAA,IACb,sBAAA;AAAA,cASU,YAAA,SAAqB,iBAAA;EAAA,SACvB,SAAA,SAAkB,qBAAqB;AAAA;;;;;;;iBAWlC,cAAA,CAAe,KAAA,YAAiB,KAAA,IAAS,YAAY"}
@@ -0,0 +1,68 @@
1
+ import { ColumnDiscoveredRecipe } from "./column_discovered_recipe.js";
2
+ import { ColumnFilteredRecipe } from "./column_filtered_recipe.js";
3
+ import { ColumnOverriddenRecipe } from "./column_overrided_recipe.js";
4
+ import { ColumnLazyImpl } from "../column_lazy.js";
5
+ import { isColumnDiscoveredKey, isColumnFilteredKey, isColumnOverriddenKey, isPObjectKey, parseColumnIdSafely } from "@milaboratories/pl-model-common";
6
+ //#region src/columns/column_recipes/index.ts
7
+ /**
8
+ * Build a `ColumnRecipe` from a stringified id. Dispatches to the matching
9
+ * concrete recipe variant based on the id's encoding and recurses on
10
+ * wrappers' inner `source`:
11
+ *
12
+ * - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`
13
+ * - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}
14
+ * - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,
15
+ * then {@link ColumnOverriddenRecipe.wrap}
16
+ * - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,
17
+ * then {@link ColumnFilteredRecipe.wrap}
18
+ *
19
+ * Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,
20
+ * which needs an anchor map to resolve) or when a nested source itself
21
+ * cannot be built.
22
+ */
23
+ function ColumnRecipeBuild(id, opts = {}) {
24
+ const parsed = parseColumnIdSafely(id);
25
+ if (isPObjectKey(parsed)) return ColumnLazyImpl.fromId(id, opts);
26
+ if (isColumnDiscoveredKey(parsed)) return ColumnDiscoveredRecipe.fromKey(parsed, opts);
27
+ if (isColumnOverriddenKey(parsed)) {
28
+ const inner = ColumnRecipe(parsed.source, opts);
29
+ if (inner === void 0) return void 0;
30
+ return ColumnOverriddenRecipe.wrap(inner, parsed.specOverrides);
31
+ }
32
+ if (isColumnFilteredKey(parsed)) {
33
+ if (typeof parsed.source !== "string") throw new Error(`Unsupported ColumnRecipe id variant: filtered column with non-string source (${JSON.stringify(parsed.source)})`);
34
+ const inner = ColumnRecipe(parsed.source, opts);
35
+ if (inner === void 0) return void 0;
36
+ return ColumnFilteredRecipe.wrap(inner, parsed.axisFilters);
37
+ }
38
+ throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);
39
+ }
40
+ /**
41
+ * Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on
42
+ * the parsed id shape to the matching `getStatusBy*` static — never
43
+ * constructs the recipe. Use this at boundaries (resolver, filter/sort
44
+ * targets) to throw early on `absent` instead of silently producing an empty
45
+ * recipe via {@link ColumnRecipeBuild}.
46
+ */
47
+ function ColumnRecipeGetStatus(id, opts = {}) {
48
+ const parsed = parseColumnIdSafely(id);
49
+ if (isPObjectKey(parsed)) return ColumnLazyImpl.getStatusById(id, opts);
50
+ if (isColumnDiscoveredKey(parsed)) return ColumnDiscoveredRecipe.getStatusByKey(parsed, opts);
51
+ if (isColumnOverriddenKey(parsed)) return ColumnOverriddenRecipe.getStatusByKey(parsed, opts);
52
+ if (isColumnFilteredKey(parsed)) return ColumnFilteredRecipe.getStatusByKey(parsed, opts);
53
+ throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);
54
+ }
55
+ const ColumnRecipe = Object.assign(ColumnRecipeBuild, { getStatus: ColumnRecipeGetStatus });
56
+ /**
57
+ * Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the
58
+ * wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},
59
+ * {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,
60
+ * or a recipe and you want to branch on the recipe case.
61
+ */
62
+ function isColumnRecipe(value) {
63
+ return value instanceof ColumnLazyImpl || value instanceof ColumnDiscoveredRecipe || value instanceof ColumnFilteredRecipe || value instanceof ColumnOverriddenRecipe;
64
+ }
65
+ //#endregion
66
+ export { ColumnDiscoveredRecipe, ColumnFilteredRecipe, ColumnOverriddenRecipe, ColumnRecipe, isColumnRecipe };
67
+
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/columns/column_recipes/index.ts"],"sourcesContent":["import {\n isColumnDiscoveredKey,\n isColumnOverriddenKey,\n parseColumnIdSafely,\n type ColumnUniversalId,\n type PObjectId,\n isPObjectKey,\n isColumnFilteredKey,\n} from \"@milaboratories/pl-model-common\";\nimport type { GlobalCfgRenderCtx } from \"../../render/internal\";\nimport { ColumnLazyImpl } from \"../column_lazy\";\nimport { ColumnDiscoveredRecipe } from \"./column_discovered_recipe\";\nimport { ColumnFilteredRecipe } from \"./column_filtered_recipe\";\nimport { ColumnOverriddenRecipe } from \"./column_overrided_recipe\";\nimport type {\n ColumnRecipe as ColumnRecipeBase,\n ColumnRecipeId,\n ColumnResolutionStatus,\n} from \"./types\";\n\nexport type { ColumnFieldStatus, ColumnRecipeId, ColumnResolutionStatus, SpecQuery } from \"./types\";\nexport { ColumnAbsentError } from \"../column_lazy\";\nexport { ColumnDiscoveredRecipe } from \"./column_discovered_recipe\";\nexport { ColumnFilteredRecipe } from \"./column_filtered_recipe\";\nexport { ColumnOverriddenRecipe } from \"./column_overrided_recipe\";\n\n// Re-declare the interface locally so the name can merge with the dispatcher\n// value declared below: a single name `ColumnRecipe` resolves to the\n// interface in type position and to the factory function (`Object.assign`d\n// with `.getStatus`) in value position.\n// (Type-only re-exports do not participate in TS declaration merging.)\nexport interface ColumnRecipe<\n ID extends ColumnRecipeId = ColumnRecipeId,\n> extends ColumnRecipeBase<ID> {}\n\n/**\n * Build a `ColumnRecipe` from a stringified id. Dispatches to the matching\n * concrete recipe variant based on the id's encoding and recurses on\n * wrappers' inner `source`:\n *\n * - bare {@link PObjectId} (non-JSON) → `ColumnLazy.fromId`\n * - `ColumnDiscoveredKey` → {@link ColumnDiscoveredRecipe}\n * - `ColumnOverriddenKey { source, specOverrides }` → recurse on `source`,\n * then {@link ColumnOverriddenRecipe.wrap}\n * - `ColumnFilteredKey { source, axisFilters }` → recurse on `source`,\n * then {@link ColumnFilteredRecipe.wrap}\n *\n * Returns `undefined` for unsupported variants (e.g. AnchoredPColumnId,\n * which needs an anchor map to resolve) or when a nested source itself\n * cannot be built.\n */\nfunction ColumnRecipeBuild(\n id: ColumnUniversalId,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): undefined | ColumnRecipe {\n const parsed = parseColumnIdSafely(id);\n\n if (isPObjectKey(parsed)) {\n return ColumnLazyImpl.fromId(id as PObjectId, opts);\n }\n\n if (isColumnDiscoveredKey(parsed)) {\n return ColumnDiscoveredRecipe.fromKey(parsed, opts);\n }\n\n if (isColumnOverriddenKey(parsed)) {\n const inner = ColumnRecipe(parsed.source, opts);\n if (inner === undefined) return undefined;\n return ColumnOverriddenRecipe.wrap(inner, parsed.specOverrides);\n }\n\n if (isColumnFilteredKey(parsed)) {\n // ColumnFilteredKey.source is a stringified ColumnUniversalId (leaf or\n // any nested wrapper). Legacy `FilteredPColumnId` with an AnchoredPColumnId\n // (object) source is not supported here — guard against it explicitly.\n if (typeof parsed.source !== \"string\") {\n throw new Error(\n `Unsupported ColumnRecipe id variant: filtered column with non-string source (${JSON.stringify(parsed.source)})`,\n );\n }\n const inner = ColumnRecipe(parsed.source, opts);\n if (inner === undefined) return undefined;\n return ColumnFilteredRecipe.wrap(inner, parsed.axisFilters);\n }\n\n throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);\n}\n\n/**\n * Resolution status counterpart to {@link ColumnRecipeBuild}. Dispatches on\n * the parsed id shape to the matching `getStatusBy*` static — never\n * constructs the recipe. Use this at boundaries (resolver, filter/sort\n * targets) to throw early on `absent` instead of silently producing an empty\n * recipe via {@link ColumnRecipeBuild}.\n */\nfunction ColumnRecipeGetStatus(\n id: ColumnUniversalId,\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): ColumnResolutionStatus {\n const parsed = parseColumnIdSafely(id);\n if (isPObjectKey(parsed)) return ColumnLazyImpl.getStatusById(id as PObjectId, opts);\n if (isColumnDiscoveredKey(parsed)) return ColumnDiscoveredRecipe.getStatusByKey(parsed, opts);\n if (isColumnOverriddenKey(parsed)) return ColumnOverriddenRecipe.getStatusByKey(parsed, opts);\n if (isColumnFilteredKey(parsed)) return ColumnFilteredRecipe.getStatusByKey(parsed, opts);\n throw new Error(`Unsupported ColumnRecipe id variant: ${id}`);\n}\n\nexport const ColumnRecipe: typeof ColumnRecipeBuild & {\n readonly getStatus: typeof ColumnRecipeGetStatus;\n} = Object.assign(ColumnRecipeBuild, {\n getStatus: ColumnRecipeGetStatus,\n});\n\n/**\n * Type-guard for any recipe class — leaf {@link ColumnLazyImpl} or any of the\n * wrapper recipes ({@link ColumnDiscoveredRecipe}, {@link ColumnFilteredRecipe},\n * {@link ColumnOverriddenRecipe}). Use when a value may be a raw id, a `PColumn`,\n * or a recipe and you want to branch on the recipe case.\n */\nexport function isColumnRecipe(value: unknown): value is ColumnRecipe {\n return (\n value instanceof ColumnLazyImpl ||\n value instanceof ColumnDiscoveredRecipe ||\n value instanceof ColumnFilteredRecipe ||\n value instanceof ColumnOverriddenRecipe\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmDA,SAAS,kBACP,IACA,OAAqC,CAAC,GACZ;CAC1B,MAAM,SAAS,oBAAoB,EAAE;CAErC,IAAI,aAAa,MAAM,GACrB,OAAO,eAAe,OAAO,IAAiB,IAAI;CAGpD,IAAI,sBAAsB,MAAM,GAC9B,OAAO,uBAAuB,QAAQ,QAAQ,IAAI;CAGpD,IAAI,sBAAsB,MAAM,GAAG;EACjC,MAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;EAC9C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,OAAO,uBAAuB,KAAK,OAAO,OAAO,aAAa;CAChE;CAEA,IAAI,oBAAoB,MAAM,GAAG;EAI/B,IAAI,OAAO,OAAO,WAAW,UAC3B,MAAM,IAAI,MACR,gFAAgF,KAAK,UAAU,OAAO,MAAM,EAAE,EAChH;EAEF,MAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;EAC9C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;EAChC,OAAO,qBAAqB,KAAK,OAAO,OAAO,WAAW;CAC5D;CAEA,MAAM,IAAI,MAAM,wCAAwC,IAAI;AAC9D;;;;;;;;AASA,SAAS,sBACP,IACA,OAAqC,CAAC,GACd;CACxB,MAAM,SAAS,oBAAoB,EAAE;CACrC,IAAI,aAAa,MAAM,GAAG,OAAO,eAAe,cAAc,IAAiB,IAAI;CACnF,IAAI,sBAAsB,MAAM,GAAG,OAAO,uBAAuB,eAAe,QAAQ,IAAI;CAC5F,IAAI,sBAAsB,MAAM,GAAG,OAAO,uBAAuB,eAAe,QAAQ,IAAI;CAC5F,IAAI,oBAAoB,MAAM,GAAG,OAAO,qBAAqB,eAAe,QAAQ,IAAI;CACxF,MAAM,IAAI,MAAM,wCAAwC,IAAI;AAC9D;AAEA,MAAa,eAET,OAAO,OAAO,mBAAmB,EACnC,WAAW,sBACb,CAAC;;;;;;;AAQD,SAAgB,eAAe,OAAuC;CACpE,OACE,iBAAiB,kBACjB,iBAAiB,0BACjB,iBAAiB,wBACjB,iBAAiB;AAErB"}
@@ -0,0 +1,22 @@
1
+ let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
2
+ //#region src/columns/column_recipes/leaf_rebrand.ts
3
+ /**
4
+ * Replace every column leaf whose id equals `fromId` with `toId`, leaving
5
+ * other column refs (linkers, sub-anchors) intact. Wrapper recipes
6
+ * (Overridden / Filtered) and Discovered use this to lift their own id onto
7
+ * the hit leaf, so per-variant uniqueness propagates to the engine and
8
+ * resolver-emitted ids match leaves in the emitted SpecQuery.
9
+ *
10
+ * Generic over all SpecQuery node shapes — including `linkerJoin`, which
11
+ * occurs when a wrapper sits over a {@link ColumnDiscoveredRecipe}: only
12
+ * the deepest hit leaf carries `fromId`, every linker leaf has a different
13
+ * id and is left untouched.
14
+ */
15
+ function rebrandLeafId(node, fromId, toId) {
16
+ if (fromId === toId) return node;
17
+ return (0, _milaboratories_pl_model_common.mapSpecQueryColumns)(node, { column: (id) => id === fromId ? toId : id });
18
+ }
19
+ //#endregion
20
+ exports.rebrandLeafId = rebrandLeafId;
21
+
22
+ //# sourceMappingURL=leaf_rebrand.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaf_rebrand.cjs","names":[],"sources":["../../../src/columns/column_recipes/leaf_rebrand.ts"],"sourcesContent":["import {\n mapSpecQueryColumns,\n type ColumnUniversalId,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\n\n/**\n * Replace every column leaf whose id equals `fromId` with `toId`, leaving\n * other column refs (linkers, sub-anchors) intact. Wrapper recipes\n * (Overridden / Filtered) and Discovered use this to lift their own id onto\n * the hit leaf, so per-variant uniqueness propagates to the engine and\n * resolver-emitted ids match leaves in the emitted SpecQuery.\n *\n * Generic over all SpecQuery node shapes — including `linkerJoin`, which\n * occurs when a wrapper sits over a {@link ColumnDiscoveredRecipe}: only\n * the deepest hit leaf carries `fromId`, every linker leaf has a different\n * id and is left untouched.\n */\nexport function rebrandLeafId(\n node: SpecQuery,\n fromId: ColumnUniversalId,\n toId: ColumnUniversalId,\n): SpecQuery {\n if (fromId === toId) return node;\n return mapSpecQueryColumns(node, {\n column: (id) => (id === fromId ? toId : id),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,SAAgB,cACd,MACA,QACA,MACW;CACX,IAAI,WAAW,MAAM,OAAO;CAC5B,QAAA,GAAA,gCAAA,oBAAA,CAA2B,MAAM,EAC/B,SAAS,OAAQ,OAAO,SAAS,OAAO,GAC1C,CAAC;AACH"}
@@ -0,0 +1,22 @@
1
+ import { mapSpecQueryColumns } from "@milaboratories/pl-model-common";
2
+ //#region src/columns/column_recipes/leaf_rebrand.ts
3
+ /**
4
+ * Replace every column leaf whose id equals `fromId` with `toId`, leaving
5
+ * other column refs (linkers, sub-anchors) intact. Wrapper recipes
6
+ * (Overridden / Filtered) and Discovered use this to lift their own id onto
7
+ * the hit leaf, so per-variant uniqueness propagates to the engine and
8
+ * resolver-emitted ids match leaves in the emitted SpecQuery.
9
+ *
10
+ * Generic over all SpecQuery node shapes — including `linkerJoin`, which
11
+ * occurs when a wrapper sits over a {@link ColumnDiscoveredRecipe}: only
12
+ * the deepest hit leaf carries `fromId`, every linker leaf has a different
13
+ * id and is left untouched.
14
+ */
15
+ function rebrandLeafId(node, fromId, toId) {
16
+ if (fromId === toId) return node;
17
+ return mapSpecQueryColumns(node, { column: (id) => id === fromId ? toId : id });
18
+ }
19
+ //#endregion
20
+ export { rebrandLeafId };
21
+
22
+ //# sourceMappingURL=leaf_rebrand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaf_rebrand.js","names":[],"sources":["../../../src/columns/column_recipes/leaf_rebrand.ts"],"sourcesContent":["import {\n mapSpecQueryColumns,\n type ColumnUniversalId,\n type SpecQuery,\n} from \"@milaboratories/pl-model-common\";\n\n/**\n * Replace every column leaf whose id equals `fromId` with `toId`, leaving\n * other column refs (linkers, sub-anchors) intact. Wrapper recipes\n * (Overridden / Filtered) and Discovered use this to lift their own id onto\n * the hit leaf, so per-variant uniqueness propagates to the engine and\n * resolver-emitted ids match leaves in the emitted SpecQuery.\n *\n * Generic over all SpecQuery node shapes — including `linkerJoin`, which\n * occurs when a wrapper sits over a {@link ColumnDiscoveredRecipe}: only\n * the deepest hit leaf carries `fromId`, every linker leaf has a different\n * id and is left untouched.\n */\nexport function rebrandLeafId(\n node: SpecQuery,\n fromId: ColumnUniversalId,\n toId: ColumnUniversalId,\n): SpecQuery {\n if (fromId === toId) return node;\n return mapSpecQueryColumns(node, {\n column: (id) => (id === fromId ? toId : id),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,SAAgB,cACd,MACA,QACA,MACW;CACX,IAAI,WAAW,MAAM,OAAO;CAC5B,OAAO,oBAAoB,MAAM,EAC/B,SAAS,OAAQ,OAAO,SAAS,OAAO,GAC1C,CAAC;AACH"}