@fgv/ts-res 5.0.0-9 → 5.0.1-1

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 (384) hide show
  1. package/CHANGELOG.json +21 -0
  2. package/CHANGELOG.md +14 -1
  3. package/README.md +794 -137
  4. package/dist/ts-res.d.ts +2257 -268
  5. package/dist/tsdoc-metadata.json +1 -1
  6. package/eslint.config.js +16 -0
  7. package/lib/index.d.ts +2 -1
  8. package/lib/index.js +3 -1
  9. package/lib/packlets/bundle/bundleBuilder.js +7 -4
  10. package/lib/packlets/bundle/bundleLoader.js +1 -0
  11. package/lib/packlets/bundle/bundleUtils.js +14 -16
  12. package/lib/packlets/bundle/index.d.ts +3 -1
  13. package/lib/packlets/bundle/index.js +14 -3
  14. package/lib/packlets/common/convert.d.ts +15 -0
  15. package/lib/packlets/common/convert.js +16 -1
  16. package/lib/packlets/common/helpers/context.js +1 -0
  17. package/lib/packlets/common/helpers/resources.d.ts +7 -0
  18. package/lib/packlets/common/helpers/resources.js +13 -0
  19. package/lib/packlets/common/resources.d.ts +44 -1
  20. package/lib/packlets/common/validate/conditions.d.ts +17 -1
  21. package/lib/packlets/common/validate/conditions.js +32 -6
  22. package/lib/packlets/common/validate/regularExpressions.d.ts +4 -0
  23. package/lib/packlets/common/validate/regularExpressions.js +5 -1
  24. package/lib/packlets/common/validate/resources.d.ts +35 -1
  25. package/lib/packlets/common/validate/resources.js +55 -0
  26. package/lib/packlets/conditions/condition.js +1 -0
  27. package/lib/packlets/conditions/conditionSet.d.ts +9 -0
  28. package/lib/packlets/conditions/conditionSet.js +75 -1
  29. package/lib/packlets/config/configInitFactory.d.ts +217 -0
  30. package/lib/packlets/config/configInitFactory.js +302 -0
  31. package/lib/packlets/config/convert.d.ts +9 -0
  32. package/lib/packlets/config/convert.js +12 -1
  33. package/lib/packlets/config/index.d.ts +1 -0
  34. package/lib/packlets/config/index.js +1 -0
  35. package/lib/packlets/config/json.d.ts +1 -1
  36. package/lib/packlets/config/systemConfiguration.d.ts +16 -3
  37. package/lib/packlets/config/systemConfiguration.js +19 -40
  38. package/lib/packlets/import/fsItem.d.ts +2 -1
  39. package/lib/packlets/import/fsItem.js +9 -13
  40. package/lib/packlets/import/importManager.d.ts +2 -1
  41. package/lib/packlets/import/importers/jsonImporter.js +1 -0
  42. package/lib/packlets/import/importers/pathImporter.d.ts +2 -1
  43. package/lib/packlets/import/importers/pathImporter.js +2 -1
  44. package/lib/packlets/qualifier-types/config/convert.d.ts +22 -1
  45. package/lib/packlets/qualifier-types/config/convert.js +67 -2
  46. package/lib/packlets/qualifier-types/config/json.d.ts +24 -2
  47. package/lib/packlets/qualifier-types/config/json.js +11 -0
  48. package/lib/packlets/qualifier-types/convert.d.ts +1 -1
  49. package/lib/packlets/qualifier-types/helpers.d.ts +14 -5
  50. package/lib/packlets/qualifier-types/helpers.js +2 -2
  51. package/lib/packlets/qualifier-types/languageQualifierType.d.ts +28 -2
  52. package/lib/packlets/qualifier-types/languageQualifierType.js +73 -0
  53. package/lib/packlets/qualifier-types/literalQualifierType.d.ts +31 -5
  54. package/lib/packlets/qualifier-types/literalQualifierType.js +75 -0
  55. package/lib/packlets/qualifier-types/literalValueHierarchy.d.ts +7 -11
  56. package/lib/packlets/qualifier-types/literalValueHierarchy.js +12 -1
  57. package/lib/packlets/qualifier-types/qualifierType.d.ts +31 -2
  58. package/lib/packlets/qualifier-types/territoryQualifierType.d.ts +31 -5
  59. package/lib/packlets/qualifier-types/territoryQualifierType.js +80 -0
  60. package/lib/packlets/qualifiers/qualifierCollector.js +1 -2
  61. package/lib/packlets/resource-json/compiled/convert.js +2 -1
  62. package/lib/packlets/resource-json/compiled/json.d.ts +6 -2
  63. package/lib/packlets/resource-types/config/convert.d.ts +1 -1
  64. package/lib/packlets/resource-types/config/convert.js +3 -1
  65. package/lib/packlets/resource-types/config/json.d.ts +3 -1
  66. package/lib/packlets/resource-types/jsonResourceType.d.ts +10 -1
  67. package/lib/packlets/resource-types/jsonResourceType.js +7 -3
  68. package/lib/packlets/resource-types/resourceType.d.ts +100 -8
  69. package/lib/packlets/resource-types/resourceType.js +39 -3
  70. package/lib/packlets/resources/candidateReducer.js +3 -0
  71. package/lib/packlets/resources/candidateValue.d.ts +92 -0
  72. package/lib/packlets/resources/candidateValue.js +128 -0
  73. package/lib/packlets/resources/candidateValueCollector.d.ts +55 -0
  74. package/lib/packlets/resources/candidateValueCollector.js +96 -0
  75. package/lib/packlets/resources/common.d.ts +14 -0
  76. package/lib/packlets/resources/deltaGenerator.d.ts +189 -0
  77. package/lib/packlets/resources/deltaGenerator.js +344 -0
  78. package/lib/packlets/resources/index.d.ts +3 -0
  79. package/lib/packlets/resources/index.js +3 -0
  80. package/lib/packlets/resources/resource.d.ts +6 -6
  81. package/lib/packlets/resources/resource.js +5 -10
  82. package/lib/packlets/resources/resourceBuilder.d.ts +6 -0
  83. package/lib/packlets/resources/resourceBuilder.js +4 -1
  84. package/lib/packlets/resources/resourceCandidate.d.ts +15 -2
  85. package/lib/packlets/resources/resourceCandidate.js +17 -5
  86. package/lib/packlets/resources/resourceManagerBuilder.d.ts +131 -10
  87. package/lib/packlets/resources/resourceManagerBuilder.js +289 -45
  88. package/lib/packlets/runtime/compiledResourceCollection.d.ts +27 -11
  89. package/lib/packlets/runtime/compiledResourceCollection.js +71 -28
  90. package/lib/packlets/runtime/conditionSetResolutionResult.js +3 -0
  91. package/lib/packlets/runtime/context/contextQualifierProvider.d.ts +53 -3
  92. package/lib/packlets/runtime/context/contextQualifierProviderValidator.d.ts +82 -37
  93. package/lib/packlets/runtime/context/contextQualifierProviderValidator.js +49 -77
  94. package/lib/packlets/runtime/context/simpleContextQualifierProvider.d.ts +23 -2
  95. package/lib/packlets/runtime/context/simpleContextQualifierProvider.js +53 -31
  96. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.d.ts +4 -4
  97. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.js +2 -2
  98. package/lib/packlets/runtime/iResourceManager.d.ts +17 -5
  99. package/lib/packlets/runtime/index.d.ts +1 -0
  100. package/lib/packlets/runtime/index.js +1 -0
  101. package/lib/packlets/runtime/resource-tree/common.d.ts +1 -1
  102. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.d.ts +7 -7
  103. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.js +5 -5
  104. package/lib/packlets/runtime/resourceResolver.d.ts +43 -1
  105. package/lib/packlets/runtime/resourceResolver.js +56 -28
  106. package/lib/packlets/runtime/resourceTreeResolver.d.ts +152 -0
  107. package/lib/packlets/runtime/resourceTreeResolver.js +222 -0
  108. package/lib/packlets/runtime/validate.js +1 -0
  109. package/lib/packlets/zip-archive/convert.d.ts +52 -0
  110. package/lib/packlets/zip-archive/convert.js +103 -0
  111. package/lib/packlets/zip-archive/index.d.ts +23 -0
  112. package/lib/packlets/zip-archive/index.js +95 -0
  113. package/lib/packlets/zip-archive/json.d.ts +64 -0
  114. package/lib/packlets/zip-archive/json.js +24 -0
  115. package/lib/packlets/zip-archive/types.d.ts +98 -0
  116. package/lib/packlets/zip-archive/types.js +39 -0
  117. package/lib/packlets/zip-archive/zipArchiveCreator.d.ts +35 -0
  118. package/lib/packlets/zip-archive/zipArchiveCreator.js +195 -0
  119. package/lib/packlets/zip-archive/zipArchiveFormat.d.ts +70 -0
  120. package/lib/packlets/zip-archive/zipArchiveFormat.js +184 -0
  121. package/lib/packlets/zip-archive/zipArchiveLoader.d.ts +70 -0
  122. package/lib/packlets/zip-archive/zipArchiveLoader.js +286 -0
  123. package/package.json +26 -32
  124. package/CLAUDE.md +0 -186
  125. package/EXAMPLE_INIT_PARAMS.md +0 -88
  126. package/PROGRESS_SUMMARY.md +0 -48
  127. package/lib/index.d.ts.map +0 -1
  128. package/lib/index.js.map +0 -1
  129. package/lib/packlets/bundle/bundleBuilder.d.ts.map +0 -1
  130. package/lib/packlets/bundle/bundleBuilder.js.map +0 -1
  131. package/lib/packlets/bundle/bundleLoader.d.ts.map +0 -1
  132. package/lib/packlets/bundle/bundleLoader.js.map +0 -1
  133. package/lib/packlets/bundle/bundleNormalizer.d.ts.map +0 -1
  134. package/lib/packlets/bundle/bundleNormalizer.js.map +0 -1
  135. package/lib/packlets/bundle/bundleUtils.d.ts.map +0 -1
  136. package/lib/packlets/bundle/bundleUtils.js.map +0 -1
  137. package/lib/packlets/bundle/convert.d.ts.map +0 -1
  138. package/lib/packlets/bundle/convert.js.map +0 -1
  139. package/lib/packlets/bundle/index.d.ts.map +0 -1
  140. package/lib/packlets/bundle/index.js.map +0 -1
  141. package/lib/packlets/bundle/model.d.ts.map +0 -1
  142. package/lib/packlets/bundle/model.js.map +0 -1
  143. package/lib/packlets/common/conditions.d.ts.map +0 -1
  144. package/lib/packlets/common/conditions.js.map +0 -1
  145. package/lib/packlets/common/convert.d.ts.map +0 -1
  146. package/lib/packlets/common/convert.js.map +0 -1
  147. package/lib/packlets/common/helpers/conditions.d.ts.map +0 -1
  148. package/lib/packlets/common/helpers/conditions.js.map +0 -1
  149. package/lib/packlets/common/helpers/context.d.ts.map +0 -1
  150. package/lib/packlets/common/helpers/context.js.map +0 -1
  151. package/lib/packlets/common/helpers/index.d.ts.map +0 -1
  152. package/lib/packlets/common/helpers/index.js.map +0 -1
  153. package/lib/packlets/common/helpers/qualifierDefaultValues.d.ts.map +0 -1
  154. package/lib/packlets/common/helpers/qualifierDefaultValues.js.map +0 -1
  155. package/lib/packlets/common/helpers/resources.d.ts.map +0 -1
  156. package/lib/packlets/common/helpers/resources.js.map +0 -1
  157. package/lib/packlets/common/index.d.ts.map +0 -1
  158. package/lib/packlets/common/index.js.map +0 -1
  159. package/lib/packlets/common/resources.d.ts.map +0 -1
  160. package/lib/packlets/common/resources.js.map +0 -1
  161. package/lib/packlets/common/validate/conditions.d.ts.map +0 -1
  162. package/lib/packlets/common/validate/conditions.js.map +0 -1
  163. package/lib/packlets/common/validate/index.d.ts.map +0 -1
  164. package/lib/packlets/common/validate/index.js.map +0 -1
  165. package/lib/packlets/common/validate/regularExpressions.d.ts.map +0 -1
  166. package/lib/packlets/common/validate/regularExpressions.js.map +0 -1
  167. package/lib/packlets/common/validate/resources.d.ts.map +0 -1
  168. package/lib/packlets/common/validate/resources.js.map +0 -1
  169. package/lib/packlets/conditions/condition.d.ts.map +0 -1
  170. package/lib/packlets/conditions/condition.js.map +0 -1
  171. package/lib/packlets/conditions/conditionCollector.d.ts.map +0 -1
  172. package/lib/packlets/conditions/conditionCollector.js.map +0 -1
  173. package/lib/packlets/conditions/conditionDecls.d.ts.map +0 -1
  174. package/lib/packlets/conditions/conditionDecls.js.map +0 -1
  175. package/lib/packlets/conditions/conditionSet.d.ts.map +0 -1
  176. package/lib/packlets/conditions/conditionSet.js.map +0 -1
  177. package/lib/packlets/conditions/conditionSetCollector.d.ts.map +0 -1
  178. package/lib/packlets/conditions/conditionSetCollector.js.map +0 -1
  179. package/lib/packlets/conditions/conditionSetDecls.d.ts.map +0 -1
  180. package/lib/packlets/conditions/conditionSetDecls.js.map +0 -1
  181. package/lib/packlets/conditions/conditionToken.d.ts.map +0 -1
  182. package/lib/packlets/conditions/conditionToken.js.map +0 -1
  183. package/lib/packlets/conditions/convert/conditionSetDecls.d.ts.map +0 -1
  184. package/lib/packlets/conditions/convert/conditionSetDecls.js.map +0 -1
  185. package/lib/packlets/conditions/convert/decls.d.ts.map +0 -1
  186. package/lib/packlets/conditions/convert/decls.js.map +0 -1
  187. package/lib/packlets/conditions/convert/index.d.ts.map +0 -1
  188. package/lib/packlets/conditions/convert/index.js.map +0 -1
  189. package/lib/packlets/conditions/index.d.ts.map +0 -1
  190. package/lib/packlets/conditions/index.js.map +0 -1
  191. package/lib/packlets/config/common.d.ts.map +0 -1
  192. package/lib/packlets/config/common.js.map +0 -1
  193. package/lib/packlets/config/convert.d.ts.map +0 -1
  194. package/lib/packlets/config/convert.js.map +0 -1
  195. package/lib/packlets/config/index.d.ts.map +0 -1
  196. package/lib/packlets/config/index.js.map +0 -1
  197. package/lib/packlets/config/json.d.ts.map +0 -1
  198. package/lib/packlets/config/json.js.map +0 -1
  199. package/lib/packlets/config/predefined/default.d.ts.map +0 -1
  200. package/lib/packlets/config/predefined/default.js.map +0 -1
  201. package/lib/packlets/config/predefined/extended.d.ts.map +0 -1
  202. package/lib/packlets/config/predefined/extended.js.map +0 -1
  203. package/lib/packlets/config/predefined/index.d.ts.map +0 -1
  204. package/lib/packlets/config/predefined/index.js.map +0 -1
  205. package/lib/packlets/config/systemConfiguration.d.ts.map +0 -1
  206. package/lib/packlets/config/systemConfiguration.js.map +0 -1
  207. package/lib/packlets/context/contextDecls.d.ts.map +0 -1
  208. package/lib/packlets/context/contextDecls.js.map +0 -1
  209. package/lib/packlets/context/contextToken.d.ts.map +0 -1
  210. package/lib/packlets/context/contextToken.js.map +0 -1
  211. package/lib/packlets/context/convert/decls.d.ts.map +0 -1
  212. package/lib/packlets/context/convert/decls.js.map +0 -1
  213. package/lib/packlets/context/convert/index.d.ts.map +0 -1
  214. package/lib/packlets/context/convert/index.js.map +0 -1
  215. package/lib/packlets/context/index.d.ts.map +0 -1
  216. package/lib/packlets/context/index.js.map +0 -1
  217. package/lib/packlets/decisions/abstractDecision.d.ts.map +0 -1
  218. package/lib/packlets/decisions/abstractDecision.js.map +0 -1
  219. package/lib/packlets/decisions/abstractDecisionCollector.d.ts.map +0 -1
  220. package/lib/packlets/decisions/abstractDecisionCollector.js.map +0 -1
  221. package/lib/packlets/decisions/candidate.d.ts.map +0 -1
  222. package/lib/packlets/decisions/candidate.js.map +0 -1
  223. package/lib/packlets/decisions/common.d.ts.map +0 -1
  224. package/lib/packlets/decisions/common.js.map +0 -1
  225. package/lib/packlets/decisions/concreteDecision.d.ts.map +0 -1
  226. package/lib/packlets/decisions/concreteDecision.js.map +0 -1
  227. package/lib/packlets/decisions/decision.d.ts.map +0 -1
  228. package/lib/packlets/decisions/decision.js.map +0 -1
  229. package/lib/packlets/decisions/index.d.ts.map +0 -1
  230. package/lib/packlets/decisions/index.js.map +0 -1
  231. package/lib/packlets/import/fsItem.d.ts.map +0 -1
  232. package/lib/packlets/import/fsItem.js.map +0 -1
  233. package/lib/packlets/import/importContext.d.ts.map +0 -1
  234. package/lib/packlets/import/importContext.js.map +0 -1
  235. package/lib/packlets/import/importManager.d.ts.map +0 -1
  236. package/lib/packlets/import/importManager.js.map +0 -1
  237. package/lib/packlets/import/importable.d.ts.map +0 -1
  238. package/lib/packlets/import/importable.js.map +0 -1
  239. package/lib/packlets/import/importers/collectionImporter.d.ts.map +0 -1
  240. package/lib/packlets/import/importers/collectionImporter.js.map +0 -1
  241. package/lib/packlets/import/importers/fsItemImporter.d.ts.map +0 -1
  242. package/lib/packlets/import/importers/fsItemImporter.js.map +0 -1
  243. package/lib/packlets/import/importers/importer.d.ts.map +0 -1
  244. package/lib/packlets/import/importers/importer.js.map +0 -1
  245. package/lib/packlets/import/importers/index.d.ts.map +0 -1
  246. package/lib/packlets/import/importers/index.js.map +0 -1
  247. package/lib/packlets/import/importers/jsonImporter.d.ts.map +0 -1
  248. package/lib/packlets/import/importers/jsonImporter.js.map +0 -1
  249. package/lib/packlets/import/importers/pathImporter.d.ts.map +0 -1
  250. package/lib/packlets/import/importers/pathImporter.js.map +0 -1
  251. package/lib/packlets/import/index.d.ts.map +0 -1
  252. package/lib/packlets/import/index.js.map +0 -1
  253. package/lib/packlets/qualifier-types/config/convert.d.ts.map +0 -1
  254. package/lib/packlets/qualifier-types/config/convert.js.map +0 -1
  255. package/lib/packlets/qualifier-types/config/index.d.ts.map +0 -1
  256. package/lib/packlets/qualifier-types/config/index.js.map +0 -1
  257. package/lib/packlets/qualifier-types/config/json.d.ts.map +0 -1
  258. package/lib/packlets/qualifier-types/config/json.js.map +0 -1
  259. package/lib/packlets/qualifier-types/convert.d.ts.map +0 -1
  260. package/lib/packlets/qualifier-types/convert.js.map +0 -1
  261. package/lib/packlets/qualifier-types/helpers.d.ts.map +0 -1
  262. package/lib/packlets/qualifier-types/helpers.js.map +0 -1
  263. package/lib/packlets/qualifier-types/index.d.ts.map +0 -1
  264. package/lib/packlets/qualifier-types/index.js.map +0 -1
  265. package/lib/packlets/qualifier-types/languageQualifierType.d.ts.map +0 -1
  266. package/lib/packlets/qualifier-types/languageQualifierType.js.map +0 -1
  267. package/lib/packlets/qualifier-types/literalQualifierType.d.ts.map +0 -1
  268. package/lib/packlets/qualifier-types/literalQualifierType.js.map +0 -1
  269. package/lib/packlets/qualifier-types/literalValueHierarchy.d.ts.map +0 -1
  270. package/lib/packlets/qualifier-types/literalValueHierarchy.js.map +0 -1
  271. package/lib/packlets/qualifier-types/qualifierType.d.ts.map +0 -1
  272. package/lib/packlets/qualifier-types/qualifierType.js.map +0 -1
  273. package/lib/packlets/qualifier-types/qualifierTypeCollector.d.ts.map +0 -1
  274. package/lib/packlets/qualifier-types/qualifierTypeCollector.js.map +0 -1
  275. package/lib/packlets/qualifier-types/territoryQualifierType.d.ts.map +0 -1
  276. package/lib/packlets/qualifier-types/territoryQualifierType.js.map +0 -1
  277. package/lib/packlets/qualifiers/convert/decls.d.ts.map +0 -1
  278. package/lib/packlets/qualifiers/convert/decls.js.map +0 -1
  279. package/lib/packlets/qualifiers/convert/index.d.ts.map +0 -1
  280. package/lib/packlets/qualifiers/convert/index.js.map +0 -1
  281. package/lib/packlets/qualifiers/convert/qualifier.d.ts.map +0 -1
  282. package/lib/packlets/qualifiers/convert/qualifier.js.map +0 -1
  283. package/lib/packlets/qualifiers/index.d.ts.map +0 -1
  284. package/lib/packlets/qualifiers/index.js.map +0 -1
  285. package/lib/packlets/qualifiers/qualifier.d.ts.map +0 -1
  286. package/lib/packlets/qualifiers/qualifier.js.map +0 -1
  287. package/lib/packlets/qualifiers/qualifierCollector.d.ts.map +0 -1
  288. package/lib/packlets/qualifiers/qualifierCollector.js.map +0 -1
  289. package/lib/packlets/qualifiers/qualifierDecl.d.ts.map +0 -1
  290. package/lib/packlets/qualifiers/qualifierDecl.js.map +0 -1
  291. package/lib/packlets/qualifiers/qualifierDefaultValueDecls.d.ts.map +0 -1
  292. package/lib/packlets/qualifiers/qualifierDefaultValueDecls.js.map +0 -1
  293. package/lib/packlets/qualifiers/qualifierDefaultValueToken.d.ts.map +0 -1
  294. package/lib/packlets/qualifiers/qualifierDefaultValueToken.js.map +0 -1
  295. package/lib/packlets/resource-json/compiled/common.d.ts.map +0 -1
  296. package/lib/packlets/resource-json/compiled/common.js.map +0 -1
  297. package/lib/packlets/resource-json/compiled/convert.d.ts.map +0 -1
  298. package/lib/packlets/resource-json/compiled/convert.js.map +0 -1
  299. package/lib/packlets/resource-json/compiled/index.d.ts.map +0 -1
  300. package/lib/packlets/resource-json/compiled/index.js.map +0 -1
  301. package/lib/packlets/resource-json/compiled/json.d.ts.map +0 -1
  302. package/lib/packlets/resource-json/compiled/json.js.map +0 -1
  303. package/lib/packlets/resource-json/convert.d.ts.map +0 -1
  304. package/lib/packlets/resource-json/convert.js.map +0 -1
  305. package/lib/packlets/resource-json/helpers.d.ts.map +0 -1
  306. package/lib/packlets/resource-json/helpers.js.map +0 -1
  307. package/lib/packlets/resource-json/index.d.ts.map +0 -1
  308. package/lib/packlets/resource-json/index.js.map +0 -1
  309. package/lib/packlets/resource-json/json.d.ts.map +0 -1
  310. package/lib/packlets/resource-json/json.js.map +0 -1
  311. package/lib/packlets/resource-json/normalized.d.ts.map +0 -1
  312. package/lib/packlets/resource-json/normalized.js.map +0 -1
  313. package/lib/packlets/resource-json/resourceDeclCollection.d.ts.map +0 -1
  314. package/lib/packlets/resource-json/resourceDeclCollection.js.map +0 -1
  315. package/lib/packlets/resource-json/resourceDeclContainer.d.ts.map +0 -1
  316. package/lib/packlets/resource-json/resourceDeclContainer.js.map +0 -1
  317. package/lib/packlets/resource-json/resourceDeclTree.d.ts.map +0 -1
  318. package/lib/packlets/resource-json/resourceDeclTree.js.map +0 -1
  319. package/lib/packlets/resource-types/config/convert.d.ts.map +0 -1
  320. package/lib/packlets/resource-types/config/convert.js.map +0 -1
  321. package/lib/packlets/resource-types/config/index.d.ts.map +0 -1
  322. package/lib/packlets/resource-types/config/index.js.map +0 -1
  323. package/lib/packlets/resource-types/config/json.d.ts.map +0 -1
  324. package/lib/packlets/resource-types/config/json.js.map +0 -1
  325. package/lib/packlets/resource-types/helpers.d.ts.map +0 -1
  326. package/lib/packlets/resource-types/helpers.js.map +0 -1
  327. package/lib/packlets/resource-types/index.d.ts.map +0 -1
  328. package/lib/packlets/resource-types/index.js.map +0 -1
  329. package/lib/packlets/resource-types/jsonResourceType.d.ts.map +0 -1
  330. package/lib/packlets/resource-types/jsonResourceType.js.map +0 -1
  331. package/lib/packlets/resource-types/resourceType.d.ts.map +0 -1
  332. package/lib/packlets/resource-types/resourceType.js.map +0 -1
  333. package/lib/packlets/resource-types/resourceTypeCollector.d.ts.map +0 -1
  334. package/lib/packlets/resource-types/resourceTypeCollector.js.map +0 -1
  335. package/lib/packlets/resources/candidateReducer.d.ts.map +0 -1
  336. package/lib/packlets/resources/candidateReducer.js.map +0 -1
  337. package/lib/packlets/resources/common.d.ts.map +0 -1
  338. package/lib/packlets/resources/common.js.map +0 -1
  339. package/lib/packlets/resources/index.d.ts.map +0 -1
  340. package/lib/packlets/resources/index.js.map +0 -1
  341. package/lib/packlets/resources/resource.d.ts.map +0 -1
  342. package/lib/packlets/resources/resource.js.map +0 -1
  343. package/lib/packlets/resources/resourceBuilder.d.ts.map +0 -1
  344. package/lib/packlets/resources/resourceBuilder.js.map +0 -1
  345. package/lib/packlets/resources/resourceCandidate.d.ts.map +0 -1
  346. package/lib/packlets/resources/resourceCandidate.js.map +0 -1
  347. package/lib/packlets/resources/resourceManagerBuilder.d.ts.map +0 -1
  348. package/lib/packlets/resources/resourceManagerBuilder.js.map +0 -1
  349. package/lib/packlets/runtime/cacheListener.d.ts.map +0 -1
  350. package/lib/packlets/runtime/cacheListener.js.map +0 -1
  351. package/lib/packlets/runtime/cacheMetrics.d.ts.map +0 -1
  352. package/lib/packlets/runtime/cacheMetrics.js.map +0 -1
  353. package/lib/packlets/runtime/compiledResourceCollection.d.ts.map +0 -1
  354. package/lib/packlets/runtime/compiledResourceCollection.js.map +0 -1
  355. package/lib/packlets/runtime/conditionSetResolutionResult.d.ts.map +0 -1
  356. package/lib/packlets/runtime/conditionSetResolutionResult.js.map +0 -1
  357. package/lib/packlets/runtime/context/contextQualifierProvider.d.ts.map +0 -1
  358. package/lib/packlets/runtime/context/contextQualifierProvider.js.map +0 -1
  359. package/lib/packlets/runtime/context/contextQualifierProviderValidator.d.ts.map +0 -1
  360. package/lib/packlets/runtime/context/contextQualifierProviderValidator.js.map +0 -1
  361. package/lib/packlets/runtime/context/index.d.ts.map +0 -1
  362. package/lib/packlets/runtime/context/index.js.map +0 -1
  363. package/lib/packlets/runtime/context/simpleContextQualifierProvider.d.ts.map +0 -1
  364. package/lib/packlets/runtime/context/simpleContextQualifierProvider.js.map +0 -1
  365. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.d.ts.map +0 -1
  366. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.js.map +0 -1
  367. package/lib/packlets/runtime/iResourceManager.d.ts.map +0 -1
  368. package/lib/packlets/runtime/iResourceManager.js.map +0 -1
  369. package/lib/packlets/runtime/index.d.ts.map +0 -1
  370. package/lib/packlets/runtime/index.js.map +0 -1
  371. package/lib/packlets/runtime/resource-tree/common.d.ts.map +0 -1
  372. package/lib/packlets/runtime/resource-tree/common.js.map +0 -1
  373. package/lib/packlets/runtime/resource-tree/index.d.ts.map +0 -1
  374. package/lib/packlets/runtime/resource-tree/index.js.map +0 -1
  375. package/lib/packlets/runtime/resource-tree/readOnlyResourceTree.d.ts.map +0 -1
  376. package/lib/packlets/runtime/resource-tree/readOnlyResourceTree.js.map +0 -1
  377. package/lib/packlets/runtime/resource-tree/resourceTreeChildren.d.ts.map +0 -1
  378. package/lib/packlets/runtime/resource-tree/resourceTreeChildren.js.map +0 -1
  379. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.d.ts.map +0 -1
  380. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.js.map +0 -1
  381. package/lib/packlets/runtime/resourceResolver.d.ts.map +0 -1
  382. package/lib/packlets/runtime/resourceResolver.js.map +0 -1
  383. package/lib/packlets/runtime/validate.d.ts.map +0 -1
  384. package/lib/packlets/runtime/validate.js.map +0 -1
