@platforma-sdk/ui-vue 1.58.8 → 1.58.10

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 (489) hide show
  1. package/.turbo/turbo-build.log +195 -181
  2. package/.turbo/turbo-formatter$colon$check.log +2 -2
  3. package/.turbo/turbo-linter$colon$check.log +2 -2
  4. package/.turbo/turbo-types$colon$check.log +1 -1
  5. package/CHANGELOG.md +14 -0
  6. package/dist/AgGridVue/createAgGridColDef.js +73 -43
  7. package/dist/AgGridVue/createAgGridColDef.js.map +1 -1
  8. package/dist/AgGridVue/selection.js +55 -47
  9. package/dist/AgGridVue/selection.js.map +1 -1
  10. package/dist/AgGridVue/useAgGridOptions.js +212 -229
  11. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  12. package/dist/_virtual/_plugin-vue_export-helper.js +5 -9
  13. package/dist/_virtual/_rolldown/runtime.js +15 -0
  14. package/dist/aggrid.js +48 -46
  15. package/dist/aggrid.js.map +1 -1
  16. package/dist/assets/block.css +1 -1
  17. package/dist/assets/ui.css +1 -0
  18. package/dist/components/BlockLayout.js +7 -0
  19. package/dist/components/BlockLayout.js.map +1 -0
  20. package/dist/components/BlockLayout.style.js +4 -0
  21. package/dist/components/BlockLayout.style.js.map +1 -0
  22. package/dist/components/BlockLayout.vue.css +1 -0
  23. package/dist/components/BlockLayout.vue2.js +42 -54
  24. package/dist/components/BlockLayout.vue2.js.map +1 -1
  25. package/dist/components/BlockLoader.js +5 -0
  26. package/dist/components/BlockLoader.js.map +1 -0
  27. package/dist/components/BlockLoader.vue2.js +22 -5
  28. package/dist/components/BlockLoader.vue2.js.map +1 -1
  29. package/dist/components/LoaderPage.js +10 -0
  30. package/dist/components/LoaderPage.js.map +1 -0
  31. package/dist/components/NotFound.js +5 -0
  32. package/dist/components/NotFound.js.map +1 -0
  33. package/dist/components/NotFound.vue2.js +18 -5
  34. package/dist/components/NotFound.vue2.js.map +1 -1
  35. package/dist/components/PlAdvancedFilter/FilterEditor.js +7 -0
  36. package/dist/components/PlAdvancedFilter/FilterEditor.js.map +1 -0
  37. package/dist/components/PlAdvancedFilter/FilterEditor.style.js +18 -0
  38. package/dist/components/PlAdvancedFilter/FilterEditor.style.js.map +1 -0
  39. package/dist/components/PlAdvancedFilter/FilterEditor.vue.css +1 -0
  40. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +291 -322
  41. package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
  42. package/dist/components/PlAdvancedFilter/OperandButton.js +7 -0
  43. package/dist/components/PlAdvancedFilter/OperandButton.js.map +1 -0
  44. package/dist/components/PlAdvancedFilter/OperandButton.style.js +8 -0
  45. package/dist/components/PlAdvancedFilter/OperandButton.style.js.map +1 -0
  46. package/dist/components/PlAdvancedFilter/OperandButton.vue.css +1 -0
  47. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js +19 -24
  48. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
  49. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js +7 -0
  50. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js.map +1 -0
  51. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js +12 -0
  52. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js.map +1 -0
  53. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.css +1 -0
  54. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts +1 -3
  55. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts.map +1 -1
  56. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +239 -238
  57. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
  58. package/dist/components/PlAdvancedFilter/constants.js +115 -58
  59. package/dist/components/PlAdvancedFilter/constants.js.map +1 -1
  60. package/dist/components/PlAdvancedFilter/index.js +6 -6
  61. package/dist/components/PlAdvancedFilter/index.js.map +1 -1
  62. package/dist/components/PlAdvancedFilter/utils.js +49 -64
  63. package/dist/components/PlAdvancedFilter/utils.js.map +1 -1
  64. package/dist/components/PlAgCellFile/PlAgCellFile.js +5 -0
  65. package/dist/components/PlAgCellFile/PlAgCellFile.js.map +1 -0
  66. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js +36 -5
  67. package/dist/components/PlAgCellFile/PlAgCellFile.vue2.js.map +1 -1
  68. package/dist/components/PlAgCellProgress/PlAgCellProgress.js +5 -0
  69. package/dist/components/PlAgCellProgress/PlAgCellProgress.js.map +1 -0
  70. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js +13 -5
  71. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js.map +1 -1
  72. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.js +6 -0
  73. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.js.map +1 -0
  74. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js +12 -0
  75. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue2.js.map +1 -0
  76. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.js +6 -0
  77. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.js.map +1 -0
  78. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.style.css +1 -0
  79. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js +31 -0
  80. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue2.js.map +1 -0
  81. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.js +6 -0
  82. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.js.map +1 -0
  83. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.style.css +1 -0
  84. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js +19 -0
  85. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue2.js.map +1 -0
  86. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.js +5 -0
  87. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.js.map +1 -0
  88. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js +68 -5
  89. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js.map +1 -1
  90. package/dist/components/PlAgColumnHeader/pl-ag-column-header.css +1 -1
  91. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.js +5 -0
  92. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.js.map +1 -0
  93. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js +26 -5
  94. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js.map +1 -1
  95. package/dist/components/PlAgCsvExporter/export-csv.js +36 -43
  96. package/dist/components/PlAgCsvExporter/export-csv.js.map +1 -1
  97. package/dist/components/PlAgDataTable/PlAgDataTableSheets.js +7 -0
  98. package/dist/components/PlAgDataTable/PlAgDataTableSheets.js.map +1 -0
  99. package/dist/components/PlAgDataTable/PlAgDataTableSheets.style.js +4 -0
  100. package/dist/components/PlAgDataTable/PlAgDataTableSheets.style.js.map +1 -0
  101. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue.css +1 -0
  102. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +68 -72
  103. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
  104. package/dist/components/PlAgDataTable/PlAgDataTableV2.js +7 -0
  105. package/dist/components/PlAgDataTable/PlAgDataTableV2.js.map +1 -0
  106. package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js +7 -0
  107. package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js.map +1 -0
  108. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.css +1 -0
  109. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
  110. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +325 -336
  111. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  112. package/dist/components/PlAgDataTable/PlAgOverlayLoading.js +5 -0
  113. package/dist/components/PlAgDataTable/PlAgOverlayLoading.js.map +1 -0
  114. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js +26 -5
  115. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js.map +1 -1
  116. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.js +6 -0
  117. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.js.map +1 -0
  118. package/dist/components/PlAgDataTable/{PlAgOverlayNoRows.css → PlAgOverlayNoRows.style.css} +1 -1
  119. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js +14 -0
  120. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue2.js.map +1 -0
  121. package/dist/components/PlAgDataTable/PlAgRowCount.js +5 -0
  122. package/dist/components/PlAgDataTable/PlAgRowCount.js.map +1 -0
  123. package/dist/components/PlAgDataTable/PlAgRowCount.vue2.js +23 -5
  124. package/dist/components/PlAgDataTable/PlAgRowCount.vue2.js.map +1 -1
  125. package/dist/components/PlAgDataTable/ag-override.js +4 -0
  126. package/dist/components/PlAgDataTable/ag-override.js.map +1 -0
  127. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js +25 -30
  128. package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js.map +1 -1
  129. package/dist/components/PlAgDataTable/compositions/useGrid.js +102 -112
  130. package/dist/components/PlAgDataTable/compositions/useGrid.js.map +1 -1
  131. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.css +1 -1
  132. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.js +9 -0
  133. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.js.map +1 -0
  134. package/dist/components/PlAgDataTable/sources/common.js +6 -8
  135. package/dist/components/PlAgDataTable/sources/common.js.map +1 -1
  136. package/dist/components/PlAgDataTable/sources/focus-row.js +36 -51
  137. package/dist/components/PlAgDataTable/sources/focus-row.js.map +1 -1
  138. package/dist/components/PlAgDataTable/sources/menu-items.js +10 -6
  139. package/dist/components/PlAgDataTable/sources/menu-items.js.map +1 -1
  140. package/dist/components/PlAgDataTable/sources/row-number.js +82 -94
  141. package/dist/components/PlAgDataTable/sources/row-number.js.map +1 -1
  142. package/dist/components/PlAgDataTable/sources/table-source-v2.js +178 -199
  143. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  144. package/dist/components/PlAgDataTable/sources/table-state-v2.js +155 -132
  145. package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
  146. package/dist/components/PlAgDataTable/sources/value-rendering.js +33 -38
  147. package/dist/components/PlAgDataTable/sources/value-rendering.js.map +1 -1
  148. package/dist/components/PlAgDataTable/types.js +54 -43
  149. package/dist/components/PlAgDataTable/types.js.map +1 -1
  150. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js +7 -0
  151. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js.map +1 -0
  152. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js +4 -0
  153. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js.map +1 -0
  154. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +89 -100
  155. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
  156. package/dist/components/PlAgGridColumnManager/useFilteredItems.js +46 -33
  157. package/dist/components/PlAgGridColumnManager/useFilteredItems.js.map +1 -1
  158. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.js +5 -0
  159. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.js.map +1 -0
  160. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.d.ts.map +1 -1
  161. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js +37 -5
  162. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js.map +1 -1
  163. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.css +1 -1
  164. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.js +10 -0
  165. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.js.map +1 -0
  166. package/dist/components/PlAgRowNumHeader.js +5 -0
  167. package/dist/components/PlAgRowNumHeader.js.map +1 -0
  168. package/dist/components/PlAgRowNumHeader.vue2.js +38 -5
  169. package/dist/components/PlAgRowNumHeader.vue2.js.map +1 -1
  170. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.js +5 -0
  171. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.js.map +1 -0
  172. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js +32 -5
  173. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js.map +1 -1
  174. package/dist/components/PlAgTextAndButtonCell/pl-ag-text-and-button-cell.css +1 -1
  175. package/dist/components/PlAnnotations/components/AnnotationsSidebar.js +7 -0
  176. package/dist/components/PlAnnotations/components/AnnotationsSidebar.js.map +1 -0
  177. package/dist/components/PlAnnotations/components/AnnotationsSidebar.style.js +11 -0
  178. package/dist/components/PlAnnotations/components/AnnotationsSidebar.style.js.map +1 -0
  179. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue.css +1 -0
  180. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +102 -113
  181. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  182. package/dist/components/PlAnnotations/components/FilterSidebar.js +7 -0
  183. package/dist/components/PlAnnotations/components/FilterSidebar.js.map +1 -0
  184. package/dist/components/PlAnnotations/components/FilterSidebar.style.js +7 -0
  185. package/dist/components/PlAnnotations/components/FilterSidebar.style.js.map +1 -0
  186. package/dist/components/PlAnnotations/components/FilterSidebar.vue.css +1 -0
  187. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +121 -129
  188. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  189. package/dist/components/PlAnnotations/components/PlAnnotations.js +7 -0
  190. package/dist/components/PlAnnotations/components/PlAnnotations.js.map +1 -0
  191. package/dist/components/PlAnnotations/components/PlAnnotations.style.js +4 -0
  192. package/dist/components/PlAnnotations/components/PlAnnotations.style.js.map +1 -0
  193. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js +73 -65
  194. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  195. package/dist/components/PlAnnotations/components/PlAnnotationsModal.js +7 -0
  196. package/dist/components/PlAnnotations/components/PlAnnotationsModal.js.map +1 -0
  197. package/dist/components/PlAnnotations/components/PlAnnotationsModal.style.js +7 -0
  198. package/dist/components/PlAnnotations/components/PlAnnotationsModal.style.js.map +1 -0
  199. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +58 -52
  200. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  201. package/dist/components/PlAnnotations/components/style.css +1 -1
  202. package/dist/components/PlAnnotations/components/style.module.js +8 -0
  203. package/dist/components/PlAnnotations/components/style.module.js.map +1 -0
  204. package/dist/components/PlAnnotations/utils.js +6 -8
  205. package/dist/components/PlAnnotations/utils.js.map +1 -1
  206. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.js +5 -0
  207. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.js.map +1 -0
  208. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js +57 -5
  209. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue2.js.map +1 -1
  210. package/dist/components/PlAppErrorNotificationAlert/pl-app-error-notification-alert.css +1 -1
  211. package/dist/components/PlBtnExportArchive/Item.js +7 -0
  212. package/dist/components/PlBtnExportArchive/Item.js.map +1 -0
  213. package/dist/components/PlBtnExportArchive/Item.style.js +9 -0
  214. package/dist/components/PlBtnExportArchive/Item.style.js.map +1 -0
  215. package/dist/components/PlBtnExportArchive/Item.vue.css +1 -0
  216. package/dist/components/PlBtnExportArchive/Item.vue2.js +28 -42
  217. package/dist/components/PlBtnExportArchive/Item.vue2.js.map +1 -1
  218. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.js +7 -0
  219. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.js.map +1 -0
  220. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.style.js +8 -0
  221. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.style.js.map +1 -0
  222. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.css +1 -0
  223. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js +161 -159
  224. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js.map +1 -1
  225. package/dist/components/PlBtnExportArchive/Summary.js +7 -0
  226. package/dist/components/PlBtnExportArchive/Summary.js.map +1 -0
  227. package/dist/components/PlBtnExportArchive/Summary.style.js +8 -0
  228. package/dist/components/PlBtnExportArchive/Summary.style.js.map +1 -0
  229. package/dist/components/PlBtnExportArchive/Summary.vue.css +1 -0
  230. package/dist/components/PlBtnExportArchive/Summary.vue2.js +26 -41
  231. package/dist/components/PlBtnExportArchive/Summary.vue2.js.map +1 -1
  232. package/dist/components/PlTableFastSearch/PlTableFastSearch.js +5 -0
  233. package/dist/components/PlTableFastSearch/PlTableFastSearch.js.map +1 -0
  234. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js +41 -5
  235. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue2.js.map +1 -1
  236. package/dist/components/PlTableFilters/PlTableFiltersV2.js +7 -0
  237. package/dist/components/PlTableFilters/PlTableFiltersV2.js.map +1 -0
  238. package/dist/components/PlTableFilters/PlTableFiltersV2.style.js +4 -0
  239. package/dist/components/PlTableFilters/PlTableFiltersV2.style.js.map +1 -0
  240. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.css +1 -0
  241. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +97 -106
  242. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  243. package/dist/composition/fileContent.js +169 -200
  244. package/dist/composition/fileContent.js.map +1 -1
  245. package/dist/computedResult.js +47 -18
  246. package/dist/computedResult.js.map +1 -1
  247. package/dist/createModel.js +44 -60
  248. package/dist/createModel.js.map +1 -1
  249. package/dist/defineApp.js +87 -113
  250. package/dist/defineApp.js.map +1 -1
  251. package/dist/defineStore.js +15 -16
  252. package/dist/defineStore.js.map +1 -1
  253. package/dist/index.js +39 -98
  254. package/dist/index.js.map +1 -1
  255. package/dist/internal/UpdateSerializer.js +50 -66
  256. package/dist/internal/UpdateSerializer.js.map +1 -1
  257. package/dist/internal/createAppModel.js +54 -68
  258. package/dist/internal/createAppModel.js.map +1 -1
  259. package/dist/internal/createAppV1.js +140 -193
  260. package/dist/internal/createAppV1.js.map +1 -1
  261. package/dist/internal/createAppV2.d.ts.map +1 -1
  262. package/dist/internal/createAppV2.js +149 -193
  263. package/dist/internal/createAppV2.js.map +1 -1
  264. package/dist/internal/createAppV3.d.ts.map +1 -1
  265. package/dist/internal/createAppV3.js +157 -202
  266. package/dist/internal/createAppV3.js.map +1 -1
  267. package/dist/internal/test-helpers/utils.d.ts.map +1 -1
  268. package/dist/lib/util/helpers/dist/error.js +1 -0
  269. package/dist/lib/util/helpers/dist/functions.js +8 -9
  270. package/dist/lib/util/helpers/dist/functions.js.map +1 -1
  271. package/dist/lib/util/helpers/dist/hash.js +5 -0
  272. package/dist/lib/util/helpers/dist/hash.js.map +1 -0
  273. package/dist/lib/util/helpers/dist/index.js +9 -0
  274. package/dist/lib/util/helpers/dist/objects.js +75 -42
  275. package/dist/lib/util/helpers/dist/objects.js.map +1 -1
  276. package/dist/lib/util/helpers/dist/prettyBytes.js +60 -26
  277. package/dist/lib/util/helpers/dist/prettyBytes.js.map +1 -1
  278. package/dist/lib/util/helpers/dist/random.js +6 -8
  279. package/dist/lib/util/helpers/dist/random.js.map +1 -1
  280. package/dist/lib/util/helpers/dist/strings.js +11 -14
  281. package/dist/lib/util/helpers/dist/strings.js.map +1 -1
  282. package/dist/lib/util/helpers/dist/uniqId.js +7 -0
  283. package/dist/lib/util/helpers/dist/uniqId.js.map +1 -0
  284. package/dist/lib/util/helpers/dist/utils.js +34 -50
  285. package/dist/lib/util/helpers/dist/utils.js.map +1 -1
  286. package/dist/lib.js +38 -0
  287. package/dist/objectHash.js +13 -10
  288. package/dist/objectHash.js.map +1 -1
  289. package/dist/plugins/Monetization/EndOfPeriod.js +7 -0
  290. package/dist/plugins/Monetization/EndOfPeriod.js.map +1 -0
  291. package/dist/plugins/Monetization/EndOfPeriod.style.js +4 -0
  292. package/dist/plugins/Monetization/EndOfPeriod.style.js.map +1 -0
  293. package/dist/plugins/Monetization/EndOfPeriod.vue.css +1 -0
  294. package/dist/plugins/Monetization/EndOfPeriod.vue2.js +15 -23
  295. package/dist/plugins/Monetization/EndOfPeriod.vue2.js.map +1 -1
  296. package/dist/plugins/Monetization/LimitCard.js +7 -0
  297. package/dist/plugins/Monetization/LimitCard.js.map +1 -0
  298. package/dist/plugins/Monetization/LimitCard.style.js +18 -0
  299. package/dist/plugins/Monetization/LimitCard.style.js.map +1 -0
  300. package/dist/plugins/Monetization/LimitCard.vue.css +1 -0
  301. package/dist/plugins/Monetization/LimitCard.vue2.js +47 -84
  302. package/dist/plugins/Monetization/LimitCard.vue2.js.map +1 -1
  303. package/dist/plugins/Monetization/MonetizationSidebar.js +5 -0
  304. package/dist/plugins/Monetization/MonetizationSidebar.js.map +1 -0
  305. package/dist/plugins/Monetization/MonetizationSidebar.vue2.js +106 -5
  306. package/dist/plugins/Monetization/MonetizationSidebar.vue2.js.map +1 -1
  307. package/dist/plugins/Monetization/RunStatus.js +7 -0
  308. package/dist/plugins/Monetization/RunStatus.js.map +1 -0
  309. package/dist/plugins/Monetization/RunStatus.style.js +13 -0
  310. package/dist/plugins/Monetization/RunStatus.style.js.map +1 -0
  311. package/dist/plugins/Monetization/RunStatus.vue.css +1 -0
  312. package/dist/plugins/Monetization/RunStatus.vue2.js +21 -40
  313. package/dist/plugins/Monetization/RunStatus.vue2.js.map +1 -1
  314. package/dist/plugins/Monetization/UserCabinetCard.js +7 -0
  315. package/dist/plugins/Monetization/UserCabinetCard.js.map +1 -0
  316. package/dist/plugins/Monetization/UserCabinetCard.style.js +12 -0
  317. package/dist/plugins/Monetization/UserCabinetCard.style.js.map +1 -0
  318. package/dist/plugins/Monetization/UserCabinetCard.vue.css +1 -0
  319. package/dist/plugins/Monetization/UserCabinetCard.vue2.js +50 -70
  320. package/dist/plugins/Monetization/UserCabinetCard.vue2.js.map +1 -1
  321. package/dist/plugins/Monetization/useButtonTarget.js +15 -16
  322. package/dist/plugins/Monetization/useButtonTarget.js.map +1 -1
  323. package/dist/plugins/Monetization/useInfo.js +36 -71
  324. package/dist/plugins/Monetization/useInfo.js.map +1 -1
  325. package/dist/plugins/Monetization/validation.js +34 -42
  326. package/dist/plugins/Monetization/validation.js.map +1 -1
  327. package/dist/urls.d.ts.map +1 -1
  328. package/dist/urls.js +4 -5
  329. package/dist/urls.js.map +1 -1
  330. package/dist/usePlugin.js +32 -12
  331. package/dist/usePlugin.js.map +1 -1
  332. package/dist/utils.d.ts.map +1 -1
  333. package/dist/utils.js +29 -54
  334. package/dist/utils.js.map +1 -1
  335. package/package.json +9 -9
  336. package/src/components/PlAgDataTable/PlAgDataTableV2.vue +57 -9
  337. package/dist/_virtual/_plugin-vue_export-helper.js.map +0 -1
  338. package/dist/components/BlockLayout.css +0 -1
  339. package/dist/components/BlockLayout.vue.js +0 -10
  340. package/dist/components/BlockLayout.vue.js.map +0 -1
  341. package/dist/components/BlockLayout.vue3.js +0 -8
  342. package/dist/components/BlockLayout.vue3.js.map +0 -1
  343. package/dist/components/BlockLoader.vue.js +0 -26
  344. package/dist/components/BlockLoader.vue.js.map +0 -1
  345. package/dist/components/LoaderPage.vue.js +0 -15
  346. package/dist/components/LoaderPage.vue.js.map +0 -1
  347. package/dist/components/NotFound.vue.js +0 -26
  348. package/dist/components/NotFound.vue.js.map +0 -1
  349. package/dist/components/PlAdvancedFilter/FilterEditor.css +0 -1
  350. package/dist/components/PlAdvancedFilter/FilterEditor.vue.js +0 -10
  351. package/dist/components/PlAdvancedFilter/FilterEditor.vue.js.map +0 -1
  352. package/dist/components/PlAdvancedFilter/FilterEditor.vue3.js +0 -32
  353. package/dist/components/PlAdvancedFilter/FilterEditor.vue3.js.map +0 -1
  354. package/dist/components/PlAdvancedFilter/OperandButton.css +0 -1
  355. package/dist/components/PlAdvancedFilter/OperandButton.vue.js +0 -10
  356. package/dist/components/PlAdvancedFilter/OperandButton.vue.js.map +0 -1
  357. package/dist/components/PlAdvancedFilter/OperandButton.vue3.js +0 -12
  358. package/dist/components/PlAdvancedFilter/OperandButton.vue3.js.map +0 -1
  359. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.css +0 -1
  360. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.js +0 -10
  361. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.js.map +0 -1
  362. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js +0 -20
  363. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue3.js.map +0 -1
  364. package/dist/components/PlAgCellFile/PlAgCellFile.vue.js +0 -32
  365. package/dist/components/PlAgCellFile/PlAgCellFile.vue.js.map +0 -1
  366. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue.js +0 -16
  367. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue.js.map +0 -1
  368. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js +0 -22
  369. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js.map +0 -1
  370. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue3.js +0 -6
  371. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue3.js.map +0 -1
  372. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.css +0 -1
  373. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.js +0 -32
  374. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.js.map +0 -1
  375. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue3.js +0 -6
  376. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue3.js.map +0 -1
  377. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.css +0 -1
  378. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.js +0 -24
  379. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.js.map +0 -1
  380. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue3.js +0 -6
  381. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue3.js.map +0 -1
  382. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js +0 -97
  383. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js.map +0 -1
  384. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js +0 -33
  385. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js.map +0 -1
  386. package/dist/components/PlAgDataTable/PlAgDataTableSheets.css +0 -1
  387. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js +0 -10
  388. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue.js.map +0 -1
  389. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue3.js +0 -8
  390. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue3.js.map +0 -1
  391. package/dist/components/PlAgDataTable/PlAgDataTableV2.css +0 -1
  392. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.js +0 -10
  393. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.js.map +0 -1
  394. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue3.js +0 -10
  395. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue3.js.map +0 -1
  396. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue.js +0 -48
  397. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue.js.map +0 -1
  398. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.js +0 -22
  399. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.js.map +0 -1
  400. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue3.js +0 -6
  401. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue3.js.map +0 -1
  402. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +0 -26
  403. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +0 -1
  404. package/dist/components/PlAgDataTable/ag-override.css.js +0 -31
  405. package/dist/components/PlAgDataTable/ag-override.css.js.map +0 -1
  406. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.scss.js +0 -14
  407. package/dist/components/PlAgDataTable/pl-ag-overlay-loading.module.scss.js.map +0 -1
  408. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.js +0 -10
  409. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.js.map +0 -1
  410. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue3.js +0 -8
  411. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue3.js.map +0 -1
  412. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +0 -48
  413. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +0 -1
  414. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.scss.js +0 -15
  415. package/dist/components/PlAgRowNumCheckbox/pl-ag-row-num-checkbox.module.scss.js.map +0 -1
  416. package/dist/components/PlAgRowNumHeader.vue.js +0 -39
  417. package/dist/components/PlAgRowNumHeader.vue.js.map +0 -1
  418. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js +0 -45
  419. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js.map +0 -1
  420. package/dist/components/PlAnnotations/components/AnnotationsSidebar.css +0 -1
  421. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue.js +0 -10
  422. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue.js.map +0 -1
  423. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue3.js +0 -18
  424. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue3.js.map +0 -1
  425. package/dist/components/PlAnnotations/components/FilterSidebar.css +0 -1
  426. package/dist/components/PlAnnotations/components/FilterSidebar.vue.js +0 -10
  427. package/dist/components/PlAnnotations/components/FilterSidebar.vue.js.map +0 -1
  428. package/dist/components/PlAnnotations/components/FilterSidebar.vue3.js +0 -10
  429. package/dist/components/PlAnnotations/components/FilterSidebar.vue3.js.map +0 -1
  430. package/dist/components/PlAnnotations/components/PlAnnotations.vue.js +0 -10
  431. package/dist/components/PlAnnotations/components/PlAnnotations.vue.js.map +0 -1
  432. package/dist/components/PlAnnotations/components/PlAnnotations.vue3.js +0 -8
  433. package/dist/components/PlAnnotations/components/PlAnnotations.vue3.js.map +0 -1
  434. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue.js +0 -10
  435. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue.js.map +0 -1
  436. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js +0 -10
  437. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue3.js.map +0 -1
  438. package/dist/components/PlAnnotations/components/style.module.css.js +0 -12
  439. package/dist/components/PlAnnotations/components/style.module.css.js.map +0 -1
  440. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js +0 -79
  441. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js.map +0 -1
  442. package/dist/components/PlBtnExportArchive/Item.css +0 -1
  443. package/dist/components/PlBtnExportArchive/Item.vue.js +0 -10
  444. package/dist/components/PlBtnExportArchive/Item.vue.js.map +0 -1
  445. package/dist/components/PlBtnExportArchive/Item.vue3.js +0 -14
  446. package/dist/components/PlBtnExportArchive/Item.vue3.js.map +0 -1
  447. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.css +0 -1
  448. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.js +0 -10
  449. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue.js.map +0 -1
  450. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue3.js +0 -12
  451. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue3.js.map +0 -1
  452. package/dist/components/PlBtnExportArchive/Summary.css +0 -1
  453. package/dist/components/PlBtnExportArchive/Summary.vue.js +0 -10
  454. package/dist/components/PlBtnExportArchive/Summary.vue.js.map +0 -1
  455. package/dist/components/PlBtnExportArchive/Summary.vue3.js +0 -12
  456. package/dist/components/PlBtnExportArchive/Summary.vue3.js.map +0 -1
  457. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue.js +0 -54
  458. package/dist/components/PlTableFastSearch/PlTableFastSearch.vue.js.map +0 -1
  459. package/dist/components/PlTableFilters/PlTableFiltersV2.css +0 -1
  460. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.js +0 -10
  461. package/dist/components/PlTableFilters/PlTableFiltersV2.vue.js.map +0 -1
  462. package/dist/components/PlTableFilters/PlTableFiltersV2.vue3.js +0 -8
  463. package/dist/components/PlTableFilters/PlTableFiltersV2.vue3.js.map +0 -1
  464. package/dist/plugins/Monetization/EndOfPeriod.css +0 -1
  465. package/dist/plugins/Monetization/EndOfPeriod.vue.js +0 -10
  466. package/dist/plugins/Monetization/EndOfPeriod.vue.js.map +0 -1
  467. package/dist/plugins/Monetization/EndOfPeriod.vue3.js +0 -8
  468. package/dist/plugins/Monetization/EndOfPeriod.vue3.js.map +0 -1
  469. package/dist/plugins/Monetization/LimitCard.css +0 -1
  470. package/dist/plugins/Monetization/LimitCard.vue.js +0 -10
  471. package/dist/plugins/Monetization/LimitCard.vue.js.map +0 -1
  472. package/dist/plugins/Monetization/LimitCard.vue3.js +0 -32
  473. package/dist/plugins/Monetization/LimitCard.vue3.js.map +0 -1
  474. package/dist/plugins/Monetization/MonetizationSidebar.vue.js +0 -138
  475. package/dist/plugins/Monetization/MonetizationSidebar.vue.js.map +0 -1
  476. package/dist/plugins/Monetization/RunStatus.css +0 -1
  477. package/dist/plugins/Monetization/RunStatus.vue.js +0 -10
  478. package/dist/plugins/Monetization/RunStatus.vue.js.map +0 -1
  479. package/dist/plugins/Monetization/RunStatus.vue3.js +0 -20
  480. package/dist/plugins/Monetization/RunStatus.vue3.js.map +0 -1
  481. package/dist/plugins/Monetization/UserCabinetCard.css +0 -1
  482. package/dist/plugins/Monetization/UserCabinetCard.vue.js +0 -10
  483. package/dist/plugins/Monetization/UserCabinetCard.vue.js.map +0 -1
  484. package/dist/plugins/Monetization/UserCabinetCard.vue3.js +0 -20
  485. package/dist/plugins/Monetization/UserCabinetCard.vue3.js.map +0 -1
  486. /package/dist/components/PlAgCellStatusTag/{PlAgCellStatusTag.css → PlAgCellStatusTag.style.css} +0 -0
  487. /package/dist/components/PlAgGridColumnManager/{PlAgGridColumnManager.css → PlAgGridColumnManager.vue.css} +0 -0
  488. /package/dist/components/PlAnnotations/components/{PlAnnotations.css → PlAnnotations.vue.css} +0 -0
  489. /package/dist/components/PlAnnotations/components/{PlAnnotationsModal.css → PlAnnotationsModal.vue.css} +0 -0
