@fgv/ts-res 5.0.0-3 → 5.0.0-31

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 (379) hide show
  1. package/README.md +794 -137
  2. package/dist/ts-res.d.ts +2671 -355
  3. package/dist/tsdoc-metadata.json +1 -1
  4. package/eslint.config.js +16 -0
  5. package/lib/index.d.ts +11 -2
  6. package/lib/index.js +25 -2
  7. package/lib/packlets/bundle/bundleBuilder.d.ts +41 -0
  8. package/lib/packlets/bundle/bundleBuilder.js +134 -0
  9. package/lib/packlets/bundle/bundleLoader.d.ts +72 -0
  10. package/lib/packlets/bundle/bundleLoader.js +105 -0
  11. package/lib/packlets/bundle/bundleNormalizer.d.ts +73 -0
  12. package/lib/packlets/bundle/bundleNormalizer.js +142 -0
  13. package/lib/packlets/bundle/bundleUtils.d.ts +70 -0
  14. package/lib/packlets/bundle/bundleUtils.js +117 -0
  15. package/lib/packlets/bundle/convert.d.ts +33 -0
  16. package/lib/packlets/bundle/convert.js +78 -0
  17. package/lib/packlets/bundle/index.d.ts +21 -0
  18. package/lib/packlets/bundle/index.js +83 -0
  19. package/lib/packlets/bundle/model.d.ts +100 -0
  20. package/lib/packlets/bundle/model.js +24 -0
  21. package/lib/packlets/common/convert.d.ts +15 -0
  22. package/lib/packlets/common/convert.js +16 -1
  23. package/lib/packlets/common/helpers/context.js +1 -0
  24. package/lib/packlets/common/helpers/resources.d.ts +7 -0
  25. package/lib/packlets/common/helpers/resources.js +13 -0
  26. package/lib/packlets/common/resources.d.ts +48 -1
  27. package/lib/packlets/common/validate/conditions.d.ts +17 -1
  28. package/lib/packlets/common/validate/conditions.js +32 -6
  29. package/lib/packlets/common/validate/regularExpressions.d.ts +4 -0
  30. package/lib/packlets/common/validate/regularExpressions.js +5 -1
  31. package/lib/packlets/common/validate/resources.d.ts +35 -1
  32. package/lib/packlets/common/validate/resources.js +55 -0
  33. package/lib/packlets/conditions/condition.js +1 -0
  34. package/lib/packlets/conditions/conditionSet.d.ts +9 -0
  35. package/lib/packlets/conditions/conditionSet.js +75 -1
  36. package/lib/packlets/config/configInitFactory.d.ts +217 -0
  37. package/lib/packlets/config/configInitFactory.js +302 -0
  38. package/lib/packlets/config/convert.d.ts +9 -0
  39. package/lib/packlets/config/convert.js +12 -1
  40. package/lib/packlets/config/index.d.ts +1 -0
  41. package/lib/packlets/config/index.js +1 -0
  42. package/lib/packlets/config/json.d.ts +1 -1
  43. package/lib/packlets/config/systemConfiguration.d.ts +16 -3
  44. package/lib/packlets/config/systemConfiguration.js +19 -40
  45. package/lib/packlets/import/fsItem.d.ts +2 -1
  46. package/lib/packlets/import/fsItem.js +9 -13
  47. package/lib/packlets/import/importManager.d.ts +2 -1
  48. package/lib/packlets/import/importers/jsonImporter.js +1 -0
  49. package/lib/packlets/import/importers/pathImporter.d.ts +2 -1
  50. package/lib/packlets/import/importers/pathImporter.js +2 -1
  51. package/lib/packlets/qualifier-types/config/convert.d.ts +22 -1
  52. package/lib/packlets/qualifier-types/config/convert.js +67 -2
  53. package/lib/packlets/qualifier-types/config/json.d.ts +24 -2
  54. package/lib/packlets/qualifier-types/config/json.js +11 -0
  55. package/lib/packlets/qualifier-types/convert.d.ts +1 -1
  56. package/lib/packlets/qualifier-types/helpers.d.ts +14 -5
  57. package/lib/packlets/qualifier-types/helpers.js +2 -2
  58. package/lib/packlets/qualifier-types/languageQualifierType.d.ts +28 -2
  59. package/lib/packlets/qualifier-types/languageQualifierType.js +73 -0
  60. package/lib/packlets/qualifier-types/literalQualifierType.d.ts +31 -5
  61. package/lib/packlets/qualifier-types/literalQualifierType.js +75 -0
  62. package/lib/packlets/qualifier-types/literalValueHierarchy.d.ts +7 -11
  63. package/lib/packlets/qualifier-types/literalValueHierarchy.js +12 -1
  64. package/lib/packlets/qualifier-types/qualifierType.d.ts +31 -2
  65. package/lib/packlets/qualifier-types/territoryQualifierType.d.ts +31 -5
  66. package/lib/packlets/qualifier-types/territoryQualifierType.js +80 -0
  67. package/lib/packlets/qualifiers/qualifierCollector.js +1 -2
  68. package/lib/packlets/resource-json/compiled/convert.js +2 -1
  69. package/lib/packlets/resource-json/compiled/json.d.ts +6 -2
  70. package/lib/packlets/resource-types/config/convert.d.ts +1 -1
  71. package/lib/packlets/resource-types/config/convert.js +3 -1
  72. package/lib/packlets/resource-types/config/json.d.ts +3 -1
  73. package/lib/packlets/resource-types/jsonResourceType.d.ts +14 -5
  74. package/lib/packlets/resource-types/jsonResourceType.js +8 -4
  75. package/lib/packlets/resource-types/resourceType.d.ts +115 -14
  76. package/lib/packlets/resource-types/resourceType.js +39 -3
  77. package/lib/packlets/resources/candidateReducer.js +3 -0
  78. package/lib/packlets/resources/candidateValue.d.ts +92 -0
  79. package/lib/packlets/resources/candidateValue.js +128 -0
  80. package/lib/packlets/resources/candidateValueCollector.d.ts +55 -0
  81. package/lib/packlets/resources/candidateValueCollector.js +96 -0
  82. package/lib/packlets/resources/common.d.ts +26 -0
  83. package/lib/packlets/resources/index.d.ts +2 -0
  84. package/lib/packlets/resources/index.js +2 -0
  85. package/lib/packlets/resources/resource.d.ts +6 -6
  86. package/lib/packlets/resources/resource.js +5 -10
  87. package/lib/packlets/resources/resourceBuilder.d.ts +6 -0
  88. package/lib/packlets/resources/resourceBuilder.js +4 -1
  89. package/lib/packlets/resources/resourceCandidate.d.ts +15 -2
  90. package/lib/packlets/resources/resourceCandidate.js +17 -5
  91. package/lib/packlets/resources/resourceManagerBuilder.d.ts +189 -11
  92. package/lib/packlets/resources/resourceManagerBuilder.js +481 -17
  93. package/lib/packlets/runtime/cacheListener.d.ts +9 -0
  94. package/lib/packlets/runtime/cacheListener.js +6 -0
  95. package/lib/packlets/runtime/cacheMetrics.d.ts +6 -0
  96. package/lib/packlets/runtime/cacheMetrics.js +11 -0
  97. package/lib/packlets/runtime/compiledResourceCollection.d.ts +23 -11
  98. package/lib/packlets/runtime/compiledResourceCollection.js +65 -28
  99. package/lib/packlets/runtime/conditionSetResolutionResult.js +3 -0
  100. package/lib/packlets/runtime/context/contextQualifierProvider.d.ts +53 -3
  101. package/lib/packlets/runtime/context/contextQualifierProviderValidator.d.ts +82 -37
  102. package/lib/packlets/runtime/context/contextQualifierProviderValidator.js +49 -77
  103. package/lib/packlets/runtime/context/simpleContextQualifierProvider.d.ts +23 -2
  104. package/lib/packlets/runtime/context/simpleContextQualifierProvider.js +53 -31
  105. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.d.ts +4 -4
  106. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.js +2 -2
  107. package/lib/packlets/runtime/iResourceManager.d.ts +13 -5
  108. package/lib/packlets/runtime/index.d.ts +1 -0
  109. package/lib/packlets/runtime/index.js +1 -0
  110. package/lib/packlets/runtime/resource-tree/common.d.ts +1 -1
  111. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.d.ts +7 -7
  112. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.js +5 -5
  113. package/lib/packlets/runtime/resourceResolver.d.ts +60 -1
  114. package/lib/packlets/runtime/resourceResolver.js +89 -45
  115. package/lib/packlets/runtime/resourceTreeResolver.d.ts +152 -0
  116. package/lib/packlets/runtime/resourceTreeResolver.js +222 -0
  117. package/lib/packlets/runtime/validate.js +1 -0
  118. package/lib/packlets/zip-archive/convert.d.ts +52 -0
  119. package/lib/packlets/zip-archive/convert.js +103 -0
  120. package/lib/packlets/zip-archive/index.d.ts +23 -0
  121. package/lib/packlets/zip-archive/index.js +95 -0
  122. package/lib/packlets/zip-archive/json.d.ts +64 -0
  123. package/lib/packlets/zip-archive/json.js +24 -0
  124. package/lib/packlets/zip-archive/types.d.ts +98 -0
  125. package/lib/packlets/zip-archive/types.js +39 -0
  126. package/lib/packlets/zip-archive/zipArchiveCreator.d.ts +35 -0
  127. package/lib/packlets/zip-archive/zipArchiveCreator.js +195 -0
  128. package/lib/packlets/zip-archive/zipArchiveFormat.d.ts +70 -0
  129. package/lib/packlets/zip-archive/zipArchiveFormat.js +184 -0
  130. package/lib/packlets/zip-archive/zipArchiveLoader.d.ts +70 -0
  131. package/lib/packlets/zip-archive/zipArchiveLoader.js +285 -0
  132. package/package.json +26 -32
  133. package/CLAUDE.md +0 -186
  134. package/EXAMPLE_INIT_PARAMS.md +0 -88
  135. package/PROGRESS_SUMMARY.md +0 -48
  136. package/lib/index.d.ts.map +0 -1
  137. package/lib/index.js.map +0 -1
  138. package/lib/packlets/common/conditions.d.ts.map +0 -1
  139. package/lib/packlets/common/conditions.js.map +0 -1
  140. package/lib/packlets/common/convert.d.ts.map +0 -1
  141. package/lib/packlets/common/convert.js.map +0 -1
  142. package/lib/packlets/common/helpers/conditions.d.ts.map +0 -1
  143. package/lib/packlets/common/helpers/conditions.js.map +0 -1
  144. package/lib/packlets/common/helpers/context.d.ts.map +0 -1
  145. package/lib/packlets/common/helpers/context.js.map +0 -1
  146. package/lib/packlets/common/helpers/index.d.ts.map +0 -1
  147. package/lib/packlets/common/helpers/index.js.map +0 -1
  148. package/lib/packlets/common/helpers/qualifierDefaultValues.d.ts.map +0 -1
  149. package/lib/packlets/common/helpers/qualifierDefaultValues.js.map +0 -1
  150. package/lib/packlets/common/helpers/resources.d.ts.map +0 -1
  151. package/lib/packlets/common/helpers/resources.js.map +0 -1
  152. package/lib/packlets/common/index.d.ts.map +0 -1
  153. package/lib/packlets/common/index.js.map +0 -1
  154. package/lib/packlets/common/resources.d.ts.map +0 -1
  155. package/lib/packlets/common/resources.js.map +0 -1
  156. package/lib/packlets/common/validate/conditions.d.ts.map +0 -1
  157. package/lib/packlets/common/validate/conditions.js.map +0 -1
  158. package/lib/packlets/common/validate/index.d.ts.map +0 -1
  159. package/lib/packlets/common/validate/index.js.map +0 -1
  160. package/lib/packlets/common/validate/regularExpressions.d.ts.map +0 -1
  161. package/lib/packlets/common/validate/regularExpressions.js.map +0 -1
  162. package/lib/packlets/common/validate/resources.d.ts.map +0 -1
  163. package/lib/packlets/common/validate/resources.js.map +0 -1
  164. package/lib/packlets/conditions/condition.d.ts.map +0 -1
  165. package/lib/packlets/conditions/condition.js.map +0 -1
  166. package/lib/packlets/conditions/conditionCollector.d.ts.map +0 -1
  167. package/lib/packlets/conditions/conditionCollector.js.map +0 -1
  168. package/lib/packlets/conditions/conditionDecls.d.ts.map +0 -1
  169. package/lib/packlets/conditions/conditionDecls.js.map +0 -1
  170. package/lib/packlets/conditions/conditionSet.d.ts.map +0 -1
  171. package/lib/packlets/conditions/conditionSet.js.map +0 -1
  172. package/lib/packlets/conditions/conditionSetCollector.d.ts.map +0 -1
  173. package/lib/packlets/conditions/conditionSetCollector.js.map +0 -1
  174. package/lib/packlets/conditions/conditionSetDecls.d.ts.map +0 -1
  175. package/lib/packlets/conditions/conditionSetDecls.js.map +0 -1
  176. package/lib/packlets/conditions/conditionToken.d.ts.map +0 -1
  177. package/lib/packlets/conditions/conditionToken.js.map +0 -1
  178. package/lib/packlets/conditions/convert/conditionSetDecls.d.ts.map +0 -1
  179. package/lib/packlets/conditions/convert/conditionSetDecls.js.map +0 -1
  180. package/lib/packlets/conditions/convert/decls.d.ts.map +0 -1
  181. package/lib/packlets/conditions/convert/decls.js.map +0 -1
  182. package/lib/packlets/conditions/convert/index.d.ts.map +0 -1
  183. package/lib/packlets/conditions/convert/index.js.map +0 -1
  184. package/lib/packlets/conditions/index.d.ts.map +0 -1
  185. package/lib/packlets/conditions/index.js.map +0 -1
  186. package/lib/packlets/config/common.d.ts.map +0 -1
  187. package/lib/packlets/config/common.js.map +0 -1
  188. package/lib/packlets/config/convert.d.ts.map +0 -1
  189. package/lib/packlets/config/convert.js.map +0 -1
  190. package/lib/packlets/config/index.d.ts.map +0 -1
  191. package/lib/packlets/config/index.js.map +0 -1
  192. package/lib/packlets/config/json.d.ts.map +0 -1
  193. package/lib/packlets/config/json.js.map +0 -1
  194. package/lib/packlets/config/predefined/default.d.ts.map +0 -1
  195. package/lib/packlets/config/predefined/default.js.map +0 -1
  196. package/lib/packlets/config/predefined/extended.d.ts.map +0 -1
  197. package/lib/packlets/config/predefined/extended.js.map +0 -1
  198. package/lib/packlets/config/predefined/index.d.ts.map +0 -1
  199. package/lib/packlets/config/predefined/index.js.map +0 -1
  200. package/lib/packlets/config/systemConfiguration.d.ts.map +0 -1
  201. package/lib/packlets/config/systemConfiguration.js.map +0 -1
  202. package/lib/packlets/context/contextDecls.d.ts.map +0 -1
  203. package/lib/packlets/context/contextDecls.js.map +0 -1
  204. package/lib/packlets/context/contextToken.d.ts.map +0 -1
  205. package/lib/packlets/context/contextToken.js.map +0 -1
  206. package/lib/packlets/context/convert/decls.d.ts.map +0 -1
  207. package/lib/packlets/context/convert/decls.js.map +0 -1
  208. package/lib/packlets/context/convert/index.d.ts.map +0 -1
  209. package/lib/packlets/context/convert/index.js.map +0 -1
  210. package/lib/packlets/context/index.d.ts.map +0 -1
  211. package/lib/packlets/context/index.js.map +0 -1
  212. package/lib/packlets/decisions/abstractDecision.d.ts.map +0 -1
  213. package/lib/packlets/decisions/abstractDecision.js.map +0 -1
  214. package/lib/packlets/decisions/abstractDecisionCollector.d.ts.map +0 -1
  215. package/lib/packlets/decisions/abstractDecisionCollector.js.map +0 -1
  216. package/lib/packlets/decisions/candidate.d.ts.map +0 -1
  217. package/lib/packlets/decisions/candidate.js.map +0 -1
  218. package/lib/packlets/decisions/common.d.ts.map +0 -1
  219. package/lib/packlets/decisions/common.js.map +0 -1
  220. package/lib/packlets/decisions/concreteDecision.d.ts.map +0 -1
  221. package/lib/packlets/decisions/concreteDecision.js.map +0 -1
  222. package/lib/packlets/decisions/decision.d.ts.map +0 -1
  223. package/lib/packlets/decisions/decision.js.map +0 -1
  224. package/lib/packlets/decisions/index.d.ts.map +0 -1
  225. package/lib/packlets/decisions/index.js.map +0 -1
  226. package/lib/packlets/import/fsItem.d.ts.map +0 -1
  227. package/lib/packlets/import/fsItem.js.map +0 -1
  228. package/lib/packlets/import/importContext.d.ts.map +0 -1
  229. package/lib/packlets/import/importContext.js.map +0 -1
  230. package/lib/packlets/import/importManager.d.ts.map +0 -1
  231. package/lib/packlets/import/importManager.js.map +0 -1
  232. package/lib/packlets/import/importable.d.ts.map +0 -1
  233. package/lib/packlets/import/importable.js.map +0 -1
  234. package/lib/packlets/import/importers/collectionImporter.d.ts.map +0 -1
  235. package/lib/packlets/import/importers/collectionImporter.js.map +0 -1
  236. package/lib/packlets/import/importers/fsItemImporter.d.ts.map +0 -1
  237. package/lib/packlets/import/importers/fsItemImporter.js.map +0 -1
  238. package/lib/packlets/import/importers/importer.d.ts.map +0 -1
  239. package/lib/packlets/import/importers/importer.js.map +0 -1
  240. package/lib/packlets/import/importers/index.d.ts.map +0 -1
  241. package/lib/packlets/import/importers/index.js.map +0 -1
  242. package/lib/packlets/import/importers/jsonImporter.d.ts.map +0 -1
  243. package/lib/packlets/import/importers/jsonImporter.js.map +0 -1
  244. package/lib/packlets/import/importers/pathImporter.d.ts.map +0 -1
  245. package/lib/packlets/import/importers/pathImporter.js.map +0 -1
  246. package/lib/packlets/import/index.d.ts.map +0 -1
  247. package/lib/packlets/import/index.js.map +0 -1
  248. package/lib/packlets/qualifier-types/config/convert.d.ts.map +0 -1
  249. package/lib/packlets/qualifier-types/config/convert.js.map +0 -1
  250. package/lib/packlets/qualifier-types/config/index.d.ts.map +0 -1
  251. package/lib/packlets/qualifier-types/config/index.js.map +0 -1
  252. package/lib/packlets/qualifier-types/config/json.d.ts.map +0 -1
  253. package/lib/packlets/qualifier-types/config/json.js.map +0 -1
  254. package/lib/packlets/qualifier-types/convert.d.ts.map +0 -1
  255. package/lib/packlets/qualifier-types/convert.js.map +0 -1
  256. package/lib/packlets/qualifier-types/helpers.d.ts.map +0 -1
  257. package/lib/packlets/qualifier-types/helpers.js.map +0 -1
  258. package/lib/packlets/qualifier-types/index.d.ts.map +0 -1
  259. package/lib/packlets/qualifier-types/index.js.map +0 -1
  260. package/lib/packlets/qualifier-types/languageQualifierType.d.ts.map +0 -1
  261. package/lib/packlets/qualifier-types/languageQualifierType.js.map +0 -1
  262. package/lib/packlets/qualifier-types/literalQualifierType.d.ts.map +0 -1
  263. package/lib/packlets/qualifier-types/literalQualifierType.js.map +0 -1
  264. package/lib/packlets/qualifier-types/literalValueHierarchy.d.ts.map +0 -1
  265. package/lib/packlets/qualifier-types/literalValueHierarchy.js.map +0 -1
  266. package/lib/packlets/qualifier-types/qualifierType.d.ts.map +0 -1
  267. package/lib/packlets/qualifier-types/qualifierType.js.map +0 -1
  268. package/lib/packlets/qualifier-types/qualifierTypeCollector.d.ts.map +0 -1
  269. package/lib/packlets/qualifier-types/qualifierTypeCollector.js.map +0 -1
  270. package/lib/packlets/qualifier-types/territoryQualifierType.d.ts.map +0 -1
  271. package/lib/packlets/qualifier-types/territoryQualifierType.js.map +0 -1
  272. package/lib/packlets/qualifiers/convert/decls.d.ts.map +0 -1
  273. package/lib/packlets/qualifiers/convert/decls.js.map +0 -1
  274. package/lib/packlets/qualifiers/convert/index.d.ts.map +0 -1
  275. package/lib/packlets/qualifiers/convert/index.js.map +0 -1
  276. package/lib/packlets/qualifiers/convert/qualifier.d.ts.map +0 -1
  277. package/lib/packlets/qualifiers/convert/qualifier.js.map +0 -1
  278. package/lib/packlets/qualifiers/index.d.ts.map +0 -1
  279. package/lib/packlets/qualifiers/index.js.map +0 -1
  280. package/lib/packlets/qualifiers/qualifier.d.ts.map +0 -1
  281. package/lib/packlets/qualifiers/qualifier.js.map +0 -1
  282. package/lib/packlets/qualifiers/qualifierCollector.d.ts.map +0 -1
  283. package/lib/packlets/qualifiers/qualifierCollector.js.map +0 -1
  284. package/lib/packlets/qualifiers/qualifierDecl.d.ts.map +0 -1
  285. package/lib/packlets/qualifiers/qualifierDecl.js.map +0 -1
  286. package/lib/packlets/qualifiers/qualifierDefaultValueDecls.d.ts.map +0 -1
  287. package/lib/packlets/qualifiers/qualifierDefaultValueDecls.js.map +0 -1
  288. package/lib/packlets/qualifiers/qualifierDefaultValueToken.d.ts.map +0 -1
  289. package/lib/packlets/qualifiers/qualifierDefaultValueToken.js.map +0 -1
  290. package/lib/packlets/resource-json/compiled/common.d.ts.map +0 -1
  291. package/lib/packlets/resource-json/compiled/common.js.map +0 -1
  292. package/lib/packlets/resource-json/compiled/convert.d.ts.map +0 -1
  293. package/lib/packlets/resource-json/compiled/convert.js.map +0 -1
  294. package/lib/packlets/resource-json/compiled/index.d.ts.map +0 -1
  295. package/lib/packlets/resource-json/compiled/index.js.map +0 -1
  296. package/lib/packlets/resource-json/compiled/json.d.ts.map +0 -1
  297. package/lib/packlets/resource-json/compiled/json.js.map +0 -1
  298. package/lib/packlets/resource-json/convert.d.ts.map +0 -1
  299. package/lib/packlets/resource-json/convert.js.map +0 -1
  300. package/lib/packlets/resource-json/helpers.d.ts.map +0 -1
  301. package/lib/packlets/resource-json/helpers.js.map +0 -1
  302. package/lib/packlets/resource-json/index.d.ts.map +0 -1
  303. package/lib/packlets/resource-json/index.js.map +0 -1
  304. package/lib/packlets/resource-json/json.d.ts.map +0 -1
  305. package/lib/packlets/resource-json/json.js.map +0 -1
  306. package/lib/packlets/resource-json/normalized.d.ts.map +0 -1
  307. package/lib/packlets/resource-json/normalized.js.map +0 -1
  308. package/lib/packlets/resource-json/resourceDeclCollection.d.ts.map +0 -1
  309. package/lib/packlets/resource-json/resourceDeclCollection.js.map +0 -1
  310. package/lib/packlets/resource-json/resourceDeclContainer.d.ts.map +0 -1
  311. package/lib/packlets/resource-json/resourceDeclContainer.js.map +0 -1
  312. package/lib/packlets/resource-json/resourceDeclTree.d.ts.map +0 -1
  313. package/lib/packlets/resource-json/resourceDeclTree.js.map +0 -1
  314. package/lib/packlets/resource-types/config/convert.d.ts.map +0 -1
  315. package/lib/packlets/resource-types/config/convert.js.map +0 -1
  316. package/lib/packlets/resource-types/config/index.d.ts.map +0 -1
  317. package/lib/packlets/resource-types/config/index.js.map +0 -1
  318. package/lib/packlets/resource-types/config/json.d.ts.map +0 -1
  319. package/lib/packlets/resource-types/config/json.js.map +0 -1
  320. package/lib/packlets/resource-types/helpers.d.ts.map +0 -1
  321. package/lib/packlets/resource-types/helpers.js.map +0 -1
  322. package/lib/packlets/resource-types/index.d.ts.map +0 -1
  323. package/lib/packlets/resource-types/index.js.map +0 -1
  324. package/lib/packlets/resource-types/jsonResourceType.d.ts.map +0 -1
  325. package/lib/packlets/resource-types/jsonResourceType.js.map +0 -1
  326. package/lib/packlets/resource-types/resourceType.d.ts.map +0 -1
  327. package/lib/packlets/resource-types/resourceType.js.map +0 -1
  328. package/lib/packlets/resource-types/resourceTypeCollector.d.ts.map +0 -1
  329. package/lib/packlets/resource-types/resourceTypeCollector.js.map +0 -1
  330. package/lib/packlets/resources/candidateReducer.d.ts.map +0 -1
  331. package/lib/packlets/resources/candidateReducer.js.map +0 -1
  332. package/lib/packlets/resources/common.d.ts.map +0 -1
  333. package/lib/packlets/resources/common.js.map +0 -1
  334. package/lib/packlets/resources/index.d.ts.map +0 -1
  335. package/lib/packlets/resources/index.js.map +0 -1
  336. package/lib/packlets/resources/resource.d.ts.map +0 -1
  337. package/lib/packlets/resources/resource.js.map +0 -1
  338. package/lib/packlets/resources/resourceBuilder.d.ts.map +0 -1
  339. package/lib/packlets/resources/resourceBuilder.js.map +0 -1
  340. package/lib/packlets/resources/resourceCandidate.d.ts.map +0 -1
  341. package/lib/packlets/resources/resourceCandidate.js.map +0 -1
  342. package/lib/packlets/resources/resourceManagerBuilder.d.ts.map +0 -1
  343. package/lib/packlets/resources/resourceManagerBuilder.js.map +0 -1
  344. package/lib/packlets/runtime/cacheListener.d.ts.map +0 -1
  345. package/lib/packlets/runtime/cacheListener.js.map +0 -1
  346. package/lib/packlets/runtime/cacheMetrics.d.ts.map +0 -1
  347. package/lib/packlets/runtime/cacheMetrics.js.map +0 -1
  348. package/lib/packlets/runtime/compiledResourceCollection.d.ts.map +0 -1
  349. package/lib/packlets/runtime/compiledResourceCollection.js.map +0 -1
  350. package/lib/packlets/runtime/conditionSetResolutionResult.d.ts.map +0 -1
  351. package/lib/packlets/runtime/conditionSetResolutionResult.js.map +0 -1
  352. package/lib/packlets/runtime/context/contextQualifierProvider.d.ts.map +0 -1
  353. package/lib/packlets/runtime/context/contextQualifierProvider.js.map +0 -1
  354. package/lib/packlets/runtime/context/contextQualifierProviderValidator.d.ts.map +0 -1
  355. package/lib/packlets/runtime/context/contextQualifierProviderValidator.js.map +0 -1
  356. package/lib/packlets/runtime/context/index.d.ts.map +0 -1
  357. package/lib/packlets/runtime/context/index.js.map +0 -1
  358. package/lib/packlets/runtime/context/simpleContextQualifierProvider.d.ts.map +0 -1
  359. package/lib/packlets/runtime/context/simpleContextQualifierProvider.js.map +0 -1
  360. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.d.ts.map +0 -1
  361. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.js.map +0 -1
  362. package/lib/packlets/runtime/iResourceManager.d.ts.map +0 -1
  363. package/lib/packlets/runtime/iResourceManager.js.map +0 -1
  364. package/lib/packlets/runtime/index.d.ts.map +0 -1
  365. package/lib/packlets/runtime/index.js.map +0 -1
  366. package/lib/packlets/runtime/resource-tree/common.d.ts.map +0 -1
  367. package/lib/packlets/runtime/resource-tree/common.js.map +0 -1
  368. package/lib/packlets/runtime/resource-tree/index.d.ts.map +0 -1
  369. package/lib/packlets/runtime/resource-tree/index.js.map +0 -1
  370. package/lib/packlets/runtime/resource-tree/readOnlyResourceTree.d.ts.map +0 -1
  371. package/lib/packlets/runtime/resource-tree/readOnlyResourceTree.js.map +0 -1
  372. package/lib/packlets/runtime/resource-tree/resourceTreeChildren.d.ts.map +0 -1
  373. package/lib/packlets/runtime/resource-tree/resourceTreeChildren.js.map +0 -1
  374. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.d.ts.map +0 -1
  375. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.js.map +0 -1
  376. package/lib/packlets/runtime/resourceResolver.d.ts.map +0 -1
  377. package/lib/packlets/runtime/resourceResolver.js.map +0 -1
  378. package/lib/packlets/runtime/validate.d.ts.map +0 -1
  379. package/lib/packlets/runtime/validate.js.map +0 -1
