@platforma-sdk/model 1.58.3 → 1.58.9

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 (366) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +43 -0
  2. package/dist/_virtual/_rolldown/runtime.js +18 -0
  3. package/dist/annotations/converter.cjs +15 -20
  4. package/dist/annotations/converter.cjs.map +1 -1
  5. package/dist/annotations/converter.d.ts +6 -2
  6. package/dist/annotations/converter.js +14 -18
  7. package/dist/annotations/converter.js.map +1 -1
  8. package/dist/annotations/index.cjs +1 -0
  9. package/dist/annotations/index.d.ts +2 -3
  10. package/dist/annotations/index.js +1 -0
  11. package/dist/annotations/types.d.ts +21 -16
  12. package/dist/bconfig/index.cjs +2 -0
  13. package/dist/bconfig/index.d.ts +5 -6
  14. package/dist/bconfig/index.js +2 -0
  15. package/dist/bconfig/lambdas.d.ts +52 -52
  16. package/dist/bconfig/normalization.cjs +13 -18
  17. package/dist/bconfig/normalization.cjs.map +1 -1
  18. package/dist/bconfig/normalization.d.ts +10 -6
  19. package/dist/bconfig/normalization.js +12 -16
  20. package/dist/bconfig/normalization.js.map +1 -1
  21. package/dist/bconfig/types.cjs +4 -3
  22. package/dist/bconfig/types.cjs.map +1 -1
  23. package/dist/bconfig/types.d.ts +10 -5
  24. package/dist/bconfig/types.js +4 -2
  25. package/dist/bconfig/types.js.map +1 -1
  26. package/dist/bconfig/util.d.ts +7 -4
  27. package/dist/bconfig/v3.d.ts +10 -6
  28. package/dist/block_api_v1.d.ts +62 -58
  29. package/dist/block_api_v2.d.ts +51 -47
  30. package/dist/block_api_v3.d.ts +33 -29
  31. package/dist/block_migrations.cjs +481 -413
  32. package/dist/block_migrations.cjs.map +1 -1
  33. package/dist/block_migrations.d.ts +258 -204
  34. package/dist/block_migrations.js +482 -408
  35. package/dist/block_migrations.js.map +1 -1
  36. package/dist/block_model.cjs +312 -343
  37. package/dist/block_model.cjs.map +1 -1
  38. package/dist/block_model.d.ts +143 -147
  39. package/dist/block_model.js +312 -341
  40. package/dist/block_model.js.map +1 -1
  41. package/dist/block_model_legacy.cjs +231 -255
  42. package/dist/block_model_legacy.cjs.map +1 -1
  43. package/dist/block_model_legacy.d.ts +108 -106
  44. package/dist/block_model_legacy.js +231 -253
  45. package/dist/block_model_legacy.js.map +1 -1
  46. package/dist/block_state_patch.d.ts +10 -10
  47. package/dist/block_state_util.cjs +15 -19
  48. package/dist/block_state_util.cjs.map +1 -1
  49. package/dist/block_state_util.d.ts +14 -13
  50. package/dist/block_state_util.js +15 -18
  51. package/dist/block_state_util.js.map +1 -1
  52. package/dist/block_storage.cjs +233 -238
  53. package/dist/block_storage.cjs.map +1 -1
  54. package/dist/block_storage.d.ts +62 -78
  55. package/dist/block_storage.js +234 -237
  56. package/dist/block_storage.js.map +1 -1
  57. package/dist/block_storage_callbacks.cjs +156 -195
  58. package/dist/block_storage_callbacks.cjs.map +1 -1
  59. package/dist/block_storage_callbacks.js +156 -192
  60. package/dist/block_storage_callbacks.js.map +1 -1
  61. package/dist/block_storage_facade.cjs +29 -85
  62. package/dist/block_storage_facade.cjs.map +1 -1
  63. package/dist/block_storage_facade.d.ts +83 -126
  64. package/dist/block_storage_facade.js +29 -83
  65. package/dist/block_storage_facade.js.map +1 -1
  66. package/dist/components/PFrameForGraphs.cjs +26 -24
  67. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  68. package/dist/components/PFrameForGraphs.d.ts +12 -7
  69. package/dist/components/PFrameForGraphs.js +25 -22
  70. package/dist/components/PFrameForGraphs.js.map +1 -1
  71. package/dist/components/PlAnnotations/filter.d.ts +62 -79
  72. package/dist/components/PlAnnotations/filters_ui.cjs +135 -171
  73. package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
  74. package/dist/components/PlAnnotations/filters_ui.d.ts +48 -46
  75. package/dist/components/PlAnnotations/filters_ui.js +135 -170
  76. package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
  77. package/dist/components/PlAnnotations/index.d.ts +2 -3
  78. package/dist/components/PlDataTable/index.cjs +2 -0
  79. package/dist/components/PlDataTable/index.d.ts +3 -5
  80. package/dist/components/PlDataTable/index.js +2 -0
  81. package/dist/components/PlDataTable/labels.cjs +59 -81
  82. package/dist/components/PlDataTable/labels.cjs.map +1 -1
  83. package/dist/components/PlDataTable/labels.js +58 -79
  84. package/dist/components/PlDataTable/labels.js.map +1 -1
  85. package/dist/components/PlDataTable/state-migration.cjs +186 -144
  86. package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
  87. package/dist/components/PlDataTable/state-migration.d.ts +85 -82
  88. package/dist/components/PlDataTable/state-migration.js +185 -142
  89. package/dist/components/PlDataTable/state-migration.js.map +1 -1
  90. package/dist/components/PlDataTable/table.cjs +172 -194
  91. package/dist/components/PlDataTable/table.cjs.map +1 -1
  92. package/dist/components/PlDataTable/table.d.ts +16 -12
  93. package/dist/components/PlDataTable/table.js +171 -192
  94. package/dist/components/PlDataTable/table.js.map +1 -1
  95. package/dist/components/PlDataTable/v4.d.ts +84 -119
  96. package/dist/components/PlDataTable/v5.d.ts +80 -103
  97. package/dist/components/PlMultiSequenceAlignment.cjs +27 -29
  98. package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
  99. package/dist/components/PlMultiSequenceAlignment.d.ts +36 -27
  100. package/dist/components/PlMultiSequenceAlignment.js +26 -27
  101. package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
  102. package/dist/components/PlSelectionModel.cjs +7 -6
  103. package/dist/components/PlSelectionModel.cjs.map +1 -1
  104. package/dist/components/PlSelectionModel.d.ts +10 -8
  105. package/dist/components/PlSelectionModel.js +7 -5
  106. package/dist/components/PlSelectionModel.js.map +1 -1
  107. package/dist/components/index.cjs +8 -0
  108. package/dist/components/index.d.ts +11 -6
  109. package/dist/components/index.js +8 -0
  110. package/dist/config/actions.cjs +138 -171
  111. package/dist/config/actions.cjs.map +1 -1
  112. package/dist/config/actions.d.ts +47 -47
  113. package/dist/config/actions.js +146 -178
  114. package/dist/config/actions.js.map +1 -1
  115. package/dist/config/actions_kinds.d.ts +114 -121
  116. package/dist/config/index.cjs +1 -0
  117. package/dist/config/index.d.ts +6 -7
  118. package/dist/config/index.js +1 -0
  119. package/dist/config/model.d.ts +131 -127
  120. package/dist/config/model_meta.d.ts +4 -1
  121. package/dist/config/type_engine.d.ts +22 -21
  122. package/dist/config/type_util.d.ts +12 -10
  123. package/dist/env_value.cjs +5 -6
  124. package/dist/env_value.cjs.map +1 -1
  125. package/dist/env_value.d.ts +4 -1
  126. package/dist/env_value.js +5 -5
  127. package/dist/env_value.js.map +1 -1
  128. package/dist/filters/converters/filterToQuery.cjs +273 -239
  129. package/dist/filters/converters/filterToQuery.cjs.map +1 -1
  130. package/dist/filters/converters/filterToQuery.d.ts +6 -2
  131. package/dist/filters/converters/filterToQuery.js +272 -237
  132. package/dist/filters/converters/filterToQuery.js.map +1 -1
  133. package/dist/filters/converters/filterUiToExpressionImpl.cjs +56 -85
  134. package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
  135. package/dist/filters/converters/filterUiToExpressionImpl.d.ts +8 -4
  136. package/dist/filters/converters/filterUiToExpressionImpl.js +55 -83
  137. package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
  138. package/dist/filters/converters/index.cjs +2 -0
  139. package/dist/filters/converters/index.d.ts +2 -3
  140. package/dist/filters/converters/index.js +2 -0
  141. package/dist/filters/distill.cjs +59 -50
  142. package/dist/filters/distill.cjs.map +1 -1
  143. package/dist/filters/distill.d.ts +6 -3
  144. package/dist/filters/distill.js +58 -48
  145. package/dist/filters/distill.js.map +1 -1
  146. package/dist/filters/index.cjs +4 -0
  147. package/dist/filters/index.d.ts +5 -4
  148. package/dist/filters/index.js +4 -0
  149. package/dist/filters/traverse.cjs +31 -40
  150. package/dist/filters/traverse.cjs.map +1 -1
  151. package/dist/filters/traverse.js +31 -39
  152. package/dist/filters/traverse.js.map +1 -1
  153. package/dist/filters/types.d.ts +10 -7
  154. package/dist/index.cjs +193 -187
  155. package/dist/index.d.ts +61 -28
  156. package/dist/index.js +49 -41
  157. package/dist/internal.cjs +48 -62
  158. package/dist/internal.cjs.map +1 -1
  159. package/dist/internal.js +49 -60
  160. package/dist/internal.js.map +1 -1
  161. package/dist/package.cjs +12 -0
  162. package/dist/package.cjs.map +1 -0
  163. package/dist/package.js +6 -0
  164. package/dist/package.js.map +1 -0
  165. package/dist/pframe.cjs +32 -37
  166. package/dist/pframe.cjs.map +1 -1
  167. package/dist/pframe.d.ts +14 -10
  168. package/dist/pframe.js +32 -35
  169. package/dist/pframe.js.map +1 -1
  170. package/dist/pframe_utils/axes.cjs +81 -114
  171. package/dist/pframe_utils/axes.cjs.map +1 -1
  172. package/dist/pframe_utils/axes.d.ts +10 -13
  173. package/dist/pframe_utils/axes.js +80 -112
  174. package/dist/pframe_utils/axes.js.map +1 -1
  175. package/dist/pframe_utils/columns.cjs +61 -81
  176. package/dist/pframe_utils/columns.cjs.map +1 -1
  177. package/dist/pframe_utils/columns.d.ts +15 -6
  178. package/dist/pframe_utils/columns.js +60 -79
  179. package/dist/pframe_utils/columns.js.map +1 -1
  180. package/dist/pframe_utils/index.cjs +232 -253
  181. package/dist/pframe_utils/index.cjs.map +1 -1
  182. package/dist/pframe_utils/index.d.ts +39 -35
  183. package/dist/pframe_utils/index.js +231 -251
  184. package/dist/pframe_utils/index.js.map +1 -1
  185. package/dist/platforma.d.ts +48 -46
  186. package/dist/plugin_handle.cjs +6 -14
  187. package/dist/plugin_handle.cjs.map +1 -1
  188. package/dist/plugin_handle.d.ts +20 -25
  189. package/dist/plugin_handle.js +6 -13
  190. package/dist/plugin_handle.js.map +1 -1
  191. package/dist/plugin_model.cjs +364 -163
  192. package/dist/plugin_model.cjs.map +1 -1
  193. package/dist/plugin_model.d.ts +280 -129
  194. package/dist/plugin_model.js +362 -163
  195. package/dist/plugin_model.js.map +1 -1
  196. package/dist/raw_globals.cjs +10 -22
  197. package/dist/raw_globals.cjs.map +1 -1
  198. package/dist/raw_globals.d.ts +8 -5
  199. package/dist/raw_globals.js +10 -20
  200. package/dist/raw_globals.js.map +1 -1
  201. package/dist/ref_util.cjs +14 -13
  202. package/dist/ref_util.cjs.map +1 -1
  203. package/dist/ref_util.d.ts +18 -12
  204. package/dist/ref_util.js +14 -11
  205. package/dist/ref_util.js.map +1 -1
  206. package/dist/render/accessor.cjs +213 -226
  207. package/dist/render/accessor.cjs.map +1 -1
  208. package/dist/render/accessor.d.ts +115 -120
  209. package/dist/render/accessor.js +212 -224
  210. package/dist/render/accessor.js.map +1 -1
  211. package/dist/render/api.cjs +478 -580
  212. package/dist/render/api.cjs.map +1 -1
  213. package/dist/render/api.d.ts +207 -209
  214. package/dist/render/api.js +476 -578
  215. package/dist/render/api.js.map +1 -1
  216. package/dist/render/future.cjs +28 -32
  217. package/dist/render/future.cjs.map +1 -1
  218. package/dist/render/future.d.ts +15 -11
  219. package/dist/render/future.js +28 -30
  220. package/dist/render/future.js.map +1 -1
  221. package/dist/render/index.cjs +8 -0
  222. package/dist/render/index.d.ts +10 -8
  223. package/dist/render/index.js +8 -0
  224. package/dist/render/internal.cjs +33 -29
  225. package/dist/render/internal.cjs.map +1 -1
  226. package/dist/render/internal.d.ts +78 -72
  227. package/dist/render/internal.js +29 -26
  228. package/dist/render/internal.js.map +1 -1
  229. package/dist/render/traversal_ops.d.ts +42 -43
  230. package/dist/render/util/axis_filtering.cjs +63 -86
  231. package/dist/render/util/axis_filtering.cjs.map +1 -1
  232. package/dist/render/util/axis_filtering.d.ts +10 -7
  233. package/dist/render/util/axis_filtering.js +63 -85
  234. package/dist/render/util/axis_filtering.js.map +1 -1
  235. package/dist/render/util/column_collection.cjs +266 -321
  236. package/dist/render/util/column_collection.cjs.map +1 -1
  237. package/dist/render/util/column_collection.d.ts +47 -47
  238. package/dist/render/util/column_collection.js +264 -319
  239. package/dist/render/util/column_collection.js.map +1 -1
  240. package/dist/render/util/index.cjs +4 -0
  241. package/dist/render/util/index.d.ts +4 -5
  242. package/dist/render/util/index.js +4 -0
  243. package/dist/render/util/label.cjs +129 -163
  244. package/dist/render/util/label.cjs.map +1 -1
  245. package/dist/render/util/label.d.ts +45 -46
  246. package/dist/render/util/label.js +128 -161
  247. package/dist/render/util/label.js.map +1 -1
  248. package/dist/render/util/pcolumn_data.cjs +315 -375
  249. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  250. package/dist/render/util/pcolumn_data.d.ts +33 -32
  251. package/dist/render/util/pcolumn_data.js +314 -373
  252. package/dist/render/util/pcolumn_data.js.map +1 -1
  253. package/dist/render/util/pframe_upgraders.cjs +37 -42
  254. package/dist/render/util/pframe_upgraders.cjs.map +1 -1
  255. package/dist/render/util/pframe_upgraders.js +37 -41
  256. package/dist/render/util/pframe_upgraders.js.map +1 -1
  257. package/dist/render/util/split_selectors.d.ts +13 -9
  258. package/dist/version.cjs +6 -8
  259. package/dist/version.cjs.map +1 -1
  260. package/dist/version.d.ts +7 -4
  261. package/dist/version.js +5 -5
  262. package/dist/version.js.map +1 -1
  263. package/package.json +9 -3
  264. package/src/block_migrations.test.ts +184 -14
  265. package/src/block_migrations.ts +185 -30
  266. package/src/block_model.ts +111 -66
  267. package/src/block_storage.test.ts +147 -3
  268. package/src/block_storage.ts +43 -8
  269. package/src/block_storage_callbacks.ts +9 -4
  270. package/src/env_value.ts +0 -2
  271. package/src/filters/distill.ts +17 -6
  272. package/src/index.ts +12 -11
  273. package/src/internal.ts +0 -1
  274. package/src/platforma.ts +4 -4
  275. package/src/plugin_handle.ts +1 -1
  276. package/src/plugin_model.test.ts +217 -21
  277. package/src/plugin_model.ts +450 -55
  278. package/src/raw_globals.ts +0 -1
  279. package/dist/annotations/converter.d.ts.map +0 -1
  280. package/dist/annotations/index.d.ts.map +0 -1
  281. package/dist/annotations/types.d.ts.map +0 -1
  282. package/dist/bconfig/index.d.ts.map +0 -1
  283. package/dist/bconfig/lambdas.d.ts.map +0 -1
  284. package/dist/bconfig/normalization.d.ts.map +0 -1
  285. package/dist/bconfig/types.d.ts.map +0 -1
  286. package/dist/bconfig/util.d.ts.map +0 -1
  287. package/dist/bconfig/v3.d.ts.map +0 -1
  288. package/dist/block_api_v1.d.ts.map +0 -1
  289. package/dist/block_api_v2.d.ts.map +0 -1
  290. package/dist/block_api_v3.d.ts.map +0 -1
  291. package/dist/block_migrations.d.ts.map +0 -1
  292. package/dist/block_model.d.ts.map +0 -1
  293. package/dist/block_model_legacy.d.ts.map +0 -1
  294. package/dist/block_state_patch.d.ts.map +0 -1
  295. package/dist/block_state_util.d.ts.map +0 -1
  296. package/dist/block_storage.d.ts.map +0 -1
  297. package/dist/block_storage_callbacks.d.ts +0 -115
  298. package/dist/block_storage_callbacks.d.ts.map +0 -1
  299. package/dist/block_storage_facade.d.ts.map +0 -1
  300. package/dist/components/PFrameForGraphs.d.ts.map +0 -1
  301. package/dist/components/PlAnnotations/filter.d.ts.map +0 -1
  302. package/dist/components/PlAnnotations/filters_ui.d.ts.map +0 -1
  303. package/dist/components/PlAnnotations/index.d.ts.map +0 -1
  304. package/dist/components/PlAnnotations/types.d.ts +0 -3
  305. package/dist/components/PlAnnotations/types.d.ts.map +0 -1
  306. package/dist/components/PlDataTable/index.d.ts.map +0 -1
  307. package/dist/components/PlDataTable/labels.d.ts +0 -7
  308. package/dist/components/PlDataTable/labels.d.ts.map +0 -1
  309. package/dist/components/PlDataTable/state-migration.d.ts.map +0 -1
  310. package/dist/components/PlDataTable/table.d.ts.map +0 -1
  311. package/dist/components/PlDataTable/v4.d.ts.map +0 -1
  312. package/dist/components/PlDataTable/v5.d.ts.map +0 -1
  313. package/dist/components/PlMultiSequenceAlignment.d.ts.map +0 -1
  314. package/dist/components/PlSelectionModel.d.ts.map +0 -1
  315. package/dist/components/index.d.ts.map +0 -1
  316. package/dist/config/actions.d.ts.map +0 -1
  317. package/dist/config/actions_kinds.d.ts.map +0 -1
  318. package/dist/config/index.d.ts.map +0 -1
  319. package/dist/config/model.d.ts.map +0 -1
  320. package/dist/config/model_meta.d.ts.map +0 -1
  321. package/dist/config/type_engine.d.ts.map +0 -1
  322. package/dist/config/type_util.d.ts.map +0 -1
  323. package/dist/env_value.d.ts.map +0 -1
  324. package/dist/filters/converters/filterToQuery.d.ts.map +0 -1
  325. package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +0 -1
  326. package/dist/filters/converters/index.d.ts.map +0 -1
  327. package/dist/filters/distill.d.ts.map +0 -1
  328. package/dist/filters/index.d.ts.map +0 -1
  329. package/dist/filters/traverse.d.ts +0 -27
  330. package/dist/filters/traverse.d.ts.map +0 -1
  331. package/dist/filters/types.d.ts.map +0 -1
  332. package/dist/index.cjs.map +0 -1
  333. package/dist/index.d.ts.map +0 -1
  334. package/dist/index.js.map +0 -1
  335. package/dist/internal.d.ts +0 -36
  336. package/dist/internal.d.ts.map +0 -1
  337. package/dist/package.json.cjs +0 -6
  338. package/dist/package.json.cjs.map +0 -1
  339. package/dist/package.json.js +0 -4
  340. package/dist/package.json.js.map +0 -1
  341. package/dist/pframe.d.ts.map +0 -1
  342. package/dist/pframe_utils/axes.d.ts.map +0 -1
  343. package/dist/pframe_utils/columns.d.ts.map +0 -1
  344. package/dist/pframe_utils/index.d.ts.map +0 -1
  345. package/dist/pframe_utils/querySpec.d.ts +0 -2
  346. package/dist/pframe_utils/querySpec.d.ts.map +0 -1
  347. package/dist/platforma.d.ts.map +0 -1
  348. package/dist/plugin_handle.d.ts.map +0 -1
  349. package/dist/plugin_model.d.ts.map +0 -1
  350. package/dist/raw_globals.d.ts.map +0 -1
  351. package/dist/ref_util.d.ts.map +0 -1
  352. package/dist/render/accessor.d.ts.map +0 -1
  353. package/dist/render/api.d.ts.map +0 -1
  354. package/dist/render/future.d.ts.map +0 -1
  355. package/dist/render/index.d.ts.map +0 -1
  356. package/dist/render/internal.d.ts.map +0 -1
  357. package/dist/render/traversal_ops.d.ts.map +0 -1
  358. package/dist/render/util/axis_filtering.d.ts.map +0 -1
  359. package/dist/render/util/column_collection.d.ts.map +0 -1
  360. package/dist/render/util/index.d.ts.map +0 -1
  361. package/dist/render/util/label.d.ts.map +0 -1
  362. package/dist/render/util/pcolumn_data.d.ts.map +0 -1
  363. package/dist/render/util/pframe_upgraders.d.ts +0 -3
  364. package/dist/render/util/pframe_upgraders.d.ts.map +0 -1
  365. package/dist/render/util/split_selectors.d.ts.map +0 -1
  366. package/dist/version.d.ts.map +0 -1