@@ -75,19 +75,25 @@ const Context = __importStar(require("../context"));
75
75
  */
76
76
  class CompiledResourceCollection {
77
77
  /**
78
- * A {@link QualifierTypes.QualifierTypeCollector | QualifierTypeCollector} which
78
+ * A {@link QualifierTypes.ReadOnlyQualifierTypeCollector | ReadOnlyQualifierTypeCollector} which
79
79
  * contains the {@link QualifierTypes.QualifierType | qualifier types} used in this collection.
80
80
  */
81
81
  get qualifierTypes() {
82
82
  return this._qualifierTypes;
83
83
  }
84
84
  /**
85
- * A {@link Qualifiers.QualifierCollector | QualifierCollector} which
85
+ * A {@link Qualifiers.IReadOnlyQualifierCollector | ReadOnlyQualifierCollector} which
86
86
  * contains the {@link Qualifiers.Qualifier | qualifiers} used in this collection.
87
87
  */
88
88
  get qualifiers() {
89
89
  return this._qualifiers;
90
90
  }
91
+ /**
92
+ * The resource IDs contained in this compiled resource collection.
93
+ */
94
+ get resourceIds() {
95
+ return Array.from(this._builtResources.keys()).sort();
96
+ }
91
97
  /**
92
98
  * A {@link ResourceTypes.ResourceTypeCollector | ResourceTypeCollector} which
93
99
  * contains the {@link ResourceTypes.ResourceType | resource types} used in this collection.
@@ -95,6 +101,12 @@ class CompiledResourceCollection {
95
101
  get resourceTypes() {
96
102
  return this._resourceTypes;
97
103
  }
104
+ /**
105
+ * The candidate values in the collection.
106
+ */
107
+ get candidateValues() {
108
+ return this._candidateValues;
109
+ }
98
110
  /**
99
111
  * {@inheritdoc Runtime.IResourceManager.builtResources}
100
112
  */
@@ -133,6 +145,7 @@ class CompiledResourceCollection {
133
145
  this.conditions = conditionCollector;
134
146
  this.conditionSets = conditionSetCollector;
135
147
  this.decisions = decisionCollector;
148
+ this._candidateValues = [...params.compiledCollection.candidateValues];
136
149
  // Build resources from compiled data
137
150
  this._builtResources = this._buildResources(params.compiledCollection, this._resourceTypes, decisionCollector).orThrow();
138
151
  }
@@ -257,6 +270,7 @@ class CompiledResourceCollection {
257
270
  const conditionCollector = conditionCollectorResult.value;
258
271
  for (const [index, compiledCondition] of compiled.conditions.entries()) {
259
272
  const qualifierResult = qualifiers.getAt(compiledCondition.qualifierIndex);
273
+ /* c8 ignore next 5 - defensive coding: invalid qualifier index should not occur in compiled data */
260
274
  if (qualifierResult.isFailure()) {
261
275
  errors.addMessage(`Invalid qualifier index ${compiledCondition.qualifierIndex} at condition ${index}: ${qualifierResult.message}`);
262
276
  continue;
@@ -354,6 +368,7 @@ class CompiledResourceCollection {
354
368
  const decisionCollector = decisionCollectorResult.value;
355
369
  for (const [index, compiledDecision] of compiled.decisions.entries()) {
356
370
  const referencedConditionSetsResult = (0, ts_utils_1.mapResults)(compiledDecision.conditionSets.map((conditionSetIndex) => conditionSets.getAt(conditionSetIndex)));
371
+ /* c8 ignore next 5 - defensive coding: condition set resolution should not fail with valid compiled data */
357
372
  if (referencedConditionSetsResult.isFailure()) {
358
373
  errors.addMessage(`Failed to resolve condition sets for decision ${index}: ${referencedConditionSetsResult.message}`);
359
374
  continue;
@@ -381,6 +396,22 @@ class CompiledResourceCollection {
381
396
  }
382
397
  return errors.hasMessages ? (0, ts_utils_1.fail)(errors.toString()) : (0, ts_utils_1.succeed)(decisionCollector);
383
398
  }
399
+ /**
400
+ * Gets a candidate value from the collection.
401
+ * @param valueIndex - The index of the candidate value to get.
402
+ * @returns
403
+ */
404
+ _getCandidateValue(valueIndex) {
405
+ /* c8 ignore next 3 - defensive coding: candidate value index should be valid in compiled data */
406
+ if (valueIndex < 0 || valueIndex >= this._candidateValues.length) {
407
+ return (0, ts_utils_1.fail)(`Invalid candidate value index ${valueIndex}`);
408
+ }
409
+ /* c8 ignore next 3 - defensive coding for invalid candidate value conversion */
410
+ if (!(0, ts_json_base_1.isJsonObject)(this._candidateValues[valueIndex])) {
411
+ return (0, ts_utils_1.fail)(`${valueIndex}: candidate value not a JSON object.`);
412
+ }
413
+ return (0, ts_utils_1.succeed)(this._candidateValues[valueIndex]);
414
+ }
384
415
  /**
385
416
  * Reconstructs a ValidatingResultMap of resources from compiled data.
386
417
  * @param compiled - The compiled resource collection
@@ -400,66 +431,78 @@ class CompiledResourceCollection {
400
431
  })
401
432
  });
402
433
  for (const compiledResource of compiled.resources) {
403
- const resourceTypeResult = resourceTypes.getAt(compiledResource.type);
404
- if (resourceTypeResult.isFailure()) {
405
- errors.addMessage(`Invalid resource type index ${compiledResource.type} for resource ${compiledResource.id}: ${resourceTypeResult.message}`);
434
+ const resourceType = resourceTypes
435
+ .getAt(compiledResource.type)
436
+ .aggregateError(errors, (message) => `Invalid resource type index ${compiledResource.type} for resource ${compiledResource.id}: ${message}`)
437
+ .orDefault();
438
+ /* c8 ignore next 3 - defensive coding: resource type index should be valid in compiled data */
439
+ if (resourceType === undefined) {
406
440
  continue;
407
441
  }
408
- const resourceType = resourceTypeResult.value;
409
- const decisionResult = decisions.getAt(compiledResource.decision);
410
- if (decisionResult.isFailure()) {
411
- errors.addMessage(`Invalid decision index ${compiledResource.decision} for resource ${compiledResource.id}: ${decisionResult.message}`);
442
+ const decision = decisions
443
+ .getAt(compiledResource.decision)
444
+ .aggregateError(errors, (message) => `Invalid decision index ${compiledResource.decision} for resource ${compiledResource.id}: ${message}`)
445
+ .orDefault();
446
+ /* c8 ignore next 3 - defensive coding: decision index should be valid in compiled data */
447
+ if (decision === undefined) {
412
448
  continue;
413
449
  }
414
- const decision = decisionResult.value;
415
450
  // Build candidates from compiled data
416
- const candidateDeclsResult = (0, ts_utils_1.mapResults)(compiledResource.candidates.map((compiledCandidate) => ts_json_base_1.Converters.jsonObject.convert(compiledCandidate.json).onSuccess((json) => {
451
+ const candidateDecls = (0, ts_utils_1.mapResults)(compiledResource.candidates.map((compiledCandidate) => this._getCandidateValue(compiledCandidate.valueIndex)
452
+ .aggregateError(errors, (message) => `Failed to convert candidate JSON for resource ${compiledResource.id}: ${message}`)
453
+ .onSuccess((json) => {
417
454
  return (0, ts_utils_1.succeed)({
418
455
  json,
419
456
  isPartial: compiledCandidate.isPartial,
420
457
  mergeMethod: compiledCandidate.mergeMethod
421
458
  });
422
- })));
423
- if (candidateDeclsResult.isFailure()) {
424
- errors.addMessage(`Failed to convert candidate JSON for resource ${compiledResource.id}: ${candidateDeclsResult.message}`);
459
+ })))
460
+ .aggregateError(errors, (message) => `Failed to convert candidate JSON for resource ${compiledResource.id}: ${message}`)
461
+ .orDefault();
462
+ /* c8 ignore next 3 - defensive coding: candidate JSON conversion should not fail with valid compiled data */
463
+ if (candidateDecls === undefined) {
425
464
  continue;
426
465
  }
427
- const candidateDecls = candidateDeclsResult.value;
428
466
  // Create minimal candidates that implement IResourceCandidate
429
467
  const candidates = candidateDecls.map((candidateDecl) => ({
430
468
  json: candidateDecl.json,
431
469
  isPartial: candidateDecl.isPartial,
432
470
  mergeMethod: candidateDecl.mergeMethod
433
471
  }));
434
- // Create a ConcreteDecision from the abstract decision and candidate values
435
472
  const candidatesWithConditionSets = decision.candidates.map((baseCandidate, idx) => ({
436
473
  conditionSet: baseCandidate.conditionSet,
437
474
  value: candidates[idx].json
438
475
  }));
439
- const concreteDecisionResult = decisions_2.ConcreteDecision.create({
476
+ const concreteDecision = decisions_2.ConcreteDecision.create({
440
477
  decisions,
441
478
  candidates: candidatesWithConditionSets
442
- });
443
- /* c8 ignore next 6 - defensive coding for ConcreteDecision creation failure */
444
- if (concreteDecisionResult.isFailure()) {
445
- errors.addMessage(`Failed to create concrete decision for resource ${compiledResource.id}: ${concreteDecisionResult.message}`);
479
+ })
480
+ .aggregateError(errors, (message) => `Failed to create concrete decision for resource ${compiledResource.id}: ${message}`)
481
+ .orDefault();
482
+ /* c8 ignore next 3 - defensive coding for ConcreteDecision creation failure */
483
+ if (concreteDecision === undefined) {
484
+ continue;
485
+ }
486
+ const name = common_1.Helpers.getNameForResourceId(compiledResource.id)
487
+ .aggregateError(errors, (message) => `Failed to get name for resource ${compiledResource.id}: ${message}`)
488
+ .orDefault();
489
+ /* c8 ignore next 3 - defensive coding: name should be valid in compiled data */
490
+ if (name === undefined) {
446
491
  continue;
447
492
  }
448
- const concreteDecision = concreteDecisionResult.value;
449
493
  // Create minimal resource that implements IResource
450
494
  const resource = {
451
495
  id: compiledResource.id,
496
+ name,
452
497
  resourceType,
453
498
  decision: concreteDecision,
454
499
  candidates
455
500
  };
456
- const setResult = resourceMap.set(compiledResource.id, resource);
457
- /* c8 ignore next 3 - defensive coding for resource map set failure */
458
- if (setResult.isFailure()) {
459
- errors.addMessage(`Failed to add resource ${compiledResource.id}: ${setResult.message}`);
460
- }
501
+ resourceMap
502
+ .set(compiledResource.id, resource)
503
+ .aggregateError(errors, (message) => `Failed to add resource ${compiledResource.id}: ${message}`);
461
504
  }
462
- return errors.hasMessages ? (0, ts_utils_1.fail)(errors.toString()) : (0, ts_utils_1.succeed)(resourceMap);
505
+ return errors.returnOrReport((0, ts_utils_1.succeed)(resourceMap));
463
506
  }
464
507
  }
465
508
  exports.CompiledResourceCollection = CompiledResourceCollection;
@@ -72,6 +72,7 @@ class ConditionSetResolutionResult {
72
72
  return -1;
73
73
  }
74
74
  else if (a.matchType === 'matchAsDefault') {
75
+ /* c8 ignore next 5 - edge case comparison for matchAsDefault rarely hit in practice */
75
76
  if (b.matchType === 'match') {
76
77
  return 1;
77
78
  }
@@ -80,6 +81,7 @@ class ConditionSetResolutionResult {
80
81
  }
81
82
  }
82
83
  else {
84
+ /* c8 ignore next 7 - edge case comparison for noMatch rarely hit in practice */
83
85
  // a.matchType === 'noMatch'
84
86
  if (b.matchType === 'noMatch') {
85
87
  return 0;
@@ -100,6 +102,7 @@ class ConditionSetResolutionResult {
100
102
  }
101
103
  // If priority matches, compare score
102
104
  const scoreDiff = matchB.score - matchA.score;
105
+ /* c8 ignore next 3 - edge case: score comparison when priorities are equal */
103
106
  if (scoreDiff !== 0) {
104
107
  return scoreDiff;
105
108
  }
@@ -2,11 +2,12 @@ import { Result } from '@fgv/ts-utils';
2
2
  import { QualifierName, QualifierContextValue, QualifierIndex } from '../../common';
3
3
  import { IReadOnlyQualifierCollector, Qualifier } from '../../qualifiers';
4
4
  /**
5
- * Abstract interface for providing qualifier values in an optimized runtime context.
5
+ * Base interface for providing qualifier values in an optimized runtime context.
6
+ * Contains common read-only operations shared by both mutable and immutable providers.
6
7
  * Acts as a property bag using the Result pattern for qualifier value lookups.
7
8
  * @public
8
9
  */
9
- export interface IContextQualifierProvider {
10
+ export interface IContextQualifierProviderBase {
10
11
  /**
11
12
  * Gets a qualifier value by its name, index, or qualifier object.
12
13
  * @param nameOrIndexOrQualifier - The {@link QualifierName | qualifier name}, {@link QualifierIndex | index}, or {@link Qualifiers.Qualifier | qualifier object} to look up.
@@ -39,12 +40,61 @@ export interface IContextQualifierProvider {
39
40
  */
40
41
  readonly qualifiers: IReadOnlyQualifierCollector;
41
42
  }
43
+ /**
44
+ * Read-only interface for providing qualifier values in an optimized runtime context.
45
+ * Explicitly marked as immutable with compile-time type discrimination.
46
+ * @public
47
+ */
48
+ export interface IReadOnlyContextQualifierProvider extends IContextQualifierProviderBase {
49
+ /**
50
+ * Explicit mutability marker for compile-time type discrimination.
51
+ * Always `false` for read-only providers.
52
+ */
53
+ readonly mutable: false;
54
+ }
55
+ /**
56
+ * Mutable interface for providing qualifier values in an optimized runtime context.
57
+ * Extends the base interface with mutation operations and explicit mutability marker.
58
+ * @public
59
+ */
60
+ export interface IMutableContextQualifierProvider extends IContextQualifierProviderBase {
61
+ /**
62
+ * Explicit mutability marker for compile-time type discrimination.
63
+ * Always `true` for mutable providers.
64
+ */
65
+ readonly mutable: true;
66
+ /**
67
+ * Sets a qualifier value in this provider.
68
+ * @param name - The {@link QualifierName | qualifier name} to set.
69
+ * @param value - The {@link QualifierContextValue | qualifier context value} to set.
70
+ * @returns `Success` with the set {@link QualifierContextValue | qualifier context value} if successful,
71
+ * or `Failure` with an error message if not.
72
+ */
73
+ set(name: QualifierName, value: QualifierContextValue): Result<QualifierContextValue>;
74
+ /**
75
+ * Removes a qualifier value from this provider.
76
+ * @param name - The {@link QualifierName | qualifier name} to remove.
77
+ * @returns `Success` with the removed {@link QualifierContextValue | qualifier context value} if successful,
78
+ * or `Failure` with an error message if not found or an error occurs.
79
+ */
80
+ remove(name: QualifierName): Result<QualifierContextValue>;
81
+ /**
82
+ * Clears all qualifier values from this provider.
83
+ */
84
+ clear(): void;
85
+ }
86
+ /**
87
+ * Union type for context qualifier providers that can be either read-only or mutable.
88
+ * Provides compile-time type discrimination via the `mutable` property.
89
+ * @public
90
+ */
91
+ export type IContextQualifierProvider = IReadOnlyContextQualifierProvider | IMutableContextQualifierProvider;
42
92
  /**
43
93
  * Abstract base class for implementing context qualifier providers.
44
94
  * Provides common functionality and enforces the contract for derived classes.
45
95
  * @public
46
96
  */
47
- export declare abstract class ContextQualifierProvider implements IContextQualifierProvider {
97
+ export declare abstract class ContextQualifierProvider implements IContextQualifierProviderBase {
48
98
  /**
49
99
  * The readonly qualifier collector that defines and validates the qualifiers for this context.
50
100
  */
@@ -1,18 +1,19 @@
1
1
  import { Result } from '@fgv/ts-utils';
2
2
  import { QualifierContextValue } from '../../common';
3
3
  import { IReadOnlyQualifierCollector } from '../../qualifiers';
4
- import { IContextQualifierProvider } from './contextQualifierProvider';
4
+ import { IContextQualifierProvider, IReadOnlyContextQualifierProvider, IMutableContextQualifierProvider } from './contextQualifierProvider';
5
5
  /**
6
- * A read-only interface exposing non-mutating methods of a {@link Runtime.Context.ContextQualifierProviderValidator | ContextQualifierProviderValidator}.
6
+ * Base interface for shared operations between read-only and mutable context qualifier provider validators.
7
+ * Contains common methods that don't depend on provider mutability.
7
8
  * @public
8
9
  */
9
- export interface IReadOnlyContextQualifierProviderValidator {
10
+ export interface IContextQualifierProviderValidatorBase<T extends IContextQualifierProvider = IContextQualifierProvider> {
10
11
  /**
11
- * {@inheritdoc Runtime.Context.ContextQualifierProviderValidator.provider}
12
+ * The wrapped context qualifier provider.
12
13
  */
13
- readonly provider: IContextQualifierProvider;
14
+ readonly provider: T;
14
15
  /**
15
- * {@inheritdoc Runtime.Context.ContextQualifierProviderValidator.qualifiers}
16
+ * The readonly qualifier collector that defines and validates the qualifiers for this context.
16
17
  */
17
18
  readonly qualifiers: IReadOnlyQualifierCollector;
18
19
  /**
@@ -50,6 +51,28 @@ export interface IReadOnlyContextQualifierProviderValidator {
50
51
  * or `Failure` with an error message if an error occurs during the check.
51
52
  */
52
53
  has(name: string): Result<boolean>;
54
+ }
55
+ /**
56
+ * A read-only interface for validators wrapping read-only context qualifier providers.
57
+ * Only exposes read operations, providing compile-time type safety by excluding mutation methods.
58
+ * @public
59
+ */
60
+ export interface IReadOnlyContextQualifierProviderValidator<T extends IReadOnlyContextQualifierProvider = IReadOnlyContextQualifierProvider> {
61
+ /**
62
+ * The wrapped read-only context qualifier provider.
63
+ */
64
+ readonly provider: T;
65
+ }
66
+ /**
67
+ * A mutable interface for validators wrapping mutable context qualifier providers.
68
+ * Extends the base interface with mutation operations and provides compile-time type safety.
69
+ * @public
70
+ */
71
+ export interface IMutableContextQualifierProviderValidator<T extends IMutableContextQualifierProvider = IMutableContextQualifierProvider> extends IContextQualifierProviderValidatorBase<T> {
72
+ /**
73
+ * The wrapped mutable context qualifier provider.
74
+ */
75
+ readonly provider: T;
53
76
  /**
54
77
  * Sets a qualifier value using string inputs, converting to strongly-typed values.
55
78
  * @param name - The string name to convert.
@@ -67,32 +90,37 @@ export interface IReadOnlyContextQualifierProviderValidator {
67
90
  remove(name: string): Result<QualifierContextValue>;
68
91
  }
69
92
  /**
70
- * Parameters for constructing a {@link Runtime.Context.ContextQualifierProviderValidator | ContextQualifierProviderValidator}.
93
+ * Parameters for constructing a read-only context qualifier provider validator.
94
+ * @public
95
+ */
96
+ export interface IReadOnlyContextQualifierProviderValidatorCreateParams<T extends IReadOnlyContextQualifierProvider = IReadOnlyContextQualifierProvider> {
97
+ provider: T;
98
+ }
99
+ /**
100
+ * Parameters for constructing a mutable context qualifier provider validator.
71
101
  * @public
72
102
  */
73
- export interface IContextQualifierProviderValidatorCreateParams {
74
- provider: IContextQualifierProvider;
103
+ export interface IMutableContextQualifierProviderValidatorCreateParams<T extends IMutableContextQualifierProvider = IMutableContextQualifierProvider> {
104
+ provider: T;
75
105
  }
76
106
  /**
77
- * A wrapper for {@link Runtime.Context.IContextQualifierProvider | IContextQualifierProvider} that accepts
78
- * string inputs and converts them to strongly-typed values before calling the wrapped provider.
79
- * This eliminates the need for type casting in consumer code while maintaining type safety.
107
+ * Union type for validator constructor parameters.
80
108
  * @public
81
109
  */
82
- export declare class ContextQualifierProviderValidator implements IReadOnlyContextQualifierProviderValidator {
110
+ export type IContextQualifierProviderValidatorCreateParams = IReadOnlyContextQualifierProviderValidatorCreateParams | IMutableContextQualifierProviderValidatorCreateParams;
111
+ /**
112
+ * Base implementation class containing shared validation logic for both read-only and mutable validators.
113
+ * @internal
114
+ */
115
+ declare abstract class BaseContextQualifierProviderValidator<T extends IContextQualifierProvider = IContextQualifierProvider> implements IContextQualifierProviderValidatorBase<T> {
83
116
  /**
84
117
  * The wrapped context qualifier provider.
85
118
  */
86
- readonly provider: IContextQualifierProvider;
119
+ abstract readonly provider: T;
87
120
  /**
88
121
  * The readonly qualifier collector that defines and validates the qualifiers for this context.
89
122
  */
90
123
  get qualifiers(): IReadOnlyQualifierCollector;
91
- /**
92
- * Constructs a new {@link Runtime.Context.ContextQualifierProviderValidator | ContextQualifierProviderValidator}.
93
- * @param params - Required parameters for constructing the validator.
94
- */
95
- constructor(params: IContextQualifierProviderValidatorCreateParams);
96
124
  /**
97
125
  * Gets a qualifier value by its string name, converting to strongly-typed QualifierName.
98
126
  * @param name - The string name to convert and look up.
@@ -128,6 +156,40 @@ export declare class ContextQualifierProviderValidator implements IReadOnlyConte
128
156
  * or `Failure` with an error message if an error occurs during the check.
129
157
  */
130
158
  has(name: string): Result<boolean>;
159
+ }
160
+ /**
161
+ * A validator for read-only context qualifier providers that accepts string inputs
162
+ * and converts them to strongly-typed values before calling the wrapped provider.
163
+ * Only provides read operations for compile-time type safety.
164
+ * @public
165
+ */
166
+ export declare class ReadOnlyContextQualifierProviderValidator<T extends IReadOnlyContextQualifierProvider = IReadOnlyContextQualifierProvider> extends BaseContextQualifierProviderValidator<T> implements IReadOnlyContextQualifierProviderValidator<T> {
167
+ /**
168
+ * The wrapped read-only context qualifier provider.
169
+ */
170
+ readonly provider: T;
171
+ /**
172
+ * Constructs a new {@link Runtime.Context.ReadOnlyContextQualifierProviderValidator | ReadOnlyContextQualifierProviderValidator}.
173
+ * @param params - Required parameters for constructing the validator.
174
+ */
175
+ constructor(params: IReadOnlyContextQualifierProviderValidatorCreateParams<T>);
176
+ }
177
+ /**
178
+ * A validator for mutable context qualifier providers that accepts string inputs
179
+ * and converts them to strongly-typed values before calling the wrapped provider.
180
+ * Provides both read and mutation operations.
181
+ * @public
182
+ */
183
+ export declare class MutableContextQualifierProviderValidator<T extends IMutableContextQualifierProvider = IMutableContextQualifierProvider> extends BaseContextQualifierProviderValidator<T> implements IMutableContextQualifierProviderValidator<T> {
184
+ /**
185
+ * The wrapped mutable context qualifier provider.
186
+ */
187
+ readonly provider: T;
188
+ /**
189
+ * Constructs a new {@link Runtime.Context.MutableContextQualifierProviderValidator | MutableContextQualifierProviderValidator}.
190
+ * @param params - Required parameters for constructing the validator.
191
+ */
192
+ constructor(params: IMutableContextQualifierProviderValidatorCreateParams<T>);
131
193
  /**
132
194
  * Sets a qualifier value using string inputs, converting to strongly-typed values.
133
195
  * @param name - The string name to convert.
@@ -143,23 +205,6 @@ export declare class ContextQualifierProviderValidator implements IReadOnlyConte
143
205
  * or `Failure` with an error message if an error occurs.
144
206
  */
145
207
  remove(name: string): Result<QualifierContextValue>;
146
- /**
147
- * Validates a string as a QualifierName.
148
- * @param name - The string to validate.
149
- * @returns `Success` with the strongly-typed QualifierName, or `Failure` if invalid.
150
- */
151
- private _validateQualifierName;
152
- /**
153
- * Validates a number as a QualifierIndex.
154
- * @param index - The number to validate.
155
- * @returns `Success` with the strongly-typed QualifierIndex, or `Failure` if invalid.
156
- */
157
- private _validateQualifierIndex;
158
- /**
159
- * Validates a string as a QualifierContextValue.
160
- * @param value - The string to validate.
161
- * @returns `Success` with the strongly-typed QualifierContextValue, or `Failure` if invalid.
162
- */
163
- private _validateQualifierContextValue;
164
208
  }
209
+ export {};
165
210
  //# sourceMappingURL=contextQualifierProviderValidator.d.ts.map
@@ -21,28 +21,20 @@
21
21
  * SOFTWARE.
22
22
  */
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.ContextQualifierProviderValidator = void 0;
24
+ exports.MutableContextQualifierProviderValidator = exports.ReadOnlyContextQualifierProviderValidator = void 0;
25
25
  const ts_utils_1 = require("@fgv/ts-utils");
26
+ const common_1 = require("../../common");
26
27
  /**
27
- * A wrapper for {@link Runtime.Context.IContextQualifierProvider | IContextQualifierProvider} that accepts
28
- * string inputs and converts them to strongly-typed values before calling the wrapped provider.
29
- * This eliminates the need for type casting in consumer code while maintaining type safety.
30
- * @public
28
+ * Base implementation class containing shared validation logic for both read-only and mutable validators.
29
+ * @internal
31
30
  */
32
- class ContextQualifierProviderValidator {
31
+ class BaseContextQualifierProviderValidator {
33
32
  /**
34
33
  * The readonly qualifier collector that defines and validates the qualifiers for this context.
35
34
  */
36
35
  get qualifiers() {
37
36
  return this.provider.qualifiers;
38
37
  }
39
- /**
40
- * Constructs a new {@link Runtime.Context.ContextQualifierProviderValidator | ContextQualifierProviderValidator}.
41
- * @param params - Required parameters for constructing the validator.
42
- */
43
- constructor(params) {
44
- this.provider = params.provider;
45
- }
46
38
  /**
47
39
  * Gets a qualifier value by its string name, converting to strongly-typed QualifierName.
48
40
  * @param name - The string name to convert and look up.
@@ -50,7 +42,7 @@ class ContextQualifierProviderValidator {
50
42
  * or `Failure` with an error message if not found or an error occurs.
51
43
  */
52
44
  get(name) {
53
- return this._validateQualifierName(name).onSuccess((qualifierName) => {
45
+ return common_1.Convert.qualifierName.convert(name).onSuccess((qualifierName) => {
54
46
  return this.provider.get(qualifierName);
55
47
  });
56
48
  }
@@ -61,7 +53,7 @@ class ContextQualifierProviderValidator {
61
53
  * or `Failure` with an error message if not found or an error occurs.
62
54
  */
63
55
  getByIndex(index) {
64
- return this._validateQualifierIndex(index).onSuccess((qualifierIndex) => {
56
+ return common_1.Convert.qualifierIndex.convert(index).onSuccess((qualifierIndex) => {
65
57
  return this.provider.get(qualifierIndex);
66
58
  });
67
59
  }
@@ -72,7 +64,7 @@ class ContextQualifierProviderValidator {
72
64
  * or `Failure` with an error message if not found, invalid, or an error occurs.
73
65
  */
74
66
  getValidated(name) {
75
- return this._validateQualifierName(name).onSuccess((qualifierName) => {
67
+ return common_1.Convert.qualifierName.convert(name).onSuccess((qualifierName) => {
76
68
  return this.provider.getValidated(qualifierName);
77
69
  });
78
70
  }
@@ -83,7 +75,7 @@ class ContextQualifierProviderValidator {
83
75
  * or `Failure` with an error message if not found, invalid, or an error occurs.
84
76
  */
85
77
  getValidatedByIndex(index) {
86
- return this._validateQualifierIndex(index).onSuccess((qualifierIndex) => {
78
+ return common_1.Convert.qualifierIndex.convert(index).onSuccess((qualifierIndex) => {
87
79
  return this.provider.getValidated(qualifierIndex);
88
80
  });
89
81
  }
@@ -94,10 +86,43 @@ class ContextQualifierProviderValidator {
94
86
  * or `Failure` with an error message if an error occurs during the check.
95
87
  */
96
88
  has(name) {
97
- return this._validateQualifierName(name).onSuccess((qualifierName) => {
89
+ return common_1.Convert.qualifierName.convert(name).onSuccess((qualifierName) => {
98
90
  return this.provider.has(qualifierName);
99
91
  });
100
92
  }
93
+ }
94
+ /**
95
+ * A validator for read-only context qualifier providers that accepts string inputs
96
+ * and converts them to strongly-typed values before calling the wrapped provider.
97
+ * Only provides read operations for compile-time type safety.
98
+ * @public
99
+ */
100
+ class ReadOnlyContextQualifierProviderValidator extends BaseContextQualifierProviderValidator {
101
+ /**
102
+ * Constructs a new {@link Runtime.Context.ReadOnlyContextQualifierProviderValidator | ReadOnlyContextQualifierProviderValidator}.
103
+ * @param params - Required parameters for constructing the validator.
104
+ */
105
+ constructor(params) {
106
+ super();
107
+ this.provider = params.provider;
108
+ }
109
+ }
110
+ exports.ReadOnlyContextQualifierProviderValidator = ReadOnlyContextQualifierProviderValidator;
111
+ /**
112
+ * A validator for mutable context qualifier providers that accepts string inputs
113
+ * and converts them to strongly-typed values before calling the wrapped provider.
114
+ * Provides both read and mutation operations.
115
+ * @public
116
+ */
117
+ class MutableContextQualifierProviderValidator extends BaseContextQualifierProviderValidator {
118
+ /**
119
+ * Constructs a new {@link Runtime.Context.MutableContextQualifierProviderValidator | MutableContextQualifierProviderValidator}.
120
+ * @param params - Required parameters for constructing the validator.
121
+ */
122
+ constructor(params) {
123
+ super();
124
+ this.provider = params.provider;
125
+ }
101
126
  /**
102
127
  * Sets a qualifier value using string inputs, converting to strongly-typed values.
103
128
  * @param name - The string name to convert.
@@ -106,20 +131,9 @@ class ContextQualifierProviderValidator {
106
131
  * or `Failure` with an error message if an error occurs.
107
132
  */
108
133
  set(name, value) {
109
- return this._validateQualifierName(name)
110
- .onSuccess((qualifierName) => this._validateQualifierContextValue(value))
111
- .onSuccess((qualifierValue) => {
112
- // Check if the provider has a set method (only available on mutable providers)
113
- if ('set' in this.provider && typeof this.provider.set === 'function') {
114
- try {
115
- return this.provider.set(name, qualifierValue);
116
- }
117
- catch (_a) {
118
- return (0, ts_utils_1.fail)(`Provider does not support setting values`);
119
- }
120
- }
121
- return (0, ts_utils_1.fail)(`Provider does not support setting values`);
122
- });
134
+ return common_1.Convert.qualifierName.convert(name).onSuccess((qualifierName) => this.provider.qualifiers.validating.get(name).asResult.onSuccess((qualifier) => ts_utils_1.Converters.string.convert(value).onSuccess((stringValue) => qualifier.validateContextValue(stringValue).onSuccess((qualifierValue) => {
135
+ return (0, ts_utils_1.captureResult)(() => this.provider.set(qualifierName, qualifierValue)).onSuccess((result) => result);
136
+ }))));
123
137
  }
124
138
  /**
125
139
  * Removes a qualifier value using string input, converting to strongly-typed QualifierName.
@@ -128,52 +142,10 @@ class ContextQualifierProviderValidator {
128
142
  * or `Failure` with an error message if an error occurs.
129
143
  */
130
144
  remove(name) {
131
- return this._validateQualifierName(name).onSuccess((qualifierName) => {
132
- // Check if the provider has a remove method (only available on mutable providers)
133
- if ('remove' in this.provider && typeof this.provider.remove === 'function') {
134
- try {
135
- return this.provider.remove(qualifierName);
136
- }
137
- catch (_a) {
138
- return (0, ts_utils_1.fail)(`Provider does not support removing values`);
139
- }
140
- }
141
- return (0, ts_utils_1.fail)(`Provider does not support removing values`);
145
+ return common_1.Convert.qualifierName.convert(name).onSuccess((qualifierName) => {
146
+ return (0, ts_utils_1.captureResult)(() => this.provider.remove(qualifierName)).onSuccess((result) => result);
142
147
  });
143
148
  }
144
- /**
145
- * Validates a string as a QualifierName.
146
- * @param name - The string to validate.
147
- * @returns `Success` with the strongly-typed QualifierName, or `Failure` if invalid.
148
- */
149
- _validateQualifierName(name) {
150
- if (typeof name !== 'string' || name.length === 0) {
151
- return (0, ts_utils_1.fail)(`Invalid qualifier name: "${name}"`);
152
- }
153
- return (0, ts_utils_1.succeed)(name);
154
- }
155
- /**
156
- * Validates a number as a QualifierIndex.
157
- * @param index - The number to validate.
158
- * @returns `Success` with the strongly-typed QualifierIndex, or `Failure` if invalid.
159
- */
160
- _validateQualifierIndex(index) {
161
- if (typeof index !== 'number' || !Number.isInteger(index) || index < 0) {
162
- return (0, ts_utils_1.fail)(`Invalid qualifier index: ${index}`);
163
- }
164
- return (0, ts_utils_1.succeed)(index);
165
- }
166
- /**
167
- * Validates a string as a QualifierContextValue.
168
- * @param value - The string to validate.
169
- * @returns `Success` with the strongly-typed QualifierContextValue, or `Failure` if invalid.
170
- */
171
- _validateQualifierContextValue(value) {
172
- if (typeof value !== 'string') {
173
- return (0, ts_utils_1.fail)(`Invalid qualifier context value: "${value}"`);
174
- }
175
- return (0, ts_utils_1.succeed)(value);
176
- }
177
149
  }
178
- exports.ContextQualifierProviderValidator = ContextQualifierProviderValidator;
150
+ exports.MutableContextQualifierProviderValidator = MutableContextQualifierProviderValidator;
179
151
  //# sourceMappingURL=contextQualifierProviderValidator.js.map