@fgv/ts-res 5.0.0-2 → 5.0.0-21

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 (557) hide show
  1. package/.vscode/4.json +3 -0
  2. package/.vscode/launch.json +16 -0
  3. package/.vscode/settings.json +3 -0
  4. package/config/api-extractor.json +343 -0
  5. package/config/rig.json +16 -0
  6. package/dist/ts-res.d.ts +1528 -161
  7. package/dist/tsdoc-metadata.json +1 -1
  8. package/lib/index.d.ts +11 -2
  9. package/lib/index.js +25 -2
  10. package/lib/packlets/bundle/bundleBuilder.d.ts +41 -0
  11. package/lib/packlets/bundle/bundleBuilder.js +134 -0
  12. package/lib/packlets/bundle/bundleLoader.d.ts +72 -0
  13. package/lib/packlets/bundle/bundleLoader.js +105 -0
  14. package/lib/packlets/bundle/bundleNormalizer.d.ts +73 -0
  15. package/lib/packlets/bundle/bundleNormalizer.js +142 -0
  16. package/lib/packlets/bundle/bundleUtils.d.ts +70 -0
  17. package/lib/packlets/bundle/bundleUtils.js +117 -0
  18. package/lib/packlets/bundle/convert.d.ts +33 -0
  19. package/lib/packlets/bundle/convert.js +78 -0
  20. package/lib/packlets/bundle/index.d.ts +21 -0
  21. package/lib/packlets/bundle/index.js +83 -0
  22. package/lib/packlets/bundle/model.d.ts +100 -0
  23. package/lib/packlets/bundle/model.js +24 -0
  24. package/lib/packlets/common/helpers/resources.d.ts +7 -0
  25. package/lib/packlets/common/helpers/resources.js +12 -0
  26. package/lib/packlets/common/resources.d.ts +8 -0
  27. package/lib/packlets/conditions/conditionSet.d.ts +9 -0
  28. package/lib/packlets/conditions/conditionSet.js +74 -1
  29. package/lib/packlets/config/configInitFactory.d.ts +78 -0
  30. package/lib/packlets/config/configInitFactory.js +147 -0
  31. package/lib/packlets/config/convert.d.ts +9 -0
  32. package/lib/packlets/config/convert.js +11 -0
  33. package/lib/packlets/config/index.d.ts +1 -0
  34. package/lib/packlets/config/index.js +1 -0
  35. package/lib/packlets/config/systemConfiguration.d.ts +16 -3
  36. package/lib/packlets/config/systemConfiguration.js +19 -40
  37. package/lib/packlets/import/fsItem.js +8 -13
  38. package/lib/packlets/import/importers/jsonImporter.js +1 -0
  39. package/lib/packlets/qualifier-types/config/json.d.ts +13 -0
  40. package/lib/packlets/qualifier-types/config/json.js +11 -0
  41. package/lib/packlets/qualifier-types/literalValueHierarchy.js +1 -1
  42. package/lib/packlets/qualifiers/qualifierCollector.js +1 -2
  43. package/lib/packlets/resource-types/jsonResourceType.d.ts +9 -4
  44. package/lib/packlets/resource-types/jsonResourceType.js +8 -1
  45. package/lib/packlets/resource-types/resourceType.d.ts +102 -13
  46. package/lib/packlets/resource-types/resourceType.js +34 -2
  47. package/lib/packlets/resources/common.d.ts +26 -0
  48. package/lib/packlets/resources/resource.d.ts +6 -6
  49. package/lib/packlets/resources/resource.js +3 -8
  50. package/lib/packlets/resources/resourceCandidate.d.ts +5 -1
  51. package/lib/packlets/resources/resourceCandidate.js +6 -0
  52. package/lib/packlets/resources/resourceManagerBuilder.d.ts +182 -11
  53. package/lib/packlets/resources/resourceManagerBuilder.js +469 -15
  54. package/lib/packlets/runtime/cacheListener.d.ts +9 -0
  55. package/lib/packlets/runtime/cacheListener.js +6 -0
  56. package/lib/packlets/runtime/cacheMetrics.d.ts +6 -0
  57. package/lib/packlets/runtime/cacheMetrics.js +11 -0
  58. package/lib/packlets/runtime/compiledResourceCollection.d.ts +3 -3
  59. package/lib/packlets/runtime/compiledResourceCollection.js +7 -0
  60. package/lib/packlets/runtime/iResourceManager.d.ts +13 -5
  61. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.d.ts +7 -7
  62. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.js +5 -5
  63. package/lib/packlets/runtime/resourceResolver.d.ts +21 -0
  64. package/lib/packlets/runtime/resourceResolver.js +39 -17
  65. package/lib/packlets/runtime/validate.js +1 -0
  66. package/lib/packlets/zip-archive/convert.d.ts +52 -0
  67. package/lib/packlets/zip-archive/convert.js +104 -0
  68. package/lib/packlets/zip-archive/index.d.ts +23 -0
  69. package/lib/packlets/zip-archive/index.js +95 -0
  70. package/lib/packlets/zip-archive/json.d.ts +64 -0
  71. package/lib/packlets/zip-archive/json.js +24 -0
  72. package/lib/packlets/zip-archive/types.d.ts +98 -0
  73. package/lib/packlets/zip-archive/types.js +39 -0
  74. package/lib/packlets/zip-archive/zipArchiveCreator.d.ts +35 -0
  75. package/lib/packlets/zip-archive/zipArchiveCreator.js +194 -0
  76. package/lib/packlets/zip-archive/zipArchiveFormat.d.ts +70 -0
  77. package/lib/packlets/zip-archive/zipArchiveFormat.js +184 -0
  78. package/lib/packlets/zip-archive/zipArchiveLoader.d.ts +70 -0
  79. package/lib/packlets/zip-archive/zipArchiveLoader.js +285 -0
  80. package/lib/test/data/sample.json +32 -0
  81. package/lib/test/unit/bundle/bundleBuilder.test.d.ts +2 -0
  82. package/lib/test/unit/bundle/bundleLoader.test.d.ts +2 -0
  83. package/lib/test/unit/bundle/bundleUtils.test.d.ts +2 -0
  84. package/lib/test/unit/bundle/convert.test.d.ts +2 -0
  85. package/lib/test/unit/bundle/integration.test.d.ts +2 -0
  86. package/lib/test/unit/bundle/model.test.d.ts +2 -0
  87. package/lib/test/unit/bundle/normalization.test.d.ts +2 -0
  88. package/lib/test/unit/common/conditions.test.d.ts +2 -0
  89. package/lib/test/unit/common/helpers/conditions.test.d.ts +2 -0
  90. package/lib/test/unit/common/helpers/contexts.test.d.ts +2 -0
  91. package/lib/test/unit/common/helpers/qualifierDefaultValues.test.d.ts +2 -0
  92. package/lib/test/unit/common/resources.test.d.ts +2 -0
  93. package/lib/test/unit/conditions/condition.test.d.ts +2 -0
  94. package/lib/test/unit/conditions/conditionCollector.test.d.ts +2 -0
  95. package/lib/test/unit/conditions/conditionScoreAsDefault.test.d.ts +2 -0
  96. package/lib/test/unit/conditions/conditionSet.test.d.ts +2 -0
  97. package/lib/test/unit/conditions/conditionSetCollector.test.d.ts +2 -0
  98. package/lib/test/unit/conditions/conditionToken.test.d.ts +2 -0
  99. package/lib/test/unit/conditions/convert.test.d.ts +2 -0
  100. package/lib/test/unit/config/common.test.d.ts +2 -0
  101. package/lib/test/unit/config/convert.test.d.ts +2 -0
  102. package/lib/test/unit/config/predefined/default.test.d.ts +2 -0
  103. package/lib/test/unit/config/predefined/extended.test.d.ts +2 -0
  104. package/lib/test/unit/config/systemConfiguration.test.d.ts +2 -0
  105. package/lib/test/unit/config/systemConfigurationInitParams.test.d.ts +2 -0
  106. package/lib/test/unit/context/contextToken.test.d.ts +2 -0
  107. package/lib/test/unit/context/convert.test.d.ts +2 -0
  108. package/lib/test/unit/decisions/abstractDecision.test.d.ts +2 -0
  109. package/lib/test/unit/decisions/abstractDecisionCollector.test.d.ts +2 -0
  110. package/lib/test/unit/decisions/candidate.test.d.ts +2 -0
  111. package/lib/test/unit/decisions/concreteDecision.test.d.ts +2 -0
  112. package/lib/test/unit/decisions/decision.test.d.ts +2 -0
  113. package/lib/test/unit/import/collectionImporter.test.d.ts +2 -0
  114. package/lib/test/unit/import/fsItem.test.d.ts +2 -0
  115. package/lib/test/unit/import/fsItemImporter.test.d.ts +2 -0
  116. package/lib/test/unit/import/importContext.test.d.ts +2 -0
  117. package/lib/test/unit/import/importManager.test.d.ts +2 -0
  118. package/lib/test/unit/import/jsonImporter.test.d.ts +2 -0
  119. package/lib/test/unit/import/pathImporter.test.d.ts +2 -0
  120. package/lib/test/unit/qualifier-types/convert.test.d.ts +2 -0
  121. package/lib/test/unit/qualifier-types/helpers.test.d.ts +2 -0
  122. package/lib/test/unit/qualifier-types/languageQualifierType.test.d.ts +2 -0
  123. package/lib/test/unit/qualifier-types/literalQualifierType.test.d.ts +2 -0
  124. package/lib/test/unit/qualifier-types/literalValueHierarchy.test.d.ts +2 -0
  125. package/lib/test/unit/qualifier-types/qualifierType.test.d.ts +2 -0
  126. package/lib/test/unit/qualifier-types/qualifierTypeCollector.test.d.ts +2 -0
  127. package/lib/test/unit/qualifier-types/territoryQualifierType.test.d.ts +2 -0
  128. package/lib/test/unit/qualifier-types/testQualifierType.d.ts +15 -0
  129. package/lib/test/unit/qualifier-types/testQualifierType.js +89 -0
  130. package/lib/test/unit/qualifiers/convert.test.d.ts +2 -0
  131. package/lib/test/unit/qualifiers/qualifierCollector.test.d.ts +2 -0
  132. package/lib/test/unit/qualifiers/qualifierDefaultValue.test.d.ts +2 -0
  133. package/lib/test/unit/qualifiers/qualifierDefaultValueToken.test.d.ts +2 -0
  134. package/lib/test/unit/resource-json/convert.test.d.ts +2 -0
  135. package/lib/test/unit/resource-json/nameInheritance.test.d.ts +2 -0
  136. package/lib/test/unit/resource-json/resourceDeclCollection.test.d.ts +2 -0
  137. package/lib/test/unit/resource-json/resourceDeclTree.test.d.ts +2 -0
  138. package/lib/test/unit/resource-types/jsonResourceType.test.d.ts +2 -0
  139. package/lib/test/unit/resource-types/resourceTypeCollector.test.d.ts +2 -0
  140. package/lib/test/unit/resources/candidateReducer.integration.test.d.ts +2 -0
  141. package/lib/test/unit/resources/candidateReducer.test.d.ts +2 -0
  142. package/lib/test/unit/resources/reduceCandidates.test.d.ts +2 -0
  143. package/lib/test/unit/resources/reduceQualifiers.comprehensive.test.d.ts +2 -0
  144. package/lib/test/unit/resources/reduceQualifiers.test.d.ts +2 -0
  145. package/lib/test/unit/resources/resource.test.d.ts +2 -0
  146. package/lib/test/unit/resources/resourceBuilder.test.d.ts +2 -0
  147. package/lib/test/unit/resources/resourceCandidate.test.d.ts +2 -0
  148. package/lib/test/unit/resources/resourceManagerBuilder.clone.test.d.ts +2 -0
  149. package/lib/test/unit/resources/resourceManagerBuilder.getBuiltResourceTree.test.d.ts +2 -0
  150. package/lib/test/unit/resources/resourceManagerBuilder.test.d.ts +2 -0
  151. package/lib/test/unit/runtime/cacheListener.test.d.ts +2 -0
  152. package/lib/test/unit/runtime/cacheMetrics.test.d.ts +2 -0
  153. package/lib/test/unit/runtime/compiledResourceCollection.test.d.ts +2 -0
  154. package/lib/test/unit/runtime/conditionSetResolutionResult.comprehensive.test.d.ts +2 -0
  155. package/lib/test/unit/runtime/conditionSetResolutionResult.test.d.ts +2 -0
  156. package/lib/test/unit/runtime/context/contextQualifierProvider.test.d.ts +2 -0
  157. package/lib/test/unit/runtime/context/contextQualifierProviderValidator.test.d.ts +2 -0
  158. package/lib/test/unit/runtime/context/simpleContextQualifierProvider.test.d.ts +2 -0
  159. package/lib/test/unit/runtime/context/validatingSimpleContextQualifierProvider.test.d.ts +2 -0
  160. package/lib/test/unit/runtime/resource-tree/readOnlyResourceTree.test.d.ts +2 -0
  161. package/lib/test/unit/runtime/resource-tree/resourceTreeChildren.test.d.ts +2 -0
  162. package/lib/test/unit/runtime/resource-tree/resourceTreeChildrenValidator.test.d.ts +2 -0
  163. package/lib/test/unit/runtime/resourceResolver.defaultResolution.test.d.ts +2 -0
  164. package/lib/test/unit/runtime/resourceResolver.test.d.ts +2 -0
  165. package/lib/test/unit/runtime/validate.test.d.ts +2 -0
  166. package/lib/test/unit/zip-archive/convert.test.d.ts +2 -0
  167. package/lib/test/unit/zip-archive/json.test.d.ts +2 -0
  168. package/lib/test/unit/zip-archive/zipArchiveCreator.test.d.ts +2 -0
  169. package/lib/test/unit/zip-archive/zipArchiveFormat.test.d.ts +2 -0
  170. package/lib/test/unit/zip-archive/zipArchiveIdempotency.test.d.ts +2 -0
  171. package/lib/test/unit/zip-archive/zipArchiveLoader.test.d.ts +2 -0
  172. package/package.json +19 -25
  173. package/src/index.ts +75 -0
  174. package/src/packlets/bundle/bundleBuilder.ts +159 -0
  175. package/src/packlets/bundle/bundleLoader.ts +157 -0
  176. package/src/packlets/bundle/bundleNormalizer.ts +173 -0
  177. package/src/packlets/bundle/bundleUtils.ts +142 -0
  178. package/src/packlets/bundle/convert.ts +87 -0
  179. package/src/packlets/bundle/index.ts +52 -0
  180. package/src/packlets/bundle/model.ts +138 -0
  181. package/src/packlets/common/conditions.ts +226 -0
  182. package/src/packlets/common/convert.ts +184 -0
  183. package/src/packlets/common/helpers/conditions.ts +84 -0
  184. package/src/packlets/common/helpers/context.ts +88 -0
  185. package/src/packlets/common/helpers/index.ts +26 -0
  186. package/src/packlets/common/helpers/qualifierDefaultValues.ts +91 -0
  187. package/src/packlets/common/helpers/resources.ts +96 -0
  188. package/src/packlets/common/index.ts +30 -0
  189. package/src/packlets/common/resources.ts +78 -0
  190. package/src/packlets/common/validate/conditions.ts +595 -0
  191. package/src/packlets/common/validate/index.ts +27 -0
  192. package/src/packlets/common/validate/regularExpressions.ts +92 -0
  193. package/src/packlets/common/validate/resources.ts +170 -0
  194. package/src/packlets/conditions/condition.ts +351 -0
  195. package/src/packlets/conditions/conditionCollector.ts +103 -0
  196. package/src/packlets/conditions/conditionDecls.ts +50 -0
  197. package/src/packlets/conditions/conditionSet.ts +318 -0
  198. package/src/packlets/conditions/conditionSetCollector.ts +127 -0
  199. package/src/packlets/conditions/conditionSetDecls.ts +41 -0
  200. package/src/packlets/conditions/conditionToken.ts +180 -0
  201. package/src/packlets/conditions/convert/conditionSetDecls.ts +72 -0
  202. package/src/packlets/conditions/convert/decls.ts +95 -0
  203. package/src/packlets/conditions/convert/index.ts +24 -0
  204. package/src/packlets/conditions/index.ts +33 -0
  205. package/src/packlets/config/common.ts +107 -0
  206. package/src/packlets/config/configInitFactory.ts +142 -0
  207. package/src/packlets/config/convert.ts +61 -0
  208. package/src/packlets/config/index.ts +30 -0
  209. package/src/packlets/config/json.ts +43 -0
  210. package/src/packlets/config/predefined/default.ts +150 -0
  211. package/src/packlets/config/predefined/extended.ts +198 -0
  212. package/src/packlets/config/predefined/index.ts +26 -0
  213. package/src/packlets/config/systemConfiguration.ts +217 -0
  214. package/src/packlets/context/contextDecls.ts +76 -0
  215. package/src/packlets/context/contextToken.ts +252 -0
  216. package/src/packlets/context/convert/decls.ts +126 -0
  217. package/src/packlets/context/convert/index.ts +23 -0
  218. package/src/packlets/context/index.ts +27 -0
  219. package/src/packlets/decisions/abstractDecision.ts +87 -0
  220. package/src/packlets/decisions/abstractDecisionCollector.ts +122 -0
  221. package/src/packlets/decisions/candidate.ts +101 -0
  222. package/src/packlets/decisions/common.ts +37 -0
  223. package/src/packlets/decisions/concreteDecision.ts +157 -0
  224. package/src/packlets/decisions/decision.ts +172 -0
  225. package/src/packlets/decisions/index.ts +28 -0
  226. package/src/packlets/import/fsItem.ts +212 -0
  227. package/src/packlets/import/importContext.ts +183 -0
  228. package/src/packlets/import/importManager.ts +187 -0
  229. package/src/packlets/import/importable.ts +107 -0
  230. package/src/packlets/import/importers/collectionImporter.ts +153 -0
  231. package/src/packlets/import/importers/fsItemImporter.ts +154 -0
  232. package/src/packlets/import/importers/importer.ts +58 -0
  233. package/src/packlets/import/importers/index.ts +27 -0
  234. package/src/packlets/import/importers/jsonImporter.ts +133 -0
  235. package/src/packlets/import/importers/pathImporter.ts +134 -0
  236. package/src/packlets/import/index.ts +29 -0
  237. package/src/packlets/qualifier-types/config/convert.ts +108 -0
  238. package/src/packlets/qualifier-types/config/index.ts +27 -0
  239. package/src/packlets/qualifier-types/config/json.ts +126 -0
  240. package/src/packlets/qualifier-types/convert.ts +77 -0
  241. package/src/packlets/qualifier-types/helpers.ts +94 -0
  242. package/src/packlets/qualifier-types/index.ts +34 -0
  243. package/src/packlets/qualifier-types/languageQualifierType.ts +143 -0
  244. package/src/packlets/qualifier-types/literalQualifierType.ts +244 -0
  245. package/src/packlets/qualifier-types/literalValueHierarchy.ts +332 -0
  246. package/src/packlets/qualifier-types/qualifierType.ts +360 -0
  247. package/src/packlets/qualifier-types/qualifierTypeCollector.ts +102 -0
  248. package/src/packlets/qualifier-types/territoryQualifierType.ts +255 -0
  249. package/src/packlets/qualifiers/convert/decls.ts +90 -0
  250. package/src/packlets/qualifiers/convert/index.ts +24 -0
  251. package/src/packlets/qualifiers/convert/qualifier.ts +55 -0
  252. package/src/packlets/qualifiers/index.ts +31 -0
  253. package/src/packlets/qualifiers/qualifier.ts +169 -0
  254. package/src/packlets/qualifiers/qualifierCollector.ts +194 -0
  255. package/src/packlets/qualifiers/qualifierDecl.ts +80 -0
  256. package/src/packlets/qualifiers/qualifierDefaultValueDecls.ts +57 -0
  257. package/src/packlets/qualifiers/qualifierDefaultValueToken.ts +230 -0
  258. package/src/packlets/resource-json/compiled/common.ts +35 -0
  259. package/src/packlets/resource-json/compiled/convert.ts +143 -0
  260. package/src/packlets/resource-json/compiled/index.ts +27 -0
  261. package/src/packlets/resource-json/compiled/json.ts +239 -0
  262. package/src/packlets/resource-json/convert.ts +236 -0
  263. package/src/packlets/resource-json/helpers.ts +284 -0
  264. package/src/packlets/resource-json/index.ts +33 -0
  265. package/src/packlets/resource-json/json.ts +295 -0
  266. package/src/packlets/resource-json/normalized.ts +211 -0
  267. package/src/packlets/resource-json/resourceDeclCollection.ts +117 -0
  268. package/src/packlets/resource-json/resourceDeclContainer.ts +48 -0
  269. package/src/packlets/resource-json/resourceDeclTree.ts +116 -0
  270. package/src/packlets/resource-types/config/convert.ts +36 -0
  271. package/src/packlets/resource-types/config/index.ts +27 -0
  272. package/src/packlets/resource-types/config/json.ts +30 -0
  273. package/src/packlets/resource-types/helpers.ts +44 -0
  274. package/src/packlets/resource-types/index.ts +30 -0
  275. package/src/packlets/resource-types/jsonResourceType.ts +104 -0
  276. package/src/packlets/resource-types/resourceType.ts +259 -0
  277. package/src/packlets/resource-types/resourceTypeCollector.ts +79 -0
  278. package/src/packlets/resources/candidateReducer.ts +331 -0
  279. package/src/packlets/resources/common.ts +114 -0
  280. package/src/packlets/resources/index.ts +28 -0
  281. package/src/packlets/resources/resource.ts +307 -0
  282. package/src/packlets/resources/resourceBuilder.ts +269 -0
  283. package/src/packlets/resources/resourceCandidate.ts +333 -0
  284. package/src/packlets/resources/resourceManagerBuilder.ts +1169 -0
  285. package/src/packlets/runtime/cacheListener.ts +113 -0
  286. package/src/packlets/runtime/cacheMetrics.ts +206 -0
  287. package/src/packlets/runtime/compiledResourceCollection.ts +607 -0
  288. package/src/packlets/runtime/conditionSetResolutionResult.ts +160 -0
  289. package/src/packlets/runtime/context/contextQualifierProvider.ts +117 -0
  290. package/src/packlets/runtime/context/contextQualifierProviderValidator.ts +281 -0
  291. package/src/packlets/runtime/context/index.ts +26 -0
  292. package/src/packlets/runtime/context/simpleContextQualifierProvider.ts +225 -0
  293. package/src/packlets/runtime/context/validatingSimpleContextQualifierProvider.ts +96 -0
  294. package/src/packlets/runtime/iResourceManager.ts +130 -0
  295. package/src/packlets/runtime/index.ts +35 -0
  296. package/src/packlets/runtime/resource-tree/common.ts +126 -0
  297. package/src/packlets/runtime/resource-tree/index.ts +26 -0
  298. package/src/packlets/runtime/resource-tree/readOnlyResourceTree.ts +342 -0
  299. package/src/packlets/runtime/resource-tree/resourceTreeChildren.ts +125 -0
  300. package/src/packlets/runtime/resource-tree/resourceTreeChildrenValidator.ts +187 -0
  301. package/src/packlets/runtime/resourceResolver.ts +626 -0
  302. package/src/packlets/runtime/validate.ts +63 -0
  303. package/src/packlets/zip-archive/convert.ts +121 -0
  304. package/src/packlets/zip-archive/index.ts +76 -0
  305. package/src/packlets/zip-archive/json.ts +91 -0
  306. package/src/packlets/zip-archive/types.ts +140 -0
  307. package/src/packlets/zip-archive/zipArchiveCreator.ts +229 -0
  308. package/src/packlets/zip-archive/zipArchiveFormat.ts +158 -0
  309. package/src/packlets/zip-archive/zipArchiveLoader.ts +370 -0
  310. package/CHANGELOG.md +0 -14
  311. package/CLAUDE.md +0 -186
  312. package/EXAMPLE_INIT_PARAMS.md +0 -88
  313. package/PROGRESS_SUMMARY.md +0 -48
  314. package/lib/index.d.ts.map +0 -1
  315. package/lib/index.js.map +0 -1
  316. package/lib/packlets/common/conditions.d.ts.map +0 -1
  317. package/lib/packlets/common/conditions.js.map +0 -1
  318. package/lib/packlets/common/convert.d.ts.map +0 -1
  319. package/lib/packlets/common/convert.js.map +0 -1
  320. package/lib/packlets/common/helpers/conditions.d.ts.map +0 -1
  321. package/lib/packlets/common/helpers/conditions.js.map +0 -1
  322. package/lib/packlets/common/helpers/context.d.ts.map +0 -1
  323. package/lib/packlets/common/helpers/context.js.map +0 -1
  324. package/lib/packlets/common/helpers/index.d.ts.map +0 -1
  325. package/lib/packlets/common/helpers/index.js.map +0 -1
  326. package/lib/packlets/common/helpers/qualifierDefaultValues.d.ts.map +0 -1
  327. package/lib/packlets/common/helpers/qualifierDefaultValues.js.map +0 -1
  328. package/lib/packlets/common/helpers/resources.d.ts.map +0 -1
  329. package/lib/packlets/common/helpers/resources.js.map +0 -1
  330. package/lib/packlets/common/index.d.ts.map +0 -1
  331. package/lib/packlets/common/index.js.map +0 -1
  332. package/lib/packlets/common/resources.d.ts.map +0 -1
  333. package/lib/packlets/common/resources.js.map +0 -1
  334. package/lib/packlets/common/validate/conditions.d.ts.map +0 -1
  335. package/lib/packlets/common/validate/conditions.js.map +0 -1
  336. package/lib/packlets/common/validate/index.d.ts.map +0 -1
  337. package/lib/packlets/common/validate/index.js.map +0 -1
  338. package/lib/packlets/common/validate/regularExpressions.d.ts.map +0 -1
  339. package/lib/packlets/common/validate/regularExpressions.js.map +0 -1
  340. package/lib/packlets/common/validate/resources.d.ts.map +0 -1
  341. package/lib/packlets/common/validate/resources.js.map +0 -1
  342. package/lib/packlets/conditions/condition.d.ts.map +0 -1
  343. package/lib/packlets/conditions/condition.js.map +0 -1
  344. package/lib/packlets/conditions/conditionCollector.d.ts.map +0 -1
  345. package/lib/packlets/conditions/conditionCollector.js.map +0 -1
  346. package/lib/packlets/conditions/conditionDecls.d.ts.map +0 -1
  347. package/lib/packlets/conditions/conditionDecls.js.map +0 -1
  348. package/lib/packlets/conditions/conditionSet.d.ts.map +0 -1
  349. package/lib/packlets/conditions/conditionSet.js.map +0 -1
  350. package/lib/packlets/conditions/conditionSetCollector.d.ts.map +0 -1
  351. package/lib/packlets/conditions/conditionSetCollector.js.map +0 -1
  352. package/lib/packlets/conditions/conditionSetDecls.d.ts.map +0 -1
  353. package/lib/packlets/conditions/conditionSetDecls.js.map +0 -1
  354. package/lib/packlets/conditions/conditionToken.d.ts.map +0 -1
  355. package/lib/packlets/conditions/conditionToken.js.map +0 -1
  356. package/lib/packlets/conditions/convert/conditionSetDecls.d.ts.map +0 -1
  357. package/lib/packlets/conditions/convert/conditionSetDecls.js.map +0 -1
  358. package/lib/packlets/conditions/convert/decls.d.ts.map +0 -1
  359. package/lib/packlets/conditions/convert/decls.js.map +0 -1
  360. package/lib/packlets/conditions/convert/index.d.ts.map +0 -1
  361. package/lib/packlets/conditions/convert/index.js.map +0 -1
  362. package/lib/packlets/conditions/index.d.ts.map +0 -1
  363. package/lib/packlets/conditions/index.js.map +0 -1
  364. package/lib/packlets/config/common.d.ts.map +0 -1
  365. package/lib/packlets/config/common.js.map +0 -1
  366. package/lib/packlets/config/convert.d.ts.map +0 -1
  367. package/lib/packlets/config/convert.js.map +0 -1
  368. package/lib/packlets/config/index.d.ts.map +0 -1
  369. package/lib/packlets/config/index.js.map +0 -1
  370. package/lib/packlets/config/json.d.ts.map +0 -1
  371. package/lib/packlets/config/json.js.map +0 -1
  372. package/lib/packlets/config/predefined/default.d.ts.map +0 -1
  373. package/lib/packlets/config/predefined/default.js.map +0 -1
  374. package/lib/packlets/config/predefined/extended.d.ts.map +0 -1
  375. package/lib/packlets/config/predefined/extended.js.map +0 -1
  376. package/lib/packlets/config/predefined/index.d.ts.map +0 -1
  377. package/lib/packlets/config/predefined/index.js.map +0 -1
  378. package/lib/packlets/config/systemConfiguration.d.ts.map +0 -1
  379. package/lib/packlets/config/systemConfiguration.js.map +0 -1
  380. package/lib/packlets/context/contextDecls.d.ts.map +0 -1
  381. package/lib/packlets/context/contextDecls.js.map +0 -1
  382. package/lib/packlets/context/contextToken.d.ts.map +0 -1
  383. package/lib/packlets/context/contextToken.js.map +0 -1
  384. package/lib/packlets/context/convert/decls.d.ts.map +0 -1
  385. package/lib/packlets/context/convert/decls.js.map +0 -1
  386. package/lib/packlets/context/convert/index.d.ts.map +0 -1
  387. package/lib/packlets/context/convert/index.js.map +0 -1
  388. package/lib/packlets/context/index.d.ts.map +0 -1
  389. package/lib/packlets/context/index.js.map +0 -1
  390. package/lib/packlets/decisions/abstractDecision.d.ts.map +0 -1
  391. package/lib/packlets/decisions/abstractDecision.js.map +0 -1
  392. package/lib/packlets/decisions/abstractDecisionCollector.d.ts.map +0 -1
  393. package/lib/packlets/decisions/abstractDecisionCollector.js.map +0 -1
  394. package/lib/packlets/decisions/candidate.d.ts.map +0 -1
  395. package/lib/packlets/decisions/candidate.js.map +0 -1
  396. package/lib/packlets/decisions/common.d.ts.map +0 -1
  397. package/lib/packlets/decisions/common.js.map +0 -1
  398. package/lib/packlets/decisions/concreteDecision.d.ts.map +0 -1
  399. package/lib/packlets/decisions/concreteDecision.js.map +0 -1
  400. package/lib/packlets/decisions/decision.d.ts.map +0 -1
  401. package/lib/packlets/decisions/decision.js.map +0 -1
  402. package/lib/packlets/decisions/index.d.ts.map +0 -1
  403. package/lib/packlets/decisions/index.js.map +0 -1
  404. package/lib/packlets/import/fsItem.d.ts.map +0 -1
  405. package/lib/packlets/import/fsItem.js.map +0 -1
  406. package/lib/packlets/import/importContext.d.ts.map +0 -1
  407. package/lib/packlets/import/importContext.js.map +0 -1
  408. package/lib/packlets/import/importManager.d.ts.map +0 -1
  409. package/lib/packlets/import/importManager.js.map +0 -1
  410. package/lib/packlets/import/importable.d.ts.map +0 -1
  411. package/lib/packlets/import/importable.js.map +0 -1
  412. package/lib/packlets/import/importers/collectionImporter.d.ts.map +0 -1
  413. package/lib/packlets/import/importers/collectionImporter.js.map +0 -1
  414. package/lib/packlets/import/importers/fsItemImporter.d.ts.map +0 -1
  415. package/lib/packlets/import/importers/fsItemImporter.js.map +0 -1
  416. package/lib/packlets/import/importers/importer.d.ts.map +0 -1
  417. package/lib/packlets/import/importers/importer.js.map +0 -1
  418. package/lib/packlets/import/importers/index.d.ts.map +0 -1
  419. package/lib/packlets/import/importers/index.js.map +0 -1
  420. package/lib/packlets/import/importers/jsonImporter.d.ts.map +0 -1
  421. package/lib/packlets/import/importers/jsonImporter.js.map +0 -1
  422. package/lib/packlets/import/importers/pathImporter.d.ts.map +0 -1
  423. package/lib/packlets/import/importers/pathImporter.js.map +0 -1
  424. package/lib/packlets/import/index.d.ts.map +0 -1
  425. package/lib/packlets/import/index.js.map +0 -1
  426. package/lib/packlets/qualifier-types/config/convert.d.ts.map +0 -1
  427. package/lib/packlets/qualifier-types/config/convert.js.map +0 -1
  428. package/lib/packlets/qualifier-types/config/index.d.ts.map +0 -1
  429. package/lib/packlets/qualifier-types/config/index.js.map +0 -1
  430. package/lib/packlets/qualifier-types/config/json.d.ts.map +0 -1
  431. package/lib/packlets/qualifier-types/config/json.js.map +0 -1
  432. package/lib/packlets/qualifier-types/convert.d.ts.map +0 -1
  433. package/lib/packlets/qualifier-types/convert.js.map +0 -1
  434. package/lib/packlets/qualifier-types/helpers.d.ts.map +0 -1
  435. package/lib/packlets/qualifier-types/helpers.js.map +0 -1
  436. package/lib/packlets/qualifier-types/index.d.ts.map +0 -1
  437. package/lib/packlets/qualifier-types/index.js.map +0 -1
  438. package/lib/packlets/qualifier-types/languageQualifierType.d.ts.map +0 -1
  439. package/lib/packlets/qualifier-types/languageQualifierType.js.map +0 -1
  440. package/lib/packlets/qualifier-types/literalQualifierType.d.ts.map +0 -1
  441. package/lib/packlets/qualifier-types/literalQualifierType.js.map +0 -1
  442. package/lib/packlets/qualifier-types/literalValueHierarchy.d.ts.map +0 -1
  443. package/lib/packlets/qualifier-types/literalValueHierarchy.js.map +0 -1
  444. package/lib/packlets/qualifier-types/qualifierType.d.ts.map +0 -1
  445. package/lib/packlets/qualifier-types/qualifierType.js.map +0 -1
  446. package/lib/packlets/qualifier-types/qualifierTypeCollector.d.ts.map +0 -1
  447. package/lib/packlets/qualifier-types/qualifierTypeCollector.js.map +0 -1
  448. package/lib/packlets/qualifier-types/territoryQualifierType.d.ts.map +0 -1
  449. package/lib/packlets/qualifier-types/territoryQualifierType.js.map +0 -1
  450. package/lib/packlets/qualifiers/convert/decls.d.ts.map +0 -1
  451. package/lib/packlets/qualifiers/convert/decls.js.map +0 -1
  452. package/lib/packlets/qualifiers/convert/index.d.ts.map +0 -1
  453. package/lib/packlets/qualifiers/convert/index.js.map +0 -1
  454. package/lib/packlets/qualifiers/convert/qualifier.d.ts.map +0 -1
  455. package/lib/packlets/qualifiers/convert/qualifier.js.map +0 -1
  456. package/lib/packlets/qualifiers/index.d.ts.map +0 -1
  457. package/lib/packlets/qualifiers/index.js.map +0 -1
  458. package/lib/packlets/qualifiers/qualifier.d.ts.map +0 -1
  459. package/lib/packlets/qualifiers/qualifier.js.map +0 -1
  460. package/lib/packlets/qualifiers/qualifierCollector.d.ts.map +0 -1
  461. package/lib/packlets/qualifiers/qualifierCollector.js.map +0 -1
  462. package/lib/packlets/qualifiers/qualifierDecl.d.ts.map +0 -1
  463. package/lib/packlets/qualifiers/qualifierDecl.js.map +0 -1
  464. package/lib/packlets/qualifiers/qualifierDefaultValueDecls.d.ts.map +0 -1
  465. package/lib/packlets/qualifiers/qualifierDefaultValueDecls.js.map +0 -1
  466. package/lib/packlets/qualifiers/qualifierDefaultValueToken.d.ts.map +0 -1
  467. package/lib/packlets/qualifiers/qualifierDefaultValueToken.js.map +0 -1
  468. package/lib/packlets/resource-json/compiled/common.d.ts.map +0 -1
  469. package/lib/packlets/resource-json/compiled/common.js.map +0 -1
  470. package/lib/packlets/resource-json/compiled/convert.d.ts.map +0 -1
  471. package/lib/packlets/resource-json/compiled/convert.js.map +0 -1
  472. package/lib/packlets/resource-json/compiled/index.d.ts.map +0 -1
  473. package/lib/packlets/resource-json/compiled/index.js.map +0 -1
  474. package/lib/packlets/resource-json/compiled/json.d.ts.map +0 -1
  475. package/lib/packlets/resource-json/compiled/json.js.map +0 -1
  476. package/lib/packlets/resource-json/convert.d.ts.map +0 -1
  477. package/lib/packlets/resource-json/convert.js.map +0 -1
  478. package/lib/packlets/resource-json/helpers.d.ts.map +0 -1
  479. package/lib/packlets/resource-json/helpers.js.map +0 -1
  480. package/lib/packlets/resource-json/index.d.ts.map +0 -1
  481. package/lib/packlets/resource-json/index.js.map +0 -1
  482. package/lib/packlets/resource-json/json.d.ts.map +0 -1
  483. package/lib/packlets/resource-json/json.js.map +0 -1
  484. package/lib/packlets/resource-json/normalized.d.ts.map +0 -1
  485. package/lib/packlets/resource-json/normalized.js.map +0 -1
  486. package/lib/packlets/resource-json/resourceDeclCollection.d.ts.map +0 -1
  487. package/lib/packlets/resource-json/resourceDeclCollection.js.map +0 -1
  488. package/lib/packlets/resource-json/resourceDeclContainer.d.ts.map +0 -1
  489. package/lib/packlets/resource-json/resourceDeclContainer.js.map +0 -1
  490. package/lib/packlets/resource-json/resourceDeclTree.d.ts.map +0 -1
  491. package/lib/packlets/resource-json/resourceDeclTree.js.map +0 -1
  492. package/lib/packlets/resource-types/config/convert.d.ts.map +0 -1
  493. package/lib/packlets/resource-types/config/convert.js.map +0 -1
  494. package/lib/packlets/resource-types/config/index.d.ts.map +0 -1
  495. package/lib/packlets/resource-types/config/index.js.map +0 -1
  496. package/lib/packlets/resource-types/config/json.d.ts.map +0 -1
  497. package/lib/packlets/resource-types/config/json.js.map +0 -1
  498. package/lib/packlets/resource-types/helpers.d.ts.map +0 -1
  499. package/lib/packlets/resource-types/helpers.js.map +0 -1
  500. package/lib/packlets/resource-types/index.d.ts.map +0 -1
  501. package/lib/packlets/resource-types/index.js.map +0 -1
  502. package/lib/packlets/resource-types/jsonResourceType.d.ts.map +0 -1
  503. package/lib/packlets/resource-types/jsonResourceType.js.map +0 -1
  504. package/lib/packlets/resource-types/resourceType.d.ts.map +0 -1
  505. package/lib/packlets/resource-types/resourceType.js.map +0 -1
  506. package/lib/packlets/resource-types/resourceTypeCollector.d.ts.map +0 -1
  507. package/lib/packlets/resource-types/resourceTypeCollector.js.map +0 -1
  508. package/lib/packlets/resources/candidateReducer.d.ts.map +0 -1
  509. package/lib/packlets/resources/candidateReducer.js.map +0 -1
  510. package/lib/packlets/resources/common.d.ts.map +0 -1
  511. package/lib/packlets/resources/common.js.map +0 -1
  512. package/lib/packlets/resources/index.d.ts.map +0 -1
  513. package/lib/packlets/resources/index.js.map +0 -1
  514. package/lib/packlets/resources/resource.d.ts.map +0 -1
  515. package/lib/packlets/resources/resource.js.map +0 -1
  516. package/lib/packlets/resources/resourceBuilder.d.ts.map +0 -1
  517. package/lib/packlets/resources/resourceBuilder.js.map +0 -1
  518. package/lib/packlets/resources/resourceCandidate.d.ts.map +0 -1
  519. package/lib/packlets/resources/resourceCandidate.js.map +0 -1
  520. package/lib/packlets/resources/resourceManagerBuilder.d.ts.map +0 -1
  521. package/lib/packlets/resources/resourceManagerBuilder.js.map +0 -1
  522. package/lib/packlets/runtime/cacheListener.d.ts.map +0 -1
  523. package/lib/packlets/runtime/cacheListener.js.map +0 -1
  524. package/lib/packlets/runtime/cacheMetrics.d.ts.map +0 -1
  525. package/lib/packlets/runtime/cacheMetrics.js.map +0 -1
  526. package/lib/packlets/runtime/compiledResourceCollection.d.ts.map +0 -1
  527. package/lib/packlets/runtime/compiledResourceCollection.js.map +0 -1
  528. package/lib/packlets/runtime/conditionSetResolutionResult.d.ts.map +0 -1
  529. package/lib/packlets/runtime/conditionSetResolutionResult.js.map +0 -1
  530. package/lib/packlets/runtime/context/contextQualifierProvider.d.ts.map +0 -1
  531. package/lib/packlets/runtime/context/contextQualifierProvider.js.map +0 -1
  532. package/lib/packlets/runtime/context/contextQualifierProviderValidator.d.ts.map +0 -1
  533. package/lib/packlets/runtime/context/contextQualifierProviderValidator.js.map +0 -1
  534. package/lib/packlets/runtime/context/index.d.ts.map +0 -1
  535. package/lib/packlets/runtime/context/index.js.map +0 -1
  536. package/lib/packlets/runtime/context/simpleContextQualifierProvider.d.ts.map +0 -1
  537. package/lib/packlets/runtime/context/simpleContextQualifierProvider.js.map +0 -1
  538. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.d.ts.map +0 -1
  539. package/lib/packlets/runtime/context/validatingSimpleContextQualifierProvider.js.map +0 -1
  540. package/lib/packlets/runtime/iResourceManager.d.ts.map +0 -1
  541. package/lib/packlets/runtime/iResourceManager.js.map +0 -1
  542. package/lib/packlets/runtime/index.d.ts.map +0 -1
  543. package/lib/packlets/runtime/index.js.map +0 -1
  544. package/lib/packlets/runtime/resource-tree/common.d.ts.map +0 -1
  545. package/lib/packlets/runtime/resource-tree/common.js.map +0 -1
  546. package/lib/packlets/runtime/resource-tree/index.d.ts.map +0 -1
  547. package/lib/packlets/runtime/resource-tree/index.js.map +0 -1
  548. package/lib/packlets/runtime/resource-tree/readOnlyResourceTree.d.ts.map +0 -1
  549. package/lib/packlets/runtime/resource-tree/readOnlyResourceTree.js.map +0 -1
  550. package/lib/packlets/runtime/resource-tree/resourceTreeChildren.d.ts.map +0 -1
  551. package/lib/packlets/runtime/resource-tree/resourceTreeChildren.js.map +0 -1
  552. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.d.ts.map +0 -1
  553. package/lib/packlets/runtime/resource-tree/resourceTreeChildrenValidator.js.map +0 -1
  554. package/lib/packlets/runtime/resourceResolver.d.ts.map +0 -1
  555. package/lib/packlets/runtime/resourceResolver.js.map +0 -1
  556. package/lib/packlets/runtime/validate.d.ts.map +0 -1
  557. package/lib/packlets/runtime/validate.js.map +0 -1