@@ -8,21 +8,319 @@
8
8
  */
9
9
 
10
10
  import type { BlockCodeKnownFeatureFlags } from "@milaboratories/pl-model-common";
11
- import type { DataModel } from "./block_migrations";
12
- import type { PluginName } from "./block_storage";
11
+ import {
12
+ type DataModel,
13
+ DataModelBuilder,
14
+ type DataRecoverFn,
15
+ type DataVersioned,
16
+ type TransferTarget,
17
+ } from "./block_migrations";
18
+ import { type PluginName, DATA_MODEL_LEGACY_VERSION } from "./block_storage";
13
19
  import type { PluginFactoryLike } from "./plugin_handle";
14
20
  import type { PluginRenderCtx } from "./render";
15
21
 
16
22
  /** Symbol for internal builder creation method */
17
23
  const FROM_BUILDER = Symbol("fromBuilder");
18
24
 
25
+ /** Symbol for internal plugin model creation — not accessible to external consumers */
26
+ export const CREATE_PLUGIN_MODEL = Symbol("createPluginModel");
27
+
28
+ /** Sentinel for PluginInstance without transferAt — no transfer possible. */
29
+ const NO_TRANSFER_VERSION = "";
30
+
19
31
  export type PluginData = Record<string, unknown>;
20
32
  export type PluginParams = undefined | Record<string, unknown>;
