@milaboratories/pl-middle-layer 1.74.10 → 1.74.12

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 (322) hide show
  1. package/dist/_virtual/{_@oxc-project_runtime@0.137.0 → _@oxc-project_runtime@0.155.0}/helpers/esm/usingCtx.cjs +1 -2
  2. package/dist/_virtual/{_@oxc-project_runtime@0.137.0 → _@oxc-project_runtime@0.155.0}/helpers/esm/usingCtx.js +1 -2
  3. package/dist/_virtual/_rolldown/runtime.cjs +2 -3
  4. package/dist/block_registry/location_provider.cjs +1 -2
  5. package/dist/block_registry/location_provider.cjs.map +1 -1
  6. package/dist/block_registry/location_provider.js +1 -2
  7. package/dist/block_registry/registry-v2-provider.cjs +1 -2
  8. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  9. package/dist/block_registry/registry-v2-provider.d.ts +0 -2
  10. package/dist/block_registry/registry-v2-provider.d.ts.map +1 -1
  11. package/dist/block_registry/registry-v2-provider.js +1 -2
  12. package/dist/block_registry/registry.cjs +3 -3
  13. package/dist/block_registry/registry.cjs.map +1 -1
  14. package/dist/block_registry/registry.d.ts +0 -2
  15. package/dist/block_registry/registry.d.ts.map +1 -1
  16. package/dist/block_registry/registry.js +3 -3
  17. package/dist/block_registry/registry.js.map +1 -1
  18. package/dist/block_registry/template_provider.cjs +1 -2
  19. package/dist/block_registry/template_provider.cjs.map +1 -1
  20. package/dist/block_registry/template_provider.d.ts +0 -2
  21. package/dist/block_registry/template_provider.d.ts.map +1 -1
  22. package/dist/block_registry/template_provider.js +1 -2
  23. package/dist/block_registry/watcher.cjs +15 -14
  24. package/dist/block_registry/watcher.cjs.map +1 -1
  25. package/dist/block_registry/watcher.d.ts +0 -2
  26. package/dist/block_registry/watcher.d.ts.map +1 -1
  27. package/dist/block_registry/watcher.js +15 -14
  28. package/dist/block_registry/watcher.js.map +1 -1
  29. package/dist/block_registry/well_known_registries.cjs +1 -2
  30. package/dist/block_registry/well_known_registries.d.ts +0 -2
  31. package/dist/block_registry/well_known_registries.d.ts.map +1 -1
  32. package/dist/block_registry/well_known_registries.js +1 -2
  33. package/dist/cfg_render/executor.cjs +1 -2
  34. package/dist/cfg_render/executor.cjs.map +1 -1
  35. package/dist/cfg_render/executor.js +1 -2
  36. package/dist/cfg_render/renderer.cjs +1 -2
  37. package/dist/cfg_render/renderer.cjs.map +1 -1
  38. package/dist/cfg_render/renderer.js +1 -2
  39. package/dist/cfg_render/traverse.cjs +1 -2
  40. package/dist/cfg_render/traverse.js +1 -2
  41. package/dist/cfg_render/util.cjs +1 -2
  42. package/dist/cfg_render/util.js +1 -2
  43. package/dist/debug/index.cjs +1 -2
  44. package/dist/debug/index.js +1 -2
  45. package/dist/dev_env/index.cjs +1 -2
  46. package/dist/dev_env/index.cjs.map +1 -1
  47. package/dist/dev_env/index.js +1 -2
  48. package/dist/dev_env/util.cjs +1 -2
  49. package/dist/dev_env/util.js +1 -2
  50. package/dist/js_render/column_registry.cjs +1 -2
  51. package/dist/js_render/column_registry.cjs.map +1 -1
  52. package/dist/js_render/column_registry.js +1 -2
  53. package/dist/js_render/computable_context.cjs +4 -4
  54. package/dist/js_render/computable_context.cjs.map +1 -1
  55. package/dist/js_render/computable_context.js +4 -4
  56. package/dist/js_render/computable_context.js.map +1 -1
  57. package/dist/js_render/context.cjs +1 -2
  58. package/dist/js_render/context.cjs.map +1 -1
  59. package/dist/js_render/context.js +1 -2
  60. package/dist/js_render/index.cjs +12 -9
  61. package/dist/js_render/index.cjs.map +1 -1
  62. package/dist/js_render/index.js +12 -9
  63. package/dist/js_render/index.js.map +1 -1
  64. package/dist/js_render/service_injectors.cjs +2 -3
  65. package/dist/js_render/service_injectors.js +2 -3
  66. package/dist/js_render/spec_override_collapse.cjs +1 -2
  67. package/dist/js_render/spec_override_collapse.cjs.map +1 -1
  68. package/dist/js_render/spec_override_collapse.js +1 -2
  69. package/dist/middle_layer/active_cfg.cjs +1 -2
  70. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  71. package/dist/middle_layer/active_cfg.js +1 -2
  72. package/dist/middle_layer/block.cjs +1 -2
  73. package/dist/middle_layer/block.cjs.map +1 -1
  74. package/dist/middle_layer/block.js +1 -2
  75. package/dist/middle_layer/block_ctx.cjs +3 -3
  76. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  77. package/dist/middle_layer/block_ctx.js +3 -3
  78. package/dist/middle_layer/block_ctx.js.map +1 -1
  79. package/dist/middle_layer/block_ctx_unsafe.cjs +1 -2
  80. package/dist/middle_layer/block_ctx_unsafe.js +1 -2
  81. package/dist/middle_layer/build_stamp.cjs +2 -3
  82. package/dist/middle_layer/build_stamp.js +2 -3
  83. package/dist/middle_layer/driver_kit.cjs +6 -2
  84. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  85. package/dist/middle_layer/driver_kit.d.ts +0 -2
  86. package/dist/middle_layer/driver_kit.d.ts.map +1 -1
  87. package/dist/middle_layer/driver_kit.js +7 -3
  88. package/dist/middle_layer/driver_kit.js.map +1 -1
  89. package/dist/middle_layer/finality_stop_rules.cjs +1 -2
  90. package/dist/middle_layer/finality_stop_rules.js +1 -2
  91. package/dist/middle_layer/folders.cjs +12 -8
  92. package/dist/middle_layer/folders.cjs.map +1 -1
  93. package/dist/middle_layer/folders.d.ts +0 -2
  94. package/dist/middle_layer/folders.d.ts.map +1 -1
  95. package/dist/middle_layer/folders.js +12 -8
  96. package/dist/middle_layer/folders.js.map +1 -1
  97. package/dist/middle_layer/frontend_path.cjs +1 -2
  98. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  99. package/dist/middle_layer/frontend_path.js +1 -2
  100. package/dist/middle_layer/middle_layer.cjs +7 -6
  101. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  102. package/dist/middle_layer/middle_layer.d.ts +0 -2
  103. package/dist/middle_layer/middle_layer.d.ts.map +1 -1
  104. package/dist/middle_layer/middle_layer.js +7 -6
  105. package/dist/middle_layer/middle_layer.js.map +1 -1
  106. package/dist/middle_layer/navigation_states.cjs +1 -2
  107. package/dist/middle_layer/navigation_states.js +1 -2
  108. package/dist/middle_layer/ops.cjs +10 -11
  109. package/dist/middle_layer/ops.cjs.map +1 -1
  110. package/dist/middle_layer/ops.d.ts +0 -2
  111. package/dist/middle_layer/ops.d.ts.map +1 -1
  112. package/dist/middle_layer/ops.js +10 -11
  113. package/dist/middle_layer/ops.js.map +1 -1
  114. package/dist/middle_layer/project.cjs +3 -3
  115. package/dist/middle_layer/project.cjs.map +1 -1
  116. package/dist/middle_layer/project.d.ts +3 -5
  117. package/dist/middle_layer/project.d.ts.map +1 -1
  118. package/dist/middle_layer/project.js +3 -3
  119. package/dist/middle_layer/project.js.map +1 -1
  120. package/dist/middle_layer/project_list.cjs +1 -2
  121. package/dist/middle_layer/project_list.cjs.map +1 -1
  122. package/dist/middle_layer/project_list.d.ts +0 -2
  123. package/dist/middle_layer/project_list.d.ts.map +1 -1
  124. package/dist/middle_layer/project_list.js +1 -2
  125. package/dist/middle_layer/project_overview.cjs +8 -5
  126. package/dist/middle_layer/project_overview.cjs.map +1 -1
  127. package/dist/middle_layer/project_overview.js +8 -5
  128. package/dist/middle_layer/project_overview.js.map +1 -1
  129. package/dist/middle_layer/project_overview_light.cjs +4 -3
  130. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  131. package/dist/middle_layer/project_overview_light.js +4 -3
  132. package/dist/middle_layer/project_overview_light.js.map +1 -1
  133. package/dist/middle_layer/render.cjs +1 -2
  134. package/dist/middle_layer/render.cjs.map +1 -1
  135. package/dist/middle_layer/render.js +1 -2
  136. package/dist/middle_layer/sharing_list.cjs +1 -2
  137. package/dist/middle_layer/sharing_list.cjs.map +1 -1
  138. package/dist/middle_layer/sharing_list.d.ts +0 -2
  139. package/dist/middle_layer/sharing_list.d.ts.map +1 -1
  140. package/dist/middle_layer/sharing_list.js +1 -2
  141. package/dist/middle_layer/sharing_list.js.map +1 -1
  142. package/dist/middle_layer/template_list.cjs +1 -2
  143. package/dist/middle_layer/template_list.cjs.map +1 -1
  144. package/dist/middle_layer/template_list.d.ts +0 -2
  145. package/dist/middle_layer/template_list.d.ts.map +1 -1
  146. package/dist/middle_layer/template_list.js +1 -2
  147. package/dist/middle_layer/tree_snapshot_store.cjs +3 -3
  148. package/dist/middle_layer/tree_snapshot_store.cjs.map +1 -1
  149. package/dist/middle_layer/tree_snapshot_store.d.ts +0 -2
  150. package/dist/middle_layer/tree_snapshot_store.d.ts.map +1 -1
  151. package/dist/middle_layer/tree_snapshot_store.js +3 -3
  152. package/dist/middle_layer/tree_snapshot_store.js.map +1 -1
  153. package/dist/middle_layer/types.d.ts +0 -2
  154. package/dist/middle_layer/types.d.ts.map +1 -1
  155. package/dist/middle_layer/util.cjs +1 -2
  156. package/dist/middle_layer/util.cjs.map +1 -1
  157. package/dist/middle_layer/util.js +1 -2
  158. package/dist/model/args.cjs +1 -2
  159. package/dist/model/args.cjs.map +1 -1
  160. package/dist/model/args.js +1 -2
  161. package/dist/model/block_pack_spec.cjs +1 -2
  162. package/dist/model/block_pack_spec.d.ts +0 -2
  163. package/dist/model/block_pack_spec.d.ts.map +1 -1
  164. package/dist/model/block_pack_spec.js +1 -2
  165. package/dist/model/frontend.d.ts +0 -2
  166. package/dist/model/frontend.d.ts.map +1 -1
  167. package/dist/model/project_helper.cjs +1 -2
  168. package/dist/model/project_helper.cjs.map +1 -1
  169. package/dist/model/project_helper.d.ts +0 -2
  170. package/dist/model/project_helper.d.ts.map +1 -1
  171. package/dist/model/project_helper.js +1 -2
  172. package/dist/model/project_model.cjs +1 -2
  173. package/dist/model/project_model.d.ts +0 -2
  174. package/dist/model/project_model.d.ts.map +1 -1
  175. package/dist/model/project_model.js +1 -2
  176. package/dist/model/project_model_util.cjs +1 -2
  177. package/dist/model/project_model_util.js +1 -2
  178. package/dist/model/project_model_v1.cjs +1 -2
  179. package/dist/model/project_model_v1.js +1 -2
  180. package/dist/model/sharing_model.cjs +1 -2
  181. package/dist/model/sharing_model.cjs.map +1 -1
  182. package/dist/model/sharing_model.d.ts +0 -2
  183. package/dist/model/sharing_model.d.ts.map +1 -1
  184. package/dist/model/sharing_model.js +1 -2
  185. package/dist/model/template_apply.cjs +1 -2
  186. package/dist/model/template_apply.cjs.map +1 -1
  187. package/dist/model/template_apply.d.ts +0 -2
  188. package/dist/model/template_apply.d.ts.map +1 -1
  189. package/dist/model/template_apply.js +1 -2
  190. package/dist/model/template_export.cjs +1 -2
  191. package/dist/model/template_export.d.ts +0 -2
  192. package/dist/model/template_export.d.ts.map +1 -1
  193. package/dist/model/template_export.js +1 -2
  194. package/dist/model/template_parser.cjs +1 -2
  195. package/dist/model/template_parser.cjs.map +1 -1
  196. package/dist/model/template_parser.d.ts +0 -2
  197. package/dist/model/template_parser.d.ts.map +1 -1
  198. package/dist/model/template_parser.js +1 -2
  199. package/dist/model/template_resolve.cjs +1 -2
  200. package/dist/model/template_resolve.cjs.map +1 -1
  201. package/dist/model/template_resolve.d.ts +0 -2
  202. package/dist/model/template_resolve.d.ts.map +1 -1
  203. package/dist/model/template_resolve.js +1 -2
  204. package/dist/model/template_serializer.cjs +1 -2
  205. package/dist/model/template_serializer.cjs.map +1 -1
  206. package/dist/model/template_serializer.d.ts +0 -2
  207. package/dist/model/template_serializer.d.ts.map +1 -1
  208. package/dist/model/template_serializer.js +1 -2
  209. package/dist/model/template_spec.d.ts +0 -2
  210. package/dist/model/template_spec.d.ts.map +1 -1
  211. package/dist/mutator/block-pack/block_pack.cjs +7 -6
  212. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  213. package/dist/mutator/block-pack/block_pack.d.ts +0 -2
  214. package/dist/mutator/block-pack/block_pack.d.ts.map +1 -1
  215. package/dist/mutator/block-pack/block_pack.js +7 -6
  216. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  217. package/dist/mutator/block-pack/frontend.cjs +1 -2
  218. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  219. package/dist/mutator/block-pack/frontend.js +1 -2
  220. package/dist/mutator/block-pack/required_capabilities.cjs +1 -2
  221. package/dist/mutator/block-pack/required_capabilities.cjs.map +1 -1
  222. package/dist/mutator/block-pack/required_capabilities.js +1 -2
  223. package/dist/mutator/context_export.cjs +1 -2
  224. package/dist/mutator/context_export.cjs.map +1 -1
  225. package/dist/mutator/context_export.js +1 -2
  226. package/dist/mutator/list.cjs +1 -2
  227. package/dist/mutator/list.cjs.map +1 -1
  228. package/dist/mutator/list.js +1 -2
  229. package/dist/mutator/migration.cjs +1 -2
  230. package/dist/mutator/migration.cjs.map +1 -1
  231. package/dist/mutator/migration.js +1 -2
  232. package/dist/mutator/project.cjs +30 -22
  233. package/dist/mutator/project.cjs.map +1 -1
  234. package/dist/mutator/project.d.ts +0 -2
  235. package/dist/mutator/project.d.ts.map +1 -1
  236. package/dist/mutator/project.js +30 -22
  237. package/dist/mutator/project.js.map +1 -1
  238. package/dist/mutator/sharing.cjs +1 -2
  239. package/dist/mutator/sharing.cjs.map +1 -1
  240. package/dist/mutator/sharing.js +1 -2
  241. package/dist/mutator/template/direct_template_loader.cjs +1 -2
  242. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  243. package/dist/mutator/template/direct_template_loader.js +1 -2
  244. package/dist/mutator/template/direct_template_loader_v3.cjs +1 -2
  245. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  246. package/dist/mutator/template/direct_template_loader_v3.js +1 -2
  247. package/dist/mutator/template/render_block.cjs +1 -2
  248. package/dist/mutator/template/render_block.cjs.map +1 -1
  249. package/dist/mutator/template/render_block.js +1 -2
  250. package/dist/mutator/template/render_template.cjs +1 -2
  251. package/dist/mutator/template/render_template.cjs.map +1 -1
  252. package/dist/mutator/template/render_template.d.ts +0 -2
  253. package/dist/mutator/template/render_template.d.ts.map +1 -1
  254. package/dist/mutator/template/render_template.js +1 -2
  255. package/dist/mutator/template/template_cache.cjs +6 -5
  256. package/dist/mutator/template/template_cache.cjs.map +1 -1
  257. package/dist/mutator/template/template_cache.d.ts +1 -2
  258. package/dist/mutator/template/template_cache.d.ts.map +1 -1
  259. package/dist/mutator/template/template_cache.js +6 -5
  260. package/dist/mutator/template/template_cache.js.map +1 -1
  261. package/dist/mutator/template/template_loading.cjs +1 -2
  262. package/dist/mutator/template/template_loading.cjs.map +1 -1
  263. package/dist/mutator/template/template_loading.d.ts +0 -2
  264. package/dist/mutator/template/template_loading.d.ts.map +1 -1
  265. package/dist/mutator/template/template_loading.js +1 -2
  266. package/dist/mutator/template.cjs +1 -2
  267. package/dist/mutator/template.cjs.map +1 -1
  268. package/dist/mutator/template.js +1 -2
  269. package/dist/mutator/template_construct.cjs +1 -2
  270. package/dist/mutator/template_construct.cjs.map +1 -1
  271. package/dist/mutator/template_construct.js +1 -2
  272. package/dist/network_check/network_check.cjs +2 -3
  273. package/dist/network_check/network_check.cjs.map +1 -1
  274. package/dist/network_check/network_check.d.ts +0 -2
  275. package/dist/network_check/network_check.d.ts.map +1 -1
  276. package/dist/network_check/network_check.js +2 -3
  277. package/dist/network_check/network_check.js.map +1 -1
  278. package/dist/network_check/pings.cjs +1 -2
  279. package/dist/network_check/pings.cjs.map +1 -1
  280. package/dist/network_check/pings.js +1 -2
  281. package/dist/network_check/template.cjs +5 -4
  282. package/dist/network_check/template.cjs.map +1 -1
  283. package/dist/network_check/template.js +5 -4
  284. package/dist/network_check/template.js.map +1 -1
  285. package/dist/pool/data.cjs +1 -2
  286. package/dist/pool/data.cjs.map +1 -1
  287. package/dist/pool/data.d.ts +0 -2
  288. package/dist/pool/data.d.ts.map +1 -1
  289. package/dist/pool/data.js +1 -2
  290. package/dist/pool/driver.cjs +5 -4
  291. package/dist/pool/driver.cjs.map +1 -1
  292. package/dist/pool/driver.d.ts +0 -2
  293. package/dist/pool/driver.d.ts.map +1 -1
  294. package/dist/pool/driver.js +5 -4
  295. package/dist/pool/driver.js.map +1 -1
  296. package/dist/pool/p_object_collection.cjs +9 -8
  297. package/dist/pool/p_object_collection.cjs.map +1 -1
  298. package/dist/pool/p_object_collection.d.ts +0 -2
  299. package/dist/pool/p_object_collection.d.ts.map +1 -1
  300. package/dist/pool/p_object_collection.js +9 -8
  301. package/dist/pool/p_object_collection.js.map +1 -1
  302. package/dist/pool/result_pool.cjs +8 -7
  303. package/dist/pool/result_pool.cjs.map +1 -1
  304. package/dist/pool/result_pool.js +8 -7
  305. package/dist/pool/result_pool.js.map +1 -1
  306. package/dist/pool/upstream_block_ctx.cjs +1 -2
  307. package/dist/pool/upstream_block_ctx.cjs.map +1 -1
  308. package/dist/pool/upstream_block_ctx.js +1 -2
  309. package/dist/service_factories.cjs +1 -2
  310. package/dist/service_factories.js +1 -2
  311. package/dist/worker/WorkerManager.cjs +1 -2
  312. package/dist/worker/WorkerManager.js +1 -2
  313. package/dist/worker/WorkerManager.js.map +1 -1
  314. package/dist/worker/worker.cjs +1 -2
  315. package/dist/worker/worker.js +1 -2
  316. package/dist/worker/workerApi.cjs +1 -2
  317. package/dist/worker/workerApi.cjs.map +1 -1
  318. package/dist/worker/workerApi.js +1 -2
  319. package/package.json +33 -33
  320. package/src/middle_layer/driver_kit.ts +16 -0
  321. package/src/middle_layer/middle_layer.ts +4 -6
  322. package/src/middle_layer/tree_snapshot_store.test.ts +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.cjs","names":["PollComputablePool","getDevV1PacketMtime","getDevV2PacketMtime","getFromPackV2Mtime","StableChannel","AnyChannel"],"sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from \"@milaboratories/computable\";\nimport { PollComputablePool } from \"@milaboratories/computable\";\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { Dispatcher } from \"undici\";\nimport { getDevV1PacketMtime, getDevV2PacketMtime, getFromPackV2Mtime } from \"./registry\";\nimport {\n loadPackDescriptionFromManifest,\n tryLoadPackDescription,\n} from \"@platforma-sdk/block-tools\";\nimport { fileURLToPath } from \"node:url\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { V2RegistryProvider } from \"./registry-v2-provider\";\nimport * as semver from \"semver\";\nimport canonicalize from \"canonicalize\";\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = \"__no_updates__\";\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case \"dev-v1\":\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"dev-v2\":\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"from-pack-v2\":\n return `from_pack_v2_${req.currentSpec.packUrl}_${req.currentSpec.mtime}`;\n case \"from-registry-v2\":\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case \"dev-v1\": {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"dev-v2\": {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-pack-v2\": {\n try {\n // Match block_pack.ts prepare exactly: convert the file: URL at this\n // edge, load the same description, feed the same inputs to the shared\n // mtime helper — so the recomputed value is byte-identical to what\n // prepare baked into cSpec.mtime.\n const packDir = fileURLToPath(cSpec.packUrl);\n const description = await loadPackDescriptionFromManifest(packDir);\n const mtime = await getFromPackV2Mtime(packDir, description.components.ui.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-registry-v2\": {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === \"patch\") return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case \"major\":\n vMainSuggestion = vSuggestions.find((v) => v.type !== \"major\")?.update;\n break;\n case \"minor\":\n vMainSuggestion = vSuggestions.find((v) => v.type === \"patch\")?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"watcher.cjs","names":["PollComputablePool","getDevV1PacketMtime","tryLoadPackDescription","getDevV2PacketMtime","fileURLToPath","loadPackDescriptionFromManifest","getFromPackV2Mtime","StableChannel","AnyChannel","blockPackIdToString"],"sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from \"@milaboratories/computable\";\nimport { PollComputablePool } from \"@milaboratories/computable\";\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { Dispatcher } from \"undici\";\nimport { getDevV1PacketMtime, getDevV2PacketMtime, getFromPackV2Mtime } from \"./registry\";\nimport {\n loadPackDescriptionFromManifest,\n tryLoadPackDescription,\n} from \"@platforma-sdk/block-tools\";\nimport { fileURLToPath } from \"node:url\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { V2RegistryProvider } from \"./registry-v2-provider\";\nimport * as semver from \"semver\";\nimport canonicalize from \"canonicalize\";\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = \"__no_updates__\";\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case \"dev-v1\":\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"dev-v2\":\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"from-pack-v2\":\n return `from_pack_v2_${req.currentSpec.packUrl}_${req.currentSpec.mtime}`;\n case \"from-registry-v2\":\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case \"dev-v1\": {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"dev-v2\": {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-pack-v2\": {\n try {\n // Match block_pack.ts prepare exactly: convert the file: URL at this\n // edge, load the same description, feed the same inputs to the shared\n // mtime helper — so the recomputed value is byte-identical to what\n // prepare baked into cSpec.mtime.\n const packDir = fileURLToPath(cSpec.packUrl);\n const description = await loadPackDescriptionFromManifest(packDir);\n const mtime = await getFromPackV2Mtime(packDir, description.components.ui.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-registry-v2\": {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === \"patch\") return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case \"major\":\n vMainSuggestion = vSuggestions.find((v) => v.type !== \"major\")?.update;\n break;\n case \"minor\":\n vMainSuggestion = vSuggestions.find((v) => v.type === \"patch\")?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"mappings":"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"}
