@milaboratories/pl-model-common 1.47.3 → 1.49.0

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 (242) hide show
  1. package/dist/author_marker.d.ts +1 -2
  2. package/dist/author_marker.d.ts.map +1 -1
  3. package/dist/base64.d.ts +4 -6
  4. package/dist/base64.d.ts.map +1 -1
  5. package/dist/block_state.d.ts +13 -9
  6. package/dist/block_state.d.ts.map +1 -1
  7. package/dist/bmodel/block_config.d.ts +51 -29
  8. package/dist/bmodel/block_config.d.ts.map +1 -1
  9. package/dist/bmodel/block_kind_ref.cjs +45 -0
  10. package/dist/bmodel/block_kind_ref.cjs.map +1 -0
  11. package/dist/bmodel/block_kind_ref.d.ts +55 -0
  12. package/dist/bmodel/block_kind_ref.d.ts.map +1 -0
  13. package/dist/bmodel/block_kind_ref.js +43 -0
  14. package/dist/bmodel/block_kind_ref.js.map +1 -0
  15. package/dist/bmodel/code.d.ts +4 -5
  16. package/dist/bmodel/code.d.ts.map +1 -1
  17. package/dist/bmodel/container.d.ts +13 -5
  18. package/dist/bmodel/container.d.ts.map +1 -1
  19. package/dist/bmodel/index.cjs +4 -0
  20. package/dist/bmodel/index.d.ts +2 -1
  21. package/dist/bmodel/index.js +2 -1
  22. package/dist/bmodel/normalization.d.ts +1 -3
  23. package/dist/bmodel/normalization.d.ts.map +1 -1
  24. package/dist/bmodel/types.d.ts +1 -2
  25. package/dist/bmodel/types.d.ts.map +1 -1
  26. package/dist/branding.d.ts +2 -3
  27. package/dist/branding.d.ts.map +1 -1
  28. package/dist/columns/accessor_traversal.d.ts +6 -8
  29. package/dist/columns/accessor_traversal.d.ts.map +1 -1
  30. package/dist/columns/column_registry.d.ts +2 -3
  31. package/dist/columns/column_registry.d.ts.map +1 -1
  32. package/dist/columns/column_selector.d.ts +9 -9
  33. package/dist/columns/column_selector.d.ts.map +1 -1
  34. package/dist/columns/dedup.cjs +1 -1
  35. package/dist/columns/dedup.cjs.map +1 -1
  36. package/dist/columns/dedup.d.ts +2 -4
  37. package/dist/columns/dedup.d.ts.map +1 -1
  38. package/dist/columns/dedup.js +1 -1
  39. package/dist/columns/dedup.js.map +1 -1
  40. package/dist/columns/providers.cjs +1 -1
  41. package/dist/columns/providers.cjs.map +1 -1
  42. package/dist/columns/providers.d.ts +4 -5
  43. package/dist/columns/providers.d.ts.map +1 -1
  44. package/dist/columns/providers.js +1 -1
  45. package/dist/columns/providers.js.map +1 -1
  46. package/dist/columns/types.d.ts +12 -9
  47. package/dist/columns/types.d.ts.map +1 -1
  48. package/dist/common_types.d.ts +4 -6
  49. package/dist/common_types.d.ts.map +1 -1
  50. package/dist/dialog/index.d.ts +4 -5
  51. package/dist/dialog/index.d.ts.map +1 -1
  52. package/dist/driver_kit.d.ts +2 -2
  53. package/dist/driver_kit.d.ts.map +1 -1
  54. package/dist/drivers/ChunkedStreamReader.d.ts +3 -5
  55. package/dist/drivers/ChunkedStreamReader.d.ts.map +1 -1
  56. package/dist/drivers/blob.d.ts +36 -25
  57. package/dist/drivers/blob.d.ts.map +1 -1
  58. package/dist/drivers/columns/columns_collection_driver.d.ts +6 -7
  59. package/dist/drivers/columns/columns_collection_driver.d.ts.map +1 -1
  60. package/dist/drivers/columns/discover_columns_options.d.ts +9 -8
  61. package/dist/drivers/columns/discover_columns_options.d.ts.map +1 -1
  62. package/dist/drivers/index.cjs +5 -0
  63. package/dist/drivers/index.d.ts +5 -3
  64. package/dist/drivers/index.js +3 -3
  65. package/dist/drivers/interfaces.d.ts +2 -3
  66. package/dist/drivers/interfaces.d.ts.map +1 -1
  67. package/dist/drivers/log.d.ts +26 -28
  68. package/dist/drivers/log.d.ts.map +1 -1
  69. package/dist/drivers/ls.d.ts +37 -27
  70. package/dist/drivers/ls.d.ts.map +1 -1
  71. package/dist/drivers/pframe/column_filter.d.ts +1 -3
  72. package/dist/drivers/pframe/column_filter.d.ts.map +1 -1
  73. package/dist/drivers/pframe/data_info.d.ts +77 -50
  74. package/dist/drivers/pframe/data_info.d.ts.map +1 -1
  75. package/dist/drivers/pframe/data_types.d.ts +50 -45
  76. package/dist/drivers/pframe/data_types.d.ts.map +1 -1
  77. package/dist/drivers/pframe/driver.d.ts +5 -5
  78. package/dist/drivers/pframe/driver.d.ts.map +1 -1
  79. package/dist/drivers/pframe/filter_spec.d.ts +10 -12
  80. package/dist/drivers/pframe/filter_spec.d.ts.map +1 -1
  81. package/dist/drivers/pframe/find_columns.d.ts +2 -4
  82. package/dist/drivers/pframe/find_columns.d.ts.map +1 -1
  83. package/dist/drivers/pframe/index.cjs +5 -0
  84. package/dist/drivers/pframe/index.d.ts +5 -3
  85. package/dist/drivers/pframe/index.js +3 -3
  86. package/dist/drivers/pframe/linker_columns.d.ts +4 -10
  87. package/dist/drivers/pframe/linker_columns.d.ts.map +1 -1
  88. package/dist/drivers/pframe/pframe.d.ts +3 -3
  89. package/dist/drivers/pframe/pframe.d.ts.map +1 -1
  90. package/dist/drivers/pframe/query/query_common.d.ts +52 -46
  91. package/dist/drivers/pframe/query/query_common.d.ts.map +1 -1
  92. package/dist/drivers/pframe/query/query_data.d.ts +26 -21
  93. package/dist/drivers/pframe/query/query_data.d.ts.map +1 -1
  94. package/dist/drivers/pframe/query/query_spec.d.ts +22 -19
  95. package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
  96. package/dist/drivers/pframe/query/utils.d.ts +15 -11
  97. package/dist/drivers/pframe/query/utils.d.ts.map +1 -1
  98. package/dist/drivers/pframe/spec/anchored.d.ts +3 -5
  99. package/dist/drivers/pframe/spec/anchored.d.ts.map +1 -1
  100. package/dist/drivers/pframe/spec/discovered_column.d.ts +10 -11
  101. package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -1
  102. package/dist/drivers/pframe/spec/filtered_column.d.ts +17 -18
  103. package/dist/drivers/pframe/spec/filtered_column.d.ts.map +1 -1
  104. package/dist/drivers/pframe/spec/ids.cjs +151 -0
  105. package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
  106. package/dist/drivers/pframe/spec/ids.d.ts +63 -11
  107. package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
  108. package/dist/drivers/pframe/spec/ids.js +150 -3
  109. package/dist/drivers/pframe/spec/ids.js.map +1 -1
  110. package/dist/drivers/pframe/spec/index.cjs +5 -0
  111. package/dist/drivers/pframe/spec/index.d.ts +3 -3
  112. package/dist/drivers/pframe/spec/index.js +3 -3
  113. package/dist/drivers/pframe/spec/native_id.d.ts +3 -3
  114. package/dist/drivers/pframe/spec/native_id.d.ts.map +1 -1
  115. package/dist/drivers/pframe/spec/overridden.d.ts +14 -16
  116. package/dist/drivers/pframe/spec/overridden.d.ts.map +1 -1
  117. package/dist/drivers/pframe/spec/selectors.d.ts +22 -22
  118. package/dist/drivers/pframe/spec/selectors.d.ts.map +1 -1
  119. package/dist/drivers/pframe/spec/spec.cjs +31 -0
  120. package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
  121. package/dist/drivers/pframe/spec/spec.d.ts +94 -70
  122. package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
  123. package/dist/drivers/pframe/spec/spec.js +31 -1
  124. package/dist/drivers/pframe/spec/spec.js.map +1 -1
  125. package/dist/drivers/pframe/spec_driver.d.ts +30 -25
  126. package/dist/drivers/pframe/spec_driver.d.ts.map +1 -1
  127. package/dist/drivers/pframe/table.d.ts +1 -3
  128. package/dist/drivers/pframe/table.d.ts.map +1 -1
  129. package/dist/drivers/pframe/table_calculate.d.ts +55 -46
  130. package/dist/drivers/pframe/table_calculate.d.ts.map +1 -1
  131. package/dist/drivers/pframe/table_common.d.ts +9 -10
  132. package/dist/drivers/pframe/table_common.d.ts.map +1 -1
  133. package/dist/drivers/pframe/unique_values.d.ts +3 -3
  134. package/dist/drivers/pframe/unique_values.d.ts.map +1 -1
  135. package/dist/drivers/upload.d.ts +2 -3
  136. package/dist/drivers/upload.d.ts.map +1 -1
  137. package/dist/drivers/urls.d.ts +7 -8
  138. package/dist/drivers/urls.d.ts.map +1 -1
  139. package/dist/errors.d.ts +35 -36
  140. package/dist/errors.d.ts.map +1 -1
  141. package/dist/flags/block_flags.cjs.map +1 -1
  142. package/dist/flags/block_flags.d.ts +7 -7
  143. package/dist/flags/block_flags.d.ts.map +1 -1
  144. package/dist/flags/block_flags.js.map +1 -1
  145. package/dist/flags/flag_utils.d.ts +6 -8
  146. package/dist/flags/flag_utils.d.ts.map +1 -1
  147. package/dist/flags/type_utils.d.ts +6 -7
  148. package/dist/flags/type_utils.d.ts.map +1 -1
  149. package/dist/httpAuth.d.ts +4 -5
  150. package/dist/httpAuth.d.ts.map +1 -1
  151. package/dist/index.cjs +30 -0
  152. package/dist/index.d.ts +15 -3
  153. package/dist/index.js +9 -3
  154. package/dist/json.d.ts +11 -12
  155. package/dist/json.d.ts.map +1 -1
  156. package/dist/navigation.d.ts +16 -11
  157. package/dist/navigation.d.ts.map +1 -1
  158. package/dist/plid.cjs +1 -1
  159. package/dist/plid.cjs.map +1 -1
  160. package/dist/plid.d.ts +8 -9
  161. package/dist/plid.d.ts.map +1 -1
  162. package/dist/plid.js +1 -1
  163. package/dist/plid.js.map +1 -1
  164. package/dist/pool/entry.d.ts +8 -6
  165. package/dist/pool/entry.d.ts.map +1 -1
  166. package/dist/pool/query.d.ts +3 -4
  167. package/dist/pool/query.d.ts.map +1 -1
  168. package/dist/pool/spec.d.ts +33 -30
  169. package/dist/pool/spec.d.ts.map +1 -1
  170. package/dist/pool_entry.d.ts +2 -3
  171. package/dist/pool_entry.d.ts.map +1 -1
  172. package/dist/project_id.d.ts +1 -3
  173. package/dist/project_id.d.ts.map +1 -1
  174. package/dist/ref.d.ts +22 -23
  175. package/dist/ref.d.ts.map +1 -1
  176. package/dist/resource_types.d.ts +2 -3
  177. package/dist/resource_types.d.ts.map +1 -1
  178. package/dist/services/node_service_handlers.d.ts +1 -3
  179. package/dist/services/node_service_handlers.d.ts.map +1 -1
  180. package/dist/services/service_capabilities.d.ts +7 -9
  181. package/dist/services/service_capabilities.d.ts.map +1 -1
  182. package/dist/services/service_declarations.d.ts +2 -2
  183. package/dist/services/service_declarations.d.ts.map +1 -1
  184. package/dist/services/service_injectors.d.ts +7 -8
  185. package/dist/services/service_injectors.d.ts.map +1 -1
  186. package/dist/services/service_registry.d.ts +2 -4
  187. package/dist/services/service_registry.d.ts.map +1 -1
  188. package/dist/services/service_types.d.ts +24 -26
  189. package/dist/services/service_types.d.ts.map +1 -1
  190. package/dist/template/index.cjs +20 -0
  191. package/dist/template/index.d.ts +5 -0
  192. package/dist/template/index.js +5 -0
  193. package/dist/template/kind_selector.cjs +92 -0
  194. package/dist/template/kind_selector.cjs.map +1 -0
  195. package/dist/template/kind_selector.d.ts +78 -0
  196. package/dist/template/kind_selector.d.ts.map +1 -0
  197. package/dist/template/kind_selector.js +87 -0
  198. package/dist/template/kind_selector.js.map +1 -0
  199. package/dist/template/project_template_v1.cjs +231 -0
  200. package/dist/template/project_template_v1.cjs.map +1 -0
  201. package/dist/template/project_template_v1.d.ts +217 -0
  202. package/dist/template/project_template_v1.d.ts.map +1 -0
  203. package/dist/template/project_template_v1.js +225 -0
  204. package/dist/template/project_template_v1.js.map +1 -0
  205. package/dist/template/template_ref_form.cjs +73 -0
  206. package/dist/template/template_ref_form.cjs.map +1 -0
  207. package/dist/template/template_ref_form.d.ts +75 -0
  208. package/dist/template/template_ref_form.d.ts.map +1 -0
  209. package/dist/template/template_ref_form.js +72 -0
  210. package/dist/template/template_ref_form.js.map +1 -0
  211. package/dist/template/template_relocate.cjs +67 -0
  212. package/dist/template/template_relocate.cjs.map +1 -0
  213. package/dist/template/template_relocate.d.ts +36 -0
  214. package/dist/template/template_relocate.d.ts.map +1 -0
  215. package/dist/template/template_relocate.js +67 -0
  216. package/dist/template/template_relocate.js.map +1 -0
  217. package/dist/utag.d.ts +2 -4
  218. package/dist/utag.d.ts.map +1 -1
  219. package/dist/util.d.ts +2 -3
  220. package/dist/util.d.ts.map +1 -1
  221. package/dist/value_or_error.d.ts +2 -3
  222. package/dist/value_or_error.d.ts.map +1 -1
  223. package/package.json +5 -5
  224. package/src/bmodel/block_kind_ref.ts +59 -0
  225. package/src/bmodel/container.ts +9 -0
  226. package/src/bmodel/index.ts +1 -0
  227. package/src/columns/dedup.ts +1 -1
  228. package/src/columns/providers.ts +1 -1
  229. package/src/drivers/pframe/spec/ids.test.ts +90 -0
  230. package/src/drivers/pframe/spec/ids.ts +191 -1
  231. package/src/drivers/pframe/spec/spec.ts +31 -0
  232. package/src/flags/block_flags.ts +1 -1
  233. package/src/index.ts +1 -0
  234. package/src/plid.ts +5 -5
  235. package/src/template/index.ts +4 -0
  236. package/src/template/kind_selector.ts +126 -0
  237. package/src/template/project_template_v1.test.ts +315 -0
  238. package/src/template/project_template_v1.ts +444 -0
  239. package/src/template/template_ref_form.test.ts +86 -0
  240. package/src/template/template_ref_form.ts +108 -0
  241. package/src/template/template_relocate.test.ts +239 -0
  242. package/src/template/template_relocate.ts +89 -0
