@milaboratories/pl-middle-layer 1.64.37 → 1.64.39

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 (247) hide show
  1. package/dist/_virtual/{_@oxc-project_runtime@0.123.0/helpers → _@oxc-project_runtime@0.137.0/helpers/esm}/usingCtx.cjs +2 -2
  2. package/dist/_virtual/{_@oxc-project_runtime@0.123.0/helpers → _@oxc-project_runtime@0.137.0/helpers/esm}/usingCtx.js +2 -2
  3. package/dist/block_registry/index.cjs +11 -3
  4. package/dist/block_registry/index.d.ts +3 -2
  5. package/dist/block_registry/index.js +4 -3
  6. package/dist/block_registry/registry-v2-provider.cjs +1 -1
  7. package/dist/block_registry/registry-v2-provider.cjs.map +1 -1
  8. package/dist/block_registry/registry-v2-provider.d.ts.map +1 -1
  9. package/dist/block_registry/registry-v2-provider.js +1 -0
  10. package/dist/block_registry/registry-v2-provider.js.map +1 -1
  11. package/dist/block_registry/registry.cjs +20 -3
  12. package/dist/block_registry/registry.cjs.map +1 -1
  13. package/dist/block_registry/registry.d.ts +7 -1
  14. package/dist/block_registry/registry.d.ts.map +1 -1
  15. package/dist/block_registry/registry.js +17 -1
  16. package/dist/block_registry/registry.js.map +1 -1
  17. package/dist/block_registry/watcher.cjs +21 -2
  18. package/dist/block_registry/watcher.cjs.map +1 -1
  19. package/dist/block_registry/watcher.d.ts +1 -1
  20. package/dist/block_registry/watcher.d.ts.map +1 -1
  21. package/dist/block_registry/watcher.js +21 -3
  22. package/dist/block_registry/watcher.js.map +1 -1
  23. package/dist/block_registry/well_known_registries.cjs.map +1 -1
  24. package/dist/block_registry/well_known_registries.d.ts.map +1 -1
  25. package/dist/block_registry/well_known_registries.js.map +1 -1
  26. package/dist/cfg_render/executor.cjs +2 -2
  27. package/dist/cfg_render/executor.cjs.map +1 -1
  28. package/dist/cfg_render/executor.js.map +1 -1
  29. package/dist/cfg_render/renderer.cjs +0 -1
  30. package/dist/cfg_render/renderer.cjs.map +1 -1
  31. package/dist/cfg_render/renderer.js.map +1 -1
  32. package/dist/cfg_render/traverse.cjs +0 -1
  33. package/dist/cfg_render/traverse.cjs.map +1 -1
  34. package/dist/cfg_render/traverse.js.map +1 -1
  35. package/dist/cfg_render/util.cjs.map +1 -1
  36. package/dist/cfg_render/util.js.map +1 -1
  37. package/dist/debug/index.cjs +1 -0
  38. package/dist/debug/index.cjs.map +1 -1
  39. package/dist/debug/index.js +1 -1
  40. package/dist/debug/index.js.map +1 -1
  41. package/dist/dev_env/index.cjs +9 -1
  42. package/dist/dev_env/index.cjs.map +1 -1
  43. package/dist/dev_env/index.js +1 -1
  44. package/dist/dev_env/index.js.map +1 -1
  45. package/dist/dev_env/util.cjs +1 -1
  46. package/dist/dev_env/util.cjs.map +1 -1
  47. package/dist/dev_env/util.js.map +1 -1
  48. package/dist/index.cjs +2 -0
  49. package/dist/index.d.ts +3 -3
  50. package/dist/index.js +3 -3
  51. package/dist/js_render/computable_context.cjs +8 -5
  52. package/dist/js_render/computable_context.cjs.map +1 -1
  53. package/dist/js_render/computable_context.js +5 -1
  54. package/dist/js_render/computable_context.js.map +1 -1
  55. package/dist/js_render/context.cjs +4 -1
  56. package/dist/js_render/context.cjs.map +1 -1
  57. package/dist/js_render/context.js +4 -1
  58. package/dist/js_render/context.js.map +1 -1
  59. package/dist/js_render/index.cjs +0 -1
  60. package/dist/js_render/index.cjs.map +1 -1
  61. package/dist/js_render/index.js.map +1 -1
  62. package/dist/js_render/service_injectors.cjs +2 -3
  63. package/dist/js_render/service_injectors.cjs.map +1 -1
  64. package/dist/js_render/service_injectors.js +1 -1
  65. package/dist/js_render/service_injectors.js.map +1 -1
  66. package/dist/middle_layer/active_cfg.cjs +0 -1
  67. package/dist/middle_layer/active_cfg.cjs.map +1 -1
  68. package/dist/middle_layer/active_cfg.js.map +1 -1
  69. package/dist/middle_layer/block.cjs +0 -1
  70. package/dist/middle_layer/block.cjs.map +1 -1
  71. package/dist/middle_layer/block.js.map +1 -1
  72. package/dist/middle_layer/block_ctx.cjs +0 -1
  73. package/dist/middle_layer/block_ctx.cjs.map +1 -1
  74. package/dist/middle_layer/block_ctx.js.map +1 -1
  75. package/dist/middle_layer/block_ctx_unsafe.cjs.map +1 -1
  76. package/dist/middle_layer/block_ctx_unsafe.js.map +1 -1
  77. package/dist/middle_layer/driver_kit.cjs +0 -1
  78. package/dist/middle_layer/driver_kit.cjs.map +1 -1
  79. package/dist/middle_layer/driver_kit.js.map +1 -1
  80. package/dist/middle_layer/frontend_path.cjs +5 -1
  81. package/dist/middle_layer/frontend_path.cjs.map +1 -1
  82. package/dist/middle_layer/frontend_path.js +6 -1
  83. package/dist/middle_layer/frontend_path.js.map +1 -1
  84. package/dist/middle_layer/index.cjs +13 -5
  85. package/dist/middle_layer/index.d.ts +2 -1
  86. package/dist/middle_layer/index.js +6 -5
  87. package/dist/middle_layer/middle_layer.cjs +7 -1
  88. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  89. package/dist/middle_layer/middle_layer.d.ts.map +1 -1
  90. package/dist/middle_layer/middle_layer.js +7 -0
  91. package/dist/middle_layer/middle_layer.js.map +1 -1
  92. package/dist/middle_layer/navigation_states.cjs +0 -1
  93. package/dist/middle_layer/navigation_states.cjs.map +1 -1
  94. package/dist/middle_layer/navigation_states.js.map +1 -1
  95. package/dist/middle_layer/ops.cjs +1 -1
  96. package/dist/middle_layer/ops.cjs.map +1 -1
  97. package/dist/middle_layer/ops.d.ts.map +1 -1
  98. package/dist/middle_layer/ops.js.map +1 -1
  99. package/dist/middle_layer/project.cjs +9 -2
  100. package/dist/middle_layer/project.cjs.map +1 -1
  101. package/dist/middle_layer/project.d.ts.map +1 -1
  102. package/dist/middle_layer/project.js +5 -1
  103. package/dist/middle_layer/project.js.map +1 -1
  104. package/dist/middle_layer/project_list.cjs +2 -1
  105. package/dist/middle_layer/project_list.cjs.map +1 -1
  106. package/dist/middle_layer/project_list.js +1 -1
  107. package/dist/middle_layer/project_list.js.map +1 -1
  108. package/dist/middle_layer/project_overview.cjs +0 -1
  109. package/dist/middle_layer/project_overview.cjs.map +1 -1
  110. package/dist/middle_layer/project_overview.js.map +1 -1
  111. package/dist/middle_layer/project_overview_light.cjs +0 -1
  112. package/dist/middle_layer/project_overview_light.cjs.map +1 -1
  113. package/dist/middle_layer/project_overview_light.js.map +1 -1
  114. package/dist/middle_layer/render.cjs +0 -1
  115. package/dist/middle_layer/render.cjs.map +1 -1
  116. package/dist/middle_layer/render.js.map +1 -1
  117. package/dist/middle_layer/types.d.ts.map +1 -1
  118. package/dist/middle_layer/util.cjs +0 -1
  119. package/dist/middle_layer/util.cjs.map +1 -1
  120. package/dist/middle_layer/util.js.map +1 -1
  121. package/dist/model/args.cjs +1 -1
  122. package/dist/model/args.cjs.map +1 -1
  123. package/dist/model/args.js +1 -1
  124. package/dist/model/args.js.map +1 -1
  125. package/dist/model/block_pack_spec.cjs +5 -0
  126. package/dist/model/block_pack_spec.cjs.map +1 -1
  127. package/dist/model/block_pack_spec.d.ts +19 -2
  128. package/dist/model/block_pack_spec.d.ts.map +1 -1
  129. package/dist/model/block_pack_spec.js +5 -1
  130. package/dist/model/block_pack_spec.js.map +1 -1
  131. package/dist/model/frontend.d.ts.map +1 -1
  132. package/dist/model/index.d.ts +2 -1
  133. package/dist/model/project_helper.cjs +2 -1
  134. package/dist/model/project_helper.cjs.map +1 -1
  135. package/dist/model/project_helper.d.ts +1 -1
  136. package/dist/model/project_helper.d.ts.map +1 -1
  137. package/dist/model/project_helper.js +2 -0
  138. package/dist/model/project_helper.js.map +1 -1
  139. package/dist/model/project_model.cjs +2 -1
  140. package/dist/model/project_model.cjs.map +1 -1
  141. package/dist/model/project_model.d.ts.map +1 -1
  142. package/dist/model/project_model.js +2 -2
  143. package/dist/model/project_model.js.map +1 -1
  144. package/dist/model/project_model_util.cjs +4 -3
  145. package/dist/model/project_model_util.cjs.map +1 -1
  146. package/dist/model/project_model_util.js +4 -4
  147. package/dist/model/project_model_util.js.map +1 -1
  148. package/dist/model/template_spec.d.ts.map +1 -1
  149. package/dist/mutator/block-pack/block_pack.cjs +41 -4
  150. package/dist/mutator/block-pack/block_pack.cjs.map +1 -1
  151. package/dist/mutator/block-pack/block_pack.d.ts.map +1 -1
  152. package/dist/mutator/block-pack/block_pack.js +40 -4
  153. package/dist/mutator/block-pack/block_pack.js.map +1 -1
  154. package/dist/mutator/block-pack/frontend.cjs +5 -1
  155. package/dist/mutator/block-pack/frontend.cjs.map +1 -1
  156. package/dist/mutator/block-pack/frontend.js +6 -1
  157. package/dist/mutator/block-pack/frontend.js.map +1 -1
  158. package/dist/mutator/block-pack/required_capabilities.cjs +0 -1
  159. package/dist/mutator/block-pack/required_capabilities.cjs.map +1 -1
  160. package/dist/mutator/block-pack/required_capabilities.js.map +1 -1
  161. package/dist/mutator/context_export.cjs +0 -1
  162. package/dist/mutator/context_export.cjs.map +1 -1
  163. package/dist/mutator/context_export.js.map +1 -1
  164. package/dist/mutator/migration.cjs +0 -1
  165. package/dist/mutator/migration.cjs.map +1 -1
  166. package/dist/mutator/migration.js.map +1 -1
  167. package/dist/mutator/project.cjs +22 -4
  168. package/dist/mutator/project.cjs.map +1 -1
  169. package/dist/mutator/project.js +21 -4
  170. package/dist/mutator/project.js.map +1 -1
  171. package/dist/mutator/template/direct_template_loader.cjs +0 -1
  172. package/dist/mutator/template/direct_template_loader.cjs.map +1 -1
  173. package/dist/mutator/template/direct_template_loader.js.map +1 -1
  174. package/dist/mutator/template/direct_template_loader_v3.cjs +0 -1
  175. package/dist/mutator/template/direct_template_loader_v3.cjs.map +1 -1
  176. package/dist/mutator/template/direct_template_loader_v3.js.map +1 -1
  177. package/dist/mutator/template/render_block.cjs +4 -1
  178. package/dist/mutator/template/render_block.cjs.map +1 -1
  179. package/dist/mutator/template/render_block.js +1 -1
  180. package/dist/mutator/template/render_block.js.map +1 -1
  181. package/dist/mutator/template/render_template.cjs +0 -1
  182. package/dist/mutator/template/render_template.cjs.map +1 -1
  183. package/dist/mutator/template/render_template.d.ts.map +1 -1
  184. package/dist/mutator/template/render_template.js.map +1 -1
  185. package/dist/mutator/template/template_cache.cjs +6 -3
  186. package/dist/mutator/template/template_cache.cjs.map +1 -1
  187. package/dist/mutator/template/template_cache.d.ts +1 -2
  188. package/dist/mutator/template/template_cache.d.ts.map +1 -1
  189. package/dist/mutator/template/template_cache.js +6 -2
  190. package/dist/mutator/template/template_cache.js.map +1 -1
  191. package/dist/mutator/template/template_loading.cjs +1 -1
  192. package/dist/mutator/template/template_loading.cjs.map +1 -1
  193. package/dist/mutator/template/template_loading.d.ts.map +1 -1
  194. package/dist/mutator/template/template_loading.js.map +1 -1
  195. package/dist/network_check/network_check.cjs +0 -1
  196. package/dist/network_check/network_check.cjs.map +1 -1
  197. package/dist/network_check/network_check.d.ts.map +1 -1
  198. package/dist/network_check/network_check.js.map +1 -1
  199. package/dist/network_check/pings.cjs +3 -1
  200. package/dist/network_check/pings.cjs.map +1 -1
  201. package/dist/network_check/pings.js +1 -1
  202. package/dist/network_check/pings.js.map +1 -1
  203. package/dist/network_check/template.cjs +10 -3
  204. package/dist/network_check/template.cjs.map +1 -1
  205. package/dist/network_check/template.js +1 -1
  206. package/dist/network_check/template.js.map +1 -1
  207. package/dist/pool/data.cjs +12 -1
  208. package/dist/pool/data.cjs.map +1 -1
  209. package/dist/pool/data.d.ts.map +1 -1
  210. package/dist/pool/data.js +3 -1
  211. package/dist/pool/data.js.map +1 -1
  212. package/dist/pool/driver.cjs +8 -1
  213. package/dist/pool/driver.cjs.map +1 -1
  214. package/dist/pool/driver.d.ts.map +1 -1
  215. package/dist/pool/driver.js +7 -0
  216. package/dist/pool/driver.js.map +1 -1
  217. package/dist/pool/index.cjs +5 -2
  218. package/dist/pool/index.d.ts +2 -1
  219. package/dist/pool/index.js +3 -2
  220. package/dist/pool/p_object_collection.cjs +1 -1
  221. package/dist/pool/p_object_collection.cjs.map +1 -1
  222. package/dist/pool/p_object_collection.js.map +1 -1
  223. package/dist/pool/result_pool.cjs +2 -1
  224. package/dist/pool/result_pool.cjs.map +1 -1
  225. package/dist/pool/result_pool.js +2 -0
  226. package/dist/pool/result_pool.js.map +1 -1
  227. package/dist/service_factories.cjs +0 -1
  228. package/dist/service_factories.cjs.map +1 -1
  229. package/dist/service_factories.js.map +1 -1
  230. package/dist/worker/WorkerManager.cjs +3 -2
  231. package/dist/worker/WorkerManager.cjs.map +1 -1
  232. package/dist/worker/WorkerManager.js +2 -1
  233. package/dist/worker/WorkerManager.js.map +1 -1
  234. package/dist/worker/worker.cjs +0 -1
  235. package/dist/worker/worker.cjs.map +1 -1
  236. package/dist/worker/worker.js.map +1 -1
  237. package/dist/worker/workerApi.cjs +0 -1
  238. package/dist/worker/workerApi.cjs.map +1 -1
  239. package/dist/worker/workerApi.js.map +1 -1
  240. package/package.json +15 -15
  241. package/src/block_registry/registry.ts +19 -0
  242. package/src/block_registry/watcher.ts +25 -2
  243. package/src/middle_layer/frontend_path.ts +22 -2
  244. package/src/model/block_pack_spec.ts +24 -1
  245. package/src/mutator/block-pack/block_pack.ts +61 -2
  246. package/src/mutator/block-pack/frontend.ts +20 -2
  247. package/src/mutator/template/template_cache.ts +10 -2