@@ -51,6 +51,8 @@ export type OverallCacheMetrics<TM extends ICacheMetrics = ICacheMetrics> = Reco
51
51
  */
52
52
  export declare class ResourceResolverCacheMetricsListener<TM extends ICacheMetrics> implements IResourceResolverCacheListener {
53
53
  private readonly _metrics;
54
+ private _contextErrors;
55
+ get numContextErrors(): number;
54
56
  constructor(factory: () => TM);
55
57
  constructor(metrics: OverallCacheMetrics<TM>);
56
58
  /**
@@ -70,6 +72,10 @@ export declare class ResourceResolverCacheMetricsListener<TM extends ICacheMetri
70
72
  * {@inheritDoc Runtime.IResourceResolverCacheListener.onCacheError}
71
73
  */
72
74
  onCacheError(cache: ResourceResolverCacheType, index: number): void;
75
+ /**
76
+ * {@inheritDoc Runtime.IResourceResolverCacheListener.onContextError}
77
+ */
78
+ onContextError(qualifier: string, error: string): void;
73
79
  /**
74
80
  * {@inheritDoc Runtime.IResourceResolverCacheListener.onCacheClear}
75
81
  */
@@ -87,6 +87,9 @@ exports.AggregateCacheMetrics = AggregateCacheMetrics;
87
87
  * @public
88
88
  */
89
89
  class ResourceResolverCacheMetricsListener {
90
+ get numContextErrors() {
91
+ return this._contextErrors;
92
+ }
90
93
  constructor(factoryOrMetrics) {
91
94
  if (typeof factoryOrMetrics === 'function') {
92
95
  this._metrics = {
@@ -98,6 +101,7 @@ class ResourceResolverCacheMetricsListener {
98
101
  else {
99
102
  this._metrics = factoryOrMetrics;
100
103
  }
104
+ this._contextErrors = 0;
101
105
  }
102
106
  /**
103
107
  * Get the metrics for all cache types.
@@ -124,6 +128,12 @@ class ResourceResolverCacheMetricsListener {
124
128
  onCacheError(cache, index) {
125
129
  this._metrics[cache].onError(index);
126
130
  }
131
+ /**
132
+ * {@inheritDoc Runtime.IResourceResolverCacheListener.onContextError}
133
+ */
134
+ onContextError(qualifier, error) {
135
+ this._contextErrors++;
136
+ }
127
137
  /**
128
138
  * {@inheritDoc Runtime.IResourceResolverCacheListener.onCacheClear}
129
139
  */
@@ -137,6 +147,7 @@ class ResourceResolverCacheMetricsListener {
137
147
  this._metrics.condition.reset();
138
148
  this._metrics.conditionSet.reset();
139
149
  this._metrics.decision.reset();
150
+ this._contextErrors = 0;
140
151
  }
141
152
  }
142
153
  exports.ResourceResolverCacheMetricsListener = ResourceResolverCacheMetricsListener;
@@ -1,13 +1,14 @@
1
1
  import { Collections, Result } from '@fgv/ts-utils';
2
2
  import { ReadOnlyConditionCollector, ReadOnlyConditionSetCollector } from '../conditions';
3
3
  import { ReadOnlyAbstractDecisionCollector } from '../decisions';
4
- import { QualifierCollector } from '../qualifiers';
5
- import { ResourceType, ResourceTypeCollector } from '../resource-types';
6
- import { QualifierType, QualifierTypeCollector } from '../qualifier-types';
4
+ import { IReadOnlyQualifierCollector } from '../qualifiers';
5
+ import { ResourceType, ReadOnlyResourceTypeCollector } from '../resource-types';
6
+ import { QualifierType, ReadOnlyQualifierTypeCollector } from '../qualifier-types';
7
7
  import { ResourceId } from '../common';
8
+ import { JsonValue } from '@fgv/ts-json-base';
8
9
  import { IResourceManager, IResource } from './iResourceManager';
9
10
  import * as ResourceJson from '../resource-json';
10
- import { IReadOnlyResourceTreeRoot } from './resource-tree';
11
+ import { ReadOnlyResourceTreeRoot } from './resource-tree';
11
12
  import * as Context from '../context';
12
13
  /**
13
14
  * Interface for parameters to create a {@link Runtime.CompiledResourceCollection | CompiledResourceCollection}.
@@ -33,30 +34,35 @@ export interface ICompiledResourceCollectionCreateParams {
33
34
  * and use pre-compiled resource collections without rebuilding them from scratch.
34
35
  * @public
35
36
  */
36
- export declare class CompiledResourceCollection implements IResourceManager {
37
+ export declare class CompiledResourceCollection implements IResourceManager<IResource> {
37
38
  readonly conditions: ReadOnlyConditionCollector;
38
39
  readonly conditionSets: ReadOnlyConditionSetCollector;
39
40
  readonly decisions: ReadOnlyAbstractDecisionCollector;
40
41
  private readonly _qualifierTypes;
41
42
  private readonly _qualifiers;
42
43
  private readonly _resourceTypes;
44
+ private readonly _candidateValues;
43
45
  private readonly _builtResources;
44
46
  private _cachedResourceTree?;
45
47
  /**
46
- * A {@link QualifierTypes.QualifierTypeCollector | QualifierTypeCollector} which
48
+ * A {@link QualifierTypes.ReadOnlyQualifierTypeCollector | ReadOnlyQualifierTypeCollector} which
47
49
  * contains the {@link QualifierTypes.QualifierType | qualifier types} used in this collection.
48
50
  */
49
- get qualifierTypes(): QualifierTypeCollector;
51
+ get qualifierTypes(): ReadOnlyQualifierTypeCollector;
50
52
  /**
51
- * A {@link Qualifiers.QualifierCollector | QualifierCollector} which
53
+ * A {@link Qualifiers.IReadOnlyQualifierCollector | ReadOnlyQualifierCollector} which
52
54
  * contains the {@link Qualifiers.Qualifier | qualifiers} used in this collection.
53
55
  */
54
- get qualifiers(): QualifierCollector;
56
+ get qualifiers(): IReadOnlyQualifierCollector;
55
57
  /**
56
58
  * A {@link ResourceTypes.ResourceTypeCollector | ResourceTypeCollector} which
57
59
  * contains the {@link ResourceTypes.ResourceType | resource types} used in this collection.
58
60
  */
59
- get resourceTypes(): ResourceTypeCollector;
61
+ get resourceTypes(): ReadOnlyResourceTypeCollector;
62
+ /**
63
+ * The candidate values in the collection.
64
+ */
65
+ get candidateValues(): ReadonlyArray<JsonValue>;
60
66
  /**
61
67
  * {@inheritdoc Runtime.IResourceManager.builtResources}
62
68
  */
@@ -105,7 +111,7 @@ export declare class CompiledResourceCollection implements IResourceManager {
105
111
  * @returns Result containing the resource tree root, or failure if tree construction fails
106
112
  * @public
107
113
  */
108
- getBuiltResourceTree(): Result<IReadOnlyResourceTreeRoot<IResource>>;
114
+ getBuiltResourceTree(): Result<ReadOnlyResourceTreeRoot<IResource>>;
109
115
  /**
110
116
  * Reconstructs a QualifierTypeCollector from compiled data.
111
117
  * @param compiled - The compiled resource collection
@@ -154,6 +160,12 @@ export declare class CompiledResourceCollection implements IResourceManager {
154
160
  * @internal
155
161
  */
156
162
  private _buildDecisions;
163
+ /**
164
+ * Gets a candidate value from the collection.
165
+ * @param valueIndex - The index of the candidate value to get.
166
+ * @returns
167
+ */
168
+ private _getCandidateValue;
157
169
  /**
158
170
  * Reconstructs a ValidatingResultMap of resources from compiled data.
159
171
  * @param compiled - The compiled resource collection
@@ -75,14 +75,14 @@ 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() {
@@ -95,6 +95,12 @@ class CompiledResourceCollection {
95
95
  get resourceTypes() {
96
96
  return this._resourceTypes;
97
97
  }
98
+ /**
99
+ * The candidate values in the collection.
100
+ */
101
+ get candidateValues() {
102
+ return this._candidateValues;
103
+ }
98
104
  /**
99
105
  * {@inheritdoc Runtime.IResourceManager.builtResources}
100
106
  */
@@ -133,6 +139,7 @@ class CompiledResourceCollection {
133
139
  this.conditions = conditionCollector;
134
140
  this.conditionSets = conditionSetCollector;
135
141
  this.decisions = decisionCollector;
142
+ this._candidateValues = [...params.compiledCollection.candidateValues];
136
143
  // Build resources from compiled data
137
144
  this._builtResources = this._buildResources(params.compiledCollection, this._resourceTypes, decisionCollector).orThrow();
138
145
  }
@@ -257,6 +264,7 @@ class CompiledResourceCollection {
257
264
  const conditionCollector = conditionCollectorResult.value;
258
265
  for (const [index, compiledCondition] of compiled.conditions.entries()) {
259
266
  const qualifierResult = qualifiers.getAt(compiledCondition.qualifierIndex);
267
+ /* c8 ignore next 5 - defensive coding: invalid qualifier index should not occur in compiled data */
260
268
  if (qualifierResult.isFailure()) {
261
269
  errors.addMessage(`Invalid qualifier index ${compiledCondition.qualifierIndex} at condition ${index}: ${qualifierResult.message}`);
262
270
  continue;
@@ -354,6 +362,7 @@ class CompiledResourceCollection {
354
362
  const decisionCollector = decisionCollectorResult.value;
355
363
  for (const [index, compiledDecision] of compiled.decisions.entries()) {
356
364
  const referencedConditionSetsResult = (0, ts_utils_1.mapResults)(compiledDecision.conditionSets.map((conditionSetIndex) => conditionSets.getAt(conditionSetIndex)));
365
+ /* c8 ignore next 5 - defensive coding: condition set resolution should not fail with valid compiled data */
357
366
  if (referencedConditionSetsResult.isFailure()) {
358
367
  errors.addMessage(`Failed to resolve condition sets for decision ${index}: ${referencedConditionSetsResult.message}`);
359
368
  continue;
@@ -381,6 +390,22 @@ class CompiledResourceCollection {
381
390
  }
382
391
  return errors.hasMessages ? (0, ts_utils_1.fail)(errors.toString()) : (0, ts_utils_1.succeed)(decisionCollector);
383
392
  }
393
+ /**
394
+ * Gets a candidate value from the collection.
395
+ * @param valueIndex - The index of the candidate value to get.
396
+ * @returns
397
+ */
398
+ _getCandidateValue(valueIndex) {
399
+ /* c8 ignore next 3 - defensive coding: candidate value index should be valid in compiled data */
400
+ if (valueIndex < 0 || valueIndex >= this._candidateValues.length) {
401
+ return (0, ts_utils_1.fail)(`Invalid candidate value index ${valueIndex}`);
402
+ }
403
+ /* c8 ignore next 3 - defensive coding for invalid candidate value conversion */
404
+ if (!(0, ts_json_base_1.isJsonObject)(this._candidateValues[valueIndex])) {
405
+ return (0, ts_utils_1.fail)(`${valueIndex}: candidate value not a JSON object.`);
406
+ }
407
+ return (0, ts_utils_1.succeed)(this._candidateValues[valueIndex]);
408
+ }
384
409
  /**
385
410
  * Reconstructs a ValidatingResultMap of resources from compiled data.
386
411
  * @param compiled - The compiled resource collection
@@ -400,66 +425,78 @@ class CompiledResourceCollection {
400
425
  })
401
426
  });
402
427
  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}`);
428
+ const resourceType = resourceTypes
429
+ .getAt(compiledResource.type)
430
+ .aggregateError(errors, (message) => `Invalid resource type index ${compiledResource.type} for resource ${compiledResource.id}: ${message}`)
431
+ .orDefault();
432
+ /* c8 ignore next 3 - defensive coding: resource type index should be valid in compiled data */
433
+ if (resourceType === undefined) {
406
434
  continue;
407
435
  }
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}`);
436
+ const decision = decisions
437
+ .getAt(compiledResource.decision)
438
+ .aggregateError(errors, (message) => `Invalid decision index ${compiledResource.decision} for resource ${compiledResource.id}: ${message}`)
439
+ .orDefault();
440
+ /* c8 ignore next 3 - defensive coding: decision index should be valid in compiled data */
441
+ if (decision === undefined) {
412
442
  continue;
413
443
  }
414
- const decision = decisionResult.value;
415
444
  // 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) => {
445
+ const candidateDecls = (0, ts_utils_1.mapResults)(compiledResource.candidates.map((compiledCandidate) => this._getCandidateValue(compiledCandidate.valueIndex)
446
+ .aggregateError(errors, (message) => `Failed to convert candidate JSON for resource ${compiledResource.id}: ${message}`)
447
+ .onSuccess((json) => {
417
448
  return (0, ts_utils_1.succeed)({
418
449
  json,
419
450
  isPartial: compiledCandidate.isPartial,
420
451
  mergeMethod: compiledCandidate.mergeMethod
421
452
  });
422
- })));
423
- if (candidateDeclsResult.isFailure()) {
424
- errors.addMessage(`Failed to convert candidate JSON for resource ${compiledResource.id}: ${candidateDeclsResult.message}`);
453
+ })))
454
+ .aggregateError(errors, (message) => `Failed to convert candidate JSON for resource ${compiledResource.id}: ${message}`)
455
+ .orDefault();
456
+ /* c8 ignore next 3 - defensive coding: candidate JSON conversion should not fail with valid compiled data */
457
+ if (candidateDecls === undefined) {
425
458
  continue;
426
459
  }
427
- const candidateDecls = candidateDeclsResult.value;
428
460
  // Create minimal candidates that implement IResourceCandidate
429
461
  const candidates = candidateDecls.map((candidateDecl) => ({
430
462
  json: candidateDecl.json,
431
463
  isPartial: candidateDecl.isPartial,
432
464
  mergeMethod: candidateDecl.mergeMethod
433
465
  }));
434
- // Create a ConcreteDecision from the abstract decision and candidate values
435
466
  const candidatesWithConditionSets = decision.candidates.map((baseCandidate, idx) => ({
436
467
  conditionSet: baseCandidate.conditionSet,
437
468
  value: candidates[idx].json
438
469
  }));
439
- const concreteDecisionResult = decisions_2.ConcreteDecision.create({
470
+ const concreteDecision = decisions_2.ConcreteDecision.create({
440
471
  decisions,
441
472
  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}`);
473
+ })
474
+ .aggregateError(errors, (message) => `Failed to create concrete decision for resource ${compiledResource.id}: ${message}`)
475
+ .orDefault();
476
+ /* c8 ignore next 3 - defensive coding for ConcreteDecision creation failure */
477
+ if (concreteDecision === undefined) {
478
+ continue;
479
+ }
480
+ const name = common_1.Helpers.getNameForResourceId(compiledResource.id)
481
+ .aggregateError(errors, (message) => `Failed to get name for resource ${compiledResource.id}: ${message}`)
482
+ .orDefault();
483
+ /* c8 ignore next 3 - defensive coding: name should be valid in compiled data */
484
+ if (name === undefined) {
446
485
  continue;
447
486
  }
448
- const concreteDecision = concreteDecisionResult.value;
449
487
  // Create minimal resource that implements IResource
450
488
  const resource = {
451
489
  id: compiledResource.id,
490
+ name,
452
491
  resourceType,
453
492
  decision: concreteDecision,
454
493
  candidates
455
494
  };
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
- }
495
+ resourceMap
496
+ .set(compiledResource.id, resource)
497
+ .aggregateError(errors, (message) => `Failed to add resource ${compiledResource.id}: ${message}`);
461
498
  }
462
- return errors.hasMessages ? (0, ts_utils_1.fail)(errors.toString()) : (0, ts_utils_1.succeed)(resourceMap);
499
+ return errors.returnOrReport((0, ts_utils_1.succeed)(resourceMap));
463
500
  }
464
501
  }
465
502
  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