@milaboratories/pl-model-common 1.46.2 → 1.46.4

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 (205) hide show
  1. package/dist/author_marker.d.ts.map +1 -1
  2. package/dist/base32_encode.cjs.map +1 -1
  3. package/dist/base32_encode.js.map +1 -1
  4. package/dist/base64.cjs.map +1 -1
  5. package/dist/base64.d.ts.map +1 -1
  6. package/dist/base64.js.map +1 -1
  7. package/dist/bmodel/block_config.cjs.map +1 -1
  8. package/dist/bmodel/block_config.d.ts.map +1 -1
  9. package/dist/bmodel/block_config.js.map +1 -1
  10. package/dist/bmodel/code.cjs +0 -1
  11. package/dist/bmodel/code.cjs.map +1 -1
  12. package/dist/bmodel/code.d.ts.map +1 -1
  13. package/dist/bmodel/code.js.map +1 -1
  14. package/dist/bmodel/index.cjs +6 -3
  15. package/dist/bmodel/index.d.ts +2 -1
  16. package/dist/bmodel/index.js +4 -3
  17. package/dist/bmodel/normalization.cjs +2 -1
  18. package/dist/bmodel/normalization.cjs.map +1 -1
  19. package/dist/bmodel/normalization.d.ts.map +1 -1
  20. package/dist/bmodel/normalization.js +2 -1
  21. package/dist/bmodel/normalization.js.map +1 -1
  22. package/dist/branding.d.ts.map +1 -1
  23. package/dist/common_types.d.ts.map +1 -1
  24. package/dist/dialog/index.d.ts.map +1 -1
  25. package/dist/drivers/ChunkedStreamReader.cjs.map +1 -1
  26. package/dist/drivers/ChunkedStreamReader.d.ts.map +1 -1
  27. package/dist/drivers/ChunkedStreamReader.js.map +1 -1
  28. package/dist/drivers/blob.cjs +2 -1
  29. package/dist/drivers/blob.cjs.map +1 -1
  30. package/dist/drivers/blob.d.ts.map +1 -1
  31. package/dist/drivers/blob.js +2 -0
  32. package/dist/drivers/blob.js.map +1 -1
  33. package/dist/drivers/index.cjs +106 -18
  34. package/dist/drivers/index.d.ts +2 -1
  35. package/dist/drivers/index.js +19 -18
  36. package/dist/drivers/interfaces.d.ts.map +1 -1
  37. package/dist/drivers/log.cjs.map +1 -1
  38. package/dist/drivers/log.d.ts.map +1 -1
  39. package/dist/drivers/log.js.map +1 -1
  40. package/dist/drivers/ls.cjs.map +1 -1
  41. package/dist/drivers/ls.d.ts.map +1 -1
  42. package/dist/drivers/ls.js.map +1 -1
  43. package/dist/drivers/pframe/data_info.cjs.map +1 -1
  44. package/dist/drivers/pframe/data_info.d.ts.map +1 -1
  45. package/dist/drivers/pframe/data_info.js.map +1 -1
  46. package/dist/drivers/pframe/data_types.cjs.map +1 -1
  47. package/dist/drivers/pframe/data_types.d.ts.map +1 -1
  48. package/dist/drivers/pframe/data_types.js.map +1 -1
  49. package/dist/drivers/pframe/driver.d.ts.map +1 -1
  50. package/dist/drivers/pframe/filter_spec.d.ts.map +1 -1
  51. package/dist/drivers/pframe/find_columns.d.ts.map +1 -1
  52. package/dist/drivers/pframe/index.cjs +89 -14
  53. package/dist/drivers/pframe/index.d.ts +2 -1
  54. package/dist/drivers/pframe/index.js +14 -14
  55. package/dist/drivers/pframe/linker_columns.cjs +2 -2
  56. package/dist/drivers/pframe/linker_columns.cjs.map +1 -1
  57. package/dist/drivers/pframe/linker_columns.d.ts.map +1 -1
  58. package/dist/drivers/pframe/linker_columns.js +2 -2
  59. package/dist/drivers/pframe/linker_columns.js.map +1 -1
  60. package/dist/drivers/pframe/pframe.d.ts.map +1 -1
  61. package/dist/drivers/pframe/query/index.cjs +6 -1
  62. package/dist/drivers/pframe/query/index.d.ts +2 -1
  63. package/dist/drivers/pframe/query/index.js +2 -1
  64. package/dist/drivers/pframe/query/query_common.d.ts +1 -1
  65. package/dist/drivers/pframe/query/query_common.d.ts.map +1 -1
  66. package/dist/drivers/pframe/query/query_data.d.ts.map +1 -1
  67. package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
  68. package/dist/drivers/pframe/query/utils.cjs +1 -1
  69. package/dist/drivers/pframe/query/utils.cjs.map +1 -1
  70. package/dist/drivers/pframe/query/utils.d.ts.map +1 -1
  71. package/dist/drivers/pframe/query/utils.js +1 -1
  72. package/dist/drivers/pframe/query/utils.js.map +1 -1
  73. package/dist/drivers/pframe/spec/anchored.cjs +2 -1
  74. package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
  75. package/dist/drivers/pframe/spec/anchored.d.ts.map +1 -1
  76. package/dist/drivers/pframe/spec/anchored.js +1 -0
  77. package/dist/drivers/pframe/spec/anchored.js.map +1 -1
  78. package/dist/drivers/pframe/spec/discovered_column.cjs +0 -1
  79. package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -1
  80. package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -1
  81. package/dist/drivers/pframe/spec/discovered_column.js.map +1 -1
  82. package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
  83. package/dist/drivers/pframe/spec/filtered_column.d.ts.map +1 -1
  84. package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
  85. package/dist/drivers/pframe/spec/ids.cjs +1 -1
  86. package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
  87. package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
  88. package/dist/drivers/pframe/spec/ids.js.map +1 -1
  89. package/dist/drivers/pframe/spec/index.cjs +57 -7
  90. package/dist/drivers/pframe/spec/index.d.ts +2 -1
  91. package/dist/drivers/pframe/spec/index.js +8 -7
  92. package/dist/drivers/pframe/spec/native_id.cjs +1 -1
  93. package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
  94. package/dist/drivers/pframe/spec/native_id.d.ts.map +1 -1
  95. package/dist/drivers/pframe/spec/native_id.js.map +1 -1
  96. package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
  97. package/dist/drivers/pframe/spec/selectors.d.ts.map +1 -1
  98. package/dist/drivers/pframe/spec/selectors.js.map +1 -1
  99. package/dist/drivers/pframe/spec/spec.cjs +1 -2
  100. package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
  101. package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
  102. package/dist/drivers/pframe/spec/spec.js +1 -1
  103. package/dist/drivers/pframe/spec/spec.js.map +1 -1
  104. package/dist/drivers/pframe/spec_driver.d.ts.map +1 -1
  105. package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
  106. package/dist/drivers/pframe/table_calculate.d.ts.map +1 -1
  107. package/dist/drivers/pframe/table_calculate.js.map +1 -1
  108. package/dist/drivers/pframe/table_common.cjs.map +1 -1
  109. package/dist/drivers/pframe/table_common.d.ts.map +1 -1
  110. package/dist/drivers/pframe/table_common.js.map +1 -1
  111. package/dist/drivers/pframe/unique_values.d.ts.map +1 -1
  112. package/dist/drivers/upload.d.ts.map +1 -1
  113. package/dist/drivers/urls.cjs.map +1 -1
  114. package/dist/drivers/urls.d.ts.map +1 -1
  115. package/dist/drivers/urls.js.map +1 -1
  116. package/dist/errors.cjs.map +1 -1
  117. package/dist/errors.d.ts.map +1 -1
  118. package/dist/errors.js.map +1 -1
  119. package/dist/flags/block_flags.cjs.map +1 -1
  120. package/dist/flags/block_flags.d.ts.map +1 -1
  121. package/dist/flags/block_flags.js.map +1 -1
  122. package/dist/flags/flag_utils.cjs +1 -0
  123. package/dist/flags/flag_utils.cjs.map +1 -1
  124. package/dist/flags/flag_utils.d.ts.map +1 -1
  125. package/dist/flags/flag_utils.js +1 -0
  126. package/dist/flags/flag_utils.js.map +1 -1
  127. package/dist/flags/index.d.ts +2 -1
  128. package/dist/flags/type_utils.d.ts.map +1 -1
  129. package/dist/httpAuth.cjs.map +1 -1
  130. package/dist/httpAuth.d.ts.map +1 -1
  131. package/dist/httpAuth.js.map +1 -1
  132. package/dist/json.cjs +1 -1
  133. package/dist/json.cjs.map +1 -1
  134. package/dist/json.d.ts.map +1 -1
  135. package/dist/json.js.map +1 -1
  136. package/dist/navigation.cjs.map +1 -1
  137. package/dist/navigation.d.ts.map +1 -1
  138. package/dist/navigation.js.map +1 -1
  139. package/dist/plid.cjs +1 -2
  140. package/dist/plid.cjs.map +1 -1
  141. package/dist/plid.d.ts.map +1 -1
  142. package/dist/plid.js +1 -1
  143. package/dist/plid.js.map +1 -1
  144. package/dist/pool/entry.d.ts.map +1 -1
  145. package/dist/pool/index.d.ts +2 -1
  146. package/dist/pool/query.cjs.map +1 -1
  147. package/dist/pool/query.d.ts.map +1 -1
  148. package/dist/pool/query.js.map +1 -1
  149. package/dist/pool/spec.cjs.map +1 -1
  150. package/dist/pool/spec.d.ts.map +1 -1
  151. package/dist/pool/spec.js.map +1 -1
  152. package/dist/pool_entry.cjs +1 -0
  153. package/dist/pool_entry.cjs.map +1 -1
  154. package/dist/pool_entry.d.ts.map +1 -1
  155. package/dist/pool_entry.js +1 -0
  156. package/dist/pool_entry.js.map +1 -1
  157. package/dist/project_id.d.ts.map +1 -1
  158. package/dist/ref.cjs +0 -1
  159. package/dist/ref.cjs.map +1 -1
  160. package/dist/ref.d.ts.map +1 -1
  161. package/dist/ref.js.map +1 -1
  162. package/dist/resource_types.cjs +4 -1
  163. package/dist/resource_types.cjs.map +1 -1
  164. package/dist/resource_types.d.ts +3 -0
  165. package/dist/resource_types.d.ts.map +1 -1
  166. package/dist/resource_types.js +4 -1
  167. package/dist/resource_types.js.map +1 -1
  168. package/dist/services/index.cjs +28 -6
  169. package/dist/services/index.d.ts +2 -1
  170. package/dist/services/index.js +7 -6
  171. package/dist/services/node_service_handlers.cjs.map +1 -1
  172. package/dist/services/node_service_handlers.d.ts.map +1 -1
  173. package/dist/services/node_service_handlers.js.map +1 -1
  174. package/dist/services/service_capabilities.cjs +4 -1
  175. package/dist/services/service_capabilities.cjs.map +1 -1
  176. package/dist/services/service_capabilities.d.ts.map +1 -1
  177. package/dist/services/service_capabilities.js +4 -1
  178. package/dist/services/service_capabilities.js.map +1 -1
  179. package/dist/services/service_declarations.cjs.map +1 -1
  180. package/dist/services/service_declarations.js.map +1 -1
  181. package/dist/services/service_injectors.cjs +1 -0
  182. package/dist/services/service_injectors.cjs.map +1 -1
  183. package/dist/services/service_injectors.d.ts +1 -1
  184. package/dist/services/service_injectors.d.ts.map +1 -1
  185. package/dist/services/service_injectors.js +1 -1
  186. package/dist/services/service_injectors.js.map +1 -1
  187. package/dist/services/service_registry.cjs.map +1 -1
  188. package/dist/services/service_registry.d.ts.map +1 -1
  189. package/dist/services/service_registry.js.map +1 -1
  190. package/dist/services/service_types.cjs.map +1 -1
  191. package/dist/services/service_types.d.ts.map +1 -1
  192. package/dist/services/service_types.js.map +1 -1
  193. package/dist/utag.d.ts.map +1 -1
  194. package/dist/util.cjs.map +1 -1
  195. package/dist/util.d.ts.map +1 -1
  196. package/dist/util.js.map +1 -1
  197. package/dist/value_or_error.cjs.map +1 -1
  198. package/dist/value_or_error.d.ts.map +1 -1
  199. package/dist/value_or_error.js.map +1 -1
  200. package/package.json +5 -5
  201. package/src/resource_types.ts +3 -0
  202. package/dist/drivers/pframe/driver.cjs +0 -6
  203. package/dist/drivers/pframe/driver.cjs.map +0 -1
  204. package/dist/drivers/pframe/driver.js +0 -6
  205. package/dist/drivers/pframe/driver.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"service_injectors.js","names":[],"sources":["../../src/services/service_injectors.ts"],"sourcesContent":["/**\n * Service dispatch glue — auto-derived types, method maps, and service info builder.\n *\n * The worker-side handler factory (createNodeServiceHandlers) lives in\n * node_service_handlers.ts — that's the only file to edit when adding a\n * new node service. Method-name registries for UI and model sides are\n * derived directly from the `uiMethods` / `modelMethods` declarations in\n * service_declarations.ts — no factory introspection, no stubs.\n */\n\nimport type { InferServiceKind, InferServiceUi, ServiceBrand, ServiceName } from \"./service_types\";\nimport type { DriverKit } from \"../driver_kit\";\nimport { Services } from \"./service_declarations\";\nimport { getServiceModelMethods, getServiceUiMethods } from \"./service_types\";\nimport { resolveRequiredServices } from \"./service_capabilities\";\nimport { createNodeServiceHandlers } from \"./node_service_handlers\";\n\nexport { createNodeServiceHandlers } from \"./node_service_handlers\";\n\ntype NodeServiceKeys = {\n [K in keyof typeof Services]: InferServiceKind<ServiceBrand<(typeof Services)[K]>> extends \"node\"\n ? K\n : never;\n}[keyof typeof Services];\n\n/**\n * Auto-derived map of node service keys to their UI-facing interfaces.\n * Fulfilled by real driver wrappers in the worker. Main services are\n * dispatched by the Electron main-process router and never reach this\n * map; wasm services are instantiated locally on each consumer.\n */\nexport type NodeServiceHandlerMap = {\n [K in NodeServiceKeys]: InferServiceUi<ServiceBrand<(typeof Services)[K]>>;\n};\n\nlet cachedKit: DriverKit | undefined;\nlet cachedHandlers: NodeServiceHandlerMap | undefined;\n\nfunction getOrCreateHandlers(driverKit: DriverKit): NodeServiceHandlerMap {\n if (!cachedHandlers || cachedKit !== driverKit) {\n cachedKit = driverKit;\n cachedHandlers = createNodeServiceHandlers(driverKit);\n }\n return cachedHandlers;\n}\n\n/**\n * Resolve the worker-side handler object for a given service ID. Caches\n * per DriverKit reference. Called from the worker's IPC dispatch path.\n */\nexport function resolveNodeServiceHandler(\n driverKit: DriverKit,\n serviceId: ServiceName,\n): NodeServiceHandlerMap[keyof NodeServiceHandlerMap] | null {\n const handlers = getOrCreateHandlers(driverKit);\n const key = Object.keys(Services).find(\n (k) => Services[k as keyof typeof Services] === serviceId,\n ) as NodeServiceKeys | undefined;\n if (!key) return null;\n return handlers[key];\n}\n\nfunction buildMethodMap(\n pick: (id: ServiceName) => readonly string[],\n): Readonly<Record<string, string[]>> {\n const result: Record<string, string[]> = {};\n for (const id of Object.values(Services)) {\n result[id as string] = [...pick(id)];\n }\n return result;\n}\n\n/**\n * UI-side method names per service. Drives ServiceProxy forwarder\n * construction in the renderer.\n */\nexport const SERVICE_METHOD_MAP: Readonly<Record<string, string[]>> =\n buildMethodMap(getServiceUiMethods);\n\n/**\n * Model-side method names per service. Drives the workflow VM bridge\n * (see pl-middle-layer js_render).\n */\nexport const MODEL_SERVICE_METHOD_MAP: Readonly<Record<string, string[]>> =\n buildMethodMap(getServiceModelMethods);\n\n/** Build service info for a block from its feature flags. */\nexport function buildServiceInfo(\n featureFlags: Record<string, unknown>,\n): Record<ServiceName, string[]> {\n const serviceIds = resolveRequiredServices(featureFlags);\n return Object.fromEntries(\n serviceIds.map((id) => [id, SERVICE_METHOD_MAP[id as string] ?? []]),\n ) as Record<ServiceName, string[]>;\n}\n"],"mappings":";;;;;AAmCA,IAAI;AACJ,IAAI;AAEJ,SAAS,oBAAoB,WAA6C;AACxE,KAAI,CAAC,kBAAkB,cAAc,WAAW;AAC9C,cAAY;AACZ,mBAAiB,0BAA0B,UAAU;;AAEvD,QAAO;;;;;;AAOT,SAAgB,0BACd,WACA,WAC2D;CAC3D,MAAM,WAAW,oBAAoB,UAAU;CAC/C,MAAM,MAAM,OAAO,KAAK,SAAS,CAAC,MAC/B,MAAM,SAAS,OAAgC,UACjD;AACD,KAAI,CAAC,IAAK,QAAO;AACjB,QAAO,SAAS;;AAGlB,SAAS,eACP,MACoC;CACpC,MAAM,SAAmC,EAAE;AAC3C,MAAK,MAAM,MAAM,OAAO,OAAO,SAAS,CACtC,QAAO,MAAgB,CAAC,GAAG,KAAK,GAAG,CAAC;AAEtC,QAAO;;;;;;AAOT,MAAa,qBACX,eAAe,oBAAoB;;;;;AAMrC,MAAa,2BACX,eAAe,uBAAuB;;AAGxC,SAAgB,iBACd,cAC+B;CAC/B,MAAM,aAAa,wBAAwB,aAAa;AACxD,QAAO,OAAO,YACZ,WAAW,KAAK,OAAO,CAAC,IAAI,mBAAmB,OAAiB,EAAE,CAAC,CAAC,CACrE"}