@@ -1 +1 @@
1
- {"version":3,"file":"service_injectors.cjs","names":["Services","ServiceNotRegisteredError","PoolEntryGuard"],"sources":["../../src/js_render/service_injectors.ts"],"sourcesContent":["import type { QuickJSHandle, VmFunctionImplementation } from \"quickjs-emscripten\";\nimport type { InferServiceModel, ServiceBrand } from \"@milaboratories/pl-model-common\";\nimport { Services, ServiceNotRegisteredError } from \"@milaboratories/pl-model-common\";\nimport type {\n AxesId,\n AxesSpec,\n DataInfo,\n PColumn,\n PColumnSpec,\n PColumnValues,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n SingleAxisSelector,\n BuildQueryInput,\n DeleteColumnRequest,\n DiscoverColumnsRequest,\n PFrameDef,\n SpecQuery,\n PTableDef,\n PTableDefV2,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { PoolEntryGuard } from \"@milaboratories/pl-model-common\";\nimport type { JsExecutionContext } from \"./context\";\nimport type { ComputableContextHelper } from \"./computable_context\";\n\ntype VmMethod = VmFunctionImplementation<QuickJSHandle>;\n\nexport type ServiceInjectorContext = {\n host: ComputableContextHelper;\n vm: JsExecutionContext;\n};\n\n// Each injector returns a record of method name -> VM function implementation.\n// The framework automatically registers them with serviceFnKey(serviceId, methodName).\nexport type ServiceInjector<Methods extends string = string> = (\n ctx: ServiceInjectorContext,\n) => Record<Methods, VmMethod>;\n\n// Type-safe injector for a specific service — must return all methods from the model interface.\ntype ServiceInjectorFor<S extends keyof typeof Services> = ServiceInjector<\n string & keyof InferServiceModel<ServiceBrand<(typeof Services)[S]>>\n>;\n\n// Complete, type-checked injector map.\n// Adding a service to Services without an entry here is a compile-time error.\n// Missing a method from the interface is also a compile-time error.\ntype ServiceInjectorMap = { [K in keyof typeof Services]: ServiceInjectorFor<K> };\n\nexport function getServiceInjectors(): ServiceInjectorMap {\n return {\n PFrameSpec: ({ host, vm }: ServiceInjectorContext) => {\n const driver = host.serviceRegistry.get(Services.PFrameSpec);\n if (!driver)\n throw new ServiceNotRegisteredError(\n `Service \"${Services.PFrameSpec}\" has no factory in ModelServiceRegistry. Provide a non-null factory.`,\n );\n\n return {\n createSpecFrame: (specs: QuickJSHandle) => {\n using guard = new PoolEntryGuard(\n driver.createSpecFrame(vm.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n );\n host.addOnDestroy(guard.entry.unref);\n const entry = guard.keep();\n // TODO: add [Symbol.dispose] once QuickJS supports ES2024 explicit resource management\n const obj = vm.vm.newObject();\n vm.vm.newString(entry.key).consume((k) => vm.vm.setProp(obj, \"key\", k));\n vm.vm\n .newFunction(\"unref\", () => {\n entry.unref();\n })\n .consume((fn) => vm.vm.setProp(obj, \"unref\", fn));\n return obj;\n },\n\n listColumns: (handle: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.listColumns(vm.vm.getString(handle) as SpecFrameHandle)),\n\n discoverColumns: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.discoverColumns(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n ),\n\n buildQuery: (input: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.buildQuery(vm.importObjectViaJson(input) as BuildQueryInput),\n ),\n\n deleteColumn: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.deleteColumn(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DeleteColumnRequest,\n ),\n ),\n\n evaluateQuery: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.evaluateQuery(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as SpecQuery,\n ),\n ),\n\n expandAxes: (spec: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.expandAxes(vm.importObjectViaJson(spec) as AxesSpec)),\n\n collapseAxes: (ids: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.collapseAxes(vm.importObjectViaJson(ids) as AxesId)),\n\n findAxis: (spec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findAxis(\n vm.importObjectViaJson(spec) as AxesSpec,\n vm.importObjectViaJson(selector) as SingleAxisSelector,\n ),\n ),\n\n findTableColumn: (tableSpec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findTableColumn(\n vm.importObjectViaJson(tableSpec) as PTableColumnSpec[],\n vm.importObjectViaJson(selector) as PTableColumnId,\n ),\n ),\n\n rewriteLegacyFilters: (request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.rewriteLegacyFilters(\n vm.importObjectViaJson(request) as {\n tableSpec: PTableColumnSpec[];\n filters: PTableRecordFilter[];\n },\n ),\n ),\n };\n },\n\n // Dialog has no model-side surface — workflow scripts cannot open save dialogs.\n // Declared as an empty injector to satisfy the exhaustive ServiceInjectorMap.\n Dialog: () => ({}) as Record<never, VmMethod>,\n\n PFrame: ({ host, vm }: ServiceInjectorContext) => ({\n createPFrame: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPFrame(\n vm.importObjectViaJson(def) as PFrameDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTable: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTable(\n vm.importObjectViaJson(def) as PTableDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTableV2: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTableV2(\n vm.importObjectViaJson(def) as PTableDefV2<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n }),\n };\n}\n"],"mappings":";;;;AAkDA,SAAgB,sBAA0C;AACxD,QAAO;EACL,aAAa,EAAE,MAAM,SAAiC;GACpD,MAAM,SAAS,KAAK,gBAAgB,IAAIA,gCAAAA,SAAS,WAAW;AAC5D,OAAI,CAAC,OACH,OAAM,IAAIC,gCAAAA,0BACR,YAAYD,gCAAAA,SAAS,WAAW,uEACjC;AAEH,UAAO;IACL,kBAAkB,UAAyB;;;MACzC,MAAM,QAAA,YAAA,EAAQ,IAAIE,gCAAAA,eAChB,OAAO,gBAAgB,GAAG,oBAAoB,MAAM,CAAgC,CACrF,CAAA;AACD,WAAK,aAAa,MAAM,MAAM,MAAM;MACpC,MAAM,QAAQ,MAAM,MAAM;MAE1B,MAAM,MAAM,GAAG,GAAG,WAAW;AAC7B,SAAG,GAAG,UAAU,MAAM,IAAI,CAAC,SAAS,MAAM,GAAG,GAAG,QAAQ,KAAK,OAAO,EAAE,CAAC;AACvE,SAAG,GACA,YAAY,eAAe;AAC1B,aAAM,OAAO;QACb,CACD,SAAS,OAAO,GAAG,GAAG,QAAQ,KAAK,SAAS,GAAG,CAAC;AACnD,aAAO;;;;;;;IAGT,cAAc,WACZ,GAAG,oBAAoB,OAAO,YAAY,GAAG,GAAG,UAAU,OAAO,CAAoB,CAAC;IAExF,kBAAkB,QAAuB,YACvC,GAAG,oBACD,OAAO,gBACL,GAAG,GAAG,UAAU,OAAO,EACvB,GAAG,oBAAoB,QAAQ,CAChC,CACF;IAEH,aAAa,UACX,GAAG,oBACD,OAAO,WAAW,GAAG,oBAAoB,MAAM,CAAoB,CACpE;IAEH,eAAe,QAAuB,YACpC,GAAG,oBACD,OAAO,aACL,GAAG,GAAG,UAAU,OAAO,EACvB,GAAG,oBAAoB,QAAQ,CAChC,CACF;IAEH,gBAAgB,QAAuB,YACrC,GAAG,oBACD,OAAO,cACL,GAAG,GAAG,UAAU,OAAO,EACvB,GAAG,oBAAoB,QAAQ,CAChC,CACF;IAEH,aAAa,SACX,GAAG,oBAAoB,OAAO,WAAW,GAAG,oBAAoB,KAAK,CAAa,CAAC;IAErF,eAAe,QACb,GAAG,oBAAoB,OAAO,aAAa,GAAG,oBAAoB,IAAI,CAAW,CAAC;IAEpF,WAAW,MAAqB,aAC9B,GAAG,kBACD,OAAO,SACL,GAAG,oBAAoB,KAAK,EAC5B,GAAG,oBAAoB,SAAS,CACjC,CACF;IAEH,kBAAkB,WAA0B,aAC1C,GAAG,kBACD,OAAO,gBACL,GAAG,oBAAoB,UAAU,EACjC,GAAG,oBAAoB,SAAS,CACjC,CACF;IAEH,uBAAuB,YACrB,GAAG,oBACD,OAAO,qBACL,GAAG,oBAAoB,QAAQ,CAIhC,CACF;IACJ;;EAKH,eAAe,EAAE;EAEjB,SAAS,EAAE,MAAM,UAAkC;GACjD,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,IAAI,CAG5B,CACF;GAEH,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,IAAI,CAG5B,CACF;GAEH,iBAAiB,QACf,GAAG,kBACD,KAAK,eACH,GAAG,oBAAoB,IAAI,CAG5B,CACF;GACJ;EACF"}
1
+ {"version":3,"file":"service_injectors.cjs","names":["Services","ServiceNotRegisteredError","PoolEntryGuard"],"sources":["../../src/js_render/service_injectors.ts"],"sourcesContent":["import type { QuickJSHandle, VmFunctionImplementation } from \"quickjs-emscripten\";\nimport type { InferServiceModel, ServiceBrand } from \"@milaboratories/pl-model-common\";\nimport { Services, ServiceNotRegisteredError } from \"@milaboratories/pl-model-common\";\nimport type {\n AxesId,\n AxesSpec,\n DataInfo,\n PColumn,\n PColumnSpec,\n PColumnValues,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n SingleAxisSelector,\n BuildQueryInput,\n DeleteColumnRequest,\n DiscoverColumnsRequest,\n PFrameDef,\n SpecQuery,\n PTableDef,\n PTableDefV2,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { PoolEntryGuard } from \"@milaboratories/pl-model-common\";\nimport type { JsExecutionContext } from \"./context\";\nimport type { ComputableContextHelper } from \"./computable_context\";\n\ntype VmMethod = VmFunctionImplementation<QuickJSHandle>;\n\nexport type ServiceInjectorContext = {\n host: ComputableContextHelper;\n vm: JsExecutionContext;\n};\n\n// Each injector returns a record of method name -> VM function implementation.\n// The framework automatically registers them with serviceFnKey(serviceId, methodName).\nexport type ServiceInjector<Methods extends string = string> = (\n ctx: ServiceInjectorContext,\n) => Record<Methods, VmMethod>;\n\n// Type-safe injector for a specific service — must return all methods from the model interface.\ntype ServiceInjectorFor<S extends keyof typeof Services> = ServiceInjector<\n string & keyof InferServiceModel<ServiceBrand<(typeof Services)[S]>>\n>;\n\n// Complete, type-checked injector map.\n// Adding a service to Services without an entry here is a compile-time error.\n// Missing a method from the interface is also a compile-time error.\ntype ServiceInjectorMap = { [K in keyof typeof Services]: ServiceInjectorFor<K> };\n\nexport function getServiceInjectors(): ServiceInjectorMap {\n return {\n PFrameSpec: ({ host, vm }: ServiceInjectorContext) => {\n const driver = host.serviceRegistry.get(Services.PFrameSpec);\n if (!driver)\n throw new ServiceNotRegisteredError(\n `Service \"${Services.PFrameSpec}\" has no factory in ModelServiceRegistry. Provide a non-null factory.`,\n );\n\n return {\n createSpecFrame: (specs: QuickJSHandle) => {\n using guard = new PoolEntryGuard(\n driver.createSpecFrame(vm.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n );\n host.addOnDestroy(guard.entry.unref);\n const entry = guard.keep();\n // TODO: add [Symbol.dispose] once QuickJS supports ES2024 explicit resource management\n const obj = vm.vm.newObject();\n vm.vm.newString(entry.key).consume((k) => vm.vm.setProp(obj, \"key\", k));\n vm.vm\n .newFunction(\"unref\", () => {\n entry.unref();\n })\n .consume((fn) => vm.vm.setProp(obj, \"unref\", fn));\n return obj;\n },\n\n listColumns: (handle: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.listColumns(vm.vm.getString(handle) as SpecFrameHandle)),\n\n discoverColumns: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.discoverColumns(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n ),\n\n buildQuery: (input: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.buildQuery(vm.importObjectViaJson(input) as BuildQueryInput),\n ),\n\n deleteColumn: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.deleteColumn(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DeleteColumnRequest,\n ),\n ),\n\n evaluateQuery: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.evaluateQuery(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as SpecQuery,\n ),\n ),\n\n expandAxes: (spec: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.expandAxes(vm.importObjectViaJson(spec) as AxesSpec)),\n\n collapseAxes: (ids: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.collapseAxes(vm.importObjectViaJson(ids) as AxesId)),\n\n findAxis: (spec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findAxis(\n vm.importObjectViaJson(spec) as AxesSpec,\n vm.importObjectViaJson(selector) as SingleAxisSelector,\n ),\n ),\n\n findTableColumn: (tableSpec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findTableColumn(\n vm.importObjectViaJson(tableSpec) as PTableColumnSpec[],\n vm.importObjectViaJson(selector) as PTableColumnId,\n ),\n ),\n\n rewriteLegacyFilters: (request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.rewriteLegacyFilters(\n vm.importObjectViaJson(request) as {\n tableSpec: PTableColumnSpec[];\n filters: PTableRecordFilter[];\n },\n ),\n ),\n };\n },\n\n // Dialog has no model-side surface — workflow scripts cannot open save dialogs.\n // Declared as an empty injector to satisfy the exhaustive ServiceInjectorMap.\n Dialog: () => ({}) as Record<never, VmMethod>,\n\n PFrame: ({ host, vm }: ServiceInjectorContext) => ({\n createPFrame: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPFrame(\n vm.importObjectViaJson(def) as PFrameDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTable: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTable(\n vm.importObjectViaJson(def) as PTableDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTableV2: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTableV2(\n vm.importObjectViaJson(def) as PTableDefV2<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n }),\n };\n}\n"],"mappings":";;;AAkDA,SAAgB,sBAA0C;CACxD,OAAO;EACL,aAAa,EAAE,MAAM,SAAiC;GACpD,MAAM,SAAS,KAAK,gBAAgB,IAAIA,gCAAAA,SAAS,UAAU;GAC3D,IAAI,CAAC,QACH,MAAM,IAAIC,gCAAAA,0BACR,YAAYD,gCAAAA,SAAS,WAAW,sEAClC;GAEF,OAAO;IACL,kBAAkB,UAAyB;;;MACzC,MAAM,QAAA,YAAA,EAAQ,IAAIE,gCAAAA,eAChB,OAAO,gBAAgB,GAAG,oBAAoB,KAAK,CAAgC,CACrF,CAAA;MACA,KAAK,aAAa,MAAM,MAAM,KAAK;MACnC,MAAM,QAAQ,MAAM,KAAK;MAEzB,MAAM,MAAM,GAAG,GAAG,UAAU;MAC5B,GAAG,GAAG,UAAU,MAAM,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC;MACtE,GAAG,GACA,YAAY,eAAe;OAC1B,MAAM,MAAM;MACd,CAAC,CAAC,CACD,SAAS,OAAO,GAAG,GAAG,QAAQ,KAAK,SAAS,EAAE,CAAC;MAClD,OAAO;;;;;;IACT;IAEA,cAAc,WACZ,GAAG,oBAAoB,OAAO,YAAY,GAAG,GAAG,UAAU,MAAM,CAAoB,CAAC;IAEvF,kBAAkB,QAAuB,YACvC,GAAG,oBACD,OAAO,gBACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,aAAa,UACX,GAAG,oBACD,OAAO,WAAW,GAAG,oBAAoB,KAAK,CAAoB,CACpE;IAEF,eAAe,QAAuB,YACpC,GAAG,oBACD,OAAO,aACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,gBAAgB,QAAuB,YACrC,GAAG,oBACD,OAAO,cACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,aAAa,SACX,GAAG,oBAAoB,OAAO,WAAW,GAAG,oBAAoB,IAAI,CAAa,CAAC;IAEpF,eAAe,QACb,GAAG,oBAAoB,OAAO,aAAa,GAAG,oBAAoB,GAAG,CAAW,CAAC;IAEnF,WAAW,MAAqB,aAC9B,GAAG,kBACD,OAAO,SACL,GAAG,oBAAoB,IAAI,GAC3B,GAAG,oBAAoB,QAAQ,CACjC,CACF;IAEF,kBAAkB,WAA0B,aAC1C,GAAG,kBACD,OAAO,gBACL,GAAG,oBAAoB,SAAS,GAChC,GAAG,oBAAoB,QAAQ,CACjC,CACF;IAEF,uBAAuB,YACrB,GAAG,oBACD,OAAO,qBACL,GAAG,oBAAoB,OAAO,CAIhC,CACF;GACJ;EACF;EAIA,eAAe,CAAC;EAEhB,SAAS,EAAE,MAAM,UAAkC;GACjD,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;GAEF,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;GAEF,iBAAiB,QACf,GAAG,kBACD,KAAK,eACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;EACJ;CACF;AACF"}
@@ -1,4 +1,4 @@
1
- import { _usingCtx } from "../_virtual/_@oxc-project_runtime@0.123.0/helpers/usingCtx.js";
1
+ import _usingCtx from "../_virtual/_@oxc-project_runtime@0.137.0/helpers/esm/usingCtx.js";
2
2
  import { PoolEntryGuard, ServiceNotRegisteredError, Services } from "@milaboratories/pl-model-common";
3
3
  //#region src/js_render/service_injectors.ts
4
4
  function getServiceInjectors() {
@@ -1 +1 @@
1
- {"version":3,"file":"service_injectors.js","names":[],"sources":["../../src/js_render/service_injectors.ts"],"sourcesContent":["import type { QuickJSHandle, VmFunctionImplementation } from \"quickjs-emscripten\";\nimport type { InferServiceModel, ServiceBrand } from \"@milaboratories/pl-model-common\";\nimport { Services, ServiceNotRegisteredError } from \"@milaboratories/pl-model-common\";\nimport type {\n AxesId,\n AxesSpec,\n DataInfo,\n PColumn,\n PColumnSpec,\n PColumnValues,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n SingleAxisSelector,\n BuildQueryInput,\n DeleteColumnRequest,\n DiscoverColumnsRequest,\n PFrameDef,\n SpecQuery,\n PTableDef,\n PTableDefV2,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { PoolEntryGuard } from \"@milaboratories/pl-model-common\";\nimport type { JsExecutionContext } from \"./context\";\nimport type { ComputableContextHelper } from \"./computable_context\";\n\ntype VmMethod = VmFunctionImplementation<QuickJSHandle>;\n\nexport type ServiceInjectorContext = {\n host: ComputableContextHelper;\n vm: JsExecutionContext;\n};\n\n// Each injector returns a record of method name -> VM function implementation.\n// The framework automatically registers them with serviceFnKey(serviceId, methodName).\nexport type ServiceInjector<Methods extends string = string> = (\n ctx: ServiceInjectorContext,\n) => Record<Methods, VmMethod>;\n\n// Type-safe injector for a specific service — must return all methods from the model interface.\ntype ServiceInjectorFor<S extends keyof typeof Services> = ServiceInjector<\n string & keyof InferServiceModel<ServiceBrand<(typeof Services)[S]>>\n>;\n\n// Complete, type-checked injector map.\n// Adding a service to Services without an entry here is a compile-time error.\n// Missing a method from the interface is also a compile-time error.\ntype ServiceInjectorMap = { [K in keyof typeof Services]: ServiceInjectorFor<K> };\n\nexport function getServiceInjectors(): ServiceInjectorMap {\n return {\n PFrameSpec: ({ host, vm }: ServiceInjectorContext) => {\n const driver = host.serviceRegistry.get(Services.PFrameSpec);\n if (!driver)\n throw new ServiceNotRegisteredError(\n `Service \"${Services.PFrameSpec}\" has no factory in ModelServiceRegistry. Provide a non-null factory.`,\n );\n\n return {\n createSpecFrame: (specs: QuickJSHandle) => {\n using guard = new PoolEntryGuard(\n driver.createSpecFrame(vm.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n );\n host.addOnDestroy(guard.entry.unref);\n const entry = guard.keep();\n // TODO: add [Symbol.dispose] once QuickJS supports ES2024 explicit resource management\n const obj = vm.vm.newObject();\n vm.vm.newString(entry.key).consume((k) => vm.vm.setProp(obj, \"key\", k));\n vm.vm\n .newFunction(\"unref\", () => {\n entry.unref();\n })\n .consume((fn) => vm.vm.setProp(obj, \"unref\", fn));\n return obj;\n },\n\n listColumns: (handle: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.listColumns(vm.vm.getString(handle) as SpecFrameHandle)),\n\n discoverColumns: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.discoverColumns(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n ),\n\n buildQuery: (input: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.buildQuery(vm.importObjectViaJson(input) as BuildQueryInput),\n ),\n\n deleteColumn: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.deleteColumn(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DeleteColumnRequest,\n ),\n ),\n\n evaluateQuery: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.evaluateQuery(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as SpecQuery,\n ),\n ),\n\n expandAxes: (spec: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.expandAxes(vm.importObjectViaJson(spec) as AxesSpec)),\n\n collapseAxes: (ids: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.collapseAxes(vm.importObjectViaJson(ids) as AxesId)),\n\n findAxis: (spec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findAxis(\n vm.importObjectViaJson(spec) as AxesSpec,\n vm.importObjectViaJson(selector) as SingleAxisSelector,\n ),\n ),\n\n findTableColumn: (tableSpec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findTableColumn(\n vm.importObjectViaJson(tableSpec) as PTableColumnSpec[],\n vm.importObjectViaJson(selector) as PTableColumnId,\n ),\n ),\n\n rewriteLegacyFilters: (request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.rewriteLegacyFilters(\n vm.importObjectViaJson(request) as {\n tableSpec: PTableColumnSpec[];\n filters: PTableRecordFilter[];\n },\n ),\n ),\n };\n },\n\n // Dialog has no model-side surface — workflow scripts cannot open save dialogs.\n // Declared as an empty injector to satisfy the exhaustive ServiceInjectorMap.\n Dialog: () => ({}) as Record<never, VmMethod>,\n\n PFrame: ({ host, vm }: ServiceInjectorContext) => ({\n createPFrame: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPFrame(\n vm.importObjectViaJson(def) as PFrameDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTable: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTable(\n vm.importObjectViaJson(def) as PTableDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTableV2: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTableV2(\n vm.importObjectViaJson(def) as PTableDefV2<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n }),\n };\n}\n"],"mappings":";;;AAkDA,SAAgB,sBAA0C;AACxD,QAAO;EACL,aAAa,EAAE,MAAM,SAAiC;GACpD,MAAM,SAAS,KAAK,gBAAgB,IAAI,SAAS,WAAW;AAC5D,OAAI,CAAC,OACH,OAAM,IAAI,0BACR,YAAY,SAAS,WAAW,uEACjC;AAEH,UAAO;IACL,kBAAkB,UAAyB;;;MACzC,MAAM,QAAA,YAAA,EAAQ,IAAI,eAChB,OAAO,gBAAgB,GAAG,oBAAoB,MAAM,CAAgC,CACrF,CAAA;AACD,WAAK,aAAa,MAAM,MAAM,MAAM;MACpC,MAAM,QAAQ,MAAM,MAAM;MAE1B,MAAM,MAAM,GAAG,GAAG,WAAW;AAC7B,SAAG,GAAG,UAAU,MAAM,IAAI,CAAC,SAAS,MAAM,GAAG,GAAG,QAAQ,KAAK,OAAO,EAAE,CAAC;AACvE,SAAG,GACA,YAAY,eAAe;AAC1B,aAAM,OAAO;QACb,CACD,SAAS,OAAO,GAAG,GAAG,QAAQ,KAAK,SAAS,GAAG,CAAC;AACnD,aAAO;;;;;;;IAGT,cAAc,WACZ,GAAG,oBAAoB,OAAO,YAAY,GAAG,GAAG,UAAU,OAAO,CAAoB,CAAC;IAExF,kBAAkB,QAAuB,YACvC,GAAG,oBACD,OAAO,gBACL,GAAG,GAAG,UAAU,OAAO,EACvB,GAAG,oBAAoB,QAAQ,CAChC,CACF;IAEH,aAAa,UACX,GAAG,oBACD,OAAO,WAAW,GAAG,oBAAoB,MAAM,CAAoB,CACpE;IAEH,eAAe,QAAuB,YACpC,GAAG,oBACD,OAAO,aACL,GAAG,GAAG,UAAU,OAAO,EACvB,GAAG,oBAAoB,QAAQ,CAChC,CACF;IAEH,gBAAgB,QAAuB,YACrC,GAAG,oBACD,OAAO,cACL,GAAG,GAAG,UAAU,OAAO,EACvB,GAAG,oBAAoB,QAAQ,CAChC,CACF;IAEH,aAAa,SACX,GAAG,oBAAoB,OAAO,WAAW,GAAG,oBAAoB,KAAK,CAAa,CAAC;IAErF,eAAe,QACb,GAAG,oBAAoB,OAAO,aAAa,GAAG,oBAAoB,IAAI,CAAW,CAAC;IAEpF,WAAW,MAAqB,aAC9B,GAAG,kBACD,OAAO,SACL,GAAG,oBAAoB,KAAK,EAC5B,GAAG,oBAAoB,SAAS,CACjC,CACF;IAEH,kBAAkB,WAA0B,aAC1C,GAAG,kBACD,OAAO,gBACL,GAAG,oBAAoB,UAAU,EACjC,GAAG,oBAAoB,SAAS,CACjC,CACF;IAEH,uBAAuB,YACrB,GAAG,oBACD,OAAO,qBACL,GAAG,oBAAoB,QAAQ,CAIhC,CACF;IACJ;;EAKH,eAAe,EAAE;EAEjB,SAAS,EAAE,MAAM,UAAkC;GACjD,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,IAAI,CAG5B,CACF;GAEH,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,IAAI,CAG5B,CACF;GAEH,iBAAiB,QACf,GAAG,kBACD,KAAK,eACH,GAAG,oBAAoB,IAAI,CAG5B,CACF;GACJ;EACF"}
1
+ {"version":3,"file":"service_injectors.js","names":[],"sources":["../../src/js_render/service_injectors.ts"],"sourcesContent":["import type { QuickJSHandle, VmFunctionImplementation } from \"quickjs-emscripten\";\nimport type { InferServiceModel, ServiceBrand } from \"@milaboratories/pl-model-common\";\nimport { Services, ServiceNotRegisteredError } from \"@milaboratories/pl-model-common\";\nimport type {\n AxesId,\n AxesSpec,\n DataInfo,\n PColumn,\n PColumnSpec,\n PColumnValues,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n SingleAxisSelector,\n BuildQueryInput,\n DeleteColumnRequest,\n DiscoverColumnsRequest,\n PFrameDef,\n SpecQuery,\n PTableDef,\n PTableDefV2,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { PoolEntryGuard } from \"@milaboratories/pl-model-common\";\nimport type { JsExecutionContext } from \"./context\";\nimport type { ComputableContextHelper } from \"./computable_context\";\n\ntype VmMethod = VmFunctionImplementation<QuickJSHandle>;\n\nexport type ServiceInjectorContext = {\n host: ComputableContextHelper;\n vm: JsExecutionContext;\n};\n\n// Each injector returns a record of method name -> VM function implementation.\n// The framework automatically registers them with serviceFnKey(serviceId, methodName).\nexport type ServiceInjector<Methods extends string = string> = (\n ctx: ServiceInjectorContext,\n) => Record<Methods, VmMethod>;\n\n// Type-safe injector for a specific service — must return all methods from the model interface.\ntype ServiceInjectorFor<S extends keyof typeof Services> = ServiceInjector<\n string & keyof InferServiceModel<ServiceBrand<(typeof Services)[S]>>\n>;\n\n// Complete, type-checked injector map.\n// Adding a service to Services without an entry here is a compile-time error.\n// Missing a method from the interface is also a compile-time error.\ntype ServiceInjectorMap = { [K in keyof typeof Services]: ServiceInjectorFor<K> };\n\nexport function getServiceInjectors(): ServiceInjectorMap {\n return {\n PFrameSpec: ({ host, vm }: ServiceInjectorContext) => {\n const driver = host.serviceRegistry.get(Services.PFrameSpec);\n if (!driver)\n throw new ServiceNotRegisteredError(\n `Service \"${Services.PFrameSpec}\" has no factory in ModelServiceRegistry. Provide a non-null factory.`,\n );\n\n return {\n createSpecFrame: (specs: QuickJSHandle) => {\n using guard = new PoolEntryGuard(\n driver.createSpecFrame(vm.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n );\n host.addOnDestroy(guard.entry.unref);\n const entry = guard.keep();\n // TODO: add [Symbol.dispose] once QuickJS supports ES2024 explicit resource management\n const obj = vm.vm.newObject();\n vm.vm.newString(entry.key).consume((k) => vm.vm.setProp(obj, \"key\", k));\n vm.vm\n .newFunction(\"unref\", () => {\n entry.unref();\n })\n .consume((fn) => vm.vm.setProp(obj, \"unref\", fn));\n return obj;\n },\n\n listColumns: (handle: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.listColumns(vm.vm.getString(handle) as SpecFrameHandle)),\n\n discoverColumns: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.discoverColumns(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n ),\n\n buildQuery: (input: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.buildQuery(vm.importObjectViaJson(input) as BuildQueryInput),\n ),\n\n deleteColumn: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.deleteColumn(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DeleteColumnRequest,\n ),\n ),\n\n evaluateQuery: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.evaluateQuery(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as SpecQuery,\n ),\n ),\n\n expandAxes: (spec: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.expandAxes(vm.importObjectViaJson(spec) as AxesSpec)),\n\n collapseAxes: (ids: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.collapseAxes(vm.importObjectViaJson(ids) as AxesId)),\n\n findAxis: (spec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findAxis(\n vm.importObjectViaJson(spec) as AxesSpec,\n vm.importObjectViaJson(selector) as SingleAxisSelector,\n ),\n ),\n\n findTableColumn: (tableSpec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findTableColumn(\n vm.importObjectViaJson(tableSpec) as PTableColumnSpec[],\n vm.importObjectViaJson(selector) as PTableColumnId,\n ),\n ),\n\n rewriteLegacyFilters: (request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.rewriteLegacyFilters(\n vm.importObjectViaJson(request) as {\n tableSpec: PTableColumnSpec[];\n filters: PTableRecordFilter[];\n },\n ),\n ),\n };\n },\n\n // Dialog has no model-side surface — workflow scripts cannot open save dialogs.\n // Declared as an empty injector to satisfy the exhaustive ServiceInjectorMap.\n Dialog: () => ({}) as Record<never, VmMethod>,\n\n PFrame: ({ host, vm }: ServiceInjectorContext) => ({\n createPFrame: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPFrame(\n vm.importObjectViaJson(def) as PFrameDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTable: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTable(\n vm.importObjectViaJson(def) as PTableDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTableV2: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTableV2(\n vm.importObjectViaJson(def) as PTableDefV2<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n }),\n };\n}\n"],"mappings":";;;AAkDA,SAAgB,sBAA0C;CACxD,OAAO;EACL,aAAa,EAAE,MAAM,SAAiC;GACpD,MAAM,SAAS,KAAK,gBAAgB,IAAI,SAAS,UAAU;GAC3D,IAAI,CAAC,QACH,MAAM,IAAI,0BACR,YAAY,SAAS,WAAW,sEAClC;GAEF,OAAO;IACL,kBAAkB,UAAyB;;;MACzC,MAAM,QAAA,YAAA,EAAQ,IAAI,eAChB,OAAO,gBAAgB,GAAG,oBAAoB,KAAK,CAAgC,CACrF,CAAA;MACA,KAAK,aAAa,MAAM,MAAM,KAAK;MACnC,MAAM,QAAQ,MAAM,KAAK;MAEzB,MAAM,MAAM,GAAG,GAAG,UAAU;MAC5B,GAAG,GAAG,UAAU,MAAM,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC;MACtE,GAAG,GACA,YAAY,eAAe;OAC1B,MAAM,MAAM;MACd,CAAC,CAAC,CACD,SAAS,OAAO,GAAG,GAAG,QAAQ,KAAK,SAAS,EAAE,CAAC;MAClD,OAAO;;;;;;IACT;IAEA,cAAc,WACZ,GAAG,oBAAoB,OAAO,YAAY,GAAG,GAAG,UAAU,MAAM,CAAoB,CAAC;IAEvF,kBAAkB,QAAuB,YACvC,GAAG,oBACD,OAAO,gBACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,aAAa,UACX,GAAG,oBACD,OAAO,WAAW,GAAG,oBAAoB,KAAK,CAAoB,CACpE;IAEF,eAAe,QAAuB,YACpC,GAAG,oBACD,OAAO,aACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,gBAAgB,QAAuB,YACrC,GAAG,oBACD,OAAO,cACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,aAAa,SACX,GAAG,oBAAoB,OAAO,WAAW,GAAG,oBAAoB,IAAI,CAAa,CAAC;IAEpF,eAAe,QACb,GAAG,oBAAoB,OAAO,aAAa,GAAG,oBAAoB,GAAG,CAAW,CAAC;IAEnF,WAAW,MAAqB,aAC9B,GAAG,kBACD,OAAO,SACL,GAAG,oBAAoB,IAAI,GAC3B,GAAG,oBAAoB,QAAQ,CACjC,CACF;IAEF,kBAAkB,WAA0B,aAC1C,GAAG,kBACD,OAAO,gBACL,GAAG,oBAAoB,SAAS,GAChC,GAAG,oBAAoB,QAAQ,CACjC,CACF;IAEF,uBAAuB,YACrB,GAAG,oBACD,OAAO,qBACL,GAAG,oBAAoB,OAAO,CAIhC,CACF;GACJ;EACF;EAIA,eAAe,CAAC;EAEhB,SAAS,EAAE,MAAM,UAAkC;GACjD,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;GAEF,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;GAEF,iBAAiB,QACf,GAAG,kBACD,KAAK,eACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;EACJ;CACF;AACF"}
@@ -1,4 +1,3 @@
1
- require("../_virtual/_rolldown/runtime.cjs");
2
1
  const require_project_model = require("../model/project_model.cjs");
3
2
  const require_project_model_util = require("../model/project_model_util.cjs");
4
3
  const require_block_ctx = require("./block_ctx.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"active_cfg.cjs","names":["Computable","ProjectStructureKey","allBlocks","getBlockPackInfo","isActive","constructBlockContext","computableFromCfgOrRF"],"sources":["../../src/middle_layer/active_cfg.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { constructBlockContext } from \"./block_ctx\";\nimport { computableFromCfgOrRF, isActive } from \"./render\";\nimport { getBlockPackInfo } from \"./util\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\n\n/** Returns derived general project state form the project resource */\nexport function activeConfigs(\n prjEntry: PlTreeEntry,\n env: MiddleLayerEnvironment,\n): Computable<unknown[]> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const ret: Computable<unknown>[] = [];\n for (const { id } of allBlocks(structure)) {\n const bp = getBlockPackInfo(prj, id);\n if (bp === undefined) continue;\n\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(bp.cfg));\n if (codeWithInfoOrError.error) continue;\n\n const activeOutputConfigs = Object.entries(bp.cfg.outputs)\n .map(([, cfg]) => cfg)\n .filter((cfg) => isActive(cfg))\n .map((cfg) => cfg);\n\n if (activeOutputConfigs.length === 0) continue;\n\n const blockCtx = constructBlockContext(prj.persist(), id);\n\n for (const cfg of activeOutputConfigs) {\n ret.push(\n Computable.wrapError(\n computableFromCfgOrRF(env, blockCtx, cfg, codeWithInfoOrError.value, bp.bpId),\n ),\n );\n }\n }\n\n return ret;\n });\n}\n"],"mappings":";;;;;;;;;;;AAaA,SAAgB,cACd,UACA,KACuB;AACvB,QAAOA,2BAAAA,WAAW,MAAM,QAAQ;EAC9B,MAAM,MAAM,IAAI,SAAS,SAAS,CAAC,MAAM;EAEzC,MAAM,aAAA,GAAA,2BAAA,UAAqB,IAAI,kBAAoCC,sBAAAA,oBAAoB,CAAC;EACxF,MAAM,MAA6B,EAAE;AACrC,OAAK,MAAM,EAAE,QAAQC,2BAAAA,UAAU,UAAU,EAAE;GACzC,MAAM,KAAKC,aAAAA,iBAAiB,KAAK,GAAG;AACpC,OAAI,OAAO,KAAA,EAAW;GAEtB,MAAM,uBAAA,GAAA,qBAAA,qBAAA,GAAA,qBAAA,qBAA6D,GAAG,IAAI,CAAC;AAC3E,OAAI,oBAAoB,MAAO;GAE/B,MAAM,sBAAsB,OAAO,QAAQ,GAAG,IAAI,QAAQ,CACvD,KAAK,GAAG,SAAS,IAAI,CACrB,QAAQ,QAAQC,eAAAA,SAAS,IAAI,CAAC,CAC9B,KAAK,QAAQ,IAAI;AAEpB,OAAI,oBAAoB,WAAW,EAAG;GAEtC,MAAM,WAAWC,kBAAAA,sBAAsB,IAAI,SAAS,EAAE,GAAG;AAEzD,QAAK,MAAM,OAAO,oBAChB,KAAI,KACFL,2BAAAA,WAAW,UACTM,eAAAA,sBAAsB,KAAK,UAAU,KAAK,oBAAoB,OAAO,GAAG,KAAK,CAC9E,CACF;;AAIL,SAAO;GACP"}