@@ -1 +1 @@
1
- {"version":3,"file":"resource_types.d.ts","names":[],"sources":["../src/resource_types.ts"],"mappings":";;cACa,gBAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2CA,kBAAA;EAAA"}
1
+ {"version":3,"file":"resource_types.d.ts","names":[],"sources":["../src/resource_types.ts"],"mappings":";;qBACa;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;qBAIW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA"}
@@ -1,8 +1,6 @@
1
1
  import { DriverKit } from "../driver_kit.js";
2
2
  import { NodeServiceHandlerMap } from "./service_injectors.js";
3
-
4
3
  //#region src/services/node_service_handlers.d.ts
5
- declare function createNodeServiceHandlers(driverKit: DriverKit): NodeServiceHandlerMap;
4
+ export declare function createNodeServiceHandlers(driverKit: DriverKit): NodeServiceHandlerMap;
6
5
  //#endregion
7
- export { createNodeServiceHandlers };
8
6
  //# sourceMappingURL=node_service_handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node_service_handlers.d.ts","names":[],"sources":["../../src/services/node_service_handlers.ts"],"mappings":";;;;iBAiBgB,yBAAA,CAA0B,SAAA,EAAW,SAAA,GAAY,qBAAqB"}
1
+ {"version":3,"file":"node_service_handlers.d.ts","names":[],"sources":["../../src/services/node_service_handlers.ts"],"mappings":";;;wBAiBgB,0BAA0B,WAAW,YAAY"}
@@ -1,33 +1,31 @@
1
1
  import { Services } from "./service_declarations.js";
2
2
  import { ServiceName, ServiceRequireFlags } from "./service_types.js";
3
3
  import { SupportedRequirement } from "../flags/flag_utils.js";
4
-
5
4
  //#region src/services/service_capabilities.d.ts
6
5
  /**
7
6
  * All service-related `requires*` capability flag names, auto-derived from Services.
8
7
  * Single source of truth — use this everywhere runtime capabilities are registered.
9
8
  */
10
- declare const SERVICE_CAPABILITY_FLAGS: readonly SupportedRequirement[];
9
+ export declare const SERVICE_CAPABILITY_FLAGS: readonly SupportedRequirement[];
11
10
  /**
12
11
  * Register all service capability flags with the given callback.
13
12
  * Works with both `RuntimeCapabilities.addSupportedRequirement`
14
13
  * and `MiddleLayer.addRuntimeCapability`.
15
14
  */
16
- declare function registerServiceCapabilities(register: (flag: SupportedRequirement, value: true) => void): void;
15
+ export declare function registerServiceCapabilities(register: (flag: SupportedRequirement, value: true) => void): void;
17
16
  /**
18
17
  * Resolve which services are required by the given feature flags.
19
18
  * Accepts Record<string, unknown> so it works with both BlockCodeKnownFeatureFlags
20
19
  * (from middle layer) and Zod-parsed records (from preload).
21
20
  */
22
- declare function resolveRequiredServices(flags: Record<string, unknown> | undefined): ServiceName[];
23
- type KnownServiceName = (typeof Services)[keyof typeof Services] & string;
24
- declare function isKnownServiceName(name: string): name is KnownServiceName;
21
+ export declare function resolveRequiredServices(flags: Record<string, unknown> | undefined): ServiceName[];
22
+ export type KnownServiceName = (typeof Services)[keyof typeof Services] & string;
23
+ export declare function isKnownServiceName(name: string): name is KnownServiceName;
25
24
  /** All service require flags set to true, auto-generated from Services.
26
25
  * Used to distinguish service-related feature flags from non-service flags. */
27
- declare const SERVICE_FEATURE_FLAGS: { readonly [K in keyof ServiceRequireFlags]-?: true };
26
+ export declare const SERVICE_FEATURE_FLAGS: { readonly [K in keyof ServiceRequireFlags]-?: true; };
28
27
  /** Introspect method names on an instance (including prototype chain).
29
28
  * Uses Object.getOwnPropertyDescriptor to avoid triggering getters. */
30
- declare function getMethodNames<T extends object>(instance: T): string[];
29
+ export declare function getMethodNames<T extends object>(instance: T): string[];
31
30
  //#endregion