1
+ {"version":3,"file":"service_injectors.js","names":[],"sources":["../../src/services/service_injectors.ts"],"sourcesContent":["/**\n * Service dispatch glue — auto-derived types, method maps, and service info builder.\n *\n * The worker-side handler factory (createNodeServiceHandlers) lives in\n * node_service_handlers.ts — that's the only file to edit when adding a\n * new node service. Method-name registries for UI and model sides are\n * derived directly from the `uiMethods` / `modelMethods` declarations in\n * service_declarations.ts — no factory introspection, no stubs.\n */\n\nimport type { InferServiceKind, InferServiceUi, ServiceBrand, ServiceName } from \"./service_types\";\nimport type { DriverKit } from \"../driver_kit\";\nimport { Services } from \"./service_declarations\";\nimport { getServiceModelMethods, getServiceUiMethods } from \"./service_types\";\nimport { resolveRequiredServices } from \"./service_capabilities\";\nimport { createNodeServiceHandlers } from \"./node_service_handlers\";\n\nexport { createNodeServiceHandlers } from \"./node_service_handlers\";\n\ntype NodeServiceKeys = {\n [K in keyof typeof Services]: InferServiceKind<ServiceBrand<(typeof Services)[K]>> extends \"node\"\n ? K\n : never;\n}[keyof typeof Services];\n\n/**\n * Auto-derived map of node service keys to their UI-facing interfaces.\n * Fulfilled by real driver wrappers in the worker. Main services are\n * dispatched by the Electron main-process router and never reach this\n * map; wasm services are instantiated locally on each consumer.\n */\nexport type NodeServiceHandlerMap = {\n [K in NodeServiceKeys]: InferServiceUi<ServiceBrand<(typeof Services)[K]>>;\n};\n\nlet cachedKit: DriverKit | undefined;\nlet cachedHandlers: NodeServiceHandlerMap | undefined;\n\nfunction getOrCreateHandlers(driverKit: DriverKit): NodeServiceHandlerMap {\n if (!cachedHandlers || cachedKit !== driverKit) {\n cachedKit = driverKit;\n cachedHandlers = createNodeServiceHandlers(driverKit);\n }\n return cachedHandlers;\n}\n\n/**\n * Resolve the worker-side handler object for a given service ID. Caches\n * per DriverKit reference. Called from the worker's IPC dispatch path.\n */\nexport function resolveNodeServiceHandler(\n driverKit: DriverKit,\n serviceId: ServiceName,\n): NodeServiceHandlerMap[keyof NodeServiceHandlerMap] | null {\n const handlers = getOrCreateHandlers(driverKit);\n const key = Object.keys(Services).find(\n (k) => Services[k as keyof typeof Services] === serviceId,\n ) as NodeServiceKeys | undefined;\n if (!key) return null;\n return handlers[key];\n}\n\nfunction buildMethodMap(\n pick: (id: ServiceName) => readonly string[],\n): Readonly<Record<string, string[]>> {\n const result: Record<string, string[]> = {};\n for (const id of Object.values(Services)) {\n result[id as string] = [...pick(id)];\n }\n return result;\n}\n\n/**\n * UI-side method names per service. Drives ServiceProxy forwarder\n * construction in the renderer.\n */\nexport const SERVICE_METHOD_MAP: Readonly<Record<string, string[]>> =\n buildMethodMap(getServiceUiMethods);\n\n/**\n * Model-side method names per service. Drives the workflow VM bridge\n * (see pl-middle-layer js_render).\n */\nexport const MODEL_SERVICE_METHOD_MAP: Readonly<Record<string, string[]>> =\n buildMethodMap(getServiceModelMethods);\n\n/** Build service info for a block from its feature flags. */\nexport function buildServiceInfo(\n featureFlags: Record<string, unknown>,\n): Record<ServiceName, string[]> {\n const serviceIds = resolveRequiredServices(featureFlags);\n return Object.fromEntries(\n serviceIds.map((id) => [id, SERVICE_METHOD_MAP[id as string] ?? []]),\n ) as Record<ServiceName, string[]>;\n}\n"],"mappings":";;;;;AAmCA,IAAI;AACJ,IAAI;AAEJ,SAAS,oBAAoB,WAA6C;CACxE,IAAI,CAAC,kBAAkB,cAAc,WAAW;EAC9C,YAAY;EACZ,iBAAiB,0BAA0B,SAAS;CACtD;CACA,OAAO;AACT;;;;;AAMA,SAAgB,0BACd,WACA,WAC2D;CAC3D,MAAM,WAAW,oBAAoB,SAAS;CAC9C,MAAM,MAAM,OAAO,KAAK,QAAQ,CAAC,CAAC,MAC/B,MAAM,SAAS,OAAgC,SAClD;CACA,IAAI,CAAC,KAAK,OAAO;CACjB,OAAO,SAAS;AAClB;AAEA,SAAS,eACP,MACoC;CACpC,MAAM,SAAmC,CAAC;CAC1C,KAAK,MAAM,MAAM,OAAO,OAAO,QAAQ,GACrC,OAAO,MAAgB,CAAC,GAAG,KAAK,EAAE,CAAC;CAErC,OAAO;AACT;;;;;AAMA,MAAa,qBACX,eAAe,mBAAmB;;;;;AAMpC,MAAa,2BACX,eAAe,sBAAsB;;AAGvC,SAAgB,iBACd,cAC+B;CAC/B,MAAM,aAAa,wBAAwB,YAAY;CACvD,OAAO,OAAO,YACZ,WAAW,KAAK,OAAO,CAAC,IAAI,mBAAmB,OAAiB,CAAC,CAAC,CAAC,CACrE;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"service_registry.cjs","names":["ServiceNotRegisteredError"],"sources":["../../src/services/service_registry.ts"],"sourcesContent":["import type {\n ServiceTypesLike,\n InferServiceModel,\n InferServiceUi,\n ServiceName,\n ModelServiceFactoryMap,\n UiServiceFactoryMap,\n} from \"./service_types\";\nimport { ServiceNotRegisteredError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\ntype RegistryName = \"ModelServiceRegistry\" | \"UiServiceRegistry\";\ntype ServiceFactory = () => Record<string, Function>;\n\nclass ServiceRegistryBase {\n private readonly registryName: RegistryName;\n private readonly knownServices = new Set<ServiceName>();\n private readonly factories = new Map<ServiceName, ServiceFactory>();\n private readonly instances = new Map<ServiceName, Record<string, Function>>();\n\n protected constructor(\n registryName: RegistryName,\n serviceMap: Record<string, ServiceName>,\n factories: Record<string, (() => unknown) | null>,\n ) {\n this.registryName = registryName;\n for (const [key, factory] of Object.entries(factories)) {\n const serviceId = serviceMap[key];\n this.knownServices.add(serviceId);\n if (factory !== null) {\n this.factories.set(serviceId, factory as ServiceFactory);\n }\n }\n }\n\n async dispose(): Promise<void> {\n for (const instance of this.instances.values()) {\n if (Symbol.asyncDispose in instance) {\n await (instance as AsyncDisposable)[Symbol.asyncDispose]();\n } else if (Symbol.dispose in instance) {\n (instance as Disposable)[Symbol.dispose]();\n }\n }\n this.instances.clear();\n }\n\n protected getById(serviceId: ServiceName): Record<string, Function> | null {\n if (!this.knownServices.has(serviceId)) {\n throw new ServiceNotRegisteredError(\n `Service \"${serviceId}\" is not registered in ${this.registryName}. Add it to the factory map.`,\n );\n }\n if (this.instances.has(serviceId)) return this.instances.get(serviceId)!;\n\n const factory = this.factories.get(serviceId);\n if (!factory) return null;\n\n const instance = factory();\n this.instances.set(serviceId, instance);\n return instance;\n }\n}\n\nexport class ModelServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: ModelServiceFactoryMap<SMap>) {\n super(\"ModelServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ):\n | ([unknown] extends [InferServiceModel<S>] ? Record<string, Function> : InferServiceModel<S>)\n | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n\nexport class UiServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: UiServiceFactoryMap<SMap>) {\n super(\"UiServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ): ([unknown] extends [InferServiceUi<S>] ? Record<string, Function> : InferServiceUi<S>) | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n"],"mappings":";;AAcA,IAAM,sBAAN,MAA0B;CACxB;CACA,gCAAiC,IAAI,KAAkB;CACvD,4BAA6B,IAAI,KAAkC;CACnE,4BAA6B,IAAI,KAA4C;CAE7E,YACE,cACA,YACA,WACA;AACA,OAAK,eAAe;AACpB,OAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,UAAU,EAAE;GACtD,MAAM,YAAY,WAAW;AAC7B,QAAK,cAAc,IAAI,UAAU;AACjC,OAAI,YAAY,KACd,MAAK,UAAU,IAAI,WAAW,QAA0B;;;CAK9D,MAAM,UAAyB;AAC7B,OAAK,MAAM,YAAY,KAAK,UAAU,QAAQ,CAC5C,KAAI,OAAO,gBAAgB,SACzB,OAAO,SAA6B,OAAO,eAAe;WACjD,OAAO,WAAW,SAC1B,UAAwB,OAAO,UAAU;AAG9C,OAAK,UAAU,OAAO;;CAGxB,QAAkB,WAAyD;AACzE,MAAI,CAAC,KAAK,cAAc,IAAI,UAAU,CACpC,OAAM,IAAIA,eAAAA,0BACR,YAAY,UAAU,yBAAyB,KAAK,aAAa,8BAClE;AAEH,MAAI,KAAK,UAAU,IAAI,UAAU,CAAE,QAAO,KAAK,UAAU,IAAI,UAAU;EAEvE,MAAM,UAAU,KAAK,UAAU,IAAI,UAAU;AAC7C,MAAI,CAAC,QAAS,QAAO;EAErB,MAAM,WAAW,SAAS;AAC1B,OAAK,UAAU,IAAI,WAAW,SAAS;AACvC,SAAO;;;AAIX,IAAa,uBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAyC;AACrE,QAAM,wBAAwB,YAAY,UAAU;;CAQtD,IAAI,IAAkD;AACpD,SAAO,KAAK,QAAQ,GAAG;;;AAI3B,IAAa,oBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAsC;AAClE,QAAM,qBAAqB,YAAY,UAAU;;CAMnD,IAAI,IAAkD;AACpD,SAAO,KAAK,QAAQ,GAAG"}
1
+ {"version":3,"file":"service_registry.cjs","names":["ServiceNotRegisteredError"],"sources":["../../src/services/service_registry.ts"],"sourcesContent":["import type {\n ServiceTypesLike,\n InferServiceModel,\n InferServiceUi,\n ServiceName,\n ModelServiceFactoryMap,\n UiServiceFactoryMap,\n} from \"./service_types\";\nimport { ServiceNotRegisteredError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\ntype RegistryName = \"ModelServiceRegistry\" | \"UiServiceRegistry\";\ntype ServiceFactory = () => Record<string, Function>;\n\nclass ServiceRegistryBase {\n private readonly registryName: RegistryName;\n private readonly knownServices = new Set<ServiceName>();\n private readonly factories = new Map<ServiceName, ServiceFactory>();\n private readonly instances = new Map<ServiceName, Record<string, Function>>();\n\n protected constructor(\n registryName: RegistryName,\n serviceMap: Record<string, ServiceName>,\n factories: Record<string, (() => unknown) | null>,\n ) {\n this.registryName = registryName;\n for (const [key, factory] of Object.entries(factories)) {\n const serviceId = serviceMap[key];\n this.knownServices.add(serviceId);\n if (factory !== null) {\n this.factories.set(serviceId, factory as ServiceFactory);\n }\n }\n }\n\n async dispose(): Promise<void> {\n for (const instance of this.instances.values()) {\n if (Symbol.asyncDispose in instance) {\n await (instance as AsyncDisposable)[Symbol.asyncDispose]();\n } else if (Symbol.dispose in instance) {\n (instance as Disposable)[Symbol.dispose]();\n }\n }\n this.instances.clear();\n }\n\n protected getById(serviceId: ServiceName): Record<string, Function> | null {\n if (!this.knownServices.has(serviceId)) {\n throw new ServiceNotRegisteredError(\n `Service \"${serviceId}\" is not registered in ${this.registryName}. Add it to the factory map.`,\n );\n }\n if (this.instances.has(serviceId)) return this.instances.get(serviceId)!;\n\n const factory = this.factories.get(serviceId);\n if (!factory) return null;\n\n const instance = factory();\n this.instances.set(serviceId, instance);\n return instance;\n }\n}\n\nexport class ModelServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: ModelServiceFactoryMap<SMap>) {\n super(\"ModelServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ):\n | ([unknown] extends [InferServiceModel<S>] ? Record<string, Function> : InferServiceModel<S>)\n | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n\nexport class UiServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: UiServiceFactoryMap<SMap>) {\n super(\"UiServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ): ([unknown] extends [InferServiceUi<S>] ? Record<string, Function> : InferServiceUi<S>) | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n"],"mappings":";;AAcA,IAAM,sBAAN,MAA0B;CACxB;CACA,gCAAiC,IAAI,IAAiB;CACtD,4BAA6B,IAAI,IAAiC;CAClE,4BAA6B,IAAI,IAA2C;CAE5E,YACE,cACA,YACA,WACA;EACA,KAAK,eAAe;EACpB,KAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,SAAS,GAAG;GACtD,MAAM,YAAY,WAAW;GAC7B,KAAK,cAAc,IAAI,SAAS;GAChC,IAAI,YAAY,MACd,KAAK,UAAU,IAAI,WAAW,OAAyB;EAE3D;CACF;CAEA,MAAM,UAAyB;EAC7B,KAAK,MAAM,YAAY,KAAK,UAAU,OAAO,GAC3C,IAAI,OAAO,gBAAgB,UACzB,MAAO,SAA6B,OAAO,aAAa,CAAC;OACpD,IAAI,OAAO,WAAW,UAC3B,SAAyB,OAAO,QAAQ,CAAC;EAG7C,KAAK,UAAU,MAAM;CACvB;CAEA,QAAkB,WAAyD;EACzE,IAAI,CAAC,KAAK,cAAc,IAAI,SAAS,GACnC,MAAM,IAAIA,eAAAA,0BACR,YAAY,UAAU,yBAAyB,KAAK,aAAa,6BACnE;EAEF,IAAI,KAAK,UAAU,IAAI,SAAS,GAAG,OAAO,KAAK,UAAU,IAAI,SAAS;EAEtE,MAAM,UAAU,KAAK,UAAU,IAAI,SAAS;EAC5C,IAAI,CAAC,SAAS,OAAO;EAErB,MAAM,WAAW,QAAQ;EACzB,KAAK,UAAU,IAAI,WAAW,QAAQ;EACtC,OAAO;CACT;AACF;AAEA,IAAa,uBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAyC;EACrE,MAAM,wBAAwB,YAAY,SAAS;CACrD;CAOA,IAAI,IAAkD;EACpD,OAAO,KAAK,QAAQ,EAAE;CACxB;AACF;AAEA,IAAa,oBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAsC;EAClE,MAAM,qBAAqB,YAAY,SAAS;CAClD;CAKA,IAAI,IAAkD;EACpD,OAAO,KAAK,QAAQ,EAAE;CACxB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"service_registry.d.ts","names":[],"sources":["../../src/services/service_registry.ts"],"mappings":";;;;KAWK,YAAA;AAAA,cAGC,mBAAA;EAAA,iBACa,YAAA;EAAA,iBACA,aAAA;EAAA,iBACA,SAAA;EAAA,iBACA,SAAA;EAAA,UAER,WAAA,CACP,YAAA,EAAc,YAAA,EACd,UAAA,EAAY,MAAA,SAAe,WAAA,GAC3B,SAAA,EAAW,MAAA;EAYP,OAAA,CAAA,GAAW,OAAA;EAAA,UAWP,OAAA,CAAQ,SAAA,EAAW,WAAA,GAAc,MAAA,SAAe,QAAA;AAAA;AAAA,cAiB/C,oBAAA,cACE,MAAA,SAAe,WAAA,WAAsB,QAAA,UAC1C,mBAAA;cACI,UAAA,EAAY,IAAA,EAAM,SAAA,EAAW,sBAAA,CAAuB,IAAA;EAIhE,GAAA,WAAc,gBAAA,CAAA,CACZ,EAAA,EAAI,WAAA,CAAY,CAAA,wBAEM,iBAAA,CAAkB,CAAA,KAAM,MAAA,SAAe,QAAA,IAAY,iBAAA,CAAkB,CAAA;AAAA;AAAA,cAOlF,iBAAA,cACE,MAAA,SAAe,WAAA,WAAsB,QAAA,UAC1C,mBAAA;cACI,UAAA,EAAY,IAAA,EAAM,SAAA,EAAW,mBAAA,CAAoB,IAAA;EAI7D,GAAA,WAAc,gBAAA,CAAA,CACZ,EAAA,EAAI,WAAA,CAAY,CAAA,wBACK,cAAA,CAAe,CAAA,KAAM,MAAA,SAAe,QAAA,IAAY,cAAA,CAAe,CAAA;AAAA"}
1
+ {"version":3,"file":"service_registry.d.ts","names":[],"sources":["../../src/services/service_registry.ts"],"mappings":";;;;KAWK,YAAA;AAAA,cAGC,mBAAA;EAAA,iBACa,YAAA;EAAA,iBACA,aAAA;EAAA,iBACA,SAAA;EAAA,iBACA,SAAA;EAAA,UAER,WAAA,CACP,YAAA,EAAc,YAAA,EACd,UAAA,EAAY,MAAA,SAAe,WAAA,GAC3B,SAAA,EAAW,MAAA;EAYP,OAAA,IAAW,OAAA;EAAA,UAWP,OAAA,CAAQ,SAAA,EAAW,WAAA,GAAc,MAAA,SAAe,QAAA;AAAA;AAAA,cAiB/C,oBAAA,cACE,MAAA,SAAe,WAAA,WAAsB,QAAA,UAC1C,mBAAA;cACI,UAAA,EAAY,IAAA,EAAM,SAAA,EAAW,sBAAA,CAAuB,IAAA;EAIhE,GAAA,WAAc,gBAAA,EACZ,EAAA,EAAI,WAAA,CAAY,CAAA,wBAEM,iBAAA,CAAkB,CAAA,KAAM,MAAA,SAAe,QAAA,IAAY,iBAAA,CAAkB,CAAA;AAAA;AAAA,cAOlF,iBAAA,cACE,MAAA,SAAe,WAAA,WAAsB,QAAA,UAC1C,mBAAA;cACI,UAAA,EAAY,IAAA,EAAM,SAAA,EAAW,mBAAA,CAAoB,IAAA;EAI7D,GAAA,WAAc,gBAAA,EACZ,EAAA,EAAI,WAAA,CAAY,CAAA,wBACK,cAAA,CAAe,CAAA,KAAM,MAAA,SAAe,QAAA,IAAY,cAAA,CAAe,CAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"service_registry.js","names":[],"sources":["../../src/services/service_registry.ts"],"sourcesContent":["import type {\n ServiceTypesLike,\n InferServiceModel,\n InferServiceUi,\n ServiceName,\n ModelServiceFactoryMap,\n UiServiceFactoryMap,\n} from \"./service_types\";\nimport { ServiceNotRegisteredError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\ntype RegistryName = \"ModelServiceRegistry\" | \"UiServiceRegistry\";\ntype ServiceFactory = () => Record<string, Function>;\n\nclass ServiceRegistryBase {\n private readonly registryName: RegistryName;\n private readonly knownServices = new Set<ServiceName>();\n private readonly factories = new Map<ServiceName, ServiceFactory>();\n private readonly instances = new Map<ServiceName, Record<string, Function>>();\n\n protected constructor(\n registryName: RegistryName,\n serviceMap: Record<string, ServiceName>,\n factories: Record<string, (() => unknown) | null>,\n ) {\n this.registryName = registryName;\n for (const [key, factory] of Object.entries(factories)) {\n const serviceId = serviceMap[key];\n this.knownServices.add(serviceId);\n if (factory !== null) {\n this.factories.set(serviceId, factory as ServiceFactory);\n }\n }\n }\n\n async dispose(): Promise<void> {\n for (const instance of this.instances.values()) {\n if (Symbol.asyncDispose in instance) {\n await (instance as AsyncDisposable)[Symbol.asyncDispose]();\n } else if (Symbol.dispose in instance) {\n (instance as Disposable)[Symbol.dispose]();\n }\n }\n this.instances.clear();\n }\n\n protected getById(serviceId: ServiceName): Record<string, Function> | null {\n if (!this.knownServices.has(serviceId)) {\n throw new ServiceNotRegisteredError(\n `Service \"${serviceId}\" is not registered in ${this.registryName}. Add it to the factory map.`,\n );\n }\n if (this.instances.has(serviceId)) return this.instances.get(serviceId)!;\n\n const factory = this.factories.get(serviceId);\n if (!factory) return null;\n\n const instance = factory();\n this.instances.set(serviceId, instance);\n return instance;\n }\n}\n\nexport class ModelServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: ModelServiceFactoryMap<SMap>) {\n super(\"ModelServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ):\n | ([unknown] extends [InferServiceModel<S>] ? Record<string, Function> : InferServiceModel<S>)\n | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n\nexport class UiServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: UiServiceFactoryMap<SMap>) {\n super(\"UiServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ): ([unknown] extends [InferServiceUi<S>] ? Record<string, Function> : InferServiceUi<S>) | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n"],"mappings":";;AAcA,IAAM,sBAAN,MAA0B;CACxB;CACA,gCAAiC,IAAI,KAAkB;CACvD,4BAA6B,IAAI,KAAkC;CACnE,4BAA6B,IAAI,KAA4C;CAE7E,YACE,cACA,YACA,WACA;AACA,OAAK,eAAe;AACpB,OAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,UAAU,EAAE;GACtD,MAAM,YAAY,WAAW;AAC7B,QAAK,cAAc,IAAI,UAAU;AACjC,OAAI,YAAY,KACd,MAAK,UAAU,IAAI,WAAW,QAA0B;;;CAK9D,MAAM,UAAyB;AAC7B,OAAK,MAAM,YAAY,KAAK,UAAU,QAAQ,CAC5C,KAAI,OAAO,gBAAgB,SACzB,OAAO,SAA6B,OAAO,eAAe;WACjD,OAAO,WAAW,SAC1B,UAAwB,OAAO,UAAU;AAG9C,OAAK,UAAU,OAAO;;CAGxB,QAAkB,WAAyD;AACzE,MAAI,CAAC,KAAK,cAAc,IAAI,UAAU,CACpC,OAAM,IAAI,0BACR,YAAY,UAAU,yBAAyB,KAAK,aAAa,8BAClE;AAEH,MAAI,KAAK,UAAU,IAAI,UAAU,CAAE,QAAO,KAAK,UAAU,IAAI,UAAU;EAEvE,MAAM,UAAU,KAAK,UAAU,IAAI,UAAU;AAC7C,MAAI,CAAC,QAAS,QAAO;EAErB,MAAM,WAAW,SAAS;AAC1B,OAAK,UAAU,IAAI,WAAW,SAAS;AACvC,SAAO;;;AAIX,IAAa,uBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAyC;AACrE,QAAM,wBAAwB,YAAY,UAAU;;CAQtD,IAAI,IAAkD;AACpD,SAAO,KAAK,QAAQ,GAAG;;;AAI3B,IAAa,oBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAsC;AAClE,QAAM,qBAAqB,YAAY,UAAU;;CAMnD,IAAI,IAAkD;AACpD,SAAO,KAAK,QAAQ,GAAG"}
1
+ {"version":3,"file":"service_registry.js","names":[],"sources":["../../src/services/service_registry.ts"],"sourcesContent":["import type {\n ServiceTypesLike,\n InferServiceModel,\n InferServiceUi,\n ServiceName,\n ModelServiceFactoryMap,\n UiServiceFactoryMap,\n} from \"./service_types\";\nimport { ServiceNotRegisteredError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\ntype RegistryName = \"ModelServiceRegistry\" | \"UiServiceRegistry\";\ntype ServiceFactory = () => Record<string, Function>;\n\nclass ServiceRegistryBase {\n private readonly registryName: RegistryName;\n private readonly knownServices = new Set<ServiceName>();\n private readonly factories = new Map<ServiceName, ServiceFactory>();\n private readonly instances = new Map<ServiceName, Record<string, Function>>();\n\n protected constructor(\n registryName: RegistryName,\n serviceMap: Record<string, ServiceName>,\n factories: Record<string, (() => unknown) | null>,\n ) {\n this.registryName = registryName;\n for (const [key, factory] of Object.entries(factories)) {\n const serviceId = serviceMap[key];\n this.knownServices.add(serviceId);\n if (factory !== null) {\n this.factories.set(serviceId, factory as ServiceFactory);\n }\n }\n }\n\n async dispose(): Promise<void> {\n for (const instance of this.instances.values()) {\n if (Symbol.asyncDispose in instance) {\n await (instance as AsyncDisposable)[Symbol.asyncDispose]();\n } else if (Symbol.dispose in instance) {\n (instance as Disposable)[Symbol.dispose]();\n }\n }\n this.instances.clear();\n }\n\n protected getById(serviceId: ServiceName): Record<string, Function> | null {\n if (!this.knownServices.has(serviceId)) {\n throw new ServiceNotRegisteredError(\n `Service \"${serviceId}\" is not registered in ${this.registryName}. Add it to the factory map.`,\n );\n }\n if (this.instances.has(serviceId)) return this.instances.get(serviceId)!;\n\n const factory = this.factories.get(serviceId);\n if (!factory) return null;\n\n const instance = factory();\n this.instances.set(serviceId, instance);\n return instance;\n }\n}\n\nexport class ModelServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: ModelServiceFactoryMap<SMap>) {\n super(\"ModelServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ):\n | ([unknown] extends [InferServiceModel<S>] ? Record<string, Function> : InferServiceModel<S>)\n | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n\nexport class UiServiceRegistry<\n SMap extends Record<string, ServiceName> = typeof Services,\n> extends ServiceRegistryBase {\n constructor(serviceMap: SMap, factories: UiServiceFactoryMap<SMap>) {\n super(\"UiServiceRegistry\", serviceMap, factories);\n }\n\n get<S extends ServiceTypesLike>(\n id: ServiceName<S>,\n ): ([unknown] extends [InferServiceUi<S>] ? Record<string, Function> : InferServiceUi<S>) | null;\n get(id: ServiceName): Record<string, Function> | null {\n return this.getById(id);\n }\n}\n"],"mappings":";;AAcA,IAAM,sBAAN,MAA0B;CACxB;CACA,gCAAiC,IAAI,IAAiB;CACtD,4BAA6B,IAAI,IAAiC;CAClE,4BAA6B,IAAI,IAA2C;CAE5E,YACE,cACA,YACA,WACA;EACA,KAAK,eAAe;EACpB,KAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,SAAS,GAAG;GACtD,MAAM,YAAY,WAAW;GAC7B,KAAK,cAAc,IAAI,SAAS;GAChC,IAAI,YAAY,MACd,KAAK,UAAU,IAAI,WAAW,OAAyB;EAE3D;CACF;CAEA,MAAM,UAAyB;EAC7B,KAAK,MAAM,YAAY,KAAK,UAAU,OAAO,GAC3C,IAAI,OAAO,gBAAgB,UACzB,MAAO,SAA6B,OAAO,aAAa,CAAC;OACpD,IAAI,OAAO,WAAW,UAC3B,SAAyB,OAAO,QAAQ,CAAC;EAG7C,KAAK,UAAU,MAAM;CACvB;CAEA,QAAkB,WAAyD;EACzE,IAAI,CAAC,KAAK,cAAc,IAAI,SAAS,GACnC,MAAM,IAAI,0BACR,YAAY,UAAU,yBAAyB,KAAK,aAAa,6BACnE;EAEF,IAAI,KAAK,UAAU,IAAI,SAAS,GAAG,OAAO,KAAK,UAAU,IAAI,SAAS;EAEtE,MAAM,UAAU,KAAK,UAAU,IAAI,SAAS;EAC5C,IAAI,CAAC,SAAS,OAAO;EAErB,MAAM,WAAW,QAAQ;EACzB,KAAK,UAAU,IAAI,WAAW,QAAQ;EACtC,OAAO;CACT;AACF;AAEA,IAAa,uBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAyC;EACrE,MAAM,wBAAwB,YAAY,SAAS;CACrD;CAOA,IAAI,IAAkD;EACpD,OAAO,KAAK,QAAQ,EAAE;CACxB;AACF;AAEA,IAAa,oBAAb,cAEU,oBAAoB;CAC5B,YAAY,YAAkB,WAAsC;EAClE,MAAM,qBAAqB,YAAY,SAAS;CAClD;CAKA,IAAI,IAAkD;EACpD,OAAO,KAAK,QAAQ,EAAE;CACxB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"service_types.cjs","names":["ServiceInvalidIdError","ServiceAlreadyRegisteredError"],"sources":["../../src/services/service_types.ts"],"sourcesContent":["import { UnionToIntersection } from \"@milaboratories/helpers\";\nimport type { Branded } from \"../branding\";\nimport { ServiceAlreadyRegisteredError, ServiceInvalidIdError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\nexport type ServiceTypesLike<\n Model = unknown,\n Ui = unknown,\n Kind extends ServiceType = ServiceType,\n> = {\n readonly __types?: { model: Model; ui: Ui; kind: Kind };\n};\n\nexport type InferServiceModel<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<infer M, unknown, ServiceType> ? M : unknown;\n\nexport type InferServiceUi<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<unknown, infer U, ServiceType> ? U : unknown;\n\nexport type InferServiceKind<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<unknown, unknown, infer K> ? K : ServiceType;\n\nexport type ServiceName<S extends ServiceTypesLike = ServiceTypesLike> = Branded<string, S>;\n\nexport type ServiceType = \"node\" | \"wasm\" | \"main\";\n\nconst SERVICE_ID_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*$/;\n\nexport const {\n service,\n isNodeService,\n isWasmService,\n isMainService,\n getServiceKind,\n getServiceModelMethods,\n getServiceUiMethods,\n} = (() => {\n const typeMap = new Map<string, ServiceType>();\n const modelMethodsMap = new Map<string, readonly string[]>();\n const uiMethodsMap = new Map<string, readonly string[]>();\n return {\n service<Model, Ui>() {\n return <\n K extends ServiceType,\n N extends string,\n MM extends readonly (keyof Model & string)[],\n UM extends readonly (keyof Ui & string)[],\n >(options: {\n readonly type: K;\n readonly name: N;\n readonly modelMethods: MM;\n readonly uiMethods: UM;\n }): Branded<N, ServiceTypesLike<Model, Ui, K>> => {\n const { name, type, modelMethods, uiMethods } = options;\n if (!SERVICE_ID_PATTERN.test(name)) {\n throw new ServiceInvalidIdError(\n `Invalid service ID \"${name}\": must match ${SERVICE_ID_PATTERN}`,\n );\n }\n if (typeMap.has(name)) {\n throw new ServiceAlreadyRegisteredError(`Service \"${name}\" already registered`);\n }\n typeMap.set(name, type);\n modelMethodsMap.set(name, modelMethods);\n uiMethodsMap.set(name, uiMethods);\n return name as Branded<N, ServiceTypesLike<Model, Ui, K>>;\n };\n },\n isNodeService(id: ServiceName): boolean {\n return typeMap.get(id) === \"node\";\n },\n isWasmService(id: ServiceName): boolean {\n return typeMap.get(id) === \"wasm\";\n },\n isMainService(id: ServiceName): boolean {\n return typeMap.get(id) === \"main\";\n },\n getServiceKind(id: ServiceName): ServiceType | undefined {\n return typeMap.get(id);\n },\n getServiceModelMethods(id: ServiceName): readonly string[] {\n return modelMethodsMap.get(id) ?? [];\n },\n getServiceUiMethods(id: ServiceName): readonly string[] {\n return uiMethodsMap.get(id) ?? [];\n },\n };\n})();\n\nexport function serviceFnKey(serviceId: string, method = \"\"): string {\n return `service:${serviceId}:${method}`;\n}\n\nexport type ServiceBrand<T> =\n T extends Branded<string, infer S extends ServiceTypesLike> ? S : never;\n\nexport type ModelServiceFactoryMap<SMap extends Record<string, ServiceName>> = {\n [K in keyof SMap]: (() => InferServiceModel<ServiceBrand<SMap[K]>>) | null;\n};\n\nexport type UiServiceFactoryMap<SMap extends Record<string, ServiceName>> = {\n [K in keyof SMap]: (() => InferServiceUi<ServiceBrand<SMap[K]>>) | null;\n};\n\n/** Contract between any service provider and any service consumer. */\nexport interface ServiceDispatch {\n getServiceNames(): ServiceName[];\n getServiceMethods(serviceId: ServiceName): string[];\n callServiceMethod(serviceId: ServiceName, method: string, ...args: unknown[]): unknown;\n}\n\n// Auto-derived types from the Services const in service_declarations.ts.\n// Adding a service to Services automatically updates all of these.\n\ntype TServices = typeof Services;\n\ntype ExtractServiceName<T> = T extends Branded<infer N extends string, any> ? N : never;\n\n/** Model-side service interfaces keyed by service name literal. */\nexport type ModelServices = {\n [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceModel<\n ServiceBrand<TServices[K]>\n >;\n};\n\n/** UI-side service interfaces keyed by service name literal. */\nexport type UiServices = {\n [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceUi<\n ServiceBrand<TServices[K]>\n >;\n};\n\n/** Map from Services keys to their unbranded string name literals. */\nexport type ServiceNameLiterals = {\n [K in keyof TServices]: ExtractServiceName<TServices[K]>;\n};\n\n/** Auto-derived requires* feature flags from Services keys. */\nexport type ServiceRequireFlags = {\n [K in keyof TServices as `requires${K & string}`]?: boolean;\n};\n\nexport type RequireServices<T extends ServiceName> = UnionToIntersection<\n T extends Branded<infer N extends string, infer S extends ServiceTypesLike>\n ? Record<N, InferServiceModel<S>>\n : never\n>;\n"],"mappings":";;AA0BA,MAAM,qBAAqB;AAE3B,MAAa,EACX,SACA,eACA,eACA,eACA,gBACA,wBACA,+BACS;CACT,MAAM,0BAAU,IAAI,KAA0B;CAC9C,MAAM,kCAAkB,IAAI,KAAgC;CAC5D,MAAM,+BAAe,IAAI,KAAgC;AACzD,QAAO;EACL,UAAqB;AACnB,WAKE,YAKgD;IAChD,MAAM,EAAE,MAAM,MAAM,cAAc,cAAc;AAChD,QAAI,CAAC,mBAAmB,KAAK,KAAK,CAChC,OAAM,IAAIA,eAAAA,sBACR,uBAAuB,KAAK,gBAAgB,qBAC7C;AAEH,QAAI,QAAQ,IAAI,KAAK,CACnB,OAAM,IAAIC,eAAAA,8BAA8B,YAAY,KAAK,sBAAsB;AAEjF,YAAQ,IAAI,MAAM,KAAK;AACvB,oBAAgB,IAAI,MAAM,aAAa;AACvC,iBAAa,IAAI,MAAM,UAAU;AACjC,WAAO;;;EAGX,cAAc,IAA0B;AACtC,UAAO,QAAQ,IAAI,GAAG,KAAK;;EAE7B,cAAc,IAA0B;AACtC,UAAO,QAAQ,IAAI,GAAG,KAAK;;EAE7B,cAAc,IAA0B;AACtC,UAAO,QAAQ,IAAI,GAAG,KAAK;;EAE7B,eAAe,IAA0C;AACvD,UAAO,QAAQ,IAAI,GAAG;;EAExB,uBAAuB,IAAoC;AACzD,UAAO,gBAAgB,IAAI,GAAG,IAAI,EAAE;;EAEtC,oBAAoB,IAAoC;AACtD,UAAO,aAAa,IAAI,GAAG,IAAI,EAAE;;EAEpC;IACC;AAEJ,SAAgB,aAAa,WAAmB,SAAS,IAAY;AACnE,QAAO,WAAW,UAAU,GAAG"}
1
+ {"version":3,"file":"service_types.cjs","names":["ServiceInvalidIdError","ServiceAlreadyRegisteredError"],"sources":["../../src/services/service_types.ts"],"sourcesContent":["import { UnionToIntersection } from \"@milaboratories/helpers\";\nimport type { Branded } from \"../branding\";\nimport { ServiceAlreadyRegisteredError, ServiceInvalidIdError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\nexport type ServiceTypesLike<\n Model = unknown,\n Ui = unknown,\n Kind extends ServiceType = ServiceType,\n> = {\n readonly __types?: { model: Model; ui: Ui; kind: Kind };\n};\n\nexport type InferServiceModel<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<infer M, unknown, ServiceType> ? M : unknown;\n\nexport type InferServiceUi<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<unknown, infer U, ServiceType> ? U : unknown;\n\nexport type InferServiceKind<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<unknown, unknown, infer K> ? K : ServiceType;\n\nexport type ServiceName<S extends ServiceTypesLike = ServiceTypesLike> = Branded<string, S>;\n\nexport type ServiceType = \"node\" | \"wasm\" | \"main\";\n\nconst SERVICE_ID_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*$/;\n\nexport const {\n service,\n isNodeService,\n isWasmService,\n isMainService,\n getServiceKind,\n getServiceModelMethods,\n getServiceUiMethods,\n} = (() => {\n const typeMap = new Map<string, ServiceType>();\n const modelMethodsMap = new Map<string, readonly string[]>();\n const uiMethodsMap = new Map<string, readonly string[]>();\n return {\n service<Model, Ui>() {\n return <\n K extends ServiceType,\n N extends string,\n MM extends readonly (keyof Model & string)[],\n UM extends readonly (keyof Ui & string)[],\n >(options: {\n readonly type: K;\n readonly name: N;\n readonly modelMethods: MM;\n readonly uiMethods: UM;\n }): Branded<N, ServiceTypesLike<Model, Ui, K>> => {\n const { name, type, modelMethods, uiMethods } = options;\n if (!SERVICE_ID_PATTERN.test(name)) {\n throw new ServiceInvalidIdError(\n `Invalid service ID \"${name}\": must match ${SERVICE_ID_PATTERN}`,\n );\n }\n if (typeMap.has(name)) {\n throw new ServiceAlreadyRegisteredError(`Service \"${name}\" already registered`);\n }\n typeMap.set(name, type);\n modelMethodsMap.set(name, modelMethods);\n uiMethodsMap.set(name, uiMethods);\n return name as Branded<N, ServiceTypesLike<Model, Ui, K>>;\n };\n },\n isNodeService(id: ServiceName): boolean {\n return typeMap.get(id) === \"node\";\n },\n isWasmService(id: ServiceName): boolean {\n return typeMap.get(id) === \"wasm\";\n },\n isMainService(id: ServiceName): boolean {\n return typeMap.get(id) === \"main\";\n },\n getServiceKind(id: ServiceName): ServiceType | undefined {\n return typeMap.get(id);\n },\n getServiceModelMethods(id: ServiceName): readonly string[] {\n return modelMethodsMap.get(id) ?? [];\n },\n getServiceUiMethods(id: ServiceName): readonly string[] {\n return uiMethodsMap.get(id) ?? [];\n },\n };\n})();\n\nexport function serviceFnKey(serviceId: string, method = \"\"): string {\n return `service:${serviceId}:${method}`;\n}\n\nexport type ServiceBrand<T> =\n T extends Branded<string, infer S extends ServiceTypesLike> ? S : never;\n\nexport type ModelServiceFactoryMap<SMap extends Record<string, ServiceName>> = {\n [K in keyof SMap]: (() => InferServiceModel<ServiceBrand<SMap[K]>>) | null;\n};\n\nexport type UiServiceFactoryMap<SMap extends Record<string, ServiceName>> = {\n [K in keyof SMap]: (() => InferServiceUi<ServiceBrand<SMap[K]>>) | null;\n};\n\n/** Contract between any service provider and any service consumer. */\nexport interface ServiceDispatch {\n getServiceNames(): ServiceName[];\n getServiceMethods(serviceId: ServiceName): string[];\n callServiceMethod(serviceId: ServiceName, method: string, ...args: unknown[]): unknown;\n}\n\n// Auto-derived types from the Services const in service_declarations.ts.\n// Adding a service to Services automatically updates all of these.\n\ntype TServices = typeof Services;\n\ntype ExtractServiceName<T> = T extends Branded<infer N extends string, any> ? N : never;\n\n/** Model-side service interfaces keyed by service name literal. */\nexport type ModelServices = {\n [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceModel<\n ServiceBrand<TServices[K]>\n >;\n};\n\n/** UI-side service interfaces keyed by service name literal. */\nexport type UiServices = {\n [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceUi<\n ServiceBrand<TServices[K]>\n >;\n};\n\n/** Map from Services keys to their unbranded string name literals. */\nexport type ServiceNameLiterals = {\n [K in keyof TServices]: ExtractServiceName<TServices[K]>;\n};\n\n/** Auto-derived requires* feature flags from Services keys. */\nexport type ServiceRequireFlags = {\n [K in keyof TServices as `requires${K & string}`]?: boolean;\n};\n\nexport type RequireServices<T extends ServiceName> = UnionToIntersection<\n T extends Branded<infer N extends string, infer S extends ServiceTypesLike>\n ? Record<N, InferServiceModel<S>>\n : never\n>;\n"],"mappings":";;AA0BA,MAAM,qBAAqB;AAE3B,MAAa,EACX,SACA,eACA,eACA,eACA,gBACA,wBACA,+BACS;CACT,MAAM,0BAAU,IAAI,IAAyB;CAC7C,MAAM,kCAAkB,IAAI,IAA+B;CAC3D,MAAM,+BAAe,IAAI,IAA+B;CACxD,OAAO;EACL,UAAqB;GACnB,QAKE,YAKgD;IAChD,MAAM,EAAE,MAAM,MAAM,cAAc,cAAc;IAChD,IAAI,CAAC,mBAAmB,KAAK,IAAI,GAC/B,MAAM,IAAIA,eAAAA,sBACR,uBAAuB,KAAK,gBAAgB,oBAC9C;IAEF,IAAI,QAAQ,IAAI,IAAI,GAClB,MAAM,IAAIC,eAAAA,8BAA8B,YAAY,KAAK,qBAAqB;IAEhF,QAAQ,IAAI,MAAM,IAAI;IACtB,gBAAgB,IAAI,MAAM,YAAY;IACtC,aAAa,IAAI,MAAM,SAAS;IAChC,OAAO;GACT;EACF;EACA,cAAc,IAA0B;GACtC,OAAO,QAAQ,IAAI,EAAE,MAAM;EAC7B;EACA,cAAc,IAA0B;GACtC,OAAO,QAAQ,IAAI,EAAE,MAAM;EAC7B;EACA,cAAc,IAA0B;GACtC,OAAO,QAAQ,IAAI,EAAE,MAAM;EAC7B;EACA,eAAe,IAA0C;GACvD,OAAO,QAAQ,IAAI,EAAE;EACvB;EACA,uBAAuB,IAAoC;GACzD,OAAO,gBAAgB,IAAI,EAAE,KAAK,CAAC;EACrC;EACA,oBAAoB,IAAoC;GACtD,OAAO,aAAa,IAAI,EAAE,KAAK,CAAC;EAClC;CACF;AACF,EAAA,CAAG;AAEH,SAAgB,aAAa,WAAmB,SAAS,IAAY;CACnE,OAAO,WAAW,UAAU,GAAG;AACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"service_types.d.ts","names":[],"sources":["../../src/services/service_types.ts"],"mappings":";;;;;KAKY,gBAAA,6CAGG,WAAA,GAAc,WAAA;EAAA,SAElB,OAAA;IAAY,KAAA,EAAO,KAAA;IAAO,EAAA,EAAI,EAAA;IAAI,IAAA,EAAM,IAAA;EAAA;AAAA;AAAA,KAGvC,iBAAA,WAA4B,gBAAA,IACtC,CAAA,SAAU,gBAAA,mBAAmC,WAAA,IAAe,CAAA;AAAA,KAElD,cAAA,WAAyB,gBAAA,IACnC,CAAA,SAAU,gBAAA,mBAAmC,WAAA,IAAe,CAAA;AAAA,KAElD,gBAAA,WAA2B,gBAAA,IACrC,CAAA,SAAU,gBAAA,8BAA8C,CAAA,GAAI,WAAA;AAAA,KAElD,WAAA,WAAsB,gBAAA,GAAmB,gBAAA,IAAoB,SAAA,SAAgB,CAAA;AAAA,KAE7E,WAAA;AAAA,cAKV,OAAA,8BAcgB,WAAA,+CAEiB,KAAA,yCACA,EAAA,cAAc,OAAA;IAAA,SAEhC,IAAA,EAAM,CAAA;IAAA,SACN,IAAA,EAAM,CAAA;IAAA,SACN,YAAA,EAAc,EAAA;IAAA,SACd,SAAA,EAAW,EAAA;EAAA,MAClB,SAAA,CAAQ,CAAA,EAAG,gBAAA,CAAiB,KAAA,EAAO,EAAA,EAAI,CAAA,IAAA,aAAA,GAtBlC,EAAA,EAsCO,WAAA,cAAA,aAAA,GArCP,EAAA,EAwCO,WAAA,cAAA,aAAA,GAvCP,EAAA,EA0CO,WAAA,cAAA,cAAA,GAzCN,EAAA,EA4CO,WAAA,KAAc,WAAA,cAAA,sBAAA,GA3Cb,EAAA,EA8CO,WAAA,wBAAA,mBAAA,GA7CV,EAAA,EAgDO,WAAA;AAAA,iBAMZ,YAAA,CAAa,SAAA,UAAmB,MAAA;AAAA,KAIpC,YAAA,MACV,CAAA,SAAU,SAAA,yBAAgC,gBAAA,IAAoB,CAAA;AAAA,KAEpD,sBAAA,cAAoC,MAAA,SAAe,WAAA,mBACjD,IAAA,UAAc,iBAAA,CAAkB,YAAA,CAAa,IAAA,CAAK,CAAA;AAAA,KAGpD,mBAAA,cAAiC,MAAA,SAAe,WAAA,mBAC9C,IAAA,UAAc,cAAA,CAAe,YAAA,CAAa,IAAA,CAAK,CAAA;AAxF7D;AAAA,UA4FiB,eAAA;EACf,eAAA,IAAmB,WAAA;EACnB,iBAAA,CAAkB,SAAA,EAAW,WAAA;EAC7B,iBAAA,CAAkB,SAAA,EAAW,WAAA,EAAa,MAAA,aAAmB,IAAA;AAAA;AAAA,KAM1D,SAAA,UAAmB,QAAA;AAAA,KAEnB,kBAAA,MAAwB,CAAA,SAAU,SAAA,gCAAuC,CAAA;;KAGlE,aAAA,iBACE,SAAA,IAAa,kBAAA,CAAmB,SAAA,CAAU,CAAA,KAAM,iBAAA,CAC1D,YAAA,CAAa,SAAA,CAAU,CAAA;;KAKf,UAAA,iBACE,SAAA,IAAa,kBAAA,CAAmB,SAAA,CAAU,CAAA,KAAM,cAAA,CAC1D,YAAA,CAAa,SAAA,CAAU,CAAA;;KAKf,mBAAA,iBACE,SAAA,GAAY,kBAAA,CAAmB,SAAA,CAAU,CAAA;;KAI3C,mBAAA,iBACE,SAAA,eAAwB,CAAA;AAAA,KAG1B,eAAA,WAA0B,WAAA,IAAe,mBAAA,CACnD,CAAA,SAAU,SAAA,yCAAgD,gBAAA,IACtD,MAAA,CAAO,CAAA,EAAG,iBAAA,CAAkB,CAAA"}
1
+ {"version":3,"file":"service_types.d.ts","names":[],"sources":["../../src/services/service_types.ts"],"mappings":";;;;;KAKY,gBAAA,6CAGG,WAAA,GAAc,WAAA;EAAA,SAElB,OAAA;IAAY,KAAA,EAAO,KAAA;IAAO,EAAA,EAAI,EAAA;IAAI,IAAA,EAAM,IAAA;EAAA;AAAA;AAAA,KAGvC,iBAAA,WAA4B,gBAAA,IACtC,CAAA,SAAU,gBAAA,mBAAmC,WAAA,IAAe,CAAA;AAAA,KAElD,cAAA,WAAyB,gBAAA,IACnC,CAAA,SAAU,gBAAA,mBAAmC,WAAA,IAAe,CAAA;AAAA,KAElD,gBAAA,WAA2B,gBAAA,IACrC,CAAA,SAAU,gBAAA,8BAA8C,CAAA,GAAI,WAAA;AAAA,KAElD,WAAA,WAAsB,gBAAA,GAAmB,gBAAA,IAAoB,SAAA,SAAgB,CAAA;AAAA,KAE7E,WAAA;AAAA,cAKV,OAAA,8BAcgB,WAAA,+CAEiB,KAAA,yCACA,EAAA,cAAc,OAAA;IAAA,SAEhC,IAAA,EAAM,CAAA;IAAA,SACN,IAAA,EAAM,CAAA;IAAA,SACN,YAAA,EAAc,EAAA;IAAA,SACd,SAAA,EAAW,EAAA;EAAA,MAClB,SAAA,CAAQ,CAAA,EAAG,gBAAA,CAAiB,KAAA,EAAO,EAAA,EAAI,CAAA,oBAtBlC,EAAA,EAsCO,WAAA,8BArCP,EAAA,EAwCO,WAAA,8BAvCP,EAAA,EA0CO,WAAA,+BAzCN,EAAA,EA4CO,WAAA,KAAc,WAAA,uCA3Cb,EAAA,EA8CO,WAAA,8CA7CV,EAAA,EAgDO,WAAA;AAAA,iBAMZ,YAAA,CAAa,SAAA,UAAmB,MAAW;AAAA,KAI/C,YAAA,MACV,CAAA,SAAU,SAAA,yBAAgC,gBAAA,IAAoB,CAAA;AAAA,KAEpD,sBAAA,cAAoC,MAAA,SAAe,WAAA,mBACjD,IAAA,UAAc,iBAAA,CAAkB,YAAA,CAAa,IAAA,CAAK,CAAA;AAAA,KAGpD,mBAAA,cAAiC,MAAA,SAAe,WAAA,mBAC9C,IAAA,UAAc,cAAA,CAAe,YAAA,CAAa,IAAA,CAAK,CAAA;AAxF7D;AAAA,UA4FiB,eAAA;EACf,eAAA,IAAmB,WAAA;EACnB,iBAAA,CAAkB,SAAA,EAAW,WAAA;EAC7B,iBAAA,CAAkB,SAAA,EAAW,WAAA,EAAa,MAAA,aAAmB,IAAA;AAAA;AAAA,KAM1D,SAAA,UAAmB,QAAQ;AAAA,KAE3B,kBAAA,MAAwB,CAAA,SAAU,SAAO,gCAAgC,CAAA;;KAGlE,aAAA,iBACE,SAAA,IAAa,kBAAA,CAAmB,SAAA,CAAU,CAAA,KAAM,iBAAA,CAC1D,YAAA,CAAa,SAAA,CAAU,CAAA;;KAKf,UAAA,iBACE,SAAA,IAAa,kBAAA,CAAmB,SAAA,CAAU,CAAA,KAAM,cAAA,CAC1D,YAAA,CAAa,SAAA,CAAU,CAAA;;KAKf,mBAAA,iBACE,SAAA,GAAY,kBAAA,CAAmB,SAAA,CAAU,CAAA;;KAI3C,mBAAA,iBACE,SAAA,eAAwB,CAAC;AAAA,KAG3B,eAAA,WAA0B,WAAA,IAAe,mBAAA,CACnD,CAAA,SAAU,SAAA,yCAAgD,gBAAA,IACtD,MAAA,CAAO,CAAA,EAAG,iBAAA,CAAkB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"service_types.js","names":[],"sources":["../../src/services/service_types.ts"],"sourcesContent":["import { UnionToIntersection } from \"@milaboratories/helpers\";\nimport type { Branded } from \"../branding\";\nimport { ServiceAlreadyRegisteredError, ServiceInvalidIdError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\nexport type ServiceTypesLike<\n Model = unknown,\n Ui = unknown,\n Kind extends ServiceType = ServiceType,\n> = {\n readonly __types?: { model: Model; ui: Ui; kind: Kind };\n};\n\nexport type InferServiceModel<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<infer M, unknown, ServiceType> ? M : unknown;\n\nexport type InferServiceUi<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<unknown, infer U, ServiceType> ? U : unknown;\n\nexport type InferServiceKind<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<unknown, unknown, infer K> ? K : ServiceType;\n\nexport type ServiceName<S extends ServiceTypesLike = ServiceTypesLike> = Branded<string, S>;\n\nexport type ServiceType = \"node\" | \"wasm\" | \"main\";\n\nconst SERVICE_ID_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*$/;\n\nexport const {\n service,\n isNodeService,\n isWasmService,\n isMainService,\n getServiceKind,\n getServiceModelMethods,\n getServiceUiMethods,\n} = (() => {\n const typeMap = new Map<string, ServiceType>();\n const modelMethodsMap = new Map<string, readonly string[]>();\n const uiMethodsMap = new Map<string, readonly string[]>();\n return {\n service<Model, Ui>() {\n return <\n K extends ServiceType,\n N extends string,\n MM extends readonly (keyof Model & string)[],\n UM extends readonly (keyof Ui & string)[],\n >(options: {\n readonly type: K;\n readonly name: N;\n readonly modelMethods: MM;\n readonly uiMethods: UM;\n }): Branded<N, ServiceTypesLike<Model, Ui, K>> => {\n const { name, type, modelMethods, uiMethods } = options;\n if (!SERVICE_ID_PATTERN.test(name)) {\n throw new ServiceInvalidIdError(\n `Invalid service ID \"${name}\": must match ${SERVICE_ID_PATTERN}`,\n );\n }\n if (typeMap.has(name)) {\n throw new ServiceAlreadyRegisteredError(`Service \"${name}\" already registered`);\n }\n typeMap.set(name, type);\n modelMethodsMap.set(name, modelMethods);\n uiMethodsMap.set(name, uiMethods);\n return name as Branded<N, ServiceTypesLike<Model, Ui, K>>;\n };\n },\n isNodeService(id: ServiceName): boolean {\n return typeMap.get(id) === \"node\";\n },\n isWasmService(id: ServiceName): boolean {\n return typeMap.get(id) === \"wasm\";\n },\n isMainService(id: ServiceName): boolean {\n return typeMap.get(id) === \"main\";\n },\n getServiceKind(id: ServiceName): ServiceType | undefined {\n return typeMap.get(id);\n },\n getServiceModelMethods(id: ServiceName): readonly string[] {\n return modelMethodsMap.get(id) ?? [];\n },\n getServiceUiMethods(id: ServiceName): readonly string[] {\n return uiMethodsMap.get(id) ?? [];\n },\n };\n})();\n\nexport function serviceFnKey(serviceId: string, method = \"\"): string {\n return `service:${serviceId}:${method}`;\n}\n\nexport type ServiceBrand<T> =\n T extends Branded<string, infer S extends ServiceTypesLike> ? S : never;\n\nexport type ModelServiceFactoryMap<SMap extends Record<string, ServiceName>> = {\n [K in keyof SMap]: (() => InferServiceModel<ServiceBrand<SMap[K]>>) | null;\n};\n\nexport type UiServiceFactoryMap<SMap extends Record<string, ServiceName>> = {\n [K in keyof SMap]: (() => InferServiceUi<ServiceBrand<SMap[K]>>) | null;\n};\n\n/** Contract between any service provider and any service consumer. */\nexport interface ServiceDispatch {\n getServiceNames(): ServiceName[];\n getServiceMethods(serviceId: ServiceName): string[];\n callServiceMethod(serviceId: ServiceName, method: string, ...args: unknown[]): unknown;\n}\n\n// Auto-derived types from the Services const in service_declarations.ts.\n// Adding a service to Services automatically updates all of these.\n\ntype TServices = typeof Services;\n\ntype ExtractServiceName<T> = T extends Branded<infer N extends string, any> ? N : never;\n\n/** Model-side service interfaces keyed by service name literal. */\nexport type ModelServices = {\n [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceModel<\n ServiceBrand<TServices[K]>\n >;\n};\n\n/** UI-side service interfaces keyed by service name literal. */\nexport type UiServices = {\n [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceUi<\n ServiceBrand<TServices[K]>\n >;\n};\n\n/** Map from Services keys to their unbranded string name literals. */\nexport type ServiceNameLiterals = {\n [K in keyof TServices]: ExtractServiceName<TServices[K]>;\n};\n\n/** Auto-derived requires* feature flags from Services keys. */\nexport type ServiceRequireFlags = {\n [K in keyof TServices as `requires${K & string}`]?: boolean;\n};\n\nexport type RequireServices<T extends ServiceName> = UnionToIntersection<\n T extends Branded<infer N extends string, infer S extends ServiceTypesLike>\n ? Record<N, InferServiceModel<S>>\n : never\n>;\n"],"mappings":";;AA0BA,MAAM,qBAAqB;AAE3B,MAAa,EACX,SACA,eACA,eACA,eACA,gBACA,wBACA,+BACS;CACT,MAAM,0BAAU,IAAI,KAA0B;CAC9C,MAAM,kCAAkB,IAAI,KAAgC;CAC5D,MAAM,+BAAe,IAAI,KAAgC;AACzD,QAAO;EACL,UAAqB;AACnB,WAKE,YAKgD;IAChD,MAAM,EAAE,MAAM,MAAM,cAAc,cAAc;AAChD,QAAI,CAAC,mBAAmB,KAAK,KAAK,CAChC,OAAM,IAAI,sBACR,uBAAuB,KAAK,gBAAgB,qBAC7C;AAEH,QAAI,QAAQ,IAAI,KAAK,CACnB,OAAM,IAAI,8BAA8B,YAAY,KAAK,sBAAsB;AAEjF,YAAQ,IAAI,MAAM,KAAK;AACvB,oBAAgB,IAAI,MAAM,aAAa;AACvC,iBAAa,IAAI,MAAM,UAAU;AACjC,WAAO;;;EAGX,cAAc,IAA0B;AACtC,UAAO,QAAQ,IAAI,GAAG,KAAK;;EAE7B,cAAc,IAA0B;AACtC,UAAO,QAAQ,IAAI,GAAG,KAAK;;EAE7B,cAAc,IAA0B;AACtC,UAAO,QAAQ,IAAI,GAAG,KAAK;;EAE7B,eAAe,IAA0C;AACvD,UAAO,QAAQ,IAAI,GAAG;;EAExB,uBAAuB,IAAoC;AACzD,UAAO,gBAAgB,IAAI,GAAG,IAAI,EAAE;;EAEtC,oBAAoB,IAAoC;AACtD,UAAO,aAAa,IAAI,GAAG,IAAI,EAAE;;EAEpC;IACC;AAEJ,SAAgB,aAAa,WAAmB,SAAS,IAAY;AACnE,QAAO,WAAW,UAAU,GAAG"}
1
+ {"version":3,"file":"service_types.js","names":[],"sources":["../../src/services/service_types.ts"],"sourcesContent":["import { UnionToIntersection } from \"@milaboratories/helpers\";\nimport type { Branded } from \"../branding\";\nimport { ServiceAlreadyRegisteredError, ServiceInvalidIdError } from \"../errors\";\nimport type { Services } from \"./service_declarations\";\n\nexport type ServiceTypesLike<\n Model = unknown,\n Ui = unknown,\n Kind extends ServiceType = ServiceType,\n> = {\n readonly __types?: { model: Model; ui: Ui; kind: Kind };\n};\n\nexport type InferServiceModel<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<infer M, unknown, ServiceType> ? M : unknown;\n\nexport type InferServiceUi<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<unknown, infer U, ServiceType> ? U : unknown;\n\nexport type InferServiceKind<S extends ServiceTypesLike> =\n S extends ServiceTypesLike<unknown, unknown, infer K> ? K : ServiceType;\n\nexport type ServiceName<S extends ServiceTypesLike = ServiceTypesLike> = Branded<string, S>;\n\nexport type ServiceType = \"node\" | \"wasm\" | \"main\";\n\nconst SERVICE_ID_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*$/;\n\nexport const {\n service,\n isNodeService,\n isWasmService,\n isMainService,\n getServiceKind,\n getServiceModelMethods,\n getServiceUiMethods,\n} = (() => {\n const typeMap = new Map<string, ServiceType>();\n const modelMethodsMap = new Map<string, readonly string[]>();\n const uiMethodsMap = new Map<string, readonly string[]>();\n return {\n service<Model, Ui>() {\n return <\n K extends ServiceType,\n N extends string,\n MM extends readonly (keyof Model & string)[],\n UM extends readonly (keyof Ui & string)[],\n >(options: {\n readonly type: K;\n readonly name: N;\n readonly modelMethods: MM;\n readonly uiMethods: UM;\n }): Branded<N, ServiceTypesLike<Model, Ui, K>> => {\n const { name, type, modelMethods, uiMethods } = options;\n if (!SERVICE_ID_PATTERN.test(name)) {\n throw new ServiceInvalidIdError(\n `Invalid service ID \"${name}\": must match ${SERVICE_ID_PATTERN}`,\n );\n }\n if (typeMap.has(name)) {\n throw new ServiceAlreadyRegisteredError(`Service \"${name}\" already registered`);\n }\n typeMap.set(name, type);\n modelMethodsMap.set(name, modelMethods);\n uiMethodsMap.set(name, uiMethods);\n return name as Branded<N, ServiceTypesLike<Model, Ui, K>>;\n };\n },\n isNodeService(id: ServiceName): boolean {\n return typeMap.get(id) === \"node\";\n },\n isWasmService(id: ServiceName): boolean {\n return typeMap.get(id) === \"wasm\";\n },\n isMainService(id: ServiceName): boolean {\n return typeMap.get(id) === \"main\";\n },\n getServiceKind(id: ServiceName): ServiceType | undefined {\n return typeMap.get(id);\n },\n getServiceModelMethods(id: ServiceName): readonly string[] {\n return modelMethodsMap.get(id) ?? [];\n },\n getServiceUiMethods(id: ServiceName): readonly string[] {\n return uiMethodsMap.get(id) ?? [];\n },\n };\n})();\n\nexport function serviceFnKey(serviceId: string, method = \"\"): string {\n return `service:${serviceId}:${method}`;\n}\n\nexport type ServiceBrand<T> =\n T extends Branded<string, infer S extends ServiceTypesLike> ? S : never;\n\nexport type ModelServiceFactoryMap<SMap extends Record<string, ServiceName>> = {\n [K in keyof SMap]: (() => InferServiceModel<ServiceBrand<SMap[K]>>) | null;\n};\n\nexport type UiServiceFactoryMap<SMap extends Record<string, ServiceName>> = {\n [K in keyof SMap]: (() => InferServiceUi<ServiceBrand<SMap[K]>>) | null;\n};\n\n/** Contract between any service provider and any service consumer. */\nexport interface ServiceDispatch {\n getServiceNames(): ServiceName[];\n getServiceMethods(serviceId: ServiceName): string[];\n callServiceMethod(serviceId: ServiceName, method: string, ...args: unknown[]): unknown;\n}\n\n// Auto-derived types from the Services const in service_declarations.ts.\n// Adding a service to Services automatically updates all of these.\n\ntype TServices = typeof Services;\n\ntype ExtractServiceName<T> = T extends Branded<infer N extends string, any> ? N : never;\n\n/** Model-side service interfaces keyed by service name literal. */\nexport type ModelServices = {\n [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceModel<\n ServiceBrand<TServices[K]>\n >;\n};\n\n/** UI-side service interfaces keyed by service name literal. */\nexport type UiServices = {\n [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceUi<\n ServiceBrand<TServices[K]>\n >;\n};\n\n/** Map from Services keys to their unbranded string name literals. */\nexport type ServiceNameLiterals = {\n [K in keyof TServices]: ExtractServiceName<TServices[K]>;\n};\n\n/** Auto-derived requires* feature flags from Services keys. */\nexport type ServiceRequireFlags = {\n [K in keyof TServices as `requires${K & string}`]?: boolean;\n};\n\nexport type RequireServices<T extends ServiceName> = UnionToIntersection<\n T extends Branded<infer N extends string, infer S extends ServiceTypesLike>\n ? Record<N, InferServiceModel<S>>\n : never\n>;\n"],"mappings":";;AA0BA,MAAM,qBAAqB;AAE3B,MAAa,EACX,SACA,eACA,eACA,eACA,gBACA,wBACA,+BACS;CACT,MAAM,0BAAU,IAAI,IAAyB;CAC7C,MAAM,kCAAkB,IAAI,IAA+B;CAC3D,MAAM,+BAAe,IAAI,IAA+B;CACxD,OAAO;EACL,UAAqB;GACnB,QAKE,YAKgD;IAChD,MAAM,EAAE,MAAM,MAAM,cAAc,cAAc;IAChD,IAAI,CAAC,mBAAmB,KAAK,IAAI,GAC/B,MAAM,IAAI,sBACR,uBAAuB,KAAK,gBAAgB,oBAC9C;IAEF,IAAI,QAAQ,IAAI,IAAI,GAClB,MAAM,IAAI,8BAA8B,YAAY,KAAK,qBAAqB;IAEhF,QAAQ,IAAI,MAAM,IAAI;IACtB,gBAAgB,IAAI,MAAM,YAAY;IACtC,aAAa,IAAI,MAAM,SAAS;IAChC,OAAO;GACT;EACF;EACA,cAAc,IAA0B;GACtC,OAAO,QAAQ,IAAI,EAAE,MAAM;EAC7B;EACA,cAAc,IAA0B;GACtC,OAAO,QAAQ,IAAI,EAAE,MAAM;EAC7B;EACA,cAAc,IAA0B;GACtC,OAAO,QAAQ,IAAI,EAAE,MAAM;EAC7B;EACA,eAAe,IAA0C;GACvD,OAAO,QAAQ,IAAI,EAAE;EACvB;EACA,uBAAuB,IAAoC;GACzD,OAAO,gBAAgB,IAAI,EAAE,KAAK,CAAC;EACrC;EACA,oBAAoB,IAAoC;GACtD,OAAO,aAAa,IAAI,EAAE,KAAK,CAAC;EAClC;CACF;AACF,EAAA,CAAG;AAEH,SAAgB,aAAa,WAAmB,SAAS,IAAY;CACnE,OAAO,WAAW,UAAU,GAAG;AACjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utag.d.ts","names":[],"sources":["../src/utag.ts"],"mappings":";;;;UAGiB,aAAA;EAAA;EAAA,SAEN,KAAA,EAAO,CAAA;EAFY;;;;;;;EAAA,SAWnB,IAAA;AAAA;AAAA,UAGM,sBAAA,YAAkC,aAAA,CAAc,CAAA;EAAA,SACtD,MAAA,GAAS,YAAA;AAAA"}
1
+ {"version":3,"file":"utag.d.ts","names":[],"sources":["../src/utag.ts"],"mappings":";;;;UAGiB,aAAA;EAAA;EAAA,SAEN,KAAA,EAAO,CAAC;EAFW;;;;;;;EAAA,SAWnB,IAAA;AAAA;AAAA,UAGM,sBAAA,YAAkC,aAAA,CAAc,CAAA;EAAA,SACtD,MAAA,GAAS,YAAA;AAAA"}
package/dist/util.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.cjs","names":[],"sources":["../src/util.ts"],"sourcesContent":["export function assertNever(x: never): never {\n throw new Error(\"Unexpected object: \" + x); // This is ok, because this is a possible runtime error\n}\n\n/**\n * Return unique entries of the array by the provided id\n * For each id, the last entry is kept\n */\nexport function uniqueBy<T>(array: T[], makeId: (entry: T) => string): T[] {\n return [...new Map(array.map((e) => [makeId(e), e])).values()];\n}\n"],"mappings":";AAAA,SAAgB,YAAY,GAAiB;AAC3C,OAAM,IAAI,MAAM,wBAAwB,EAAE;;;;;;AAO5C,SAAgB,SAAY,OAAY,QAAmC;AACzE,QAAO,CAAC,GAAG,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC"}
1
+ {"version":3,"file":"util.cjs","names":[],"sources":["../src/util.ts"],"sourcesContent":["export function assertNever(x: never): never {\n throw new Error(\"Unexpected object: \" + x); // This is ok, because this is a possible runtime error\n}\n\n/**\n * Return unique entries of the array by the provided id\n * For each id, the last entry is kept\n */\nexport function uniqueBy<T>(array: T[], makeId: (entry: T) => string): T[] {\n return [...new Map(array.map((e) => [makeId(e), e])).values()];\n}\n"],"mappings":";AAAA,SAAgB,YAAY,GAAiB;CAC3C,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAC3C;;;;;AAMA,SAAgB,SAAY,OAAY,QAAmC;CACzE,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","names":[],"sources":["../src/util.ts"],"mappings":";iBAAgB,WAAA,CAAY,CAAA;AAA5B;;;;AAAA,iBAQgB,QAAA,GAAA,CAAY,KAAA,EAAO,CAAA,IAAK,MAAA,GAAS,KAAA,EAAO,CAAA,cAAe,CAAA"}
1
+ {"version":3,"file":"util.d.ts","names":[],"sources":["../src/util.ts"],"mappings":";iBAAgB,WAAA,CAAY,CAAQ;AAApC;;;;AAAA,iBAQgB,QAAA,IAAY,KAAA,EAAO,CAAA,IAAK,MAAA,GAAS,KAAA,EAAO,CAAA,cAAe,CAAA"}
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","names":[],"sources":["../src/util.ts"],"sourcesContent":["export function assertNever(x: never): never {\n throw new Error(\"Unexpected object: \" + x); // This is ok, because this is a possible runtime error\n}\n\n/**\n * Return unique entries of the array by the provided id\n * For each id, the last entry is kept\n */\nexport function uniqueBy<T>(array: T[], makeId: (entry: T) => string): T[] {\n return [...new Map(array.map((e) => [makeId(e), e])).values()];\n}\n"],"mappings":";AAAA,SAAgB,YAAY,GAAiB;AAC3C,OAAM,IAAI,MAAM,wBAAwB,EAAE;;;;;;AAO5C,SAAgB,SAAY,OAAY,QAAmC;AACzE,QAAO,CAAC,GAAG,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC"}
1
+ {"version":3,"file":"util.js","names":[],"sources":["../src/util.ts"],"sourcesContent":["export function assertNever(x: never): never {\n throw new Error(\"Unexpected object: \" + x); // This is ok, because this is a possible runtime error\n}\n\n/**\n * Return unique entries of the array by the provided id\n * For each id, the last entry is kept\n */\nexport function uniqueBy<T>(array: T[], makeId: (entry: T) => string): T[] {\n return [...new Map(array.map((e) => [makeId(e), e])).values()];\n}\n"],"mappings":";AAAA,SAAgB,YAAY,GAAiB;CAC3C,MAAM,IAAI,MAAM,wBAAwB,CAAC;AAC3C;;;;;AAMA,SAAgB,SAAY,OAAY,QAAmC;CACzE,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"value_or_error.cjs","names":[],"sources":["../src/value_or_error.ts"],"sourcesContent":["export type ValueOrError<V, E> =\n | {\n ok: true;\n value: V;\n }\n | {\n ok: false;\n error: E;\n };\n\nexport function mapValueInVOE<V1, V2, E>(\n voe: ValueOrError<V1, E>,\n cb: (value: V1) => V2,\n): ValueOrError<V2, E> {\n return voe.ok ? { ok: true, value: cb(voe.value) } : voe;\n}\n"],"mappings":";AAUA,SAAgB,cACd,KACA,IACqB;AACrB,QAAO,IAAI,KAAK;EAAE,IAAI;EAAM,OAAO,GAAG,IAAI,MAAM;EAAE,GAAG"}
1
+ {"version":3,"file":"value_or_error.cjs","names":[],"sources":["../src/value_or_error.ts"],"sourcesContent":["export type ValueOrError<V, E> =\n | {\n ok: true;\n value: V;\n }\n | {\n ok: false;\n error: E;\n };\n\nexport function mapValueInVOE<V1, V2, E>(\n voe: ValueOrError<V1, E>,\n cb: (value: V1) => V2,\n): ValueOrError<V2, E> {\n return voe.ok ? { ok: true, value: cb(voe.value) } : voe;\n}\n"],"mappings":";AAUA,SAAgB,cACd,KACA,IACqB;CACrB,OAAO,IAAI,KAAK;EAAE,IAAI;EAAM,OAAO,GAAG,IAAI,KAAK;CAAE,IAAI;AACvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"value_or_error.d.ts","names":[],"sources":["../src/value_or_error.ts"],"mappings":";KAAY,YAAA;EAEN,EAAA;EACA,KAAA,EAAO,CAAA;AAAA;EAGP,EAAA;EACA,KAAA,EAAO,CAAA;AAAA;AAAA,iBAGG,aAAA,WAAA,CACd,GAAA,EAAK,YAAA,CAAa,EAAA,EAAI,CAAA,GACtB,EAAA,GAAK,KAAA,EAAO,EAAA,KAAO,EAAA,GAClB,YAAA,CAAa,EAAA,EAAI,CAAA"}
1
+ {"version":3,"file":"value_or_error.d.ts","names":[],"sources":["../src/value_or_error.ts"],"mappings":";KAAY,YAAA;EAEN,EAAA;EACA,KAAA,EAAO,CAAA;AAAA;EAGP,EAAA;EACA,KAAA,EAAO,CAAC;AAAA;AAAA,iBAGE,aAAA,YACd,GAAA,EAAK,YAAA,CAAa,EAAA,EAAI,CAAA,GACtB,EAAA,GAAK,KAAA,EAAO,EAAA,KAAO,EAAA,GAClB,YAAA,CAAa,EAAA,EAAI,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"value_or_error.js","names":[],"sources":["../src/value_or_error.ts"],"sourcesContent":["export type ValueOrError<V, E> =\n | {\n ok: true;\n value: V;\n }\n | {\n ok: false;\n error: E;\n };\n\nexport function mapValueInVOE<V1, V2, E>(\n voe: ValueOrError<V1, E>,\n cb: (value: V1) => V2,\n): ValueOrError<V2, E> {\n return voe.ok ? { ok: true, value: cb(voe.value) } : voe;\n}\n"],"mappings":";AAUA,SAAgB,cACd,KACA,IACqB;AACrB,QAAO,IAAI,KAAK;EAAE,IAAI;EAAM,OAAO,GAAG,IAAI,MAAM;EAAE,GAAG"}
1
+ {"version":3,"file":"value_or_error.js","names":[],"sources":["../src/value_or_error.ts"],"sourcesContent":["export type ValueOrError<V, E> =\n | {\n ok: true;\n value: V;\n }\n | {\n ok: false;\n error: E;\n };\n\nexport function mapValueInVOE<V1, V2, E>(\n voe: ValueOrError<V1, E>,\n cb: (value: V1) => V2,\n): ValueOrError<V2, E> {\n return voe.ok ? { ok: true, value: cb(voe.value) } : voe;\n}\n"],"mappings":";AAUA,SAAgB,cACd,KACA,IACqB;CACrB,OAAO,IAAI,KAAK;EAAE,IAAI;EAAM,OAAO,GAAG,IAAI,KAAK;CAAE,IAAI;AACvD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-model-common",
3
- "version": "1.46.2",
3
+ "version": "1.46.4",
4
4
  "description": "Platforma SDK Model",
5
5
  "files": [
6
6
  "./dist/**/*",
@@ -19,16 +19,16 @@
19
19
  "dependencies": {
20
20
  "canonicalize": "~2.1.0",
21
21
  "zod": "~3.25.76",
22
- "@milaboratories/pl-error-like": "1.12.10",
23
- "@milaboratories/helpers": "1.14.2"
22
+ "@milaboratories/helpers": "1.14.3",
23
+ "@milaboratories/pl-error-like": "1.12.10"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@vitest/coverage-istanbul": "^4.1.3",
27
27
  "typescript": "~5.9.3",
28
28
  "vitest": "^4.1.3",
29
- "@milaboratories/ts-configs": "1.2.3",
29
+ "@milaboratories/ts-builder": "1.6.0",
30
30
  "@milaboratories/build-configs": "2.0.0",
31
- "@milaboratories/ts-builder": "1.5.2"
31
+ "@milaboratories/ts-configs": "1.3.0"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "ts-builder build --target node",
@@ -36,6 +36,9 @@ export const ResourceTypeName = {
36
36
  UserProject: "UserProject",
37
37
  Projects: "Projects",
38
38
  ClientRoot: "ClientRoot",
39
+ SharingOutbox: "SharingOutbox",
40
+ SharingState: "SharingState",
41
+ SharedEnvelope: "SharedEnvelope",
39
42
  } as const;
40
43
 
41
44
  /** Resource type name prefix constants. */
@@ -1,6 +0,0 @@
1
- //#region src/drivers/pframe/driver.ts
2
- function assert() {}
3
- assert();
4
- //#endregion
5
-
6
- //# sourceMappingURL=driver.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"driver.cjs","names":[],"sources":["../../../src/drivers/pframe/driver.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport type { PTable } from \"./table\";\nimport type { PFrame, PFrameDef } from \"./pframe\";\nimport type { PColumn } from \"./spec/spec\";\nimport type { PColumnValues, DataInfo } from \"./data_info\";\nimport type { PTableDef, PTableDefV2 } from \"./table_calculate\";\nimport type { AddParameterToAllMethods } from \"./type_util\";\nimport type {\n WritePTableToFsOptions,\n WritePTableToFsResult,\n ExportPTableOptions,\n PTableShape,\n PTableVector,\n TableRange,\n} from \"./data_types\";\nimport type { FindColumnsRequest, FindColumnsResponse } from \"./find_columns\";\nimport type { PObjectId } from \"../../pool\";\nimport type { PColumnIdAndSpec, PColumnSpec } from \"./spec/spec\";\nimport type { CalculateTableDataRequest, CalculateTableDataResponse } from \"./table_calculate\";\nimport type { UniqueValuesRequest, UniqueValuesResponse } from \"./unique_values\";\nimport type { PTableColumnSpec } from \"./table_common\";\n\n/** PFrame handle */\nexport type PFrameHandle = Branded<string, \"PFrame\">;\n\n/** PFrame handle */\nexport type PTableHandle = Branded<string, \"PTable\">;\n\n/** Model-side PFrame service — creates frames/tables from column definitions. */\nexport interface PFrameModelDriver<Col = PColumn<string | PColumnValues | DataInfo<string>>> {\n createPFrame(def: PFrameDef<Col>): PFrameHandle;\n createPTable(def: PTableDef<Col>): PTableHandle;\n createPTableV2(def: PTableDefV2<Col>): PTableHandle;\n}\n\n/** Allows to access main data layer features of platforma */\nexport interface PFrameDriver {\n //\n // PFrame methods\n //\n\n /**\n * Finds columns given filtering criteria on column name, annotations etc.\n * and a set of axes ids to find only columns with compatible specs.\n * */\n findColumns(handle: PFrameHandle, request: FindColumnsRequest): Promise<FindColumnsResponse>;\n\n /** Retrieve single column spec */\n getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec | null>;\n\n /** Retrieve information about all columns currently added to the PFrame */\n listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]>;\n\n /** Calculates data for the table and returns complete data representation of it */\n calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range?: TableRange,\n ): Promise<CalculateTableDataResponse>;\n\n /** Calculate set of unique values for a specific axis for the filtered set of records */\n getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n ): Promise<UniqueValuesResponse>;\n\n //\n // PTable methods\n //\n\n /** Unified table shape */\n getShape(handle: PTableHandle): Promise<PTableShape>;\n\n /**\n * Returns ordered array of table axes specs (primary key \"columns\" in SQL\n * terms) and data column specs (regular \"columns\" in SQL terms).\n *\n * Data for a specific table column can be retrieved using unified indexing\n * corresponding to elements in this array.\n *\n * Axes are always listed first.\n * */\n getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]>;\n\n /**\n * Retrieve the data from the table. To retrieve only data required, it can be\n * sliced both horizontally ({@link columnIndices}) and vertically\n * ({@link range}).\n *\n * @param columnIndices unified indices of columns to be retrieved\n * @param range optionally limit the range of records to retrieve\n * */\n getData(\n handle: PTableHandle,\n columnIndices: number[],\n range?: TableRange,\n ): Promise<PTableVector[]>;\n\n /**\n * Stream the table to a file at the given path. Caller is responsible\n * for producing the destination path (e.g. via the `Dialog` service).\n */\n writePTableToFs(\n handle: PTableHandle,\n options: WritePTableToFsOptions,\n ): Promise<WritePTableToFsResult>;\n\n /**\n * Export the table to a file. The output format is selected from the file\n * extension of `options.path` (`csv`, `tsv`, `parquet`, or `xlsx`).\n *\n * `options.columnIndices` selects the columns to export (output order). Column\n * headers are derived on the driver side from each field's label annotation\n * (falling back to its spec name), so the caller supplies only the path and\n * the columns.\n *\n * For `xlsx` the driver rejects tables whose row count would exceed the\n * 1,000,000-row per-sheet limit (below Excel's hard cap of 1,048,576).\n */\n exportPTable(handle: PTableHandle, options: ExportPTableOptions): Promise<void>;\n}\n\n//\n// The following keeps the PFrame driver from above to be in sync with\n// PFrame and PTable interfaces.\n//\n\ntype ExpectedPFrameDriverTypeF = AddParameterToAllMethods<PFrame, [handle: PFrameHandle]>;\ntype ExpectedPFrameDriverTypeT = AddParameterToAllMethods<PTable, [handle: PTableHandle]>;\ntype ExpectedPFrameDriverType = ExpectedPFrameDriverTypeF & ExpectedPFrameDriverTypeT;\n\ntype TypeEqualityGuard<A, B> = Exclude<A, B> | Exclude<B, A>;\nfunction assert<_T extends never>() {}\n\nassert<\n TypeEqualityGuard<\n Omit<PFrameDriver, \"writePTableToFs\" | \"exportPTable\">,\n ExpectedPFrameDriverType\n >\n>();\n"],"mappings":";AAoIA,SAAS,SAA2B;AAEpC,QAKG"}
@@ -1,6 +0,0 @@
1
- //#region src/drivers/pframe/driver.ts
2
- function assert() {}
3
- assert();
4
- //#endregion
5
-
6
- //# sourceMappingURL=driver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"driver.js","names":[],"sources":["../../../src/drivers/pframe/driver.ts"],"sourcesContent":["import type { Branded } from \"../../branding\";\nimport type { PTable } from \"./table\";\nimport type { PFrame, PFrameDef } from \"./pframe\";\nimport type { PColumn } from \"./spec/spec\";\nimport type { PColumnValues, DataInfo } from \"./data_info\";\nimport type { PTableDef, PTableDefV2 } from \"./table_calculate\";\nimport type { AddParameterToAllMethods } from \"./type_util\";\nimport type {\n WritePTableToFsOptions,\n WritePTableToFsResult,\n ExportPTableOptions,\n PTableShape,\n PTableVector,\n TableRange,\n} from \"./data_types\";\nimport type { FindColumnsRequest, FindColumnsResponse } from \"./find_columns\";\nimport type { PObjectId } from \"../../pool\";\nimport type { PColumnIdAndSpec, PColumnSpec } from \"./spec/spec\";\nimport type { CalculateTableDataRequest, CalculateTableDataResponse } from \"./table_calculate\";\nimport type { UniqueValuesRequest, UniqueValuesResponse } from \"./unique_values\";\nimport type { PTableColumnSpec } from \"./table_common\";\n\n/** PFrame handle */\nexport type PFrameHandle = Branded<string, \"PFrame\">;\n\n/** PFrame handle */\nexport type PTableHandle = Branded<string, \"PTable\">;\n\n/** Model-side PFrame service — creates frames/tables from column definitions. */\nexport interface PFrameModelDriver<Col = PColumn<string | PColumnValues | DataInfo<string>>> {\n createPFrame(def: PFrameDef<Col>): PFrameHandle;\n createPTable(def: PTableDef<Col>): PTableHandle;\n createPTableV2(def: PTableDefV2<Col>): PTableHandle;\n}\n\n/** Allows to access main data layer features of platforma */\nexport interface PFrameDriver {\n //\n // PFrame methods\n //\n\n /**\n * Finds columns given filtering criteria on column name, annotations etc.\n * and a set of axes ids to find only columns with compatible specs.\n * */\n findColumns(handle: PFrameHandle, request: FindColumnsRequest): Promise<FindColumnsResponse>;\n\n /** Retrieve single column spec */\n getColumnSpec(handle: PFrameHandle, columnId: PObjectId): Promise<PColumnSpec | null>;\n\n /** Retrieve information about all columns currently added to the PFrame */\n listColumns(handle: PFrameHandle): Promise<PColumnIdAndSpec[]>;\n\n /** Calculates data for the table and returns complete data representation of it */\n calculateTableData(\n handle: PFrameHandle,\n request: CalculateTableDataRequest<PObjectId>,\n range?: TableRange,\n ): Promise<CalculateTableDataResponse>;\n\n /** Calculate set of unique values for a specific axis for the filtered set of records */\n getUniqueValues(\n handle: PFrameHandle,\n request: UniqueValuesRequest,\n ): Promise<UniqueValuesResponse>;\n\n //\n // PTable methods\n //\n\n /** Unified table shape */\n getShape(handle: PTableHandle): Promise<PTableShape>;\n\n /**\n * Returns ordered array of table axes specs (primary key \"columns\" in SQL\n * terms) and data column specs (regular \"columns\" in SQL terms).\n *\n * Data for a specific table column can be retrieved using unified indexing\n * corresponding to elements in this array.\n *\n * Axes are always listed first.\n * */\n getSpec(handle: PTableHandle): Promise<PTableColumnSpec[]>;\n\n /**\n * Retrieve the data from the table. To retrieve only data required, it can be\n * sliced both horizontally ({@link columnIndices}) and vertically\n * ({@link range}).\n *\n * @param columnIndices unified indices of columns to be retrieved\n * @param range optionally limit the range of records to retrieve\n * */\n getData(\n handle: PTableHandle,\n columnIndices: number[],\n range?: TableRange,\n ): Promise<PTableVector[]>;\n\n /**\n * Stream the table to a file at the given path. Caller is responsible\n * for producing the destination path (e.g. via the `Dialog` service).\n */\n writePTableToFs(\n handle: PTableHandle,\n options: WritePTableToFsOptions,\n ): Promise<WritePTableToFsResult>;\n\n /**\n * Export the table to a file. The output format is selected from the file\n * extension of `options.path` (`csv`, `tsv`, `parquet`, or `xlsx`).\n *\n * `options.columnIndices` selects the columns to export (output order). Column\n * headers are derived on the driver side from each field's label annotation\n * (falling back to its spec name), so the caller supplies only the path and\n * the columns.\n *\n * For `xlsx` the driver rejects tables whose row count would exceed the\n * 1,000,000-row per-sheet limit (below Excel's hard cap of 1,048,576).\n */\n exportPTable(handle: PTableHandle, options: ExportPTableOptions): Promise<void>;\n}\n\n//\n// The following keeps the PFrame driver from above to be in sync with\n// PFrame and PTable interfaces.\n//\n\ntype ExpectedPFrameDriverTypeF = AddParameterToAllMethods<PFrame, [handle: PFrameHandle]>;\ntype ExpectedPFrameDriverTypeT = AddParameterToAllMethods<PTable, [handle: PTableHandle]>;\ntype ExpectedPFrameDriverType = ExpectedPFrameDriverTypeF & ExpectedPFrameDriverTypeT;\n\ntype TypeEqualityGuard<A, B> = Exclude<A, B> | Exclude<B, A>;\nfunction assert<_T extends never>() {}\n\nassert<\n TypeEqualityGuard<\n Omit<PFrameDriver, \"writePTableToFs\" | \"exportPTable\">,\n ExpectedPFrameDriverType\n >\n>();\n"],"mappings":";AAoIA,SAAS,SAA2B;AAEpC,QAKG"}