1
+ {"version":3,"file":"active_cfg.cjs","names":["Computable","ProjectStructureKey","allBlocks","getBlockPackInfo","isActive","constructBlockContext","computableFromCfgOrRF"],"sources":["../../src/middle_layer/active_cfg.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { constructBlockContext } from \"./block_ctx\";\nimport { computableFromCfgOrRF, isActive } from \"./render\";\nimport { getBlockPackInfo } from \"./util\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\n\n/** Returns derived general project state form the project resource */\nexport function activeConfigs(\n prjEntry: PlTreeEntry,\n env: MiddleLayerEnvironment,\n): Computable<unknown[]> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const ret: Computable<unknown>[] = [];\n for (const { id } of allBlocks(structure)) {\n const bp = getBlockPackInfo(prj, id);\n if (bp === undefined) continue;\n\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(bp.cfg));\n if (codeWithInfoOrError.error) continue;\n\n const activeOutputConfigs = Object.entries(bp.cfg.outputs)\n .map(([, cfg]) => cfg)\n .filter((cfg) => isActive(cfg))\n .map((cfg) => cfg);\n\n if (activeOutputConfigs.length === 0) continue;\n\n const blockCtx = constructBlockContext(prj.persist(), id);\n\n for (const cfg of activeOutputConfigs) {\n ret.push(\n Computable.wrapError(\n computableFromCfgOrRF(env, blockCtx, cfg, codeWithInfoOrError.value, bp.bpId),\n ),\n );\n }\n }\n\n return ret;\n });\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAgB,cACd,UACA,KACuB;CACvB,OAAOA,2BAAAA,WAAW,MAAM,QAAQ;EAC9B,MAAM,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,KAAK;EAExC,MAAM,aAAA,GAAA,2BAAA,SAAA,CAAqB,IAAI,kBAAoCC,sBAAAA,mBAAmB,CAAC;EACvF,MAAM,MAA6B,CAAC;EACpC,KAAK,MAAM,EAAE,QAAQC,2BAAAA,UAAU,SAAS,GAAG;GACzC,MAAM,KAAKC,aAAAA,iBAAiB,KAAK,EAAE;GACnC,IAAI,OAAO,KAAA,GAAW;GAEtB,MAAM,uBAAA,GAAA,qBAAA,aAAA,QAAA,GAAA,qBAAA,oBAAA,CAA6D,GAAG,GAAG,CAAC;GAC1E,IAAI,oBAAoB,OAAO;GAE/B,MAAM,sBAAsB,OAAO,QAAQ,GAAG,IAAI,OAAO,CAAC,CACvD,KAAK,GAAG,SAAS,GAAG,CAAC,CACrB,QAAQ,QAAQC,eAAAA,SAAS,GAAG,CAAC,CAAC,CAC9B,KAAK,QAAQ,GAAG;GAEnB,IAAI,oBAAoB,WAAW,GAAG;GAEtC,MAAM,WAAWC,kBAAAA,sBAAsB,IAAI,QAAQ,GAAG,EAAE;GAExD,KAAK,MAAM,OAAO,qBAChB,IAAI,KACFL,2BAAAA,WAAW,UACTM,eAAAA,sBAAsB,KAAK,UAAU,KAAK,oBAAoB,OAAO,GAAG,IAAI,CAC9E,CACF;EAEJ;EAEA,OAAO;CACT,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"active_cfg.js","names":[],"sources":["../../src/middle_layer/active_cfg.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { constructBlockContext } from \"./block_ctx\";\nimport { computableFromCfgOrRF, isActive } from \"./render\";\nimport { getBlockPackInfo } from \"./util\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\n\n/** Returns derived general project state form the project resource */\nexport function activeConfigs(\n prjEntry: PlTreeEntry,\n env: MiddleLayerEnvironment,\n): Computable<unknown[]> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const ret: Computable<unknown>[] = [];\n for (const { id } of allBlocks(structure)) {\n const bp = getBlockPackInfo(prj, id);\n if (bp === undefined) continue;\n\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(bp.cfg));\n if (codeWithInfoOrError.error) continue;\n\n const activeOutputConfigs = Object.entries(bp.cfg.outputs)\n .map(([, cfg]) => cfg)\n .filter((cfg) => isActive(cfg))\n .map((cfg) => cfg);\n\n if (activeOutputConfigs.length === 0) continue;\n\n const blockCtx = constructBlockContext(prj.persist(), id);\n\n for (const cfg of activeOutputConfigs) {\n ret.push(\n Computable.wrapError(\n computableFromCfgOrRF(env, blockCtx, cfg, codeWithInfoOrError.value, bp.bpId),\n ),\n );\n }\n }\n\n return ret;\n });\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAgB,cACd,UACA,KACuB;AACvB,QAAO,WAAW,MAAM,QAAQ;EAC9B,MAAM,MAAM,IAAI,SAAS,SAAS,CAAC,MAAM;EAEzC,MAAM,YAAY,SAAS,IAAI,kBAAoC,oBAAoB,CAAC;EACxF,MAAM,MAA6B,EAAE;AACrC,OAAK,MAAM,EAAE,QAAQ,UAAU,UAAU,EAAE;GACzC,MAAM,KAAK,iBAAiB,KAAK,GAAG;AACpC,OAAI,OAAO,KAAA,EAAW;GAEtB,MAAM,sBAAsB,mBAAmB,oBAAoB,GAAG,IAAI,CAAC;AAC3E,OAAI,oBAAoB,MAAO;GAE/B,MAAM,sBAAsB,OAAO,QAAQ,GAAG,IAAI,QAAQ,CACvD,KAAK,GAAG,SAAS,IAAI,CACrB,QAAQ,QAAQ,SAAS,IAAI,CAAC,CAC9B,KAAK,QAAQ,IAAI;AAEpB,OAAI,oBAAoB,WAAW,EAAG;GAEtC,MAAM,WAAW,sBAAsB,IAAI,SAAS,EAAE,GAAG;AAEzD,QAAK,MAAM,OAAO,oBAChB,KAAI,KACF,WAAW,UACT,sBAAsB,KAAK,UAAU,KAAK,oBAAoB,OAAO,GAAG,KAAK,CAC9E,CACF;;AAIL,SAAO;GACP"}
1
+ {"version":3,"file":"active_cfg.js","names":[],"sources":["../../src/middle_layer/active_cfg.ts"],"sourcesContent":["import { notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { constructBlockContext } from \"./block_ctx\";\nimport { computableFromCfgOrRF, isActive } from \"./render\";\nimport { getBlockPackInfo } from \"./util\";\nimport { extractCodeWithInfo, wrapCallback } from \"@platforma-sdk/model\";\n\n/** Returns derived general project state form the project resource */\nexport function activeConfigs(\n prjEntry: PlTreeEntry,\n env: MiddleLayerEnvironment,\n): Computable<unknown[]> {\n return Computable.make((ctx) => {\n const prj = ctx.accessor(prjEntry).node();\n\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const ret: Computable<unknown>[] = [];\n for (const { id } of allBlocks(structure)) {\n const bp = getBlockPackInfo(prj, id);\n if (bp === undefined) continue;\n\n const codeWithInfoOrError = wrapCallback(() => extractCodeWithInfo(bp.cfg));\n if (codeWithInfoOrError.error) continue;\n\n const activeOutputConfigs = Object.entries(bp.cfg.outputs)\n .map(([, cfg]) => cfg)\n .filter((cfg) => isActive(cfg))\n .map((cfg) => cfg);\n\n if (activeOutputConfigs.length === 0) continue;\n\n const blockCtx = constructBlockContext(prj.persist(), id);\n\n for (const cfg of activeOutputConfigs) {\n ret.push(\n Computable.wrapError(\n computableFromCfgOrRF(env, blockCtx, cfg, codeWithInfoOrError.value, bp.bpId),\n ),\n );\n }\n }\n\n return ret;\n });\n}\n"],"mappings":";;;;;;;;;;AAaA,SAAgB,cACd,UACA,KACuB;CACvB,OAAO,WAAW,MAAM,QAAQ;EAC9B,MAAM,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,KAAK;EAExC,MAAM,YAAY,SAAS,IAAI,kBAAoC,mBAAmB,CAAC;EACvF,MAAM,MAA6B,CAAC;EACpC,KAAK,MAAM,EAAE,QAAQ,UAAU,SAAS,GAAG;GACzC,MAAM,KAAK,iBAAiB,KAAK,EAAE;GACnC,IAAI,OAAO,KAAA,GAAW;GAEtB,MAAM,sBAAsB,mBAAmB,oBAAoB,GAAG,GAAG,CAAC;GAC1E,IAAI,oBAAoB,OAAO;GAE/B,MAAM,sBAAsB,OAAO,QAAQ,GAAG,IAAI,OAAO,CAAC,CACvD,KAAK,GAAG,SAAS,GAAG,CAAC,CACrB,QAAQ,QAAQ,SAAS,GAAG,CAAC,CAAC,CAC9B,KAAK,QAAQ,GAAG;GAEnB,IAAI,oBAAoB,WAAW,GAAG;GAEtC,MAAM,WAAW,sBAAsB,IAAI,QAAQ,GAAG,EAAE;GAExD,KAAK,MAAM,OAAO,qBAChB,IAAI,KACF,WAAW,UACT,sBAAsB,KAAK,UAAU,KAAK,oBAAoB,OAAO,GAAG,IAAI,CAC9E,CACF;EAEJ;EAEA,OAAO;CACT,CAAC;AACH"}
@@ -1,4 +1,3 @@
1
- require("../_virtual/_rolldown/runtime.cjs");
2
1
  const require_project_model = require("../model/project_model.cjs");
3
2
  const require_index = require("../debug/index.cjs");
4
3
  const require_block_ctx = require("./block_ctx.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"block.cjs","names":["Computable","constructBlockContextArgsOnly","blockArgsAuthorKey","getDebugFlags","constructBlockContext","ifNotUndef","getBlockPackInfo","computableFromCfgOrRF"],"sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit<BlockStateInternalV3, \"outputs\" | \"navigationState\">;\n\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n): Computable<BlockParameters>;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx,\n): BlockParameters;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockParameters | Computable<BlockParameters> {\n if (cCtx === undefined)\n return Computable.make((c) => getBlockParameters(projectEntry, blockId, c), {\n key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,\n });\n\n const prj = cCtx.accessor(projectEntry).node();\n const ctx = constructBlockContextArgsOnly(projectEntry, blockId);\n const blockStorageJson = ctx.blockStorage(cCtx);\n // Parse raw storage JSON - UI will derive data using sdk/model\n const blockStorage =\n blockStorageJson !== undefined ? deepFreeze(JSON.parse(blockStorageJson)) : undefined;\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n blockStorage,\n };\n}\n\nexport function blockOutputs(\n projectEntry: PlTreeEntry,\n blockId: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>> {\n const key = \"outputs#\" + resourceIdToString(projectEntry.rid) + \"#\" + blockId;\n return Computable.make(\n (c) => {\n if (getDebugFlags().logOutputRecalculations) {\n console.log(\n `blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`,\n );\n }\n\n const prj = c.accessor(projectEntry).node();\n const ctx = constructBlockContext(projectEntry, blockId);\n\n return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId }) => {\n const outputs: Record<string, Computable<any>> = {};\n for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {\n const computableOutput = computableFromCfgOrRF(\n env,\n ctx,\n cellCfg,\n extractCodeWithInfo(cfg),\n bpId,\n );\n outputs[cellId] = Computable.wrapError(computableOutput, 1);\n }\n return outputs;\n });\n },\n { key },\n ).withStableType();\n}\n"],"mappings":";;;;;;;;;;;;AA8BA,SAAgB,mBACd,cACA,SACA,MAC+C;AAC/C,KAAI,SAAS,KAAA,EACX,QAAOA,2BAAAA,WAAW,MAAM,MAAM,mBAAmB,cAAc,SAAS,EAAE,EAAE,EAC1E,KAAK,WAAA,GAAA,0BAAA,oBAA6B,aAAa,IAAI,CAAC,GAAG,WACxD,CAAC;CAEJ,MAAM,MAAM,KAAK,SAAS,aAAa,CAAC,MAAM;CAE9C,MAAM,mBADMC,kBAAAA,8BAA8B,cAAc,QAAQ,CACnC,aAAa,KAAK;CAE/C,MAAM,eACJ,qBAAqB,KAAA,KAAA,GAAA,2BAAA,YAAuB,KAAK,MAAM,iBAAiB,CAAC,GAAG,KAAA;AAC9E,QAAO;EACL,QAAQ,IAAI,kBAAgCC,sBAAAA,mBAAmB,QAAQ,CAAC;EACxE;EACD;;AAGH,SAAgB,aACd,cACA,SACA,KAC2E;CAC3E,MAAM,MAAM,cAAA,GAAA,0BAAA,oBAAgC,aAAa,IAAI,GAAG,MAAM;AACtE,QAAOF,2BAAAA,WAAW,MACf,MAAM;AACL,MAAIG,cAAAA,eAAe,CAAC,wBAClB,SAAQ,IACN,+BAA+B,IAAI,IAAI,EAAE,mBAAmB,IAAI,EAAE,gBAAgB,eACnF;EAGH,MAAM,MAAM,EAAE,SAAS,aAAa,CAAC,MAAM;EAC3C,MAAM,MAAMC,kBAAAA,sBAAsB,cAAc,QAAQ;AAExD,SAAOC,aAAAA,WAAWC,eAAAA,iBAAiB,KAAK,QAAQ,GAAG,EAAE,KAAK,WAAW;GACnE,MAAM,UAA2C,EAAE;AACnD,QAAK,MAAM,CAAC,QAAQ,YAAY,OAAO,QAAQ,IAAI,QAAQ,EAAE;IAC3D,MAAM,mBAAmBC,eAAAA,sBACvB,KACA,KACA,UAAA,GAAA,qBAAA,qBACoB,IAAI,EACxB,KACD;AACD,YAAQ,UAAUP,2BAAAA,WAAW,UAAU,kBAAkB,EAAE;;AAE7D,UAAO;IACP;IAEJ,EAAE,KAAK,CACR,CAAC,gBAAgB"}