@@ -3,7 +3,6 @@ import { BlockPackSpec, BlockSettings, UpdateSuggestions } from "@milaboratories
3
3
  import { Dispatcher } from "undici";
4
4
  import { MiLogger } from "@milaboratories/ts-helpers";
5
5
  import { PollComputablePool, PollPoolOps } from "@milaboratories/computable";
6
- //#region src/block_registry/watcher.d.ts
7
6
  export type BlockUpdateWatcherOps = Partial<PollPoolOps> & {
8
7
  readonly http?: Dispatcher;
9
8
  readonly preferredUpdateChannel?: string;
@@ -25,5 +24,4 @@ export declare class BlockUpdateWatcher extends PollComputablePool<CheckForUpdat
25
24
  protected readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse>;
26
25
  protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean;
27
26
  }
28
- //#endregion
29
27
  //# sourceMappingURL=watcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","names":[],"sources":["../../src/block_registry/watcher.ts"],"mappings":";;;;;;YA6BY,wBAAwB,QAAQ;WACjC,OAAO;WACP;;YAKC;EACV,aAAa;EACb,UAAU;;YAGA;EACV,aAAa;EACb,iBAAiB;;qBAGN,2BAA2B,mBACtC,uBACA;mBAMmB;mBAJF;mBACA;EAEjB,YACmB,kBAAkB,oBACnC,QAAQ,UACR,MAAK;YAOG,OAAO,KAAK;YAeN,UAAU,KAAK,wBAAwB,QAAQ;YAgIrD,aAAa,MAAM,wBAAwB,MAAM"}
