@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,169 +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, ICollectible, Result } from '@fgv/ts-utils';
24
- import {
25
- ConditionPriority,
26
- QualifierIndex,
27
- QualifierName,
28
- Convert as CommonConvert,
29
- QualifierContextValue,
30
- QualifierConditionValue,
31
- ConditionOperator
32
- } from '../common';
33
- import { QualifierType } from '../qualifier-types';
34
- import { IValidatedQualifierDecl } from './qualifierDecl';
35
-
36
- /**
37
- * Represents a qualifier that can be used to identify the context in
38
- * which a resource is used.
39
- * @public
40
- */
41
- export class Qualifier implements IValidatedQualifierDecl, ICollectible<QualifierName, QualifierIndex> {
42
- /**
43
- * The name of the qualifier.
44
- */
45
- public readonly name: QualifierName;
46
-
47
- /**
48
- * The token used to identify the qualifier in the name or
49
- * path of a resource being imported.
50
- */
51
- public readonly token: QualifierName;
52
-
53
- /**
54
- * The {@link QualifierTypes.QualifierType | type} of the qualifier.
55
- */
56
- public readonly type: QualifierType;
57
-
58
- /**
59
- * Indicates whether the token is optional in the name or path of a resource being imported.
60
- */
61
- public readonly tokenIsOptional: boolean;
62
-
63
- /**
64
- * Optional default value for the qualifier.
65
- */
66
- public readonly defaultValue?: QualifierContextValue;
67
-
68
- /**
69
- * The index of the qualifier.
70
- */
71
- public get index(): QualifierIndex | undefined {
72
- return this._collectible.index;
73
- }
74
-
75
- /**
76
- * The collector key for this qualifier.
77
- */
78
- public get key(): QualifierName {
79
- return this._collectible.key;
80
- }
81
-
82
- /**
83
- * The default {@link ConditionPriority | priority} of conditions
84
- * that depend on this qualifier.
85
- */
86
- public readonly defaultPriority: ConditionPriority;
87
-
88
- protected readonly _collectible: Collections.Collectible<QualifierName, QualifierIndex>;
89
-
90
- /**
91
- * Constructs a new instance of a {@link Qualifiers.Qualifier | Qualifier} from the
92
- * supplied {@link Qualifiers.IValidatedQualifierDecl | validated declaration}.
93
- * @param name - The name of the qualifier.
94
- * @param type - The {@link QualifierTypes.QualifierType | type} of the qualifier.
95
- * @param defaultPriority - The default {@link ConditionPriority | priority} of conditions
96
- * @public
97
- */
98
- protected constructor({
99
- name,
100
- token,
101
- type,
102
- defaultPriority,
103
- tokenIsOptional,
104
- defaultValue,
105
- index
106
- }: IValidatedQualifierDecl) {
107
- this.name = name;
108
- this.token = token;
109
- this.type = type;
110
- this.defaultPriority = defaultPriority;
111
- this.tokenIsOptional = tokenIsOptional;
112
- this.defaultValue = defaultValue;
113
- this._collectible = new Collections.Collectible<QualifierName, QualifierIndex>({
114
- key: name,
115
- index,
116
- indexConverter: CommonConvert.qualifierIndex
117
- });
118
- }
119
-
120
- /**
121
- * Creates a new instance of a {@link Qualifiers.Qualifier | Qualifier} from the
122
- * supplied {@link Qualifiers.IValidatedQualifierDecl | validated declaration}.
123
- * @param decl - The {@link Qualifiers.IValidatedQualifierDecl | validated declaration}
124
- * for the new instance.
125
- * @returns `Success` with the new {@link Qualifiers.Qualifier | Qualifier} if successful,
126
- * `Failure` with an error message otherwise.
127
- * @public
128
- */
129
- public static create(decl: IValidatedQualifierDecl): Result<Qualifier> {
130
- return captureResult(() => new Qualifier(decl));
131
- }
132
-
133
- /**
134
- * Sets the index of this qualifier. Once set, the index cannot be changed.
135
- * @param index - The index to set.
136
- * @returns `Success` with the index if successful, `Failure` with an error message otherwise.
137
- */
138
- public setIndex(index: QualifierIndex): Result<QualifierIndex> {
139
- return this._collectible.setIndex(index);
140
- }
141
-
142
- /**
143
- * {@inheritdoc QualifierTypes.QualifierType.isValidContextValue}
144
- */
145
- public isValidContextValue(value: string): value is QualifierContextValue {
146
- return this.type.isValidContextValue(value);
147
- }
148
-
149
- /**
150
- * {@inheritdoc QualifierTypes.QualifierType.isValidConditionValue}
151
- */
152
- public isValidConditionValue(value: string): value is QualifierConditionValue {
153
- return this.type.isValidConditionValue(value);
154
- }
155
-
156
- /**
157
- * {@inheritdoc QualifierTypes.QualifierType.validateCondition}
158
- */
159
- public validateCondition(value: string, operator?: ConditionOperator): Result<QualifierConditionValue> {
160
- return this.type.validateCondition(value, operator);
161
- }
162
-
163
- /**
164
- * {@inheritdoc QualifierTypes.QualifierType.validateContextValue}
165
- */
166
- public validateContextValue(value: string): Result<QualifierContextValue> {
167
- return this.type.validateContextValue(value);
168
- }
169
- }
@@ -1,194 +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 Common from '../common';
24
- import {
25
- captureResult,
26
- Collections,
27
- failWithDetail,
28
- Result,
29
- fail,
30
- succeed,
31
- succeedWithDetail,
32
- ValidatingConvertingCollector
33
- } from '@fgv/ts-utils';
34
- import { IQualifierDecl, IValidatedQualifierDecl } from './qualifierDecl';
35
- import { QualifierName } from '../common';
36
- import { Qualifier } from './qualifier';
37
- import { IQualifierDeclConvertContext, qualifierDecl, validatedQualifierDecl } from './convert';
38
- import { ReadOnlyQualifierTypeCollector } from '../qualifier-types';
39
-
40
- /**
41
- * Readonly version of {@link Qualifiers.QualifierCollector | QualifierCollector}.
42
- * @public
43
- */
44
- export interface IReadOnlyQualifierCollector extends Collections.IReadOnlyValidatingCollector<Qualifier> {
45
- /**
46
- * {@inheritdoc Qualifiers.QualifierCollector.qualifierTypes}
47
- */
48
- readonly qualifierTypes: ReadOnlyQualifierTypeCollector;
49
-
50
- /**
51
- * Gets a {@link Qualifiers.Qualifier | qualifier} by name or token.
52
- * @param nameOrToken - The name or token of the qualifier to retrieve.
53
- * @returns `Success` with the qualifier if found, or `Failure` if not.
54
- */
55
- getByNameOrToken(nameOrToken: string): Result<Qualifier>;
56
-
57
- /**
58
- * Checks if a qualifier with a given name or token is in the collection.
59
- * @param nameOrToken - The name or token of the qualifier to check.
60
- * @returns `true` if the qualifier is in the collection, `false` if not.
61
- */
62
- hasNameOrToken(nameOrToken: string): boolean;
63
- }
64
-
65
- /**
66
- * Parameters for creating a new {@link Qualifiers.QualifierCollector}.
67
- * @public
68
- */
69
- export interface IQualifierCollectorCreateParams {
70
- /**
71
- * The {@link QualifierTypes.QualifierTypeCollector | qualifier types} used to
72
- * create {@link Qualifiers.Qualifier | qualifiers} from {@link Qualifiers.IQualifierDecl | declarations}.
73
- */
74
- qualifierTypes: ReadOnlyQualifierTypeCollector;
75
-
76
- /**
77
- * Optional list of {@link Qualifiers.IQualifierDecl | declarations} for the qualifiers to add to the collection
78
- * upon creation.
79
- */
80
- qualifiers?: IQualifierDecl[];
81
- }
82
-
83
- /**
84
- * Collects {@link Qualifiers.Qualifier | Qualifiers} from {@link Qualifiers.IQualifierDecl | declarations},
85
- * with strongly-typed ({@link QualifierName | QualifierName} and {@link QualifierIndex | QualifierIndex}) key
86
- * and index.
87
- * @public
88
- */
89
- export class QualifierCollector
90
- extends ValidatingConvertingCollector<Qualifier, IQualifierDecl>
91
- implements IReadOnlyQualifierCollector
92
- {
93
- /**
94
- * The {@link QualifierTypes.QualifierTypeCollector | qualifier types} that this collector uses.
95
- */
96
- public qualifierTypes: ReadOnlyQualifierTypeCollector;
97
-
98
- /**
99
- * Constructor for a {@link Qualifiers.QualifierCollector | QualifierCollector} object.
100
- * @param params - Parameters for creating the collector.
101
- * @public
102
- */
103
- protected constructor(params: IQualifierCollectorCreateParams) {
104
- super({
105
- factory: (k, i, v) => this._qualifierFactory(k, i, v),
106
- converters: new Collections.KeyValueConverters({
107
- key: Common.Convert.qualifierName,
108
- value: qualifierDecl
109
- })
110
- });
111
- this.qualifierTypes = params.qualifierTypes;
112
- /* c8 ignore next 1 - coverage misses the branch intermittently */
113
- params.qualifiers?.forEach((q) => this.validating.add(q.name, q).orThrow());
114
- }
115
-
116
- /**
117
- * Creates a new {@link Qualifiers.QualifierCollector | QualifierCollector} object.
118
- * @param params - {@link Qualifiers.IQualifierCollectorCreateParams | Parameters} for creating a new {@link Qualifiers.QualifierCollector | QualifierCollector}.
119
- * @returns `Success` with the new collector if successful, or `Failure` if not.
120
- */
121
- public static create(params: IQualifierCollectorCreateParams): Result<QualifierCollector> {
122
- return captureResult(() => new QualifierCollector(params));
123
- }
124
-
125
- /**
126
- * {@inheritdoc Qualifiers.IReadOnlyQualifierCollector.getByNameOrToken}
127
- */
128
- public getByNameOrToken(nameOrToken: string): Result<Qualifier> {
129
- return this.validating.get(nameOrToken).onFailure((message) => {
130
- for (const q of this.values()) {
131
- if (q.token === nameOrToken) {
132
- return succeedWithDetail(q, 'success');
133
- }
134
- }
135
- return failWithDetail(`Qualifier token '${nameOrToken}' not found`, 'not-found');
136
- });
137
- }
138
-
139
- /**
140
- * {@inheritdoc Qualifiers.IReadOnlyQualifierCollector.hasNameOrToken}
141
- */
142
- public hasNameOrToken(nameOrToken: string): boolean {
143
- /* c8 ignore next 3 - functional code path tested but coverage intermittently missed */
144
- if (this.validating.has(nameOrToken)) {
145
- return true;
146
- }
147
- for (const q of this.values()) {
148
- /* c8 ignore next 3 - functional code path tested but coverage intermittently missed */
149
- if (q.token === nameOrToken) {
150
- return true;
151
- }
152
- }
153
- return false;
154
- }
155
-
156
- /**
157
- * Gets a read-only view of this collector.
158
- * @returns A read-only view of this collector.
159
- */
160
- public toReadOnly(): IReadOnlyQualifierCollector {
161
- return this;
162
- }
163
-
164
- /**
165
- * Factory method for creating a {@link Qualifiers.Qualifier | Qualifier} from a {@link Qualifiers.IQualifierDecl | declaration}.
166
- * @param __key - The key for the qualifier.
167
- * @param index - The index of the qualifier.
168
- * @param decl - The {@link Qualifiers.IQualifierDecl | declaration} for the qualifier.
169
- * @returns `Success` with the new {@link Qualifiers.Qualifier | Qualifier} if successful, or `Failure` if not.
170
- * @public
171
- */
172
- protected _qualifierFactory(__key: QualifierName, index: number, decl: IQualifierDecl): Result<Qualifier> {
173
- const convertContext: IQualifierDeclConvertContext = {
174
- qualifierTypes: this.qualifierTypes,
175
- qualifierIndex: index
176
- };
177
- return validatedQualifierDecl
178
- .convert(decl, convertContext)
179
- .onSuccess((validated) => {
180
- /* c8 ignore next 9 - coverage intermittently misses this block */
181
- if (this.hasNameOrToken(validated.token)) {
182
- return fail<IValidatedQualifierDecl>(
183
- `Qualifier token '${validated.token}' is not unique or collides with name`
184
- );
185
- } else if (this.hasNameOrToken(validated.name)) {
186
- return fail<IValidatedQualifierDecl>(
187
- `Qualifier name '${validated.name}' is not unique or collides with token`
188
- );
189
- }
190
- return succeed(validated);
191
- })
192
- .onSuccess(Qualifier.create);
193
- }
194
- }
@@ -1,80 +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 { ConditionPriority, QualifierContextValue, QualifierIndex, QualifierName } from '../common';
24
- import { QualifierType } from '../qualifier-types';
25
-
26
- /**
27
- * Simple declaration for a {@link Qualifiers.Qualifier | Qualifier}.
28
- * @public
29
- */
30
- export interface IQualifierDecl {
31
- name: string;
32
- typeName: string;
33
- defaultPriority: number;
34
- token?: string;
35
- tokenIsOptional?: boolean;
36
- defaultValue?: string;
37
- }
38
-
39
- /**
40
- * Validated declaration for a {@link Qualifiers.Qualifier | Qualifier}.
41
- * @public
42
- */
43
- export interface IValidatedQualifierDecl {
44
- /**
45
- * The name of the qualifier.
46
- */
47
- name: QualifierName;
48
-
49
- /**
50
- * The token used to identify the qualifier in the name or
51
- * path of a resource being imported.
52
- */
53
- token: QualifierName;
54
-
55
- /**
56
- * The {@link QualifierTypes.QualifierType | type} of the qualifier.
57
- */
58
- type: QualifierType;
59
-
60
- /**
61
- * The default {@link ConditionPriority | priority} of conditions
62
- * that depend on this qualifier.
63
- */
64
- defaultPriority: ConditionPriority;
65
-
66
- /**
67
- * Indicates whether the token is optional when parsing a resource token.
68
- */
69
- tokenIsOptional: boolean;
70
-
71
- /**
72
- * Optional default value for the qualifier.
73
- */
74
- defaultValue?: QualifierContextValue;
75
-
76
- /**
77
- * Index of the qualifier.
78
- */
79
- index: QualifierIndex | undefined;
80
- }
@@ -1,57 +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 { QualifierContextValue, QualifierName } from '../common';
24
- import { Qualifier } from './qualifier';
25
-
26
- /**
27
- * Non-validated declaration of a single qualifier default value.
28
- * @public
29
- */
30
- export interface IQualifierDefaultValueDecl {
31
- qualifier: string;
32
- value: string;
33
- }
34
-
35
- /**
36
- * Non-validated declaration of qualifier default values, consisting of named
37
- * default values.
38
- * @public
39
- */
40
- export type IQualifierDefaultValuesDecl = Record<string, string>;
41
-
42
- /**
43
- * Validated declaration of a single qualifier default value.
44
- * @public
45
- */
46
- export interface IValidatedQualifierDefaultValueDecl {
47
- qualifier: Qualifier;
48
- value: QualifierContextValue;
49
- }
50
-
51
- /**
52
- * Validated declaration of qualifier default values, a record with strongly-typed
53
- * {@link QualifierName | qualifier names} as keys and
54
- * {@link QualifierContextValue | qualifier context values} as values.
55
- * @public
56
- */
57
- export type IValidatedQualifierDefaultValuesDecl = Record<QualifierName, QualifierContextValue>;