21
33
  export type PluginOutputs = Record<string, unknown>;
22
34
  export type PluginConfig = undefined | Record<string, unknown>;
23
35
 
24
36
  /**
25
- * Configured plugin instance returned by PluginModelFactory.create().
37
+ * Plugin data model with typed migration chain and config-aware initialization.
38
+ *
39
+ * @typeParam Data - Current (latest) plugin data type
40
+ * @typeParam Versions - Map of version keys to their data types (accumulated by the chain)
41
+ * @typeParam Config - Config type passed to init function (undefined if none)
42
+ */
43
+ export class PluginDataModel<
44
+ Data extends PluginData,
45
+ Versions extends Record<string, unknown> = {},
46
+ Config = undefined,
47
+ > {
48
+ readonly dataModel: DataModel<Data>;
49
+ private readonly configInitFn: (config?: Config) => Data;
50
+
51
+ /** @internal Phantom field to anchor the Versions type parameter. */
52
+ declare readonly __versions?: Versions;
53
+
54
+ private constructor(dataModel: DataModel<Data>, configInitFn: (config?: Config) => Data) {
55
+ this.dataModel = dataModel;
56
+ this.configInitFn = configInitFn;
57
+ }
58
+
59
+ /** @internal */
60
+ static [FROM_BUILDER]<Data extends PluginData, Versions extends Record<string, unknown>, Config>(
61
+ dataModel: DataModel<Data>,
62
+ configInitFn: (config?: Config) => Data,
63
+ ): PluginDataModel<Data, Versions, Config> {
64
+ return new PluginDataModel<Data, Versions, Config>(dataModel, configInitFn);
65
+ }
66
+
67
+ /** Create fresh data with optional config. */
68
+ getDefaultData(config?: Config): DataVersioned<Data> {
69
+ const data = this.configInitFn(config);
70
+ return { version: this.dataModel.version, data };
71
+ }
72
+ }
73
+
74
+ /** Internal state for plugin data model chain. */
75
+ type PluginChainState = {
76
+ initialVersion: string;
77
+ migrations: Array<{ toVersion: string; fn: (data: unknown) => unknown }>;
78
+ recoverFn?: (version: string, data: unknown) => unknown;
79
+ recoverAtIndex?: number;
80
+ };
81
+
82
+ /**
83
+ * Builder for creating PluginDataModel with type-safe migrations.
84
+ * Mirrors DataModelBuilder — same .from(), .migrate(), .recover(), .init() chain.
85
+ *
86
+ * @example
87
+ * const pluginData = new PluginDataModelBuilder()
88
+ * .from<TableData>("v1")
89
+ * .migrate<FilteredTableData>("v2", (v1) => ({ ...v1, filters: [] }))
90
+ * .init<TableConfig>((config?) => ({
91
+ * state: createDefaultState(config?.ops),
92
+ * filters: [],
93
+ * }));
94
+ */
95
+ export class PluginDataModelBuilder {
96
+ from<Data extends PluginData, const V extends string>(
97
+ version: V,
98
+ ): PluginDataModelInitialChain<Data, Record<V, Data>> {
99
+ return PluginDataModelInitialChain[FROM_BUILDER]<Data, Record<V, Data>>({
100
+ initialVersion: version,
101
+ migrations: [],
102
+ });
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Chain returned by .migrate(). Supports .migrate(), .recover(), .init().
108
+ * No .upgradeLegacy() — that is only available on the initial chain.
109
+ */
110
+ export class PluginDataModelChain<
111
+ Data extends PluginData,
112
+ Versions extends Record<string, unknown>,
113
+ > {
114
+ protected constructor(protected readonly state: PluginChainState) {}
115
+
116
+ /** @internal */
117
+ static [FROM_BUILDER]<Data extends PluginData, Versions extends Record<string, unknown>>(
118
+ state: PluginChainState,
119
+ ): PluginDataModelChain<Data, Versions> {
120
+ return new PluginDataModelChain(state);
121
+ }
122
+
123
+ /**
124
+ * Add a migration step transforming data from the current version to the next.
125
+ */
126
+ migrate<Next extends PluginData, const NextV extends string>(
127
+ version: NextV,
128
+ fn: (current: Data) => Next,
129
+ ): PluginDataModelChain<Next, Versions & Record<NextV, Next>> {
130
+ return PluginDataModelChain[FROM_BUILDER]<Next, Versions & Record<NextV, Next>>({
131
+ ...this.state,
132
+ migrations: [
133
+ ...this.state.migrations,
134
+ { toVersion: version, fn: fn as (data: unknown) => unknown },
135
+ ],
136
+ });
137
+ }
138
+
139
+ /**
140
+ * Set a recovery handler for unknown or legacy versions.
141
+ * Can only be called once — the returned chain has no recover() method.
142
+ */
143
+ recover(fn: DataRecoverFn<Data>): PluginDataModelWithRecover<Data, Versions> {
144
+ return PluginDataModelWithRecover[FROM_BUILDER]<Data, Versions>({
145
+ ...this.state,
146
+ recoverFn: fn as (version: string, data: unknown) => unknown,
147
+ recoverAtIndex: this.state.migrations.length,
148
+ });
149
+ }
150
+
151
+ /** Finalize the PluginDataModel. */
152
+ init<Config = undefined>(fn: (config?: Config) => Data): PluginDataModel<Data, Versions, Config> {
153
+ return buildPluginDataModel(this.state, fn);
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Initial chain returned by new PluginDataModelBuilder().from().
159
+ * Extends PluginDataModelChain with .upgradeLegacy() — available only before
160
+ * any .migrate() calls, matching the block's DataModelInitialChain pattern.
161
+ */
162
+ export class PluginDataModelInitialChain<
163
+ Data extends PluginData,
164
+ Versions extends Record<string, unknown>,
165
+ > extends PluginDataModelChain<Data, Versions> {
166
+ /** @internal */
167
+ static override [FROM_BUILDER]<Data extends PluginData, Versions extends Record<string, unknown>>(
168
+ state: PluginChainState,
169
+ ): PluginDataModelInitialChain<Data, Versions> {
170
+ return new PluginDataModelInitialChain(state);
171
+ }
172
+
173
+ /**
174
+ * Handle data from a previous plugin type occupying this slot.
175
+ * Prepends a migration from DATA_MODEL_LEGACY_VERSION to the initial version.
176
+ * When a plugin type changes, the old data arrives with DATA_MODEL_LEGACY_VERSION —
177
+ * this function transforms it into the initial version, then the normal chain runs.
178
+ *
179
+ * Must be called right after .from() — not available after .migrate().
180
+ * Mutually exclusive with recover().
181
+ *
182
+ * @param fn - Transform from old plugin's raw data to this plugin's initial data type
183
+ */
184
+ upgradeLegacy(fn: (data: unknown) => Data): PluginDataModelWithRecover<Data, Versions> {
185
+ return PluginDataModelWithRecover[FROM_BUILDER]<Data, Versions>({
186
+ ...this.state,
187
+ migrations: [
188
+ { toVersion: this.state.initialVersion, fn: fn as (data: unknown) => unknown },
189
+ ...this.state.migrations,
190
+ ],
191
+ initialVersion: DATA_MODEL_LEGACY_VERSION,
192
+ });
193
+ }
194
+ }
195
+
196
+ /**
197
+ * Chain after .recover() — supports .migrate(), .init(). No second recover().
198
+ */
199
+ export class PluginDataModelWithRecover<
200
+ Data extends PluginData,
201
+ Versions extends Record<string, unknown>,
202
+ > {
203
+ private constructor(private readonly state: PluginChainState) {}
204
+
205
+ /** @internal */
206
+ static [FROM_BUILDER]<Data extends PluginData, Versions extends Record<string, unknown>>(
207
+ state: PluginChainState,
208
+ ): PluginDataModelWithRecover<Data, Versions> {
209
+ return new PluginDataModelWithRecover(state);
210
+ }
211
+
212
+ migrate<Next extends PluginData, const NextV extends string>(
213
+ version: NextV,
214
+ fn: (current: Data) => Next,
215
+ ): PluginDataModelWithRecover<Next, Versions & Record<NextV, Next>> {
216
+ return PluginDataModelWithRecover[FROM_BUILDER]<Next, Versions & Record<NextV, Next>>({
217
+ ...this.state,
218
+ migrations: [
219
+ ...this.state.migrations,
220
+ { toVersion: version, fn: fn as (data: unknown) => unknown },
221
+ ],
222
+ });
223
+ }
224
+
225
+ init<Config = undefined>(fn: (config?: Config) => Data): PluginDataModel<Data, Versions, Config> {
226
+ return buildPluginDataModel(this.state, fn);
227
+ }
228
+ }
229
+
230
+ /**
231
+ * Builds a PluginDataModel by replaying the stored chain state through DataModelBuilder.
232
+ * @internal
233
+ */
234
+ function buildPluginDataModel<
235
+ Data extends PluginData,
236
+ Versions extends Record<string, unknown>,
237
+ Config,
238
+ >(
239
+ state: PluginChainState,
240
+ configInitFn: (config?: Config) => Data,
241
+ ): PluginDataModel<Data, Versions, Config> {
242
+ // Build inner DataModel by replaying migrations through DataModelBuilder chain.
243
+ // Uses `any` internally — type safety is maintained by the public chain types.
244
+ let chain: any = new DataModelBuilder().from(state.initialVersion);
245
+
246
+ for (let i = 0; i < state.migrations.length; i++) {
247
+ if (state.recoverFn !== undefined && state.recoverAtIndex === i) {
248
+ chain = chain.recover(state.recoverFn);
249
+ }
250
+ chain = chain.migrate(state.migrations[i].toVersion, state.migrations[i].fn);
251
+ }
252
+
253
+ // If recover was placed at or after the last migration
254
+ if (state.recoverFn !== undefined && state.recoverAtIndex === state.migrations.length) {
255
+ chain = chain.recover(state.recoverFn);
256
+ }
257
+
258
+ const dataModel: DataModel<Data> = chain.init(() => configInitFn());
259
+
260
+ return PluginDataModel[FROM_BUILDER]<Data, Versions, Config>(dataModel, configInitFn);
261
+ }
262
+
263
+ /**
264
+ * A named plugin instance created by `factory.create({ pluginId, ... })`.
265
+ * Passed to both `.transfer()` (on migration chain) and `.plugin()` (on BlockModelV3).
266
+ * Implements TransferTarget so the migration chain can accept it.
267
+ *
268
+ * @typeParam Id - Plugin instance ID literal type
269
+ * @typeParam Data - Plugin data type
270
+ * @typeParam Params - Plugin params type
271
+ * @typeParam Outputs - Plugin outputs type
272
+ * @typeParam TransferData - Type of data entering the plugin via transfer (never if no transfer)
273
+ */
274
+ export class PluginInstance<
275
+ Id extends string = string,
276
+ Data extends PluginData = PluginData,
277
+ Params extends PluginParams = undefined,
278
+ Outputs extends PluginOutputs = PluginOutputs,
279
+ TransferData = never,
280
+ > implements TransferTarget<Id, TransferData> {
281
+ readonly id: Id;
282
+ readonly transferVersion: string;
283
+ /** @internal */
284
+ readonly __transferBrand?: TransferData;
285
+ private readonly factory: PluginModelFactory<Data, Params, Outputs, any, any>;
286
+ private readonly config: any;
287
+
288
+ private constructor(
289
+ id: Id,
290
+ factory: PluginModelFactory<Data, Params, Outputs, any, any>,
291
+ transferVersion: string,
292
+ config?: any,
293
+ ) {
294
+ this.id = id;
295
+ this.factory = factory;
296
+ this.transferVersion = transferVersion;
297
+ this.config = config;
298
+ }
299
+
300
+ /** @internal */
301
+ static [FROM_BUILDER]<
302
+ Id extends string,
303
+ Data extends PluginData,
304
+ Params extends PluginParams,
305
+ Outputs extends PluginOutputs,
306
+ TransferData,
307
+ >(
308
+ id: Id,
309
+ factory: PluginModelFactory<Data, Params, Outputs, any, any>,
310
+ transferVersion: string,
311
+ config?: any,
312
+ ): PluginInstance<Id, Data, Params, Outputs, TransferData> {
313
+ return new PluginInstance(id, factory, transferVersion, config);
314
+ }
315
+
316
+ /** @internal Create a PluginModel from this instance. Used by BlockModelV3.plugin(). */
317
+ [CREATE_PLUGIN_MODEL](): PluginModel<Data, Params, Outputs> {
318
+ return this.factory[CREATE_PLUGIN_MODEL](this.config);
319
+ }
320
+ }
321
+
322
+ /**
323
+ * Configured plugin instance returned by PluginModelFactory[CREATE_PLUGIN_MODEL]().
26
324
  * Contains the plugin's name, data model, and output definitions.
27
325
  */
28
326
  export class PluginModel<
@@ -40,6 +338,8 @@ export class PluginModel<
40
338
  };
41
339
  /** Feature flags declared by this plugin */
42
340
  readonly featureFlags?: BlockCodeKnownFeatureFlags;
341
+ /** Create fresh default data. Config (if any) is captured at creation time. */
342
+ readonly getDefaultData: () => DataVersioned<Data>;
43
343
 
44
344
  private constructor(options: {
45
345
  name: PluginName;
@@ -48,11 +348,13 @@ export class PluginModel<
48
348
  [K in keyof Outputs]: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => Outputs[K];
49
349
  };
50
350
  featureFlags?: BlockCodeKnownFeatureFlags;
351
+ getDefaultData: () => DataVersioned<Data>;
51
352
  }) {
52
353
  this.name = options.name;
53
354
  this.dataModel = options.dataModel;
54
355
  this.outputs = options.outputs;
55
356
  this.featureFlags = options.featureFlags;
357
+ this.getDefaultData = options.getDefaultData;
56
358
  }
57
359
 
58
360
  /**
@@ -71,37 +373,74 @@ export class PluginModel<
71
373
  [K in keyof Outputs]: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => Outputs[K];
72
374
  };
73
375
  featureFlags?: BlockCodeKnownFeatureFlags;
376
+ getDefaultData: () => DataVersioned<Data>;
74
377
  }): PluginModel<Data, Params, Outputs> {
75
378
  return new PluginModel<Data, Params, Outputs>(options);
76
379
  }
77
380
 
78
381
  /**
79
- * Creates a new PluginModelBuilder for building plugin definitions.
80
- *
81
- * @param options.name - Globally unique plugin name
82
- * @param options.data - Factory function that creates the data model from config
83
- * @returns PluginModelBuilder for chaining output definitions
382
+ * Creates a new PluginModelBuilder with a PluginDataModel (supports transfer / config).
84
383
  *
85
384
  * @example
86
- * const dataModelChain = new DataModelBuilder().from<MyData>("v1");
385
+ * const pluginData = new PluginDataModelBuilder().from<TableData>("v1")
386
+ * .migrate<FilteredTableData>("v2", (v1) => ({ ...v1, filters: [] }))
387
+ * .init<TableConfig>((config?) => ({
388
+ * state: createDefaultState(config?.ops),
389
+ * filters: [],
390
+ * }));
391
+ *
392
+ * const myPlugin = PluginModel.define({
393
+ * name: 'myPlugin' as PluginName,
394
+ * data: pluginData,
395
+ * }).build();
396
+ */
397
+ static define<
398
+ Data extends PluginData,
399
+ Params extends PluginParams = undefined,
400
+ Versions extends Record<string, unknown> = {},
401
+ Config extends PluginConfig = undefined,
402
+ >(options: {
403
+ name: PluginName;
404
+ data: PluginDataModel<Data, Versions, Config>;
405
+ featureFlags?: BlockCodeKnownFeatureFlags;
406
+ }): PluginModelBuilder<Data, Params, {}, Config, Versions>;
407
+ /**
408
+ * Creates a new PluginModelBuilder with a data model factory function (backward compatible).
87
409
  *
410
+ * @example
88
411
  * const myPlugin = PluginModel.define({
89
412
  * name: 'myPlugin' as PluginName,
90
413
  * data: (cfg) => dataModelChain.init(() => ({ value: cfg.defaultValue })),
91
- * })
92
- * .output('computed', (ctx) => ctx.data.value * ctx.params.multiplier)
93
- * .build();
414
+ * }).build();
94
415
  */
95
416
  static define<
96
417
  Data extends PluginData,
97
- Params extends PluginParams,
98
- Config extends PluginConfig,
418
+ Params extends PluginParams = undefined,
419
+ Config extends PluginConfig = undefined,
99
420
  >(options: {
100
421
  name: PluginName;
101
422
  data: (config?: Config) => DataModel<Data>;
102
423
  featureFlags?: BlockCodeKnownFeatureFlags;
103
- }): PluginModelBuilder<Data, Params, {}, Config> {
104
- return PluginModelBuilder[FROM_BUILDER](options);
424
+ }): PluginModelBuilder<Data, Params, {}, Config, {}>;
425
+ static define(options: {
426
+ name: PluginName;
427
+ data: PluginDataModel<any, any, any> | ((config?: any) => DataModel<any>);
428
+ featureFlags?: BlockCodeKnownFeatureFlags;
429
+ }): PluginModelBuilder {
430
+ if (options.data instanceof PluginDataModel) {
431
+ const pdm = options.data;
432
+ return PluginModelBuilder[FROM_BUILDER]({
433
+ name: options.name,
434
+ dataFn: () => pdm.dataModel,
435
+ getDefaultDataFn: (config: any) => pdm.getDefaultData(config),
436
+ featureFlags: options.featureFlags,
437
+ });
438
+ }
439
+ return PluginModelBuilder[FROM_BUILDER]({
440
+ name: options.name,
441
+ dataFn: options.data,
442
+ featureFlags: options.featureFlags,
443
+ });
105
444
  }
106
445
  }