32
- export { KnownServiceName, SERVICE_CAPABILITY_FLAGS, SERVICE_FEATURE_FLAGS, getMethodNames, isKnownServiceName, registerServiceCapabilities, resolveRequiredServices };
33
31
  //# sourceMappingURL=service_capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service_capabilities.d.ts","names":[],"sources":["../../src/services/service_capabilities.ts"],"mappings":";;;;;;;AAQA;;cAAa,wBAAA,WAAmC,oBAAoB;;AAAA;AASpE;;;iBAAgB,2BAAA,CACd,QAAA,GAAW,IAAA,EAAM,oBAAoB,EAAE,KAAA;;;;;;iBAYzB,uBAAA,CAAwB,KAAA,EAAO,MAAA,gCAAsC,WAAW;AAAA,KAOpF,gBAAA,WAA2B,QAAA,eAAuB,QAAQ;AAAA,iBAEtD,kBAAA,CAAmB,IAAA,WAAe,IAAA,IAAQ,gBAAgB;;;cAM7D,qBAAA,yBAA8C,mBAAmB;;AAfkB;iBAoBhF,cAAA,mBAAiC,QAAA,EAAU,CAAC"}
1
+ {"version":3,"file":"service_capabilities.d.ts","names":[],"sources":["../../src/services/service_capabilities.ts"],"mappings":";;;;;;;;qBAQa,mCAAmC;;;;;;wBAShC,4BACd,WAAW,MAAM,sBAAsB;;;;;;wBAYzB,wBAAwB,OAAO,sCAAsC;YAOzE,2BAA2B,uBAAuB;wBAE9C,mBAAmB,eAAe,QAAQ;;;qBAM7C,mCAAmC,WAAW;;;wBAK3C,eAAe,kBAAkB,UAAU"}
@@ -6,13 +6,13 @@ import { PFrameSpecDriver } from "../drivers/pframe/spec_driver.js";
6
6
  import { PFrameDriver, PFrameModelDriver } from "../drivers/pframe/driver.js";
7
7
  import { ColumnsCollectionDriver, ColumnsCollectionDriverModel } from "../drivers/columns/columns_collection_driver.js";
8
8
  import { ServiceTypesLike } from "./service_types.js";
9
+ import "../index.js";
9
10
  //#region src/services/service_declarations.d.ts