@@ -56,13 +56,17 @@ var __importStar = (this && this.__importStar) || (function () {
56
56
  Object.defineProperty(exports, "__esModule", { value: true });
57
57
  exports.ResourceManagerBuilder = void 0;
58
58
  const ts_utils_1 = require("@fgv/ts-utils");
59
+ const ts_json_base_1 = require("@fgv/ts-json-base");
59
60
  const conditions_1 = require("../conditions");
60
61
  const decisions_1 = require("../decisions");
61
62
  const common_1 = require("../common");
63
+ const runtime_1 = require("../runtime");
62
64
  const resourceBuilder_1 = require("./resourceBuilder");
63
65
  const resource_1 = require("./resource");
64
66
  const ResourceJson = __importStar(require("../resource-json"));
65
67
  const Context = __importStar(require("../context"));
68
+ const Config = __importStar(require("../config"));
69
+ const ts_json_1 = require("@fgv/ts-json");
66
70
  /**
67
71
  * Builder for a collection of {@link Resources.Resource | resources}. Collects
68
72
  * {@link Resources.ResourceCandidate | candidates} for each resource into a
@@ -71,6 +75,12 @@ const Context = __importStar(require("../context"));
71
75
  * @public
72
76
  */
73
77
  class ResourceManagerBuilder {
78
+ /**
79
+ * The {@link QualifierTypes.ReadOnlyQualifierTypeCollector | qualifier types} used by this resource manager.
80
+ */
81
+ get qualifierTypes() {
82
+ return this.qualifiers.qualifierTypes;
83
+ }
74
84
  /**
75
85
  * A {@link Conditions.ConditionCollector | ConditionCollector} which
76
86
  * contains the {@link Conditions.Condition | conditions} used so far by
@@ -154,6 +164,7 @@ class ResourceManagerBuilder {
154
164
  })
155
165
  });
156
166
  this._built = false;
167
+ this._cachedResourceTree = undefined;
157
168
  }
158
169
  /**
159
170
  * Creates a new {@link Resources.ResourceManagerBuilder | ResourceManagerBuilder} object.
@@ -165,6 +176,48 @@ class ResourceManagerBuilder {
165
176
  static create(params) {
166
177
  return (0, ts_utils_1.captureResult)(() => new ResourceManagerBuilder(params));
167
178
  }
179
+ /**
180
+ * Creates a new {@link Resources.ResourceManagerBuilder | ResourceManagerBuilder} object from a predefined system configuration.
181
+ * @param name - The name of the predefined system configuration to use.
182
+ * @param qualifierDefaultValues - Optional default values for qualifiers.
183
+ * @returns `Success` with the new {@link Resources.ResourceManagerBuilder | ResourceManagerBuilder} object if successful,
184
+ * or `Failure` with an error message if not.
185
+ * @public
186
+ */
187
+ static createPredefined(name, qualifierDefaultValues) {
188
+ return Config.getPredefinedSystemConfiguration(name,
189
+ /* c8 ignore next 1 - defense in depth */
190
+ qualifierDefaultValues ? { qualifierDefaultValues } : undefined).onSuccess((systemConfig) => {
191
+ return ResourceManagerBuilder.create({
192
+ qualifiers: systemConfig.qualifiers,
193
+ resourceTypes: systemConfig.resourceTypes
194
+ });
195
+ });
196
+ }
197
+ /**
198
+ * Creates a new {@link Resources.ResourceManagerBuilder | ResourceManagerBuilder} from a
199
+ * {@link ResourceJson.Compiled.ICompiledResourceCollection | compiled resource collection}.
200
+ * This method reconstructs an exactly equivalent builder where all qualifier, condition,
201
+ * condition set, and decision indices match the original compiled collection.
202
+ * @param compiledCollection - The compiled resource collection to reconstruct from.
203
+ * @param systemConfig - The system configuration containing qualifiers and resource types.
204
+ * @returns `Success` with the new manager if successful, or `Failure` with an error message if not.
205
+ * @public
206
+ */
207
+ static createFromCompiledResourceCollection(compiledCollection, systemConfig) {
208
+ // Create the base builder with system configuration
209
+ return ResourceManagerBuilder.create({
210
+ qualifiers: systemConfig.qualifiers,
211
+ resourceTypes: systemConfig.resourceTypes
212
+ }).onSuccess((builder) => {
213
+ // Reconstruct all entities in order to preserve indices
214
+ return ResourceManagerBuilder._reconstructConditions(builder, compiledCollection)
215
+ .onSuccess(() => ResourceManagerBuilder._reconstructConditionSets(builder, compiledCollection))
216
+ .onSuccess(() => ResourceManagerBuilder._reconstructDecisions(builder, compiledCollection))
217
+ .onSuccess(() => ResourceManagerBuilder._reconstructResources(builder, compiledCollection))
218
+ .onSuccess(() => (0, ts_utils_1.succeed)(builder));
219
+ });
220
+ }
168
221
  /**
169
222
  * Given a {@link ResourceJson.Json.ILooseResourceCandidateDecl | resource candidate declaration}, builds and adds
170
223
  * a {@link Resources.ResourceCandidate | candidate} to the manager.
@@ -191,6 +244,7 @@ class ResourceManagerBuilder {
191
244
  this._builtResources.delete(id);
192
245
  this._built = false;
193
246
  this._numCandidates = undefined;
247
+ this._cachedResourceTree = undefined;
194
248
  return (0, ts_utils_1.succeedWithDetail)(c, d);
195
249
  });
196
250
  }
@@ -224,6 +278,37 @@ class ResourceManagerBuilder {
224
278
  })
225
279
  .withDetail('failure', detail);
226
280
  }
281
+ /**
282
+ * Adds a condition to the manager.
283
+ * @param decl - The condition declaration to add.
284
+ * @returns `Success` with the condition if successful, or `Failure` with an error message if not.
285
+ * @public
286
+ */
287
+ addCondition(decl) {
288
+ return conditions_1.Convert.validatedConditionDecl
289
+ .convert(decl, { qualifiers: this.qualifiers })
290
+ .onSuccess((validated) => {
291
+ return conditions_1.Condition.getKeyForDecl(validated).onSuccess((key) => {
292
+ return this._conditions.validating.getOrAdd(key, () => conditions_1.Condition.create(validated));
293
+ });
294
+ });
295
+ }
296
+ /**
297
+ * Adds a condition set to the manager.
298
+ * @param decl - The condition set declaration to add.
299
+ * @returns `Success` with the condition set if successful, or `Failure` with an error message if not.
300
+ * @public
301
+ */
302
+ addConditionSet(conditions) {
303
+ const decl = { conditions: [...conditions] };
304
+ return conditions_1.Convert.validatedConditionSetDecl
305
+ .convert(decl, { conditions: this._conditions })
306
+ .onSuccess((validated) => {
307
+ return conditions_1.ConditionSet.getKeyForDecl(validated).onSuccess((key) => {
308
+ return this._conditionSets.validating.getOrAdd(key, () => conditions_1.ConditionSet.create(validated));
309
+ });
310
+ });
311
+ }
227
312
  /**
228
313
  * Gets a read-only array of all {@link Resources.ResourceBuilder | resource builders} present in the manager.
229
314
  * @returns `Success` with the {@link Resources.ResourceBuilder | resource builder} if successful,
@@ -269,6 +354,36 @@ class ResourceManagerBuilder {
269
354
  getAllBuiltResources() {
270
355
  return this.build().onSuccess((manager) => (0, ts_utils_1.succeed)(Array.from(manager._builtResources.values()).sort((a, b) => a.id.localeCompare(b.id))));
271
356
  }
357
+ /**
358
+ * Builds and returns a hierarchical tree representation of all resources managed by this builder.
359
+ * Resources are organized based on their dot-separated resource IDs (e.g., "app.messages.welcome"
360
+ * becomes a tree with "app" as root, "messages" as branch, and "welcome" as leaf).
361
+ *
362
+ * String-based validation is available through the `children.validating` property,
363
+ * allowing callers to use `tree.children.validating.getById(stringId)` for validated access.
364
+ *
365
+ * Uses lazy initialization with caching for performance.
366
+ * @returns Result containing the resource tree root, or failure if tree construction fails
367
+ * @public
368
+ */
369
+ getBuiltResourceTree() {
370
+ // Ensure resources are built first
371
+ return this.build().onSuccess((manager) => {
372
+ if (manager._cachedResourceTree) {
373
+ return (0, ts_utils_1.succeed)(manager._cachedResourceTree);
374
+ }
375
+ // Convert all built resources to [ResourceId, Resource] pairs
376
+ const resources = [];
377
+ for (const [id, resource] of manager._builtResources.entries()) {
378
+ resources.push([id, resource]);
379
+ }
380
+ // Create the resource tree with lazy initialization
381
+ return runtime_1.ResourceTree.ReadOnlyResourceTreeRoot.create(resources).onSuccess((tree) => {
382
+ manager._cachedResourceTree = tree;
383
+ return (0, ts_utils_1.succeed)(tree);
384
+ });
385
+ });
386
+ }
272
387
  /**
273
388
  * Gets a read-only array of all {@link Resources.Resource | built resources} in the manager.
274
389
  * @returns `Success` with an array of resources if successful, or `Failure` with an error message if not.
@@ -419,33 +534,372 @@ class ResourceManagerBuilder {
419
534
  });
420
535
  }
421
536
  /**
422
- * Creates a filtered clone of this ResourceManagerBuilder using the specified context.
423
- * This is a convenience method that creates a new ResourceManagerBuilder with the same
424
- * configuration but filtered to include only candidates that match the provided context.
425
- * @param options - Options for the cloning operation, including the strongly-typed filterForContext property.
426
- * @returns A Result containing the new filtered ResourceManagerBuilder.
537
+ * Creates a clone of this ResourceManagerBuilder with optional configuration overrides.
538
+ * This method creates a new ResourceManagerBuilder that can optionally use different
539
+ * qualifiers and/or resource types than the original. It can also be filtered to include
540
+ * only candidates that match the provided context and apply candidate edits.
541
+ *
542
+ * @param options - Options for the cloning operation:
543
+ * - `qualifiers`: Optional qualifier collector to use instead of the original
544
+ * - `resourceTypes`: Optional resource type collector to use instead of the original
545
+ * - `filterForContext`: Optional context filter for candidates
546
+ * - `candidates`: Optional candidate edits to apply during cloning
547
+ * @returns A Result containing the new ResourceManagerBuilder with the specified configuration.
427
548
  * @public
428
549
  */
429
550
  /* c8 ignore next 21 - functional code path tested but coverage intermittently missed */
430
551
  clone(options) {
431
552
  return this.getResourceCollectionDecl(options).onSuccess((collection) => {
553
+ var _a, _b;
432
554
  return ResourceManagerBuilder.create({
433
- qualifiers: this.qualifiers,
434
- resourceTypes: this.resourceTypes
555
+ qualifiers: (_a = options === null || options === void 0 ? void 0 : options.qualifiers) !== null && _a !== void 0 ? _a : this.qualifiers,
556
+ resourceTypes: (_b = options === null || options === void 0 ? void 0 : options.resourceTypes) !== null && _b !== void 0 ? _b : this.resourceTypes
435
557
  }).onSuccess((newManager) => {
436
- // Add each resource from the filtered collection to the new manager
437
- if (collection.resources) {
438
- for (const resourceDecl of collection.resources) {
439
- const addResult = newManager.addResource(resourceDecl);
440
- if (addResult.isFailure()) {
441
- return (0, ts_utils_1.fail)(`${resourceDecl.id}: Failed to add resource to cloned manager: ${addResult.message}`);
558
+ // Check if we have candidates to apply as edits
559
+ const editCandidates = (options === null || options === void 0 ? void 0 : options.candidates) || [];
560
+ const candidatesByResourceResult = editCandidates.length > 0
561
+ ? ResourceManagerBuilder._createCandidatesByResourceMap(editCandidates)
562
+ : (0, ts_utils_1.succeed)(new Map());
563
+ return candidatesByResourceResult.onSuccess((candidatesByResource) => {
564
+ // Track which resource IDs have been processed from the original collection
565
+ const processedResourceIds = new Set();
566
+ // Add each resource from the filtered collection to the new manager
567
+ if (collection.resources) {
568
+ for (const resourceDecl of collection.resources) {
569
+ processedResourceIds.add(resourceDecl.id);
570
+ // Apply edits if there are candidates for this resource
571
+ const editedDeclResult = ResourceManagerBuilder._applyEditsToResourceDeclaration(resourceDecl, candidatesByResource, this._conditions);
572
+ if (editedDeclResult.isFailure()) {
573
+ return (0, ts_utils_1.fail)(`${resourceDecl.id}: Failed to apply edits: ${editedDeclResult.message}`);
574
+ }
575
+ const addResult = newManager.addResource(editedDeclResult.value);
576
+ /* c8 ignore next 5 - edge case (nearly?) impossible to reproduce */
577
+ if (addResult.isFailure()) {
578
+ return (0, ts_utils_1.fail)(`${resourceDecl.id}: Failed to add resource to cloned manager: ${addResult.message}`);
579
+ }
442
580
  }
443
581
  }
444
- }
445
- return (0, ts_utils_1.succeed)(newManager);
582
+ // Handle any remaining candidates that target new resources not in the original collection
583
+ const errors = new ts_utils_1.MessageAggregator();
584
+ for (const [resourceId, candidates] of candidatesByResource) {
585
+ if (!processedResourceIds.has(resourceId)) {
586
+ // Create a new resource declaration for candidates targeting a new resource ID
587
+ ResourceManagerBuilder._createResourceDeclFromCandidates(resourceId, candidates, this._conditions)
588
+ .withErrorFormat((e) => `${resourceId}: Failed to create new resource from candidates: ${e}`)
589
+ .onSuccess((newResourceDecl) => {
590
+ return newManager
591
+ .addResource(newResourceDecl)
592
+ .withErrorFormat((e) => `${resourceId}: Failed to add new resource to cloned manager: ${e}`);
593
+ })
594
+ .aggregateError(errors);
595
+ }
596
+ }
597
+ return errors.returnOrReport((0, ts_utils_1.succeed)(newManager));
598
+ });
446
599
  });
447
600
  });
448
601
  }
602
+ /**
603
+ * Creates a resource ID keyed map from an array of loose resource candidate declarations.
604
+ * This enables efficient detection of edit collisions by grouping candidates by their target resource.
605
+ * @param candidates - Array of loose resource candidate declarations to organize
606
+ * @returns A Result containing a Map where keys are validated ResourceIds and values are arrays of candidates for that resource
607
+ * @internal
608
+ */
609
+ static _createCandidatesByResourceMap(candidates) {
610
+ const candidatesByResource = new Map();
611
+ for (const candidate of candidates) {
612
+ const { value: resourceId, message } = common_1.Validate.toResourceId(candidate.id);
613
+ if (message !== undefined) {
614
+ return (0, ts_utils_1.fail)(`Invalid resource ID "${candidate.id}": ${message}`);
615
+ }
616
+ const existingCandidates = candidatesByResource.get(resourceId);
617
+ if (existingCandidates) {
618
+ existingCandidates.push(candidate);
619
+ }
620
+ else {
621
+ candidatesByResource.set(resourceId, [candidate]);
622
+ }
623
+ }
624
+ return (0, ts_utils_1.succeed)(candidatesByResource);
625
+ }
626
+ /**
627
+ * Generates a proper ConditionSet token for collision detection using the existing ConditionSet.getKeyForDecl method.
628
+ * @param conditionSet - The condition set to generate a token for
629
+ * @param conditionCollector - The condition collector needed for validation context
630
+ * @returns A Result containing the ConditionSet token if successful, or failure if validation fails
631
+ * @internal
632
+ */
633
+ /**
634
+ * Applies candidate edits to a resource declaration, handling collisions using condition set tokens.
635
+ * If there's no collision, adds the candidate. If there's a collision, replaces the original candidate with the edit.
636
+ * @param resourceDecl - The original resource declaration to potentially modify
637
+ * @param candidatesByResource - Map of resource IDs to arrays of candidate edits
638
+ * @param conditionCollector - The condition collector needed for generating condition tokens
639
+ * @returns A Result containing the resource declaration to use (original or modified)
640
+ * @internal
641
+ */
642
+ static _applyEditsToResourceDeclaration(resourceDecl, candidatesByResource, conditionCollector) {
643
+ var _a, _b;
644
+ const { value: resourceId, message } = common_1.Validate.toResourceId(resourceDecl.id);
645
+ /* c8 ignore next 3 - defensive validation: resource IDs are validated when added to builder, but this protects against corrupted data */
646
+ if (message !== undefined) {
647
+ return (0, ts_utils_1.fail)(`Invalid resource ID "${resourceDecl.id}": ${message}`);
648
+ }
649
+ const editCandidates = candidatesByResource.get(resourceId);
650
+ if (!editCandidates || editCandidates.length === 0) {
651
+ return (0, ts_utils_1.succeed)(resourceDecl);
652
+ }
653
+ // Use Map approach: apply original candidates first, then replace with edits on collision
654
+ const candidatesByConditionKey = new Map();
655
+ /* c8 ignore next 1 - ?? is defense in depth */
656
+ const declCandidates = (_a = resourceDecl.candidates) !== null && _a !== void 0 ? _a : [];
657
+ // First, add all original candidates keyed by their condition set token
658
+ for (const candidate of declCandidates) {
659
+ const conditionTokenResult = conditions_1.ConditionSet.getKeyFromLooseDecl(candidate.conditions, conditionCollector);
660
+ /* c8 ignore next 5 - edge case or internal error (nearly?) impossible to reproduce */
661
+ if (conditionTokenResult.isFailure()) {
662
+ return (0, ts_utils_1.fail)(`Failed to generate condition token for original candidate: ${conditionTokenResult.message}`);
663
+ }
664
+ candidatesByConditionKey.set(conditionTokenResult.value, candidate);
665
+ }
666
+ // Then, apply edits (this replaces any colliding original candidates)
667
+ // Convert edit candidates (which have ids) to child candidates (without ids) for merging
668
+ for (const editCandidate of editCandidates) {
669
+ const conditionTokenResult = conditions_1.ConditionSet.getKeyFromLooseDecl(editCandidate.conditions, conditionCollector);
670
+ if (conditionTokenResult.isFailure()) {
671
+ return (0, ts_utils_1.fail)(`Failed to generate condition token for edit candidate: ${conditionTokenResult.message}`);
672
+ }
673
+ let editedJson = editCandidate.json;
674
+ const previousJson = (_b = candidatesByConditionKey.get(conditionTokenResult.value)) === null || _b === void 0 ? void 0 : _b.json;
675
+ if (previousJson && previousJson !== editedJson) {
676
+ editedJson = ts_json_1.JsonEditor.create({
677
+ merge: {
678
+ arrayMergeBehavior: 'replace',
679
+ nullAsDelete: false
680
+ }
681
+ })
682
+ .onSuccess((editor) => {
683
+ return editor.mergeObjectsInPlace({}, [previousJson, editedJson]);
684
+ })
685
+ .orThrow();
686
+ }
687
+ const childCandidate = {
688
+ json: editedJson,
689
+ conditions: editCandidate.conditions,
690
+ isPartial: editCandidate.isPartial,
691
+ mergeMethod: editCandidate.mergeMethod
692
+ };
693
+ candidatesByConditionKey.set(conditionTokenResult.value, childCandidate);
694
+ }
695
+ // Extract the final merged candidate list
696
+ const mergedCandidates = Array.from(candidatesByConditionKey.values());
697
+ const modifiedDecl = Object.assign(Object.assign({}, resourceDecl), { candidates: mergedCandidates });
698
+ return (0, ts_utils_1.succeed)(modifiedDecl);
699
+ }
700
+ /**
701
+ * Creates a new resource declaration from an array of candidate declarations.
702
+ * This is used when cloning to create new resources that don't exist in the original manager.
703
+ * @param resourceId - The validated resource ID for the new resource
704
+ * @param candidates - Array of loose candidate declarations for the new resource
705
+ * @param conditionCollector - The condition collector for validation context
706
+ * @returns A Result containing the new resource declaration if successful, or failure if validation fails
707
+ * @internal
708
+ */
709
+ static _createResourceDeclFromCandidates(resourceId, candidates, conditionCollector) {
710
+ // Convert candidate declarations to child candidate declarations
711
+ const childCandidates = [];
712
+ // Ensure we have candidates
713
+ /* c8 ignore next 3 - defense in depth against internal error */
714
+ if (candidates.length === 0) {
715
+ return (0, ts_utils_1.fail)('Cannot create resource declaration from empty candidates array');
716
+ }
717
+ // Extract resourceTypeName from the first candidate (all candidates for the same resource should have the same type)
718
+ const resourceTypeName = candidates[0].resourceTypeName;
719
+ /* c8 ignore next 3 - defense in depth */
720
+ if (!resourceTypeName) {
721
+ return (0, ts_utils_1.fail)('resourceTypeName is required for new resource candidates');
722
+ }
723
+ for (const candidate of candidates) {
724
+ const childCandidate = {
725
+ json: candidate.json,
726
+ conditions: candidate.conditions,
727
+ isPartial: candidate.isPartial,
728
+ mergeMethod: candidate.mergeMethod
729
+ };
730
+ childCandidates.push(childCandidate);
731
+ }
732
+ // Create the new resource declaration
733
+ const newResourceDecl = {
734
+ id: resourceId,
735
+ candidates: childCandidates,
736
+ resourceTypeName
737
+ };
738
+ return (0, ts_utils_1.succeed)(newResourceDecl);
739
+ }
740
+ /**
741
+ * Reconstructs conditions from a compiled collection and adds them to the builder.
742
+ * @param builder - The builder to add conditions to.
743
+ * @param compiledCollection - The compiled collection containing conditions.
744
+ * @returns `Success` if all conditions were added successfully, `Failure` otherwise.
745
+ * @internal
746
+ */
747
+ static _reconstructConditions(builder, compiledCollection) {
748
+ const errors = new ts_utils_1.MessageAggregator();
749
+ for (const compiledCondition of compiledCollection.conditions) {
750
+ // Get the qualifier by index
751
+ const qualifierResult = builder.qualifiers.getAt(compiledCondition.qualifierIndex);
752
+ /* c8 ignore next 4 - edge case or internal error (nearly?) impossible to reproduce */
753
+ if (qualifierResult.isFailure()) {
754
+ qualifierResult.aggregateError(errors);
755
+ continue;
756
+ }
757
+ // Create condition declaration from compiled condition
758
+ const conditionDecl = {
759
+ qualifierName: qualifierResult.value.name,
760
+ operator: compiledCondition.operator,
761
+ value: compiledCondition.value,
762
+ priority: compiledCondition.priority,
763
+ scoreAsDefault: compiledCondition.scoreAsDefault
764
+ };
765
+ // Add condition to builder (it will get the next sequential index)
766
+ builder.addCondition(conditionDecl).aggregateError(errors);
767
+ }
768
+ return errors.returnOrReport((0, ts_utils_1.succeed)(true));
769
+ }
770
+ /**
771
+ * Reconstructs condition sets from a compiled collection and adds them to the builder.
772
+ * @param builder - The builder to add condition sets to.
773
+ * @param compiledCollection - The compiled collection containing condition sets.
774
+ * @returns `Success` if all condition sets were added successfully, `Failure` otherwise.
775
+ * @internal
776
+ */
777
+ static _reconstructConditionSets(builder, compiledCollection) {
778
+ const errors = new ts_utils_1.MessageAggregator();
779
+ for (const compiledConditionSet of compiledCollection.conditionSets) {
780
+ // Get conditions by their indices
781
+ const conditionResults = compiledConditionSet.conditions.map((idx) => builder._conditions.getAt(idx));
782
+ // Check for any failures
783
+ const failedIndex = conditionResults.findIndex((r) => r.isFailure());
784
+ /* c8 ignore next 4 - edge case or internal error (nearly?) impossible to reproduce */
785
+ if (failedIndex >= 0) {
786
+ conditionResults[failedIndex].aggregateError(errors);
787
+ continue;
788
+ }
789
+ // Create condition set from conditions (not declarations)
790
+ const conditions = conditionResults.map((r) => r.orThrow());
791
+ // Convert conditions to declarations for addConditionSet
792
+ const conditionDecls = conditions.map((c) => c.toLooseConditionDecl());
793
+ builder.addConditionSet(conditionDecls).aggregateError(errors);
794
+ }
795
+ return errors.returnOrReport((0, ts_utils_1.succeed)(true));
796
+ }
797
+ /**
798
+ * Reconstructs decisions from a compiled collection and adds them to the builder.
799
+ * @param builder - The builder to add decisions to.
800
+ * @param compiledCollection - The compiled collection containing decisions.
801
+ * @returns `Success` if all decisions were added successfully, `Failure` otherwise.
802
+ * @internal
803
+ */
804
+ static _reconstructDecisions(builder, compiledCollection) {
805
+ const errors = new ts_utils_1.MessageAggregator();
806
+ for (const compiledDecision of compiledCollection.decisions) {
807
+ // Get condition sets by their indices
808
+ const conditionSetResults = compiledDecision.conditionSets.map((idx) => builder._conditionSets.getAt(idx));
809
+ // Check for any failures
810
+ const failedIndex = conditionSetResults.findIndex((r) => r.isFailure());
811
+ if (failedIndex >= 0) {
812
+ conditionSetResults[failedIndex].aggregateError(errors);
813
+ continue;
814
+ }
815
+ // Get condition sets from successful results
816
+ const conditionSets = conditionSetResults.map((r) => r.orThrow());
817
+ // Create AbstractDecision from condition sets and add to collector
818
+ decisions_1.AbstractDecision.createAbstractDecision({ conditionSets })
819
+ .onSuccess((decision) => builder._decisions.getOrAdd(decision))
820
+ .aggregateError(errors);
821
+ }
822
+ return errors.returnOrReport((0, ts_utils_1.succeed)(true));
823
+ }
824
+ /**
825
+ * Reconstructs resources and their candidates from a compiled collection and adds them to the builder.
826
+ * @param builder - The builder to add resources to.
827
+ * @param compiledCollection - The compiled collection containing resources.
828
+ * @returns `Success` if all resources were added successfully, `Failure` otherwise.
829
+ * @internal
830
+ */
831
+ static _reconstructResources(builder, compiledCollection) {
832
+ const errors = new ts_utils_1.MessageAggregator();
833
+ for (const compiledResource of compiledCollection.resources) {
834
+ // Get the resource type by index
835
+ const resourceTypeResult = builder.resourceTypes.getAt(compiledResource.type);
836
+ /* c8 ignore next 4 - edge case or internal error (nearly?) impossible to reproduce */
837
+ if (resourceTypeResult.isFailure()) {
838
+ resourceTypeResult.aggregateError(errors);
839
+ continue;
840
+ }
841
+ // Get the decision by index
842
+ const decisionResult = builder._decisions.getAt(compiledResource.decision);
843
+ /* c8 ignore next 4 - edge case or internal error (nearly?) impossible to reproduce */
844
+ if (decisionResult.isFailure()) {
845
+ decisionResult.aggregateError(errors);
846
+ continue;
847
+ }
848
+ const decision = decisionResult.value;
849
+ const resourceType = resourceTypeResult.value;
850
+ // Create candidates from the decision's condition sets
851
+ ResourceManagerBuilder._createCandidatesFromDecision(compiledResource, decision, resourceType, builder).aggregateError(errors);
852
+ }
853
+ return errors.returnOrReport((0, ts_utils_1.succeed)(true));
854
+ }
855
+ /**
856
+ * Helper method to create candidates from a decision's condition sets.
857
+ * @param compiledResource - The compiled resource containing candidates.
858
+ * @param decision - The decision containing condition sets.
859
+ * @param resourceType - The resource type for the candidates.
860
+ * @param builder - The builder to add candidates to.
861
+ * @returns `Success` if all candidates were added successfully, `Failure` otherwise.
862
+ * @internal
863
+ */
864
+ static _createCandidatesFromDecision(compiledResource, decision, resourceType, builder) {
865
+ var _a;
866
+ const errors = new ts_utils_1.MessageAggregator();
867
+ // Match each candidate to its corresponding condition set
868
+ for (let i = 0; i < compiledResource.candidates.length; i++) {
869
+ const candidate = compiledResource.candidates[i];
870
+ // Build conditions from the corresponding condition set (if available)
871
+ let conditions;
872
+ if (i < decision.candidates.length) {
873
+ const decisionCandidate = decision.candidates[i];
874
+ conditions = {};
875
+ for (const condition of decisionCandidate.conditionSet.conditions) {
876
+ conditions[condition.qualifier.name] = condition.value;
877
+ }
878
+ /* c8 ignore next 3 - defense in depth */
879
+ if (Object.keys(conditions).length === 0) {
880
+ conditions = undefined;
881
+ }
882
+ }
883
+ // Convert json value to JsonObject, handling undefined case
884
+ /* c8 ignore next 1 - defense in depth */
885
+ const rawJson = (_a = candidate.json) !== null && _a !== void 0 ? _a : {};
886
+ ts_json_base_1.Converters.jsonObject
887
+ .convert(rawJson)
888
+ .onSuccess((json) => {
889
+ const candidateDecl = {
890
+ id: compiledResource.id,
891
+ json,
892
+ conditions,
893
+ isPartial: candidate.isPartial,
894
+ mergeMethod: candidate.mergeMethod,
895
+ resourceTypeName: resourceType.key
896
+ };
897
+ return builder.addLooseCandidate(candidateDecl).aggregateError(errors);
898
+ })
899
+ .aggregateError(errors);
900
+ }
901
+ return errors.returnOrReport((0, ts_utils_1.succeed)(true));
902
+ }
449
903
  }
450
904
  exports.ResourceManagerBuilder = ResourceManagerBuilder;
451
905
  //# sourceMappingURL=resourceManagerBuilder.js.map
@@ -31,6 +31,11 @@ export interface IResourceResolverCacheListener {
31
31
  * @param index - The index of the cache that had an error.
32
32
  */
33
33
  onCacheError(cache: ResourceResolverCacheType, index: number): void;
34
+ /**
35
+ * Called when a context error occurs.
36
+ * @param error - The error that occurred.
37
+ */
38
+ onContextError(qualifier: string, error: string): void;
34
39
  /**
35
40
  * Called when a cache is cleared.
36
41
  * @param cache - The type of cache that was cleared.
@@ -54,6 +59,10 @@ export declare class NoOpResourceResolverCacheListener implements IResourceResol
54
59
  * {@inheritDoc Runtime.IResourceResolverCacheListener.onCacheError}
55
60
  */
56
61
  onCacheError(cache: ResourceResolverCacheType, index: number): void;
62
+ /**
63
+ * {@inheritDoc Runtime.IResourceResolverCacheListener.onContextError}
64
+ */
65
+ onContextError(qualifier: string, error: string): void;
57
66
  /**
58
67
  * {@inheritDoc Runtime.IResourceResolverCacheListener.onCacheClear}
59
68
  */
@@ -45,6 +45,12 @@ class NoOpResourceResolverCacheListener {
45
45
  onCacheError(cache, index) {
46
46
  // no-op
47
47
  }
48
+ /**
49
+ * {@inheritDoc Runtime.IResourceResolverCacheListener.onContextError}
50
+ */
51
+ onContextError(qualifier, error) {
52
+ // no-op
53
+ }
48
54
  /**
49
55
  * {@inheritDoc Runtime.IResourceResolverCacheListener.onCacheClear}
50
56
  */
@@ -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;