@fgv/ts-res 5.0.0-22 → 5.0.0-24

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 (288) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +665 -44
  3. package/lib/packlets/common/convert.d.ts +10 -0
  4. package/lib/packlets/common/convert.js +11 -1
  5. package/lib/packlets/common/resources.d.ts +14 -0
  6. package/lib/packlets/common/validate/regularExpressions.d.ts +4 -0
  7. package/lib/packlets/common/validate/regularExpressions.js +5 -1
  8. package/lib/packlets/common/validate/resources.d.ts +35 -1
  9. package/lib/packlets/common/validate/resources.js +54 -0
  10. package/lib/packlets/config/convert.js +1 -1
  11. package/lib/packlets/config/json.d.ts +1 -1
  12. package/lib/packlets/qualifier-types/config/convert.d.ts +22 -1
  13. package/lib/packlets/qualifier-types/config/convert.js +67 -2
  14. package/lib/packlets/qualifier-types/config/json.d.ts +11 -2
  15. package/lib/packlets/qualifier-types/helpers.d.ts +1 -2
  16. package/lib/packlets/qualifier-types/languageQualifierType.d.ts +27 -1
  17. package/lib/packlets/qualifier-types/languageQualifierType.js +75 -0
  18. package/lib/packlets/qualifier-types/literalQualifierType.d.ts +30 -4
  19. package/lib/packlets/qualifier-types/literalQualifierType.js +77 -0
  20. package/lib/packlets/qualifier-types/literalValueHierarchy.d.ts +6 -10
  21. package/lib/packlets/qualifier-types/literalValueHierarchy.js +10 -0
  22. package/lib/packlets/qualifier-types/qualifierType.d.ts +28 -0
  23. package/lib/packlets/qualifier-types/territoryQualifierType.d.ts +28 -4
  24. package/lib/packlets/qualifier-types/territoryQualifierType.js +77 -0
  25. package/lib/packlets/resource-json/compiled/convert.js +2 -1
  26. package/lib/packlets/resource-json/compiled/json.d.ts +6 -2
  27. package/lib/packlets/resource-types/jsonResourceType.d.ts +4 -0
  28. package/lib/packlets/resource-types/jsonResourceType.js +4 -0
  29. package/lib/packlets/resource-types/resourceType.d.ts +4 -0
  30. package/lib/packlets/resources/candidateValue.d.ts +92 -0
  31. package/lib/{test/unit/qualifier-types/testQualifierType.js → packlets/resources/candidateValue.js} +63 -24
  32. package/lib/packlets/resources/candidateValueCollector.d.ts +55 -0
  33. package/lib/packlets/resources/candidateValueCollector.js +96 -0
  34. package/lib/packlets/resources/index.d.ts +2 -0
  35. package/lib/packlets/resources/index.js +2 -0
  36. package/lib/packlets/resources/resource.js +2 -2
  37. package/lib/packlets/resources/resourceBuilder.d.ts +6 -0
  38. package/lib/packlets/resources/resourceBuilder.js +3 -1
  39. package/lib/packlets/resources/resourceCandidate.d.ts +10 -1
  40. package/lib/packlets/resources/resourceCandidate.js +11 -5
  41. package/lib/packlets/resources/resourceManagerBuilder.d.ts +7 -0
  42. package/lib/packlets/resources/resourceManagerBuilder.js +13 -6
  43. package/lib/packlets/runtime/compiledResourceCollection.d.ts +20 -8
  44. package/lib/packlets/runtime/compiledResourceCollection.js +25 -4
  45. package/lib/packlets/runtime/index.d.ts +1 -0
  46. package/lib/packlets/runtime/index.js +1 -0
  47. package/lib/packlets/runtime/resource-tree/common.d.ts +1 -1
  48. package/lib/packlets/runtime/resourceTreeResolver.d.ts +152 -0
  49. package/lib/packlets/runtime/resourceTreeResolver.js +222 -0
  50. package/package.json +12 -12
  51. package/.vscode/4.json +0 -3
  52. package/.vscode/launch.json +0 -16
  53. package/.vscode/settings.json +0 -3
  54. package/dist/ts-res.d.ts +0 -9713
  55. package/dist/tsdoc-metadata.json +0 -11
  56. package/lib/test/data/sample.json +0 -32
  57. package/lib/test/unit/bundle/bundleBuilder.test.d.ts +0 -2
  58. package/lib/test/unit/bundle/bundleLoader.test.d.ts +0 -2
  59. package/lib/test/unit/bundle/bundleUtils.test.d.ts +0 -2
  60. package/lib/test/unit/bundle/convert.test.d.ts +0 -2
  61. package/lib/test/unit/bundle/integration.test.d.ts +0 -2
  62. package/lib/test/unit/bundle/model.test.d.ts +0 -2
  63. package/lib/test/unit/bundle/normalization.test.d.ts +0 -2
  64. package/lib/test/unit/common/conditions.test.d.ts +0 -2
  65. package/lib/test/unit/common/helpers/conditions.test.d.ts +0 -2
  66. package/lib/test/unit/common/helpers/contexts.test.d.ts +0 -2
  67. package/lib/test/unit/common/helpers/qualifierDefaultValues.test.d.ts +0 -2
  68. package/lib/test/unit/common/resources.test.d.ts +0 -2
  69. package/lib/test/unit/conditions/condition.test.d.ts +0 -2
  70. package/lib/test/unit/conditions/conditionCollector.test.d.ts +0 -2
  71. package/lib/test/unit/conditions/conditionScoreAsDefault.test.d.ts +0 -2
  72. package/lib/test/unit/conditions/conditionSet.test.d.ts +0 -2
  73. package/lib/test/unit/conditions/conditionSetCollector.test.d.ts +0 -2
  74. package/lib/test/unit/conditions/conditionToken.test.d.ts +0 -2
  75. package/lib/test/unit/conditions/convert.test.d.ts +0 -2
  76. package/lib/test/unit/config/common.test.d.ts +0 -2
  77. package/lib/test/unit/config/convert.test.d.ts +0 -2
  78. package/lib/test/unit/config/predefined/default.test.d.ts +0 -2
  79. package/lib/test/unit/config/predefined/extended.test.d.ts +0 -2
  80. package/lib/test/unit/config/systemConfiguration.test.d.ts +0 -2
  81. package/lib/test/unit/config/systemConfigurationInitParams.test.d.ts +0 -2
  82. package/lib/test/unit/context/contextToken.test.d.ts +0 -2
  83. package/lib/test/unit/context/convert.test.d.ts +0 -2
  84. package/lib/test/unit/decisions/abstractDecision.test.d.ts +0 -2
  85. package/lib/test/unit/decisions/abstractDecisionCollector.test.d.ts +0 -2
  86. package/lib/test/unit/decisions/candidate.test.d.ts +0 -2
  87. package/lib/test/unit/decisions/concreteDecision.test.d.ts +0 -2
  88. package/lib/test/unit/decisions/decision.test.d.ts +0 -2
  89. package/lib/test/unit/import/collectionImporter.test.d.ts +0 -2
  90. package/lib/test/unit/import/fsItem.test.d.ts +0 -2
  91. package/lib/test/unit/import/fsItemImporter.test.d.ts +0 -2
  92. package/lib/test/unit/import/importContext.test.d.ts +0 -2
  93. package/lib/test/unit/import/importManager.test.d.ts +0 -2
  94. package/lib/test/unit/import/jsonImporter.test.d.ts +0 -2
  95. package/lib/test/unit/import/pathImporter.test.d.ts +0 -2
  96. package/lib/test/unit/qualifier-types/convert.test.d.ts +0 -2
  97. package/lib/test/unit/qualifier-types/helpers.test.d.ts +0 -2
  98. package/lib/test/unit/qualifier-types/languageQualifierType.test.d.ts +0 -2
  99. package/lib/test/unit/qualifier-types/literalQualifierType.test.d.ts +0 -2
  100. package/lib/test/unit/qualifier-types/literalValueHierarchy.test.d.ts +0 -2
  101. package/lib/test/unit/qualifier-types/qualifierType.test.d.ts +0 -2
  102. package/lib/test/unit/qualifier-types/qualifierTypeCollector.test.d.ts +0 -2
  103. package/lib/test/unit/qualifier-types/territoryQualifierType.test.d.ts +0 -2
  104. package/lib/test/unit/qualifier-types/testQualifierType.d.ts +0 -15
  105. package/lib/test/unit/qualifiers/convert.test.d.ts +0 -2
  106. package/lib/test/unit/qualifiers/qualifierCollector.test.d.ts +0 -2
  107. package/lib/test/unit/qualifiers/qualifierDefaultValue.test.d.ts +0 -2
  108. package/lib/test/unit/qualifiers/qualifierDefaultValueToken.test.d.ts +0 -2
  109. package/lib/test/unit/resource-json/convert.test.d.ts +0 -2
  110. package/lib/test/unit/resource-json/nameInheritance.test.d.ts +0 -2
  111. package/lib/test/unit/resource-json/resourceDeclCollection.test.d.ts +0 -2
  112. package/lib/test/unit/resource-json/resourceDeclTree.test.d.ts +0 -2
  113. package/lib/test/unit/resource-types/derivedResourceType.test.d.ts +0 -2
  114. package/lib/test/unit/resource-types/jsonResourceType.test.d.ts +0 -2
  115. package/lib/test/unit/resource-types/resourceTypeCollector.test.d.ts +0 -2
  116. package/lib/test/unit/resource-types/testDerivedResourceType.d.ts +0 -78
  117. package/lib/test/unit/resource-types/testDerivedResourceType.js +0 -110
  118. package/lib/test/unit/resources/candidateReducer.integration.test.d.ts +0 -2
  119. package/lib/test/unit/resources/candidateReducer.test.d.ts +0 -2
  120. package/lib/test/unit/resources/reduceCandidates.test.d.ts +0 -2
  121. package/lib/test/unit/resources/reduceQualifiers.comprehensive.test.d.ts +0 -2
  122. package/lib/test/unit/resources/reduceQualifiers.test.d.ts +0 -2
  123. package/lib/test/unit/resources/resource.test.d.ts +0 -2
  124. package/lib/test/unit/resources/resourceBuilder.test.d.ts +0 -2
  125. package/lib/test/unit/resources/resourceCandidate.test.d.ts +0 -2
  126. package/lib/test/unit/resources/resourceManagerBuilder.clone.test.d.ts +0 -2
  127. package/lib/test/unit/resources/resourceManagerBuilder.getBuiltResourceTree.test.d.ts +0 -2
  128. package/lib/test/unit/resources/resourceManagerBuilder.test.d.ts +0 -2
  129. package/lib/test/unit/runtime/cacheListener.test.d.ts +0 -2
  130. package/lib/test/unit/runtime/cacheMetrics.test.d.ts +0 -2
  131. package/lib/test/unit/runtime/compiledResourceCollection.test.d.ts +0 -2
  132. package/lib/test/unit/runtime/conditionSetResolutionResult.comprehensive.test.d.ts +0 -2
  133. package/lib/test/unit/runtime/conditionSetResolutionResult.test.d.ts +0 -2
  134. package/lib/test/unit/runtime/context/contextQualifierProvider.test.d.ts +0 -2
  135. package/lib/test/unit/runtime/context/contextQualifierProviderValidator.test.d.ts +0 -2
  136. package/lib/test/unit/runtime/context/simpleContextQualifierProvider.test.d.ts +0 -2
  137. package/lib/test/unit/runtime/context/validatingSimpleContextQualifierProvider.test.d.ts +0 -2
  138. package/lib/test/unit/runtime/resource-tree/readOnlyResourceTree.test.d.ts +0 -2
  139. package/lib/test/unit/runtime/resource-tree/resourceTreeChildren.test.d.ts +0 -2
  140. package/lib/test/unit/runtime/resource-tree/resourceTreeChildrenValidator.test.d.ts +0 -2
  141. package/lib/test/unit/runtime/resourceResolver.coverage.test.d.ts +0 -2
  142. package/lib/test/unit/runtime/resourceResolver.defaultResolution.test.d.ts +0 -2
  143. package/lib/test/unit/runtime/resourceResolver.newFeatures.test.d.ts +0 -2
  144. package/lib/test/unit/runtime/resourceResolver.test.d.ts +0 -2
  145. package/lib/test/unit/runtime/validate.test.d.ts +0 -2
  146. package/lib/test/unit/zip-archive/convert.test.d.ts +0 -2
  147. package/lib/test/unit/zip-archive/json.test.d.ts +0 -2
  148. package/lib/test/unit/zip-archive/zipArchiveCreator.test.d.ts +0 -2
  149. package/lib/test/unit/zip-archive/zipArchiveFormat.test.d.ts +0 -2
  150. package/lib/test/unit/zip-archive/zipArchiveIdempotency.test.d.ts +0 -2
  151. package/lib/test/unit/zip-archive/zipArchiveLoader.test.d.ts +0 -2
  152. package/src/index.ts +0 -75
  153. package/src/packlets/bundle/bundleBuilder.ts +0 -159
  154. package/src/packlets/bundle/bundleLoader.ts +0 -157
  155. package/src/packlets/bundle/bundleNormalizer.ts +0 -173
  156. package/src/packlets/bundle/bundleUtils.ts +0 -142
  157. package/src/packlets/bundle/convert.ts +0 -87
  158. package/src/packlets/bundle/index.ts +0 -52
  159. package/src/packlets/bundle/model.ts +0 -138
  160. package/src/packlets/common/conditions.ts +0 -226
  161. package/src/packlets/common/convert.ts +0 -184
  162. package/src/packlets/common/helpers/conditions.ts +0 -84
  163. package/src/packlets/common/helpers/context.ts +0 -88
  164. package/src/packlets/common/helpers/index.ts +0 -26
  165. package/src/packlets/common/helpers/qualifierDefaultValues.ts +0 -91
  166. package/src/packlets/common/helpers/resources.ts +0 -96
  167. package/src/packlets/common/index.ts +0 -30
  168. package/src/packlets/common/resources.ts +0 -105
  169. package/src/packlets/common/validate/conditions.ts +0 -595
  170. package/src/packlets/common/validate/index.ts +0 -27
  171. package/src/packlets/common/validate/regularExpressions.ts +0 -92
  172. package/src/packlets/common/validate/resources.ts +0 -170
  173. package/src/packlets/conditions/condition.ts +0 -351
  174. package/src/packlets/conditions/conditionCollector.ts +0 -103
  175. package/src/packlets/conditions/conditionDecls.ts +0 -50
  176. package/src/packlets/conditions/conditionSet.ts +0 -318
  177. package/src/packlets/conditions/conditionSetCollector.ts +0 -127
  178. package/src/packlets/conditions/conditionSetDecls.ts +0 -41
  179. package/src/packlets/conditions/conditionToken.ts +0 -180
  180. package/src/packlets/conditions/convert/conditionSetDecls.ts +0 -72
  181. package/src/packlets/conditions/convert/decls.ts +0 -95
  182. package/src/packlets/conditions/convert/index.ts +0 -24
  183. package/src/packlets/conditions/index.ts +0 -33
  184. package/src/packlets/config/common.ts +0 -107
  185. package/src/packlets/config/configInitFactory.ts +0 -142
  186. package/src/packlets/config/convert.ts +0 -61
  187. package/src/packlets/config/index.ts +0 -30
  188. package/src/packlets/config/json.ts +0 -43
  189. package/src/packlets/config/predefined/default.ts +0 -150
  190. package/src/packlets/config/predefined/extended.ts +0 -198
  191. package/src/packlets/config/predefined/index.ts +0 -26
  192. package/src/packlets/config/systemConfiguration.ts +0 -217
  193. package/src/packlets/context/contextDecls.ts +0 -76
  194. package/src/packlets/context/contextToken.ts +0 -252
  195. package/src/packlets/context/convert/decls.ts +0 -126
  196. package/src/packlets/context/convert/index.ts +0 -23
  197. package/src/packlets/context/index.ts +0 -27
  198. package/src/packlets/decisions/abstractDecision.ts +0 -87
  199. package/src/packlets/decisions/abstractDecisionCollector.ts +0 -122
  200. package/src/packlets/decisions/candidate.ts +0 -101
  201. package/src/packlets/decisions/common.ts +0 -37
  202. package/src/packlets/decisions/concreteDecision.ts +0 -157
  203. package/src/packlets/decisions/decision.ts +0 -172
  204. package/src/packlets/decisions/index.ts +0 -28
  205. package/src/packlets/import/fsItem.ts +0 -212
  206. package/src/packlets/import/importContext.ts +0 -183
  207. package/src/packlets/import/importManager.ts +0 -187
  208. package/src/packlets/import/importable.ts +0 -107
  209. package/src/packlets/import/importers/collectionImporter.ts +0 -153
  210. package/src/packlets/import/importers/fsItemImporter.ts +0 -154
  211. package/src/packlets/import/importers/importer.ts +0 -58
  212. package/src/packlets/import/importers/index.ts +0 -27
  213. package/src/packlets/import/importers/jsonImporter.ts +0 -133
  214. package/src/packlets/import/importers/pathImporter.ts +0 -134
  215. package/src/packlets/import/index.ts +0 -29
  216. package/src/packlets/qualifier-types/config/convert.ts +0 -108
  217. package/src/packlets/qualifier-types/config/index.ts +0 -27
  218. package/src/packlets/qualifier-types/config/json.ts +0 -126
  219. package/src/packlets/qualifier-types/convert.ts +0 -77
  220. package/src/packlets/qualifier-types/helpers.ts +0 -94
  221. package/src/packlets/qualifier-types/index.ts +0 -34
  222. package/src/packlets/qualifier-types/languageQualifierType.ts +0 -143
  223. package/src/packlets/qualifier-types/literalQualifierType.ts +0 -244
  224. package/src/packlets/qualifier-types/literalValueHierarchy.ts +0 -332
  225. package/src/packlets/qualifier-types/qualifierType.ts +0 -360
  226. package/src/packlets/qualifier-types/qualifierTypeCollector.ts +0 -102
  227. package/src/packlets/qualifier-types/territoryQualifierType.ts +0 -255
  228. package/src/packlets/qualifiers/convert/decls.ts +0 -90
  229. package/src/packlets/qualifiers/convert/index.ts +0 -24
  230. package/src/packlets/qualifiers/convert/qualifier.ts +0 -55
  231. package/src/packlets/qualifiers/index.ts +0 -31
  232. package/src/packlets/qualifiers/qualifier.ts +0 -169
  233. package/src/packlets/qualifiers/qualifierCollector.ts +0 -194
  234. package/src/packlets/qualifiers/qualifierDecl.ts +0 -80
  235. package/src/packlets/qualifiers/qualifierDefaultValueDecls.ts +0 -57
  236. package/src/packlets/qualifiers/qualifierDefaultValueToken.ts +0 -230
  237. package/src/packlets/resource-json/compiled/common.ts +0 -35
  238. package/src/packlets/resource-json/compiled/convert.ts +0 -143
  239. package/src/packlets/resource-json/compiled/index.ts +0 -27
  240. package/src/packlets/resource-json/compiled/json.ts +0 -239
  241. package/src/packlets/resource-json/convert.ts +0 -236
  242. package/src/packlets/resource-json/helpers.ts +0 -284
  243. package/src/packlets/resource-json/index.ts +0 -33
  244. package/src/packlets/resource-json/json.ts +0 -295
  245. package/src/packlets/resource-json/normalized.ts +0 -211
  246. package/src/packlets/resource-json/resourceDeclCollection.ts +0 -117
  247. package/src/packlets/resource-json/resourceDeclContainer.ts +0 -48
  248. package/src/packlets/resource-json/resourceDeclTree.ts +0 -116
  249. package/src/packlets/resource-types/config/convert.ts +0 -38
  250. package/src/packlets/resource-types/config/index.ts +0 -27
  251. package/src/packlets/resource-types/config/json.ts +0 -33
  252. package/src/packlets/resource-types/helpers.ts +0 -44
  253. package/src/packlets/resource-types/index.ts +0 -30
  254. package/src/packlets/resource-types/jsonResourceType.ts +0 -102
  255. package/src/packlets/resource-types/resourceType.ts +0 -292
  256. package/src/packlets/resource-types/resourceTypeCollector.ts +0 -79
  257. package/src/packlets/resources/candidateReducer.ts +0 -331
  258. package/src/packlets/resources/common.ts +0 -114
  259. package/src/packlets/resources/index.ts +0 -28
  260. package/src/packlets/resources/resource.ts +0 -307
  261. package/src/packlets/resources/resourceBuilder.ts +0 -269
  262. package/src/packlets/resources/resourceCandidate.ts +0 -333
  263. package/src/packlets/resources/resourceManagerBuilder.ts +0 -1169
  264. package/src/packlets/runtime/cacheListener.ts +0 -113
  265. package/src/packlets/runtime/cacheMetrics.ts +0 -206
  266. package/src/packlets/runtime/compiledResourceCollection.ts +0 -607
  267. package/src/packlets/runtime/conditionSetResolutionResult.ts +0 -160
  268. package/src/packlets/runtime/context/contextQualifierProvider.ts +0 -117
  269. package/src/packlets/runtime/context/contextQualifierProviderValidator.ts +0 -281
  270. package/src/packlets/runtime/context/index.ts +0 -26
  271. package/src/packlets/runtime/context/simpleContextQualifierProvider.ts +0 -225
  272. package/src/packlets/runtime/context/validatingSimpleContextQualifierProvider.ts +0 -96
  273. package/src/packlets/runtime/iResourceManager.ts +0 -130
  274. package/src/packlets/runtime/index.ts +0 -35
  275. package/src/packlets/runtime/resource-tree/common.ts +0 -126
  276. package/src/packlets/runtime/resource-tree/index.ts +0 -26
  277. package/src/packlets/runtime/resource-tree/readOnlyResourceTree.ts +0 -342
  278. package/src/packlets/runtime/resource-tree/resourceTreeChildren.ts +0 -125
  279. package/src/packlets/runtime/resource-tree/resourceTreeChildrenValidator.ts +0 -187
  280. package/src/packlets/runtime/resourceResolver.ts +0 -712
  281. package/src/packlets/runtime/validate.ts +0 -63
  282. package/src/packlets/zip-archive/convert.ts +0 -121
  283. package/src/packlets/zip-archive/index.ts +0 -76
  284. package/src/packlets/zip-archive/json.ts +0 -91
  285. package/src/packlets/zip-archive/types.ts +0 -140
  286. package/src/packlets/zip-archive/zipArchiveCreator.ts +0 -229
  287. package/src/packlets/zip-archive/zipArchiveFormat.ts +0 -158
  288. package/src/packlets/zip-archive/zipArchiveLoader.ts +0 -370