1
+ {"version":3,"file":"block.cjs","names":["Computable","constructBlockContextArgsOnly","blockArgsAuthorKey","getDebugFlags","constructBlockContext","ifNotUndef","getBlockPackInfo","computableFromCfgOrRF"],"sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit<BlockStateInternalV3, \"outputs\" | \"navigationState\">;\n\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n): Computable<BlockParameters>;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx,\n): BlockParameters;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockParameters | Computable<BlockParameters> {\n if (cCtx === undefined)\n return Computable.make((c) => getBlockParameters(projectEntry, blockId, c), {\n key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,\n });\n\n const prj = cCtx.accessor(projectEntry).node();\n const ctx = constructBlockContextArgsOnly(projectEntry, blockId);\n const blockStorageJson = ctx.blockStorage(cCtx);\n // Parse raw storage JSON - UI will derive data using sdk/model\n const blockStorage =\n blockStorageJson !== undefined ? deepFreeze(JSON.parse(blockStorageJson)) : undefined;\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n blockStorage,\n };\n}\n\nexport function blockOutputs(\n projectEntry: PlTreeEntry,\n blockId: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>> {\n const key = \"outputs#\" + resourceIdToString(projectEntry.rid) + \"#\" + blockId;\n return Computable.make(\n (c) => {\n if (getDebugFlags().logOutputRecalculations) {\n console.log(\n `blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`,\n );\n }\n\n const prj = c.accessor(projectEntry).node();\n const ctx = constructBlockContext(projectEntry, blockId);\n\n return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId }) => {\n const outputs: Record<string, Computable<any>> = {};\n for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {\n const computableOutput = computableFromCfgOrRF(\n env,\n ctx,\n cellCfg,\n extractCodeWithInfo(cfg),\n bpId,\n );\n outputs[cellId] = Computable.wrapError(computableOutput, 1);\n }\n return outputs;\n });\n },\n { key },\n ).withStableType();\n}\n"],"mappings":";;;;;;;;;;;AA8BA,SAAgB,mBACd,cACA,SACA,MAC+C;CAC/C,IAAI,SAAS,KAAA,GACX,OAAOA,2BAAAA,WAAW,MAAM,MAAM,mBAAmB,cAAc,SAAS,CAAC,GAAG,EAC1E,KAAK,WAAA,GAAA,0BAAA,mBAAA,CAA6B,aAAa,GAAG,EAAE,GAAG,UACzD,CAAC;CAEH,MAAM,MAAM,KAAK,SAAS,YAAY,CAAC,CAAC,KAAK;CAE7C,MAAM,mBADMC,kBAAAA,8BAA8B,cAAc,OAC7B,CAAC,CAAC,aAAa,IAAI;CAE9C,MAAM,eACJ,qBAAqB,KAAA,KAAA,GAAA,2BAAA,WAAA,CAAuB,KAAK,MAAM,gBAAgB,CAAC,IAAI,KAAA;CAC9E,OAAO;EACL,QAAQ,IAAI,kBAAgCC,sBAAAA,mBAAmB,OAAO,CAAC;EACvE;CACF;AACF;AAEA,SAAgB,aACd,cACA,SACA,KAC2E;CAC3E,MAAM,MAAM,cAAA,GAAA,0BAAA,mBAAA,CAAgC,aAAa,GAAG,IAAI,MAAM;CACtE,OAAOF,2BAAAA,WAAW,MACf,MAAM;EACL,IAAIG,cAAAA,cAAc,CAAC,CAAC,yBAClB,QAAQ,IACN,+BAA+B,IAAI,IAAI,EAAE,mBAAmB,IAAI,EAAE,gBAAgB,cACpF;EAGF,MAAM,MAAM,EAAE,SAAS,YAAY,CAAC,CAAC,KAAK;EAC1C,MAAM,MAAMC,kBAAAA,sBAAsB,cAAc,OAAO;EAEvD,OAAOC,aAAAA,WAAWC,eAAAA,iBAAiB,KAAK,OAAO,IAAI,EAAE,KAAK,WAAW;GACnE,MAAM,UAA2C,CAAC;GAClD,KAAK,MAAM,CAAC,QAAQ,YAAY,OAAO,QAAQ,IAAI,OAAO,GAAG;IAC3D,MAAM,mBAAmBC,eAAAA,sBACvB,KACA,KACA,UAAA,GAAA,qBAAA,oBAAA,CACoB,GAAG,GACvB,IACF;IACA,QAAQ,UAAUP,2BAAAA,WAAW,UAAU,kBAAkB,CAAC;GAC5D;GACA,OAAO;EACT,CAAC;CACH,GACA,EAAE,IAAI,CACR,CAAC,CAAC,eAAe;AACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"block.js","names":[],"sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit<BlockStateInternalV3, \"outputs\" | \"navigationState\">;\n\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n): Computable<BlockParameters>;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx,\n): BlockParameters;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockParameters | Computable<BlockParameters> {\n if (cCtx === undefined)\n return Computable.make((c) => getBlockParameters(projectEntry, blockId, c), {\n key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,\n });\n\n const prj = cCtx.accessor(projectEntry).node();\n const ctx = constructBlockContextArgsOnly(projectEntry, blockId);\n const blockStorageJson = ctx.blockStorage(cCtx);\n // Parse raw storage JSON - UI will derive data using sdk/model\n const blockStorage =\n blockStorageJson !== undefined ? deepFreeze(JSON.parse(blockStorageJson)) : undefined;\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n blockStorage,\n };\n}\n\nexport function blockOutputs(\n projectEntry: PlTreeEntry,\n blockId: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>> {\n const key = \"outputs#\" + resourceIdToString(projectEntry.rid) + \"#\" + blockId;\n return Computable.make(\n (c) => {\n if (getDebugFlags().logOutputRecalculations) {\n console.log(\n `blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`,\n );\n }\n\n const prj = c.accessor(projectEntry).node();\n const ctx = constructBlockContext(projectEntry, blockId);\n\n return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId }) => {\n const outputs: Record<string, Computable<any>> = {};\n for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {\n const computableOutput = computableFromCfgOrRF(\n env,\n ctx,\n cellCfg,\n extractCodeWithInfo(cfg),\n bpId,\n );\n outputs[cellId] = Computable.wrapError(computableOutput, 1);\n }\n return outputs;\n });\n },\n { key },\n ).withStableType();\n}\n"],"mappings":";;;;;;;;;;;AA8BA,SAAgB,mBACd,cACA,SACA,MAC+C;AAC/C,KAAI,SAAS,KAAA,EACX,QAAO,WAAW,MAAM,MAAM,mBAAmB,cAAc,SAAS,EAAE,EAAE,EAC1E,KAAK,UAAU,mBAAmB,aAAa,IAAI,CAAC,GAAG,WACxD,CAAC;CAEJ,MAAM,MAAM,KAAK,SAAS,aAAa,CAAC,MAAM;CAE9C,MAAM,mBADM,8BAA8B,cAAc,QAAQ,CACnC,aAAa,KAAK;CAE/C,MAAM,eACJ,qBAAqB,KAAA,IAAY,WAAW,KAAK,MAAM,iBAAiB,CAAC,GAAG,KAAA;AAC9E,QAAO;EACL,QAAQ,IAAI,kBAAgC,mBAAmB,QAAQ,CAAC;EACxE;EACD;;AAGH,SAAgB,aACd,cACA,SACA,KAC2E;CAC3E,MAAM,MAAM,aAAa,mBAAmB,aAAa,IAAI,GAAG,MAAM;AACtE,QAAO,WAAW,MACf,MAAM;AACL,MAAI,eAAe,CAAC,wBAClB,SAAQ,IACN,+BAA+B,IAAI,IAAI,EAAE,mBAAmB,IAAI,EAAE,gBAAgB,eACnF;EAGH,MAAM,MAAM,EAAE,SAAS,aAAa,CAAC,MAAM;EAC3C,MAAM,MAAM,sBAAsB,cAAc,QAAQ;AAExD,SAAO,WAAW,iBAAiB,KAAK,QAAQ,GAAG,EAAE,KAAK,WAAW;GACnE,MAAM,UAA2C,EAAE;AACnD,QAAK,MAAM,CAAC,QAAQ,YAAY,OAAO,QAAQ,IAAI,QAAQ,EAAE;IAC3D,MAAM,mBAAmB,sBACvB,KACA,KACA,SACA,oBAAoB,IAAI,EACxB,KACD;AACD,YAAQ,UAAU,WAAW,UAAU,kBAAkB,EAAE;;AAE7D,UAAO;IACP;IAEJ,EAAE,KAAK,CACR,CAAC,gBAAgB"}
1
+ {"version":3,"file":"block.js","names":[],"sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit<BlockStateInternalV3, \"outputs\" | \"navigationState\">;\n\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n): Computable<BlockParameters>;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx,\n): BlockParameters;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockParameters | Computable<BlockParameters> {\n if (cCtx === undefined)\n return Computable.make((c) => getBlockParameters(projectEntry, blockId, c), {\n key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,\n });\n\n const prj = cCtx.accessor(projectEntry).node();\n const ctx = constructBlockContextArgsOnly(projectEntry, blockId);\n const blockStorageJson = ctx.blockStorage(cCtx);\n // Parse raw storage JSON - UI will derive data using sdk/model\n const blockStorage =\n blockStorageJson !== undefined ? deepFreeze(JSON.parse(blockStorageJson)) : undefined;\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n blockStorage,\n };\n}\n\nexport function blockOutputs(\n projectEntry: PlTreeEntry,\n blockId: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>> {\n const key = \"outputs#\" + resourceIdToString(projectEntry.rid) + \"#\" + blockId;\n return Computable.make(\n (c) => {\n if (getDebugFlags().logOutputRecalculations) {\n console.log(\n `blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`,\n );\n }\n\n const prj = c.accessor(projectEntry).node();\n const ctx = constructBlockContext(projectEntry, blockId);\n\n return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId }) => {\n const outputs: Record<string, Computable<any>> = {};\n for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {\n const computableOutput = computableFromCfgOrRF(\n env,\n ctx,\n cellCfg,\n extractCodeWithInfo(cfg),\n bpId,\n );\n outputs[cellId] = Computable.wrapError(computableOutput, 1);\n }\n return outputs;\n });\n },\n { key },\n ).withStableType();\n}\n"],"mappings":";;;;;;;;;;;AA8BA,SAAgB,mBACd,cACA,SACA,MAC+C;CAC/C,IAAI,SAAS,KAAA,GACX,OAAO,WAAW,MAAM,MAAM,mBAAmB,cAAc,SAAS,CAAC,GAAG,EAC1E,KAAK,UAAU,mBAAmB,aAAa,GAAG,EAAE,GAAG,UACzD,CAAC;CAEH,MAAM,MAAM,KAAK,SAAS,YAAY,CAAC,CAAC,KAAK;CAE7C,MAAM,mBADM,8BAA8B,cAAc,OAC7B,CAAC,CAAC,aAAa,IAAI;CAE9C,MAAM,eACJ,qBAAqB,KAAA,IAAY,WAAW,KAAK,MAAM,gBAAgB,CAAC,IAAI,KAAA;CAC9E,OAAO;EACL,QAAQ,IAAI,kBAAgC,mBAAmB,OAAO,CAAC;EACvE;CACF;AACF;AAEA,SAAgB,aACd,cACA,SACA,KAC2E;CAC3E,MAAM,MAAM,aAAa,mBAAmB,aAAa,GAAG,IAAI,MAAM;CACtE,OAAO,WAAW,MACf,MAAM;EACL,IAAI,cAAc,CAAC,CAAC,yBAClB,QAAQ,IACN,+BAA+B,IAAI,IAAI,EAAE,mBAAmB,IAAI,EAAE,gBAAgB,cACpF;EAGF,MAAM,MAAM,EAAE,SAAS,YAAY,CAAC,CAAC,KAAK;EAC1C,MAAM,MAAM,sBAAsB,cAAc,OAAO;EAEvD,OAAO,WAAW,iBAAiB,KAAK,OAAO,IAAI,EAAE,KAAK,WAAW;GACnE,MAAM,UAA2C,CAAC;GAClD,KAAK,MAAM,CAAC,QAAQ,YAAY,OAAO,QAAQ,IAAI,OAAO,GAAG;IAC3D,MAAM,mBAAmB,sBACvB,KACA,KACA,SACA,oBAAoB,GAAG,GACvB,IACF;IACA,QAAQ,UAAU,WAAW,UAAU,kBAAkB,CAAC;GAC5D;GACA,OAAO;EACT,CAAC;CACH,GACA,EAAE,IAAI,CACR,CAAC,CAAC,eAAe;AACnB"}
@@ -1,4 +1,3 @@
1
- require("../_virtual/_rolldown/runtime.cjs");
2
1
  const require_project_model = require("../model/project_model.cjs");
3
2
  const require_project_model_util = require("../model/project_model_util.cjs");
