@milaboratories/pl-middle-layer 1.42.1 → 1.42.3

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 (410) hide show
  1. package/dist/block_registry/index.d.ts +0 -1
  2. package/dist/block_registry/registry-v2-provider.cjs +22 -0
  3. package/dist/block_registry/registry-v2-provider.cjs.map +1 -0
  4. package/dist/block_registry/registry-v2-provider.d.ts +0 -1
  5. package/dist/block_registry/registry-v2-provider.js +20 -0
  6. package/dist/block_registry/registry-v2-provider.js.map +1 -0
  7. package/dist/block_registry/registry.cjs +231 -0
  8. package/dist/block_registry/registry.cjs.map +1 -0
  9. package/dist/block_registry/registry.d.ts +0 -1
  10. package/dist/block_registry/registry.js +227 -0
  11. package/dist/block_registry/registry.js.map +1 -0
  12. package/dist/block_registry/registry.test.d.ts +0 -1
  13. package/dist/block_registry/watcher.cjs +174 -0
  14. package/dist/block_registry/watcher.cjs.map +1 -0
  15. package/dist/block_registry/watcher.d.ts +0 -1
  16. package/dist/block_registry/watcher.js +171 -0
  17. package/dist/block_registry/watcher.js.map +1 -0
  18. package/dist/block_registry/well_known_registries.cjs +19 -0
  19. package/dist/block_registry/well_known_registries.cjs.map +1 -0
  20. package/dist/block_registry/well_known_registries.d.ts +0 -1
  21. package/dist/block_registry/well_known_registries.js +15 -0
  22. package/dist/block_registry/well_known_registries.js.map +1 -0
  23. package/dist/cfg_render/executor.cjs +159 -0
  24. package/dist/cfg_render/executor.cjs.map +1 -0
  25. package/dist/cfg_render/executor.d.ts +0 -1
  26. package/dist/cfg_render/executor.js +156 -0
  27. package/dist/cfg_render/executor.js.map +1 -0
  28. package/dist/cfg_render/executor.test.d.ts +0 -1
  29. package/dist/cfg_render/operation.d.ts +0 -1
  30. package/dist/cfg_render/renderer.cjs +528 -0
  31. package/dist/cfg_render/renderer.cjs.map +1 -0
  32. package/dist/cfg_render/renderer.d.ts +0 -1
  33. package/dist/cfg_render/renderer.js +525 -0
  34. package/dist/cfg_render/renderer.js.map +1 -0
  35. package/dist/cfg_render/traverse.cjs +65 -0
  36. package/dist/cfg_render/traverse.cjs.map +1 -0
  37. package/dist/cfg_render/traverse.d.ts +0 -1
  38. package/dist/cfg_render/traverse.js +63 -0
  39. package/dist/cfg_render/traverse.js.map +1 -0
  40. package/dist/cfg_render/util.cjs +32 -0
  41. package/dist/cfg_render/util.cjs.map +1 -0
  42. package/dist/cfg_render/util.d.ts +0 -1
  43. package/dist/cfg_render/util.js +28 -0
  44. package/dist/cfg_render/util.js.map +1 -0
  45. package/dist/debug/index.cjs +21 -0
  46. package/dist/debug/index.cjs.map +1 -0
  47. package/dist/debug/index.d.ts +0 -1
  48. package/dist/debug/index.js +19 -0
  49. package/dist/debug/index.js.map +1 -0
  50. package/dist/dev_env/index.cjs +59 -0
  51. package/dist/dev_env/index.cjs.map +1 -0
  52. package/dist/dev_env/index.d.ts +0 -1
  53. package/dist/dev_env/index.js +48 -0
  54. package/dist/dev_env/index.js.map +1 -0
  55. package/dist/dev_env/util.cjs +37 -0
  56. package/dist/dev_env/util.cjs.map +1 -0
  57. package/dist/dev_env/util.d.ts +0 -1
  58. package/dist/dev_env/util.js +16 -0
  59. package/dist/dev_env/util.js.map +1 -0
  60. package/dist/index.cjs +74 -0
  61. package/dist/index.cjs.map +1 -0
  62. package/dist/index.d.ts +0 -1
  63. package/dist/index.js +15 -75
  64. package/dist/index.js.map +1 -1
  65. package/dist/js_render/computable_context.cjs +525 -0
  66. package/dist/js_render/computable_context.cjs.map +1 -0
  67. package/dist/js_render/computable_context.d.ts +0 -1
  68. package/dist/js_render/computable_context.js +523 -0
  69. package/dist/js_render/computable_context.js.map +1 -0
  70. package/dist/js_render/context.cjs +229 -0
  71. package/dist/js_render/context.cjs.map +1 -0
  72. package/dist/js_render/context.d.ts +0 -1
  73. package/dist/js_render/context.js +226 -0
  74. package/dist/js_render/context.js.map +1 -0
  75. package/dist/js_render/index.cjs +163 -0
  76. package/dist/js_render/index.cjs.map +1 -0
  77. package/dist/js_render/index.d.ts +0 -1
  78. package/dist/js_render/index.js +160 -0
  79. package/dist/js_render/index.js.map +1 -0
  80. package/dist/middle_layer/active_cfg.cjs +37 -0
  81. package/dist/middle_layer/active_cfg.cjs.map +1 -0
  82. package/dist/middle_layer/active_cfg.d.ts +0 -1
  83. package/dist/middle_layer/active_cfg.js +35 -0
  84. package/dist/middle_layer/active_cfg.js.map +1 -0
  85. package/dist/middle_layer/block.cjs +51 -0
  86. package/dist/middle_layer/block.cjs.map +1 -0
  87. package/dist/middle_layer/block.d.ts +0 -1
  88. package/dist/middle_layer/block.js +48 -0
  89. package/dist/middle_layer/block.js.map +1 -0
  90. package/dist/middle_layer/block_ctx.cjs +87 -0
  91. package/dist/middle_layer/block_ctx.cjs.map +1 -0
  92. package/dist/middle_layer/block_ctx.d.ts +0 -1
  93. package/dist/middle_layer/block_ctx.js +84 -0
  94. package/dist/middle_layer/block_ctx.js.map +1 -0
  95. package/dist/middle_layer/block_ctx_unsafe.cjs +19 -0
  96. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -0
  97. package/dist/middle_layer/block_ctx_unsafe.d.ts +0 -1
  98. package/dist/middle_layer/block_ctx_unsafe.js +16 -0
  99. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -0
  100. package/dist/middle_layer/driver_kit.cjs +42 -0
  101. package/dist/middle_layer/driver_kit.cjs.map +1 -0
  102. package/dist/middle_layer/driver_kit.d.ts +0 -1
  103. package/dist/middle_layer/driver_kit.js +40 -0
  104. package/dist/middle_layer/driver_kit.js.map +1 -0
  105. package/dist/middle_layer/frontend_path.cjs +64 -0
  106. package/dist/middle_layer/frontend_path.cjs.map +1 -0
  107. package/dist/middle_layer/frontend_path.d.ts +0 -1
  108. package/dist/middle_layer/frontend_path.js +62 -0
  109. package/dist/middle_layer/frontend_path.js.map +1 -0
  110. package/dist/middle_layer/index.d.ts +0 -1
  111. package/dist/middle_layer/middle_layer.cjs +226 -0
  112. package/dist/middle_layer/middle_layer.cjs.map +1 -0
  113. package/dist/middle_layer/middle_layer.d.ts +0 -1
  114. package/dist/middle_layer/middle_layer.js +224 -0
  115. package/dist/middle_layer/middle_layer.js.map +1 -0
  116. package/dist/middle_layer/navigation_states.cjs +41 -0
  117. package/dist/middle_layer/navigation_states.cjs.map +1 -0
  118. package/dist/middle_layer/navigation_states.d.ts +0 -1
  119. package/dist/middle_layer/navigation_states.js +39 -0
  120. package/dist/middle_layer/navigation_states.js.map +1 -0
  121. package/dist/middle_layer/ops.cjs +75 -0
  122. package/dist/middle_layer/ops.cjs.map +1 -0
  123. package/dist/middle_layer/ops.d.ts +0 -1
  124. package/dist/middle_layer/ops.js +70 -0
  125. package/dist/middle_layer/ops.js.map +1 -0
  126. package/dist/middle_layer/project.cjs +446 -0
  127. package/dist/middle_layer/project.cjs.map +1 -0
  128. package/dist/middle_layer/project.d.ts +0 -1
  129. package/dist/middle_layer/project.js +444 -0
  130. package/dist/middle_layer/project.js.map +1 -0
  131. package/dist/middle_layer/project_list.cjs +53 -0
  132. package/dist/middle_layer/project_list.cjs.map +1 -0
  133. package/dist/middle_layer/project_list.d.ts +0 -1
  134. package/dist/middle_layer/project_list.js +48 -0
  135. package/dist/middle_layer/project_list.js.map +1 -0
  136. package/dist/middle_layer/project_overview.cjs +225 -0
  137. package/dist/middle_layer/project_overview.cjs.map +1 -0
  138. package/dist/middle_layer/project_overview.d.ts +0 -1
  139. package/dist/middle_layer/project_overview.js +204 -0
  140. package/dist/middle_layer/project_overview.js.map +1 -0
  141. package/dist/middle_layer/project_overview_light.cjs +20 -0
  142. package/dist/middle_layer/project_overview_light.cjs.map +1 -0
  143. package/dist/middle_layer/project_overview_light.d.ts +0 -1
  144. package/dist/middle_layer/project_overview_light.js +18 -0
  145. package/dist/middle_layer/project_overview_light.js.map +1 -0
  146. package/dist/middle_layer/render.cjs +26 -0
  147. package/dist/middle_layer/render.cjs.map +1 -0
  148. package/dist/middle_layer/render.d.ts +0 -1
  149. package/dist/middle_layer/render.js +23 -0
  150. package/dist/middle_layer/render.js.map +1 -0
  151. package/dist/middle_layer/render.test.d.ts +0 -1
  152. package/dist/middle_layer/types.d.ts +0 -1
  153. package/dist/middle_layer/util.cjs +22 -0
  154. package/dist/middle_layer/util.cjs.map +1 -0
  155. package/dist/middle_layer/util.d.ts +0 -1
  156. package/dist/middle_layer/util.js +20 -0
  157. package/dist/middle_layer/util.js.map +1 -0
  158. package/dist/model/args.cjs +62 -0
  159. package/dist/model/args.cjs.map +1 -0
  160. package/dist/model/args.d.ts +0 -1
  161. package/dist/model/args.js +58 -0
  162. package/dist/model/args.js.map +1 -0
  163. package/dist/model/block_pack.d.ts +0 -1
  164. package/dist/model/block_pack_spec.cjs +11 -0
  165. package/dist/model/block_pack_spec.cjs.map +1 -0
  166. package/dist/model/block_pack_spec.d.ts +0 -1
  167. package/dist/model/block_pack_spec.js +8 -0
  168. package/dist/model/block_pack_spec.js.map +1 -0
  169. package/dist/model/frontend.d.ts +0 -1
  170. package/dist/model/index.d.ts +0 -1
  171. package/dist/model/project_helper.cjs +36 -0
  172. package/dist/model/project_helper.cjs.map +1 -0
  173. package/dist/model/project_helper.d.ts +0 -1
  174. package/dist/model/project_helper.js +34 -0
  175. package/dist/model/project_helper.js.map +1 -0
  176. package/dist/model/project_model.cjs +74 -0
  177. package/dist/model/project_model.cjs.map +1 -0
  178. package/dist/model/project_model.d.ts +0 -1
  179. package/dist/model/project_model.js +54 -0
  180. package/dist/model/project_model.js.map +1 -0
  181. package/dist/model/project_model.test.d.ts +0 -1
  182. package/dist/model/project_model_util.cjs +176 -0
  183. package/dist/model/project_model_util.cjs.map +1 -0
  184. package/dist/model/project_model_util.d.ts +0 -1
  185. package/dist/model/project_model_util.js +170 -0
  186. package/dist/model/project_model_util.js.map +1 -0
  187. package/dist/model/project_model_util.test.d.ts +0 -1
  188. package/dist/model/project_model_v1.cjs +9 -0
  189. package/dist/model/project_model_v1.cjs.map +1 -0
  190. package/dist/model/project_model_v1.d.ts +0 -1
  191. package/dist/model/project_model_v1.js +6 -0
  192. package/dist/model/project_model_v1.js.map +1 -0
  193. package/dist/model/template_spec.d.ts +0 -1
  194. package/dist/mutator/block-pack/block_pack.cjs +233 -0
  195. package/dist/mutator/block-pack/block_pack.cjs.map +1 -0
  196. package/dist/mutator/block-pack/block_pack.d.ts +0 -1
  197. package/dist/mutator/block-pack/block_pack.js +227 -0
  198. package/dist/mutator/block-pack/block_pack.js.map +1 -0
  199. package/dist/mutator/block-pack/block_pack.test.d.ts +0 -1
  200. package/dist/mutator/block-pack/frontend.cjs +21 -0
  201. package/dist/mutator/block-pack/frontend.cjs.map +1 -0
  202. package/dist/mutator/block-pack/frontend.d.ts +0 -1
  203. package/dist/mutator/block-pack/frontend.js +19 -0
  204. package/dist/mutator/block-pack/frontend.js.map +1 -0
  205. package/dist/mutator/context_export.cjs +26 -0
  206. package/dist/mutator/context_export.cjs.map +1 -0
  207. package/dist/mutator/context_export.d.ts +2 -3
  208. package/dist/mutator/context_export.js +23 -0
  209. package/dist/mutator/context_export.js.map +1 -0
  210. package/dist/mutator/migration.cjs +57 -0
  211. package/dist/mutator/migration.cjs.map +1 -0
  212. package/dist/mutator/migration.d.ts +0 -1
  213. package/dist/mutator/migration.js +55 -0
  214. package/dist/mutator/migration.js.map +1 -0
  215. package/dist/mutator/project.cjs +997 -0
  216. package/dist/mutator/project.cjs.map +1 -0
  217. package/dist/mutator/project.d.ts +0 -1
  218. package/dist/mutator/project.js +992 -0
  219. package/dist/mutator/project.js.map +1 -0
  220. package/dist/mutator/project.test.d.ts +0 -1
  221. package/dist/mutator/template/direct_template_loader.cjs +146 -0
  222. package/dist/mutator/template/direct_template_loader.cjs.map +1 -0
  223. package/dist/mutator/template/direct_template_loader.d.ts +0 -1
  224. package/dist/mutator/template/direct_template_loader.js +143 -0
  225. package/dist/mutator/template/direct_template_loader.js.map +1 -0
  226. package/dist/mutator/template/direct_template_loader_v3.cjs +139 -0
  227. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -0
  228. package/dist/mutator/template/direct_template_loader_v3.d.ts +0 -1
  229. package/dist/mutator/template/direct_template_loader_v3.js +137 -0
  230. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -0
  231. package/dist/mutator/template/render_block.cjs +43 -0
  232. package/dist/mutator/template/render_block.cjs.map +1 -0
  233. package/dist/mutator/template/render_block.d.ts +0 -1
  234. package/dist/mutator/template/render_block.js +34 -0
  235. package/dist/mutator/template/render_block.js.map +1 -0
  236. package/dist/mutator/template/render_template.cjs +35 -0
  237. package/dist/mutator/template/render_template.cjs.map +1 -0
  238. package/dist/mutator/template/render_template.d.ts +0 -1
  239. package/dist/mutator/template/render_template.js +33 -0
  240. package/dist/mutator/template/render_template.js.map +1 -0
  241. package/dist/mutator/template/template_loading.cjs +71 -0
  242. package/dist/mutator/template/template_loading.cjs.map +1 -0
  243. package/dist/mutator/template/template_loading.d.ts +0 -1
  244. package/dist/mutator/template/template_loading.js +60 -0
  245. package/dist/mutator/template/template_loading.js.map +1 -0
  246. package/dist/mutator/template/template_render.test.d.ts +0 -1
  247. package/dist/network_check/network_check.cjs +267 -0
  248. package/dist/network_check/network_check.cjs.map +1 -0
  249. package/dist/network_check/network_check.d.ts +0 -1
  250. package/dist/network_check/network_check.js +264 -0
  251. package/dist/network_check/network_check.js.map +1 -0
  252. package/dist/network_check/network_check.test.d.ts +0 -1
  253. package/dist/network_check/pings.cjs +107 -0
  254. package/dist/network_check/pings.cjs.map +1 -0
  255. package/dist/network_check/pings.d.ts +0 -1
  256. package/dist/network_check/pings.js +96 -0
  257. package/dist/network_check/pings.js.map +1 -0
  258. package/dist/network_check/template.cjs +318 -0
  259. package/dist/network_check/template.cjs.map +1 -0
  260. package/dist/network_check/template.d.ts +0 -1
  261. package/dist/network_check/template.js +302 -0
  262. package/dist/network_check/template.js.map +1 -0
  263. package/dist/network_check/template.test.d.ts +0 -1
  264. package/dist/network_check/test_utils.d.ts +0 -1
  265. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs +77 -0
  266. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.cjs.map +1 -0
  267. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js +74 -0
  268. package/dist/node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.45.1_tslib@2.7.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js.map +1 -0
  269. package/dist/pool/data.cjs +298 -0
  270. package/dist/pool/data.cjs.map +1 -0
  271. package/dist/pool/data.d.ts +7 -9
  272. package/dist/pool/data.js +282 -0
  273. package/dist/pool/data.js.map +1 -0
  274. package/dist/pool/driver.cjs +620 -0
  275. package/dist/pool/driver.cjs.map +1 -0
  276. package/dist/pool/driver.d.ts +0 -1
  277. package/dist/pool/driver.js +598 -0
  278. package/dist/pool/driver.js.map +1 -0
  279. package/dist/pool/index.d.ts +0 -1
  280. package/dist/pool/p_object_collection.cjs +87 -0
  281. package/dist/pool/p_object_collection.cjs.map +1 -0
  282. package/dist/pool/p_object_collection.d.ts +0 -1
  283. package/dist/pool/p_object_collection.js +84 -0
  284. package/dist/pool/p_object_collection.js.map +1 -0
  285. package/dist/pool/ref_count_pool.cjs +58 -0
  286. package/dist/pool/ref_count_pool.cjs.map +1 -0
  287. package/dist/pool/ref_count_pool.d.ts +0 -1
  288. package/dist/pool/ref_count_pool.js +56 -0
  289. package/dist/pool/ref_count_pool.js.map +1 -0
  290. package/dist/pool/result_pool.cjs +265 -0
  291. package/dist/pool/result_pool.cjs.map +1 -0
  292. package/dist/pool/result_pool.d.ts +0 -1
  293. package/dist/pool/result_pool.js +263 -0
  294. package/dist/pool/result_pool.js.map +1 -0
  295. package/dist/test/block_packs.d.ts +0 -1
  296. package/dist/test/explicit_templates.d.ts +0 -1
  297. package/dist/test/known_templates.d.ts +0 -1
  298. package/dist/test_env.d.ts +0 -1
  299. package/dist/worker/WorkerManager.cjs +53 -0
  300. package/dist/worker/WorkerManager.cjs.map +1 -0
  301. package/dist/worker/WorkerManager.d.ts +0 -1
  302. package/dist/worker/WorkerManager.js +51 -0
  303. package/dist/worker/WorkerManager.js.map +1 -0
  304. package/dist/worker/worker.cjs +16 -0
  305. package/dist/worker/worker.cjs.map +1 -0
  306. package/dist/worker/worker.d.ts +0 -1
  307. package/dist/worker/worker.js +14 -0
  308. package/dist/worker/worker.js.map +1 -0
  309. package/dist/worker/workerApi.cjs +20 -0
  310. package/dist/worker/workerApi.cjs.map +1 -0
  311. package/dist/worker/workerApi.d.ts +1 -3
  312. package/dist/worker/workerApi.js +18 -0
  313. package/dist/worker/workerApi.js.map +1 -0
  314. package/package.json +26 -34
  315. package/src/cfg_render/executor.test.ts +5 -4
  316. package/src/model/project_model.test.ts +3 -3
  317. package/src/model/project_model_util.test.ts +3 -2
  318. package/src/mutator/block-pack/block_pack.test.ts +5 -4
  319. package/src/mutator/project.test.ts +4 -4
  320. package/src/mutator/template/template_render.test.ts +7 -6
  321. package/src/network_check/network_check.test.ts +1 -0
  322. package/src/network_check/test_utils.ts +2 -0
  323. package/src/worker/WorkerManager.ts +6 -8
  324. package/dist/block_registry/index.d.ts.map +0 -1
  325. package/dist/block_registry/registry-v2-provider.d.ts.map +0 -1
  326. package/dist/block_registry/registry.d.ts.map +0 -1
  327. package/dist/block_registry/registry.test.d.ts.map +0 -1
  328. package/dist/block_registry/watcher.d.ts.map +0 -1
  329. package/dist/block_registry/well_known_registries.d.ts.map +0 -1
  330. package/dist/cfg_render/executor.d.ts.map +0 -1
  331. package/dist/cfg_render/executor.test.d.ts.map +0 -1
  332. package/dist/cfg_render/operation.d.ts.map +0 -1
  333. package/dist/cfg_render/renderer.d.ts.map +0 -1
  334. package/dist/cfg_render/traverse.d.ts.map +0 -1
  335. package/dist/cfg_render/util.d.ts.map +0 -1
  336. package/dist/debug/index.d.ts.map +0 -1
  337. package/dist/dev_env/index.d.ts.map +0 -1
  338. package/dist/dev_env/util.d.ts.map +0 -1
  339. package/dist/index.d.ts.map +0 -1
  340. package/dist/index.mjs +0 -6742
  341. package/dist/index.mjs.map +0 -1
  342. package/dist/js_render/computable_context.d.ts.map +0 -1
  343. package/dist/js_render/context.d.ts.map +0 -1
  344. package/dist/js_render/index.d.ts.map +0 -1
  345. package/dist/middle_layer/active_cfg.d.ts.map +0 -1
  346. package/dist/middle_layer/block.d.ts.map +0 -1
  347. package/dist/middle_layer/block_ctx.d.ts.map +0 -1
  348. package/dist/middle_layer/block_ctx_unsafe.d.ts.map +0 -1
  349. package/dist/middle_layer/driver_kit.d.ts.map +0 -1
  350. package/dist/middle_layer/frontend_path.d.ts.map +0 -1
  351. package/dist/middle_layer/index.d.ts.map +0 -1
  352. package/dist/middle_layer/middle_layer.d.ts.map +0 -1
  353. package/dist/middle_layer/navigation_states.d.ts.map +0 -1
  354. package/dist/middle_layer/ops.d.ts.map +0 -1
  355. package/dist/middle_layer/project.d.ts.map +0 -1
  356. package/dist/middle_layer/project_list.d.ts.map +0 -1
  357. package/dist/middle_layer/project_overview.d.ts.map +0 -1
  358. package/dist/middle_layer/project_overview_light.d.ts.map +0 -1
  359. package/dist/middle_layer/render.d.ts.map +0 -1
  360. package/dist/middle_layer/render.test.d.ts.map +0 -1
  361. package/dist/middle_layer/types.d.ts.map +0 -1
  362. package/dist/middle_layer/util.d.ts.map +0 -1
  363. package/dist/model/args.d.ts.map +0 -1
  364. package/dist/model/block_pack.d.ts.map +0 -1
  365. package/dist/model/block_pack_spec.d.ts.map +0 -1
  366. package/dist/model/frontend.d.ts.map +0 -1
  367. package/dist/model/index.d.ts.map +0 -1
  368. package/dist/model/project_helper.d.ts.map +0 -1
  369. package/dist/model/project_model.d.ts.map +0 -1
  370. package/dist/model/project_model.test.d.ts.map +0 -1
  371. package/dist/model/project_model_util.d.ts.map +0 -1
  372. package/dist/model/project_model_util.test.d.ts.map +0 -1
  373. package/dist/model/project_model_v1.d.ts.map +0 -1
  374. package/dist/model/template_spec.d.ts.map +0 -1
  375. package/dist/mutator/block-pack/block_pack.d.ts.map +0 -1
  376. package/dist/mutator/block-pack/block_pack.test.d.ts.map +0 -1
  377. package/dist/mutator/block-pack/frontend.d.ts.map +0 -1
  378. package/dist/mutator/context_export.d.ts.map +0 -1
  379. package/dist/mutator/migration.d.ts.map +0 -1
  380. package/dist/mutator/project.d.ts.map +0 -1
  381. package/dist/mutator/project.test.d.ts.map +0 -1
  382. package/dist/mutator/template/direct_template_loader.d.ts.map +0 -1
  383. package/dist/mutator/template/direct_template_loader_v3.d.ts.map +0 -1
  384. package/dist/mutator/template/render_block.d.ts.map +0 -1
  385. package/dist/mutator/template/render_template.d.ts.map +0 -1
  386. package/dist/mutator/template/template_loading.d.ts.map +0 -1
  387. package/dist/mutator/template/template_render.test.d.ts.map +0 -1
  388. package/dist/network_check/network_check.d.ts.map +0 -1
  389. package/dist/network_check/network_check.test.d.ts.map +0 -1
  390. package/dist/network_check/pings.d.ts.map +0 -1
  391. package/dist/network_check/template.d.ts.map +0 -1
  392. package/dist/network_check/template.test.d.ts.map +0 -1
  393. package/dist/network_check/test_utils.d.ts.map +0 -1
  394. package/dist/pool/data.d.ts.map +0 -1
  395. package/dist/pool/driver.d.ts.map +0 -1
  396. package/dist/pool/index.d.ts.map +0 -1
  397. package/dist/pool/p_object_collection.d.ts.map +0 -1
  398. package/dist/pool/ref_count_pool.d.ts.map +0 -1
  399. package/dist/pool/result_pool.d.ts.map +0 -1
  400. package/dist/test/block_packs.d.ts.map +0 -1
  401. package/dist/test/explicit_templates.d.ts.map +0 -1
  402. package/dist/test/known_templates.d.ts.map +0 -1
  403. package/dist/test_env.d.ts.map +0 -1
  404. package/dist/worker/WorkerManager.d.ts.map +0 -1
  405. package/dist/worker/worker.d.ts.map +0 -1
  406. package/dist/worker/workerApi.d.ts.map +0 -1
  407. package/dist/worker.js +0 -2
  408. package/dist/worker.js.map +0 -1
  409. package/dist/worker.mjs +0 -20
  410. package/dist/worker.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sources":["../../src/pool/data.ts"],"sourcesContent":["import {\n PFrameDriverError,\n type BinaryChunk,\n type JsonDataInfo,\n type ParquetChunk,\n type ParquetChunkMapping,\n type ParquetChunkMetadata,\n type PColumnSpec,\n type PColumnValue,\n type PColumnValues,\n type PlRef,\n type PObjectId,\n type PObjectSpec,\n} from '@platforma-sdk/model';\nimport type { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';\nimport { assertNever } from '@milaboratories/ts-helpers';\nimport canonicalize from 'canonicalize';\nimport {\n isNullResourceId,\n resourceType,\n resourceTypeToString,\n resourceTypesEqual,\n} from '@milaboratories/pl-client';\nimport type { Writable } from 'utility-types';\nimport { createHash } from 'node:crypto';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\n\nexport function* allBlobs<B>(data: PFrameInternal.DataInfo<B>): Generator<B> {\n switch (data.type) {\n case 'Json':\n return;\n case 'JsonPartitioned':\n for (const blob of Object.values(data.parts)) yield blob;\n return;\n case 'BinaryPartitioned':\n for (const { index, values } of Object.values(data.parts)) {\n yield index;\n yield values;\n }\n return;\n case 'ParquetPartitioned':\n for (const { data: blob } of Object.values(data.parts)) yield blob;\n return;\n default:\n assertNever(data);\n }\n}\n\nfunction mapValues<T extends object, TResult>(\n obj: T,\n callback: (v: T[keyof T], key: keyof T) => TResult,\n): { [K in keyof T]: TResult } {\n return Object.fromEntries(\n (Object.entries(obj) as { [K in keyof T]: [K, T[K]]; }[keyof T][])\n .map(([key, value]) => [key, callback(value, key)]),\n ) as { [K in keyof T]: TResult };\n}\n\nexport function mapBlobs<B1, B2>(\n data: PFrameInternal.DataInfo<B1>,\n mapping: (blob: B1) => B2,\n): PFrameInternal.DataInfo<B2> {\n switch (data.type) {\n case 'Json':\n return { ...data };\n case 'JsonPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, mapping),\n };\n case 'BinaryPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, (v) => ({\n index: mapping(v.index),\n values: mapping(v.values),\n })),\n };\n case 'ParquetPartitioned':\n return {\n ...data,\n parts: mapValues(data.parts, (v) => ({\n ...v,\n data: mapping(v.data),\n })),\n };\n default:\n assertNever(data);\n }\n}\n\nexport const PColumnDataJsonPartitioned = resourceType('PColumnData/JsonPartitioned', '1');\nexport const PColumnDataJsonSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/JsonPartitioned',\n '1',\n);\nexport const PColumnDataBinaryPartitioned = resourceType('PColumnData/BinaryPartitioned', '1');\nexport const PColumnDataBinarySuperPartitioned = resourceType(\n 'PColumnData/Partitioned/BinaryPartitioned',\n '1',\n);\nexport const PColumnDataParquetPartitioned = resourceType('PColumnData/ParquetPartitioned', '1');\nexport const PColumnDataParquetSuperPartitioned = resourceType(\n 'PColumnData/Partitioned/ParquetPartitioned',\n '1',\n);\nexport const PColumnDataJson = resourceType('PColumnData/Json', '1');\n\nexport type PColumnDataJsonResourceValue = {\n keyLength: number;\n data: Record<string, PColumnValue>;\n};\n\nexport type PColumnDataPartitionedResourceValue = {\n partitionKeyLength: number;\n};\n\nexport type PColumnDataSuperPartitionedResourceValue = {\n superPartitionKeyLength: number;\n partitionKeyLength: number;\n};\n\nexport function parseDataInfoResource(\n data: PlTreeNodeAccessor,\n): PFrameInternal.DataInfo<ResourceInfo> {\n if (!data.getIsReadyOrError()) throw new PFrameDriverError('Data not ready.');\n\n const resourceData = data.getDataAsJson();\n if (resourceData === undefined)\n throw new PFrameDriverError('unexpected data info structure, no resource data');\n\n if (resourceTypesEqual(data.resourceType, PColumnDataJson)) {\n const dataContent = resourceData as PColumnDataJsonResourceValue;\n\n return {\n type: 'Json',\n keyLength: dataContent.keyLength,\n data: dataContent.data,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts = Object.fromEntries(\n data\n .listInputFields()\n .map((field) => [field, data.traverse({ field, errorIfFieldNotSet: true }).resourceInfo]),\n );\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataJsonSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, ResourceInfo> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n parts[partKey] = superPart.traverse({ field: key, errorIfFieldNotSet: true }).resourceInfo;\n }\n }\n\n return {\n type: 'JsonPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinaryPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<ResourceInfo>>>\n > = {};\n\n // parsing the structure\n for (const field of data.listInputFields()) {\n if (field.endsWith('.index')) {\n const partKey = field.slice(0, field.length - 6);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.index = data.traverse({ field, errorIfFieldNotSet: true }).resourceInfo;\n } else if (field.endsWith('.values')) {\n const partKey = field.slice(0, field.length - 7);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n part.values = data.traverse({ field, errorIfFieldNotSet: true }).resourceInfo;\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n\n // structure validation\n for (const [key, part] of Object.entries(parts)) {\n if (part.index === undefined) throw new PFrameDriverError(`no index for part ${key}`);\n if (part.values === undefined) throw new PFrameDriverError(`no values for part ${key}`);\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<ResourceInfo>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataBinarySuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<\n string,\n Partial<Writable<BinaryChunk<ResourceInfo>>>\n > = {};\n for (const superKey of data.listInputFields()) {\n const superData = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superData.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const field of keys) {\n if (field.endsWith('.index')) {\n const key = field.slice(0, field.length - 6);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].index = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).resourceInfo;\n } else if (field.endsWith('.values')) {\n const key = field.slice(0, field.length - 7);\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[]]);\n let part = parts[partKey];\n if (part === undefined) {\n part = {};\n parts[partKey] = part;\n }\n parts[partKey].values = superData.traverse({\n field,\n errorIfFieldNotSet: true,\n }).resourceInfo;\n } else throw new PFrameDriverError(`unrecognized part field name: ${field}`);\n }\n }\n\n return {\n type: 'BinaryPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts: parts as Record<string, BinaryChunk<ResourceInfo>>,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetPartitioned)) {\n const meta = resourceData as PColumnDataPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<ResourceInfo>> = {};\n for (const key of data.listInputFields()) {\n const resource = data.traverse({ field: key, assertFieldType: 'Input', errorIfFieldNotSet: true });\n\n parts[key] = traverseParquetPartitionedResource(resource);\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.partitionKeyLength,\n parts,\n };\n } else if (resourceTypesEqual(data.resourceType, PColumnDataParquetSuperPartitioned)) {\n const meta = resourceData as PColumnDataSuperPartitionedResourceValue;\n\n const parts: Record<string, ParquetChunk<ResourceInfo>> = {};\n for (const superKey of data.listInputFields()) {\n const superPart = data.traverse({ field: superKey, errorIfFieldNotSet: true });\n const keys = superPart.listInputFields();\n if (keys === undefined) throw new PFrameDriverError(`no partition keys for super key ${superKey}`);\n\n for (const key of keys) {\n const resource = data.traverse({ field: key, errorIfFieldNotSet: true });\n\n const partKey = JSON.stringify([\n ...JSON.parse(superKey) as PColumnValue[],\n ...JSON.parse(key) as PColumnValue[],\n ]);\n parts[partKey] = traverseParquetPartitionedResource(resource);\n }\n }\n\n return {\n type: 'ParquetPartitioned',\n partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,\n parts,\n };\n }\n\n throw new PFrameDriverError(`unsupported resource type: ${resourceTypeToString(data.resourceType)}`);\n}\n\nexport function traverseParquetPartitionedResource(resource: PlTreeNodeAccessor): ParquetChunk<ResourceInfo> {\n const blob = resource.traverse(\n { field: 'blob', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).resourceInfo;\n const partInfo = resource.getDataAsJson() as ParquetChunkMetadata;\n const mapping = resource.traverse(\n { field: 'mapping', assertFieldType: 'Service', errorIfFieldNotSet: true },\n ).getDataAsJson() as ParquetChunkMapping;\n\n return {\n data: blob,\n ...partInfo,\n ...mapping,\n };\n}\n\nexport function makeDataInfoFromPColumnValues(\n spec: PColumnSpec,\n data: PColumnValues,\n): JsonDataInfo {\n const keyLength = spec.axesSpec.length;\n const jsonData: Record<string, PColumnValue> = {};\n for (const { key, val } of data) {\n if (key.length !== keyLength)\n throw new PFrameDriverError(`inline column key length ${key.length} differs from axes count ${keyLength}`);\n jsonData[JSON.stringify(key)] = val;\n }\n\n return {\n type: 'Json',\n keyLength,\n data: jsonData,\n };\n}\n\nexport function deriveLegacyPObjectId(spec: PObjectSpec, data: PlTreeNodeAccessor): PObjectId {\n const hash = createHash('sha256');\n hash.update(canonicalize(spec)!);\n hash.update(String(!isNullResourceId(data.originalId) ? data.originalId : data.id));\n return hash.digest().toString('hex') as PObjectId;\n}\n\nexport function deriveGlobalPObjectId(blockId: string, exportName: string): PObjectId {\n return canonicalize({ __isRef: true, blockId, name: exportName } satisfies PlRef)! as PObjectId;\n}\n\nexport function deriveLocalPObjectId(resolvePath: string[], outputName: string): PObjectId {\n return canonicalize({ resolvePath, name: outputName })! as PObjectId;\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,620 @@
1
+ 'use strict';
2
+
3
+ var plTree = require('@milaboratories/pl-tree');
4
+ var model = require('@platforma-sdk/model');
5
+ var lruCache = require('lru-cache');
6
+ var ref_count_pool = require('./ref_count_pool.cjs');
7
+ var data = require('./data.cjs');
8
+ var node_crypto = require('node:crypto');
9
+ var tsHelpers = require('@milaboratories/ts-helpers');
10
+ var canonicalize = require('canonicalize');
11
+ var pframesRsNode = require('@milaboratories/pframes-rs-node');
12
+ var fs = require('node:fs/promises');
13
+ var path = require('node:path');
14
+ var index = require('../debug/index.cjs');
15
+
16
+ function _interopNamespaceDefault(e) {
17
+ var n = Object.create(null);
18
+ if (e) {
19
+ Object.keys(e).forEach(function (k) {
20
+ if (k !== 'default') {
21
+ var d = Object.getOwnPropertyDescriptor(e, k);
22
+ Object.defineProperty(n, k, d.get ? d : {
23
+ enumerable: true,
24
+ get: function () { return e[k]; }
25
+ });
26
+ }
27
+ });
28
+ }
29
+ n.default = e;
30
+ return Object.freeze(n);
31
+ }
32
+
33
+ var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
34
+ var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
35
+
36
+ function blobKey(res) {
37
+ return String(res.id);
38
+ }
39
+ const valueTypes = ['Int', 'Long', 'Float', 'Double', 'String', 'Bytes'];
40
+ function migrateFilters(filters) {
41
+ const filtersV1 = [];
42
+ const filtersV2 = [];
43
+ for (const filter of filters) {
44
+ if (filter.type === 'bySingleColumn') {
45
+ filtersV1.push(filter);
46
+ filtersV2.push({
47
+ ...filter,
48
+ type: 'bySingleColumnV2',
49
+ });
50
+ }
51
+ else {
52
+ filtersV2.push(filter);
53
+ }
54
+ }
55
+ if (filtersV1.length > 0) {
56
+ const filtersV1Json = JSON.stringify(filtersV1);
57
+ console.warn(`type overriten from 'bySingleColumn' to 'bySingleColumnV2' for filters: ${filtersV1Json}`);
58
+ }
59
+ return filtersV2;
60
+ }
61
+ function migratePTableFilters(def) {
62
+ if (!('partitionFilters' in def)) {
63
+ // For old blocks assume all axes filters to be partition filters
64
+ return {
65
+ ...def,
66
+ partitionFilters: migrateFilters(def.filters.filter((f) => f.column.type === 'axis')),
67
+ filters: migrateFilters(def.filters.filter((f) => f.column.type === 'column')),
68
+ };
69
+ }
70
+ return {
71
+ ...def,
72
+ partitionFilters: migrateFilters(def.partitionFilters),
73
+ filters: migrateFilters(def.filters),
74
+ };
75
+ }
76
+ const bigintReplacer = (_, v) => (typeof v === 'bigint' ? v.toString() : v);
77
+ class PTableCache {
78
+ logger;
79
+ ops;
80
+ perFrame = new Map();
81
+ global;
82
+ disposeListeners = new Map();
83
+ constructor(logger, ops) {
84
+ this.logger = logger;
85
+ this.ops = ops;
86
+ this.global = new lruCache.LRUCache({
87
+ maxSize: this.ops.pFramesCacheMaxSize,
88
+ dispose: (resource, key, reason) => {
89
+ if (reason === 'evict') {
90
+ this.perFrame.get(resource.resource.pFrame)?.delete(key);
91
+ }
92
+ if (this.perFrame.get(resource.resource.pFrame)?.size === 0) {
93
+ this.perFrame.delete(resource.resource.pFrame);
94
+ }
95
+ const disposeListener = this.disposeListeners.get(key);
96
+ this.disposeListeners.delete(key);
97
+ resource.resource.disposeSignal.removeEventListener('abort', disposeListener);
98
+ resource.unref();
99
+ if (index.getDebugFlags().logPFrameRequests) {
100
+ this.logger.info(`calculateTableData cache - removed PTable ${key}`);
101
+ }
102
+ },
103
+ });
104
+ }
105
+ cache(resource, size) {
106
+ const key = resource.key;
107
+ if (index.getDebugFlags().logPFrameRequests) {
108
+ this.logger.info(`calculateTableData cache - added PTable ${key} with size ${size}`);
109
+ }
110
+ this.global.set(key, resource, { size });
111
+ let perFrame = this.perFrame.get(resource.resource.pFrame);
112
+ if (!perFrame) {
113
+ perFrame = new lruCache.LRUCache({
114
+ max: this.ops.pFrameCacheMaxCount,
115
+ dispose: (_resource, key, reason) => {
116
+ if (reason === 'evict') {
117
+ this.global.delete(key);
118
+ }
119
+ },
120
+ });
121
+ this.perFrame.set(resource.resource.pFrame, perFrame);
122
+ }
123
+ perFrame.set(key, resource);
124
+ const disposeListener = () => {
125
+ this.perFrame.get(resource.resource.pFrame)?.delete(key);
126
+ this.global.delete(key);
127
+ };
128
+ this.disposeListeners.set(key, disposeListener);
129
+ resource.resource.disposeSignal.addEventListener('abort', disposeListener);
130
+ }
131
+ }
132
+ class PFrameHolder {
133
+ blobDriver;
134
+ logger;
135
+ spillPath;
136
+ pFramePromise;
137
+ abortController = new AbortController();
138
+ blobIdToResource = new Map();
139
+ blobHandleComputables = new Map();
140
+ constructor(blobDriver, logger, spillPath, columns) {
141
+ this.blobDriver = blobDriver;
142
+ this.logger = logger;
143
+ this.spillPath = spillPath;
144
+ const logFunc = (level, message) => this.logger[level](message);
145
+ for (const column of columns) {
146
+ for (const blob of data.allBlobs(column.data)) {
147
+ this.blobIdToResource.set(blobKey(blob), blob);
148
+ }
149
+ }
150
+ const distinctСolumns = [
151
+ ...new Map(columns.map((column) => ({
152
+ ...column,
153
+ data: data.mapBlobs(column.data, blobKey),
154
+ })).map((item) => [canonicalize(item), item])).values(),
155
+ ];
156
+ try {
157
+ const pFrame = new pframesRsNode.PFrame(this.spillPath, logFunc);
158
+ pFrame.setDataSource(this);
159
+ const promises = [];
160
+ for (const column of distinctСolumns) {
161
+ pFrame.addColumnSpec(column.id, column.spec);
162
+ promises.push(pFrame.setColumnData(column.id, column.data, { signal: this.disposeSignal }));
163
+ }
164
+ this.pFramePromise = Promise.all(promises)
165
+ .then(() => pFrame)
166
+ .catch((err) => {
167
+ this.dispose();
168
+ pFrame.dispose();
169
+ throw new model.PFrameDriverError(`PFrame creation failed asynchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${model.ensureError(err)}`);
170
+ });
171
+ }
172
+ catch (err) {
173
+ throw new model.PFrameDriverError(`PFrame creation failed synchronously, columns: ${JSON.stringify(distinctСolumns)}, error: ${model.ensureError(err)}`);
174
+ }
175
+ }
176
+ getOrCreateComputableForBlob(blobId) {
177
+ let computable = this.blobHandleComputables.get(blobId);
178
+ if (computable !== undefined)
179
+ return computable;
180
+ const blobResource = this.blobIdToResource.get(blobId);
181
+ if (blobResource === undefined)
182
+ throw new model.PFrameDriverError(`Blob with id ${blobId} not found.`);
183
+ // precalculation of value tree will trigger the download proecess right away
184
+ computable = this.blobDriver.getDownloadedBlob(blobResource).withPreCalculatedValueTree();
185
+ this.blobHandleComputables.set(blobId, computable);
186
+ return computable;
187
+ }
188
+ preloadBlob = async (blobIds) => {
189
+ const computables = blobIds.map((blobId) => this.getOrCreateComputableForBlob(blobId));
190
+ for (const computable of computables) {
191
+ try {
192
+ await computable.awaitStableFullValue(this.disposeSignal);
193
+ }
194
+ catch (err) {
195
+ if (model.isAbortError(err)) {
196
+ break; // silence abort errors
197
+ }
198
+ throw err;
199
+ }
200
+ }
201
+ };
202
+ resolveBlobContent = async (blobId) => {
203
+ const computable = this.getOrCreateComputableForBlob(blobId);
204
+ const path = this.blobDriver.getLocalPath((await computable.awaitStableValue(this.disposeSignal)).handle);
205
+ return await fs__namespace.readFile(path);
206
+ };
207
+ get disposeSignal() {
208
+ return this.abortController.signal;
209
+ }
210
+ dispose() {
211
+ this.abortController.abort();
212
+ for (const computable of this.blobHandleComputables.values())
213
+ computable.resetState();
214
+ }
215
+ async [Symbol.asyncDispose]() {
216
+ this.dispose();
217
+ await this.pFramePromise
218
+ .then((pFrame) => pFrame.dispose())
219
+ .catch(() => { });
220
+ }
221
+ }
222
+ class PTableHolder {
223
+ pFrame;
224
+ pTablePromise;
225
+ predecessor;
226
+ abortController = new AbortController();
227
+ combinedDisposeSignal;
228
+ constructor(pFrame, pFrameDisposeSignal, pTablePromise, predecessor) {
229
+ this.pFrame = pFrame;
230
+ this.pTablePromise = pTablePromise;
231
+ this.predecessor = predecessor;
232
+ this.combinedDisposeSignal = AbortSignal.any([pFrameDisposeSignal, this.abortController.signal]);
233
+ }
234
+ get disposeSignal() {
235
+ return this.combinedDisposeSignal;
236
+ }
237
+ async [Symbol.asyncDispose]() {
238
+ this.abortController.abort();
239
+ await this.pTablePromise
240
+ .then((pTable) => pTable.dispose())
241
+ .catch(() => { });
242
+ this.predecessor?.unref();
243
+ }
244
+ }
245
+ class PFrameDriver {
246
+ blobDriver;
247
+ logger;
248
+ spillPath;
249
+ pFrames;
250
+ pTables;
251
+ pTableCache;
252
+ frameConcurrencyLimiter;
253
+ tableConcurrencyLimiter;
254
+ async pprofDump() {
255
+ return await pframesRsNode.PFrame.pprofDump();
256
+ }
257
+ static async init(blobDriver, logger, spillPath, ops) {
258
+ const resolvedSpillPath = path__namespace.resolve(spillPath);
259
+ await tsHelpers.emptyDir(resolvedSpillPath);
260
+ return new PFrameDriver(blobDriver, logger, resolvedSpillPath, ops);
261
+ }
262
+ constructor(blobDriver, logger, spillPath, ops) {
263
+ this.blobDriver = blobDriver;
264
+ this.logger = logger;
265
+ this.spillPath = spillPath;
266
+ const concurrencyLimiter = new tsHelpers.ConcurrencyLimitingExecutor(ops.pFrameConcurrency);
267
+ this.frameConcurrencyLimiter = concurrencyLimiter;
268
+ this.tableConcurrencyLimiter = new tsHelpers.ConcurrencyLimitingExecutor(ops.pTableConcurrency);
269
+ this.pTableCache = new PTableCache(this.logger, ops);
270
+ this.pFrames = new (class extends ref_count_pool.RefCountResourcePool {
271
+ blobDriver;
272
+ logger;
273
+ spillPath;
274
+ constructor(blobDriver, logger, spillPath) {
275
+ super();
276
+ this.blobDriver = blobDriver;
277
+ this.logger = logger;
278
+ this.spillPath = spillPath;
279
+ }
280
+ acquire(params) {
281
+ return super.acquire(params);
282
+ }
283
+ getByKey(key) {
284
+ const resource = super.tryGetByKey(key);
285
+ if (!resource)
286
+ throw new model.PFrameDriverError(`PFrame not found, handle = ${key}`);
287
+ return resource;
288
+ }
289
+ createNewResource(params) {
290
+ if (index.getDebugFlags().logPFrameRequests)
291
+ logger.info(`PFrame creation (pFrameHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`);
292
+ return new PFrameHolder(this.blobDriver, this.logger, this.spillPath, params);
293
+ }
294
+ calculateParamsKey(params) {
295
+ try {
296
+ return stableKeyFromPFrameData(params);
297
+ }
298
+ catch (err) {
299
+ if (model.isPFrameDriverError(err))
300
+ throw err;
301
+ throw new model.PFrameDriverError(`PFrame handle calculation failed, request: ${JSON.stringify(params, bigintReplacer)}, error: ${model.ensureError(err)}`);
302
+ }
303
+ }
304
+ })(this.blobDriver, this.logger, this.spillPath);
305
+ this.pTables = new (class extends ref_count_pool.RefCountResourcePool {
306
+ pFrames;
307
+ constructor(pFrames) {
308
+ super();
309
+ this.pFrames = pFrames;
310
+ }
311
+ getByKey(key) {
312
+ const resource = super.tryGetByKey(key);
313
+ if (!resource)
314
+ throw new model.PFrameDriverError(`PTable not found, handle = ${key}`);
315
+ return resource;
316
+ }
317
+ createNewResource(params) {
318
+ if (index.getDebugFlags().logPFrameRequests) {
319
+ logger.info(`PTable creation (pTableHandle = ${this.calculateParamsKey(params)}): ${JSON.stringify(params, bigintReplacer)}`);
320
+ }
321
+ const handle = params.pFrameHandle;
322
+ const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);
323
+ // 3. Sort
324
+ if (params.def.sorting.length > 0) {
325
+ const predecessor = this.acquire({
326
+ ...params,
327
+ def: {
328
+ ...params.def,
329
+ sorting: [],
330
+ },
331
+ });
332
+ const { resource: { pTablePromise } } = predecessor;
333
+ const sortedTable = pTablePromise.then((pTable) => pTable.sort(params.def.sorting));
334
+ return new PTableHolder(handle, disposeSignal, sortedTable, predecessor);
335
+ }
336
+ // 2. Filter
337
+ if (params.def.filters.length > 0) {
338
+ const predecessor = this.acquire({
339
+ ...params,
340
+ def: {
341
+ ...params.def,
342
+ filters: [],
343
+ },
344
+ });
345
+ const { resource: { pTablePromise } } = predecessor;
346
+ const filteredTable = pTablePromise.then((pTable) => pTable.filter(params.def.filters));
347
+ return new PTableHolder(handle, disposeSignal, filteredTable, predecessor);
348
+ }
349
+ // 1. Join
350
+ const table = pFramePromise.then((pFrame) => pFrame.createTable({
351
+ src: joinEntryToInternal(params.def.src),
352
+ filters: params.def.partitionFilters,
353
+ }));
354
+ return new PTableHolder(handle, disposeSignal, table);
355
+ }
356
+ calculateParamsKey(params) {
357
+ try {
358
+ return stableKeyFromFullPTableDef(params);
359
+ }
360
+ catch (err) {
361
+ throw new model.PFrameDriverError(`PTable handle calculation failed, request: ${JSON.stringify(params)}, error: ${model.ensureError(err)}`);
362
+ }
363
+ }
364
+ })(this.pFrames);
365
+ }
366
+ //
367
+ // Internal / Config API Methods
368
+ //
369
+ createPFrame(def, ctx) {
370
+ const internalData = def
371
+ .filter((c) => valueTypes.find((t) => t === c.spec.valueType))
372
+ .map((c) => model.mapPObjectData(c, (d) => plTree.isPlTreeNodeAccessor(d)
373
+ ? data.parseDataInfoResource(d)
374
+ : model.isDataInfo(d)
375
+ ? d.type === 'ParquetPartitioned'
376
+ ? model.mapDataInfo(d, (a) => data.traverseParquetPartitionedResource(a))
377
+ : model.mapDataInfo(d, (a) => a.resourceInfo)
378
+ : data.makeDataInfoFromPColumnValues(c.spec, d)));
379
+ const res = this.pFrames.acquire(internalData);
380
+ ctx.addOnDestroy(res.unref);
381
+ return res.key;
382
+ }
383
+ createPTable(rawDef, ctx) {
384
+ const def = migratePTableFilters(rawDef);
385
+ const pFrameHandle = this.createPFrame(model.extractAllColumns(def.src), ctx);
386
+ const defIds = model.mapPTableDef(def, (c) => c.id);
387
+ const res = this.pTables.acquire({ def: defIds, pFrameHandle });
388
+ if (index.getDebugFlags().logPFrameRequests)
389
+ this.logger.info(`Create PTable call (pFrameHandle = ${pFrameHandle}; pTableHandle = ${JSON.stringify(res)}): ${JSON.stringify(model.mapPTableDef(def, (c) => c.spec), bigintReplacer)}`);
390
+ ctx.addOnDestroy(res.unref); // in addition to pframe unref added in createPFrame above
391
+ return res.key;
392
+ }
393
+ //
394
+ // PFrame istance methods
395
+ //
396
+ async findColumns(handle, request) {
397
+ const iRequest = {
398
+ ...request,
399
+ compatibleWith: request.compatibleWith.length !== 0
400
+ ? [{
401
+ axesSpec: [
402
+ ...new Map(request.compatibleWith.map((item) => [canonicalize(item), item])).values(),
403
+ ],
404
+ qualifications: [],
405
+ }]
406
+ : [],
407
+ };
408
+ const { pFramePromise } = this.pFrames.getByKey(handle);
409
+ const pFrame = await pFramePromise;
410
+ const responce = await pFrame.findColumns(iRequest);
411
+ return {
412
+ hits: responce.hits
413
+ .filter((h) => // only exactly matching columns
414
+ h.mappingVariants.length === 0
415
+ || h.mappingVariants.some((v) => v.qualifications.forHit.length === 0
416
+ && v.qualifications.forQueries.every((q) => q.length === 0)))
417
+ .map((h) => h.hit),
418
+ };
419
+ }
420
+ async getColumnSpec(handle, columnId) {
421
+ const { pFramePromise } = this.pFrames.getByKey(handle);
422
+ const pFrame = await pFramePromise;
423
+ return await pFrame.getColumnSpec(columnId);
424
+ }
425
+ async listColumns(handle) {
426
+ const { pFramePromise } = this.pFrames.getByKey(handle);
427
+ const pFrame = await pFramePromise;
428
+ return await pFrame.listColumns();
429
+ }
430
+ async calculateTableData(handle, request, range, signal) {
431
+ if (index.getDebugFlags().logPFrameRequests) {
432
+ this.logger.info(`Call calculateTableData, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`);
433
+ }
434
+ const table = this.pTables.acquire({
435
+ pFrameHandle: handle,
436
+ def: migratePTableFilters(request),
437
+ });
438
+ const { resource: { pTablePromise, disposeSignal } } = table;
439
+ const pTable = await pTablePromise;
440
+ const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
441
+ return await this.frameConcurrencyLimiter.run(async () => {
442
+ try {
443
+ const spec = pTable.getSpec();
444
+ const data = await pTable.getData([...spec.keys()], {
445
+ range,
446
+ signal: combinedSignal,
447
+ });
448
+ const size = await pTable.getFootprint({
449
+ withPredecessors: true,
450
+ signal: combinedSignal,
451
+ });
452
+ this.pTableCache.cache(table, size);
453
+ return spec.map((spec, i) => ({
454
+ spec: spec,
455
+ data: data[i],
456
+ }));
457
+ }
458
+ catch (err) {
459
+ table.unref();
460
+ throw err;
461
+ }
462
+ });
463
+ }
464
+ async getUniqueValues(handle, request, signal) {
465
+ if (index.getDebugFlags().logPFrameRequests) {
466
+ this.logger.info(`Call getUniqueValues, handle = ${handle}, request = ${JSON.stringify(request, bigintReplacer)}`);
467
+ }
468
+ const { pFramePromise, disposeSignal } = this.pFrames.getByKey(handle);
469
+ const pFrame = await pFramePromise;
470
+ const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
471
+ return await this.frameConcurrencyLimiter.run(async () => {
472
+ return await pFrame.getUniqueValues({
473
+ ...request,
474
+ filters: migrateFilters(request.filters),
475
+ }, {
476
+ signal: combinedSignal,
477
+ });
478
+ });
479
+ }
480
+ //
481
+ // PTable istance methods
482
+ //
483
+ async getSpec(handle) {
484
+ const { pTablePromise } = this.pTables.getByKey(handle);
485
+ const pTable = await pTablePromise;
486
+ return pTable.getSpec();
487
+ }
488
+ async getShape(handle, signal) {
489
+ const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);
490
+ const pTable = await pTablePromise;
491
+ const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
492
+ return await this.tableConcurrencyLimiter.run(async () => {
493
+ return await pTable.getShape({
494
+ signal: combinedSignal,
495
+ });
496
+ });
497
+ }
498
+ async getData(handle, columnIndices, range, signal) {
499
+ const { pTablePromise, disposeSignal } = this.pTables.getByKey(handle);
500
+ const pTable = await pTablePromise;
501
+ const combinedSignal = AbortSignal.any([signal, disposeSignal].filter((s) => !!s));
502
+ return await this.tableConcurrencyLimiter.run(async () => {
503
+ return await pTable.getData(columnIndices, {
504
+ range,
505
+ signal: combinedSignal,
506
+ });
507
+ });
508
+ }
509
+ }
510
+ function joinEntryToInternal(entry) {
511
+ switch (entry.type) {
512
+ case 'column':
513
+ return {
514
+ type: 'column',
515
+ columnId: entry.column,
516
+ };
517
+ case 'slicedColumn':
518
+ return {
519
+ type: 'slicedColumn',
520
+ columnId: entry.column,
521
+ newId: entry.newId,
522
+ axisFilters: entry.axisFilters,
523
+ };
524
+ case 'inlineColumn':
525
+ return {
526
+ type: 'inlineColumn',
527
+ newId: entry.column.id,
528
+ spec: entry.column.spec,
529
+ dataInfo: {
530
+ type: 'Json',
531
+ keyLength: entry.column.spec.axesSpec.length,
532
+ data: entry.column.data.reduce((acc, row) => {
533
+ acc[JSON.stringify(row.key)] = row.val;
534
+ return acc;
535
+ }, {}),
536
+ },
537
+ };
538
+ case 'inner':
539
+ case 'full':
540
+ return {
541
+ type: entry.type,
542
+ entries: entry.entries.map((col) => joinEntryToInternal(col)),
543
+ };
544
+ case 'outer':
545
+ return {
546
+ type: 'outer',
547
+ primary: joinEntryToInternal(entry.primary),
548
+ secondary: entry.secondary.map((col) => joinEntryToInternal(col)),
549
+ };
550
+ default:
551
+ tsHelpers.assertNever(entry);
552
+ }
553
+ }
554
+ function stableKeyFromFullPTableDef(data) {
555
+ const hash = node_crypto.createHash('sha256');
556
+ hash.update(canonicalize(data));
557
+ return hash.digest().toString('hex');
558
+ }
559
+ function stableKeyFromPFrameData(data) {
560
+ const orderedData = [...data].map((column) => model.mapPObjectData(column, (r) => {
561
+ let result;
562
+ const type = r.type;
563
+ switch (type) {
564
+ case 'Json':
565
+ result = {
566
+ type: r.type,
567
+ keyLength: r.keyLength,
568
+ payload: Object.entries(r.data).map(([part, value]) => ({
569
+ key: part,
570
+ value,
571
+ })),
572
+ };
573
+ break;
574
+ case 'JsonPartitioned':
575
+ result = {
576
+ type: r.type,
577
+ keyLength: r.partitionKeyLength,
578
+ payload: Object.entries(r.parts).map(([part, info]) => ({
579
+ key: part,
580
+ value: blobKey(info),
581
+ })),
582
+ };
583
+ break;
584
+ case 'BinaryPartitioned':
585
+ result = {
586
+ type: r.type,
587
+ keyLength: r.partitionKeyLength,
588
+ payload: Object.entries(r.parts).map(([part, info]) => ({
589
+ key: part,
590
+ value: [blobKey(info.index), blobKey(info.values)],
591
+ })),
592
+ };
593
+ break;
594
+ case 'ParquetPartitioned':
595
+ result = {
596
+ type: r.type,
597
+ keyLength: r.partitionKeyLength,
598
+ payload: Object.entries(r.parts).map(([part, info]) => ({
599
+ key: part,
600
+ value: info.dataDigest || [
601
+ blobKey(info.data),
602
+ JSON.stringify({ axes: info.axes, column: info.column }),
603
+ ],
604
+ })),
605
+ };
606
+ break;
607
+ default:
608
+ throw new model.PFrameDriverError(`unsupported resource type: ${JSON.stringify(type)}`);
609
+ }
610
+ result.payload.sort((lhs, rhs) => lhs.key.localeCompare(rhs.key));
611
+ return result;
612
+ }));
613
+ orderedData.sort((lhs, rhs) => lhs.id.localeCompare(rhs.id));
614
+ const hash = node_crypto.createHash('sha256');
615
+ hash.update(canonicalize(orderedData));
616
+ return hash.digest().toString('hex');
617
+ }
618
+
619
+ exports.PFrameDriver = PFrameDriver;
620
+ //# sourceMappingURL=driver.cjs.map