@@ -1,23 +0,0 @@
1
- /*
2
- * Copyright (c) 2025 Erik Fortune
3
- *
4
- * Permission is hereby granted, free of charge, to any person obtaining a copy
5
- * of this software and associated documentation files (the "Software"), to deal
6
- * in the Software without restriction, including without limitation the rights
7
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- * copies of the Software, and to permit persons to whom the Software is
9
- * furnished to do so, subject to the following conditions:
10
- *
11
- * The above copyright notice and this permission notice shall be included in all
12
- * copies or substantial portions of the Software.
13
- *
14
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- * SOFTWARE.
21
- */
22
-
23
- export * from './decls';
@@ -1,27 +0,0 @@
1
- /*
2
- * Copyright (c) 2025 Erik Fortune
3
- *
4
- * Permission is hereby granted, free of charge, to any person obtaining a copy
5
- * of this software and associated documentation files (the "Software"), to deal
6
- * in the Software without restriction, including without limitation the rights
7
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- * copies of the Software, and to permit persons to whom the Software is
9
- * furnished to do so, subject to the following conditions:
10
- *
11
- * The above copyright notice and this permission notice shall be included in all
12
- * copies or substantial portions of the Software.
13
- *
14
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- * SOFTWARE.
21
- */
22
-
23
- import * as Convert from './convert';
24
- export * from './contextDecls';
25
- export * from './contextToken';
26
-
27
- export { Convert };
@@ -1,87 +0,0 @@
1
- /*
2
- * Copyright (c) 2025 Erik Fortune
3
- *
4
- * Permission is hereby granted, free of charge, to any person obtaining a copy
5
- * of this software and associated documentation files (the "Software"), to deal
6
- * in the Software without restriction, including without limitation the rights
7
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- * copies of the Software, and to permit persons to whom the Software is
9
- * furnished to do so, subject to the following conditions:
10
- *
11
- * The above copyright notice and this permission notice shall be included in all
12
- * copies or substantial portions of the Software.
13
- *
14
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- * SOFTWARE.
21
- */
22
-
23
- import { captureResult, Result } from '@fgv/ts-utils';
24
- import { ConditionSet } from '../conditions';
25
- import { Candidate } from './candidate';
26
- import { Decision } from './decision';
27
- import * as ResourceJson from '../resource-json';
28
-
29
- /**
30
- * Parameters to create an {@link Decisions.AbstractDecision | AbstractDecision}.
31
- * @public
32
- */
33
- export interface IAbstractDecisionCreateParams {
34
- conditionSets: ConditionSet[];
35
- index?: number;
36
- }
37
-
38
- /**
39
- * An abstract decision represents a class of decisions with candidates
40
- * that differ only in value. It is a {@link Decisions.Decision | IDecision<number>}
41
- * in which the `number` values are sequentially assigned indexes.
42
- * This allows us to represent each related {@link Decisions.IDecision | decision} as an
43
- * {@link Decisions.AbstractDecision | abstract decision} and a matching array containing
44
- * the corresponding value for each candidate. This representation is highly cacheable.
45
- * @public
46
- */
47
- export class AbstractDecision extends Decision<number> {
48
- /**
49
- * Constructor for an {@link Decisions.AbstractDecision | AbstractDecision} object.
50
- * @param params - {@link Decisions.IAbstractDecisionCreateParams | Parameters}
51
- * used to create the decision.
52
- * @public
53
- */
54
- protected constructor(params: IAbstractDecisionCreateParams) {
55
- const candidates = Array.from(params.conditionSets)
56
- .map((conditionSet, value) => Candidate.createCandidate({ conditionSet, value }).orThrow())
57
- .sort(Candidate.compare);
58
- super({ candidates, index: params.index, isAbstract: true });
59
- }
60
-
61
- /**
62
- * Creates a new {@link Decisions.AbstractDecision | AbstractDecision} object.
63
- * @param params - {@link Decisions.IAbstractDecisionCreateParams | Parameters}
64
- * used to create the decision.
65
- * @returns `Success` with the new decision if successful, or `Failure` with an
66
- * error message if not.
67
- * @public
68
- */
69
- public static createAbstractDecision(params: IAbstractDecisionCreateParams): Result<AbstractDecision> {
70
- return captureResult(() => new AbstractDecision(params));
71
- }
72
-
73
- /**
74
- * Converts this abstract decision to a compiled abstract decision representation.
75
- * @param options - Optional compilation options controlling the output format.
76
- * @returns A compiled abstract decision object that can be used for serialization or runtime processing.
77
- * @public
78
- */
79
- public toCompiled(
80
- options?: ResourceJson.Compiled.ICompiledResourceOptions
81
- ): ResourceJson.Compiled.ICompiledAbstractDecision {
82
- return {
83
- conditionSets: this.candidates.map((c) => c.conditionSet.index!),
84
- ...(options?.includeMetadata === true ? { metadata: { key: this.key } } : {})
85
- };
86
- }
87
- }
@@ -1,122 +0,0 @@
1
- /*
2
- * Copyright (c) 2025 Erik Fortune
3
- *
4
- * Permission is hereby granted, free of charge, to any person obtaining a copy
5
- * of this software and associated documentation files (the "Software"), to deal
6
- * in the Software without restriction, including without limitation the rights
7
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- * copies of the Software, and to permit persons to whom the Software is
9
- * furnished to do so, subject to the following conditions:
10
- *
11
- * The above copyright notice and this permission notice shall be included in all
12
- * copies or substantial portions of the Software.
13
- *
14
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- * SOFTWARE.
21
- */
22
-
23
- import { captureResult, Collections, Result, fail, succeed, ValidatingCollector } from '@fgv/ts-utils';
24
- import { AbstractDecision } from './abstractDecision';
25
- import { Convert as CommonConvert, DecisionIndex, DecisionKey, Validate } from '../common';
26
- import { ConditionSet, ReadOnlyConditionSetCollector } from '../conditions';
27
-
28
- /**
29
- * Parameters for creating a {@link Decisions.AbstractDecisionCollector | AbstractDecisionCollector}.
30
- * @public
31
- */
32
- export interface IAbstractDecisionCollectorCreateParams {
33
- /**
34
- * {@link Conditions.ReadOnlyConditionSetCollector | ConditionSetCollector} used to create conditions
35
- * sets for decisions in this collector.
36
- */
37
- conditionSets: ReadOnlyConditionSetCollector;
38
- }
39
-
40
- /**
41
- * A `ValidatingCollector` for {@link Decisions.AbstractDecision | AbstractDecisions}.
42
- * @public
43
- */
44
- export class AbstractDecisionCollector extends ValidatingCollector<AbstractDecision> {
45
- /**
46
- * The {@link Conditions.ReadOnlyConditionSetCollector | ConditionSetCollector} used to create conditions
47
- * sets for decisions in this collector.
48
- */
49
- public readonly conditionSets: ReadOnlyConditionSetCollector;
50
-
51
- /**
52
- * The empty decision (no condition sets) for this collector.
53
- */
54
- public get emptyDecision(): AbstractDecision {
55
- return this.getAt(AbstractDecisionCollector.EmptyDecisionIndex).orThrow();
56
- }
57
-
58
- /**
59
- * The default-only decision (one condition set with no conditions) for this collector.
60
- */
61
- public get defaultOnlyDecision(): AbstractDecision {
62
- return this.getAt(AbstractDecisionCollector.DefaultOnlyDecisionIndex).orThrow();
63
- }
64
-
65
- /**
66
- * The index for the empty decision.
67
- */
68
- public static readonly EmptyDecisionIndex: DecisionIndex = Validate.toDecisionIndex(0).orThrow();
69
-
70
- /**
71
- * The index for the default-only decision.
72
- */
73
- public static readonly DefaultOnlyDecisionIndex: DecisionIndex = Validate.toDecisionIndex(1).orThrow();
74
-
75
- /**
76
- * Creates a new instance of {@link Decisions.AbstractDecisionCollector | AbstractDecisionCollector}.
77
- */
78
- protected constructor(params: IAbstractDecisionCollectorCreateParams) {
79
- super({
80
- converters: new Collections.KeyValueConverters<DecisionKey, AbstractDecision>({
81
- key: CommonConvert.decisionKey,
82
- value: (from: unknown) => this._toAbstractDecision(from)
83
- })
84
- });
85
- this.conditionSets = params.conditionSets;
86
- this.add(AbstractDecision.createAbstractDecision({ conditionSets: [] }).orThrow()).orThrow();
87
- const cs = this.conditionSets.validating.get('').orThrow();
88
- this.add(AbstractDecision.createAbstractDecision({ conditionSets: [cs] }).orThrow()).orThrow();
89
- }
90
-
91
- /**
92
- * Creates a new instance of {@link Decisions.AbstractDecisionCollector | AbstractDecisionCollector}.
93
- * @returns `Success` with the new instance, or `Failure` with an error if the instance could not be created.
94
- */
95
- public static create(params: IAbstractDecisionCollectorCreateParams): Result<AbstractDecisionCollector> {
96
- return captureResult(() => new AbstractDecisionCollector(params));
97
- }
98
-
99
- private _toAbstractDecision(from: unknown): Result<AbstractDecision> {
100
- /* c8 ignore next 3 - functional code path tested but coverage intermittently missed */
101
- if (from instanceof AbstractDecision) {
102
- return succeed(from);
103
- }
104
- if (this._isConditionSetArray(from)) {
105
- return AbstractDecision.createAbstractDecision({
106
- conditionSets: from
107
- });
108
- }
109
- /* c8 ignore next 2 - functional code path tested but coverage intermittently missed */
110
- return fail('invalid value: not an abstract decision or condition sets');
111
- }
112
-
113
- private _isConditionSetArray(from: unknown): from is ConditionSet[] {
114
- return Array.isArray(from) && from.every((e) => e instanceof ConditionSet);
115
- }
116
- }
117
-
118
- /**
119
- * A read-only {@link Decisions.AbstractDecisionCollector | AbstractDecisionCollector}.
120
- * @public
121
- */
122
- export type ReadOnlyAbstractDecisionCollector = Collections.IReadOnlyValidatingCollector<AbstractDecision>;
@@ -1,101 +0,0 @@
1
- /*
2
- * Copyright (c) 2025 Erik Fortune
3
- *
4
- * Permission is hereby granted, free of charge, to any person obtaining a copy
5
- * of this software and associated documentation files (the "Software"), to deal
6
- * in the Software without restriction, including without limitation the rights
7
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- * copies of the Software, and to permit persons to whom the Software is
9
- * furnished to do so, subject to the following conditions:
10
- *
11
- * The above copyright notice and this permission notice shall be included in all
12
- * copies or substantial portions of the Software.
13
- *
14
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- * SOFTWARE.
21
- */
22
-
23
- import { JsonValue } from '@fgv/ts-json-base';
24
- import { ConditionSet } from '../conditions';
25
- import { captureResult, Result } from '@fgv/ts-utils';
26
- import { ResourceValueMergeMethod } from '../common';
27
-
28
- /**
29
- * A {@link Decisions.ICandidate | resource candidate} represents a single
30
- * possible value for some resource, with the conditions under which it is valid.
31
- * @public
32
- */
33
- export interface ICandidate<TVALUE extends JsonValue = JsonValue> {
34
- readonly conditionSet: ConditionSet;
35
- readonly value: TVALUE;
36
- readonly isPartial?: boolean;
37
- readonly mergeMethod?: ResourceValueMergeMethod;
38
- }
39
-
40
- /**
41
- * Simple implementation of {@link Decisions.ICandidate | ICandidate} with
42
- * helper methods for sorting and presentation.
43
- * @public
44
- */
45
- export class Candidate<TVALUE extends JsonValue = JsonValue> implements ICandidate<TVALUE> {
46
- public readonly conditionSet: ConditionSet;
47
- public readonly value: TVALUE;
48
- public readonly isPartial: boolean;
49
- public readonly mergeMethod: ResourceValueMergeMethod;
50
-
51
- /**
52
- * Key of the condition set for this candidate.
53
- */
54
- public get key(): string {
55
- return this.conditionSet.key;
56
- }
57
-
58
- /**
59
- * Construct a new {@link Decisions.Candidate | Candidate}.
60
- * @param params - The {@link Decisions.ICandidate | parameters} to use to create the
61
- * new candidate.
62
- */
63
- protected constructor(params: ICandidate<TVALUE>) {
64
- this.conditionSet = params.conditionSet;
65
- this.value = params.value;
66
- this.isPartial = params.isPartial === true;
67
- this.mergeMethod = params.mergeMethod ?? 'augment';
68
- }
69
-
70
- /**
71
- * Create a new {@link Decisions.Candidate | candidate}.
72
- * @param params - The {@link Decisions.ICandidate | parameters} to use to create the
73
- * new candidate.
74
- * @returns `Success` with the new candidate if successful, or `Failure` if the
75
- * candidate could not be created.
76
- */
77
- public static createCandidate<TVALUE extends JsonValue>(
78
- params: ICandidate<TVALUE>
79
- ): Result<Candidate<TVALUE>> {
80
- return captureResult(() => new Candidate(params));
81
- }
82
-
83
- /**
84
- * Compare two {@link Decisions.ICandidate | candidates} for sorting purposes.
85
- * @param c1 - The first candidate to compare.
86
- * @param c2 - The second candidate to compare.
87
- * @returns A negative number if c1 should come before c2, a positive number if c1 should
88
- * come after c2, or zero if they are equivalent.
89
- */
90
- public static compare(c1: ICandidate, c2: ICandidate): number {
91
- return ConditionSet.compare(c1.conditionSet, c2.conditionSet);
92
- }
93
-
94
- /**
95
- * Returns a string representation of the {@link Decisions.Candidate | candidate}.
96
- * @returns A string representation of this candidate.
97
- */
98
- public toString(): string {
99
- return `${this.key}: ${JSON.stringify(this.value)}`;
100
- }
101
- }
@@ -1,37 +0,0 @@
1
- /*
2
- * Copyright (c) 2025 Erik Fortune
3
- *
4
- * Permission is hereby granted, free of charge, to any person obtaining a copy
5
- * of this software and associated documentation files (the "Software"), to deal
6
- * in the Software without restriction, including without limitation the rights
7
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- * copies of the Software, and to permit persons to whom the Software is
9
- * furnished to do so, subject to the following conditions:
10
- *
11
- * The above copyright notice and this permission notice shall be included in all
12
- * copies or substantial portions of the Software.
13
- *
14
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- * SOFTWARE.
21
- */
22
-
23
- import { DecisionIndex, DecisionKey } from '../common';
24
- import { JsonValue } from '@fgv/ts-json-base';
25
- import { ICandidate } from './candidate';
26
-
27
- /**
28
- * Represents a decision, which is comprised of zero or more
29
- * {@link Decisions.Candidate | candidates}, each of which represents a possible
30
- * value for some resource, along with the conditions under which that value is valid.
31
- * @public
32
- */
33
- export interface IDecision<TVALUE extends JsonValue = JsonValue> {
34
- key: DecisionKey;
35
- candidates: ReadonlyArray<ICandidate<TVALUE>>;
36
- index?: DecisionIndex;
37
- }
@@ -1,157 +0,0 @@
1
- /*
2
- * Copyright (c) 2025 Erik Fortune
3
- *
4
- * Permission is hereby granted, free of charge, to any person obtaining a copy
5
- * of this software and associated documentation files (the "Software"), to deal
6
- * in the Software without restriction, including without limitation the rights
7
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- * copies of the Software, and to permit persons to whom the Software is
9
- * furnished to do so, subject to the following conditions:
10
- *
11
- * The above copyright notice and this permission notice shall be included in all
12
- * copies or substantial portions of the Software.
13
- *
14
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- * SOFTWARE.
21
- */
22
-
23
- import { JsonValue } from '@fgv/ts-json-base';
24
- import { Candidate, ICandidate } from './candidate';
25
- import { IDecision } from './common';
26
- import { AbstractDecisionCollector } from './abstractDecisionCollector';
27
- import { AbstractDecision } from './abstractDecision';
28
- import { captureResult, Collections, mapResults, Result, fail, succeed } from '@fgv/ts-utils';
29
- import { ConditionSet } from '../conditions';
30
- import { Convert as CommonConvert, DecisionIndex, DecisionKey } from '../common';
31
- import { Decision } from './decision';
32
-
33
- /**
34
- * Parameters used to create a new {@link Decisions.ConcreteDecision | ConcreteDecision},
35
- * given an {@link Decisions.AbstractDecisionCollector | AbstractDecisionCollector} and a
36
- * list of {@link Decisions.ICandidate | candidates}.
37
- * @public
38
- */
39
- export interface IConcreteDecisionCreateParams<TVALUE extends JsonValue = JsonValue> {
40
- decisions: AbstractDecisionCollector;
41
- candidates: ReadonlyArray<ICandidate<TVALUE>>;
42
- index?: number;
43
- }
44
-
45
- /**
46
- * Protected constructor parameters for {@link Decisions.ConcreteDecision | ConcreteDecision},
47
- * used to create a new concrete decision from an existing {@link Decisions.AbstractDecision | AbstractDecision}
48
- * and a list of values.
49
- * @public
50
- */
51
- export interface IConcreteDecisionConstructorParams<TVALUE extends JsonValue = JsonValue> {
52
- baseDecision: AbstractDecision;
53
- values: TVALUE[];
54
- index?: DecisionIndex;
55
- }
56
-
57
- /**
58
- * A {@link Decisions.ConcreteDecision | concrete decision} is a {@link Decisions.IDecision | decision}
59
- * implemented as a reference to a common {@link Decisions.AbstractDecision | abstract decision} and a list of
60
- * values that correspond to the candidates in the abstract decision. This allows us to represent a large
61
- * number of related decisions with a single abstract decision and a list of values.
62
- * @public
63
- */
64
- export class ConcreteDecision<TVALUE extends JsonValue = JsonValue> implements IDecision<TVALUE> {
65
- public readonly baseDecision: AbstractDecision;
66
- public readonly values: TVALUE[];
67
- public readonly candidates: ReadonlyArray<ICandidate<TVALUE>>;
68
-
69
- /**
70
- * Unique global key for this decision, derived from the condition set and
71
- * candidate values.
72
- */
73
- public get key(): DecisionKey {
74
- return this._collectible.key;
75
- }
76
-
77
- /**
78
- * Unique global index for this decision.
79
- */
80
- public get index(): DecisionIndex | undefined {
81
- return this._collectible.index;
82
- }
83
-
84
- private _collectible: Collections.Collectible<DecisionKey, DecisionIndex>;
85
-
86
- /**
87
- * Constructor for a {@link Decisions.ConcreteDecision | ConcreteDecision} object.
88
- * @param params - {@link Decisions.IConcreteDecisionConstructorParams | Parameters}
89
- * used to create the decision.
90
- * @public
91
- */
92
- protected constructor(params: IConcreteDecisionConstructorParams<TVALUE>) {
93
- this.baseDecision = params.baseDecision;
94
- this.values = params.values;
95
- this.candidates = this.baseDecision.candidates.map((candidate) => {
96
- const value = this.values[candidate.value];
97
- return Candidate.createCandidate({ conditionSet: candidate.conditionSet, value }).orThrow();
98
- });
99
- this._collectible = new Collections.Collectible({
100
- key: Decision.getKey(this.candidates),
101
- index: params.index,
102
- indexConverter: CommonConvert.decisionIndex
103
- });
104
- }
105
-
106
- /**
107
- * Creates a new {@link Decisions.ConcreteDecision | ConcreteDecision} object.
108
- * @param params - {@link Decisions.IConcreteDecisionCreateParams | Parameters}
109
- * used to create the decision.
110
- * @returns `Success` with the new decision if successful, or `Failure` with an
111
- * error message if not.
112
- * @public
113
- */
114
- public static create<TVALUE extends JsonValue = JsonValue>(
115
- params: IConcreteDecisionCreateParams<TVALUE>
116
- ): Result<ConcreteDecision<TVALUE>> {
117
- const conditionSets = params.candidates
118
- .map((candidate) => candidate.conditionSet)
119
- .sort(ConditionSet.compare)
120
- .reverse();
121
-
122
- const getBase = params.decisions.validating.getOrAdd(conditionSets);
123
- /* c8 ignore next 3 - defense in depth against internal error hard to repro */
124
- if (getBase.isFailure()) {
125
- return fail<ConcreteDecision<TVALUE>>(getBase.message);
126
- }
127
- const baseDecision = getBase.value;
128
- return mapResults(
129
- params.candidates.map((candidate, index) => {
130
- /* c8 ignore next 5 - defense in depth against internal error hard to repro */
131
- if (candidate.conditionSet.key !== baseDecision.candidates[index].conditionSet.key) {
132
- return fail<TVALUE>(
133
- `${candidate.conditionSet.key}: Candidate does not match base decision ${candidate.conditionSet.key}`
134
- );
135
- }
136
- return succeed(candidate.value);
137
- })
138
- ).onSuccess((values) => {
139
- /* c8 ignore next 5 - defense in depth against invalid index conversion */
140
- if (params.index) {
141
- return CommonConvert.decisionIndex.convert(params.index).onSuccess((index) => {
142
- return captureResult(() => new ConcreteDecision({ baseDecision, values, index }));
143
- });
144
- }
145
- return captureResult(() => new ConcreteDecision({ baseDecision, values }));
146
- });
147
- }
148
-
149
- /**
150
- * Sets the index for this decision. Once set, index is immutable.
151
- * @param index - The index to set.
152
- * @returns `Success` with the new index if successful, or `Failure` with an error message if not.
153
- */
154
- public setIndex(index: number): Result<DecisionIndex> {
155
- return this._collectible.setIndex(index);
156
- }
157
- }