107
446
 
@@ -111,13 +450,26 @@ export interface PluginFactory<
111
450
  Params extends PluginParams = undefined,
112
451
  Outputs extends PluginOutputs = PluginOutputs,
113
452
  Config extends PluginConfig = undefined,
114
- > extends PluginFactoryLike {
115
- create(config?: Config): PluginModel<Data, Params, Outputs>;
453
+ Versions extends Record<string, unknown> = {},
454
+ > extends PluginFactoryLike<Data, Params, Outputs> {
455
+ /** Create a named plugin instance, optionally with transfer at a specific version. */
456
+ create<const Id extends string, const V extends string & keyof Versions = never>(options: {
457
+ pluginId: Id;
458
+ transferAt?: V;
459
+ config?: Config;
460
+ }): PluginInstance<Id, Data, Params, Outputs, Versions[V]>;
461
+
116
462
  /**
117
463
  * @internal Phantom field for structural type extraction.
118
464
  * Enables InferFactoryData/InferFactoryOutputs to work via PluginFactoryLike.
119
465
  */
120
- readonly __types?: { data: Data; params: Params; outputs: Outputs; config: Config };
466
+ readonly __types?: {
467
+ data: Data;
468
+ params: Params;
469
+ outputs: Outputs;
470
+ config: Config;
471
+ versions: Versions;
472
+ };
121
473
  }
122
474
 
123
475
  class PluginModelFactory<
@@ -125,35 +477,77 @@ class PluginModelFactory<
125
477
  Params extends PluginParams = undefined,
126
478
  Outputs extends PluginOutputs = PluginOutputs,
127
479
  Config extends PluginConfig = undefined,
128
- > implements PluginFactory<Data, Params, Outputs, Config> {
480
+ Versions extends Record<string, unknown> = {},
481
+ > implements PluginFactory<Data, Params, Outputs, Config, Versions> {
129
482
  private readonly name: PluginName;
130
- private readonly data: (config?: Config) => DataModel<Data>;
131
- private readonly outputs: {
483
+ private readonly dataFn: (config?: Config) => DataModel<Data>;
484
+ private readonly getDefaultDataFn?: (config?: Config) => DataVersioned<Data>;
485
+ readonly outputs: {
132
486
  [K in keyof Outputs]: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => Outputs[K];
133
487
  };
134
488
  private readonly featureFlags?: BlockCodeKnownFeatureFlags;
135
489
 
136
- constructor(options: {
490
+ private constructor(options: {
137
491
  name: PluginName;
138
- data: (config?: Config) => DataModel<Data>;
492
+ dataFn: (config?: Config) => DataModel<Data>;
493
+ getDefaultDataFn?: (config?: Config) => DataVersioned<Data>;
139
494
  outputs: {
140
495
  [K in keyof Outputs]: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => Outputs[K];
141
496
  };
142
497
  featureFlags?: BlockCodeKnownFeatureFlags;
143
498
  }) {
144
499
  this.name = options.name;
145
- this.data = options.data;
500
+ this.dataFn = options.dataFn;
501
+ this.getDefaultDataFn = options.getDefaultDataFn;
146
502
  this.outputs = options.outputs;
147
503
  this.featureFlags = options.featureFlags;
148
504
  }
149
505
 
150
- /** Create a configured PluginModel instance */
151
- create(config?: Config): PluginModel<Data, Params, Outputs> {
506
+ /** @internal */
507
+ static [FROM_BUILDER]<
508
+ Data extends PluginData,
509
+ Params extends PluginParams,
510
+ Outputs extends PluginOutputs,
511
+ Config extends PluginConfig,
512
+ Versions extends Record<string, unknown>,
513
+ >(options: {
514
+ name: PluginName;
515
+ dataFn: (config?: Config) => DataModel<Data>;
516
+ getDefaultDataFn?: (config?: Config) => DataVersioned<Data>;
517
+ outputs: {
518
+ [K in keyof Outputs]: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => Outputs[K];
519
+ };
520
+ featureFlags?: BlockCodeKnownFeatureFlags;
521
+ }): PluginModelFactory<Data, Params, Outputs, Config, Versions> {
522
+ return new PluginModelFactory(options);
523
+ }
524
+
525
+ create<const Id extends string, const V extends string & keyof Versions = never>(options: {
526
+ pluginId: Id;
527
+ transferAt?: V;
528
+ config?: Config;
529
+ }): PluginInstance<Id, Data, Params, Outputs, Versions[V]> {
530
+ const transferVersion = options.transferAt ?? NO_TRANSFER_VERSION;
531
+ return PluginInstance[FROM_BUILDER]<Id, Data, Params, Outputs, Versions[V]>(
532
+ options.pluginId as Id,
533
+ this as any,
534
+ transferVersion,
535
+ options.config,
536
+ );
537
+ }
538
+
539
+ /** @internal Create a PluginModel from config. Config is captured in getDefaultData closure. */
540
+ [CREATE_PLUGIN_MODEL](config?: Config): PluginModel<Data, Params, Outputs> {
541
+ const dataModel = this.dataFn(config);
542
+ const getDefaultDataFn = this.getDefaultDataFn;
152
543
  return PluginModel[FROM_BUILDER]<Data, Params, Outputs>({
153
544
  name: this.name,
154
- dataModel: this.data(config),
545
+ dataModel,
155
546
  outputs: this.outputs,
156
547
  featureFlags: this.featureFlags,
548
+ getDefaultData: getDefaultDataFn
549
+ ? () => getDefaultDataFn(config)
550
+ : () => dataModel.getDefaultData(),
157
551
  });
158
552
  }
159
553
  }
@@ -167,15 +561,12 @@ class PluginModelFactory<
167
561
  * @typeParam Params - Params derived from block's RenderCtx (optional)
168
562
  * @typeParam Config - Static configuration passed to plugin factory (optional)
169
563
  * @typeParam Outputs - Accumulated output types
564
+ * @typeParam Versions - Version map from PluginDataModel (empty for function-based data)
170
565
  *
171
566
  * @example
172
- * const dataModelChain = new DataModelBuilder().from<TableData>("v1");
173
- *
174
- * const dataTable = PluginModel.define<TableData, TableParams, TableConfig>({
567
+ * const dataTable = PluginModel.define({
175
568
  * name: 'dataTable' as PluginName,
176
- * data: (cfg) => {
177
- * return dataModelChain.init(() => ({ state: createInitialState(cfg.ops) }));
178
- * },
569
+ * data: pluginDataModel,
179
570
  * })
180
571
  * .output('model', (ctx) => createTableModel(ctx))
181
572
  * .build();
@@ -185,9 +576,11 @@ class PluginModelBuilder<
185
576
  Params extends PluginParams = undefined,
186
577
  Outputs extends PluginOutputs = PluginOutputs,
187
578
  Config extends PluginConfig = undefined,
579
+ Versions extends Record<string, unknown> = {},
188
580
  > {
189
581
  private readonly name: PluginName;
190
- private readonly data: (config?: Config) => DataModel<Data>;
582
+ private readonly dataFn: (config?: Config) => DataModel<Data>;
583
+ private readonly getDefaultDataFn?: (config?: Config) => DataVersioned<Data>;
191
584
  private readonly outputs: {
192
585
  [K in keyof Outputs]: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => Outputs[K];
193
586
  };
@@ -195,14 +588,16 @@ class PluginModelBuilder<
195
588
 
196
589
  private constructor(options: {
197
590
  name: PluginName;
198
- data: (config?: Config) => DataModel<Data>;
591
+ dataFn: (config?: Config) => DataModel<Data>;
592
+ getDefaultDataFn?: (config?: Config) => DataVersioned<Data>;
199
593
  outputs?: {
200
594
  [K in keyof Outputs]: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => Outputs[K];
201
595
  };
202
596
  featureFlags?: BlockCodeKnownFeatureFlags;
203
597
  }) {
204
598
  this.name = options.name;
205
- this.data = options.data;
599
+ this.dataFn = options.dataFn;
600
+ this.getDefaultDataFn = options.getDefaultDataFn;
206
601
  this.outputs =
207
602
  options.outputs ??
208
603
  ({} as {
@@ -211,24 +606,22 @@ class PluginModelBuilder<
211
606
  this.featureFlags = options.featureFlags;
212
607
  }
213
608
 
214
- /**
215
- * Internal method for creating PluginModelBuilder.
216
- * Uses Symbol key to prevent external access.
217
- * @internal
218
- */
609
+ /** @internal */
219
610
  static [FROM_BUILDER]<
220
611
  Data extends PluginData,
221
612
  Params extends PluginParams,
222
613
  Outputs extends PluginOutputs,
223
614
  Config extends PluginConfig,
615
+ Versions extends Record<string, unknown> = {},
224
616
  >(options: {
225
617
  name: PluginName;
226
- data: (config?: Config) => DataModel<Data>;
618
+ dataFn: (config?: Config) => DataModel<Data>;
619
+ getDefaultDataFn?: (config?: Config) => DataVersioned<Data>;
227
620
  outputs?: {
228
621
  [K in keyof Outputs]: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => Outputs[K];
229
622
  };
230
623
  featureFlags?: BlockCodeKnownFeatureFlags;
231
- }): PluginModelBuilder<Data, Params, Outputs, Config> {
624
+ }): PluginModelBuilder<Data, Params, Outputs, Config, Versions> {
232
625
  return new PluginModelBuilder(options);
233
626
  }
234
627
 
@@ -246,10 +639,11 @@ class PluginModelBuilder<
246
639
  output<const Key extends string, T>(
247
640
  key: Key,
248
641
  fn: (ctx: PluginRenderCtx<PluginFactoryLike<Data, Params>>) => T,
249
- ): PluginModelBuilder<Data, Params, Outputs & { [K in Key]: T }, Config> {
250
- return new PluginModelBuilder<Data, Params, Outputs & { [K in Key]: T }, Config>({
642
+ ): PluginModelBuilder<Data, Params, Outputs & { [K in Key]: T }, Config, Versions> {
643
+ return new PluginModelBuilder<Data, Params, Outputs & { [K in Key]: T }, Config, Versions>({
251
644
  name: this.name,
252
- data: this.data,
645
+ dataFn: this.dataFn,
646
+ getDefaultDataFn: this.getDefaultDataFn,
253
647
  featureFlags: this.featureFlags,
254
648
  outputs: {
255
649
  ...this.outputs,
@@ -263,22 +657,23 @@ class PluginModelBuilder<
263
657
  }
264
658
 
265
659
  /**
266
- * Finalizes the plugin definition and returns a ConfigurablePluginModel.
660
+ * Finalizes the plugin definition and returns a PluginFactory.
267
661
  *
268
- * @returns Callable plugin factory that accepts config and returns PluginModel
662
+ * @returns Plugin factory that creates named plugin instances via .create()
269
663
  *
270
664
  * @example
271
- * const myPlugin = new PluginModelBuilder('myPlugin', () => dataModel)
665
+ * const myPlugin = PluginModel.define({ ... })
272
666
  * .output('value', (ctx) => ctx.data.value)
273
667
  * .build();
274
668
  *
275
- * // Later, call create() with config to get a configured instance:
276
- * const configured = myPlugin.create({ defaultValue: 'test' });
669
+ * // Create a named instance:
670
+ * const table = myPlugin.create({ pluginId: 'mainTable', config: { ... } });
277
671
  */
278
- build(): PluginFactory<Data, Params, Outputs, Config> {
279
- return new PluginModelFactory<Data, Params, Outputs, Config>({
672
+ build(): PluginFactory<Data, Params, Outputs, Config, Versions> {
673
+ return PluginModelFactory[FROM_BUILDER]<Data, Params, Outputs, Config, Versions>({
280
674
  name: this.name,
281
- data: this.data,
675
+ dataFn: this.dataFn,
676
+ getDefaultDataFn: this.getDefaultDataFn,
282
677
  outputs: this.outputs,
283
678
  featureFlags: this.featureFlags,
284
679
  });
@@ -1,5 +1,4 @@
1
1
  import type { OutputWithStatus } from "@milaboratories/pl-model-common";
2
- import {} from "./global";
3
2
  import { getPlatformaInstance } from "./internal";
4
3
  import type { Platforma, PlatformaApiVersion } from "./platforma";
5
4
  import { PlatformaSDKVersion } from "./version";
@@ -1 +0,0 @@
1
- {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/annotations/converter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5D,wBAAgB,mCAAmC,CACjD,aAAa,EAAE,YAAY,EAAE,GAC5B,cAAc,EAAE,CAqBlB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/annotations/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}