@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,63 +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 { Validators, Validator } from '@fgv/ts-utils';
24
- import { Validators as JsonValidators } from '@fgv/ts-json-base';
25
- import { Validate, ResourceId } from '../common';
26
- import { ResourceType } from '../resource-types';
27
- import { ConcreteDecision } from '../decisions';
28
- import { IResource, IResourceCandidate } from './iResourceManager';
29
-
30
- /**
31
- * Validates an {@link Runtime.IResourceCandidate | IResourceCandidate} object.
32
- * @public
33
- */
34
- export const resourceCandidate: Validator<IResourceCandidate, unknown> =
35
- Validators.object<IResourceCandidate>({
36
- json: JsonValidators.jsonObject,
37
- isPartial: Validators.boolean,
38
- mergeMethod: Validators.isA(
39
- 'resource value merge method',
40
- (v): v is 'augment' | 'delete' | 'replace' => v === 'augment' || v === 'delete' || v === 'replace'
41
- )
42
- });
43
-
44
- /**
45
- * Validates an {@link Runtime.IResource | IResource} object.
46
- * @public
47
- */
48
- export const resource: Validator<IResource, unknown> = Validators.object<IResource>({
49
- id: Validators.isA(
50
- 'ResourceId',
51
- (v): v is ResourceId => typeof v === 'string' && Validate.isValidResourceId(v)
52
- ),
53
- name: Validators.isA(
54
- 'ResourceName',
55
- (v): v is string => typeof v === 'string' && Validate.isValidResourceName(v)
56
- ),
57
- resourceType: Validators.isA('ResourceType instance', (v): v is ResourceType => v instanceof ResourceType),
58
- decision: Validators.isA(
59
- 'ConcreteDecision instance',
60
- (v): v is ConcreteDecision => v instanceof ConcreteDecision
61
- ),
62
- candidates: Validators.arrayOf(resourceCandidate)
63
- });
@@ -1,121 +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
- /* eslint-disable @rushstack/typedef-var */
24
-
25
- import { Validator, Validators, Converter, Converters } from '@fgv/ts-utils';
26
- import * as Json from './json';
27
- import { Model as ConfigModel, Convert as ConfigConvert } from '../config';
28
-
29
- /**
30
- * Validator for ZIP archive input type
31
- * @public
32
- */
33
- export const zipArchiveInputType: Validator<'file' | 'directory'> = Validators.enumeratedValue([
34
- 'file',
35
- 'directory'
36
- ] as const);
37
-
38
- /**
39
- * Validator for ZIP archive config type
40
- * @public
41
- */
42
- export const zipArchiveConfigType: Validator<'file'> = Validators.enumeratedValue(['file'] as const);
43
-
44
- /**
45
- * Validator for ZIP archive input information
46
- * @public
47
- */
48
- export const zipArchiveInputInfo: Validator<Json.IZipArchiveInputInfo> =
49
- Validators.object<Json.IZipArchiveInputInfo>({
50
- type: zipArchiveInputType,
51
- originalPath: Validators.string,
52
- archivePath: Validators.string
53
- });
54
-
55
- /**
56
- * Validator for ZIP archive config information
57
- * @public
58
- */
59
- export const zipArchiveConfigInfo: Validator<Json.IZipArchiveConfigInfo> =
60
- Validators.object<Json.IZipArchiveConfigInfo>({
61
- type: zipArchiveConfigType,
62
- originalPath: Validators.string,
63
- archivePath: Validators.string
64
- });
65
-
66
- /**
67
- * Validator for ZIP archive manifest
68
- * Compatible with existing tools from ts-res-browser-cli
69
- * @public
70
- */
71
- export const zipArchiveManifest: Validator<Json.IZipArchiveManifest> =
72
- Validators.object<Json.IZipArchiveManifest>({
73
- timestamp: Validators.string,
74
- input: zipArchiveInputInfo.optional(),
75
- config: zipArchiveConfigInfo.optional()
76
- });
77
-
78
- /**
79
- * Validator for MIME type strings
80
- * @public
81
- */
82
- export const mimeType: Validator<string> = Validators.string;
83
-
84
- /**
85
- * Converter for imported file
86
- * @public
87
- */
88
- export const importedFile: Converter<Json.IImportedFile> = Converters.strictObject<Json.IImportedFile>({
89
- name: Converters.string,
90
- path: Converters.string,
91
- content: Converters.string,
92
- type: Converters.string // MIME type as string
93
- });
94
-
95
- /**
96
- * Converter for imported directory structure (recursive)
97
- * Note: Uses Converter pattern because Validators don't support recursion with self parameter
98
- * @public
99
- */
100
- export const importedDirectory: Converter<Json.IImportedDirectory> = Converters.generic<
101
- Json.IImportedDirectory,
102
- unknown
103
- >((from: unknown, self: Converter<Json.IImportedDirectory, unknown>, context?: unknown) => {
104
- return Converters.strictObject<Json.IImportedDirectory>({
105
- name: Converters.string,
106
- files: Converters.arrayOf(importedFile),
107
- subdirectories: Converters.arrayOf(self)
108
- }).convert(from, context);
109
- });
110
-
111
- /**
112
- * Validator for system configuration (delegates to config packlet)
113
- * This validates that the parsed JSON conforms to the system configuration schema
114
- * @public
115
- */
116
- export const systemConfiguration: Validator<ConfigModel.ISystemConfiguration> = Validators.isA(
117
- 'system configuration',
118
- (value: unknown): value is ConfigModel.ISystemConfiguration => {
119
- return ConfigConvert.systemConfiguration.convert(value).isSuccess();
120
- }
121
- );
@@ -1,76 +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
- /**
24
- * ZIP archive functionality for ts-res source file archives
25
- *
26
- * This packlet provides consolidated ZIP archive creation and loading functionality
27
- * for source files, compatible with existing tools while using fflate for
28
- * universal browser compatibility.
29
- *
30
- * @remarks
31
- * ZIP archives contain source files for resource ingestion with directory
32
- * structure preserved and optional validation but no processing or transformation.
33
- * This is distinct from ZIP bundles which contain processed resource output.
34
- *
35
- * @packageDocumentation
36
- */
37
-
38
- import * as Json from './json';
39
- import * as Convert from './convert';
40
-
41
- // Namespaces
42
- export { Json, Convert };
43
-
44
- // Core classes
45
- export { ZipArchiveCreator } from './zipArchiveCreator';
46
- export { ZipArchiveLoader } from './zipArchiveLoader';
47
-
48
- // Types and interfaces
49
- export type {
50
- IZipArchivePathOptions,
51
- IZipArchiveFileTreeOptions,
52
- ZipArchiveOptions,
53
- IZipArchiveResult,
54
- IZipArchiveManifest,
55
- IZipArchiveLoadOptions,
56
- IZipArchiveLoadResult,
57
- IImportedFile,
58
- IImportedDirectory,
59
- ZipArchiveProgressCallback
60
- } from './types';
61
-
62
- // Format utilities
63
- export {
64
- createZipArchiveManifest,
65
- parseZipArchiveManifest,
66
- validateZipArchiveManifest,
67
- parseZipArchiveConfiguration,
68
- generateZipArchiveFilename,
69
- normalizePath,
70
- getDirectoryName,
71
- sanitizeFilename,
72
- isZipFile
73
- } from './zipArchiveFormat';
74
-
75
- // Constants
76
- export { ZipArchiveConstants } from './types';
@@ -1,91 +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
- /**
24
- * JSON representation of ZIP archive input information
25
- * @public
26
- */
27
- export interface IZipArchiveInputInfo {
28
- /** Type of input (file or directory) */
29
- type: 'file' | 'directory';
30
- /** Original file/directory path */
31
- originalPath: string;
32
- /** Path within the archive (e.g., "input/mydir") */
33
- archivePath: string;
34
- }
35
-
36
- /**
37
- * JSON representation of ZIP archive config information
38
- * @public
39
- */
40
- export interface IZipArchiveConfigInfo {
41
- /** Type of config (always 'file') */
42
- type: 'file';
43
- /** Original config file path */
44
- originalPath: string;
45
- /** Path within the archive (e.g., "config.json") */
46
- archivePath: string;
47
- }
48
-
49
- /**
50
- * JSON representation of a ZIP archive manifest
51
- * Compatible with existing tools from ts-res-browser-cli
52
- * @public
53
- */
54
- export interface IZipArchiveManifest {
55
- /** Archive creation timestamp */
56
- timestamp: string;
57
-
58
- /** Optional input source information */
59
- input?: IZipArchiveInputInfo;
60
-
61
- /** Optional configuration file information */
62
- config?: IZipArchiveConfigInfo;
63
- }
64
-
65
- /**
66
- * JSON representation of an imported file
67
- * @public
68
- */
69
- export interface IImportedFile {
70
- /** File name */
71
- name: string;
72
- /** Full path within archive */
73
- path: string;
74
- /** File content as string */
75
- content: string;
76
- /** MIME type */
77
- type: string;
78
- }
79
-
80
- /**
81
- * JSON representation of an imported directory structure
82
- * @public
83
- */
84
- export interface IImportedDirectory {
85
- /** Directory name */
86
- name: string;
87
- /** Files in this directory */
88
- files: IImportedFile[];
89
- /** Subdirectories */
90
- subdirectories: IImportedDirectory[];
91
- }
@@ -1,140 +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 { Model as ConfigModel } from '../config';
24
- import * as Json from './json';
25
- import { FileTree } from '@fgv/ts-utils';
26
-
27
- /**
28
- * Options for creating a ZIP archive buffer
29
- * @public
30
- */
31
- export interface IZipArchivePathOptions {
32
- /** File or directory path to include in the archive */
33
- inputPath?: string;
34
- /** Optional configuration file path */
35
- configPath?: string;
36
- }
37
-
38
- /**
39
- * Options for creating a ZIP archive buffer from a file tree
40
- * @public
41
- */
42
- export interface IZipArchiveFileTreeOptions {
43
- /** Input file or directory */
44
- inputItem?: FileTree.FileTreeItem;
45
- /** Optional configuration file */
46
- configItem?: FileTree.IFileTreeFileItem;
47
- }
48
-
49
- /**
50
- * Options for creating a ZIP archive buffer
51
- * @public
52
- */
53
- export type ZipArchiveOptions = IZipArchivePathOptions | IZipArchiveFileTreeOptions;
54
-
55
- /**
56
- * Standardized ZIP archive manifest format (compatible with existing tools)
57
- * @public
58
- */
59
- export type IZipArchiveManifest = Json.IZipArchiveManifest;
60
-
61
- /**
62
- * Result of ZIP archive buffer creation
63
- * @public
64
- */
65
- export interface IZipArchiveResult {
66
- /** Raw ZIP data buffer */
67
- zipBuffer: Uint8Array;
68
- /** Archive manifest with metadata */
69
- manifest: IZipArchiveManifest;
70
- /** Total ZIP size in bytes */
71
- size: number;
72
- }
73
-
74
- /**
75
- * Options for loading a ZIP archive
76
- * @public
77
- */
78
- export interface IZipArchiveLoadOptions {
79
- /** Validate manifest strictly */
80
- strictManifestValidation?: boolean;
81
- }
82
-
83
- /**
84
- * Result of ZIP archive loading
85
- * @public
86
- */
87
- export interface IZipArchiveLoadResult {
88
- /** Parsed archive manifest */
89
- manifest: IZipArchiveManifest | undefined;
90
- /** Loaded configuration */
91
- config: ConfigModel.ISystemConfiguration | undefined;
92
- /** All files extracted from the archive */
93
- files: IImportedFile[];
94
- /** Directory structure if available */
95
- directory: IImportedDirectory | undefined;
96
- }
97
-
98
- /**
99
- * Imported file representation
100
- * @public
101
- */
102
- export type IImportedFile = Json.IImportedFile;
103
-
104
- /**
105
- * Imported directory structure
106
- * @public
107
- */
108
- export type IImportedDirectory = Json.IImportedDirectory;
109
-
110
- /**
111
- * Progress callback for ZIP operations
112
- * @public
113
- */
114
- export type ZipArchiveProgressCallback = (
115
- stage:
116
- | 'reading-file'
117
- | 'parsing-zip'
118
- | 'loading-manifest'
119
- | 'loading-config'
120
- | 'extracting-files'
121
- | 'processing-resources'
122
- | 'creating-zip',
123
- progress: number, // 0-100
124
- details: string
125
- ) => void;
126
-
127
- /**
128
- * Constants for ZIP archive structure
129
- * @public
130
- */
131
- export const ZipArchiveConstants = {
132
- /** Manifest file name */
133
- MANIFEST_FILE: 'manifest.json',
134
- /** Configuration file name */
135
- CONFIG_FILE: 'config.json',
136
- /** Input files directory */
137
- INPUT_DIR: 'input',
138
- /** Configuration files directory */
139
- CONFIG_DIR: 'config'
140
- } as const;