10
- declare const Services: {
11
+ export declare const Services: {
11
12
  PFrameSpec: Branded<"pframeSpec", ServiceTypesLike<PFrameSpecDriver, PFrameSpecDriver, "wasm", PFrameSpecDriver, PFrameSpecDriver>>;
12
13
  PFrame: Branded<"pframe", ServiceTypesLike<PFrameModelDriver<PColumn<string | PColumnValues | DataInfo<string>>>, PFrameDriver, "node", PFrameModelDriver<PColumn<string | PColumnValues | DataInfo<string>>>, PFrameDriver>>;
13
14
  Dialog: Branded<"dialog", ServiceTypesLike<Record<string, never>, DialogService, "main", Record<string, never>, DialogService>>;
14
15
  ColumnsCollection: Branded<"columnsCollection", ServiceTypesLike<ColumnsCollectionDriverModel, ColumnsCollectionDriverModel, "wasm", ColumnsCollectionDriver, ColumnsCollectionDriver>>;
15
16
  };
16
17
  //#endregion
17
- export { Services };
18
18
  //# sourceMappingURL=service_declarations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service_declarations.d.ts","names":[],"sources":["../../src/services/service_declarations.ts"],"mappings":";;;;;;;;;cAkCa,QAAA"}
1
+ {"version":3,"file":"service_declarations.d.ts","names":[],"sources":["../../src/services/service_declarations.ts"],"mappings":";;;;;;;;;;qBAkCa;EACX,YAAU,sBAAA,iBAAA,kBAAA,0BAAA,kBAAA;EA8BV,QAAM,kBAAA,iBAAA,kBAAA,iBA9BI,gBA8BJ,oBAAA,sBAAA,kBAAA,iBAAA,gBAAA,oBAAA;EAiBN,QAAM,kBAAA,iBAAA,uBAAA,uBAAA,uBAAA;EAMN,mBAAiB,6BAAA,iBAAA,8BAAA,sCAAA,yBAAA"}
@@ -2,33 +2,32 @@ import { Services } from "./service_declarations.js";
2
2
  import { InferServiceKind, InferServiceUi, ServiceBrand, ServiceName } from "./service_types.js";
3
3
  import { DriverKit } from "../driver_kit.js";
4
4
  import { createNodeServiceHandlers } from "./node_service_handlers.js";
5
-
6
5
  //#region src/services/service_injectors.d.ts
7
- type NodeServiceKeys = { [K in keyof typeof Services]: InferServiceKind<ServiceBrand<(typeof Services)[K]>> extends "node" ? K : never }[keyof typeof Services];
6
+ type NodeServiceKeys = { [K in keyof typeof Services]: InferServiceKind<ServiceBrand<(typeof Services)[K]>> extends "node" ? K : never; }[keyof typeof Services];
8
7
  /**
9
8
  * Auto-derived map of node service keys to their UI-facing interfaces.
10
9
  * Fulfilled by real driver wrappers in the worker. Main services are
11
10
  * dispatched by the Electron main-process router and never reach this
12
11
  * map; wasm services are instantiated locally on each consumer.
13
12
  */
14
- type NodeServiceHandlerMap = { [K in NodeServiceKeys]: InferServiceUi<ServiceBrand<(typeof Services)[K]>> };
13
+ export type NodeServiceHandlerMap = { [K in NodeServiceKeys]: InferServiceUi<ServiceBrand<(typeof Services)[K]>>; };
15
14
  /**
16
15
  * Resolve the worker-side handler object for a given service ID. Caches
17
16
  * per DriverKit reference. Called from the worker's IPC dispatch path.
18
17
  */
19
- declare function resolveNodeServiceHandler(driverKit: DriverKit, serviceId: ServiceName): NodeServiceHandlerMap[keyof NodeServiceHandlerMap] | null;
18
+ export declare function resolveNodeServiceHandler(driverKit: DriverKit, serviceId: ServiceName): NodeServiceHandlerMap[keyof NodeServiceHandlerMap] | null;
20
19
  /**
21
20
  * UI-side method names per service. Drives ServiceProxy forwarder
22
21
  * construction in the renderer.
23
22
  */
24
- declare const SERVICE_METHOD_MAP: Readonly<Record<string, string[]>>;
23
+ export declare const SERVICE_METHOD_MAP: Readonly<Record<string, string[]>>;
25
24
  /**
26
25
  * Model-side method names per service. Drives the workflow VM bridge
27
26
  * (see pl-middle-layer js_render).
28
27
  */
29
- declare const MODEL_SERVICE_METHOD_MAP: Readonly<Record<string, string[]>>;
28
+ export declare const MODEL_SERVICE_METHOD_MAP: Readonly<Record<string, string[]>>;
30
29
  /** Build service info for a block from its feature flags. */
31
- declare function buildServiceInfo(featureFlags: Record<string, unknown>): Record<ServiceName, string[]>;
30
+ export declare function buildServiceInfo(featureFlags: Record<string, unknown>): Record<ServiceName, string[]>;
32
31
  //#endregion
33
- export { MODEL_SERVICE_METHOD_MAP, NodeServiceHandlerMap, SERVICE_METHOD_MAP, buildServiceInfo, createNodeServiceHandlers, resolveNodeServiceHandler };
32
+ export { createNodeServiceHandlers };
34
33
  //# sourceMappingURL=service_injectors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service_injectors.d.ts","names":[],"sources":["../../src/services/service_injectors.ts"],"mappings":";;;;;;KAmBK,eAAA,wBACgB,QAAA,GAAW,gBAAA,CAAiB,YAAA,SAAqB,QAAA,EAAU,CAAA,qBAC1E,CAAA,wBAES,QAAA;;;;;;;KAQH,qBAAA,WACJ,eAAA,GAAkB,cAAA,CAAe,YAAA,SAAqB,QAAA,EAAU,CAAA;;;AATjD;AAQvB;iBAmBgB,yBAAA,CACd,SAAA,EAAW,SAAA,EACX,SAAA,EAAW,WAAA,GACV,qBAAA,OAA4B,qBAAA;;;;;cAuBlB,kBAAA,EAAoB,QAAQ,CAAC,MAAA;;;;;cAO7B,wBAAA,EAA0B,QAAQ,CAAC,MAAA;;iBAIhC,gBAAA,CACd,YAAA,EAAc,MAAA,oBACb,MAAA,CAAO,WAAA"}
1
+ {"version":3,"file":"service_injectors.d.ts","names":[],"sources":["../../src/services/service_injectors.ts"],"mappings":";;;;;KAmBK,qBACF,kBAAkB,WAAW,iBAAiB,qBAAqB,UAAU,sBAC1E,0BAES;;;;;;;YAQH,2BACT,KAAK,kBAAkB,eAAe,qBAAqB,UAAU;;;;;wBAkBxD,0BACd,WAAW,WACX,WAAW,cACV,4BAA4B;;;;;qBAuBlB,oBAAoB,SAAS;;;;;qBAO7B,0BAA0B,SAAS;;wBAIhC,iBACd,cAAc,0BACb,OAAO"}
@@ -1,6 +1,5 @@
1
1
  import { Services } from "./service_declarations.js";
2
2
  import { InferServiceModelHost, InferServiceUiHost, ModelServiceFactoryMap, ServiceName, ServiceTypesLike, UiServiceFactoryMap } from "./service_types.js";
3
-
4
3
  //#region src/services/service_registry.d.ts
5
4
  type RegistryName = "ModelServiceRegistry" | "UiServiceRegistry";
6
5
  declare class ServiceRegistryBase {
@@ -12,14 +11,13 @@ declare class ServiceRegistryBase {
12
11
  dispose(): Promise<void>;
13
12
  protected getById(serviceId: ServiceName): Record<string, Function> | null;
14
13
  }
15
- declare class ModelServiceRegistry<SMap extends Record<string, ServiceName> = typeof Services> extends ServiceRegistryBase {
14
+ export declare class ModelServiceRegistry<SMap extends Record<string, ServiceName> = typeof Services> extends ServiceRegistryBase {
16
15
  constructor(serviceMap: SMap, factories: ModelServiceFactoryMap<SMap>);
17
16
  get<S extends ServiceTypesLike>(id: ServiceName<S>): ([unknown] extends [InferServiceModelHost<S>] ? Record<string, Function> : InferServiceModelHost<S>) | null;
18
17
  }
19
- declare class UiServiceRegistry<SMap extends Record<string, ServiceName> = typeof Services> extends ServiceRegistryBase {
18
+ export declare class UiServiceRegistry<SMap extends Record<string, ServiceName> = typeof Services> extends ServiceRegistryBase {
20
19
  constructor(serviceMap: SMap, factories: UiServiceFactoryMap<SMap>);
21
20
  get<S extends ServiceTypesLike>(id: ServiceName<S>): ([unknown] extends [InferServiceUiHost<S>] ? Record<string, Function> : InferServiceUiHost<S>) | null;
22
21
  }
23
22
  //#endregion
24
- export { ModelServiceRegistry, UiServiceRegistry };
25
23
  //# sourceMappingURL=service_registry.d.ts.map
@@ -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,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,qBAAA,CAAsB,CAAA,KACtC,MAAA,SAAe,QAAA,IACf,qBAAA,CAAsB,CAAA;AAAA;AAAA,cAOnB,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,wBAEM,kBAAA,CAAmB,CAAA,KAAM,MAAA,SAAe,QAAA,IAAY,kBAAA,CAAmB,CAAA;AAAA"}
1
+ {"version":3,"file":"service_registry.d.ts","names":[],"sources":["../../src/services/service_registry.ts"],"mappings":";;;KAWK;cAGC;mBACa;mBACA;mBACA;mBACA;YAER,YACP,cAAc,cACd,YAAY,eAAe,cAC3B,WAAW;EAYP,WAAW;YAWP,QAAQ,WAAW,cAAc,eAAe;;qBAiB/C,qBACX,aAAa,eAAe,sBAAsB,kBAC1C;EACR,YAAY,YAAY,MAAM,WAAW,uBAAuB;EAIhE,IAAI,UAAU,kBACZ,IAAI,YAAY,yBAEM,sBAAsB,MACtC,eAAe,YACf,sBAAsB;;qBAOnB,kBACX,aAAa,eAAe,sBAAsB,kBAC1C;EACR,YAAY,YAAY,MAAM,WAAW,oBAAoB;EAI7D,IAAI,UAAU,kBACZ,IAAI,YAAY,yBAEM,mBAAmB,MAAM,eAAe,YAAY,mBAAmB"}
@@ -1,9 +1,8 @@
1
1
  import { Branded as Branded$1 } from "../branding.js";
2
2
  import { Services } from "./service_declarations.js";
3
3
  import { UnionToIntersection } from "@milaboratories/helpers";
4
-
5
4
  //#region src/services/service_types.d.ts
6
- type ServiceTypesLike<Model = unknown, Ui = unknown, Kind extends ServiceType = ServiceType, ModelHost = Model, UiHost = Ui> = {
5
+ export type ServiceTypesLike<Model = unknown, Ui = unknown, Kind extends ServiceType = ServiceType, ModelHost = Model, UiHost = Ui> = {
7
6
  readonly __types?: {
8
7
  model: Model;
9
8
  ui: Ui;
@@ -12,37 +11,37 @@ type ServiceTypesLike<Model = unknown, Ui = unknown, Kind extends ServiceType =
12
11
  uiHost: UiHost;
13
12
  };
14
13
  };
15
- type InferServiceModel<S extends ServiceTypesLike> = S extends ServiceTypesLike<infer M, unknown, ServiceType, unknown, unknown> ? M : unknown;
16
- type InferServiceUi<S extends ServiceTypesLike> = S extends ServiceTypesLike<unknown, infer U, ServiceType, unknown, unknown> ? U : unknown;
17
- type InferServiceKind<S extends ServiceTypesLike> = S extends ServiceTypesLike<unknown, unknown, infer K, unknown, unknown> ? K : ServiceType;
14
+ export type InferServiceModel<S extends ServiceTypesLike> = S extends ServiceTypesLike<infer M, unknown, ServiceType, unknown, unknown> ? M : unknown;
15
+ export type InferServiceUi<S extends ServiceTypesLike> = S extends ServiceTypesLike<unknown, infer U, ServiceType, unknown, unknown> ? U : unknown;
16
+ export type InferServiceKind<S extends ServiceTypesLike> = S extends ServiceTypesLike<unknown, unknown, infer K, unknown, unknown> ? K : ServiceType;
18
17
  /**
19
18
  * Host-side shape stored in the model service registry. Differs from
20
19
  * {@link InferServiceModel} only when the registered impl carries extra
21
20
  * parameters (e.g. per-call `host` bindings) that the sandbox-view does
22
21
  * not expose. Defaults to {@link InferServiceModel}.
23
22
  */
24
- type InferServiceModelHost<S extends ServiceTypesLike> = S extends ServiceTypesLike<unknown, unknown, ServiceType, infer MH, unknown> ? MH : unknown;
23
+ export type InferServiceModelHost<S extends ServiceTypesLike> = S extends ServiceTypesLike<unknown, unknown, ServiceType, infer MH, unknown> ? MH : unknown;
25
24
  /**
26
25
  * Host-side shape stored in the UI service registry. Differs from
27
26
  * {@link InferServiceUi} only when the registered impl carries extra
28
27
  * parameters that the UI-proxy view does not expose. Defaults to
29
28
  * {@link InferServiceUi}.
30
29
  */
31
- type InferServiceUiHost<S extends ServiceTypesLike> = S extends ServiceTypesLike<unknown, unknown, ServiceType, unknown, infer UH> ? UH : unknown;
32
- type ServiceName<S extends ServiceTypesLike = ServiceTypesLike> = Branded$1<string, S>;
33
- type ServiceType = "node" | "wasm" | "main";
34
- declare const service: <Model, Ui, ModelHost = Model, UiHost = Ui>() => <K extends ServiceType, N extends string, MM extends readonly (keyof Model & string)[], UM extends readonly (keyof Ui & string)[]>(options: {
35
- readonly type: K;
36
- readonly name: N;
37
- readonly modelMethods: MM;
38
- readonly uiMethods: UM;
39
- }) => Branded$1<N, ServiceTypesLike<Model, Ui, K, ModelHost, UiHost>>, isNodeService: (id: ServiceName) => boolean, isWasmService: (id: ServiceName) => boolean, isMainService: (id: ServiceName) => boolean, getServiceKind: (id: ServiceName) => ServiceType | undefined, getServiceModelMethods: (id: ServiceName) => readonly string[], getServiceUiMethods: (id: ServiceName) => readonly string[];
40
- declare function serviceFnKey(serviceId: string, method?: string): string;
41
- type ServiceBrand<T> = T extends Branded$1<string, infer S extends ServiceTypesLike> ? S : never;
42
- type ModelServiceFactoryMap<SMap extends Record<string, ServiceName>> = { [K in keyof SMap]: (() => InferServiceModelHost<ServiceBrand<SMap[K]>>) | null };
43
- type UiServiceFactoryMap<SMap extends Record<string, ServiceName>> = { [K in keyof SMap]: (() => InferServiceUiHost<ServiceBrand<SMap[K]>>) | null };
30
+ export type InferServiceUiHost<S extends ServiceTypesLike> = S extends ServiceTypesLike<unknown, unknown, ServiceType, unknown, infer UH> ? UH : unknown;
31
+ export type ServiceName<S extends ServiceTypesLike = ServiceTypesLike> = Branded$1<string, S>;
32
+ export type ServiceType = "node" | "wasm" | "main";
33
+ export declare const service: <Model, Ui, ModelHost = Model, UiHost = Ui>() => <K extends ServiceType, N extends string, MM extends readonly (keyof Model & string)[], UM extends readonly (keyof Ui & string)[]>(options: {
34
+ readonly type: K;
35
+ readonly name: N;
36
+ readonly modelMethods: MM;
37
+ readonly uiMethods: UM;
38
+ }) => Branded$1<N, ServiceTypesLike<Model, Ui, K, ModelHost, UiHost>>, isNodeService: (id: ServiceName) => boolean, isWasmService: (id: ServiceName) => boolean, isMainService: (id: ServiceName) => boolean, getServiceKind: (id: ServiceName) => ServiceType | undefined, getServiceModelMethods: (id: ServiceName) => readonly string[], getServiceUiMethods: (id: ServiceName) => readonly string[];
39
+ export declare function serviceFnKey(serviceId: string, method?: string): string;
40
+ export type ServiceBrand<T> = T extends Branded$1<string, infer S extends ServiceTypesLike> ? S : never;
41
+ export type ModelServiceFactoryMap<SMap extends Record<string, ServiceName>> = { [K in keyof SMap]: (() => InferServiceModelHost<ServiceBrand<SMap[K]>>) | null; };
42
+ export type UiServiceFactoryMap<SMap extends Record<string, ServiceName>> = { [K in keyof SMap]: (() => InferServiceUiHost<ServiceBrand<SMap[K]>>) | null; };
44
43
  /** Contract between any service provider and any service consumer. */
45
- interface ServiceDispatch {
44
+ export interface ServiceDispatch {
46
45
  getServiceNames(): ServiceName[];
47
46
  getServiceMethods(serviceId: ServiceName): string[];
48
47
  callServiceMethod(serviceId: ServiceName, method: string, ...args: unknown[]): unknown;
@@ -50,14 +49,13 @@ interface ServiceDispatch {
50
49
  type TServices = typeof Services;
51
50
  type ExtractServiceName<T> = T extends Branded$1<infer N extends string, any> ? N : never;
52
51
  /** Model-side service interfaces keyed by service name literal. */
53
- type ModelServices = { [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceModel<ServiceBrand<TServices[K]>> };
52
+ export type ModelServices = { [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceModel<ServiceBrand<TServices[K]>>; };
54
53
  /** UI-side service interfaces keyed by service name literal. */
55
- type UiServices = { [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceUi<ServiceBrand<TServices[K]>> };
54
+ export type UiServices = { [K in keyof TServices as ExtractServiceName<TServices[K]>]: InferServiceUi<ServiceBrand<TServices[K]>>; };
56
55
  /** Map from Services keys to their unbranded string name literals. */
57
- type ServiceNameLiterals = { [K in keyof TServices]: ExtractServiceName<TServices[K]> };
56
+ export type ServiceNameLiterals = { [K in keyof TServices]: ExtractServiceName<TServices[K]>; };
58
57
  /** Auto-derived requires* feature flags from Services keys. */
59
- type ServiceRequireFlags = { [K in keyof TServices as `requires${K & string}`]?: boolean };
60
- type RequireServices<T extends ServiceName> = UnionToIntersection<T extends Branded$1<infer N extends string, infer S extends ServiceTypesLike> ? Record<N, InferServiceModel<S>> : never>;
58
+ export type ServiceRequireFlags = { [K in keyof TServices as `requires${K & string}`]?: boolean; };
59
+ export type RequireServices<T extends ServiceName> = UnionToIntersection<T extends Branded$1<infer N extends string, infer S extends ServiceTypesLike> ? Record<N, InferServiceModel<S>> : never>;
61
60
  //#endregion
62
- export { InferServiceKind, InferServiceModel, InferServiceModelHost, InferServiceUi, InferServiceUiHost, ModelServiceFactoryMap, ModelServices, RequireServices, ServiceBrand, ServiceDispatch, ServiceName, ServiceNameLiterals, ServiceRequireFlags, ServiceType, ServiceTypesLike, UiServiceFactoryMap, UiServices, getServiceKind, getServiceModelMethods, getServiceUiMethods, isMainService, isNodeService, isWasmService, service, serviceFnKey };
63
61
  //# sourceMappingURL=service_types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service_types.d.ts","names":[],"sources":["../../src/services/service_types.ts"],"mappings":";;;;;KAKY,gBAAA,6CAGG,WAAA,GAAc,WAAA,cACf,KAAA,WACH,EAAA;EAAA,SAEA,OAAA;IACP,KAAA,EAAO,KAAA;IACP,EAAA,EAAI,EAAA;IACJ,IAAA,EAAM,IAAA;IACN,SAAA,EAAW,SAAA;IACX,MAAA,EAAQ,MAAA;EAAA;AAAA;AAAA,KAIA,iBAAA,WAA4B,gBAAA,IACtC,CAAA,SAAU,gBAAA,mBAAmC,WAAA,sBAAiC,CAAA;AAAA,KAEpE,cAAA,WAAyB,gBAAA,IACnC,CAAA,SAAU,gBAAA,mBAAmC,WAAA,sBAAiC,CAAA;AAAA,KAEpE,gBAAA,WAA2B,gBAAA,IACrC,CAAA,SAAU,gBAAA,gDAAgE,CAAA,GAAI,WAAA;;;;;;;KAQpE,qBAAA,WAAgC,gBAAA,IAC1C,CAAA,SAAU,gBAAA,mBAAmC,WAAA,uBAAkC,EAAA;;;;;;;KAQrE,kBAAA,WAA6B,gBAAA,IACvC,CAAA,SAAU,gBAAA,mBAAmC,WAAA,uBAAkC,EAAA;AAAA,KAErE,WAAA,WAAsB,gBAAA,GAAmB,gBAAA,IAAoB,SAAA,SAAgB,CAAA;AAAA,KAE7E,WAAA;AAAA,cAKV,OAAA,0BAY8B,KAAA,WAAgB,EAAA,kBAE9B,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,EAAG,SAAA,EAAW,MAAA,oBAtBhD,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,qBAAA,CAAsB,YAAA,CAAa,IAAA,CAAK,CAAA;AAAA,KAGxD,mBAAA,cAAiC,MAAA,SAAe,WAAA,mBAC9C,IAAA,UAAc,kBAAA,CAAmB,YAAA,CAAa,IAAA,CAAK,CAAA;;UAIhD,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
+ {"version":3,"file":"service_types.d.ts","names":[],"sources":["../../src/services/service_types.ts"],"mappings":";;;;YAKY,iBACV,iBACA,cACA,aAAa,cAAc,aAC3B,YAAY,OACZ,SAAS;WAEA;IACP,OAAO;IACP,IAAI;IACJ,MAAM;IACN,WAAW;IACX,QAAQ;;;YAIA,kBAAkB,UAAU,oBACtC,UAAU,uBAAuB,YAAY,iCAAiC;YAEpE,eAAe,UAAU,oBACnC,UAAU,gCAAgC,GAAG,iCAAiC;YAEpE,iBAAiB,UAAU,oBACrC,UAAU,yCAAyC,uBAAuB,IAAI;;;;;;;YAQpE,sBAAsB,UAAU,oBAC1C,UAAU,mCAAmC,mBAAmB,eAAe;;;;;;;YAQrE,mBAAmB,UAAU,oBACvC,UAAU,mCAAmC,4BAA4B,MAAM;YAErE,YAAY,UAAU,mBAAmB,oBAAoB,kBAAgB;YAE7E;qBAKV,UAYU,OAAO,IAAI,YAAS,OAAU,SAAM,UAExC,UAAU,aACV,kBACA,2BAA2B,mBAC3B,2BAA2B,gBAAc;WAEhC,MAAM;WACN,MAAM;WACN,cAAc;WACd,WAAW;MAClB,UAAQ,GAAG,iBAAiB,OAAO,IAAI,GAAG,WAAW,UAtB7D,gBAAa,IAsCO,yBArCpB,gBAAa,IAwCO,yBAvCpB,gBAAa,IA0CO,yBAzCpB,iBAAc,IA4CO,gBAAc,yBA3CnC,yBAAsB,IA8CO,mCA7C7B,sBAAmB,IAgDO;wBAMZ,aAAa,mBAAmB;YAIpC,aAAa,KACvB,UAAU,wBAAsB,UAAU,oBAAoB;YAEpD,uBAAuB,aAAa,eAAe,mBAC5D,WAAW,cAAc,sBAAsB,aAAa,KAAK;YAGxD,oBAAoB,aAAa,eAAe,mBACzD,WAAW,cAAc,mBAAmB,aAAa,KAAK;;iBAIhD;EACf,mBAAmB;EACnB,kBAAkB,WAAW;EAC7B,kBAAkB,WAAW,aAAa,mBAAmB;;KAM1D,mBAAmB;KAEnB,mBAAmB,KAAK,UAAU,gBAAc,yBAAyB;;YAGlE,mBACT,WAAW,aAAa,mBAAmB,UAAU,MAAM,kBAC1D,aAAa,UAAU;;YAKf,gBACT,WAAW,aAAa,mBAAmB,UAAU,MAAM,eAC1D,aAAa,UAAU;;YAKf,yBACT,WAAW,YAAY,mBAAmB,UAAU;;YAI3C,yBACT,WAAW,wBAAwB;YAG1B,gBAAgB,UAAU,eAAe,oBACnD,UAAU,gBAAc,wBAAwB,UAAU,oBACtD,OAAO,GAAG,kBAAkB"}
@@ -0,0 +1,20 @@
1
+ const require_kind_selector = require("./kind_selector.cjs");
2
+ const require_project_template_v1 = require("./project_template_v1.cjs");
3
+ const require_template_ref_form = require("./template_ref_form.cjs");
4
+ const require_template_relocate = require("./template_relocate.cjs");
5
+ exports.PROJECT_TEMPLATE_SCHEMA_V1 = require_project_template_v1.PROJECT_TEMPLATE_SCHEMA_V1;
6
+ exports.ProjectTemplateV1ParseError = require_project_template_v1.ProjectTemplateV1ParseError;
7
+ exports.expandTemplateRefs = require_template_ref_form.expandTemplateRefs;
8
+ exports.formatKindSelector = require_kind_selector.formatKindSelector;
9
+ exports.formatKindSelectorReference = require_kind_selector.formatKindSelectorReference;
10
+ exports.formatTemplateParseIssue = require_project_template_v1.formatTemplateParseIssue;
11
+ exports.isBlockKindSelectorReference = require_kind_selector.isBlockKindSelectorReference;
12
+ exports.isTemplatePlRef = require_template_ref_form.isTemplatePlRef;
13
+ exports.kindReferenceToSelectorReference = require_kind_selector.kindReferenceToSelectorReference;
14
+ exports.parseBlockPackLocation = require_project_template_v1.parseBlockPackLocation;
15
+ exports.parseBlockPackReference = require_project_template_v1.parseBlockPackReference;
16
+ exports.parseKindSelector = require_kind_selector.parseKindSelector;
17
+ exports.parseKindSelectorReference = require_kind_selector.parseKindSelectorReference;
18
+ exports.parseProjectTemplateV1 = require_project_template_v1.parseProjectTemplateV1;
19
+ exports.readProjectTemplateV1 = require_project_template_v1.readProjectTemplateV1;
20
+ exports.relocateBlockIds = require_template_relocate.relocateBlockIds;
@@ -0,0 +1,5 @@
1
+ import { BlockKindSelectorReference, KindSelector, KindSelectorOp, formatKindSelector, formatKindSelectorReference, isBlockKindSelectorReference, kindReferenceToSelectorReference, parseKindSelector, parseKindSelectorReference } from "./kind_selector.js";
2
+ import { BlockPackLocationReference, BlockPackLocatorOverride, BlockPackReference, PROJECT_TEMPLATE_SCHEMA_V1, ProjectTemplateSchemaV1, ProjectTemplateV1, ProjectTemplateV1Entry, ProjectTemplateV1ParseError, ProjectTemplateV1ReadResult, TemplateParseIssue, formatTemplateParseIssue, parseBlockPackLocation, parseBlockPackReference, parseProjectTemplateV1, readProjectTemplateV1 } from "./project_template_v1.js";
3
+ import { TemplatePlRef, expandTemplateRefs, isTemplatePlRef } from "./template_ref_form.js";
4
+ import { relocateBlockIds } from "./template_relocate.js";
5
+ export { BlockKindSelectorReference, BlockPackLocationReference, BlockPackLocatorOverride, BlockPackReference, KindSelector, KindSelectorOp, PROJECT_TEMPLATE_SCHEMA_V1, ProjectTemplateSchemaV1, ProjectTemplateV1, ProjectTemplateV1Entry, ProjectTemplateV1ParseError, ProjectTemplateV1ReadResult, TemplateParseIssue, TemplatePlRef, expandTemplateRefs, formatKindSelector, formatKindSelectorReference, formatTemplateParseIssue, isBlockKindSelectorReference, isTemplatePlRef, kindReferenceToSelectorReference, parseBlockPackLocation, parseBlockPackReference, parseKindSelector, parseKindSelectorReference, parseProjectTemplateV1, readProjectTemplateV1, relocateBlockIds };
@@ -0,0 +1,5 @@
1
+ import { formatKindSelector, formatKindSelectorReference, isBlockKindSelectorReference, kindReferenceToSelectorReference, parseKindSelector, parseKindSelectorReference } from "./kind_selector.js";
2
+ import { PROJECT_TEMPLATE_SCHEMA_V1, ProjectTemplateV1ParseError, formatTemplateParseIssue, parseBlockPackLocation, parseBlockPackReference, parseProjectTemplateV1, readProjectTemplateV1 } from "./project_template_v1.js";
3
+ import { expandTemplateRefs, isTemplatePlRef } from "./template_ref_form.js";
4
+ import { relocateBlockIds } from "./template_relocate.js";
5
+ export { PROJECT_TEMPLATE_SCHEMA_V1, ProjectTemplateV1ParseError, expandTemplateRefs, formatKindSelector, formatKindSelectorReference, formatTemplateParseIssue, isBlockKindSelectorReference, isTemplatePlRef, kindReferenceToSelectorReference, parseBlockPackLocation, parseBlockPackReference, parseKindSelector, parseKindSelectorReference, parseProjectTemplateV1, readProjectTemplateV1, relocateBlockIds };
@@ -0,0 +1,92 @@
1
+ const require_block_kind_ref = require("../bmodel/block_kind_ref.cjs");
2
+ //#region src/template/kind_selector.ts
3
+ /** `X.Y.Z` with optional semver prerelease and build metadata. */
4
+ const semVerRegex = /^\d+\.\d+\.\d+(?:-[\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*)?(?:\+[\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*)?$/;
5
+ /**
6
+ * Split a raw selector string (`1.2.0`, `~1.2.0`, `^1.2.0`) into its parts.
7
+ *
8
+ * The version is validated as `X.Y.Z`, so a range that is legal npm but not part
9
+ * of the kind grammar (`>=1.0.0`, `1.x`, `latest`) is rejected here rather than
10
+ * reaching resolution. Note the deliberate divergence from
11
+ * `tools/block-tools`'s `parseSelector`, which additionally tolerates a leading
12
+ * `@` as `exact`: after the `{name}@{selector}` split a leading `@` can only
13
+ * come from a doubled separator, which is malformed.
14
+ *
15
+ * Mapping a selector onto a concrete version is resolution, not parsing, and
16
+ * lives with the resolver (`kind_resolver.selectorToRange`).
17
+ *
18
+ * @throws if the version part is not `X.Y.Z`
19
+ */
20
+ function parseKindSelector(raw) {
21
+ const s = raw.trim();
22
+ const op = s.startsWith("~") ? "patch" : s.startsWith("^") ? "minor" : "exact";
23
+ const version = op === "exact" ? s : s.slice(1);
24
+ if (!semVerRegex.test(version)) throw new Error(`Malformed kind version selector (expected 'X.Y.Z', '~X.Y.Z' or '^X.Y.Z'): ${raw}`);
25
+ return {
26
+ op,
27
+ version
28
+ };
29
+ }
30
+ /** Render a {@link KindSelector} back to its on-wire string. */
31
+ function formatKindSelector(sel) {
32
+ switch (sel.op) {
33
+ case "exact": return sel.version;
34
+ case "patch": return `~${sel.version}`;
35
+ case "minor": return `^${sel.version}`;
36
+ }
37
+ }
38
+ /**
39
+ * Split a {@link BlockKindSelectorReference} into `{ name, selector }`.
40
+ *
41
+ * @throws if the reference carries no version segment, or the selector is
42
+ * outside the `X.Y.Z` / `~X.Y.Z` / `^X.Y.Z` grammar
43
+ */
44
+ function parseKindSelectorReference(ref) {
45
+ const { name, version } = require_block_kind_ref.splitVersionedName(ref, "kind selector reference", "{name}@{selector}");
46
+ return {
47
+ name,
48
+ selector: parseKindSelector(version)
49
+ };
50
+ }
51
+ /**
52
+ * Compose a {@link BlockKindSelectorReference} from a name and selector.
53
+ *
54
+ * A formatter, not a validator — pass a selector that came from
55
+ * {@link parseKindSelector} or that you constructed from a known-good version.
56
+ */
57
+ function formatKindSelectorReference(k) {
58
+ return `${k.name}@${formatKindSelector(k.selector)}`;
59
+ }
60
+ /**
61
+ * Widen a resolved {@link BlockKindReference} to its `exact`-tier selector form.
62
+ *
63
+ * The export direction: a block implements exactly one kind version, so export
64
+ * always emits `{name}@X.Y.Z`. Validates on the way through, so a
65
+ * malformed stored reference fails at the boundary rather than in the file.
66
+ */
67
+ function kindReferenceToSelectorReference(ref) {
68
+ const { name, version } = require_block_kind_ref.parseKindRef(ref);
69
+ return formatKindSelectorReference({
70
+ name,
71
+ selector: parseKindSelector(version)
72
+ });
73
+ }
74
+ /** Whether `value` is a well-formed `{name}@{selector}` string. */
75
+ function isBlockKindSelectorReference(value) {
76
+ if (typeof value !== "string") return false;
77
+ try {
78
+ parseKindSelectorReference(value);
79
+ return true;
80
+ } catch {
81
+ return false;
82
+ }
83
+ }
84
+ //#endregion
85
+ exports.formatKindSelector = formatKindSelector;
86
+ exports.formatKindSelectorReference = formatKindSelectorReference;
87
+ exports.isBlockKindSelectorReference = isBlockKindSelectorReference;
88
+ exports.kindReferenceToSelectorReference = kindReferenceToSelectorReference;
89
+ exports.parseKindSelector = parseKindSelector;
90
+ exports.parseKindSelectorReference = parseKindSelectorReference;
91
+
92
+ //# sourceMappingURL=kind_selector.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind_selector.cjs","names":["splitVersionedName","parseKindRef"],"sources":["../../src/template/kind_selector.ts"],"sourcesContent":["import type { Branded } from \"@milaboratories/helpers\";\nimport type { BlockKindReference } from \"../bmodel/block_kind_ref\";\nimport { parseKindRef, splitVersionedName } from \"../bmodel/block_kind_ref\";\n\n/**\n * Version-selection tier of a template entry's `kind` field.\n *\n * - `exact` — `X.Y.Z`: this version and no other.\n * - `patch` — `~X.Y.Z`: patch floor, behavior frozen.\n * - `minor` — `^X.Y.Z`: minor floor, behavior floats.\n */\nexport type KindSelectorOp = \"exact\" | \"patch\" | \"minor\";\n\n/** The version half of a `{name}@{selector}` kind reference, split into parts. */\nexport type KindSelector = {\n readonly op: KindSelectorOp;\n readonly version: string;\n};\n\n/**\n * On-wire reference to a *set* of block kind versions: `{name}@{selector}`, e.g.\n * `@platforma-open/milaboratories.mixcr-clonotyping.kind@~1.2.0`.\n *\n * The template-file form of a kind reference, and the only form the\n * `template-v1` schema accepts in an entry's `kind` field. It is the same string\n * shape as {@link BlockKindReference} widened by the `~`/`^` tiers, but branded\n * separately so a *resolved* kind reference is never silently passed where a\n * selector is expected, or vice versa. Widen an exact reference explicitly with\n * {@link kindReferenceToSelectorReference}.\n */\nexport type BlockKindSelectorReference = Branded<string, \"BlockKindSelectorReference\">;\n\n/** `X.Y.Z` with optional semver prerelease and build metadata. */\nconst semVerRegex =\n /^\\d+\\.\\d+\\.\\d+(?:-[\\dA-Za-z-]+(?:\\.[\\dA-Za-z-]+)*)?(?:\\+[\\dA-Za-z-]+(?:\\.[\\dA-Za-z-]+)*)?$/;\n\n/**\n * Split a raw selector string (`1.2.0`, `~1.2.0`, `^1.2.0`) into its parts.\n *\n * The version is validated as `X.Y.Z`, so a range that is legal npm but not part\n * of the kind grammar (`>=1.0.0`, `1.x`, `latest`) is rejected here rather than\n * reaching resolution. Note the deliberate divergence from\n * `tools/block-tools`'s `parseSelector`, which additionally tolerates a leading\n * `@` as `exact`: after the `{name}@{selector}` split a leading `@` can only\n * come from a doubled separator, which is malformed.\n *\n * Mapping a selector onto a concrete version is resolution, not parsing, and\n * lives with the resolver (`kind_resolver.selectorToRange`).\n *\n * @throws if the version part is not `X.Y.Z`\n */\nexport function parseKindSelector(raw: string): KindSelector {\n const s = raw.trim();\n const op: KindSelectorOp = s.startsWith(\"~\") ? \"patch\" : s.startsWith(\"^\") ? \"minor\" : \"exact\";\n const version = op === \"exact\" ? s : s.slice(1);\n if (!semVerRegex.test(version)) {\n throw new Error(\n `Malformed kind version selector (expected 'X.Y.Z', '~X.Y.Z' or '^X.Y.Z'): ${raw}`,\n );\n }\n return { op, version };\n}\n\n/** Render a {@link KindSelector} back to its on-wire string. */\nexport function formatKindSelector(sel: KindSelector): string {\n switch (sel.op) {\n case \"exact\":\n return sel.version;\n case \"patch\":\n return `~${sel.version}`;\n case \"minor\":\n return `^${sel.version}`;\n }\n}\n\n/**\n * Split a {@link BlockKindSelectorReference} into `{ name, selector }`.\n *\n * @throws if the reference carries no version segment, or the selector is\n * outside the `X.Y.Z` / `~X.Y.Z` / `^X.Y.Z` grammar\n */\nexport function parseKindSelectorReference(ref: BlockKindSelectorReference): {\n name: string;\n selector: KindSelector;\n} {\n const { name, version } = splitVersionedName(ref, \"kind selector reference\", \"{name}@{selector}\");\n return { name, selector: parseKindSelector(version) };\n}\n\n/**\n * Compose a {@link BlockKindSelectorReference} from a name and selector.\n *\n * A formatter, not a validator — pass a selector that came from\n * {@link parseKindSelector} or that you constructed from a known-good version.\n */\nexport function formatKindSelectorReference(k: {\n name: string;\n selector: KindSelector;\n}): BlockKindSelectorReference {\n return `${k.name}@${formatKindSelector(k.selector)}` as BlockKindSelectorReference;\n}\n\n/**\n * Widen a resolved {@link BlockKindReference} to its `exact`-tier selector form.\n *\n * The export direction: a block implements exactly one kind version, so export\n * always emits `{name}@X.Y.Z`. Validates on the way through, so a\n * malformed stored reference fails at the boundary rather than in the file.\n */\nexport function kindReferenceToSelectorReference(\n ref: BlockKindReference,\n): BlockKindSelectorReference {\n const { name, version } = parseKindRef(ref);\n return formatKindSelectorReference({ name, selector: parseKindSelector(version) });\n}\n\n/** Whether `value` is a well-formed `{name}@{selector}` string. */\nexport function isBlockKindSelectorReference(value: unknown): value is BlockKindSelectorReference {\n if (typeof value !== \"string\") return false;\n try {\n parseKindSelectorReference(value as BlockKindSelectorReference);\n return true;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;AAiCA,MAAM,cACJ;;;;;;;;;;;;;;;;AAiBF,SAAgB,kBAAkB,KAA2B;CAC3D,MAAM,IAAI,IAAI,KAAK;CACnB,MAAM,KAAqB,EAAE,WAAW,GAAG,IAAI,UAAU,EAAE,WAAW,GAAG,IAAI,UAAU;CACvF,MAAM,UAAU,OAAO,UAAU,IAAI,EAAE,MAAM,CAAC;CAC9C,IAAI,CAAC,YAAY,KAAK,OAAO,GAC3B,MAAM,IAAI,MACR,6EAA6E,KAC/E;CAEF,OAAO;EAAE;EAAI;CAAQ;AACvB;;AAGA,SAAgB,mBAAmB,KAA2B;CAC5D,QAAQ,IAAI,IAAZ;EACE,KAAK,SACH,OAAO,IAAI;EACb,KAAK,SACH,OAAO,IAAI,IAAI;EACjB,KAAK,SACH,OAAO,IAAI,IAAI;CACnB;AACF;;;;;;;AAQA,SAAgB,2BAA2B,KAGzC;CACA,MAAM,EAAE,MAAM,YAAYA,uBAAAA,mBAAmB,KAAK,2BAA2B,mBAAmB;CAChG,OAAO;EAAE;EAAM,UAAU,kBAAkB,OAAO;CAAE;AACtD;;;;;;;AAQA,SAAgB,4BAA4B,GAGb;CAC7B,OAAO,GAAG,EAAE,KAAK,GAAG,mBAAmB,EAAE,QAAQ;AACnD;;;;;;;;AASA,SAAgB,iCACd,KAC4B;CAC5B,MAAM,EAAE,MAAM,YAAYC,uBAAAA,aAAa,GAAG;CAC1C,OAAO,4BAA4B;EAAE;EAAM,UAAU,kBAAkB,OAAO;CAAE,CAAC;AACnF;;AAGA,SAAgB,6BAA6B,OAAqD;CAChG,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,IAAI;EACF,2BAA2B,KAAmC;EAC9D,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF"}
@@ -0,0 +1,78 @@
1
+ import { BlockKindReference } from "../bmodel/block_kind_ref.js";
2
+ import { Branded } from "@milaboratories/helpers";
3
+ //#region src/template/kind_selector.d.ts
4
+ /**
5
+ * Version-selection tier of a template entry's `kind` field.
6
+ *
7
+ * - `exact` — `X.Y.Z`: this version and no other.
8
+ * - `patch` — `~X.Y.Z`: patch floor, behavior frozen.
9
+ * - `minor` — `^X.Y.Z`: minor floor, behavior floats.
10
+ */
11
+ export type KindSelectorOp = "exact" | "patch" | "minor";
12
+ /** The version half of a `{name}@{selector}` kind reference, split into parts. */
13
+ export type KindSelector = {
14
+ readonly op: KindSelectorOp;
15
+ readonly version: string;
16
+ };
17
+ /**
18
+ * On-wire reference to a *set* of block kind versions: `{name}@{selector}`, e.g.
19
+ * `@platforma-open/milaboratories.mixcr-clonotyping.kind@~1.2.0`.
20
+ *
21
+ * The template-file form of a kind reference, and the only form the
22
+ * `template-v1` schema accepts in an entry's `kind` field. It is the same string
23
+ * shape as {@link BlockKindReference} widened by the `~`/`^` tiers, but branded
24
+ * separately so a *resolved* kind reference is never silently passed where a
25
+ * selector is expected, or vice versa. Widen an exact reference explicitly with
26
+ * {@link kindReferenceToSelectorReference}.
27
+ */
28
+ export type BlockKindSelectorReference = Branded<string, "BlockKindSelectorReference">;
29
+ /**
30
+ * Split a raw selector string (`1.2.0`, `~1.2.0`, `^1.2.0`) into its parts.
31
+ *
32
+ * The version is validated as `X.Y.Z`, so a range that is legal npm but not part
33
+ * of the kind grammar (`>=1.0.0`, `1.x`, `latest`) is rejected here rather than
34
+ * reaching resolution. Note the deliberate divergence from
35
+ * `tools/block-tools`'s `parseSelector`, which additionally tolerates a leading
36
+ * `@` as `exact`: after the `{name}@{selector}` split a leading `@` can only
37
+ * come from a doubled separator, which is malformed.
38
+ *
39
+ * Mapping a selector onto a concrete version is resolution, not parsing, and
40
+ * lives with the resolver (`kind_resolver.selectorToRange`).
41
+ *
42
+ * @throws if the version part is not `X.Y.Z`
43
+ */
44
+ export declare function parseKindSelector(raw: string): KindSelector;
45
+ /** Render a {@link KindSelector} back to its on-wire string. */
46
+ export declare function formatKindSelector(sel: KindSelector): string;
47
+ /**
48
+ * Split a {@link BlockKindSelectorReference} into `{ name, selector }`.
49
+ *
50
+ * @throws if the reference carries no version segment, or the selector is
51
+ * outside the `X.Y.Z` / `~X.Y.Z` / `^X.Y.Z` grammar
52
+ */
53
+ export declare function parseKindSelectorReference(ref: BlockKindSelectorReference): {
54
+ name: string;
55
+ selector: KindSelector;
56
+ };
57
+ /**
58
+ * Compose a {@link BlockKindSelectorReference} from a name and selector.
59
+ *
60
+ * A formatter, not a validator — pass a selector that came from
61
+ * {@link parseKindSelector} or that you constructed from a known-good version.
62
+ */
63
+ export declare function formatKindSelectorReference(k: {
64
+ name: string;
65
+ selector: KindSelector;
66
+ }): BlockKindSelectorReference;
67
+ /**
68
+ * Widen a resolved {@link BlockKindReference} to its `exact`-tier selector form.
69
+ *
70
+ * The export direction: a block implements exactly one kind version, so export
71
+ * always emits `{name}@X.Y.Z`. Validates on the way through, so a
72
+ * malformed stored reference fails at the boundary rather than in the file.
73
+ */
74
+ export declare function kindReferenceToSelectorReference(ref: BlockKindReference): BlockKindSelectorReference;
75
+ /** Whether `value` is a well-formed `{name}@{selector}` string. */
76
+ export declare function isBlockKindSelectorReference(value: unknown): value is BlockKindSelectorReference;
77
+ //#endregion
78
+ //# sourceMappingURL=kind_selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind_selector.d.ts","names":[],"sources":["../../src/template/kind_selector.ts"],"mappings":";;;;;;;;;;YAWY;;YAGA;WACD,IAAI;WACJ;;;;;;;;;;;;;YAcC,6BAA6B;;;;;;;;;;;;;;;;wBAqBzB,kBAAkB,cAAc;;wBAahC,mBAAmB,KAAK;;;;;;;wBAiBxB,2BAA2B,KAAK;EAC9C;EACA,UAAU;;;;;;;;wBAYI,4BAA4B;EAC1C;EACA,UAAU;IACR;;;;;;;;wBAWY,iCACd,KAAK,qBACJ;;wBAMa,6BAA6B,iBAAiB,SAAS"}
@@ -0,0 +1,87 @@
1
+ import { parseKindRef, splitVersionedName } from "../bmodel/block_kind_ref.js";
2
+ //#region src/template/kind_selector.ts
3
+ /** `X.Y.Z` with optional semver prerelease and build metadata. */
4
+ const semVerRegex = /^\d+\.\d+\.\d+(?:-[\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*)?(?:\+[\dA-Za-z-]+(?:\.[\dA-Za-z-]+)*)?$/;
5
+ /**
6
+ * Split a raw selector string (`1.2.0`, `~1.2.0`, `^1.2.0`) into its parts.
7
+ *
8
+ * The version is validated as `X.Y.Z`, so a range that is legal npm but not part
9
+ * of the kind grammar (`>=1.0.0`, `1.x`, `latest`) is rejected here rather than
10
+ * reaching resolution. Note the deliberate divergence from
11
+ * `tools/block-tools`'s `parseSelector`, which additionally tolerates a leading
12
+ * `@` as `exact`: after the `{name}@{selector}` split a leading `@` can only
13
+ * come from a doubled separator, which is malformed.
14
+ *
15
+ * Mapping a selector onto a concrete version is resolution, not parsing, and
16
+ * lives with the resolver (`kind_resolver.selectorToRange`).
17
+ *
18
+ * @throws if the version part is not `X.Y.Z`
19
+ */
20
+ function parseKindSelector(raw) {
21
+ const s = raw.trim();
22
+ const op = s.startsWith("~") ? "patch" : s.startsWith("^") ? "minor" : "exact";
23
+ const version = op === "exact" ? s : s.slice(1);
24
+ if (!semVerRegex.test(version)) throw new Error(`Malformed kind version selector (expected 'X.Y.Z', '~X.Y.Z' or '^X.Y.Z'): ${raw}`);
25
+ return {
26
+ op,
27
+ version
28
+ };
29
+ }
30
+ /** Render a {@link KindSelector} back to its on-wire string. */
31
+ function formatKindSelector(sel) {
32
+ switch (sel.op) {
33
+ case "exact": return sel.version;
34
+ case "patch": return `~${sel.version}`;
35
+ case "minor": return `^${sel.version}`;
36
+ }
37
+ }
38
+ /**
39
+ * Split a {@link BlockKindSelectorReference} into `{ name, selector }`.
40
+ *
41
+ * @throws if the reference carries no version segment, or the selector is
42
+ * outside the `X.Y.Z` / `~X.Y.Z` / `^X.Y.Z` grammar
43
+ */
44
+ function parseKindSelectorReference(ref) {
45
+ const { name, version } = splitVersionedName(ref, "kind selector reference", "{name}@{selector}");
46
+ return {
47
+ name,
48
+ selector: parseKindSelector(version)
49
+ };
50
+ }
51
+ /**
52
+ * Compose a {@link BlockKindSelectorReference} from a name and selector.
53
+ *
54
+ * A formatter, not a validator — pass a selector that came from
55
+ * {@link parseKindSelector} or that you constructed from a known-good version.
56
+ */
57
+ function formatKindSelectorReference(k) {
58
+ return `${k.name}@${formatKindSelector(k.selector)}`;
59
+ }
60
+ /**
61
+ * Widen a resolved {@link BlockKindReference} to its `exact`-tier selector form.
62
+ *
63
+ * The export direction: a block implements exactly one kind version, so export
64
+ * always emits `{name}@X.Y.Z`. Validates on the way through, so a
65
+ * malformed stored reference fails at the boundary rather than in the file.
66
+ */
67
+ function kindReferenceToSelectorReference(ref) {
68
+ const { name, version } = parseKindRef(ref);
69
+ return formatKindSelectorReference({
70
+ name,
71
+ selector: parseKindSelector(version)
72
+ });
73
+ }
74
+ /** Whether `value` is a well-formed `{name}@{selector}` string. */
75
+ function isBlockKindSelectorReference(value) {
76
+ if (typeof value !== "string") return false;
77
+ try {
78
+ parseKindSelectorReference(value);
79
+ return true;
80
+ } catch {
81
+ return false;
82
+ }
83
+ }
84
+ //#endregion
85
+ export { formatKindSelector, formatKindSelectorReference, isBlockKindSelectorReference, kindReferenceToSelectorReference, parseKindSelector, parseKindSelectorReference };
86
+
87
+ //# sourceMappingURL=kind_selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kind_selector.js","names":[],"sources":["../../src/template/kind_selector.ts"],"sourcesContent":["import type { Branded } from \"@milaboratories/helpers\";\nimport type { BlockKindReference } from \"../bmodel/block_kind_ref\";\nimport { parseKindRef, splitVersionedName } from \"../bmodel/block_kind_ref\";\n\n/**\n * Version-selection tier of a template entry's `kind` field.\n *\n * - `exact` — `X.Y.Z`: this version and no other.\n * - `patch` — `~X.Y.Z`: patch floor, behavior frozen.\n * - `minor` — `^X.Y.Z`: minor floor, behavior floats.\n */\nexport type KindSelectorOp = \"exact\" | \"patch\" | \"minor\";\n\n/** The version half of a `{name}@{selector}` kind reference, split into parts. */\nexport type KindSelector = {\n readonly op: KindSelectorOp;\n readonly version: string;\n};\n\n/**\n * On-wire reference to a *set* of block kind versions: `{name}@{selector}`, e.g.\n * `@platforma-open/milaboratories.mixcr-clonotyping.kind@~1.2.0`.\n *\n * The template-file form of a kind reference, and the only form the\n * `template-v1` schema accepts in an entry's `kind` field. It is the same string\n * shape as {@link BlockKindReference} widened by the `~`/`^` tiers, but branded\n * separately so a *resolved* kind reference is never silently passed where a\n * selector is expected, or vice versa. Widen an exact reference explicitly with\n * {@link kindReferenceToSelectorReference}.\n */\nexport type BlockKindSelectorReference = Branded<string, \"BlockKindSelectorReference\">;\n\n/** `X.Y.Z` with optional semver prerelease and build metadata. */\nconst semVerRegex =\n /^\\d+\\.\\d+\\.\\d+(?:-[\\dA-Za-z-]+(?:\\.[\\dA-Za-z-]+)*)?(?:\\+[\\dA-Za-z-]+(?:\\.[\\dA-Za-z-]+)*)?$/;\n\n/**\n * Split a raw selector string (`1.2.0`, `~1.2.0`, `^1.2.0`) into its parts.\n *\n * The version is validated as `X.Y.Z`, so a range that is legal npm but not part\n * of the kind grammar (`>=1.0.0`, `1.x`, `latest`) is rejected here rather than\n * reaching resolution. Note the deliberate divergence from\n * `tools/block-tools`'s `parseSelector`, which additionally tolerates a leading\n * `@` as `exact`: after the `{name}@{selector}` split a leading `@` can only\n * come from a doubled separator, which is malformed.\n *\n * Mapping a selector onto a concrete version is resolution, not parsing, and\n * lives with the resolver (`kind_resolver.selectorToRange`).\n *\n * @throws if the version part is not `X.Y.Z`\n */\nexport function parseKindSelector(raw: string): KindSelector {\n const s = raw.trim();\n const op: KindSelectorOp = s.startsWith(\"~\") ? \"patch\" : s.startsWith(\"^\") ? \"minor\" : \"exact\";\n const version = op === \"exact\" ? s : s.slice(1);\n if (!semVerRegex.test(version)) {\n throw new Error(\n `Malformed kind version selector (expected 'X.Y.Z', '~X.Y.Z' or '^X.Y.Z'): ${raw}`,\n );\n }\n return { op, version };\n}\n\n/** Render a {@link KindSelector} back to its on-wire string. */\nexport function formatKindSelector(sel: KindSelector): string {\n switch (sel.op) {\n case \"exact\":\n return sel.version;\n case \"patch\":\n return `~${sel.version}`;\n case \"minor\":\n return `^${sel.version}`;\n }\n}\n\n/**\n * Split a {@link BlockKindSelectorReference} into `{ name, selector }`.\n *\n * @throws if the reference carries no version segment, or the selector is\n * outside the `X.Y.Z` / `~X.Y.Z` / `^X.Y.Z` grammar\n */\nexport function parseKindSelectorReference(ref: BlockKindSelectorReference): {\n name: string;\n selector: KindSelector;\n} {\n const { name, version } = splitVersionedName(ref, \"kind selector reference\", \"{name}@{selector}\");\n return { name, selector: parseKindSelector(version) };\n}\n\n/**\n * Compose a {@link BlockKindSelectorReference} from a name and selector.\n *\n * A formatter, not a validator — pass a selector that came from\n * {@link parseKindSelector} or that you constructed from a known-good version.\n */\nexport function formatKindSelectorReference(k: {\n name: string;\n selector: KindSelector;\n}): BlockKindSelectorReference {\n return `${k.name}@${formatKindSelector(k.selector)}` as BlockKindSelectorReference;\n}\n\n/**\n * Widen a resolved {@link BlockKindReference} to its `exact`-tier selector form.\n *\n * The export direction: a block implements exactly one kind version, so export\n * always emits `{name}@X.Y.Z`. Validates on the way through, so a\n * malformed stored reference fails at the boundary rather than in the file.\n */\nexport function kindReferenceToSelectorReference(\n ref: BlockKindReference,\n): BlockKindSelectorReference {\n const { name, version } = parseKindRef(ref);\n return formatKindSelectorReference({ name, selector: parseKindSelector(version) });\n}\n\n/** Whether `value` is a well-formed `{name}@{selector}` string. */\nexport function isBlockKindSelectorReference(value: unknown): value is BlockKindSelectorReference {\n if (typeof value !== \"string\") return false;\n try {\n parseKindSelectorReference(value as BlockKindSelectorReference);\n return true;\n } catch {\n return false;\n }\n}\n"],"mappings":";;;AAiCA,MAAM,cACJ;;;;;;;;;;;;;;;;AAiBF,SAAgB,kBAAkB,KAA2B;CAC3D,MAAM,IAAI,IAAI,KAAK;CACnB,MAAM,KAAqB,EAAE,WAAW,GAAG,IAAI,UAAU,EAAE,WAAW,GAAG,IAAI,UAAU;CACvF,MAAM,UAAU,OAAO,UAAU,IAAI,EAAE,MAAM,CAAC;CAC9C,IAAI,CAAC,YAAY,KAAK,OAAO,GAC3B,MAAM,IAAI,MACR,6EAA6E,KAC/E;CAEF,OAAO;EAAE;EAAI;CAAQ;AACvB;;AAGA,SAAgB,mBAAmB,KAA2B;CAC5D,QAAQ,IAAI,IAAZ;EACE,KAAK,SACH,OAAO,IAAI;EACb,KAAK,SACH,OAAO,IAAI,IAAI;EACjB,KAAK,SACH,OAAO,IAAI,IAAI;CACnB;AACF;;;;;;;AAQA,SAAgB,2BAA2B,KAGzC;CACA,MAAM,EAAE,MAAM,YAAY,mBAAmB,KAAK,2BAA2B,mBAAmB;CAChG,OAAO;EAAE;EAAM,UAAU,kBAAkB,OAAO;CAAE;AACtD;;;;;;;AAQA,SAAgB,4BAA4B,GAGb;CAC7B,OAAO,GAAG,EAAE,KAAK,GAAG,mBAAmB,EAAE,QAAQ;AACnD;;;;;;;;AASA,SAAgB,iCACd,KAC4B;CAC5B,MAAM,EAAE,MAAM,YAAY,aAAa,GAAG;CAC1C,OAAO,4BAA4B;EAAE;EAAM,UAAU,kBAAkB,OAAO;CAAE,CAAC;AACnF;;AAGA,SAAgB,6BAA6B,OAAqD;CAChG,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,IAAI;EACF,2BAA2B,KAAmC;EAC9D,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF"}