@@ -1,204 +1,159 @@
1
- import { delay as ot } from "../lib/util/helpers/dist/utils.js";
2
- import { uniqueId as z } from "../lib/util/helpers/dist/strings.js";
3
- import { deepClone as p } from "../lib/util/helpers/dist/objects.js";
4
- import { isPluginOutputKey as U, deriveDataFromStorage as V, unwrapResult as h, getPluginData as _, hasAbortError as at, pluginOutputPrefix as nt } from "@platforma-sdk/model";
5
- import { ref as E, computed as g, reactive as M } from "vue";
6
- import { parseQuery as rt } from "../urls.js";
7
- import { ensureOutputHasStableFlag as ut, MultiError as R } from "../utils.js";
8
- import { applyPatch as q } from "fast-json-patch";
9
- import { UpdateSerializer as x } from "./UpdateSerializer.js";
10
- import { watchIgnorable as C } from "@vueuse/core";
11
- const F = 150, st = (r) => ({
12
- authorId: (r == null ? void 0 : r.authorId) ?? z(),
13
- localVersion: ((r == null ? void 0 : r.localVersion) ?? 0) + 1
14
- }), $ = (r) => {
15
- try {
16
- return JSON.stringify(r, null, 2);
17
- } catch (u) {
18
- return u instanceof Error ? u.message : String(u);
19
- }
1
+ import { delay as e } from "../lib/util/helpers/dist/utils.js";
2
+ import { uniqueId as t } from "../lib/util/helpers/dist/strings.js";
3
+ import { deepClone as n } from "../lib/util/helpers/dist/objects.js";
4
+ import "../lib/util/helpers/dist/index.js";
5
+ import { MultiError as r, ensureOutputHasStableFlag as i } from "../utils.js";
6
+ import { parseQuery as a } from "../urls.js";
7
+ import { UpdateSerializer as o } from "./UpdateSerializer.js";
8
+ import { computed as s, reactive as c, ref as l } from "vue";
9
+ import { deriveDataFromStorage as u, getPluginData as d, hasAbortError as f, isPluginOutputKey as p, pluginOutputPrefix as m, unwrapResult as h } from "@platforma-sdk/model";
10
+ import { watchIgnorable as g } from "@vueuse/core";
11
+ import { applyPatch as _ } from "fast-json-patch";
12
+ const v = (e) => ({
13
+ authorId: e?.authorId ?? t(),
14
+ localVersion: (e?.localVersion ?? 0) + 1
15
+ });
16
+ var y = (e) => {
17
+ try {
18
+ return JSON.stringify(e, null, 2);
19
+ } catch (e) {
20
+ return e instanceof Error ? e.message : String(e);
21
+ }
20
22
  };
21
- function bt(r, u, S) {
22
- const n = (t, ...e) => {
23
- S.debug && console.log(
24
- `%c>>> %c${t}`,
25
- "color: orange; font-weight: bold",
26
- "color: orange",
27
- ...e.map((o) => $(o))
28
- );
29
- }, I = (t, ...e) => {
30
- console.error(
31
- `%c>>> %c${t}`,
32
- "color: red; font-weight: bold",
33
- "color: red",
34
- ...e.map((o) => $(o))
35
- );
36
- }, i = {
37
- isExternalSnapshot: !1,
38
- author: {
39
- authorId: z(),
40
- localVersion: 0
41
- }
42
- }, T = () => (i.author = st(i.author), n("nextAuthorMarker", i.author), i.author), m = E(!1), w = E(r.uTag), y = S.debounceSpan ?? 200, O = new x({ debounceSpan: y }), D = /* @__PURE__ */ new Map(), H = (t) => {
43
- let e = D.get(t);
44
- return e || (e = new x({ debounceSpan: y }), D.set(t, e)), e;
45
- }, J = new x({ debounceSpan: y }), P = /* @__PURE__ */ new Map(), a = E(r.value), j = async (t) => u.mutateStorage({ operation: "update-block-data", value: t }, T()), K = async (t, e) => u.mutateStorage(
46
- { operation: "update-plugin-data", pluginId: t, value: e },
47
- T()
48
- ), L = async (t) => u.setNavigationState(t), B = g(() => {
49
- const t = Object.entries(a.value.outputs).filter(([e]) => !U(e)).map(
50
- ([e, o]) => {
51
- var s;
52
- return (s = u.blockModelInfo.outputs[e]) != null && s.withStatus ? [e, ut(o)] : [
53
- e,
54
- o.ok && o.value !== void 0 ? o.value : void 0
55
- ];
56
- }
57
- );
58
- return Object.fromEntries(t);
59
- }), G = g(() => {
60
- const t = Object.entries(a.value.outputs).filter(([e]) => !U(e)).map(([e, o]) => [
61
- e,
62
- o && o.ok === !1 ? new R(o.errors) : void 0
63
- ]);
64
- return Object.fromEntries(t);
65
- }), f = M({
66
- apiVersion: 3,
67
- error: "",
68
- model: {
69
- data: p(V(a.value.blockStorage)),
70
- outputs: B,
71
- outputErrors: G
72
- }
73
- }), { ignoreUpdates: A } = C(
74
- () => f.model,
75
- (t) => {
76
- const e = p(t);
77
- n("setDataQueue appModel.model, data", e.data), O.run(() => j(e.data).then(h));
78
- },
79
- { deep: !0 }
80
- ), W = (t) => {
81
- n("updateAppModel", t), f.model.data = p(t.data);
82
- };
83
- (async () => {
84
- var t, e;
85
- for (window.addEventListener("beforeunload", () => {
86
- m.value = !0, u.dispose().then(h).catch((o) => {
87
- I("error in dispose", o);
88
- });
89
- }); !m.value; )
90
- try {
91
- const o = await u.getPatches(w.value).then(h);
92
- if (n("patches.length", o.value.length), n("uTagRef.value", w.value), n("patches.uTag", o.uTag), n("patches.author", o.author), n("data.author", i.author), w.value = o.uTag, o.value.length === 0) {
93
- await new Promise((c) => setTimeout(c, F));
94
- continue;
95
- }
96
- const s = ((t = i.author) == null ? void 0 : t.authorId) !== ((e = o.author) == null ? void 0 : e.authorId);
97
- s || i.isExternalSnapshot ? (n("got external changes, applying them to the snapshot", o.value), A(() => {
98
- a.value = q(a.value, o.value, !1, !1).newDocument, W({ data: V(a.value.blockStorage) });
99
- for (const [c, b] of P)
100
- b.ignoreUpdates(() => {
101
- b.model.data = p(
102
- _(a.value.blockStorage, c)
103
- );
104
- });
105
- i.isExternalSnapshot = s;
106
- })) : (n("outputs changed", o.value), A(() => {
107
- a.value = q(a.value, o.value).newDocument;
108
- })), await new Promise((c) => setTimeout(c, F));
109
- } catch (o) {
110
- at(o) ? (n("patches loop aborted"), m.value = !0) : (I("error in patches loop", o), await new Promise((s) => setTimeout(s, 1e3)));
111
- }
112
- })();
113
- const k = () => p(f.model.data), Q = () => p(a.value.navigationState), X = {
114
- cloneData: k,
115
- cloneNavigationState: Q,
116
- /**
117
- * Updates the UI state by applying a callback.
118
- *
119
- * @param cb - Callback to modify the current UI state.
120
- * @returns A promise resolving after the update is applied.
121
- * @todo Make it mutable since there is already an initial one
122
- */
123
- updateData(t) {
124
- const e = t(k());
125
- return n("updateData", e), f.model.data = e, O.run(() => j(e).then(h));
126
- },
127
- /**
128
- * Navigates to a specific href by updating the navigation state.
129
- *
130
- * @param href - The target href to navigate to.
131
- * @returns A promise resolving after the navigation state is updated.
132
- */
133
- navigateTo(t) {
134
- const e = Q();
135
- return e.href = t, J.run(() => L(e).then(h));
136
- },
137
- async allSettled() {
138
- await ot(0);
139
- const t = [
140
- O.allSettled(),
141
- ...Array.from(D.values()).map((e) => e.allSettled())
142
- ];
143
- await Promise.all(t);
144
- }
145
- }, Y = (t) => {
146
- const e = nt(t), o = g(() => {
147
- const l = {};
148
- for (const [v, d] of Object.entries(
149
- a.value.outputs
150
- ))
151
- v.startsWith(e) && (l[v.slice(e.length)] = d.ok && d.value !== void 0 ? d.value : void 0);
152
- return l;
153
- }), s = g(() => {
154
- const l = {};
155
- for (const [v, d] of Object.entries(
156
- a.value.outputs
157
- ))
158
- v.startsWith(e) && (l[v.slice(e.length)] = d && d.ok === !1 ? new R(d.errors) : void 0);
159
- return l;
160
- }), c = M({
161
- data: p(_(a.value.blockStorage, t)),
162
- outputs: o,
163
- outputErrors: s
164
- }), { ignoreUpdates: b } = C(
165
- () => c.data,
166
- (l) => {
167
- l !== void 0 && (n("plugin setData", t, l), H(t).run(
168
- () => K(t, p(l)).then(h)
169
- ));
170
- },
171
- { deep: !0 }
172
- );
173
- return {
174
- model: c,
175
- ignoreUpdates: b
176
- };
177
- }, Z = {
178
- getOrCreatePluginState(t) {
179
- const e = P.get(t);
180
- if (e)
181
- return e;
182
- const o = Y(t);
183
- return P.set(t, o), o;
184
- }
185
- }, tt = Object.fromEntries(
186
- u.blockModelInfo.pluginIds.map((t) => [t, t])
187
- ), et = {
188
- closedRef: m,
189
- snapshot: a,
190
- plugins: tt,
191
- queryParams: g(() => rt(a.value.navigationState.href)),
192
- href: g(() => a.value.navigationState.href),
193
- hasErrors: g(
194
- () => Object.values(a.value.outputs).some((t) => !(t != null && t.ok))
195
- )
196
- }, N = Object.assign(M(Object.assign(f, et)), X);
197
- return S.debug && (globalThis.__block_app__ = N), { app: N, pluginAccess: Z };
23
+ /**
24
+ * Creates an application instance with reactive state management, outputs, and methods for state updates and navigation.
25
+ *
26
+ * @template Args - The type of arguments used in the application.
27
+ * @template Outputs - The type of block outputs extending `BlockOutputsBase`.
28
+ * @template Data - The type of the block data.
29
+ * @template Href - The type of navigation href, defaulting to a string starting with `/`.
30
+ *
31
+ * @param state - Initial state of the application, including args, outputs, UI state, and navigation state.
32
+ * @param platforma - A platform interface for interacting with block states.
33
+ * @param settings - Application settings, such as debug flags.
34
+ *
35
+ * @returns A reactive application object with methods, getters, and state.
36
+ */
37
+ function b(b, x, S) {
38
+ let C = (e, ...t) => {
39
+ S.debug && console.log(`%c>>> %c${e}`, "color: orange; font-weight: bold", "color: orange", ...t.map((e) => y(e)));
40
+ }, w = (e, ...t) => {
41
+ console.error(`%c>>> %c${e}`, "color: red; font-weight: bold", "color: red", ...t.map((e) => y(e)));
42
+ }, T = {
43
+ isExternalSnapshot: !1,
44
+ author: {
45
+ authorId: t(),
46
+ localVersion: 0
47
+ }
48
+ }, E = () => (T.author = v(T.author), C("nextAuthorMarker", T.author), T.author), D = l(!1), O = l(b.uTag), k = S.debounceSpan ?? 200, A = new o({ debounceSpan: k }), j = /* @__PURE__ */ new Map(), M = (e) => {
49
+ let t = j.get(e);
50
+ return t || (t = new o({ debounceSpan: k }), j.set(e, t)), t;
51
+ }, N = new o({ debounceSpan: k }), P = /* @__PURE__ */ new Map(), F = l(b.value), I = async (e) => x.mutateStorage({
52
+ operation: "update-block-data",
53
+ value: e
54
+ }, E()), L = async (e, t) => x.mutateStorage({
55
+ operation: "update-plugin-data",
56
+ pluginId: e,
57
+ value: t
58
+ }, E()), R = async (e) => x.setNavigationState(e), z = s(() => {
59
+ let e = Object.entries(F.value.outputs).filter(([e]) => !p(e)).map(([e, t]) => x.blockModelInfo.outputs[e]?.withStatus ? [e, i(t)] : [e, t.ok && t.value !== void 0 ? t.value : void 0]);
60
+ return Object.fromEntries(e);
61
+ }), B = s(() => {
62
+ let e = Object.entries(F.value.outputs).filter(([e]) => !p(e)).map(([e, t]) => [e, t && t.ok === !1 ? new r(t.errors) : void 0]);
63
+ return Object.fromEntries(e);
64
+ }), V = c({
65
+ apiVersion: 3,
66
+ error: "",
67
+ model: {
68
+ data: n(u(F.value.blockStorage)),
69
+ outputs: z,
70
+ outputErrors: B
71
+ }
72
+ }), { ignoreUpdates: H } = g(() => V.model, (e) => {
73
+ let t = n(e);
74
+ C("setDataQueue appModel.model, data", t.data), A.run(() => I(t.data).then(h));
75
+ }, { deep: !0 }), U = (e) => {
76
+ C("updateAppModel", e), V.model.data = n(e.data);
77
+ };
78
+ (async () => {
79
+ for (window.addEventListener("beforeunload", () => {
80
+ D.value = !0, x.dispose().then(h).catch((e) => {
81
+ w("error in dispose", e);
82
+ });
83
+ }); !D.value;) try {
84
+ let e = await x.getPatches(O.value).then(h);
85
+ if (C("patches.length", e.value.length), C("uTagRef.value", O.value), C("patches.uTag", e.uTag), C("patches.author", e.author), C("data.author", T.author), O.value = e.uTag, e.value.length === 0) {
86
+ await new Promise((e) => setTimeout(e, 150));
87
+ continue;
88
+ }
89
+ let t = T.author?.authorId !== e.author?.authorId;
90
+ t || T.isExternalSnapshot ? (C("got external changes, applying them to the snapshot", e.value), H(() => {
91
+ F.value = _(F.value, e.value, !1, !1).newDocument, U({ data: u(F.value.blockStorage) });
92
+ for (let [e, t] of P) t.ignoreUpdates(() => {
93
+ t.model.data = n(d(F.value.blockStorage, e));
94
+ });
95
+ T.isExternalSnapshot = t;
96
+ })) : (C("outputs changed", e.value), H(() => {
97
+ F.value = _(F.value, e.value).newDocument;
98
+ })), await new Promise((e) => setTimeout(e, 150));
99
+ } catch (e) {
100
+ f(e) ? (C("patches loop aborted"), D.value = !0) : (w("error in patches loop", e), await new Promise((e) => setTimeout(e, 1e3)));
101
+ }
102
+ })();
103
+ let W = () => n(V.model.data), G = () => n(F.value.navigationState), K = {
104
+ cloneData: W,
105
+ cloneNavigationState: G,
106
+ updateData(e) {
107
+ let t = e(W());
108
+ return C("updateData", t), V.model.data = t, A.run(() => I(t).then(h));
109
+ },
110
+ navigateTo(e) {
111
+ let t = G();
112
+ return t.href = e, N.run(() => R(t).then(h));
113
+ },
114
+ async allSettled() {
115
+ await e(0);
116
+ let t = [A.allSettled(), ...Array.from(j.values()).map((e) => e.allSettled())];
117
+ await Promise.all(t);
118
+ }
119
+ }, q = (e) => {
120
+ let t = m(e), i = s(() => {
121
+ let e = {};
122
+ for (let [n, r] of Object.entries(F.value.outputs)) n.startsWith(t) && (e[n.slice(t.length)] = r.ok && r.value !== void 0 ? r.value : void 0);
123
+ return e;
124
+ }), a = s(() => {
125
+ let e = {};
126
+ for (let [n, i] of Object.entries(F.value.outputs)) n.startsWith(t) && (e[n.slice(t.length)] = i && i.ok === !1 ? new r(i.errors) : void 0);
127
+ return e;
128
+ }), o = c({
129
+ data: n(d(F.value.blockStorage, e)),
130
+ outputs: i,
131
+ outputErrors: a
132
+ }), { ignoreUpdates: l } = g(() => o.data, (t) => {
133
+ t !== void 0 && (C("plugin setData", e, t), M(e).run(() => L(e, n(t)).then(h)));
134
+ }, { deep: !0 });
135
+ return {
136
+ model: o,
137
+ ignoreUpdates: l
138
+ };
139
+ }, J = { getOrCreatePluginState(e) {
140
+ let t = P.get(e);
141
+ if (t) return t;
142
+ let n = q(e);
143
+ return P.set(e, n), n;
144
+ } }, Y = {
145
+ closedRef: D,
146
+ snapshot: F,
147
+ plugins: Object.fromEntries(x.blockModelInfo.pluginIds.map((e) => [e, e])),
148
+ queryParams: s(() => a(F.value.navigationState.href)),
149
+ href: s(() => F.value.navigationState.href),
150
+ hasErrors: s(() => Object.values(F.value.outputs).some((e) => !e?.ok))
151
+ }, X = Object.assign(c(Object.assign(V, Y)), K);
152
+ return S.debug && (globalThis.__block_app__ = X), {
153
+ app: X,
154
+ pluginAccess: J
155
+ };
198
156
  }
199
- export {
200
- bt as createAppV3,
201
- st as createNextAuthorMarker,
202
- F as patchPoolingDelay
203
- };
204
- //# sourceMappingURL=createAppV3.js.map
157
+ export { b as createAppV3 };
158
+
159
+ //# sourceMappingURL=createAppV3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAppV3.js","sources":["../../src/internal/createAppV3.ts"],"sourcesContent":["import { deepClone, delay, uniqueId } from \"@milaboratories/helpers\";\nimport type { Mutable } from \"@milaboratories/helpers\";\nimport type {\n NavigationState,\n BlockOutputsBase,\n BlockStateV3,\n PlatformaV3,\n ValueWithUTag,\n AuthorMarker,\n PlatformaExtended,\n InferPluginHandles,\n PluginHandle,\n InferFactoryData,\n InferFactoryOutputs,\n PluginFactoryLike,\n} from \"@platforma-sdk/model\";\nimport {\n hasAbortError,\n unwrapResult,\n deriveDataFromStorage,\n getPluginData,\n isPluginOutputKey,\n pluginOutputPrefix,\n} from \"@platforma-sdk/model\";\nimport type { Ref } from \"vue\";\nimport { reactive, computed, ref } from \"vue\";\nimport type { OutputValues, OutputErrors, AppSettings } from \"../types\";\nimport { parseQuery } from \"../urls\";\nimport { ensureOutputHasStableFlag, MultiError } from \"../utils\";\nimport { applyPatch } from \"fast-json-patch\";\nimport { UpdateSerializer } from \"./UpdateSerializer\";\nimport { watchIgnorable } from \"@vueuse/core\";\nimport type { PluginState, PluginAccess } from \"../usePlugin\";\n\nexport const patchPoolingDelay = 150;\n\n/** Internal per-plugin state with reconciliation support. */\ninterface InternalPluginState<Data = unknown, Outputs = unknown> extends PluginState<\n Data,\n Outputs\n> {\n readonly ignoreUpdates: (fn: () => void) => void;\n}\n\nexport const createNextAuthorMarker = (marker: AuthorMarker | undefined): AuthorMarker => ({\n authorId: marker?.authorId ?? uniqueId(),\n localVersion: (marker?.localVersion ?? 0) + 1,\n});\n\nconst stringifyForDebug = (v: unknown) => {\n try {\n return JSON.stringify(v, null, 2);\n } catch (err) {\n return err instanceof Error ? err.message : String(err);\n }\n};\n\n/**\n * Creates an application instance with reactive state management, outputs, and methods for state updates and navigation.\n *\n * @template Args - The type of arguments used in the application.\n * @template Outputs - The type of block outputs extending `BlockOutputsBase`.\n * @template Data - The type of the block data.\n * @template Href - The type of navigation href, defaulting to a string starting with `/`.\n *\n * @param state - Initial state of the application, including args, outputs, UI state, and navigation state.\n * @param platforma - A platform interface for interacting with block states.\n * @param settings - Application settings, such as debug flags.\n *\n * @returns A reactive application object with methods, getters, and state.\n */\nexport function createAppV3<\n Data = unknown,\n Args = unknown,\n Outputs extends BlockOutputsBase = BlockOutputsBase,\n Href extends `/${string}` = `/${string}`,\n Plugins extends Record<string, unknown> = Record<string, unknown>,\n>(\n state: ValueWithUTag<BlockStateV3<Data, Outputs, Href>>,\n platforma: PlatformaExtended<PlatformaV3<Data, Args, Outputs, Href, Plugins>>,\n settings: AppSettings,\n) {\n const debug = (msg: string, ...rest: unknown[]) => {\n if (settings.debug) {\n console.log(\n `%c>>> %c${msg}`,\n \"color: orange; font-weight: bold\",\n \"color: orange\",\n ...rest.map((r) => stringifyForDebug(r)),\n );\n }\n };\n\n const error = (msg: string, ...rest: unknown[]) => {\n console.error(\n `%c>>> %c${msg}`,\n \"color: red; font-weight: bold\",\n \"color: red\",\n ...rest.map((r) => stringifyForDebug(r)),\n );\n };\n\n const data = {\n isExternalSnapshot: false,\n author: {\n authorId: uniqueId(),\n localVersion: 0,\n },\n };\n\n const nextAuthorMarker = () => {\n data.author = createNextAuthorMarker(data.author);\n debug(\"nextAuthorMarker\", data.author);\n return data.author;\n };\n\n const closedRef = ref(false);\n\n const uTagRef = ref(state.uTag);\n\n const debounceSpan = settings.debounceSpan ?? 200;\n\n const setDataQueue = new UpdateSerializer({ debounceSpan });\n const pluginDataQueues = new Map<PluginHandle, UpdateSerializer>();\n const getPluginDataQueue = (handle: PluginHandle): UpdateSerializer => {\n let queue = pluginDataQueues.get(handle);\n if (!queue) {\n queue = new UpdateSerializer({ debounceSpan });\n pluginDataQueues.set(handle, queue);\n }\n return queue;\n };\n const setNavigationStateQueue = new UpdateSerializer({ debounceSpan });\n\n /** Lazily-created per-plugin reactive states. */\n const pluginStates = new Map<PluginHandle, InternalPluginState>();\n /**\n * Reactive snapshot of the application state, including args, outputs, UI state, and navigation state.\n */\n const snapshot = ref<{\n outputs: Partial<Outputs>;\n blockStorage: unknown;\n navigationState: NavigationState<Href>;\n }>(state.value) as Ref<{\n outputs: Partial<Outputs>;\n blockStorage: unknown;\n navigationState: NavigationState<Href>;\n }>;\n\n const updateData = async (value: Data) => {\n return platforma.mutateStorage({ operation: \"update-block-data\", value }, nextAuthorMarker());\n };\n\n const updatePluginData = async (handle: PluginHandle, value: unknown) => {\n return platforma.mutateStorage(\n { operation: \"update-plugin-data\", pluginId: handle, value },\n nextAuthorMarker(),\n );\n };\n\n const setNavigationState = async (state: NavigationState<Href>) => {\n return platforma.setNavigationState(state);\n };\n\n const outputs = computed<OutputValues<Outputs>>(() => {\n const entries = Object.entries(snapshot.value.outputs as Partial<Readonly<Outputs>>)\n .filter(([k]) => !isPluginOutputKey(k))\n .map(([k, outputWithStatus]) =>\n platforma.blockModelInfo.outputs[k]?.withStatus\n ? [k, ensureOutputHasStableFlag(outputWithStatus)]\n : [\n k,\n outputWithStatus.ok && outputWithStatus.value !== undefined\n ? outputWithStatus.value\n : undefined,\n ],\n );\n return Object.fromEntries(entries);\n });\n\n const outputErrors = computed<OutputErrors<Outputs>>(() => {\n const entries = Object.entries(snapshot.value.outputs as Partial<Readonly<Outputs>>)\n .filter(([k]) => !isPluginOutputKey(k))\n .map(([k, vOrErr]) => [\n k,\n vOrErr && vOrErr.ok === false ? new MultiError(vOrErr.errors) : undefined,\n ]);\n return Object.fromEntries(entries);\n });\n\n const appModel = reactive({\n apiVersion: 3,\n error: \"\",\n model: {\n data: deepClone(deriveDataFromStorage<Data>(snapshot.value.blockStorage)) as Data,\n outputs,\n outputErrors,\n },\n }) as {\n error: string;\n model: {\n data: Data;\n outputs: OutputValues<Outputs>;\n outputErrors: OutputErrors<Outputs>;\n };\n };\n\n const { ignoreUpdates } = watchIgnorable(\n () => appModel.model,\n (_newData) => {\n const newData = deepClone(_newData);\n debug(\"setDataQueue appModel.model, data\", newData.data);\n setDataQueue.run(() => updateData(newData.data).then(unwrapResult));\n },\n { deep: true },\n );\n\n const updateAppModel = (newData: { data: Data }) => {\n debug(\"updateAppModel\", newData);\n appModel.model.data = deepClone(newData.data) as Data;\n };\n\n (async () => {\n window.addEventListener(\"beforeunload\", () => {\n closedRef.value = true;\n platforma\n .dispose()\n .then(unwrapResult)\n .catch((err) => {\n error(\"error in dispose\", err);\n });\n });\n\n while (!closedRef.value) {\n try {\n const patches = await platforma.getPatches(uTagRef.value).then(unwrapResult);\n\n debug(\"patches.length\", patches.value.length);\n debug(\"uTagRef.value\", uTagRef.value);\n debug(\"patches.uTag\", patches.uTag);\n debug(\"patches.author\", patches.author);\n debug(\"data.author\", data.author);\n\n uTagRef.value = patches.uTag;\n\n if (patches.value.length === 0) {\n await new Promise((resolve) => setTimeout(resolve, patchPoolingDelay));\n continue;\n }\n\n const isAuthorChanged = data.author?.authorId !== patches.author?.authorId;\n\n // Immutable behavior, apply external changes to the snapshot\n if (isAuthorChanged || data.isExternalSnapshot) {\n debug(\"got external changes, applying them to the snapshot\", patches.value);\n ignoreUpdates(() => {\n snapshot.value = applyPatch(snapshot.value, patches.value, false, false).newDocument;\n updateAppModel({ data: deriveDataFromStorage<Data>(snapshot.value.blockStorage) });\n // Reconcile plugin data from external source\n for (const [handle, pluginState] of pluginStates) {\n pluginState.ignoreUpdates(() => {\n pluginState.model.data = deepClone(\n getPluginData(snapshot.value.blockStorage, handle),\n );\n });\n }\n data.isExternalSnapshot = isAuthorChanged;\n });\n } else {\n // Mutable behavior\n debug(\"outputs changed\", patches.value);\n ignoreUpdates(() => {\n snapshot.value = applyPatch(snapshot.value, patches.value).newDocument;\n });\n }\n\n await new Promise((resolve) => setTimeout(resolve, patchPoolingDelay));\n } catch (err) {\n if (hasAbortError(err)) {\n debug(\"patches loop aborted\");\n closedRef.value = true;\n } else {\n error(\"error in patches loop\", err);\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n }\n }\n })();\n\n const cloneData = () => deepClone(appModel.model.data) as Data;\n const cloneNavigationState = () =>\n deepClone(snapshot.value.navigationState) as Mutable<NavigationState<Href>>;\n\n const methods = {\n cloneData,\n cloneNavigationState,\n /**\n * Updates the UI state by applying a callback.\n *\n * @param cb - Callback to modify the current UI state.\n * @returns A promise resolving after the update is applied.\n * @todo Make it mutable since there is already an initial one\n */\n updateData(cb: (data: Data) => Data): Promise<boolean> {\n const newData = cb(cloneData());\n debug(\"updateData\", newData);\n appModel.model.data = newData;\n return setDataQueue.run(() => updateData(newData).then(unwrapResult));\n },\n /**\n * Navigates to a specific href by updating the navigation state.\n *\n * @param href - The target href to navigate to.\n * @returns A promise resolving after the navigation state is updated.\n */\n navigateTo(href: Href) {\n const newState = cloneNavigationState();\n newState.href = href;\n return setNavigationStateQueue.run(() => setNavigationState(newState).then(unwrapResult));\n },\n async allSettled() {\n await delay(0);\n const allQueues = [\n setDataQueue.allSettled(),\n ...Array.from(pluginDataQueues.values()).map((q) => q.allSettled()),\n ];\n await Promise.all(allQueues);\n },\n };\n\n /** Creates a lazily-cached per-plugin reactive state. */\n const createPluginState = <F extends PluginFactoryLike>(\n handle: PluginHandle<F>,\n ): InternalPluginState<InferFactoryData<F>, InferFactoryOutputs<F>> => {\n const prefix = pluginOutputPrefix(handle);\n\n const pluginOutputs = computed(() => {\n const result: Record<string, unknown> = {};\n for (const [key, outputWithStatus] of Object.entries(\n snapshot.value.outputs as Partial<Readonly<Outputs>>,\n )) {\n if (!key.startsWith(prefix)) continue;\n result[key.slice(prefix.length)] =\n outputWithStatus.ok && outputWithStatus.value !== undefined\n ? outputWithStatus.value\n : undefined;\n }\n return result;\n });\n\n const pluginOutputErrors = computed(() => {\n const result: Record<string, Error | undefined> = {};\n for (const [key, vOrErr] of Object.entries(\n snapshot.value.outputs as Partial<Readonly<Outputs>>,\n )) {\n if (!key.startsWith(prefix)) continue;\n result[key.slice(prefix.length)] =\n vOrErr && vOrErr.ok === false ? new MultiError(vOrErr.errors) : undefined;\n }\n return result;\n });\n\n const pluginModel = reactive({\n data: deepClone(getPluginData(snapshot.value.blockStorage, handle)),\n outputs: pluginOutputs,\n outputErrors: pluginOutputErrors,\n }) as InternalPluginState<InferFactoryData<F>, InferFactoryOutputs<F>>[\"model\"];\n\n const { ignoreUpdates } = watchIgnorable(\n () => pluginModel.data,\n (newData) => {\n if (newData === undefined) return;\n debug(\"plugin setData\", handle, newData);\n getPluginDataQueue(handle).run(() =>\n updatePluginData(handle, deepClone(newData)).then(unwrapResult),\n );\n },\n { deep: true },\n );\n\n return {\n model: pluginModel,\n ignoreUpdates,\n };\n };\n\n /** Plugin internals — provided via separate injection key, not exposed on useApp(). */\n const pluginAccess: PluginAccess = {\n getOrCreatePluginState<F extends PluginFactoryLike>(handle: PluginHandle<F>) {\n const existing = pluginStates.get(handle);\n if (existing) {\n return existing as unknown as PluginState<InferFactoryData<F>, InferFactoryOutputs<F>>;\n }\n const state = createPluginState(handle);\n pluginStates.set(handle, state);\n return state;\n },\n };\n\n const plugins = Object.fromEntries(\n platforma.blockModelInfo.pluginIds.map((id) => [id, id]),\n ) as InferPluginHandles<Plugins>;\n\n const getters = {\n closedRef,\n snapshot,\n plugins,\n queryParams: computed(() => parseQuery<Href>(snapshot.value.navigationState.href as Href)),\n href: computed(() => snapshot.value.navigationState.href),\n hasErrors: computed(() =>\n Object.values(snapshot.value.outputs as Partial<Readonly<Outputs>>).some((v) => !v?.ok),\n ),\n };\n\n const app = Object.assign(reactive(Object.assign(appModel, getters)), methods);\n\n if (settings.debug) {\n // @ts-expect-error (to inspect in console in debug mode)\n globalThis.__block_app__ = app;\n }\n\n return { app, pluginAccess };\n}\n\nexport type BaseAppV3<\n Data = unknown,\n Args = unknown,\n Outputs extends BlockOutputsBase = BlockOutputsBase,\n Href extends `/${string}` = `/${string}`,\n Plugins extends Record<string, unknown> = Record<string, unknown>,\n> = ReturnType<typeof createAppV3<Data, Args, Outputs, Href, Plugins>>[\"app\"];\n"],"names":["patchPoolingDelay","createNextAuthorMarker","marker","uniqueId","stringifyForDebug","v","err","createAppV3","state","platforma","settings","debug","msg","rest","r","error","data","nextAuthorMarker","closedRef","ref","uTagRef","debounceSpan","setDataQueue","UpdateSerializer","pluginDataQueues","getPluginDataQueue","handle","queue","setNavigationStateQueue","pluginStates","snapshot","updateData","value","updatePluginData","setNavigationState","outputs","computed","entries","k","isPluginOutputKey","outputWithStatus","_a","ensureOutputHasStableFlag","outputErrors","vOrErr","MultiError","appModel","reactive","deepClone","deriveDataFromStorage","ignoreUpdates","watchIgnorable","_newData","newData","unwrapResult","updateAppModel","patches","resolve","isAuthorChanged","_b","applyPatch","pluginState","getPluginData","hasAbortError","cloneData","cloneNavigationState","methods","cb","href","newState","delay","allQueues","q","createPluginState","prefix","pluginOutputPrefix","pluginOutputs","result","key","pluginOutputErrors","pluginModel","pluginAccess","existing","plugins","id","getters","parseQuery","app"],"mappings":"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"}
1
+ {"version":3,"file":"createAppV3.js","names":[],"sources":["../../src/internal/createAppV3.ts"],"sourcesContent":["import { deepClone, delay, uniqueId } from \"@milaboratories/helpers\";\nimport type { Mutable } from \"@milaboratories/helpers\";\nimport type {\n NavigationState,\n BlockOutputsBase,\n BlockStateV3,\n PlatformaV3,\n ValueWithUTag,\n AuthorMarker,\n PlatformaExtended,\n InferPluginHandles,\n PluginHandle,\n InferFactoryData,\n InferFactoryOutputs,\n PluginFactoryLike,\n} from \"@platforma-sdk/model\";\nimport {\n hasAbortError,\n unwrapResult,\n deriveDataFromStorage,\n getPluginData,\n isPluginOutputKey,\n pluginOutputPrefix,\n} from \"@platforma-sdk/model\";\nimport type { Ref } from \"vue\";\nimport { reactive, computed, ref } from \"vue\";\nimport type { OutputValues, OutputErrors, AppSettings } from \"../types\";\nimport { parseQuery } from \"../urls\";\nimport { ensureOutputHasStableFlag, MultiError } from \"../utils\";\nimport { applyPatch } from \"fast-json-patch\";\nimport { UpdateSerializer } from \"./UpdateSerializer\";\nimport { watchIgnorable } from \"@vueuse/core\";\nimport type { PluginState, PluginAccess } from \"../usePlugin\";\n\nexport const patchPoolingDelay = 150;\n\n/** Internal per-plugin state with reconciliation support. */\ninterface InternalPluginState<Data = unknown, Outputs = unknown> extends PluginState<\n Data,\n Outputs\n> {\n readonly ignoreUpdates: (fn: () => void) => void;\n}\n\nexport const createNextAuthorMarker = (marker: AuthorMarker | undefined): AuthorMarker => ({\n authorId: marker?.authorId ?? uniqueId(),\n localVersion: (marker?.localVersion ?? 0) + 1,\n});\n\nconst stringifyForDebug = (v: unknown) => {\n try {\n return JSON.stringify(v, null, 2);\n } catch (err) {\n return err instanceof Error ? err.message : String(err);\n }\n};\n\n/**\n * Creates an application instance with reactive state management, outputs, and methods for state updates and navigation.\n *\n * @template Args - The type of arguments used in the application.\n * @template Outputs - The type of block outputs extending `BlockOutputsBase`.\n * @template Data - The type of the block data.\n * @template Href - The type of navigation href, defaulting to a string starting with `/`.\n *\n * @param state - Initial state of the application, including args, outputs, UI state, and navigation state.\n * @param platforma - A platform interface for interacting with block states.\n * @param settings - Application settings, such as debug flags.\n *\n * @returns A reactive application object with methods, getters, and state.\n */\nexport function createAppV3<\n Data = unknown,\n Args = unknown,\n Outputs extends BlockOutputsBase = BlockOutputsBase,\n Href extends `/${string}` = `/${string}`,\n Plugins extends Record<string, unknown> = Record<string, unknown>,\n>(\n state: ValueWithUTag<BlockStateV3<Data, Outputs, Href>>,\n platforma: PlatformaExtended<PlatformaV3<Data, Args, Outputs, Href, Plugins>>,\n settings: AppSettings,\n) {\n const debug = (msg: string, ...rest: unknown[]) => {\n if (settings.debug) {\n console.log(\n `%c>>> %c${msg}`,\n \"color: orange; font-weight: bold\",\n \"color: orange\",\n ...rest.map((r) => stringifyForDebug(r)),\n );\n }\n };\n\n const error = (msg: string, ...rest: unknown[]) => {\n console.error(\n `%c>>> %c${msg}`,\n \"color: red; font-weight: bold\",\n \"color: red\",\n ...rest.map((r) => stringifyForDebug(r)),\n );\n };\n\n const data = {\n isExternalSnapshot: false,\n author: {\n authorId: uniqueId(),\n localVersion: 0,\n },\n };\n\n const nextAuthorMarker = () => {\n data.author = createNextAuthorMarker(data.author);\n debug(\"nextAuthorMarker\", data.author);\n return data.author;\n };\n\n const closedRef = ref(false);\n\n const uTagRef = ref(state.uTag);\n\n const debounceSpan = settings.debounceSpan ?? 200;\n\n const setDataQueue = new UpdateSerializer({ debounceSpan });\n const pluginDataQueues = new Map<PluginHandle, UpdateSerializer>();\n const getPluginDataQueue = (handle: PluginHandle): UpdateSerializer => {\n let queue = pluginDataQueues.get(handle);\n if (!queue) {\n queue = new UpdateSerializer({ debounceSpan });\n pluginDataQueues.set(handle, queue);\n }\n return queue;\n };\n const setNavigationStateQueue = new UpdateSerializer({ debounceSpan });\n\n /** Lazily-created per-plugin reactive states. */\n const pluginStates = new Map<PluginHandle, InternalPluginState>();\n /**\n * Reactive snapshot of the application state, including args, outputs, UI state, and navigation state.\n */\n const snapshot = ref<{\n outputs: Partial<Outputs>;\n blockStorage: unknown;\n navigationState: NavigationState<Href>;\n }>(state.value) as Ref<{\n outputs: Partial<Outputs>;\n blockStorage: unknown;\n navigationState: NavigationState<Href>;\n }>;\n\n const updateData = async (value: Data) => {\n return platforma.mutateStorage({ operation: \"update-block-data\", value }, nextAuthorMarker());\n };\n\n const updatePluginData = async (handle: PluginHandle, value: unknown) => {\n return platforma.mutateStorage(\n { operation: \"update-plugin-data\", pluginId: handle, value },\n nextAuthorMarker(),\n );\n };\n\n const setNavigationState = async (state: NavigationState<Href>) => {\n return platforma.setNavigationState(state);\n };\n\n const outputs = computed<OutputValues<Outputs>>(() => {\n const entries = Object.entries(snapshot.value.outputs as Partial<Readonly<Outputs>>)\n .filter(([k]) => !isPluginOutputKey(k))\n .map(([k, outputWithStatus]) =>\n platforma.blockModelInfo.outputs[k]?.withStatus\n ? [k, ensureOutputHasStableFlag(outputWithStatus)]\n : [\n k,\n outputWithStatus.ok && outputWithStatus.value !== undefined\n ? outputWithStatus.value\n : undefined,\n ],\n );\n return Object.fromEntries(entries);\n });\n\n const outputErrors = computed<OutputErrors<Outputs>>(() => {\n const entries = Object.entries(snapshot.value.outputs as Partial<Readonly<Outputs>>)\n .filter(([k]) => !isPluginOutputKey(k))\n .map(([k, vOrErr]) => [\n k,\n vOrErr && vOrErr.ok === false ? new MultiError(vOrErr.errors) : undefined,\n ]);\n return Object.fromEntries(entries);\n });\n\n const appModel = reactive({\n apiVersion: 3,\n error: \"\",\n model: {\n data: deepClone(deriveDataFromStorage<Data>(snapshot.value.blockStorage)) as Data,\n outputs,\n outputErrors,\n },\n }) as {\n error: string;\n model: {\n data: Data;\n outputs: OutputValues<Outputs>;\n outputErrors: OutputErrors<Outputs>;\n };\n };\n\n const { ignoreUpdates } = watchIgnorable(\n () => appModel.model,\n (_newData) => {\n const newData = deepClone(_newData);\n debug(\"setDataQueue appModel.model, data\", newData.data);\n setDataQueue.run(() => updateData(newData.data).then(unwrapResult));\n },\n { deep: true },\n );\n\n const updateAppModel = (newData: { data: Data }) => {\n debug(\"updateAppModel\", newData);\n appModel.model.data = deepClone(newData.data) as Data;\n };\n\n (async () => {\n window.addEventListener(\"beforeunload\", () => {\n closedRef.value = true;\n platforma\n .dispose()\n .then(unwrapResult)\n .catch((err) => {\n error(\"error in dispose\", err);\n });\n });\n\n while (!closedRef.value) {\n try {\n const patches = await platforma.getPatches(uTagRef.value).then(unwrapResult);\n\n debug(\"patches.length\", patches.value.length);\n debug(\"uTagRef.value\", uTagRef.value);\n debug(\"patches.uTag\", patches.uTag);\n debug(\"patches.author\", patches.author);\n debug(\"data.author\", data.author);\n\n uTagRef.value = patches.uTag;\n\n if (patches.value.length === 0) {\n await new Promise((resolve) => setTimeout(resolve, patchPoolingDelay));\n continue;\n }\n\n const isAuthorChanged = data.author?.authorId !== patches.author?.authorId;\n\n // Immutable behavior, apply external changes to the snapshot\n if (isAuthorChanged || data.isExternalSnapshot) {\n debug(\"got external changes, applying them to the snapshot\", patches.value);\n ignoreUpdates(() => {\n snapshot.value = applyPatch(snapshot.value, patches.value, false, false).newDocument;\n updateAppModel({ data: deriveDataFromStorage<Data>(snapshot.value.blockStorage) });\n // Reconcile plugin data from external source\n for (const [handle, pluginState] of pluginStates) {\n pluginState.ignoreUpdates(() => {\n pluginState.model.data = deepClone(\n getPluginData(snapshot.value.blockStorage, handle),\n );\n });\n }\n data.isExternalSnapshot = isAuthorChanged;\n });\n } else {\n // Mutable behavior\n debug(\"outputs changed\", patches.value);\n ignoreUpdates(() => {\n snapshot.value = applyPatch(snapshot.value, patches.value).newDocument;\n });\n }\n\n await new Promise((resolve) => setTimeout(resolve, patchPoolingDelay));\n } catch (err) {\n if (hasAbortError(err)) {\n debug(\"patches loop aborted\");\n closedRef.value = true;\n } else {\n error(\"error in patches loop\", err);\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n }\n }\n })();\n\n const cloneData = () => deepClone(appModel.model.data) as Data;\n const cloneNavigationState = () =>\n deepClone(snapshot.value.navigationState) as Mutable<NavigationState<Href>>;\n\n const methods = {\n cloneData,\n cloneNavigationState,\n /**\n * Updates the UI state by applying a callback.\n *\n * @param cb - Callback to modify the current UI state.\n * @returns A promise resolving after the update is applied.\n * @todo Make it mutable since there is already an initial one\n */\n updateData(cb: (data: Data) => Data): Promise<boolean> {\n const newData = cb(cloneData());\n debug(\"updateData\", newData);\n appModel.model.data = newData;\n return setDataQueue.run(() => updateData(newData).then(unwrapResult));\n },\n /**\n * Navigates to a specific href by updating the navigation state.\n *\n * @param href - The target href to navigate to.\n * @returns A promise resolving after the navigation state is updated.\n */\n navigateTo(href: Href) {\n const newState = cloneNavigationState();\n newState.href = href;\n return setNavigationStateQueue.run(() => setNavigationState(newState).then(unwrapResult));\n },\n async allSettled() {\n await delay(0);\n const allQueues = [\n setDataQueue.allSettled(),\n ...Array.from(pluginDataQueues.values()).map((q) => q.allSettled()),\n ];\n await Promise.all(allQueues);\n },\n };\n\n /** Creates a lazily-cached per-plugin reactive state. */\n const createPluginState = <F extends PluginFactoryLike>(\n handle: PluginHandle<F>,\n ): InternalPluginState<InferFactoryData<F>, InferFactoryOutputs<F>> => {\n const prefix = pluginOutputPrefix(handle);\n\n const pluginOutputs = computed(() => {\n const result: Record<string, unknown> = {};\n for (const [key, outputWithStatus] of Object.entries(\n snapshot.value.outputs as Partial<Readonly<Outputs>>,\n )) {\n if (!key.startsWith(prefix)) continue;\n result[key.slice(prefix.length)] =\n outputWithStatus.ok && outputWithStatus.value !== undefined\n ? outputWithStatus.value\n : undefined;\n }\n return result;\n });\n\n const pluginOutputErrors = computed(() => {\n const result: Record<string, Error | undefined> = {};\n for (const [key, vOrErr] of Object.entries(\n snapshot.value.outputs as Partial<Readonly<Outputs>>,\n )) {\n if (!key.startsWith(prefix)) continue;\n result[key.slice(prefix.length)] =\n vOrErr && vOrErr.ok === false ? new MultiError(vOrErr.errors) : undefined;\n }\n return result;\n });\n\n const pluginModel = reactive({\n data: deepClone(getPluginData(snapshot.value.blockStorage, handle)),\n outputs: pluginOutputs,\n outputErrors: pluginOutputErrors,\n }) as InternalPluginState<InferFactoryData<F>, InferFactoryOutputs<F>>[\"model\"];\n\n const { ignoreUpdates } = watchIgnorable(\n () => pluginModel.data,\n (newData) => {\n if (newData === undefined) return;\n debug(\"plugin setData\", handle, newData);\n getPluginDataQueue(handle).run(() =>\n updatePluginData(handle, deepClone(newData)).then(unwrapResult),\n );\n },\n { deep: true },\n );\n\n return {\n model: pluginModel,\n ignoreUpdates,\n };\n };\n\n /** Plugin internals — provided via separate injection key, not exposed on useApp(). */\n const pluginAccess: PluginAccess = {\n getOrCreatePluginState<F extends PluginFactoryLike>(handle: PluginHandle<F>) {\n const existing = pluginStates.get(handle);\n if (existing) {\n return existing as unknown as PluginState<InferFactoryData<F>, InferFactoryOutputs<F>>;\n }\n const state = createPluginState(handle);\n pluginStates.set(handle, state);\n return state;\n },\n };\n\n const plugins = Object.fromEntries(\n platforma.blockModelInfo.pluginIds.map((id) => [id, id]),\n ) as InferPluginHandles<Plugins>;\n\n const getters = {\n closedRef,\n snapshot,\n plugins,\n queryParams: computed(() => parseQuery<Href>(snapshot.value.navigationState.href as Href)),\n href: computed(() => snapshot.value.navigationState.href),\n hasErrors: computed(() =>\n Object.values(snapshot.value.outputs as Partial<Readonly<Outputs>>).some((v) => !v?.ok),\n ),\n };\n\n const app = Object.assign(reactive(Object.assign(appModel, getters)), methods);\n\n if (settings.debug) {\n // @ts-expect-error (to inspect in console in debug mode)\n globalThis.__block_app__ = app;\n }\n\n return { app, pluginAccess };\n}\n\nexport type BaseAppV3<\n Data = unknown,\n Args = unknown,\n Outputs extends BlockOutputsBase = BlockOutputsBase,\n Href extends `/${string}` = `/${string}`,\n Plugins extends Record<string, unknown> = Record<string, unknown>,\n> = ReturnType<typeof createAppV3<Data, Args, Outputs, Href, Plugins>>[\"app\"];\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/internal/test-helpers/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA0B,eAAe,EAAW,MAAM,sBAAsB,CAAC;AAE7F,eAAO,MAAM,qBAAqB,QAAS,MAAM,WAEhD,CAAC;AAIF,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG,eAsD/C,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/internal/test-helpers/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA0B,eAAe,EAAW,MAAM,sBAAsB,CAAC;AAE7F,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,WAEhD,CAAC;AAIF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,eAsD/C,CAAC"}
@@ -0,0 +1 @@
1
+ import "./objects.js";
@@ -1,10 +1,9 @@
1
- function t(r, e) {
2
- return Promise.race([
3
- r,
4
- new Promise((i, o) => setTimeout(() => o(Error(`Timeout exceeded ${e}`)), e))
5
- ]);
1
+ /**
2
+ * A utility to add a timeout to a promise, rejecting the promise if the timeout is exceeded.
3
+ */
4
+ function e(e, t) {
5
+ return Promise.race([e, new Promise((e, n) => setTimeout(() => n(Error(`Timeout exceeded ${t}`)), t))]);
6
6
  }
7
- export {
8
- t as promiseTimeout
9
- };
10
- //# sourceMappingURL=functions.js.map
7
+ export { e as promiseTimeout };
8
+
9
+ //# sourceMappingURL=functions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"functions.js","sources":["../../../../../../../lib/util/helpers/src/functions.ts"],"sourcesContent":["import type { AnyFunction } from \"./types\";\n\nexport function isFunction(value: unknown): value is AnyFunction {\n return typeof value === \"function\";\n}\n\n/**\n * A utility class that ensures asynchronous locks, allowing only one task to proceed at a time.\n */\nexport class AwaitLock {\n private acquired = false;\n private resolvers: (() => void)[] = [];\n\n acquireAsync(): Promise<void> {\n if (!this.acquired) {\n this.acquired = true;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.resolvers.push(resolve);\n });\n }\n\n release(): void {\n if (!this.acquired) {\n throw new Error(\"Cannot release not acquired lock\");\n }\n\n if (this.resolvers.length) {\n this.resolvers.shift()?.();\n } else {\n this.acquired = false;\n }\n }\n}\n\n/**\n * A utility to add a timeout to a promise, rejecting the promise if the timeout is exceeded.\n */\nexport function promiseTimeout<T>(prom: PromiseLike<T>, ms: number): Promise<T> {\n return Promise.race<T>([\n prom,\n new Promise((_r, reject) => setTimeout(() => reject(Error(`Timeout exceeded ${ms}`)), ms)),\n ]);\n}\n\n/**\n * Debounce utility: delays the execution of a function until a certain time has passed since the last call.\n * @param callback\n * @param ms\n * @param immediate (if first call is required)\n * @returns\n */\nexport function debounce<F extends AnyFunction>(\n callback: F,\n ms: number,\n immediate?: boolean,\n): (...args: Parameters<F>) => void {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n return function (this: unknown, ...args: Parameters<F>) {\n const i = immediate && !timeout;\n if (i) {\n callback.apply(this, args);\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n timeout = undefined;\n if (!i) {\n callback.apply(this, args);\n }\n }, ms);\n };\n}\n\n/**\n * Throttle utility: ensures a function is called at most once every `ms` milliseconds.\n * @param callback\n * @param ms milliseconds\n * @param trailing (ensure last call)\n * @returns\n */\nexport function throttle<F extends AnyFunction>(\n callback: F,\n ms: number,\n trailing = true,\n): (...args: Parameters<F>) => void {\n let t = 0,\n call: AnyFunction | null;\n return function (this: unknown, ...args: Parameters<F>) {\n call = () => {\n callback.apply(this, args);\n t = new Date().getTime() + ms;\n call = null;\n if (trailing) {\n setTimeout(() => {\n call?.();\n }, ms);\n }\n };\n if (new Date().getTime() > t) call();\n };\n}\n\n/**\n * Memoization utility: caches results of function calls based on their arguments to avoid redundant calculations.\n */\nexport const memoize = <F extends AnyFunction>(fn: F) => {\n const cache = new Map();\n return function (...args: Parameters<F>): ReturnType<F> {\n const key = JSON.stringify(args);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return cache.has(key)\n ? cache.get(key)\n : cache.set(key, fn.call(null, ...args)) && cache.get(key);\n };\n};\n\n/**\n * Function wrapper utility: executes a function before the main function is called.\n */\nexport const wrapFunction = <T extends unknown[], U>(fn: (...args: T) => U, before: () => void) => {\n return (...args: T): U => {\n before();\n return fn(...args);\n };\n};\n\n/**\n * Function piping utility: allows chaining of functions by passing the result of one as input to another\n */\nexport function pipe<A, B>(cb: (a: A) => B) {\n const fn = (a: A) => cb(a);\n\n fn.pipe = <C>(next: (b: B) => C) => pipe((a: A) => next(cb(a)));\n\n return fn;\n}\n\n/**\n * Ensures that only one request can be processed at a time.\n */\nexport function exclusiveRequest<A, R>(request: (...args: A[]) => Promise<R>) {\n let counter = 0n;\n let ongoingOperation: Promise<R> | undefined;\n\n return async function (...params: A[]): Promise<\n | {\n ok: false;\n }\n | {\n ok: true;\n value: R;\n }\n > {\n const myId = ++counter;\n\n try {\n await ongoingOperation;\n } catch {\n // ignoring the error here, original caller will receive any rejections\n }\n\n // checking that this update is still the most recent\n if (counter !== myId) {\n return {\n ok: false,\n };\n }\n\n const promise = request(...params);\n\n ongoingOperation = promise;\n\n const value = await promise;\n\n return {\n ok: true,\n value,\n };\n };\n}\n\nexport function tryDo<R1>(fn: () => R1): R1 | undefined;\nexport function tryDo<R1, R2>(fn: () => R1, fallback: (cause: unknown) => R2): R1 | R2;\nexport function tryDo(fn: () => unknown, fallback?: (cause: unknown) => unknown) {\n try {\n return fn();\n } catch (cause: unknown) {\n return fallback?.(cause);\n }\n}\n"],"names":["promiseTimeout","prom","ms","_r","reject"],"mappings":"AAwCM,SAAUA,EAAkBC,GAAsBC,GAAU;AAChE,SAAO,QAAQ,KAAQ;AAAA,IACrBD;AAAA,IACA,IAAI,QAAQ,CAACE,GAAIC,MAAW,WAAW,MAAMA,EAAO,MAAM,oBAAoBF,CAAE,EAAE,CAAC,GAAGA,CAAE,CAAC;AAAA,EAC1F,CAAA;AACH;"}
1
+ {"version":3,"file":"functions.js","names":[],"sources":["../../../../../../../lib/util/helpers/src/functions.ts"],"sourcesContent":["import type { AnyFunction } from \"./types\";\n\nexport function isFunction(value: unknown): value is AnyFunction {\n return typeof value === \"function\";\n}\n\n/**\n * A utility class that ensures asynchronous locks, allowing only one task to proceed at a time.\n */\nexport class AwaitLock {\n private acquired = false;\n private resolvers: (() => void)[] = [];\n\n acquireAsync(): Promise<void> {\n if (!this.acquired) {\n this.acquired = true;\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n this.resolvers.push(resolve);\n });\n }\n\n release(): void {\n if (!this.acquired) {\n throw new Error(\"Cannot release not acquired lock\");\n }\n\n if (this.resolvers.length) {\n this.resolvers.shift()?.();\n } else {\n this.acquired = false;\n }\n }\n}\n\n/**\n * A utility to add a timeout to a promise, rejecting the promise if the timeout is exceeded.\n */\nexport function promiseTimeout<T>(prom: PromiseLike<T>, ms: number): Promise<T> {\n return Promise.race<T>([\n prom,\n new Promise((_r, reject) => setTimeout(() => reject(Error(`Timeout exceeded ${ms}`)), ms)),\n ]);\n}\n\n/**\n * Debounce utility: delays the execution of a function until a certain time has passed since the last call.\n * @param callback\n * @param ms\n * @param immediate (if first call is required)\n * @returns\n */\nexport function debounce<F extends AnyFunction>(\n callback: F,\n ms: number,\n immediate?: boolean,\n): (...args: Parameters<F>) => void {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n return function (this: unknown, ...args: Parameters<F>) {\n const i = immediate && !timeout;\n if (i) {\n callback.apply(this, args);\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n timeout = undefined;\n if (!i) {\n callback.apply(this, args);\n }\n }, ms);\n };\n}\n\n/**\n * Throttle utility: ensures a function is called at most once every `ms` milliseconds.\n * @param callback\n * @param ms milliseconds\n * @param trailing (ensure last call)\n * @returns\n */\nexport function throttle<F extends AnyFunction>(\n callback: F,\n ms: number,\n trailing = true,\n): (...args: Parameters<F>) => void {\n let t = 0,\n call: AnyFunction | null;\n return function (this: unknown, ...args: Parameters<F>) {\n call = () => {\n callback.apply(this, args);\n t = new Date().getTime() + ms;\n call = null;\n if (trailing) {\n setTimeout(() => {\n call?.();\n }, ms);\n }\n };\n if (new Date().getTime() > t) call();\n };\n}\n\n/**\n * Memoization utility: caches results of function calls based on their arguments to avoid redundant calculations.\n */\nexport const memoize = <F extends AnyFunction>(fn: F) => {\n const cache = new Map();\n return function (...args: Parameters<F>): ReturnType<F> {\n const key = JSON.stringify(args);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return cache.has(key)\n ? cache.get(key)\n : cache.set(key, fn.call(null, ...args)) && cache.get(key);\n };\n};\n\n/**\n * Function wrapper utility: executes a function before the main function is called.\n */\nexport const wrapFunction = <T extends unknown[], U>(fn: (...args: T) => U, before: () => void) => {\n return (...args: T): U => {\n before();\n return fn(...args);\n };\n};\n\n/**\n * Function piping utility: allows chaining of functions by passing the result of one as input to another\n */\nexport function pipe<A, B>(cb: (a: A) => B) {\n const fn = (a: A) => cb(a);\n\n fn.pipe = <C>(next: (b: B) => C) => pipe((a: A) => next(cb(a)));\n\n return fn;\n}\n\n/**\n * Ensures that only one request can be processed at a time.\n */\nexport function exclusiveRequest<A, R>(request: (...args: A[]) => Promise<R>) {\n let counter = 0n;\n let ongoingOperation: Promise<R> | undefined;\n\n return async function (...params: A[]): Promise<\n | {\n ok: false;\n }\n | {\n ok: true;\n value: R;\n }\n > {\n const myId = ++counter;\n\n try {\n await ongoingOperation;\n } catch {\n // ignoring the error here, original caller will receive any rejections\n }\n\n // checking that this update is still the most recent\n if (counter !== myId) {\n return {\n ok: false,\n };\n }\n\n const promise = request(...params);\n\n ongoingOperation = promise;\n\n const value = await promise;\n\n return {\n ok: true,\n value,\n };\n };\n}\n\nexport function tryDo<R1>(fn: () => R1): R1 | undefined;\nexport function tryDo<R1, R2>(fn: () => R1, fallback: (cause: unknown) => R2): R1 | R2;\nexport function tryDo(fn: () => unknown, fallback?: (cause: unknown) => unknown) {\n try {\n return fn();\n } catch (cause: unknown) {\n return fallback?.(cause);\n }\n}\n"],"mappings":";;;AAwCA,SAAgB,EAAkB,GAAsB,GAAwB;AAC9E,QAAO,QAAQ,KAAQ,CACrB,GACA,IAAI,SAAS,GAAI,MAAW,iBAAiB,EAAO,MAAM,oBAAoB,IAAK,CAAC,EAAE,EAAG,CAAC,CAC3F,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "./utils.js";
2
+ import { createGetIncrementalId as e } from "./uniqId.js";
3
+ e();
4
+
5
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","names":[],"sources":["../../../../../../../lib/util/helpers/src/hash.ts"],"sourcesContent":["import { createGetIncrementalId } from \"./uniqId\";\nimport { isPrimitive } from \"./utils\";\n\nexport function hashString(str: string, seed = 0): number {\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n}\n\nexport function shallowHash(...values: unknown[]): number {\n let str = \"\";\n\n for (let i = 0; i < values.length; i += 1) {\n const value = values[i];\n\n if (isPrimitive(value)) {\n str += \"/\" + String(value);\n } else {\n str += \"/\" + getIdForPointer(value as object);\n }\n }\n\n return hashString(str);\n}\n\nconst mapPointerToMap = new WeakMap<object, string>();\nconst getIncrementalId = createGetIncrementalId();\n\nfunction getIdForPointer(obj: object): string {\n if (!mapPointerToMap.has(obj)) {\n mapPointerToMap.set(obj, getIncrementalId().toString());\n }\n\n return mapPointerToMap.get(obj)!;\n}\n"],"mappings":";;AAmCyB,GAAwB"}
@@ -0,0 +1,9 @@
1
+ import "./utils.js";
2
+ import "./strings.js";
3
+ import "./objects.js";
4
+ import "./functions.js";
5
+ import "./prettyBytes.js";
6
+ import "./error.js";
7
+ import "./uniqId.js";
8
+ import "./hash.js";
9
+ import "./random.js";