4
3
  const require_result_pool = require("../pool/result_pool.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"block_ctx.cjs","names":["projectFieldName","ProjectStructureKey","allBlocks","ResultPool"],"sources":["../../src/middle_layer/block_ctx.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { cachedDecode, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { Optional } from \"utility-types\";\nimport type { Block, ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { ResultPool } from \"../pool/result_pool\";\nimport { deriveDataFromStorage } from \"@platforma-sdk/model\";\n\nexport type BlockContextArgsOnly = {\n readonly blockId: string;\n readonly args: (cCtx: ComputableCtx) => string | undefined;\n readonly activeArgs: (cCtx: ComputableCtx) => string | undefined;\n readonly blockMeta: (cCtx: ComputableCtx) => Map<string, Block>;\n readonly data: (cCtx: ComputableCtx) => string | undefined;\n readonly blockStorage: (cCtx: ComputableCtx) => string | undefined;\n readonly prerunArgs: (cCtx: ComputableCtx) => string | undefined;\n};\n\nexport type BlockContextFull = BlockContextArgsOnly & {\n readonly prod: (cCtx: ComputableCtx) => PlTreeEntry | undefined;\n readonly staging: (cCtx: ComputableCtx) => PlTreeEntry | undefined;\n readonly getResultsPool: (cCtx: ComputableCtx) => ResultPool;\n};\n\nexport type BlockContextAny = Optional<BlockContextFull, \"prod\" | \"staging\" | \"getResultsPool\">;\n\nexport function constructBlockContextArgsOnly(\n projectEntry: PlTreeEntry,\n blockId: string,\n): BlockContextArgsOnly {\n const args = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"currentArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n const activeArgs = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"prodArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n const data = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"blockStorage\"),\n stableIfNotFound: true,\n })\n ?.getData();\n if (!data) return undefined;\n\n const rawJson = cachedDecode(data);\n if (!rawJson) return undefined;\n\n // Parse to check if it's BlockStorage format\n try {\n const parsed = JSON.parse(rawJson);\n return JSON.stringify(deriveDataFromStorage(parsed));\n } catch (err) {\n console.error(\"Error deriving data from storage\", err);\n return undefined;\n }\n };\n // Returns raw blockStorage JSON - UI derives data using sdk/model\n const blockStorage = (cCtx: ComputableCtx) => {\n const storageData = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"blockStorage\"),\n stableIfNotFound: true,\n })\n ?.getData();\n if (!storageData) return undefined;\n return cachedDecode(storageData);\n };\n const prerunArgs = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"currentPrerunArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n return {\n blockId,\n args,\n activeArgs,\n data,\n blockStorage,\n prerunArgs,\n blockMeta: (cCtx: ComputableCtx) => {\n const prj = cCtx.accessor(projectEntry).node();\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const result = new Map<string, Block>();\n for (const block of allBlocks(structure)) result.set(block.id, block);\n return result;\n },\n };\n}\n\nexport function constructBlockContext(\n projectEntry: PlTreeEntry,\n blockId: string,\n): BlockContextFull {\n return {\n ...constructBlockContextArgsOnly(projectEntry, blockId),\n prod: (cCtx: ComputableCtx) => {\n return cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"prodOutput\"),\n stableIfNotFound: true,\n ignoreError: true,\n })\n ?.persist();\n },\n staging: (cCtx: ComputableCtx) => {\n // Check if staging is expected (currentPrerunArgs is set)\n // For blocks with failed args derivation, staging will never be rendered\n const hasPrerunArgs =\n cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"currentPrerunArgs\"),\n stableIfNotFound: true,\n ignoreError: true,\n }) !== undefined;\n\n const result = cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"stagingOutput\"),\n // Only mark stable if staging is NOT expected (no prerunArgs)\n stableIfNotFound: !hasPrerunArgs,\n ignoreError: true,\n })\n ?.persist();\n return result;\n },\n getResultsPool: (cCtx: ComputableCtx) => ResultPool.create(cCtx, projectEntry, blockId),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"block_ctx.cjs","names":["projectFieldName","ProjectStructureKey","allBlocks","ResultPool"],"sources":["../../src/middle_layer/block_ctx.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { cachedDecode, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { Optional } from \"utility-types\";\nimport type { Block, ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { ResultPool } from \"../pool/result_pool\";\nimport { deriveDataFromStorage } from \"@platforma-sdk/model\";\n\nexport type BlockContextArgsOnly = {\n readonly blockId: string;\n readonly args: (cCtx: ComputableCtx) => string | undefined;\n readonly activeArgs: (cCtx: ComputableCtx) => string | undefined;\n readonly blockMeta: (cCtx: ComputableCtx) => Map<string, Block>;\n readonly data: (cCtx: ComputableCtx) => string | undefined;\n readonly blockStorage: (cCtx: ComputableCtx) => string | undefined;\n readonly prerunArgs: (cCtx: ComputableCtx) => string | undefined;\n};\n\nexport type BlockContextFull = BlockContextArgsOnly & {\n readonly prod: (cCtx: ComputableCtx) => PlTreeEntry | undefined;\n readonly staging: (cCtx: ComputableCtx) => PlTreeEntry | undefined;\n readonly getResultsPool: (cCtx: ComputableCtx) => ResultPool;\n};\n\nexport type BlockContextAny = Optional<BlockContextFull, \"prod\" | \"staging\" | \"getResultsPool\">;\n\nexport function constructBlockContextArgsOnly(\n projectEntry: PlTreeEntry,\n blockId: string,\n): BlockContextArgsOnly {\n const args = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"currentArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n const activeArgs = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"prodArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n const data = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"blockStorage\"),\n stableIfNotFound: true,\n })\n ?.getData();\n if (!data) return undefined;\n\n const rawJson = cachedDecode(data);\n if (!rawJson) return undefined;\n\n // Parse to check if it's BlockStorage format\n try {\n const parsed = JSON.parse(rawJson);\n return JSON.stringify(deriveDataFromStorage(parsed));\n } catch (err) {\n console.error(\"Error deriving data from storage\", err);\n return undefined;\n }\n };\n // Returns raw blockStorage JSON - UI derives data using sdk/model\n const blockStorage = (cCtx: ComputableCtx) => {\n const storageData = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"blockStorage\"),\n stableIfNotFound: true,\n })\n ?.getData();\n if (!storageData) return undefined;\n return cachedDecode(storageData);\n };\n const prerunArgs = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"currentPrerunArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n return {\n blockId,\n args,\n activeArgs,\n data,\n blockStorage,\n prerunArgs,\n blockMeta: (cCtx: ComputableCtx) => {\n const prj = cCtx.accessor(projectEntry).node();\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const result = new Map<string, Block>();\n for (const block of allBlocks(structure)) result.set(block.id, block);\n return result;\n },\n };\n}\n\nexport function constructBlockContext(\n projectEntry: PlTreeEntry,\n blockId: string,\n): BlockContextFull {\n return {\n ...constructBlockContextArgsOnly(projectEntry, blockId),\n prod: (cCtx: ComputableCtx) => {\n return cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"prodOutput\"),\n stableIfNotFound: true,\n ignoreError: true,\n })\n ?.persist();\n },\n staging: (cCtx: ComputableCtx) => {\n // Check if staging is expected (currentPrerunArgs is set)\n // For blocks with failed args derivation, staging will never be rendered\n const hasPrerunArgs =\n cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"currentPrerunArgs\"),\n stableIfNotFound: true,\n ignoreError: true,\n }) !== undefined;\n\n const result = cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"stagingOutput\"),\n // Only mark stable if staging is NOT expected (no prerunArgs)\n stableIfNotFound: !hasPrerunArgs,\n ignoreError: true,\n })\n ?.persist();\n return result;\n },\n getResultsPool: (cCtx: ComputableCtx) => ResultPool.create(cCtx, projectEntry, blockId),\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"block_ctx.js","names":[],"sources":["../../src/middle_layer/block_ctx.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { cachedDecode, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { Optional } from \"utility-types\";\nimport type { Block, ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { ResultPool } from \"../pool/result_pool\";\nimport { deriveDataFromStorage } from \"@platforma-sdk/model\";\n\nexport type BlockContextArgsOnly = {\n readonly blockId: string;\n readonly args: (cCtx: ComputableCtx) => string | undefined;\n readonly activeArgs: (cCtx: ComputableCtx) => string | undefined;\n readonly blockMeta: (cCtx: ComputableCtx) => Map<string, Block>;\n readonly data: (cCtx: ComputableCtx) => string | undefined;\n readonly blockStorage: (cCtx: ComputableCtx) => string | undefined;\n readonly prerunArgs: (cCtx: ComputableCtx) => string | undefined;\n};\n\nexport type BlockContextFull = BlockContextArgsOnly & {\n readonly prod: (cCtx: ComputableCtx) => PlTreeEntry | undefined;\n readonly staging: (cCtx: ComputableCtx) => PlTreeEntry | undefined;\n readonly getResultsPool: (cCtx: ComputableCtx) => ResultPool;\n};\n\nexport type BlockContextAny = Optional<BlockContextFull, \"prod\" | \"staging\" | \"getResultsPool\">;\n\nexport function constructBlockContextArgsOnly(\n projectEntry: PlTreeEntry,\n blockId: string,\n): BlockContextArgsOnly {\n const args = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"currentArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n const activeArgs = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"prodArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n const data = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"blockStorage\"),\n stableIfNotFound: true,\n })\n ?.getData();\n if (!data) return undefined;\n\n const rawJson = cachedDecode(data);\n if (!rawJson) return undefined;\n\n // Parse to check if it's BlockStorage format\n try {\n const parsed = JSON.parse(rawJson);\n return JSON.stringify(deriveDataFromStorage(parsed));\n } catch (err) {\n console.error(\"Error deriving data from storage\", err);\n return undefined;\n }\n };\n // Returns raw blockStorage JSON - UI derives data using sdk/model\n const blockStorage = (cCtx: ComputableCtx) => {\n const storageData = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"blockStorage\"),\n stableIfNotFound: true,\n })\n ?.getData();\n if (!storageData) return undefined;\n return cachedDecode(storageData);\n };\n const prerunArgs = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"currentPrerunArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n return {\n blockId,\n args,\n activeArgs,\n data,\n blockStorage,\n prerunArgs,\n blockMeta: (cCtx: ComputableCtx) => {\n const prj = cCtx.accessor(projectEntry).node();\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const result = new Map<string, Block>();\n for (const block of allBlocks(structure)) result.set(block.id, block);\n return result;\n },\n };\n}\n\nexport function constructBlockContext(\n projectEntry: PlTreeEntry,\n blockId: string,\n): BlockContextFull {\n return {\n ...constructBlockContextArgsOnly(projectEntry, blockId),\n prod: (cCtx: ComputableCtx) => {\n return cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"prodOutput\"),\n stableIfNotFound: true,\n ignoreError: true,\n })\n ?.persist();\n },\n staging: (cCtx: ComputableCtx) => {\n // Check if staging is expected (currentPrerunArgs is set)\n // For blocks with failed args derivation, staging will never be rendered\n const hasPrerunArgs =\n cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"currentPrerunArgs\"),\n stableIfNotFound: true,\n ignoreError: true,\n }) !== undefined;\n\n const result = cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"stagingOutput\"),\n // Only mark stable if staging is NOT expected (no prerunArgs)\n stableIfNotFound: !hasPrerunArgs,\n ignoreError: true,\n })\n ?.persist();\n return result;\n },\n getResultsPool: (cCtx: ComputableCtx) => ResultPool.create(cCtx, projectEntry, blockId),\n };\n}\n"],"mappings":";;;;;;AA4BA,SAAgB,8BACd,cACA,SACsB;CACtB,MAAM,QAAQ,SAAwB;EACpC,MAAM,OAAO,KACV,SAAS,aAAa,CACtB,MAAM,CACN,SAAS;GACR,OAAO,iBAAiB,SAAS,cAAc;GAC/C,kBAAkB;GACnB,CAAC,EACA,SAAS;AACb,SAAO,OAAO,aAAa,KAAK,GAAG,KAAA;;CAErC,MAAM,cAAc,SAAwB;EAC1C,MAAM,OAAO,KACV,SAAS,aAAa,CACtB,MAAM,CACN,SAAS;GACR,OAAO,iBAAiB,SAAS,WAAW;GAC5C,kBAAkB;GACnB,CAAC,EACA,SAAS;AACb,SAAO,OAAO,aAAa,KAAK,GAAG,KAAA;;CAErC,MAAM,QAAQ,SAAwB;EACpC,MAAM,OAAO,KACV,SAAS,aAAa,CACtB,MAAM,CACN,SAAS;GACR,OAAO,iBAAiB,SAAS,eAAe;GAChD,kBAAkB;GACnB,CAAC,EACA,SAAS;AACb,MAAI,CAAC,KAAM,QAAO,KAAA;EAElB,MAAM,UAAU,aAAa,KAAK;AAClC,MAAI,CAAC,QAAS,QAAO,KAAA;AAGrB,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,QAAQ;AAClC,UAAO,KAAK,UAAU,sBAAsB,OAAO,CAAC;WAC7C,KAAK;AACZ,WAAQ,MAAM,oCAAoC,IAAI;AACtD;;;CAIJ,MAAM,gBAAgB,SAAwB;EAC5C,MAAM,cAAc,KACjB,SAAS,aAAa,CACtB,MAAM,CACN,SAAS;GACR,OAAO,iBAAiB,SAAS,eAAe;GAChD,kBAAkB;GACnB,CAAC,EACA,SAAS;AACb,MAAI,CAAC,YAAa,QAAO,KAAA;AACzB,SAAO,aAAa,YAAY;;CAElC,MAAM,cAAc,SAAwB;EAC1C,MAAM,OAAO,KACV,SAAS,aAAa,CACtB,MAAM,CACN,SAAS;GACR,OAAO,iBAAiB,SAAS,oBAAoB;GACrD,kBAAkB;GACnB,CAAC,EACA,SAAS;AACb,SAAO,OAAO,aAAa,KAAK,GAAG,KAAA;;AAErC,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA,YAAY,SAAwB;GAElC,MAAM,YAAY,SADN,KAAK,SAAS,aAAa,CAAC,MAAM,CACf,kBAAoC,oBAAoB,CAAC;GACxF,MAAM,yBAAS,IAAI,KAAoB;AACvC,QAAK,MAAM,SAAS,UAAU,UAAU,CAAE,QAAO,IAAI,MAAM,IAAI,MAAM;AACrE,UAAO;;EAEV;;AAGH,SAAgB,sBACd,cACA,SACkB;AAClB,QAAO;EACL,GAAG,8BAA8B,cAAc,QAAQ;EACvD,OAAO,SAAwB;AAC7B,UAAO,KACJ,SAAS,aAAa,CACtB,KAAK,EAAE,aAAa,MAAM,CAAC,CAC3B,SAAS;IACR,OAAO,iBAAiB,SAAS,aAAa;IAC9C,kBAAkB;IAClB,aAAa;IACd,CAAC,EACA,SAAS;;EAEf,UAAU,SAAwB;GAGhC,MAAM,gBACJ,KACG,SAAS,aAAa,CACtB,KAAK,EAAE,aAAa,MAAM,CAAC,CAC3B,SAAS;IACR,OAAO,iBAAiB,SAAS,oBAAoB;IACrD,kBAAkB;IAClB,aAAa;IACd,CAAC,KAAK,KAAA;AAYX,UAVe,KACZ,SAAS,aAAa,CACtB,KAAK,EAAE,aAAa,MAAM,CAAC,CAC3B,SAAS;IACR,OAAO,iBAAiB,SAAS,gBAAgB;IAEjD,kBAAkB,CAAC;IACnB,aAAa;IACd,CAAC,EACA,SAAS;;EAGf,iBAAiB,SAAwB,WAAW,OAAO,MAAM,cAAc,QAAQ;EACxF"}
1
+ {"version":3,"file":"block_ctx.js","names":[],"sources":["../../src/middle_layer/block_ctx.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport { cachedDecode, notEmpty } from \"@milaboratories/ts-helpers\";\nimport type { Optional } from \"utility-types\";\nimport type { Block, ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport { ResultPool } from \"../pool/result_pool\";\nimport { deriveDataFromStorage } from \"@platforma-sdk/model\";\n\nexport type BlockContextArgsOnly = {\n readonly blockId: string;\n readonly args: (cCtx: ComputableCtx) => string | undefined;\n readonly activeArgs: (cCtx: ComputableCtx) => string | undefined;\n readonly blockMeta: (cCtx: ComputableCtx) => Map<string, Block>;\n readonly data: (cCtx: ComputableCtx) => string | undefined;\n readonly blockStorage: (cCtx: ComputableCtx) => string | undefined;\n readonly prerunArgs: (cCtx: ComputableCtx) => string | undefined;\n};\n\nexport type BlockContextFull = BlockContextArgsOnly & {\n readonly prod: (cCtx: ComputableCtx) => PlTreeEntry | undefined;\n readonly staging: (cCtx: ComputableCtx) => PlTreeEntry | undefined;\n readonly getResultsPool: (cCtx: ComputableCtx) => ResultPool;\n};\n\nexport type BlockContextAny = Optional<BlockContextFull, \"prod\" | \"staging\" | \"getResultsPool\">;\n\nexport function constructBlockContextArgsOnly(\n projectEntry: PlTreeEntry,\n blockId: string,\n): BlockContextArgsOnly {\n const args = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"currentArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n const activeArgs = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"prodArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n const data = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"blockStorage\"),\n stableIfNotFound: true,\n })\n ?.getData();\n if (!data) return undefined;\n\n const rawJson = cachedDecode(data);\n if (!rawJson) return undefined;\n\n // Parse to check if it's BlockStorage format\n try {\n const parsed = JSON.parse(rawJson);\n return JSON.stringify(deriveDataFromStorage(parsed));\n } catch (err) {\n console.error(\"Error deriving data from storage\", err);\n return undefined;\n }\n };\n // Returns raw blockStorage JSON - UI derives data using sdk/model\n const blockStorage = (cCtx: ComputableCtx) => {\n const storageData = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"blockStorage\"),\n stableIfNotFound: true,\n })\n ?.getData();\n if (!storageData) return undefined;\n return cachedDecode(storageData);\n };\n const prerunArgs = (cCtx: ComputableCtx) => {\n const data = cCtx\n .accessor(projectEntry)\n .node()\n .traverse({\n field: projectFieldName(blockId, \"currentPrerunArgs\"),\n stableIfNotFound: true,\n })\n ?.getData();\n return data ? cachedDecode(data) : undefined;\n };\n return {\n blockId,\n args,\n activeArgs,\n data,\n blockStorage,\n prerunArgs,\n blockMeta: (cCtx: ComputableCtx) => {\n const prj = cCtx.accessor(projectEntry).node();\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n const result = new Map<string, Block>();\n for (const block of allBlocks(structure)) result.set(block.id, block);\n return result;\n },\n };\n}\n\nexport function constructBlockContext(\n projectEntry: PlTreeEntry,\n blockId: string,\n): BlockContextFull {\n return {\n ...constructBlockContextArgsOnly(projectEntry, blockId),\n prod: (cCtx: ComputableCtx) => {\n return cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"prodOutput\"),\n stableIfNotFound: true,\n ignoreError: true,\n })\n ?.persist();\n },\n staging: (cCtx: ComputableCtx) => {\n // Check if staging is expected (currentPrerunArgs is set)\n // For blocks with failed args derivation, staging will never be rendered\n const hasPrerunArgs =\n cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"currentPrerunArgs\"),\n stableIfNotFound: true,\n ignoreError: true,\n }) !== undefined;\n\n const result = cCtx\n .accessor(projectEntry)\n .node({ ignoreError: true })\n .traverse({\n field: projectFieldName(blockId, \"stagingOutput\"),\n // Only mark stable if staging is NOT expected (no prerunArgs)\n stableIfNotFound: !hasPrerunArgs,\n ignoreError: true,\n })\n ?.persist();\n return result;\n },\n getResultsPool: (cCtx: ComputableCtx) => ResultPool.create(cCtx, projectEntry, blockId),\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"block_ctx_unsafe.cjs","names":[],"sources":["../../src/middle_layer/block_ctx_unsafe.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { PlResourceEntry, StdCtx } from \"@platforma-sdk/model\";\nimport type { BlockContextAny } from \"./block_ctx\";\n\ntype SC = StdCtx<unknown, unknown>;\ntype SCAO = Pick<SC, \"$blockId\" | \"$ui\" | \"$args\" | \"$data\">;\nexport type MatStdCtxArgsOnly = {\n [Var in keyof SCAO]: SCAO[Var] extends PlResourceEntry\n ? PlTreeEntry | ((cCtx: ComputableCtx) => PlTreeEntry | undefined) | undefined\n : SCAO[Var];\n};\nexport type MatStdCtx = {\n [Var in keyof SC]: SC[Var] extends PlResourceEntry\n ? PlTreeEntry | ((cCtx: ComputableCtx) => PlTreeEntry | undefined) | undefined\n : SC[Var];\n};\n\nexport const NonKeyCtxFields = [\"$prod\", \"$staging\"];\n\nexport function toCfgContext(ctx: BlockContextAny): MatStdCtx {\n return {\n $blockId: ctx.blockId,\n $args: (cCtx: ComputableCtx) => {\n const args = ctx.args(cCtx);\n return args !== undefined ? (JSON.parse(args) as unknown) : undefined;\n },\n $ui: (cCtx: ComputableCtx) => {\n const data = ctx.data(cCtx);\n return data !== undefined ? (JSON.parse(data) as unknown) : undefined;\n },\n $data: (cCtx: ComputableCtx) => {\n const data = ctx.data(cCtx);\n return data !== undefined ? (JSON.parse(data) as unknown) : undefined;\n },\n $prod: ctx.prod,\n $staging: ctx.staging,\n };\n}\n"],"mappings":";AAkBA,MAAa,kBAAkB,CAAC,SAAS,WAAW;AAEpD,SAAgB,aAAa,KAAiC;AAC5D,QAAO;EACL,UAAU,IAAI;EACd,QAAQ,SAAwB;GAC9B,MAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAO,SAAS,KAAA,IAAa,KAAK,MAAM,KAAK,GAAe,KAAA;;EAE9D,MAAM,SAAwB;GAC5B,MAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAO,SAAS,KAAA,IAAa,KAAK,MAAM,KAAK,GAAe,KAAA;;EAE9D,QAAQ,SAAwB;GAC9B,MAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAO,SAAS,KAAA,IAAa,KAAK,MAAM,KAAK,GAAe,KAAA;;EAE9D,OAAO,IAAI;EACX,UAAU,IAAI;EACf"}
1
+ {"version":3,"file":"block_ctx_unsafe.cjs","names":[],"sources":["../../src/middle_layer/block_ctx_unsafe.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { PlResourceEntry, StdCtx } from \"@platforma-sdk/model\";\nimport type { BlockContextAny } from \"./block_ctx\";\n\ntype SC = StdCtx<unknown, unknown>;\ntype SCAO = Pick<SC, \"$blockId\" | \"$ui\" | \"$args\" | \"$data\">;\nexport type MatStdCtxArgsOnly = {\n [Var in keyof SCAO]: SCAO[Var] extends PlResourceEntry\n ? PlTreeEntry | ((cCtx: ComputableCtx) => PlTreeEntry | undefined) | undefined\n : SCAO[Var];\n};\nexport type MatStdCtx = {\n [Var in keyof SC]: SC[Var] extends PlResourceEntry\n ? PlTreeEntry | ((cCtx: ComputableCtx) => PlTreeEntry | undefined) | undefined\n : SC[Var];\n};\n\nexport const NonKeyCtxFields = [\"$prod\", \"$staging\"];\n\nexport function toCfgContext(ctx: BlockContextAny): MatStdCtx {\n return {\n $blockId: ctx.blockId,\n $args: (cCtx: ComputableCtx) => {\n const args = ctx.args(cCtx);\n return args !== undefined ? (JSON.parse(args) as unknown) : undefined;\n },\n $ui: (cCtx: ComputableCtx) => {\n const data = ctx.data(cCtx);\n return data !== undefined ? (JSON.parse(data) as unknown) : undefined;\n },\n $data: (cCtx: ComputableCtx) => {\n const data = ctx.data(cCtx);\n return data !== undefined ? (JSON.parse(data) as unknown) : undefined;\n },\n $prod: ctx.prod,\n $staging: ctx.staging,\n };\n}\n"],"mappings":";AAkBA,MAAa,kBAAkB,CAAC,SAAS,UAAU;AAEnD,SAAgB,aAAa,KAAiC;CAC5D,OAAO;EACL,UAAU,IAAI;EACd,QAAQ,SAAwB;GAC9B,MAAM,OAAO,IAAI,KAAK,IAAI;GAC1B,OAAO,SAAS,KAAA,IAAa,KAAK,MAAM,IAAI,IAAgB,KAAA;EAC9D;EACA,MAAM,SAAwB;GAC5B,MAAM,OAAO,IAAI,KAAK,IAAI;GAC1B,OAAO,SAAS,KAAA,IAAa,KAAK,MAAM,IAAI,IAAgB,KAAA;EAC9D;EACA,QAAQ,SAAwB;GAC9B,MAAM,OAAO,IAAI,KAAK,IAAI;GAC1B,OAAO,SAAS,KAAA,IAAa,KAAK,MAAM,IAAI,IAAgB,KAAA;EAC9D;EACA,OAAO,IAAI;EACX,UAAU,IAAI;CAChB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"block_ctx_unsafe.js","names":[],"sources":["../../src/middle_layer/block_ctx_unsafe.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { PlResourceEntry, StdCtx } from \"@platforma-sdk/model\";\nimport type { BlockContextAny } from \"./block_ctx\";\n\ntype SC = StdCtx<unknown, unknown>;\ntype SCAO = Pick<SC, \"$blockId\" | \"$ui\" | \"$args\" | \"$data\">;\nexport type MatStdCtxArgsOnly = {\n [Var in keyof SCAO]: SCAO[Var] extends PlResourceEntry\n ? PlTreeEntry | ((cCtx: ComputableCtx) => PlTreeEntry | undefined) | undefined\n : SCAO[Var];\n};\nexport type MatStdCtx = {\n [Var in keyof SC]: SC[Var] extends PlResourceEntry\n ? PlTreeEntry | ((cCtx: ComputableCtx) => PlTreeEntry | undefined) | undefined\n : SC[Var];\n};\n\nexport const NonKeyCtxFields = [\"$prod\", \"$staging\"];\n\nexport function toCfgContext(ctx: BlockContextAny): MatStdCtx {\n return {\n $blockId: ctx.blockId,\n $args: (cCtx: ComputableCtx) => {\n const args = ctx.args(cCtx);\n return args !== undefined ? (JSON.parse(args) as unknown) : undefined;\n },\n $ui: (cCtx: ComputableCtx) => {\n const data = ctx.data(cCtx);\n return data !== undefined ? (JSON.parse(data) as unknown) : undefined;\n },\n $data: (cCtx: ComputableCtx) => {\n const data = ctx.data(cCtx);\n return data !== undefined ? (JSON.parse(data) as unknown) : undefined;\n },\n $prod: ctx.prod,\n $staging: ctx.staging,\n };\n}\n"],"mappings":";AAkBA,MAAa,kBAAkB,CAAC,SAAS,WAAW;AAEpD,SAAgB,aAAa,KAAiC;AAC5D,QAAO;EACL,UAAU,IAAI;EACd,QAAQ,SAAwB;GAC9B,MAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAO,SAAS,KAAA,IAAa,KAAK,MAAM,KAAK,GAAe,KAAA;;EAE9D,MAAM,SAAwB;GAC5B,MAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAO,SAAS,KAAA,IAAa,KAAK,MAAM,KAAK,GAAe,KAAA;;EAE9D,QAAQ,SAAwB;GAC9B,MAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,UAAO,SAAS,KAAA,IAAa,KAAK,MAAM,KAAK,GAAe,KAAA;;EAE9D,OAAO,IAAI;EACX,UAAU,IAAI;EACf"}
1
+ {"version":3,"file":"block_ctx_unsafe.js","names":[],"sources":["../../src/middle_layer/block_ctx_unsafe.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type { PlResourceEntry, StdCtx } from \"@platforma-sdk/model\";\nimport type { BlockContextAny } from \"./block_ctx\";\n\ntype SC = StdCtx<unknown, unknown>;\ntype SCAO = Pick<SC, \"$blockId\" | \"$ui\" | \"$args\" | \"$data\">;\nexport type MatStdCtxArgsOnly = {\n [Var in keyof SCAO]: SCAO[Var] extends PlResourceEntry\n ? PlTreeEntry | ((cCtx: ComputableCtx) => PlTreeEntry | undefined) | undefined\n : SCAO[Var];\n};\nexport type MatStdCtx = {\n [Var in keyof SC]: SC[Var] extends PlResourceEntry\n ? PlTreeEntry | ((cCtx: ComputableCtx) => PlTreeEntry | undefined) | undefined\n : SC[Var];\n};\n\nexport const NonKeyCtxFields = [\"$prod\", \"$staging\"];\n\nexport function toCfgContext(ctx: BlockContextAny): MatStdCtx {\n return {\n $blockId: ctx.blockId,\n $args: (cCtx: ComputableCtx) => {\n const args = ctx.args(cCtx);\n return args !== undefined ? (JSON.parse(args) as unknown) : undefined;\n },\n $ui: (cCtx: ComputableCtx) => {\n const data = ctx.data(cCtx);\n return data !== undefined ? (JSON.parse(data) as unknown) : undefined;\n },\n $data: (cCtx: ComputableCtx) => {\n const data = ctx.data(cCtx);\n return data !== undefined ? (JSON.parse(data) as unknown) : undefined;\n },\n $prod: ctx.prod,\n $staging: ctx.staging,\n };\n}\n"],"mappings":";AAkBA,MAAa,kBAAkB,CAAC,SAAS,UAAU;AAEnD,SAAgB,aAAa,KAAiC;CAC5D,OAAO;EACL,UAAU,IAAI;EACd,QAAQ,SAAwB;GAC9B,MAAM,OAAO,IAAI,KAAK,IAAI;GAC1B,OAAO,SAAS,KAAA,IAAa,KAAK,MAAM,IAAI,IAAgB,KAAA;EAC9D;EACA,MAAM,SAAwB;GAC5B,MAAM,OAAO,IAAI,KAAK,IAAI;GAC1B,OAAO,SAAS,KAAA,IAAa,KAAK,MAAM,IAAI,IAAgB,KAAA;EAC9D;EACA,QAAQ,SAAwB;GAC9B,MAAM,OAAO,IAAI,KAAK,IAAI;GAC1B,OAAO,SAAS,KAAA,IAAa,KAAK,MAAM,IAAI,IAAgB,KAAA;EAC9D;EACA,OAAO,IAAI;EACX,UAAU,IAAI;CAChB;AACF"}
@@ -1,4 +1,3 @@
1
- require("../_virtual/_rolldown/runtime.cjs");
2
1
  const require_driver = require("../pool/driver.cjs");
3
2
  require("../pool/index.cjs");
4
3
  const require_ops = require("./ops.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"driver_kit.cjs","names":["DefaultDriverKitOpsSettings","DefaultDriverKitOpsPaths","HmacSha256Signer","DownloadDriver","DownloadBlobToURLDriver","UploadDriver","LogsStreamDriver","LogsDriver","LsDriver","createPFrameDriver","DownloadUrlDriver"],"sources":["../../src/middle_layer/driver_kit.ts"],"sourcesContent":["import type { PlClient } from \"@milaboratories/pl-client\";\nimport type { InternalLsDriver } from \"@milaboratories/pl-drivers\";\nimport {\n createDownloadClient,\n createLogsClient,\n createUploadBlobClient,\n createUploadProgressClient,\n DownloadDriver,\n DownloadBlobToURLDriver,\n LogsDriver,\n LogsStreamDriver,\n LsDriver,\n UploadDriver,\n DownloadUrlDriver,\n} from \"@milaboratories/pl-drivers\";\nimport type * as Sdk from \"@milaboratories/pl-model-common\";\nimport type { Signer } from \"@milaboratories/ts-helpers\";\nimport { isAsyncDisposable } from \"@milaboratories/helpers\";\nimport { HmacSha256Signer } from \"@milaboratories/ts-helpers\";\nimport type { InternalPFrameDriver } from \"../pool\";\nimport { createPFrameDriver } from \"../pool\";\nimport type { DriverKitOps, DriverKitOpsConstructor } from \"./ops\";\nimport { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings } from \"./ops\";\n\n/**\n * Drivers offered by the middle-layer for internal consumers,\n * like configuration rendering routines.\n *\n * This intertface is basically a version of the DriverKit from\n * UI SDK with extended API.\n * */\nexport interface MiddleLayerDriverKit extends Sdk.DriverKit, AsyncDisposable {\n /** Dispose the driver kit and all its resources. */\n dispose(): Promise<void>;\n\n // override with wider interface\n readonly blobDriver: DownloadDriver;\n // override with wider interface\n readonly blobToURLDriver: DownloadBlobToURLDriver;\n // override with wider interface\n readonly logDriver: LogsDriver;\n // override with wider interface\n readonly lsDriver: InternalLsDriver;\n // override with wider interface\n readonly pFrameDriver: InternalPFrameDriver;\n // override with wider interface\n readonly frontendDriver: DownloadUrlDriver;\n\n /**\n * Signer is initialized from local secret in drivers initialization routine,\n * so constitutes a part of the driver kit\n * */\n readonly signer: Signer;\n\n /**\n * Used to retrieve upload progress, and initiate upload porecesses driven by\n * upload requests from block outputs.\n * */\n readonly uploadDriver: UploadDriver;\n}\n\nexport async function initDriverKit(\n pl: PlClient,\n workdir: string,\n frontendDownloadPath: string,\n _ops: DriverKitOpsConstructor,\n): Promise<MiddleLayerDriverKit> {\n const ops: DriverKitOps = {\n ...DefaultDriverKitOpsSettings,\n ...DefaultDriverKitOpsPaths(workdir),\n ..._ops,\n };\n\n const signer = new HmacSha256Signer(ops.localSecret);\n\n const downloadClient = createDownloadClient(ops.logger, pl, ops.localProjections);\n const logsClient = createLogsClient(pl, ops.logger);\n const uploadBlobClient = createUploadBlobClient(pl, ops.logger);\n const uploadProgressClient = createUploadProgressClient(pl, ops.logger);\n\n const blobDriver = await DownloadDriver.init(\n ops.logger,\n downloadClient,\n logsClient,\n ops.blobDownloadPath,\n ops.blobDownloadRangesCachePath,\n signer,\n ops.blobDriverOps,\n );\n\n const blobToURLDriver = new DownloadBlobToURLDriver(\n ops.logger,\n signer,\n downloadClient,\n ops.downloadBlobToURLPath,\n ops.downloadBlobToURLDriverOps,\n );\n\n const uploadDriver = new UploadDriver(\n ops.logger,\n signer,\n uploadBlobClient,\n uploadProgressClient,\n ops.uploadDriverOps,\n );\n const logsStreamDriver = new LogsStreamDriver(ops.logger, logsClient, ops.logStreamDriverOps);\n const logDriver = new LogsDriver(ops.logger, logsStreamDriver, blobDriver);\n const lsDriver = await LsDriver.init(\n ops.logger,\n pl,\n signer,\n ops.localProjections,\n ops.openFileDialogCallback,\n ops.virtualLocalStoragesOverride,\n );\n\n const pFrameDriver = await createPFrameDriver({\n blobDriver,\n logger: ops.logger,\n spillPath: ops.pframesSpillPath,\n cachePath: ops.parquetCachePath,\n options: ops.pFrameDriverOps,\n cacheOps: ops.parquetCacheOps,\n });\n\n const frontendDownloadDriver = new DownloadUrlDriver(\n ops.logger,\n pl.httpDispatcher,\n frontendDownloadPath,\n signer,\n ops.frontendDownloadDriverOps,\n );\n\n const driverKit = {\n blobDriver,\n blobToURLDriver: blobToURLDriver,\n logDriver,\n lsDriver,\n signer,\n uploadDriver,\n pFrameDriver,\n frontendDriver: frontendDownloadDriver,\n };\n\n const dispose = async () => {\n const disposePromises = Object.values(driverKit).flatMap((driver) =>\n isAsyncDisposable(driver) ? [driver[Symbol.asyncDispose]()] : [],\n );\n await Promise.all(disposePromises);\n };\n\n return {\n ...driverKit,\n dispose,\n [Symbol.asyncDispose]: dispose,\n };\n}\n"],"mappings":";;;;;;;;AA6DA,eAAsB,cACpB,IACA,SACA,sBACA,MAC+B;CAC/B,MAAM,MAAoB;EACxB,GAAGA,YAAAA;EACH,GAAGC,YAAAA,yBAAyB,QAAQ;EACpC,GAAG;EACJ;CAED,MAAM,SAAS,IAAIC,2BAAAA,iBAAiB,IAAI,YAAY;CAEpD,MAAM,kBAAA,GAAA,2BAAA,sBAAsC,IAAI,QAAQ,IAAI,IAAI,iBAAiB;CACjF,MAAM,cAAA,GAAA,2BAAA,kBAA8B,IAAI,IAAI,OAAO;CACnD,MAAM,oBAAA,GAAA,2BAAA,wBAA0C,IAAI,IAAI,OAAO;CAC/D,MAAM,wBAAA,GAAA,2BAAA,4BAAkD,IAAI,IAAI,OAAO;CAEvE,MAAM,aAAa,MAAMC,2BAAAA,eAAe,KACtC,IAAI,QACJ,gBACA,YACA,IAAI,kBACJ,IAAI,6BACJ,QACA,IAAI,cACL;CAED,MAAM,kBAAkB,IAAIC,2BAAAA,wBAC1B,IAAI,QACJ,QACA,gBACA,IAAI,uBACJ,IAAI,2BACL;CAED,MAAM,eAAe,IAAIC,2BAAAA,aACvB,IAAI,QACJ,QACA,kBACA,sBACA,IAAI,gBACL;CACD,MAAM,mBAAmB,IAAIC,2BAAAA,iBAAiB,IAAI,QAAQ,YAAY,IAAI,mBAAmB;CA4B7F,MAAM,YAAY;EAChB;EACiB;EACjB,WA9BgB,IAAIC,2BAAAA,WAAW,IAAI,QAAQ,kBAAkB,WAAW;EA+BxE,UA9Be,MAAMC,2BAAAA,SAAS,KAC9B,IAAI,QACJ,IACA,QACA,IAAI,kBACJ,IAAI,wBACJ,IAAI,6BACL;EAwBC;EACA;EACA,cAxBmB,MAAMC,eAAAA,mBAAmB;GAC5C;GACA,QAAQ,IAAI;GACZ,WAAW,IAAI;GACf,WAAW,IAAI;GACf,SAAS,IAAI;GACb,UAAU,IAAI;GACf,CAAC;EAkBA,gBAhB6B,IAAIC,2BAAAA,kBACjC,IAAI,QACJ,GAAG,gBACH,sBACA,QACA,IAAI,0BACL;EAWA;CAED,MAAM,UAAU,YAAY;EAC1B,MAAM,kBAAkB,OAAO,OAAO,UAAU,CAAC,SAAS,YAAA,GAAA,wBAAA,mBACtC,OAAO,GAAG,CAAC,OAAO,OAAO,eAAe,CAAC,GAAG,EAAE,CACjE;AACD,QAAM,QAAQ,IAAI,gBAAgB;;AAGpC,QAAO;EACL,GAAG;EACH;GACC,OAAO,eAAe;EACxB"}
1
+ {"version":3,"file":"driver_kit.cjs","names":["DefaultDriverKitOpsSettings","DefaultDriverKitOpsPaths","HmacSha256Signer","DownloadDriver","DownloadBlobToURLDriver","UploadDriver","LogsStreamDriver","LogsDriver","LsDriver","createPFrameDriver","DownloadUrlDriver"],"sources":["../../src/middle_layer/driver_kit.ts"],"sourcesContent":["import type { PlClient } from \"@milaboratories/pl-client\";\nimport type { InternalLsDriver } from \"@milaboratories/pl-drivers\";\nimport {\n createDownloadClient,\n createLogsClient,\n createUploadBlobClient,\n createUploadProgressClient,\n DownloadDriver,\n DownloadBlobToURLDriver,\n LogsDriver,\n LogsStreamDriver,\n LsDriver,\n UploadDriver,\n DownloadUrlDriver,\n} from \"@milaboratories/pl-drivers\";\nimport type * as Sdk from \"@milaboratories/pl-model-common\";\nimport type { Signer } from \"@milaboratories/ts-helpers\";\nimport { isAsyncDisposable } from \"@milaboratories/helpers\";\nimport { HmacSha256Signer } from \"@milaboratories/ts-helpers\";\nimport type { InternalPFrameDriver } from \"../pool\";\nimport { createPFrameDriver } from \"../pool\";\nimport type { DriverKitOps, DriverKitOpsConstructor } from \"./ops\";\nimport { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings } from \"./ops\";\n\n/**\n * Drivers offered by the middle-layer for internal consumers,\n * like configuration rendering routines.\n *\n * This intertface is basically a version of the DriverKit from\n * UI SDK with extended API.\n * */\nexport interface MiddleLayerDriverKit extends Sdk.DriverKit, AsyncDisposable {\n /** Dispose the driver kit and all its resources. */\n dispose(): Promise<void>;\n\n // override with wider interface\n readonly blobDriver: DownloadDriver;\n // override with wider interface\n readonly blobToURLDriver: DownloadBlobToURLDriver;\n // override with wider interface\n readonly logDriver: LogsDriver;\n // override with wider interface\n readonly lsDriver: InternalLsDriver;\n // override with wider interface\n readonly pFrameDriver: InternalPFrameDriver;\n // override with wider interface\n readonly frontendDriver: DownloadUrlDriver;\n\n /**\n * Signer is initialized from local secret in drivers initialization routine,\n * so constitutes a part of the driver kit\n * */\n readonly signer: Signer;\n\n /**\n * Used to retrieve upload progress, and initiate upload porecesses driven by\n * upload requests from block outputs.\n * */\n readonly uploadDriver: UploadDriver;\n}\n\nexport async function initDriverKit(\n pl: PlClient,\n workdir: string,\n frontendDownloadPath: string,\n _ops: DriverKitOpsConstructor,\n): Promise<MiddleLayerDriverKit> {\n const ops: DriverKitOps = {\n ...DefaultDriverKitOpsSettings,\n ...DefaultDriverKitOpsPaths(workdir),\n ..._ops,\n };\n\n const signer = new HmacSha256Signer(ops.localSecret);\n\n const downloadClient = createDownloadClient(ops.logger, pl, ops.localProjections);\n const logsClient = createLogsClient(pl, ops.logger);\n const uploadBlobClient = createUploadBlobClient(pl, ops.logger);\n const uploadProgressClient = createUploadProgressClient(pl, ops.logger);\n\n const blobDriver = await DownloadDriver.init(\n ops.logger,\n downloadClient,\n logsClient,\n ops.blobDownloadPath,\n ops.blobDownloadRangesCachePath,\n signer,\n ops.blobDriverOps,\n );\n\n const blobToURLDriver = new DownloadBlobToURLDriver(\n ops.logger,\n signer,\n downloadClient,\n ops.downloadBlobToURLPath,\n ops.downloadBlobToURLDriverOps,\n );\n\n const uploadDriver = new UploadDriver(\n ops.logger,\n signer,\n uploadBlobClient,\n uploadProgressClient,\n ops.uploadDriverOps,\n );\n const logsStreamDriver = new LogsStreamDriver(ops.logger, logsClient, ops.logStreamDriverOps);\n const logDriver = new LogsDriver(ops.logger, logsStreamDriver, blobDriver);\n const lsDriver = await LsDriver.init(\n ops.logger,\n pl,\n signer,\n ops.localProjections,\n ops.openFileDialogCallback,\n ops.virtualLocalStoragesOverride,\n );\n\n const pFrameDriver = await createPFrameDriver({\n blobDriver,\n logger: ops.logger,\n spillPath: ops.pframesSpillPath,\n cachePath: ops.parquetCachePath,\n options: ops.pFrameDriverOps,\n cacheOps: ops.parquetCacheOps,\n });\n\n const frontendDownloadDriver = new DownloadUrlDriver(\n ops.logger,\n pl.httpDispatcher,\n frontendDownloadPath,\n signer,\n ops.frontendDownloadDriverOps,\n );\n\n const driverKit = {\n blobDriver,\n blobToURLDriver: blobToURLDriver,\n logDriver,\n lsDriver,\n signer,\n uploadDriver,\n pFrameDriver,\n frontendDriver: frontendDownloadDriver,\n };\n\n const dispose = async () => {\n const disposePromises = Object.values(driverKit).flatMap((driver) =>\n isAsyncDisposable(driver) ? [driver[Symbol.asyncDispose]()] : [],\n );\n await Promise.all(disposePromises);\n };\n\n return {\n ...driverKit,\n dispose,\n [Symbol.asyncDispose]: dispose,\n };\n}\n"],"mappings":";;;;;;;AA6DA,eAAsB,cACpB,IACA,SACA,sBACA,MAC+B;CAC/B,MAAM,MAAoB;EACxB,GAAGA,YAAAA;EACH,GAAGC,YAAAA,yBAAyB,OAAO;EACnC,GAAG;CACL;CAEA,MAAM,SAAS,IAAIC,2BAAAA,iBAAiB,IAAI,WAAW;CAEnD,MAAM,kBAAA,GAAA,2BAAA,qBAAA,CAAsC,IAAI,QAAQ,IAAI,IAAI,gBAAgB;CAChF,MAAM,cAAA,GAAA,2BAAA,iBAAA,CAA8B,IAAI,IAAI,MAAM;CAClD,MAAM,oBAAA,GAAA,2BAAA,uBAAA,CAA0C,IAAI,IAAI,MAAM;CAC9D,MAAM,wBAAA,GAAA,2BAAA,2BAAA,CAAkD,IAAI,IAAI,MAAM;CAEtE,MAAM,aAAa,MAAMC,2BAAAA,eAAe,KACtC,IAAI,QACJ,gBACA,YACA,IAAI,kBACJ,IAAI,6BACJ,QACA,IAAI,aACN;CAEA,MAAM,kBAAkB,IAAIC,2BAAAA,wBAC1B,IAAI,QACJ,QACA,gBACA,IAAI,uBACJ,IAAI,0BACN;CAEA,MAAM,eAAe,IAAIC,2BAAAA,aACvB,IAAI,QACJ,QACA,kBACA,sBACA,IAAI,eACN;CACA,MAAM,mBAAmB,IAAIC,2BAAAA,iBAAiB,IAAI,QAAQ,YAAY,IAAI,kBAAkB;CA4B5F,MAAM,YAAY;EAChB;EACiB;EACjB,WAAA,IA9BoBC,2BAAAA,WAAW,IAAI,QAAQ,kBAAkB,UA8BrD;EACR,UAAA,MA9BqBC,2BAAAA,SAAS,KAC9B,IAAI,QACJ,IACA,QACA,IAAI,kBACJ,IAAI,wBACJ,IAAI,4BACN;EAwBE;EACA;EACA,cAAA,MAxByBC,eAAAA,mBAAmB;GAC5C;GACA,QAAQ,IAAI;GACZ,WAAW,IAAI;GACf,WAAW,IAAI;GACf,SAAS,IAAI;GACb,UAAU,IAAI;EAChB,CAAC;EAkBC,gBAAgB,IAhBiBC,2BAAAA,kBACjC,IAAI,QACJ,GAAG,gBACH,sBACA,QACA,IAAI,yBAWiC;CACvC;CAEA,MAAM,UAAU,YAAY;EAC1B,MAAM,kBAAkB,OAAO,OAAO,SAAS,CAAC,CAAC,SAAS,YAAA,GAAA,wBAAA,kBAAA,CACtC,MAAM,IAAI,CAAC,OAAO,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,CACjE;EACA,MAAM,QAAQ,IAAI,eAAe;CACnC;CAEA,OAAO;EACL,GAAG;EACH;GACC,OAAO,eAAe;CACzB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"driver_kit.js","names":[],"sources":["../../src/middle_layer/driver_kit.ts"],"sourcesContent":["import type { PlClient } from \"@milaboratories/pl-client\";\nimport type { InternalLsDriver } from \"@milaboratories/pl-drivers\";\nimport {\n createDownloadClient,\n createLogsClient,\n createUploadBlobClient,\n createUploadProgressClient,\n DownloadDriver,\n DownloadBlobToURLDriver,\n LogsDriver,\n LogsStreamDriver,\n LsDriver,\n UploadDriver,\n DownloadUrlDriver,\n} from \"@milaboratories/pl-drivers\";\nimport type * as Sdk from \"@milaboratories/pl-model-common\";\nimport type { Signer } from \"@milaboratories/ts-helpers\";\nimport { isAsyncDisposable } from \"@milaboratories/helpers\";\nimport { HmacSha256Signer } from \"@milaboratories/ts-helpers\";\nimport type { InternalPFrameDriver } from \"../pool\";\nimport { createPFrameDriver } from \"../pool\";\nimport type { DriverKitOps, DriverKitOpsConstructor } from \"./ops\";\nimport { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings } from \"./ops\";\n\n/**\n * Drivers offered by the middle-layer for internal consumers,\n * like configuration rendering routines.\n *\n * This intertface is basically a version of the DriverKit from\n * UI SDK with extended API.\n * */\nexport interface MiddleLayerDriverKit extends Sdk.DriverKit, AsyncDisposable {\n /** Dispose the driver kit and all its resources. */\n dispose(): Promise<void>;\n\n // override with wider interface\n readonly blobDriver: DownloadDriver;\n // override with wider interface\n readonly blobToURLDriver: DownloadBlobToURLDriver;\n // override with wider interface\n readonly logDriver: LogsDriver;\n // override with wider interface\n readonly lsDriver: InternalLsDriver;\n // override with wider interface\n readonly pFrameDriver: InternalPFrameDriver;\n // override with wider interface\n readonly frontendDriver: DownloadUrlDriver;\n\n /**\n * Signer is initialized from local secret in drivers initialization routine,\n * so constitutes a part of the driver kit\n * */\n readonly signer: Signer;\n\n /**\n * Used to retrieve upload progress, and initiate upload porecesses driven by\n * upload requests from block outputs.\n * */\n readonly uploadDriver: UploadDriver;\n}\n\nexport async function initDriverKit(\n pl: PlClient,\n workdir: string,\n frontendDownloadPath: string,\n _ops: DriverKitOpsConstructor,\n): Promise<MiddleLayerDriverKit> {\n const ops: DriverKitOps = {\n ...DefaultDriverKitOpsSettings,\n ...DefaultDriverKitOpsPaths(workdir),\n ..._ops,\n };\n\n const signer = new HmacSha256Signer(ops.localSecret);\n\n const downloadClient = createDownloadClient(ops.logger, pl, ops.localProjections);\n const logsClient = createLogsClient(pl, ops.logger);\n const uploadBlobClient = createUploadBlobClient(pl, ops.logger);\n const uploadProgressClient = createUploadProgressClient(pl, ops.logger);\n\n const blobDriver = await DownloadDriver.init(\n ops.logger,\n downloadClient,\n logsClient,\n ops.blobDownloadPath,\n ops.blobDownloadRangesCachePath,\n signer,\n ops.blobDriverOps,\n );\n\n const blobToURLDriver = new DownloadBlobToURLDriver(\n ops.logger,\n signer,\n downloadClient,\n ops.downloadBlobToURLPath,\n ops.downloadBlobToURLDriverOps,\n );\n\n const uploadDriver = new UploadDriver(\n ops.logger,\n signer,\n uploadBlobClient,\n uploadProgressClient,\n ops.uploadDriverOps,\n );\n const logsStreamDriver = new LogsStreamDriver(ops.logger, logsClient, ops.logStreamDriverOps);\n const logDriver = new LogsDriver(ops.logger, logsStreamDriver, blobDriver);\n const lsDriver = await LsDriver.init(\n ops.logger,\n pl,\n signer,\n ops.localProjections,\n ops.openFileDialogCallback,\n ops.virtualLocalStoragesOverride,\n );\n\n const pFrameDriver = await createPFrameDriver({\n blobDriver,\n logger: ops.logger,\n spillPath: ops.pframesSpillPath,\n cachePath: ops.parquetCachePath,\n options: ops.pFrameDriverOps,\n cacheOps: ops.parquetCacheOps,\n });\n\n const frontendDownloadDriver = new DownloadUrlDriver(\n ops.logger,\n pl.httpDispatcher,\n frontendDownloadPath,\n signer,\n ops.frontendDownloadDriverOps,\n );\n\n const driverKit = {\n blobDriver,\n blobToURLDriver: blobToURLDriver,\n logDriver,\n lsDriver,\n signer,\n uploadDriver,\n pFrameDriver,\n frontendDriver: frontendDownloadDriver,\n };\n\n const dispose = async () => {\n const disposePromises = Object.values(driverKit).flatMap((driver) =>\n isAsyncDisposable(driver) ? [driver[Symbol.asyncDispose]()] : [],\n );\n await Promise.all(disposePromises);\n };\n\n return {\n ...driverKit,\n dispose,\n [Symbol.asyncDispose]: dispose,\n };\n}\n"],"mappings":";;;;;;;AA6DA,eAAsB,cACpB,IACA,SACA,sBACA,MAC+B;CAC/B,MAAM,MAAoB;EACxB,GAAG;EACH,GAAG,yBAAyB,QAAQ;EACpC,GAAG;EACJ;CAED,MAAM,SAAS,IAAI,iBAAiB,IAAI,YAAY;CAEpD,MAAM,iBAAiB,qBAAqB,IAAI,QAAQ,IAAI,IAAI,iBAAiB;CACjF,MAAM,aAAa,iBAAiB,IAAI,IAAI,OAAO;CACnD,MAAM,mBAAmB,uBAAuB,IAAI,IAAI,OAAO;CAC/D,MAAM,uBAAuB,2BAA2B,IAAI,IAAI,OAAO;CAEvE,MAAM,aAAa,MAAM,eAAe,KACtC,IAAI,QACJ,gBACA,YACA,IAAI,kBACJ,IAAI,6BACJ,QACA,IAAI,cACL;CAED,MAAM,kBAAkB,IAAI,wBAC1B,IAAI,QACJ,QACA,gBACA,IAAI,uBACJ,IAAI,2BACL;CAED,MAAM,eAAe,IAAI,aACvB,IAAI,QACJ,QACA,kBACA,sBACA,IAAI,gBACL;CACD,MAAM,mBAAmB,IAAI,iBAAiB,IAAI,QAAQ,YAAY,IAAI,mBAAmB;CA4B7F,MAAM,YAAY;EAChB;EACiB;EACjB,WA9BgB,IAAI,WAAW,IAAI,QAAQ,kBAAkB,WAAW;EA+BxE,UA9Be,MAAM,SAAS,KAC9B,IAAI,QACJ,IACA,QACA,IAAI,kBACJ,IAAI,wBACJ,IAAI,6BACL;EAwBC;EACA;EACA,cAxBmB,MAAM,mBAAmB;GAC5C;GACA,QAAQ,IAAI;GACZ,WAAW,IAAI;GACf,WAAW,IAAI;GACf,SAAS,IAAI;GACb,UAAU,IAAI;GACf,CAAC;EAkBA,gBAhB6B,IAAI,kBACjC,IAAI,QACJ,GAAG,gBACH,sBACA,QACA,IAAI,0BACL;EAWA;CAED,MAAM,UAAU,YAAY;EAC1B,MAAM,kBAAkB,OAAO,OAAO,UAAU,CAAC,SAAS,WACxD,kBAAkB,OAAO,GAAG,CAAC,OAAO,OAAO,eAAe,CAAC,GAAG,EAAE,CACjE;AACD,QAAM,QAAQ,IAAI,gBAAgB;;AAGpC,QAAO;EACL,GAAG;EACH;GACC,OAAO,eAAe;EACxB"}
1
+ {"version":3,"file":"driver_kit.js","names":[],"sources":["../../src/middle_layer/driver_kit.ts"],"sourcesContent":["import type { PlClient } from \"@milaboratories/pl-client\";\nimport type { InternalLsDriver } from \"@milaboratories/pl-drivers\";\nimport {\n createDownloadClient,\n createLogsClient,\n createUploadBlobClient,\n createUploadProgressClient,\n DownloadDriver,\n DownloadBlobToURLDriver,\n LogsDriver,\n LogsStreamDriver,\n LsDriver,\n UploadDriver,\n DownloadUrlDriver,\n} from \"@milaboratories/pl-drivers\";\nimport type * as Sdk from \"@milaboratories/pl-model-common\";\nimport type { Signer } from \"@milaboratories/ts-helpers\";\nimport { isAsyncDisposable } from \"@milaboratories/helpers\";\nimport { HmacSha256Signer } from \"@milaboratories/ts-helpers\";\nimport type { InternalPFrameDriver } from \"../pool\";\nimport { createPFrameDriver } from \"../pool\";\nimport type { DriverKitOps, DriverKitOpsConstructor } from \"./ops\";\nimport { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings } from \"./ops\";\n\n/**\n * Drivers offered by the middle-layer for internal consumers,\n * like configuration rendering routines.\n *\n * This intertface is basically a version of the DriverKit from\n * UI SDK with extended API.\n * */\nexport interface MiddleLayerDriverKit extends Sdk.DriverKit, AsyncDisposable {\n /** Dispose the driver kit and all its resources. */\n dispose(): Promise<void>;\n\n // override with wider interface\n readonly blobDriver: DownloadDriver;\n // override with wider interface\n readonly blobToURLDriver: DownloadBlobToURLDriver;\n // override with wider interface\n readonly logDriver: LogsDriver;\n // override with wider interface\n readonly lsDriver: InternalLsDriver;\n // override with wider interface\n readonly pFrameDriver: InternalPFrameDriver;\n // override with wider interface\n readonly frontendDriver: DownloadUrlDriver;\n\n /**\n * Signer is initialized from local secret in drivers initialization routine,\n * so constitutes a part of the driver kit\n * */\n readonly signer: Signer;\n\n /**\n * Used to retrieve upload progress, and initiate upload porecesses driven by\n * upload requests from block outputs.\n * */\n readonly uploadDriver: UploadDriver;\n}\n\nexport async function initDriverKit(\n pl: PlClient,\n workdir: string,\n frontendDownloadPath: string,\n _ops: DriverKitOpsConstructor,\n): Promise<MiddleLayerDriverKit> {\n const ops: DriverKitOps = {\n ...DefaultDriverKitOpsSettings,\n ...DefaultDriverKitOpsPaths(workdir),\n ..._ops,\n };\n\n const signer = new HmacSha256Signer(ops.localSecret);\n\n const downloadClient = createDownloadClient(ops.logger, pl, ops.localProjections);\n const logsClient = createLogsClient(pl, ops.logger);\n const uploadBlobClient = createUploadBlobClient(pl, ops.logger);\n const uploadProgressClient = createUploadProgressClient(pl, ops.logger);\n\n const blobDriver = await DownloadDriver.init(\n ops.logger,\n downloadClient,\n logsClient,\n ops.blobDownloadPath,\n ops.blobDownloadRangesCachePath,\n signer,\n ops.blobDriverOps,\n );\n\n const blobToURLDriver = new DownloadBlobToURLDriver(\n ops.logger,\n signer,\n downloadClient,\n ops.downloadBlobToURLPath,\n ops.downloadBlobToURLDriverOps,\n );\n\n const uploadDriver = new UploadDriver(\n ops.logger,\n signer,\n uploadBlobClient,\n uploadProgressClient,\n ops.uploadDriverOps,\n );\n const logsStreamDriver = new LogsStreamDriver(ops.logger, logsClient, ops.logStreamDriverOps);\n const logDriver = new LogsDriver(ops.logger, logsStreamDriver, blobDriver);\n const lsDriver = await LsDriver.init(\n ops.logger,\n pl,\n signer,\n ops.localProjections,\n ops.openFileDialogCallback,\n ops.virtualLocalStoragesOverride,\n );\n\n const pFrameDriver = await createPFrameDriver({\n blobDriver,\n logger: ops.logger,\n spillPath: ops.pframesSpillPath,\n cachePath: ops.parquetCachePath,\n options: ops.pFrameDriverOps,\n cacheOps: ops.parquetCacheOps,\n });\n\n const frontendDownloadDriver = new DownloadUrlDriver(\n ops.logger,\n pl.httpDispatcher,\n frontendDownloadPath,\n signer,\n ops.frontendDownloadDriverOps,\n );\n\n const driverKit = {\n blobDriver,\n blobToURLDriver: blobToURLDriver,\n logDriver,\n lsDriver,\n signer,\n uploadDriver,\n pFrameDriver,\n frontendDriver: frontendDownloadDriver,\n };\n\n const dispose = async () => {\n const disposePromises = Object.values(driverKit).flatMap((driver) =>\n isAsyncDisposable(driver) ? [driver[Symbol.asyncDispose]()] : [],\n );\n await Promise.all(disposePromises);\n };\n\n return {\n ...driverKit,\n dispose,\n [Symbol.asyncDispose]: dispose,\n };\n}\n"],"mappings":";;;;;;;AA6DA,eAAsB,cACpB,IACA,SACA,sBACA,MAC+B;CAC/B,MAAM,MAAoB;EACxB,GAAG;EACH,GAAG,yBAAyB,OAAO;EACnC,GAAG;CACL;CAEA,MAAM,SAAS,IAAI,iBAAiB,IAAI,WAAW;CAEnD,MAAM,iBAAiB,qBAAqB,IAAI,QAAQ,IAAI,IAAI,gBAAgB;CAChF,MAAM,aAAa,iBAAiB,IAAI,IAAI,MAAM;CAClD,MAAM,mBAAmB,uBAAuB,IAAI,IAAI,MAAM;CAC9D,MAAM,uBAAuB,2BAA2B,IAAI,IAAI,MAAM;CAEtE,MAAM,aAAa,MAAM,eAAe,KACtC,IAAI,QACJ,gBACA,YACA,IAAI,kBACJ,IAAI,6BACJ,QACA,IAAI,aACN;CAEA,MAAM,kBAAkB,IAAI,wBAC1B,IAAI,QACJ,QACA,gBACA,IAAI,uBACJ,IAAI,0BACN;CAEA,MAAM,eAAe,IAAI,aACvB,IAAI,QACJ,QACA,kBACA,sBACA,IAAI,eACN;CACA,MAAM,mBAAmB,IAAI,iBAAiB,IAAI,QAAQ,YAAY,IAAI,kBAAkB;CA4B5F,MAAM,YAAY;EAChB;EACiB;EACjB,WAAA,IA9BoB,WAAW,IAAI,QAAQ,kBAAkB,UA8BrD;EACR,UAAA,MA9BqB,SAAS,KAC9B,IAAI,QACJ,IACA,QACA,IAAI,kBACJ,IAAI,wBACJ,IAAI,4BACN;EAwBE;EACA;EACA,cAAA,MAxByB,mBAAmB;GAC5C;GACA,QAAQ,IAAI;GACZ,WAAW,IAAI;GACf,WAAW,IAAI;GACf,SAAS,IAAI;GACb,UAAU,IAAI;EAChB,CAAC;EAkBC,gBAAgB,IAhBiB,kBACjC,IAAI,QACJ,GAAG,gBACH,sBACA,QACA,IAAI,yBAWiC;CACvC;CAEA,MAAM,UAAU,YAAY;EAC1B,MAAM,kBAAkB,OAAO,OAAO,SAAS,CAAC,CAAC,SAAS,WACxD,kBAAkB,MAAM,IAAI,CAAC,OAAO,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,CACjE;EACA,MAAM,QAAQ,IAAI,eAAe;CACnC;CAEA,OAAO;EACL,GAAG;EACH;GACC,OAAO,eAAe;CACzB;AACF"}
@@ -1,4 +1,3 @@
1
- require("../_virtual/_rolldown/runtime.cjs");
2
1
  const require_project_model = require("../model/project_model.cjs");
3
2
  const require_block_pack_spec = require("../model/block_pack_spec.cjs");
4
3
  const require_block_pack = require("../mutator/block-pack/block_pack.cjs");
@@ -17,6 +16,11 @@ function kernel(frontendRes, env) {
17
16
  if (data === void 0) throw new Error(`No resource data.`);
18
17
  env.signer.verify(data.path, data.signature, `Frontend path signature mismatch for: ${data.path}`);
19
18
  return data.path;
19
+ } else if ((0, _milaboratories_pl_client.resourceTypesEqual)(node.resourceType, require_block_pack_spec.FrontendFromLocalTgzResourceType)) {
20
+ const data = node.getDataAsJson();
21
+ if (data === void 0) throw new Error(`No resource data.`);
22
+ env.signer.verify(`${data.path}:${data.mtime}`, data.signature, `Frontend path signature mismatch for: ${data.path}`);
23
+ return env.frontendDownloadDriver.getLocalTgz(data.path, data.mtime).withStableType();
20
24
  } else throw new Error(`Unsupported resource type: ${JSON.stringify(node.resourceType)}`);
21
25
  }
22
26
  function frontendUrlComputable(entry, env) {
@@ -1 +1 @@
1
- {"version":3,"file":"frontend_path.cjs","names":["FrontendFromUrlResourceType","FrontendFromFolderResourceType","Computable","getBlockPackInfo","projectFieldName","Pl","BlockPackFrontendField"],"sources":["../../src/middle_layer/frontend_path.ts"],"sourcesContent":["import type { PlTreeEntry, PlTreeEntryAccessor } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport type { ComputableStableDefined } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { Pl, resourceTypesEqual } from \"@milaboratories/pl-client\";\nimport type { FrontendFromFolderData, FrontendFromUrlData } from \"../model\";\nimport { FrontendFromFolderResourceType, FrontendFromUrlResourceType } from \"../model\";\nimport type { UrlResult } from \"@milaboratories/pl-drivers\";\nimport { projectFieldName } from \"../model/project_model\";\nimport { BlockPackFrontendField } from \"../mutator/block-pack/block_pack\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { FrontendData } from \"../model/frontend\";\n\nfunction kernel(\n frontendRes: PlTreeEntryAccessor,\n env: MiddleLayerEnvironment,\n): undefined | string | ComputableStableDefined<UrlResult> {\n const node = frontendRes.node();\n if (resourceTypesEqual(node.resourceType, FrontendFromUrlResourceType)) {\n const data = node.getDataAsJson<FrontendFromUrlData>();\n if (data === undefined) throw new Error(`No resource data.`);\n return env.frontendDownloadDriver.getUrl(new URL(data.url)).withStableType();\n } else if (resourceTypesEqual(node.resourceType, FrontendFromFolderResourceType)) {\n const data = node.getDataAsJson<FrontendFromFolderData>();\n if (data === undefined) throw new Error(`No resource data.`);\n env.signer.verify(\n data.path,\n data.signature,\n `Frontend path signature mismatch for: ${data.path}`,\n );\n return data.path;\n } else {\n throw new Error(`Unsupported resource type: ${JSON.stringify(node.resourceType)}`);\n }\n}\n\nfunction frontendUrlComputable(\n entry: PlTreeEntry | undefined,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<string> | undefined {\n if (entry === undefined) return undefined;\n return Computable.make(\n (c) => {\n return kernel(c.accessor(entry), env);\n },\n {\n postprocessValue: (v) => {\n if (v === undefined) return undefined;\n if (typeof v === \"string\") return v;\n if (v.error !== undefined) throw new Error(v.error);\n return v.url;\n },\n },\n ).withStableType();\n}\n\nexport function frontendData(\n projectEntry: PlTreeEntry,\n id: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<FrontendData> {\n return Computable.make(\n (ctx) => {\n const prj = ctx.accessor(projectEntry).node();\n const bp = getBlockPackInfo(prj, id);\n const frontendEntry = prj\n .traverse(\n {\n field: projectFieldName(id, \"blockPack\"),\n assertFieldType: \"Dynamic\",\n },\n { field: Pl.HolderRefField, assertFieldType: \"Input\", errorIfFieldNotFound: true },\n { field: BlockPackFrontendField, assertFieldType: \"Input\" },\n )\n ?.persist();\n return {\n url: frontendUrlComputable(frontendEntry, env),\n sdkVersion: bp?.cfg.sdkVersion,\n };\n },\n { mode: \"StableOnlyLive\" },\n ) as ComputableStableDefined<FrontendData>;\n}\n"],"mappings":";;;;;;;;AAaA,SAAS,OACP,aACA,KACyD;CACzD,MAAM,OAAO,YAAY,MAAM;AAC/B,MAAA,GAAA,0BAAA,oBAAuB,KAAK,cAAcA,wBAAAA,4BAA4B,EAAE;EACtE,MAAM,OAAO,KAAK,eAAoC;AACtD,MAAI,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,oBAAoB;AAC5D,SAAO,IAAI,uBAAuB,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,gBAAgB;8DAChD,KAAK,cAAcC,wBAAAA,+BAA+B,EAAE;EAChF,MAAM,OAAO,KAAK,eAAuC;AACzD,MAAI,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,oBAAoB;AAC5D,MAAI,OAAO,OACT,KAAK,MACL,KAAK,WACL,yCAAyC,KAAK,OAC/C;AACD,SAAO,KAAK;OAEZ,OAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,KAAK,aAAa,GAAG;;AAItF,SAAS,sBACP,OACA,KAC6C;AAC7C,KAAI,UAAU,KAAA,EAAW,QAAO,KAAA;AAChC,QAAOC,2BAAAA,WAAW,MACf,MAAM;AACL,SAAO,OAAO,EAAE,SAAS,MAAM,EAAE,IAAI;IAEvC,EACE,mBAAmB,MAAM;AACvB,MAAI,MAAM,KAAA,EAAW,QAAO,KAAA;AAC5B,MAAI,OAAO,MAAM,SAAU,QAAO;AAClC,MAAI,EAAE,UAAU,KAAA,EAAW,OAAM,IAAI,MAAM,EAAE,MAAM;AACnD,SAAO,EAAE;IAEZ,CACF,CAAC,gBAAgB;;AAGpB,SAAgB,aACd,cACA,IACA,KACuC;AACvC,QAAOA,2BAAAA,WAAW,MACf,QAAQ;EACP,MAAM,MAAM,IAAI,SAAS,aAAa,CAAC,MAAM;EAC7C,MAAM,KAAKC,aAAAA,iBAAiB,KAAK,GAAG;EACpC,MAAM,gBAAgB,IACnB,SACC;GACE,OAAOC,sBAAAA,iBAAiB,IAAI,YAAY;GACxC,iBAAiB;GAClB,EACD;GAAE,OAAOC,0BAAAA,GAAG;GAAgB,iBAAiB;GAAS,sBAAsB;GAAM,EAClF;GAAE,OAAOC,mBAAAA;GAAwB,iBAAiB;GAAS,CAC5D,EACC,SAAS;AACb,SAAO;GACL,KAAK,sBAAsB,eAAe,IAAI;GAC9C,YAAY,IAAI,IAAI;GACrB;IAEH,EAAE,MAAM,kBAAkB,CAC3B"}
1
+ {"version":3,"file":"frontend_path.cjs","names":["FrontendFromUrlResourceType","FrontendFromFolderResourceType","FrontendFromLocalTgzResourceType","Computable","getBlockPackInfo","projectFieldName","Pl","BlockPackFrontendField"],"sources":["../../src/middle_layer/frontend_path.ts"],"sourcesContent":["import type { PlTreeEntry, PlTreeEntryAccessor } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport type { ComputableStableDefined } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { Pl, resourceTypesEqual } from \"@milaboratories/pl-client\";\nimport type {\n FrontendFromFolderData,\n FrontendFromLocalTgzData,\n FrontendFromUrlData,\n} from \"../model\";\nimport {\n FrontendFromFolderResourceType,\n FrontendFromLocalTgzResourceType,\n FrontendFromUrlResourceType,\n} from \"../model\";\nimport type { UrlResult } from \"@milaboratories/pl-drivers\";\nimport { projectFieldName } from \"../model/project_model\";\nimport { BlockPackFrontendField } from \"../mutator/block-pack/block_pack\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { FrontendData } from \"../model/frontend\";\n\nfunction kernel(\n frontendRes: PlTreeEntryAccessor,\n env: MiddleLayerEnvironment,\n): undefined | string | ComputableStableDefined<UrlResult> {\n const node = frontendRes.node();\n if (resourceTypesEqual(node.resourceType, FrontendFromUrlResourceType)) {\n const data = node.getDataAsJson<FrontendFromUrlData>();\n if (data === undefined) throw new Error(`No resource data.`);\n return env.frontendDownloadDriver.getUrl(new URL(data.url)).withStableType();\n } else if (resourceTypesEqual(node.resourceType, FrontendFromFolderResourceType)) {\n const data = node.getDataAsJson<FrontendFromFolderData>();\n if (data === undefined) throw new Error(`No resource data.`);\n env.signer.verify(\n data.path,\n data.signature,\n `Frontend path signature mismatch for: ${data.path}`,\n );\n return data.path;\n } else if (resourceTypesEqual(node.resourceType, FrontendFromLocalTgzResourceType)) {\n const data = node.getDataAsJson<FrontendFromLocalTgzData>();\n if (data === undefined) throw new Error(`No resource data.`);\n env.signer.verify(\n `${data.path}:${data.mtime}`,\n data.signature,\n `Frontend path signature mismatch for: ${data.path}`,\n );\n // Lazily unpack the local ui.tgz through the download driver, so it\n // inherits the driver's space recycling + usage-tracking (same as the\n // registry url path), instead of serving an eagerly-unpacked folder.\n return env.frontendDownloadDriver.getLocalTgz(data.path, data.mtime).withStableType();\n } else {\n throw new Error(`Unsupported resource type: ${JSON.stringify(node.resourceType)}`);\n }\n}\n\nfunction frontendUrlComputable(\n entry: PlTreeEntry | undefined,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<string> | undefined {\n if (entry === undefined) return undefined;\n return Computable.make(\n (c) => {\n return kernel(c.accessor(entry), env);\n },\n {\n postprocessValue: (v) => {\n if (v === undefined) return undefined;\n if (typeof v === \"string\") return v;\n if (v.error !== undefined) throw new Error(v.error);\n return v.url;\n },\n },\n ).withStableType();\n}\n\nexport function frontendData(\n projectEntry: PlTreeEntry,\n id: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<FrontendData> {\n return Computable.make(\n (ctx) => {\n const prj = ctx.accessor(projectEntry).node();\n const bp = getBlockPackInfo(prj, id);\n const frontendEntry = prj\n .traverse(\n {\n field: projectFieldName(id, \"blockPack\"),\n assertFieldType: \"Dynamic\",\n },\n { field: Pl.HolderRefField, assertFieldType: \"Input\", errorIfFieldNotFound: true },\n { field: BlockPackFrontendField, assertFieldType: \"Input\" },\n )\n ?.persist();\n return {\n url: frontendUrlComputable(frontendEntry, env),\n sdkVersion: bp?.cfg.sdkVersion,\n };\n },\n { mode: \"StableOnlyLive\" },\n ) as ComputableStableDefined<FrontendData>;\n}\n"],"mappings":";;;;;;;AAqBA,SAAS,OACP,aACA,KACyD;CACzD,MAAM,OAAO,YAAY,KAAK;CAC9B,KAAA,GAAA,0BAAA,mBAAA,CAAuB,KAAK,cAAcA,wBAAAA,2BAA2B,GAAG;EACtE,MAAM,OAAO,KAAK,cAAmC;EACrD,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB;EAC3D,OAAO,IAAI,uBAAuB,OAAO,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe;CAC7E,OAAO,KAAA,GAAA,0BAAA,mBAAA,CAAuB,KAAK,cAAcC,wBAAAA,8BAA8B,GAAG;EAChF,MAAM,OAAO,KAAK,cAAsC;EACxD,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB;EAC3D,IAAI,OAAO,OACT,KAAK,MACL,KAAK,WACL,yCAAyC,KAAK,MAChD;EACA,OAAO,KAAK;CACd,OAAO,KAAA,GAAA,0BAAA,mBAAA,CAAuB,KAAK,cAAcC,wBAAAA,gCAAgC,GAAG;EAClF,MAAM,OAAO,KAAK,cAAwC;EAC1D,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB;EAC3D,IAAI,OAAO,OACT,GAAG,KAAK,KAAK,GAAG,KAAK,SACrB,KAAK,WACL,yCAAyC,KAAK,MAChD;EAIA,OAAO,IAAI,uBAAuB,YAAY,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC,eAAe;CACtF,OACE,MAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,KAAK,YAAY,GAAG;AAErF;AAEA,SAAS,sBACP,OACA,KAC6C;CAC7C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;CAChC,OAAOC,2BAAAA,WAAW,MACf,MAAM;EACL,OAAO,OAAO,EAAE,SAAS,KAAK,GAAG,GAAG;CACtC,GACA,EACE,mBAAmB,MAAM;EACvB,IAAI,MAAM,KAAA,GAAW,OAAO,KAAA;EAC5B,IAAI,OAAO,MAAM,UAAU,OAAO;EAClC,IAAI,EAAE,UAAU,KAAA,GAAW,MAAM,IAAI,MAAM,EAAE,KAAK;EAClD,OAAO,EAAE;CACX,EACF,CACF,CAAC,CAAC,eAAe;AACnB;AAEA,SAAgB,aACd,cACA,IACA,KACuC;CACvC,OAAOA,2BAAAA,WAAW,MACf,QAAQ;EACP,MAAM,MAAM,IAAI,SAAS,YAAY,CAAC,CAAC,KAAK;EAC5C,MAAM,KAAKC,aAAAA,iBAAiB,KAAK,EAAE;EACnC,MAAM,gBAAgB,IACnB,SACC;GACE,OAAOC,sBAAAA,iBAAiB,IAAI,WAAW;GACvC,iBAAiB;EACnB,GACA;GAAE,OAAOC,0BAAAA,GAAG;GAAgB,iBAAiB;GAAS,sBAAsB;EAAK,GACjF;GAAE,OAAOC,mBAAAA;GAAwB,iBAAiB;EAAQ,CAC5D,CAAC,EACC,QAAQ;EACZ,OAAO;GACL,KAAK,sBAAsB,eAAe,GAAG;GAC7C,YAAY,IAAI,IAAI;EACtB;CACF,GACA,EAAE,MAAM,iBAAiB,CAC3B;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { projectFieldName } from "../model/project_model.js";
2
- import { FrontendFromFolderResourceType, FrontendFromUrlResourceType } from "../model/block_pack_spec.js";
2
+ import { FrontendFromFolderResourceType, FrontendFromLocalTgzResourceType, FrontendFromUrlResourceType } from "../model/block_pack_spec.js";
3
3
  import { BlockPackFrontendField } from "../mutator/block-pack/block_pack.js";
4
4
  import { getBlockPackInfo } from "./util.js";
5
5
  import { Pl, resourceTypesEqual } from "@milaboratories/pl-client";
@@ -16,6 +16,11 @@ function kernel(frontendRes, env) {
16
16
  if (data === void 0) throw new Error(`No resource data.`);
17
17
  env.signer.verify(data.path, data.signature, `Frontend path signature mismatch for: ${data.path}`);
18
18
  return data.path;
19
+ } else if (resourceTypesEqual(node.resourceType, FrontendFromLocalTgzResourceType)) {
20
+ const data = node.getDataAsJson();
21
+ if (data === void 0) throw new Error(`No resource data.`);
22
+ env.signer.verify(`${data.path}:${data.mtime}`, data.signature, `Frontend path signature mismatch for: ${data.path}`);
23
+ return env.frontendDownloadDriver.getLocalTgz(data.path, data.mtime).withStableType();
19
24
  } else throw new Error(`Unsupported resource type: ${JSON.stringify(node.resourceType)}`);
20
25
  }
21
26
  function frontendUrlComputable(entry, env) {
@@ -1 +1 @@
1
- {"version":3,"file":"frontend_path.js","names":[],"sources":["../../src/middle_layer/frontend_path.ts"],"sourcesContent":["import type { PlTreeEntry, PlTreeEntryAccessor } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport type { ComputableStableDefined } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { Pl, resourceTypesEqual } from \"@milaboratories/pl-client\";\nimport type { FrontendFromFolderData, FrontendFromUrlData } from \"../model\";\nimport { FrontendFromFolderResourceType, FrontendFromUrlResourceType } from \"../model\";\nimport type { UrlResult } from \"@milaboratories/pl-drivers\";\nimport { projectFieldName } from \"../model/project_model\";\nimport { BlockPackFrontendField } from \"../mutator/block-pack/block_pack\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { FrontendData } from \"../model/frontend\";\n\nfunction kernel(\n frontendRes: PlTreeEntryAccessor,\n env: MiddleLayerEnvironment,\n): undefined | string | ComputableStableDefined<UrlResult> {\n const node = frontendRes.node();\n if (resourceTypesEqual(node.resourceType, FrontendFromUrlResourceType)) {\n const data = node.getDataAsJson<FrontendFromUrlData>();\n if (data === undefined) throw new Error(`No resource data.`);\n return env.frontendDownloadDriver.getUrl(new URL(data.url)).withStableType();\n } else if (resourceTypesEqual(node.resourceType, FrontendFromFolderResourceType)) {\n const data = node.getDataAsJson<FrontendFromFolderData>();\n if (data === undefined) throw new Error(`No resource data.`);\n env.signer.verify(\n data.path,\n data.signature,\n `Frontend path signature mismatch for: ${data.path}`,\n );\n return data.path;\n } else {\n throw new Error(`Unsupported resource type: ${JSON.stringify(node.resourceType)}`);\n }\n}\n\nfunction frontendUrlComputable(\n entry: PlTreeEntry | undefined,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<string> | undefined {\n if (entry === undefined) return undefined;\n return Computable.make(\n (c) => {\n return kernel(c.accessor(entry), env);\n },\n {\n postprocessValue: (v) => {\n if (v === undefined) return undefined;\n if (typeof v === \"string\") return v;\n if (v.error !== undefined) throw new Error(v.error);\n return v.url;\n },\n },\n ).withStableType();\n}\n\nexport function frontendData(\n projectEntry: PlTreeEntry,\n id: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<FrontendData> {\n return Computable.make(\n (ctx) => {\n const prj = ctx.accessor(projectEntry).node();\n const bp = getBlockPackInfo(prj, id);\n const frontendEntry = prj\n .traverse(\n {\n field: projectFieldName(id, \"blockPack\"),\n assertFieldType: \"Dynamic\",\n },\n { field: Pl.HolderRefField, assertFieldType: \"Input\", errorIfFieldNotFound: true },\n { field: BlockPackFrontendField, assertFieldType: \"Input\" },\n )\n ?.persist();\n return {\n url: frontendUrlComputable(frontendEntry, env),\n sdkVersion: bp?.cfg.sdkVersion,\n };\n },\n { mode: \"StableOnlyLive\" },\n ) as ComputableStableDefined<FrontendData>;\n}\n"],"mappings":";;;;;;;AAaA,SAAS,OACP,aACA,KACyD;CACzD,MAAM,OAAO,YAAY,MAAM;AAC/B,KAAI,mBAAmB,KAAK,cAAc,4BAA4B,EAAE;EACtE,MAAM,OAAO,KAAK,eAAoC;AACtD,MAAI,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,oBAAoB;AAC5D,SAAO,IAAI,uBAAuB,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,gBAAgB;YACnE,mBAAmB,KAAK,cAAc,+BAA+B,EAAE;EAChF,MAAM,OAAO,KAAK,eAAuC;AACzD,MAAI,SAAS,KAAA,EAAW,OAAM,IAAI,MAAM,oBAAoB;AAC5D,MAAI,OAAO,OACT,KAAK,MACL,KAAK,WACL,yCAAyC,KAAK,OAC/C;AACD,SAAO,KAAK;OAEZ,OAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,KAAK,aAAa,GAAG;;AAItF,SAAS,sBACP,OACA,KAC6C;AAC7C,KAAI,UAAU,KAAA,EAAW,QAAO,KAAA;AAChC,QAAO,WAAW,MACf,MAAM;AACL,SAAO,OAAO,EAAE,SAAS,MAAM,EAAE,IAAI;IAEvC,EACE,mBAAmB,MAAM;AACvB,MAAI,MAAM,KAAA,EAAW,QAAO,KAAA;AAC5B,MAAI,OAAO,MAAM,SAAU,QAAO;AAClC,MAAI,EAAE,UAAU,KAAA,EAAW,OAAM,IAAI,MAAM,EAAE,MAAM;AACnD,SAAO,EAAE;IAEZ,CACF,CAAC,gBAAgB;;AAGpB,SAAgB,aACd,cACA,IACA,KACuC;AACvC,QAAO,WAAW,MACf,QAAQ;EACP,MAAM,MAAM,IAAI,SAAS,aAAa,CAAC,MAAM;EAC7C,MAAM,KAAK,iBAAiB,KAAK,GAAG;EACpC,MAAM,gBAAgB,IACnB,SACC;GACE,OAAO,iBAAiB,IAAI,YAAY;GACxC,iBAAiB;GAClB,EACD;GAAE,OAAO,GAAG;GAAgB,iBAAiB;GAAS,sBAAsB;GAAM,EAClF;GAAE,OAAO;GAAwB,iBAAiB;GAAS,CAC5D,EACC,SAAS;AACb,SAAO;GACL,KAAK,sBAAsB,eAAe,IAAI;GAC9C,YAAY,IAAI,IAAI;GACrB;IAEH,EAAE,MAAM,kBAAkB,CAC3B"}
1
+ {"version":3,"file":"frontend_path.js","names":[],"sources":["../../src/middle_layer/frontend_path.ts"],"sourcesContent":["import type { PlTreeEntry, PlTreeEntryAccessor } from \"@milaboratories/pl-tree\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport type { ComputableStableDefined } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { Pl, resourceTypesEqual } from \"@milaboratories/pl-client\";\nimport type {\n FrontendFromFolderData,\n FrontendFromLocalTgzData,\n FrontendFromUrlData,\n} from \"../model\";\nimport {\n FrontendFromFolderResourceType,\n FrontendFromLocalTgzResourceType,\n FrontendFromUrlResourceType,\n} from \"../model\";\nimport type { UrlResult } from \"@milaboratories/pl-drivers\";\nimport { projectFieldName } from \"../model/project_model\";\nimport { BlockPackFrontendField } from \"../mutator/block-pack/block_pack\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { FrontendData } from \"../model/frontend\";\n\nfunction kernel(\n frontendRes: PlTreeEntryAccessor,\n env: MiddleLayerEnvironment,\n): undefined | string | ComputableStableDefined<UrlResult> {\n const node = frontendRes.node();\n if (resourceTypesEqual(node.resourceType, FrontendFromUrlResourceType)) {\n const data = node.getDataAsJson<FrontendFromUrlData>();\n if (data === undefined) throw new Error(`No resource data.`);\n return env.frontendDownloadDriver.getUrl(new URL(data.url)).withStableType();\n } else if (resourceTypesEqual(node.resourceType, FrontendFromFolderResourceType)) {\n const data = node.getDataAsJson<FrontendFromFolderData>();\n if (data === undefined) throw new Error(`No resource data.`);\n env.signer.verify(\n data.path,\n data.signature,\n `Frontend path signature mismatch for: ${data.path}`,\n );\n return data.path;\n } else if (resourceTypesEqual(node.resourceType, FrontendFromLocalTgzResourceType)) {\n const data = node.getDataAsJson<FrontendFromLocalTgzData>();\n if (data === undefined) throw new Error(`No resource data.`);\n env.signer.verify(\n `${data.path}:${data.mtime}`,\n data.signature,\n `Frontend path signature mismatch for: ${data.path}`,\n );\n // Lazily unpack the local ui.tgz through the download driver, so it\n // inherits the driver's space recycling + usage-tracking (same as the\n // registry url path), instead of serving an eagerly-unpacked folder.\n return env.frontendDownloadDriver.getLocalTgz(data.path, data.mtime).withStableType();\n } else {\n throw new Error(`Unsupported resource type: ${JSON.stringify(node.resourceType)}`);\n }\n}\n\nfunction frontendUrlComputable(\n entry: PlTreeEntry | undefined,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<string> | undefined {\n if (entry === undefined) return undefined;\n return Computable.make(\n (c) => {\n return kernel(c.accessor(entry), env);\n },\n {\n postprocessValue: (v) => {\n if (v === undefined) return undefined;\n if (typeof v === \"string\") return v;\n if (v.error !== undefined) throw new Error(v.error);\n return v.url;\n },\n },\n ).withStableType();\n}\n\nexport function frontendData(\n projectEntry: PlTreeEntry,\n id: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<FrontendData> {\n return Computable.make(\n (ctx) => {\n const prj = ctx.accessor(projectEntry).node();\n const bp = getBlockPackInfo(prj, id);\n const frontendEntry = prj\n .traverse(\n {\n field: projectFieldName(id, \"blockPack\"),\n assertFieldType: \"Dynamic\",\n },\n { field: Pl.HolderRefField, assertFieldType: \"Input\", errorIfFieldNotFound: true },\n { field: BlockPackFrontendField, assertFieldType: \"Input\" },\n )\n ?.persist();\n return {\n url: frontendUrlComputable(frontendEntry, env),\n sdkVersion: bp?.cfg.sdkVersion,\n };\n },\n { mode: \"StableOnlyLive\" },\n ) as ComputableStableDefined<FrontendData>;\n}\n"],"mappings":";;;;;;;AAqBA,SAAS,OACP,aACA,KACyD;CACzD,MAAM,OAAO,YAAY,KAAK;CAC9B,IAAI,mBAAmB,KAAK,cAAc,2BAA2B,GAAG;EACtE,MAAM,OAAO,KAAK,cAAmC;EACrD,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB;EAC3D,OAAO,IAAI,uBAAuB,OAAO,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe;CAC7E,OAAO,IAAI,mBAAmB,KAAK,cAAc,8BAA8B,GAAG;EAChF,MAAM,OAAO,KAAK,cAAsC;EACxD,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB;EAC3D,IAAI,OAAO,OACT,KAAK,MACL,KAAK,WACL,yCAAyC,KAAK,MAChD;EACA,OAAO,KAAK;CACd,OAAO,IAAI,mBAAmB,KAAK,cAAc,gCAAgC,GAAG;EAClF,MAAM,OAAO,KAAK,cAAwC;EAC1D,IAAI,SAAS,KAAA,GAAW,MAAM,IAAI,MAAM,mBAAmB;EAC3D,IAAI,OAAO,OACT,GAAG,KAAK,KAAK,GAAG,KAAK,SACrB,KAAK,WACL,yCAAyC,KAAK,MAChD;EAIA,OAAO,IAAI,uBAAuB,YAAY,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC,eAAe;CACtF,OACE,MAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,KAAK,YAAY,GAAG;AAErF;AAEA,SAAS,sBACP,OACA,KAC6C;CAC7C,IAAI,UAAU,KAAA,GAAW,OAAO,KAAA;CAChC,OAAO,WAAW,MACf,MAAM;EACL,OAAO,OAAO,EAAE,SAAS,KAAK,GAAG,GAAG;CACtC,GACA,EACE,mBAAmB,MAAM;EACvB,IAAI,MAAM,KAAA,GAAW,OAAO,KAAA;EAC5B,IAAI,OAAO,MAAM,UAAU,OAAO;EAClC,IAAI,EAAE,UAAU,KAAA,GAAW,MAAM,IAAI,MAAM,EAAE,KAAK;EAClD,OAAO,EAAE;CACX,EACF,CACF,CAAC,CAAC,eAAe;AACnB;AAEA,SAAgB,aACd,cACA,IACA,KACuC;CACvC,OAAO,WAAW,MACf,QAAQ;EACP,MAAM,MAAM,IAAI,SAAS,YAAY,CAAC,CAAC,KAAK;EAC5C,MAAM,KAAK,iBAAiB,KAAK,EAAE;EACnC,MAAM,gBAAgB,IACnB,SACC;GACE,OAAO,iBAAiB,IAAI,WAAW;GACvC,iBAAiB;EACnB,GACA;GAAE,OAAO,GAAG;GAAgB,iBAAiB;GAAS,sBAAsB;EAAK,GACjF;GAAE,OAAO;GAAwB,iBAAiB;EAAQ,CAC5D,CAAC,EACC,QAAQ;EACZ,OAAO;GACL,KAAK,sBAAsB,eAAe,GAAG;GAC7C,YAAY,IAAI,IAAI;EACtB;CACF,GACA,EAAE,MAAM,iBAAiB,CAC3B;AACF"}
@@ -1,5 +1,13 @@
1
- require("./project_list.cjs");
2
- require("./project.cjs");
3
- require("./ops.cjs");
4
- require("./driver_kit.cjs");
5
- require("./middle_layer.cjs");
1
+ const require_project_list = require("./project_list.cjs");
2
+ const require_project = require("./project.cjs");
3
+ const require_ops = require("./ops.cjs");
4
+ const require_driver_kit = require("./driver_kit.cjs");
5
+ const require_middle_layer = require("./middle_layer.cjs");
6
+ exports.DefaultDriverKitOpsPaths = require_ops.DefaultDriverKitOpsPaths;
7
+ exports.DefaultDriverKitOpsSettings = require_ops.DefaultDriverKitOpsSettings;
8
+ exports.DefaultMiddleLayerOpsPaths = require_ops.DefaultMiddleLayerOpsPaths;
9
+ exports.DefaultMiddleLayerOpsSettings = require_ops.DefaultMiddleLayerOpsSettings;
10
+ exports.MiddleLayer = require_middle_layer.MiddleLayer;
11
+ exports.Project = require_project.Project;
12
+ exports.ProjectsField = require_project_list.ProjectsField;
13
+ exports.initDriverKit = require_driver_kit.initDriverKit;
@@ -2,4 +2,5 @@ import { Project } from "./project.js";
2
2
  import { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings, DefaultMiddleLayerOpsPaths, DefaultMiddleLayerOpsSettings, DriverKitOps, DriverKitOpsConstructor, DriverKitOpsPaths, DriverKitOpsSettings, MiddleLayerDebugOptions, MiddleLayerOps, MiddleLayerOpsConstructor, MiddleLayerOpsPaths, MiddleLayerOpsSettings } from "./ops.js";
3
3
  import { MiddleLayerDriverKit, initDriverKit } from "./driver_kit.js";
4
4
  import { MiddleLayer } from "./middle_layer.js";
5
- import { ProjectsField } from "./project_list.js";
5
+ import { ProjectsField } from "./project_list.js";
6
+ export { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings, DefaultMiddleLayerOpsPaths, DefaultMiddleLayerOpsSettings, DriverKitOps, DriverKitOpsConstructor, DriverKitOpsPaths, DriverKitOpsSettings, MiddleLayer, MiddleLayerDebugOptions, MiddleLayerDriverKit, MiddleLayerOps, MiddleLayerOpsConstructor, MiddleLayerOpsPaths, MiddleLayerOpsSettings, Project, ProjectsField, initDriverKit };
@@ -1,5 +1,6 @@
1
- import "./project_list.js";
2
- import "./project.js";
3
- import "./ops.js";
4
- import "./driver_kit.js";
5
- import "./middle_layer.js";
1
+ import { ProjectsField } from "./project_list.js";
2
+ import { Project } from "./project.js";
3
+ import { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings, DefaultMiddleLayerOpsPaths, DefaultMiddleLayerOpsSettings } from "./ops.js";
4
+ import { initDriverKit } from "./driver_kit.js";
5
+ import { MiddleLayer } from "./middle_layer.js";
6
+ export { DefaultDriverKitOpsPaths, DefaultDriverKitOpsSettings, DefaultMiddleLayerOpsPaths, DefaultMiddleLayerOpsSettings, MiddleLayer, Project, ProjectsField, initDriverKit };