1
+ {"version":3,"file":"watcher.d.ts","names":[],"sources":["../../src/block_registry/watcher.ts"],"mappings":";;;;;YA6BY,wBAAwB,QAAQ;WACjC,OAAO;WACP;;YAKC;EACV,aAAa;EACb,UAAU;;YAGA;EACV,aAAa;EACb,iBAAiB;;qBAGN,2BAA2B,mBACtC,uBACA;mBAMmB;mBAJF;mBACA;EAEjB,YACmB,kBAAkB,oBACnC,QAAQ,UACR,MAAK;YAOG,OAAO,KAAK;YAeN,UAAU,KAAK,wBAAwB,QAAQ;YAgIrD,aAAa,MAAM,wBAAwB,MAAM"}
@@ -5,7 +5,7 @@ import { fileURLToPath } from "node:url";
5
5
  import { PollComputablePool } from "@milaboratories/computable";
6
6
  import * as semver from "semver";
7
7
  import canonicalize from "canonicalize";
8
- //#region src/block_registry/watcher.ts
8
+ // src/block_registry/watcher.ts
9
9
  const DefaultBlockUpdateWatcherOps = { minDelay: 1500 };
10
10
  const NoUpdatesKey = "__no_updates__";
11
11
  var BlockUpdateWatcher = class extends PollComputablePool {
@@ -66,7 +66,8 @@ var BlockUpdateWatcher = class extends PollComputablePool {
66
66
  }
67
67
  case "from-pack-v2": try {
68
68
  const packDir = fileURLToPath(cSpec.packUrl);
69
- const mtime = await getFromPackV2Mtime(packDir, (await loadPackDescriptionFromManifest(packDir)).components.ui.folder);
69
+ const description = await loadPackDescriptionFromManifest(packDir);
70
+ const mtime = await getFromPackV2Mtime(packDir, description.components.ui.folder);
70
71
  if (mtime === cSpec.mtime) return { suggestions: [] };
71
72
  else return {
72
73
  mainSuggestion: {
@@ -84,15 +85,18 @@ var BlockUpdateWatcher = class extends PollComputablePool {
84
85
  if (versionLock === "patch") return { suggestions: [] };
85
86
  const registry = this.registryProvider.getRegistry(cSpec.registryUrl);
86
87
  let channel = this.preferredUpdateChannel;
87
- if (channel === void 0) if (cSpec.channel === void 0) if (await registry.getLatestOverview(cSpec.id, StableChannel)) channel = StableChannel;
88
- else {
89
- if (await registry.getLatestOverview(cSpec.id, AnyChannel) === void 0) {
90
- this.logger.error(`No "any" channel record for ${blockPackIdToString(cSpec.id)}`);
91
- return { suggestions: [] };
92
- }
93
- channel = AnyChannel;
88
+ if (channel === void 0) {
89
+ if (cSpec.channel === void 0) {
90
+ if (await registry.getLatestOverview(cSpec.id, StableChannel)) channel = StableChannel;
91
+ else {
92
+ if (await registry.getLatestOverview(cSpec.id, AnyChannel) === void 0) {
93
+ this.logger.error(`No "any" channel record for ${blockPackIdToString(cSpec.id)}`);
94
+ return { suggestions: [] };
95
+ }
96
+ channel = AnyChannel;
97
+ }
98
+ } else channel = cSpec.channel;
94
99
  }
95
- else channel = cSpec.channel;
96
100
  const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);
97
101
  if (vSuggestions === void 0 || vSuggestions.length === 0) return { suggestions: [] };
98
102
  vSuggestions.reverse();
@@ -104,9 +108,7 @@ var BlockUpdateWatcher = class extends PollComputablePool {
104
108
  case "major":
105
109
  vMainSuggestion = vSuggestions.find((v) => v.type !== "major")?.update;
106
110
  break;
107
- case "minor":
108
- vMainSuggestion = vSuggestions.find((v) => v.type === "patch")?.update;
109
- break;
111
+ case "minor": vMainSuggestion = vSuggestions.find((v) => v.type === "patch")?.update;
110
112
  }
111
113
  const suggestions = vSuggestions.map(({ type, update }) => ({
112
114
  type,
@@ -153,7 +155,6 @@ var BlockUpdateWatcher = class extends PollComputablePool {
153
155
  return canonicalize(res1) === canonicalize(res2);
154
156
  }
155
157
  };
156
- //#endregion
157
158
  export { BlockUpdateWatcher, DefaultBlockUpdateWatcherOps };
158
159
 
159
160
  //# sourceMappingURL=watcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","names":[],"sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from \"@milaboratories/computable\";\nimport { PollComputablePool } from \"@milaboratories/computable\";\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { Dispatcher } from \"undici\";\nimport { getDevV1PacketMtime, getDevV2PacketMtime, getFromPackV2Mtime } from \"./registry\";\nimport {\n loadPackDescriptionFromManifest,\n tryLoadPackDescription,\n} from \"@platforma-sdk/block-tools\";\nimport { fileURLToPath } from \"node:url\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { V2RegistryProvider } from \"./registry-v2-provider\";\nimport * as semver from \"semver\";\nimport canonicalize from \"canonicalize\";\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = \"__no_updates__\";\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case \"dev-v1\":\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"dev-v2\":\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"from-pack-v2\":\n return `from_pack_v2_${req.currentSpec.packUrl}_${req.currentSpec.mtime}`;\n case \"from-registry-v2\":\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case \"dev-v1\": {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"dev-v2\": {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-pack-v2\": {\n try {\n // Match block_pack.ts prepare exactly: convert the file: URL at this\n // edge, load the same description, feed the same inputs to the shared\n // mtime helper — so the recomputed value is byte-identical to what\n // prepare baked into cSpec.mtime.\n const packDir = fileURLToPath(cSpec.packUrl);\n const description = await loadPackDescriptionFromManifest(packDir);\n const mtime = await getFromPackV2Mtime(packDir, description.components.ui.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-registry-v2\": {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === \"patch\") return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case \"major\":\n vMainSuggestion = vSuggestions.find((v) => v.type !== \"major\")?.update;\n break;\n case \"minor\":\n vMainSuggestion = vSuggestions.find((v) => v.type === \"patch\")?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"watcher.js","names":[],"sources":["../../src/block_registry/watcher.ts"],"sourcesContent":["import type { PollPoolOps } from \"@milaboratories/computable\";\nimport { PollComputablePool } from \"@milaboratories/computable\";\nimport type {\n BlockPackFromRegistryV2,\n BlockPackSpec,\n BlockSettings,\n UpdateSuggestions,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport {\n AnyChannel,\n blockPackIdToString,\n StableChannel,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { Dispatcher } from \"undici\";\nimport { getDevV1PacketMtime, getDevV2PacketMtime, getFromPackV2Mtime } from \"./registry\";\nimport {\n loadPackDescriptionFromManifest,\n tryLoadPackDescription,\n} from \"@platforma-sdk/block-tools\";\nimport { fileURLToPath } from \"node:url\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { V2RegistryProvider } from \"./registry-v2-provider\";\nimport * as semver from \"semver\";\nimport canonicalize from \"canonicalize\";\n\nexport const DefaultBlockUpdateWatcherOps: PollPoolOps = {\n minDelay: 1500,\n};\n\nexport type BlockUpdateWatcherOps = Partial<PollPoolOps> & {\n readonly http?: Dispatcher;\n readonly preferredUpdateChannel?: string;\n};\n\nconst NoUpdatesKey = \"__no_updates__\";\n\nexport type CheckForUpdateRequest = {\n currentSpec: BlockPackSpec;\n settings: BlockSettings;\n};\n\nexport type CheckForUpdateResponse = {\n suggestions: UpdateSuggestions;\n mainSuggestion?: BlockPackSpec;\n};\n\nexport class BlockUpdateWatcher extends PollComputablePool<\n CheckForUpdateRequest,\n CheckForUpdateResponse\n> {\n private readonly http?: Dispatcher;\n private readonly preferredUpdateChannel?: string;\n\n constructor(\n private readonly registryProvider: V2RegistryProvider,\n logger: MiLogger,\n ops: BlockUpdateWatcherOps = {},\n ) {\n super({ ...ops, ...DefaultBlockUpdateWatcherOps }, logger);\n this.http = ops.http;\n this.preferredUpdateChannel = ops.preferredUpdateChannel;\n }\n\n protected getKey(req: CheckForUpdateRequest): string {\n switch (req.currentSpec.type) {\n case \"dev-v1\":\n return `dev_1_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"dev-v2\":\n return `dev_2_${req.currentSpec.folder}_${req.currentSpec.mtime}`;\n case \"from-pack-v2\":\n return `from_pack_v2_${req.currentSpec.packUrl}_${req.currentSpec.mtime}`;\n case \"from-registry-v2\":\n return `from_registry_v2_${canonicalize(req)!}`;\n default:\n return NoUpdatesKey;\n }\n }\n\n protected async readValue(req: CheckForUpdateRequest): Promise<CheckForUpdateResponse> {\n try {\n const cSpec = req.currentSpec;\n switch (cSpec.type) {\n case \"dev-v1\": {\n try {\n const mtime = await getDevV1PacketMtime(cSpec.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"dev-v2\": {\n try {\n const description = await tryLoadPackDescription(cSpec.folder, this.logger);\n if (description === undefined) return { suggestions: [] };\n const mtime = await getDevV2PacketMtime(description);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime: mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-pack-v2\": {\n try {\n // Match block_pack.ts prepare exactly: convert the file: URL at this\n // edge, load the same description, feed the same inputs to the shared\n // mtime helper — so the recomputed value is byte-identical to what\n // prepare baked into cSpec.mtime.\n const packDir = fileURLToPath(cSpec.packUrl);\n const description = await loadPackDescriptionFromManifest(packDir);\n const mtime = await getFromPackV2Mtime(packDir, description.components.ui.folder);\n if (mtime === cSpec.mtime) return { suggestions: [] };\n else return { mainSuggestion: { ...cSpec, mtime }, suggestions: [] };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n case \"from-registry-v2\": {\n try {\n const { versionLock, skipVersion } = req.settings;\n if (versionLock === \"patch\") return { suggestions: [] };\n const registry = this.registryProvider.getRegistry(cSpec.registryUrl);\n let channel: string | undefined = this.preferredUpdateChannel;\n\n if (channel === undefined) {\n if (cSpec.channel === undefined) {\n const a1 = await registry.getLatestOverview(cSpec.id, StableChannel);\n if (a1) channel = StableChannel;\n else {\n // forcing update from non-existent channel to stable\n const a2 = await registry.getLatestOverview(cSpec.id, AnyChannel);\n if (a2 === undefined) {\n this.logger.error(\n `No \"any\" channel record for ${blockPackIdToString(cSpec.id)}`,\n );\n return { suggestions: [] };\n }\n channel = AnyChannel;\n }\n } else channel = cSpec.channel;\n }\n\n const vSuggestions = await registry.getUpdateSuggestions(cSpec.id, channel);\n if (vSuggestions === undefined || vSuggestions.length === 0) return { suggestions: [] };\n\n // from major to patch\n vSuggestions.reverse();\n\n let vMainSuggestion: string | undefined = undefined;\n switch (versionLock) {\n case undefined:\n vMainSuggestion = vSuggestions[0].update;\n break;\n case \"major\":\n vMainSuggestion = vSuggestions.find((v) => v.type !== \"major\")?.update;\n break;\n case \"minor\":\n vMainSuggestion = vSuggestions.find((v) => v.type === \"patch\")?.update;\n break;\n }\n\n const suggestions: UpdateSuggestions = vSuggestions.map(({ type, update }) => ({\n type,\n update: { ...cSpec, id: { ...cSpec.id, version: update } },\n }));\n\n if (vMainSuggestion === undefined) return { suggestions };\n if (skipVersion !== undefined && semver.lte(vMainSuggestion, skipVersion))\n return { suggestions };\n\n const mainSuggestion: BlockPackFromRegistryV2 = {\n ...cSpec,\n id: { ...cSpec.id, version: vMainSuggestion },\n };\n\n // warming cache\n void (async () => {\n try {\n await registry.getComponents(mainSuggestion.id);\n } catch (e: unknown) {\n this.logger.warn(e);\n }\n })();\n\n return { suggestions, mainSuggestion };\n } catch (err: unknown) {\n this.logger.warn(err);\n return { suggestions: [] };\n }\n }\n\n default:\n return { suggestions: [] };\n }\n } catch (e: unknown) {\n this.logger.warn(e);\n return { suggestions: [] };\n }\n }\n\n protected resultsEqual(res1: CheckForUpdateResponse, res2: CheckForUpdateResponse): boolean {\n return canonicalize(res1) === canonicalize(res2);\n // if (res1 === undefined && res2 === undefined) return true;\n // if (res1 === undefined || res2 === undefined) return false;\n // if (res1.type !== res2.type) return false;\n // switch (res1.type) {\n // case 'from-registry-v1':\n // if (res2.type !== 'from-registry-v1') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'from-registry-v2':\n // if (res2.type !== 'from-registry-v2') return false;\n // return res1.registryUrl === res2.registryUrl && blockPackIdEquals(res1.id, res2.id);\n // case 'dev-v1':\n // if (res2.type !== 'dev-v1') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // case 'dev-v2':\n // if (res2.type !== 'dev-v2') return false;\n // return res1.folder === res2.folder && res1.mtime === res2.mtime;\n // default:\n // assertNever(res1);\n // }\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- //#region src/block_registry/well_known_registries.ts
1
+ // src/block_registry/well_known_registries.ts
2
2
  const CentralBlockRegistry = {
3
3
  type: "remote-v2",
4
4
  url: "https://blocks.pl-open.science/"
@@ -11,7 +11,6 @@ const V1CentralDevSnapshotRegistry = {
11
11
  type: "remote-v1",
12
12
  url: "https://block.registry.platforma.bio/dev"
13
13
  };
14
- //#endregion
15
14
  exports.CentralBlockRegistry = CentralBlockRegistry;
16
15
  exports.V1CentralDevSnapshotRegistry = V1CentralDevSnapshotRegistry;
17
16
  exports.V1CentralRegistry = V1CentralRegistry;
@@ -1,7 +1,5 @@
1
1
  import { RegistrySpec } from "@milaboratories/pl-model-middle-layer";
2
- //#region src/block_registry/well_known_registries.d.ts
3
2
  export declare const CentralBlockRegistry: RegistrySpec;
4
3
  export declare const V1CentralRegistry: RegistrySpec;
5
4
  export declare const V1CentralDevSnapshotRegistry: RegistrySpec;
6
- //#endregion
7
5
  //# sourceMappingURL=well_known_registries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"well_known_registries.d.ts","names":[],"sources":["../../src/block_registry/well_known_registries.ts"],"mappings":";;qBAEa,sBAAsB;qBAKtB,mBAAmB;qBAKnB,8BAA8B"}
1
+ {"version":3,"file":"well_known_registries.d.ts","names":[],"sources":["../../src/block_registry/well_known_registries.ts"],"mappings":";qBAEa,sBAAsB;qBAKtB,mBAAmB;qBAKnB,8BAA8B"}
@@ -1,4 +1,4 @@
1
- //#region src/block_registry/well_known_registries.ts
1
+ // src/block_registry/well_known_registries.ts
2
2
  const CentralBlockRegistry = {
3
3
  type: "remote-v2",
4
4
  url: "https://blocks.pl-open.science/"
@@ -11,7 +11,6 @@ const V1CentralDevSnapshotRegistry = {
11
11
  type: "remote-v1",
12
12
  url: "https://block.registry.platforma.bio/dev"
13
13
  };
14
- //#endregion
15
14
  export { CentralBlockRegistry, V1CentralDevSnapshotRegistry, V1CentralRegistry };
16
15
 
17
16
  //# sourceMappingURL=well_known_registries.js.map
@@ -7,7 +7,7 @@ let canonicalize = require("canonicalize");
7
7
  canonicalize = require_runtime.__toESM(canonicalize, 1);
8
8
  let denque = require("denque");
9
9
  denque = require_runtime.__toESM(denque, 1);
10
- //#region src/cfg_render/executor.ts
10
+ // src/cfg_render/executor.ts
11
11
  /** Special address of operation, see below. */
12
12
  const ReturnOpKey = Symbol();
13
13
  /** The same, but for the argument part of destination, see below. */
@@ -150,7 +150,6 @@ function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
150
150
  key
151
151
  });
152
152
  }
153
- //#endregion
154
153
  exports.computableFromCfg = computableFromCfg;
155
154
  exports.computableFromCfgUnsafe = computableFromCfgUnsafe;
156
155
 
@@ -1 +1 @@
1
- {"version":3,"file":"executor.cjs","names":["Denque","toCfgContext","NonKeyCtxFields","Computable","renderCfg","resOp"],"sources":["../../src/cfg_render/executor.ts"],"sourcesContent":["import type {\n ArgumentKey,\n ArgumentValues,\n ExecutionEnvironment,\n Operation,\n Subroutine,\n} from \"./operation\";\nimport Denque from \"denque\";\nimport { assertNever, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { ComputableCtx, ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { Cfg } from \"@platforma-sdk/model\";\nimport { renderCfg, resOp } from \"./renderer\";\nimport canonicalize from \"canonicalize\";\nimport type { BlockContextAny } from \"../middle_layer/block_ctx\";\nimport type { MiddleLayerDriverKit } from \"../middle_layer/driver_kit\";\nimport { NonKeyCtxFields, toCfgContext } from \"../middle_layer/block_ctx_unsafe\";\n\n/** Addresses pending subroutines inside the stack */\ntype SubroutineKey = symbol;\n\n/** Represents destination of the result of an operation. I.e. when sequence of\n * subroutine invocations, and computables terminates with result, this object\n * determines to which argument of which pending subroutine it should be delivered.\n * See special value for delivery of the final \"return\" result. */\ntype Destination = {\n op: SubroutineKey;\n arg: ArgumentKey;\n};\n\n/** Special address of operation, see below. */\nconst ReturnOpKey: unique symbol = Symbol();\n/** The same, but for the argument part of destination, see below. */\nconst ReturnArgKey = \"return\";\n\n/** Special destination, telling the executor that corresponding result should\n * be exposed as a final result, and execution terminate at this point. */\nconst ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey } as Destination;\n\nfunction isReturnDestination(destination: Destination): boolean {\n return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;\n}\n\n/** Queued operation, used inside the executor */\ntype QueuedOperation = {\n operation: Operation;\n destination: Destination;\n};\n\n/** Queued computation, returned by the first round of config execution. Such\n * computables should be returned in the intermediate representation of the\n * enclosing computable, and after they are resolved and passed to the\n * postprocessing routine, should be injected into the execution stack to\n * finalize the computation. */\ntype ScheduledComputable = {\n destination: Destination;\n computable: Computable<unknown>;\n};\n\n/** This is what ScheduledComputable transforms from intermediate\n * representation to post-processing. */\ntype MaterializedComputable = {\n destination: Destination;\n computable: unknown;\n};\n\n/** Main entry inside the execution stack. */\ntype PendingSubroutine = {\n subroutine: Subroutine;\n destination: Destination;\n argCounter: number;\n args: ArgumentValues;\n};\n\n/** Execution stack. The closest concept that this object along with enclosed\n * {@link PendingSubroutine}s represent is a Continuation.\n * https://en.wikipedia.org/wiki/Continuation */\ntype ExecutionStack = {\n result?: unknown;\n pendingSubroutines: Map<SubroutineKey, PendingSubroutine>;\n};\n\n/** Returns initial stack value. */\nfunction zeroStack(): ExecutionStack {\n return { pendingSubroutines: new Map<SubroutineKey, PendingSubroutine>() };\n}\n\n/** Implements main executor mechanism.\n * @param env to be passed to while executing operations\n * @param stack execution stack to continue execution from\n * @param operations operations to initiate the execution process\n * @param allowComputables if false, scheduling of async computables will result in error\n * */\nfunction execute(\n env: ExecutionEnvironment,\n stack: ExecutionStack,\n operations: QueuedOperation[],\n allowComputables: boolean,\n): ScheduledComputable[] {\n const operationQueue = new Denque<QueuedOperation>(operations);\n\n /** Returns false if final result is set as result of this operation,\n * true if we should continue processing. */\n const deliverResult = (destination: Destination, result: unknown): boolean => {\n if (isReturnDestination(destination)) {\n stack.result = result;\n return false;\n }\n\n const pending = notEmpty(stack.pendingSubroutines.get(destination.op));\n if (destination.arg in pending.args) throw new Error(\"argument already set\");\n pending.args[destination.arg] = result;\n pending.argCounter--;\n if (pending.argCounter === 0) {\n stack.pendingSubroutines.delete(destination.op);\n operationQueue.push({\n destination: pending.destination,\n operation: pending.subroutine(pending.args),\n });\n }\n\n return true;\n };\n\n // computables, scheduled during computation, are aggregated in this array,\n // and returned from the function in the end\n const computables: ScheduledComputable[] = [];\n\n // each loop = execution of a single queued operation\n mainLoop: while (operationQueue.length > 0) {\n const op = operationQueue.shift()!;\n const action = op.operation(env);\n switch (action.type) {\n case \"ReturnResult\":\n if (!deliverResult(op.destination, action.result)) break mainLoop; // this terminates execution\n break; // switch\n\n case \"ScheduleSubroutine\":\n {\n const newOpKey = Symbol();\n\n const argRequests = Object.entries(action.args);\n const initialArgCounter = argRequests.length;\n\n if (initialArgCounter === 0)\n // if no pending arguments\n operationQueue.push({\n destination: op.destination,\n operation: action.subroutine({}),\n });\n else {\n for (const [arg, operation] of argRequests)\n operationQueue.push({\n destination: { op: newOpKey, arg },\n operation,\n });\n\n stack.pendingSubroutines.set(newOpKey, {\n argCounter: initialArgCounter,\n args: {},\n subroutine: action.subroutine,\n destination: op.destination,\n });\n }\n }\n break;\n\n case \"ScheduleComputable\":\n if (!allowComputables)\n throw new Error(\"asynchronous operations are forbidden in this context\");\n computables.push({\n destination: op.destination,\n computable: action.computable,\n });\n break;\n\n default:\n assertNever(action);\n }\n }\n\n return computables;\n}\n\n//\n// Computable\n//\n\n/** Main method to render configurations */\nexport function computableFromCfg(\n drivers: MiddleLayerDriverKit,\n bCtx: BlockContextAny,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n return computableFromCfgUnsafe(drivers, toCfgContext(bCtx), cfg, ops);\n}\n\nexport function computableFromCfgUnsafe(\n drivers: MiddleLayerDriverKit,\n ctx: Record<string, unknown>,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n const key =\n `${ctx.blockId}#` +\n canonicalize({\n ctx: Object.fromEntries(\n Object.entries(ctx).filter(([k]) => NonKeyCtxFields.indexOf(k) === -1),\n ),\n cfg: cfg,\n })!;\n return Computable.makeRaw(\n (c) => {\n const env: ExecutionEnvironment = { drivers, cCtx: c };\n const stack = zeroStack();\n const computables = execute(\n env,\n stack,\n [\n {\n destination: ReturnDestination,\n operation: renderCfg(ctx, cfg),\n },\n ],\n true,\n );\n return {\n ir: computables,\n postprocessValue(value: MaterializedComputable[]): unknown {\n const resolvedOps: QueuedOperation[] = [];\n for (const mc of value)\n resolvedOps.push({ destination: mc.destination, operation: resOp(mc.computable) });\n const postEnv: ExecutionEnvironment = {\n drivers,\n get cCtx(): ComputableCtx {\n throw new Error(\"asynchronous operations are forbidden in this context\");\n },\n };\n\n // Post process can be called several times, that's why it must be a side-effect-free function.\n // But `execute` modifies a stack, so we have to defensively copy it here.\n const copyOfPendingSubrotines = new Map<SubroutineKey, PendingSubroutine>();\n for (const [key, value] of stack.pendingSubroutines)\n copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });\n const copiedStack: ExecutionStack = {\n result: stack.result,\n pendingSubroutines: copyOfPendingSubrotines,\n };\n execute(postEnv, copiedStack, resolvedOps, false);\n if (!(\"result\" in copiedStack))\n throw new Error(\"illegal cfg rendering stack state, no result\");\n return copiedStack.result;\n },\n };\n },\n { ...ops, key },\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"executor.cjs","names":["Denque","notEmpty","toCfgContext","NonKeyCtxFields","Computable","renderCfg","resOp"],"sources":["../../src/cfg_render/executor.ts"],"sourcesContent":["import type {\n ArgumentKey,\n ArgumentValues,\n ExecutionEnvironment,\n Operation,\n Subroutine,\n} from \"./operation\";\nimport Denque from \"denque\";\nimport { assertNever, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { ComputableCtx, ComputableRenderingOps } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { Cfg } from \"@platforma-sdk/model\";\nimport { renderCfg, resOp } from \"./renderer\";\nimport canonicalize from \"canonicalize\";\nimport type { BlockContextAny } from \"../middle_layer/block_ctx\";\nimport type { MiddleLayerDriverKit } from \"../middle_layer/driver_kit\";\nimport { NonKeyCtxFields, toCfgContext } from \"../middle_layer/block_ctx_unsafe\";\n\n/** Addresses pending subroutines inside the stack */\ntype SubroutineKey = symbol;\n\n/** Represents destination of the result of an operation. I.e. when sequence of\n * subroutine invocations, and computables terminates with result, this object\n * determines to which argument of which pending subroutine it should be delivered.\n * See special value for delivery of the final \"return\" result. */\ntype Destination = {\n op: SubroutineKey;\n arg: ArgumentKey;\n};\n\n/** Special address of operation, see below. */\nconst ReturnOpKey: unique symbol = Symbol();\n/** The same, but for the argument part of destination, see below. */\nconst ReturnArgKey = \"return\";\n\n/** Special destination, telling the executor that corresponding result should\n * be exposed as a final result, and execution terminate at this point. */\nconst ReturnDestination = { op: ReturnOpKey, arg: ReturnArgKey } as Destination;\n\nfunction isReturnDestination(destination: Destination): boolean {\n return destination.op == ReturnOpKey && destination.arg == ReturnArgKey;\n}\n\n/** Queued operation, used inside the executor */\ntype QueuedOperation = {\n operation: Operation;\n destination: Destination;\n};\n\n/** Queued computation, returned by the first round of config execution. Such\n * computables should be returned in the intermediate representation of the\n * enclosing computable, and after they are resolved and passed to the\n * postprocessing routine, should be injected into the execution stack to\n * finalize the computation. */\ntype ScheduledComputable = {\n destination: Destination;\n computable: Computable<unknown>;\n};\n\n/** This is what ScheduledComputable transforms from intermediate\n * representation to post-processing. */\ntype MaterializedComputable = {\n destination: Destination;\n computable: unknown;\n};\n\n/** Main entry inside the execution stack. */\ntype PendingSubroutine = {\n subroutine: Subroutine;\n destination: Destination;\n argCounter: number;\n args: ArgumentValues;\n};\n\n/** Execution stack. The closest concept that this object along with enclosed\n * {@link PendingSubroutine}s represent is a Continuation.\n * https://en.wikipedia.org/wiki/Continuation */\ntype ExecutionStack = {\n result?: unknown;\n pendingSubroutines: Map<SubroutineKey, PendingSubroutine>;\n};\n\n/** Returns initial stack value. */\nfunction zeroStack(): ExecutionStack {\n return { pendingSubroutines: new Map<SubroutineKey, PendingSubroutine>() };\n}\n\n/** Implements main executor mechanism.\n * @param env to be passed to while executing operations\n * @param stack execution stack to continue execution from\n * @param operations operations to initiate the execution process\n * @param allowComputables if false, scheduling of async computables will result in error\n * */\nfunction execute(\n env: ExecutionEnvironment,\n stack: ExecutionStack,\n operations: QueuedOperation[],\n allowComputables: boolean,\n): ScheduledComputable[] {\n const operationQueue = new Denque<QueuedOperation>(operations);\n\n /** Returns false if final result is set as result of this operation,\n * true if we should continue processing. */\n const deliverResult = (destination: Destination, result: unknown): boolean => {\n if (isReturnDestination(destination)) {\n stack.result = result;\n return false;\n }\n\n const pending = notEmpty(stack.pendingSubroutines.get(destination.op));\n if (destination.arg in pending.args) throw new Error(\"argument already set\");\n pending.args[destination.arg] = result;\n pending.argCounter--;\n if (pending.argCounter === 0) {\n stack.pendingSubroutines.delete(destination.op);\n operationQueue.push({\n destination: pending.destination,\n operation: pending.subroutine(pending.args),\n });\n }\n\n return true;\n };\n\n // computables, scheduled during computation, are aggregated in this array,\n // and returned from the function in the end\n const computables: ScheduledComputable[] = [];\n\n // each loop = execution of a single queued operation\n mainLoop: while (operationQueue.length > 0) {\n const op = operationQueue.shift()!;\n const action = op.operation(env);\n switch (action.type) {\n case \"ReturnResult\":\n if (!deliverResult(op.destination, action.result)) break mainLoop; // this terminates execution\n break; // switch\n\n case \"ScheduleSubroutine\":\n {\n const newOpKey = Symbol();\n\n const argRequests = Object.entries(action.args);\n const initialArgCounter = argRequests.length;\n\n if (initialArgCounter === 0)\n // if no pending arguments\n operationQueue.push({\n destination: op.destination,\n operation: action.subroutine({}),\n });\n else {\n for (const [arg, operation] of argRequests)\n operationQueue.push({\n destination: { op: newOpKey, arg },\n operation,\n });\n\n stack.pendingSubroutines.set(newOpKey, {\n argCounter: initialArgCounter,\n args: {},\n subroutine: action.subroutine,\n destination: op.destination,\n });\n }\n }\n break;\n\n case \"ScheduleComputable\":\n if (!allowComputables)\n throw new Error(\"asynchronous operations are forbidden in this context\");\n computables.push({\n destination: op.destination,\n computable: action.computable,\n });\n break;\n\n default:\n assertNever(action);\n }\n }\n\n return computables;\n}\n\n//\n// Computable\n//\n\n/** Main method to render configurations */\nexport function computableFromCfg(\n drivers: MiddleLayerDriverKit,\n bCtx: BlockContextAny,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n return computableFromCfgUnsafe(drivers, toCfgContext(bCtx), cfg, ops);\n}\n\nexport function computableFromCfgUnsafe(\n drivers: MiddleLayerDriverKit,\n ctx: Record<string, unknown>,\n cfg: Cfg,\n ops: Partial<ComputableRenderingOps> = {},\n): Computable<unknown> {\n const key =\n `${ctx.blockId}#` +\n canonicalize({\n ctx: Object.fromEntries(\n Object.entries(ctx).filter(([k]) => NonKeyCtxFields.indexOf(k) === -1),\n ),\n cfg: cfg,\n })!;\n return Computable.makeRaw(\n (c) => {\n const env: ExecutionEnvironment = { drivers, cCtx: c };\n const stack = zeroStack();\n const computables = execute(\n env,\n stack,\n [\n {\n destination: ReturnDestination,\n operation: renderCfg(ctx, cfg),\n },\n ],\n true,\n );\n return {\n ir: computables,\n postprocessValue(value: MaterializedComputable[]): unknown {\n const resolvedOps: QueuedOperation[] = [];\n for (const mc of value)\n resolvedOps.push({ destination: mc.destination, operation: resOp(mc.computable) });\n const postEnv: ExecutionEnvironment = {\n drivers,\n get cCtx(): ComputableCtx {\n throw new Error(\"asynchronous operations are forbidden in this context\");\n },\n };\n\n // Post process can be called several times, that's why it must be a side-effect-free function.\n // But `execute` modifies a stack, so we have to defensively copy it here.\n const copyOfPendingSubrotines = new Map<SubroutineKey, PendingSubroutine>();\n for (const [key, value] of stack.pendingSubroutines)\n copyOfPendingSubrotines.set(key, { ...value, args: { ...value.args } });\n const copiedStack: ExecutionStack = {\n result: stack.result,\n pendingSubroutines: copyOfPendingSubrotines,\n };\n execute(postEnv, copiedStack, resolvedOps, false);\n if (!(\"result\" in copiedStack))\n throw new Error(\"illegal cfg rendering stack state, no result\");\n return copiedStack.result;\n },\n };\n },\n { ...ops, key },\n );\n}\n"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { assertNever, notEmpty } from "@milaboratories/ts-helpers";
4
4
  import { Computable } from "@milaboratories/computable";
5
5
  import canonicalize from "canonicalize";
6
6
  import Denque from "denque";
7
- //#region src/cfg_render/executor.ts
7
+ // src/cfg_render/executor.ts
8
8
  /** Special address of operation, see below. */
9
9
  const ReturnOpKey = Symbol();
10
10
  /** The same, but for the argument part of destination, see below. */
@@ -147,7 +147,6 @@ function computableFromCfgUnsafe(drivers, ctx, cfg, ops = {}) {
147
147
  key
148
148
  });
149
149
  }
150
- //#endregion
151
150
  export { computableFromCfg, computableFromCfgUnsafe };
152
151
 
153
152
  //# sourceMappingURL=executor.js.map
@@ -2,7 +2,7 @@ const require_util = require("./util.cjs");
2
2
  const require_executor = require("./executor.cjs");
3
3
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
4
4
  let _milaboratories_computable = require("@milaboratories/computable");
5
- //#region src/cfg_render/renderer.ts
5
+ // src/cfg_render/renderer.ts
6
6
  function res(result) {
7
7
  return {
8
8
  type: "ReturnResult",
@@ -410,7 +410,6 @@ function renderCfg(ctx, cfg) {
410
410
  default: return (0, _milaboratories_ts_helpers.assertNever)(cfg);
411
411
  }
412
412
  }
413
- //#endregion
414
413
  exports.renderCfg = renderCfg;
415
414
  exports.resOp = resOp;
416
415
 
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.cjs","names":["Computable","computableFromCfgUnsafe","mapRecord"],"sources":["../../src/cfg_render/renderer.ts"],"sourcesContent":["import type {\n ArchiveFormat,\n Cfg,\n CfgMapArrayValues,\n CfgMapRecordValues,\n CfgMapResourceFields,\n RangeBytes,\n} from \"@platforma-sdk/model\";\nimport type { ArgumentRequests, Operation, OperationAction, Subroutine } from \"./operation\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { mapRecord } from \"./util\";\nimport { computableFromCfgUnsafe } from \"./executor\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport type { ComputableCtx } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\n\nfunction res(result: unknown): OperationAction {\n return {\n type: \"ReturnResult\",\n result: result,\n };\n}\n\nexport function resOp(result: unknown): Operation {\n return () => res(result);\n}\n\n//\n// Subroutines\n//\n\nconst SRMakeObject: Subroutine = (args) => {\n const result: Record<string | symbol, unknown> = {};\n for (const [k, v] of Object.entries(args)) result[k] = v;\n return resOp(result);\n};\n\nconst SRFlatten: Subroutine = (args) => {\n const source = args.source as unknown[] | undefined;\n if (source === undefined) return resOp(undefined);\n const result: unknown[] = [];\n for (const nested of source) {\n if (nested instanceof Array) result.push(...(nested as unknown[]));\n else result.push(nested);\n }\n return resOp(result);\n};\n\nconst SRGetResourceField: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n const field = args.field as string | undefined;\n if (source === undefined || field === undefined) return resOp(undefined);\n return ({ cCtx }) => {\n return res(cCtx.accessor(source).node().traverse(field)?.persist());\n };\n};\n\nfunction mapArrayToRecord<T, R>(elements: T[], cb: (e: T) => R): Record<string, R> {\n const result: Record<string, R> = {};\n const length = elements.length;\n for (let i = 0; i < length; i++) result[String(i)] = cb(elements[i]);\n return result;\n}\n\nfunction SRMapArrayValues1(\n ctx: Record<string, unknown>,\n ops: Pick<CfgMapArrayValues, \"itVar\" | \"mapping\">,\n): Subroutine {\n return (args) => {\n const source = args.source as unknown[] | undefined;\n if (source === undefined) return resOp(undefined);\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRCollectArrayFromArgs(source.length),\n args: mapArrayToRecord(source, (e) => renderCfg({ ...ctx, [ops.itVar]: e }, ops.mapping)),\n });\n };\n}\n\nfunction SRCollectArrayFromArgs(length: number): Subroutine {\n return (args) => {\n const result: unknown[] = [];\n for (let i = 0; i < length; i++) result.push(args[String(i)]);\n return resOp(result);\n };\n}\n\nfunction SRMapRecordValues1(\n ctx: Record<string, unknown>,\n ops: Pick<CfgMapRecordValues, \"itVar\" | \"mapping\">,\n): Subroutine {\n return (args) => {\n const source = args.source as Record<string, unknown> | undefined;\n if (source === undefined) return resOp(undefined);\n const nextArgs: ArgumentRequests = {};\n for (const [k, v] of Object.entries(source)) {\n const newCtx = { ...ctx, [ops.itVar]: v };\n nextArgs[k] = renderCfg(newCtx, ops.mapping);\n }\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMapRecordValues2,\n args: nextArgs,\n });\n };\n}\n\nconst SRMapRecordValues2: Subroutine = (args) => {\n return resOp(args);\n};\n\nconst SRIsEmpty: Subroutine = (args) => {\n const arg = args.arg as unknown[] | string | undefined;\n if (arg === undefined) return resOp(undefined);\n return resOp(arg.length === 0);\n};\n\nconst SRNot: Subroutine = (args) => {\n const operand = args.operand as boolean | undefined;\n if (operand === undefined) return resOp(undefined);\n return resOp(!operand);\n};\n\nconst SRAnd: Subroutine = (args) => {\n const operand1 = args.operand1 as boolean | undefined;\n const operand2 = args.operand2 as boolean | undefined;\n if (operand1 === undefined || operand2 === undefined) return resOp(undefined);\n return resOp(operand1 && operand2);\n};\n\nconst SROr: Subroutine = (args) => {\n const operand1 = args.operand1 as boolean | undefined;\n const operand2 = args.operand2 as boolean | undefined;\n if (operand1 === undefined || operand2 === undefined) return resOp(undefined);\n return resOp(operand1 || operand2);\n};\n\nconst SRResourceValueAsJson: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n return ({ cCtx }) => res(cCtx.accessor(source).node()?.getDataAsJson());\n};\n\nconst SRGetJsonField: Subroutine = (args) => {\n const source = args.source as Record<string, unknown> | undefined;\n const field = args.field as string | undefined;\n if (source === undefined || field === undefined) return resOp(undefined);\n return resOp(source[field]);\n};\n\nfunction SRMapResourceFields1(\n ctx: Record<string, unknown>,\n ops: Pick<CfgMapResourceFields, \"itVar\" | \"mapping\">,\n): Subroutine {\n return (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ cCtx }) => {\n const node = cCtx.accessor(source).node();\n\n const nextArgs: ArgumentRequests = {};\n for (const fieldName of node.listInputFields()) {\n const res = node.traverse(fieldName);\n if (res === undefined) nextArgs[fieldName] = resOp(undefined);\n else {\n const newCtx = { ...ctx, [ops.itVar]: res.persist() };\n nextArgs[fieldName] = renderCfg(newCtx, ops.mapping);\n }\n }\n\n return {\n type: \"ScheduleSubroutine\",\n subroutine: SRMapResourceFields2,\n args: nextArgs,\n };\n };\n };\n}\n\nconst SRMapResourceFields2: Subroutine = (args) => {\n return resOp(args);\n};\n\nconst SRGetBlobContent: (range?: RangeBytes) => Subroutine = (range) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: Computable.make(\n (ctx) => {\n return drivers.blobDriver.getDownloadedBlob(ctx.accessor(source).node().resourceInfo);\n },\n {\n postprocessValue: async (value) => {\n if (value === undefined) return undefined;\n return await drivers.blobDriver.getContent(value.handle, range);\n },\n },\n ),\n };\n };\n};\n\nconst SRGetBlobContentAsString: (range?: RangeBytes) => Subroutine = (range) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ cCtx, drivers }) => {\n // getting target resource id and type\n const resourceInfo = cCtx.accessor(source).node().resourceInfo;\n\n return {\n type: \"ScheduleComputable\",\n computable: Computable.make(\n (ctx) => drivers.blobDriver.getDownloadedBlob(resourceInfo, ctx),\n {\n postprocessValue: async (value) => {\n if (value === undefined) return undefined;\n const content = await drivers.blobDriver.getContent(value.handle, range);\n return content.toString();\n },\n },\n ),\n };\n };\n};\n\nconst SRGetBlobContentAsJson: (range?: RangeBytes) => Subroutine = (range) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: Computable.make(\n (c) => drivers.blobDriver.getDownloadedBlob(c.accessor(source).node().resourceInfo, c),\n {\n postprocessValue: async (value) => {\n if (value == undefined) return undefined;\n const content = await drivers.blobDriver.getContent(value.handle, range);\n if (content == undefined) return undefined;\n return JSON.parse(Buffer.from(content).toString()) as unknown;\n },\n },\n ),\n };\n };\n};\n\nconst SRGetDownloadedBlobContent: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return (ctx) => {\n return {\n type: \"ScheduleComputable\",\n computable: ctx.drivers.blobDriver.getDownloadedBlob(source),\n };\n };\n};\n\nconst SRGetOnDemandBlobContent: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.blobDriver.getOnDemandBlob(source),\n };\n };\n};\n\nconst SRExtractArchiveAndGetURL: (format: ArchiveFormat) => Subroutine = (format) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.blobToURLDriver.extractArchiveAndGetURL(source, format),\n };\n };\n};\n\nconst SRGetImportProgress: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.uploadDriver.getProgressId(source),\n };\n };\n};\n\nconst SRGetLastLogs: (lines: number) => Subroutine = (lines) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.logDriver.getLastLogs(source, lines),\n };\n };\n};\n\nconst SRGetProgressLog: (patternToSearch: string) => Subroutine = (patternToSearch) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.logDriver.getProgressLog(source, patternToSearch),\n };\n };\n};\n\nconst SRGetProgressLogWithInfo: (patternToSearch: string) => Subroutine =\n (patternToSearch) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.logDriver.getProgressLogWithInfo(source, patternToSearch),\n };\n };\n };\n\nconst SRGetLogHandle: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.logDriver.getLogHandle(source),\n };\n };\n};\n\n/** Renders configuration into executor's Operation */\nexport function renderCfg(ctx: Record<string, unknown>, cfg: Cfg): Operation {\n switch (cfg.type) {\n case \"GetFromCtx\": {\n const ctxValue = ctx[cfg.variable];\n if (typeof ctxValue === \"function\") {\n return (e) => res((ctxValue as (cCtx: ComputableCtx) => OperationAction)(e.cCtx));\n } else {\n return resOp(ctxValue);\n }\n }\n\n case \"Isolate\":\n return ({ drivers }) => ({\n type: \"ScheduleComputable\",\n computable: computableFromCfgUnsafe(drivers, ctx, cfg.cfg),\n });\n\n case \"Immediate\":\n return resOp(cfg.value);\n\n case \"GetJsonField\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetJsonField,\n args: {\n source: renderCfg(ctx, cfg.source),\n field: renderCfg(ctx, cfg.field),\n },\n });\n\n case \"MapArrayValues\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMapArrayValues1(ctx, cfg),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"MapRecordValues\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMapRecordValues1(ctx, cfg),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"MakeObject\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMakeObject,\n args: mapRecord(cfg.template, (c) => renderCfg(ctx, c)),\n });\n\n case \"MakeArray\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRCollectArrayFromArgs(cfg.template.length),\n args: mapArrayToRecord(cfg.template, (e) => renderCfg(ctx, e)),\n });\n\n case \"Flatten\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRFlatten,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"IsEmpty\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRIsEmpty,\n args: {\n arg: renderCfg(ctx, cfg.arg),\n },\n });\n\n case \"Not\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRNot,\n args: {\n operand: renderCfg(ctx, cfg.operand),\n },\n });\n\n case \"And\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRAnd,\n args: {\n operand1: renderCfg(ctx, cfg.operand1),\n operand2: renderCfg(ctx, cfg.operand2),\n },\n });\n\n case \"Or\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SROr,\n args: {\n operand1: renderCfg(ctx, cfg.operand1),\n operand2: renderCfg(ctx, cfg.operand2),\n },\n });\n\n case \"MapResourceFields\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMapResourceFields1(ctx, cfg),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetResourceField\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetResourceField,\n args: {\n source: renderCfg(ctx, cfg.source),\n field: renderCfg(ctx, cfg.field),\n },\n });\n\n case \"GetResourceValueAsJson\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRResourceValueAsJson,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetBlobContent\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetBlobContent(cfg.range),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetBlobContentAsString\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetBlobContentAsString(cfg.range),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetBlobContentAsJson\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetBlobContentAsJson(cfg.range),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetDownloadedBlobContent\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetDownloadedBlobContent,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetOnDemandBlobContent\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetOnDemandBlobContent,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"ExtractArchiveAndGetURL\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRExtractArchiveAndGetURL(cfg.format),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetImportProgress\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetImportProgress,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetLastLogs\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetLastLogs(cfg.lines),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetProgressLog\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetProgressLog(cfg.patternToSearch),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetProgressLogWithInfo\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetProgressLogWithInfo(cfg.patternToSearch),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetLogHandle\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetLogHandle,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n default:\n return assertNever(cfg);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"renderer.cjs","names":["Computable","computableFromCfgUnsafe","mapRecord","assertNever"],"sources":["../../src/cfg_render/renderer.ts"],"sourcesContent":["import type {\n ArchiveFormat,\n Cfg,\n CfgMapArrayValues,\n CfgMapRecordValues,\n CfgMapResourceFields,\n RangeBytes,\n} from \"@platforma-sdk/model\";\nimport type { ArgumentRequests, Operation, OperationAction, Subroutine } from \"./operation\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { mapRecord } from \"./util\";\nimport { computableFromCfgUnsafe } from \"./executor\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\nimport type { ComputableCtx } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\n\nfunction res(result: unknown): OperationAction {\n return {\n type: \"ReturnResult\",\n result: result,\n };\n}\n\nexport function resOp(result: unknown): Operation {\n return () => res(result);\n}\n\n//\n// Subroutines\n//\n\nconst SRMakeObject: Subroutine = (args) => {\n const result: Record<string | symbol, unknown> = {};\n for (const [k, v] of Object.entries(args)) result[k] = v;\n return resOp(result);\n};\n\nconst SRFlatten: Subroutine = (args) => {\n const source = args.source as unknown[] | undefined;\n if (source === undefined) return resOp(undefined);\n const result: unknown[] = [];\n for (const nested of source) {\n if (nested instanceof Array) result.push(...(nested as unknown[]));\n else result.push(nested);\n }\n return resOp(result);\n};\n\nconst SRGetResourceField: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n const field = args.field as string | undefined;\n if (source === undefined || field === undefined) return resOp(undefined);\n return ({ cCtx }) => {\n return res(cCtx.accessor(source).node().traverse(field)?.persist());\n };\n};\n\nfunction mapArrayToRecord<T, R>(elements: T[], cb: (e: T) => R): Record<string, R> {\n const result: Record<string, R> = {};\n const length = elements.length;\n for (let i = 0; i < length; i++) result[String(i)] = cb(elements[i]);\n return result;\n}\n\nfunction SRMapArrayValues1(\n ctx: Record<string, unknown>,\n ops: Pick<CfgMapArrayValues, \"itVar\" | \"mapping\">,\n): Subroutine {\n return (args) => {\n const source = args.source as unknown[] | undefined;\n if (source === undefined) return resOp(undefined);\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRCollectArrayFromArgs(source.length),\n args: mapArrayToRecord(source, (e) => renderCfg({ ...ctx, [ops.itVar]: e }, ops.mapping)),\n });\n };\n}\n\nfunction SRCollectArrayFromArgs(length: number): Subroutine {\n return (args) => {\n const result: unknown[] = [];\n for (let i = 0; i < length; i++) result.push(args[String(i)]);\n return resOp(result);\n };\n}\n\nfunction SRMapRecordValues1(\n ctx: Record<string, unknown>,\n ops: Pick<CfgMapRecordValues, \"itVar\" | \"mapping\">,\n): Subroutine {\n return (args) => {\n const source = args.source as Record<string, unknown> | undefined;\n if (source === undefined) return resOp(undefined);\n const nextArgs: ArgumentRequests = {};\n for (const [k, v] of Object.entries(source)) {\n const newCtx = { ...ctx, [ops.itVar]: v };\n nextArgs[k] = renderCfg(newCtx, ops.mapping);\n }\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMapRecordValues2,\n args: nextArgs,\n });\n };\n}\n\nconst SRMapRecordValues2: Subroutine = (args) => {\n return resOp(args);\n};\n\nconst SRIsEmpty: Subroutine = (args) => {\n const arg = args.arg as unknown[] | string | undefined;\n if (arg === undefined) return resOp(undefined);\n return resOp(arg.length === 0);\n};\n\nconst SRNot: Subroutine = (args) => {\n const operand = args.operand as boolean | undefined;\n if (operand === undefined) return resOp(undefined);\n return resOp(!operand);\n};\n\nconst SRAnd: Subroutine = (args) => {\n const operand1 = args.operand1 as boolean | undefined;\n const operand2 = args.operand2 as boolean | undefined;\n if (operand1 === undefined || operand2 === undefined) return resOp(undefined);\n return resOp(operand1 && operand2);\n};\n\nconst SROr: Subroutine = (args) => {\n const operand1 = args.operand1 as boolean | undefined;\n const operand2 = args.operand2 as boolean | undefined;\n if (operand1 === undefined || operand2 === undefined) return resOp(undefined);\n return resOp(operand1 || operand2);\n};\n\nconst SRResourceValueAsJson: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n return ({ cCtx }) => res(cCtx.accessor(source).node()?.getDataAsJson());\n};\n\nconst SRGetJsonField: Subroutine = (args) => {\n const source = args.source as Record<string, unknown> | undefined;\n const field = args.field as string | undefined;\n if (source === undefined || field === undefined) return resOp(undefined);\n return resOp(source[field]);\n};\n\nfunction SRMapResourceFields1(\n ctx: Record<string, unknown>,\n ops: Pick<CfgMapResourceFields, \"itVar\" | \"mapping\">,\n): Subroutine {\n return (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ cCtx }) => {\n const node = cCtx.accessor(source).node();\n\n const nextArgs: ArgumentRequests = {};\n for (const fieldName of node.listInputFields()) {\n const res = node.traverse(fieldName);\n if (res === undefined) nextArgs[fieldName] = resOp(undefined);\n else {\n const newCtx = { ...ctx, [ops.itVar]: res.persist() };\n nextArgs[fieldName] = renderCfg(newCtx, ops.mapping);\n }\n }\n\n return {\n type: \"ScheduleSubroutine\",\n subroutine: SRMapResourceFields2,\n args: nextArgs,\n };\n };\n };\n}\n\nconst SRMapResourceFields2: Subroutine = (args) => {\n return resOp(args);\n};\n\nconst SRGetBlobContent: (range?: RangeBytes) => Subroutine = (range) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: Computable.make(\n (ctx) => {\n return drivers.blobDriver.getDownloadedBlob(ctx.accessor(source).node().resourceInfo);\n },\n {\n postprocessValue: async (value) => {\n if (value === undefined) return undefined;\n return await drivers.blobDriver.getContent(value.handle, range);\n },\n },\n ),\n };\n };\n};\n\nconst SRGetBlobContentAsString: (range?: RangeBytes) => Subroutine = (range) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ cCtx, drivers }) => {\n // getting target resource id and type\n const resourceInfo = cCtx.accessor(source).node().resourceInfo;\n\n return {\n type: \"ScheduleComputable\",\n computable: Computable.make(\n (ctx) => drivers.blobDriver.getDownloadedBlob(resourceInfo, ctx),\n {\n postprocessValue: async (value) => {\n if (value === undefined) return undefined;\n const content = await drivers.blobDriver.getContent(value.handle, range);\n return content.toString();\n },\n },\n ),\n };\n };\n};\n\nconst SRGetBlobContentAsJson: (range?: RangeBytes) => Subroutine = (range) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: Computable.make(\n (c) => drivers.blobDriver.getDownloadedBlob(c.accessor(source).node().resourceInfo, c),\n {\n postprocessValue: async (value) => {\n if (value == undefined) return undefined;\n const content = await drivers.blobDriver.getContent(value.handle, range);\n if (content == undefined) return undefined;\n return JSON.parse(Buffer.from(content).toString()) as unknown;\n },\n },\n ),\n };\n };\n};\n\nconst SRGetDownloadedBlobContent: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return (ctx) => {\n return {\n type: \"ScheduleComputable\",\n computable: ctx.drivers.blobDriver.getDownloadedBlob(source),\n };\n };\n};\n\nconst SRGetOnDemandBlobContent: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.blobDriver.getOnDemandBlob(source),\n };\n };\n};\n\nconst SRExtractArchiveAndGetURL: (format: ArchiveFormat) => Subroutine = (format) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.blobToURLDriver.extractArchiveAndGetURL(source, format),\n };\n };\n};\n\nconst SRGetImportProgress: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.uploadDriver.getProgressId(source),\n };\n };\n};\n\nconst SRGetLastLogs: (lines: number) => Subroutine = (lines) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.logDriver.getLastLogs(source, lines),\n };\n };\n};\n\nconst SRGetProgressLog: (patternToSearch: string) => Subroutine = (patternToSearch) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.logDriver.getProgressLog(source, patternToSearch),\n };\n };\n};\n\nconst SRGetProgressLogWithInfo: (patternToSearch: string) => Subroutine =\n (patternToSearch) => (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.logDriver.getProgressLogWithInfo(source, patternToSearch),\n };\n };\n };\n\nconst SRGetLogHandle: Subroutine = (args) => {\n const source = args.source as PlTreeEntry | undefined;\n if (source === undefined) return resOp(undefined);\n\n return ({ drivers }) => {\n return {\n type: \"ScheduleComputable\",\n computable: drivers.logDriver.getLogHandle(source),\n };\n };\n};\n\n/** Renders configuration into executor's Operation */\nexport function renderCfg(ctx: Record<string, unknown>, cfg: Cfg): Operation {\n switch (cfg.type) {\n case \"GetFromCtx\": {\n const ctxValue = ctx[cfg.variable];\n if (typeof ctxValue === \"function\") {\n return (e) => res((ctxValue as (cCtx: ComputableCtx) => OperationAction)(e.cCtx));\n } else {\n return resOp(ctxValue);\n }\n }\n\n case \"Isolate\":\n return ({ drivers }) => ({\n type: \"ScheduleComputable\",\n computable: computableFromCfgUnsafe(drivers, ctx, cfg.cfg),\n });\n\n case \"Immediate\":\n return resOp(cfg.value);\n\n case \"GetJsonField\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetJsonField,\n args: {\n source: renderCfg(ctx, cfg.source),\n field: renderCfg(ctx, cfg.field),\n },\n });\n\n case \"MapArrayValues\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMapArrayValues1(ctx, cfg),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"MapRecordValues\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMapRecordValues1(ctx, cfg),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"MakeObject\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMakeObject,\n args: mapRecord(cfg.template, (c) => renderCfg(ctx, c)),\n });\n\n case \"MakeArray\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRCollectArrayFromArgs(cfg.template.length),\n args: mapArrayToRecord(cfg.template, (e) => renderCfg(ctx, e)),\n });\n\n case \"Flatten\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRFlatten,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"IsEmpty\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRIsEmpty,\n args: {\n arg: renderCfg(ctx, cfg.arg),\n },\n });\n\n case \"Not\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRNot,\n args: {\n operand: renderCfg(ctx, cfg.operand),\n },\n });\n\n case \"And\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRAnd,\n args: {\n operand1: renderCfg(ctx, cfg.operand1),\n operand2: renderCfg(ctx, cfg.operand2),\n },\n });\n\n case \"Or\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SROr,\n args: {\n operand1: renderCfg(ctx, cfg.operand1),\n operand2: renderCfg(ctx, cfg.operand2),\n },\n });\n\n case \"MapResourceFields\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRMapResourceFields1(ctx, cfg),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetResourceField\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetResourceField,\n args: {\n source: renderCfg(ctx, cfg.source),\n field: renderCfg(ctx, cfg.field),\n },\n });\n\n case \"GetResourceValueAsJson\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRResourceValueAsJson,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetBlobContent\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetBlobContent(cfg.range),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetBlobContentAsString\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetBlobContentAsString(cfg.range),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetBlobContentAsJson\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetBlobContentAsJson(cfg.range),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetDownloadedBlobContent\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetDownloadedBlobContent,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetOnDemandBlobContent\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetOnDemandBlobContent,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"ExtractArchiveAndGetURL\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRExtractArchiveAndGetURL(cfg.format),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetImportProgress\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetImportProgress,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetLastLogs\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetLastLogs(cfg.lines),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetProgressLog\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetProgressLog(cfg.patternToSearch),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetProgressLogWithInfo\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetProgressLogWithInfo(cfg.patternToSearch),\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n case \"GetLogHandle\":\n return () => ({\n type: \"ScheduleSubroutine\",\n subroutine: SRGetLogHandle,\n args: {\n source: renderCfg(ctx, cfg.source),\n },\n });\n\n default:\n return assertNever(cfg);\n }\n}\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { mapRecord } from "./util.js";
2
2
  import { computableFromCfgUnsafe } from "./executor.js";
3
3
  import { assertNever } from "@milaboratories/ts-helpers";
4
4
  import { Computable } from "@milaboratories/computable";
5
- //#region src/cfg_render/renderer.ts
5
+ // src/cfg_render/renderer.ts
6
6
  function res(result) {
7
7
  return {
8
8
  type: "ReturnResult",
@@ -410,7 +410,6 @@ function renderCfg(ctx, cfg) {
410
410
  default: return assertNever(cfg);
411
411
  }
412
412
  }
413
- //#endregion
414
413
  export { renderCfg, resOp };
415
414
 
416
415
  //# sourceMappingURL=renderer.js.map
@@ -1,5 +1,5 @@
1
1
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
2
- //#region src/cfg_render/traverse.ts
2
+ // src/cfg_render/traverse.ts
3
3
  function* traverseCfg(cfg, guide) {
4
4
  yield cfg;
5
5
  if (guide !== void 0 && !guide(cfg)) return;
@@ -55,7 +55,6 @@ function* traverseCfg(cfg, guide) {
55
55
  default: (0, _milaboratories_ts_helpers.assertNever)(cfg);
56
56
  }
57
57
  }
58
- //#endregion
59
58
  exports.traverseCfg = traverseCfg;
60
59
 
61
60
  //# sourceMappingURL=traverse.cjs.map
@@ -1,5 +1,5 @@
1
1
  import { assertNever } from "@milaboratories/ts-helpers";
2
- //#region src/cfg_render/traverse.ts
2
+ // src/cfg_render/traverse.ts
3
3
  function* traverseCfg(cfg, guide) {
4
4
  yield cfg;
5
5
  if (guide !== void 0 && !guide(cfg)) return;
@@ -55,7 +55,6 @@ function* traverseCfg(cfg, guide) {
55
55
  default: assertNever(cfg);
56
56
  }
57
57
  }
58
- //#endregion
59
58
  export { traverseCfg };
60
59
 
61
60
  //# sourceMappingURL=traverse.js.map
@@ -1,5 +1,5 @@
1
1
  const require_traverse = require("./traverse.cjs");
2
- //#region src/cfg_render/util.ts
2
+ // src/cfg_render/util.ts
3
3
  function mapRecord(obj, mapper) {
4
4
  const result = {};
5
5
  for (const [key, value] of Object.entries(obj)) result[key] = mapper(value);
@@ -18,7 +18,6 @@ function hasActiveCfgComponents(cfg) {
18
18
  for (const nested of require_traverse.traverseCfg(cfg)) if (isActiveCfg(nested)) return true;
19
19
  return false;
20
20
  }
21
- //#endregion
22
21
  exports.hasActiveCfgComponents = hasActiveCfgComponents;
23
22
  exports.ifNotUndef = ifNotUndef;
24
23
  exports.mapRecord = mapRecord;
@@ -1,5 +1,5 @@
1
1
  import { traverseCfg } from "./traverse.js";
2
- //#region src/cfg_render/util.ts
2
+ // src/cfg_render/util.ts
3
3
  function mapRecord(obj, mapper) {
4
4
  const result = {};
5
5
  for (const [key, value] of Object.entries(obj)) result[key] = mapper(value);
@@ -18,7 +18,6 @@ function hasActiveCfgComponents(cfg) {
18
18
  for (const nested of traverseCfg(cfg)) if (isActiveCfg(nested)) return true;
19
19
  return false;
20
20
  }
21
- //#endregion
22
21
  export { hasActiveCfgComponents, ifNotUndef, mapRecord };
23
22
 
24
23
  //# sourceMappingURL=util.js.map
@@ -1,4 +1,4 @@
1
- //#region src/debug/index.ts
1
+ // src/debug/index.ts
2
2
  const VALID_TRAVERSAL_MODES = [
3
3
  "auto",
4
4
  "client-bfs",
@@ -34,7 +34,6 @@ function getDebugFlags() {
34
34
  if (treeTraversalMode !== void 0) flags.treeTraversalMode = treeTraversalMode;
35
35
  return flags;
36
36
  }
37
- //#endregion
38
37
  exports.getDebugFlags = getDebugFlags;
39
38
  exports.parseTraversalMode = parseTraversalMode;
40
39
 
@@ -1,4 +1,4 @@
1
- //#region src/debug/index.ts
1
+ // src/debug/index.ts
2
2
  const VALID_TRAVERSAL_MODES = [
3
3
  "auto",
4
4
  "client-bfs",
@@ -34,7 +34,6 @@ function getDebugFlags() {
34
34
  if (treeTraversalMode !== void 0) flags.treeTraversalMode = treeTraversalMode;
35
35
  return flags;
36
36
  }
37
- //#endregion
38
37
  export { getDebugFlags, parseTraversalMode };
39
38
 
40
39
  //# sourceMappingURL=index.js.map