@cratis/scene.engine 4.25.0 → 4.27.0

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 (223) hide show
  1. package/dist/cjs/editing/resolveEffectiveConfiguration.js +8 -0
  2. package/dist/cjs/editing/resolveEffectiveConfiguration.js.map +1 -1
  3. package/dist/cjs/index.js +64 -0
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/navigation/NavigationDiagnosticCode.js +5 -0
  6. package/dist/cjs/navigation/NavigationDiagnosticCode.js.map +1 -1
  7. package/dist/cjs/navigation/NavigationEditKind.js +16 -0
  8. package/dist/cjs/navigation/NavigationEditKind.js.map +1 -0
  9. package/dist/cjs/navigation/NavigationItemOrigin.js +14 -0
  10. package/dist/cjs/navigation/NavigationItemOrigin.js.map +1 -0
  11. package/dist/cjs/navigation/NavigationSourcesKind.js +16 -0
  12. package/dist/cjs/navigation/NavigationSourcesKind.js.map +1 -0
  13. package/dist/cjs/navigation/diagnoseNavigation.js +8 -1
  14. package/dist/cjs/navigation/diagnoseNavigation.js.map +1 -1
  15. package/dist/cjs/navigation/diagnoseNavigationRegions.js +99 -0
  16. package/dist/cjs/navigation/diagnoseNavigationRegions.js.map +1 -0
  17. package/dist/cjs/navigation/effectiveNavigation.js +133 -0
  18. package/dist/cjs/navigation/effectiveNavigation.js.map +1 -0
  19. package/dist/cjs/navigation/navigationEdits.js +230 -0
  20. package/dist/cjs/navigation/navigationEdits.js.map +1 -0
  21. package/dist/cjs/navigation/navigationRegions.js +42 -0
  22. package/dist/cjs/navigation/navigationRegions.js.map +1 -0
  23. package/dist/cjs/sampleData/SampleRandom.js +77 -0
  24. package/dist/cjs/sampleData/SampleRandom.js.map +1 -0
  25. package/dist/cjs/sampleData/describeSampleDataCatalog.js +61 -0
  26. package/dist/cjs/sampleData/describeSampleDataCatalog.js.map +1 -0
  27. package/dist/cjs/sampleData/findSampleDataSet.js +18 -0
  28. package/dist/cjs/sampleData/findSampleDataSet.js.map +1 -0
  29. package/dist/cjs/sampleData/findSampleRowLiterals.js +73 -0
  30. package/dist/cjs/sampleData/findSampleRowLiterals.js.map +1 -0
  31. package/dist/cjs/sampleData/generateSample.js +188 -0
  32. package/dist/cjs/sampleData/generateSample.js.map +1 -0
  33. package/dist/cjs/sampleData/inferSampleFieldKind.js +176 -0
  34. package/dist/cjs/sampleData/inferSampleFieldKind.js.map +1 -0
  35. package/dist/cjs/sampleData/resolveSampleData.js +107 -0
  36. package/dist/cjs/sampleData/resolveSampleData.js.map +1 -0
  37. package/dist/cjs/sampleData/sampleDataRules.js +26 -0
  38. package/dist/cjs/sampleData/sampleDataRules.js.map +1 -0
  39. package/dist/cjs/sampleData/sampleLocales.js +359 -0
  40. package/dist/cjs/sampleData/sampleLocales.js.map +1 -0
  41. package/dist/cjs/sampleData/validateSampleDataPack.js +44 -0
  42. package/dist/cjs/sampleData/validateSampleDataPack.js.map +1 -0
  43. package/dist/cjs/sampleData/validateSampleDataPackages.js +71 -0
  44. package/dist/cjs/sampleData/validateSampleDataPackages.js.map +1 -0
  45. package/dist/cjs/sampleData/validateSampleDataSelection.js +52 -0
  46. package/dist/cjs/sampleData/validateSampleDataSelection.js.map +1 -0
  47. package/dist/cjs/validateNavigationDestinations.js +2 -0
  48. package/dist/cjs/validateNavigationDestinations.js.map +1 -1
  49. package/dist/esm/editing/resolveEffectiveConfiguration.d.ts.map +1 -1
  50. package/dist/esm/editing/resolveEffectiveConfiguration.js +8 -0
  51. package/dist/esm/editing/resolveEffectiveConfiguration.js.map +1 -1
  52. package/dist/esm/index.d.ts +1 -0
  53. package/dist/esm/index.d.ts.map +1 -1
  54. package/dist/esm/index.js +19 -0
  55. package/dist/esm/index.js.map +1 -1
  56. package/dist/esm/navigation/EffectiveNavItem.d.ts +14 -0
  57. package/dist/esm/navigation/EffectiveNavItem.d.ts.map +1 -0
  58. package/dist/esm/navigation/EffectiveNavItem.js +2 -0
  59. package/dist/esm/navigation/EffectiveNavItem.js.map +1 -0
  60. package/dist/esm/navigation/EffectiveNavigationRegion.d.ts +11 -0
  61. package/dist/esm/navigation/EffectiveNavigationRegion.d.ts.map +1 -0
  62. package/dist/esm/navigation/EffectiveNavigationRegion.js +2 -0
  63. package/dist/esm/navigation/EffectiveNavigationRegion.js.map +1 -0
  64. package/dist/esm/navigation/NavigationDiagnosticCode.d.ts +6 -1
  65. package/dist/esm/navigation/NavigationDiagnosticCode.d.ts.map +1 -1
  66. package/dist/esm/navigation/NavigationDiagnosticCode.js +5 -0
  67. package/dist/esm/navigation/NavigationDiagnosticCode.js.map +1 -1
  68. package/dist/esm/navigation/NavigationEdit.d.ts +13 -0
  69. package/dist/esm/navigation/NavigationEdit.d.ts.map +1 -0
  70. package/dist/esm/navigation/NavigationEdit.js +2 -0
  71. package/dist/esm/navigation/NavigationEdit.js.map +1 -0
  72. package/dist/esm/navigation/NavigationEditKind.d.ts +7 -0
  73. package/dist/esm/navigation/NavigationEditKind.d.ts.map +1 -0
  74. package/dist/esm/navigation/NavigationEditKind.js +14 -0
  75. package/dist/esm/navigation/NavigationEditKind.js.map +1 -0
  76. package/dist/esm/navigation/NavigationEditOutcome.d.ts +7 -0
  77. package/dist/esm/navigation/NavigationEditOutcome.d.ts.map +1 -0
  78. package/dist/esm/navigation/NavigationEditOutcome.js +2 -0
  79. package/dist/esm/navigation/NavigationEditOutcome.js.map +1 -0
  80. package/dist/esm/navigation/NavigationEditPlan.d.ts +6 -0
  81. package/dist/esm/navigation/NavigationEditPlan.d.ts.map +1 -0
  82. package/dist/esm/navigation/NavigationEditPlan.js +2 -0
  83. package/dist/esm/navigation/NavigationEditPlan.js.map +1 -0
  84. package/dist/esm/navigation/NavigationGraph.d.ts +4 -1
  85. package/dist/esm/navigation/NavigationGraph.d.ts.map +1 -1
  86. package/dist/esm/navigation/NavigationItemOrigin.d.ts +5 -0
  87. package/dist/esm/navigation/NavigationItemOrigin.d.ts.map +1 -0
  88. package/dist/esm/navigation/NavigationItemOrigin.js +12 -0
  89. package/dist/esm/navigation/NavigationItemOrigin.js.map +1 -0
  90. package/dist/esm/navigation/NavigationSources.d.ts +6 -0
  91. package/dist/esm/navigation/NavigationSources.d.ts.map +1 -0
  92. package/dist/esm/navigation/NavigationSources.js +2 -0
  93. package/dist/esm/navigation/NavigationSources.js.map +1 -0
  94. package/dist/esm/navigation/NavigationSourcesKind.d.ts +7 -0
  95. package/dist/esm/navigation/NavigationSourcesKind.d.ts.map +1 -0
  96. package/dist/esm/navigation/NavigationSourcesKind.js +14 -0
  97. package/dist/esm/navigation/NavigationSourcesKind.js.map +1 -0
  98. package/dist/esm/navigation/ResolvedNavigationTarget.d.ts +6 -0
  99. package/dist/esm/navigation/ResolvedNavigationTarget.d.ts.map +1 -0
  100. package/dist/esm/navigation/ResolvedNavigationTarget.js +2 -0
  101. package/dist/esm/navigation/ResolvedNavigationTarget.js.map +1 -0
  102. package/dist/esm/navigation/diagnoseNavigation.d.ts.map +1 -1
  103. package/dist/esm/navigation/diagnoseNavigation.js +8 -1
  104. package/dist/esm/navigation/diagnoseNavigation.js.map +1 -1
  105. package/dist/esm/navigation/diagnoseNavigationRegions.d.ts +8 -0
  106. package/dist/esm/navigation/diagnoseNavigationRegions.d.ts.map +1 -0
  107. package/dist/esm/navigation/diagnoseNavigationRegions.js +97 -0
  108. package/dist/esm/navigation/diagnoseNavigationRegions.js.map +1 -0
  109. package/dist/esm/navigation/effectiveNavigation.d.ts +5 -0
  110. package/dist/esm/navigation/effectiveNavigation.d.ts.map +1 -0
  111. package/dist/esm/navigation/effectiveNavigation.js +131 -0
  112. package/dist/esm/navigation/effectiveNavigation.js.map +1 -0
  113. package/dist/esm/navigation/index.d.ts +14 -0
  114. package/dist/esm/navigation/index.d.ts.map +1 -1
  115. package/dist/esm/navigation/index.js +14 -0
  116. package/dist/esm/navigation/index.js.map +1 -1
  117. package/dist/esm/navigation/navigationEdits.d.ts +11 -0
  118. package/dist/esm/navigation/navigationEdits.d.ts.map +1 -0
  119. package/dist/esm/navigation/navigationEdits.js +225 -0
  120. package/dist/esm/navigation/navigationEdits.js.map +1 -0
  121. package/dist/esm/navigation/navigationRegions.d.ts +9 -0
  122. package/dist/esm/navigation/navigationRegions.d.ts.map +1 -0
  123. package/dist/esm/navigation/navigationRegions.js +34 -0
  124. package/dist/esm/navigation/navigationRegions.js.map +1 -0
  125. package/dist/esm/sampleData/SampleDataPackSource.d.ts +6 -0
  126. package/dist/esm/sampleData/SampleDataPackSource.d.ts.map +1 -0
  127. package/dist/esm/sampleData/SampleDataPackSource.js +2 -0
  128. package/dist/esm/sampleData/SampleDataPackSource.js.map +1 -0
  129. package/dist/esm/sampleData/SampleDataResolution.d.ts +29 -0
  130. package/dist/esm/sampleData/SampleDataResolution.d.ts.map +1 -0
  131. package/dist/esm/sampleData/SampleDataResolution.js +2 -0
  132. package/dist/esm/sampleData/SampleDataResolution.js.map +1 -0
  133. package/dist/esm/sampleData/SampleRandom.d.ts +14 -0
  134. package/dist/esm/sampleData/SampleRandom.d.ts.map +1 -0
  135. package/dist/esm/sampleData/SampleRandom.js +72 -0
  136. package/dist/esm/sampleData/SampleRandom.js.map +1 -0
  137. package/dist/esm/sampleData/describeSampleDataCatalog.d.ts +24 -0
  138. package/dist/esm/sampleData/describeSampleDataCatalog.d.ts.map +1 -0
  139. package/dist/esm/sampleData/describeSampleDataCatalog.js +57 -0
  140. package/dist/esm/sampleData/describeSampleDataCatalog.js.map +1 -0
  141. package/dist/esm/sampleData/findSampleDataSet.d.ts +3 -0
  142. package/dist/esm/sampleData/findSampleDataSet.d.ts.map +1 -0
  143. package/dist/esm/sampleData/findSampleDataSet.js +16 -0
  144. package/dist/esm/sampleData/findSampleDataSet.js.map +1 -0
  145. package/dist/esm/sampleData/findSampleRowLiterals.d.ts +11 -0
  146. package/dist/esm/sampleData/findSampleRowLiterals.d.ts.map +1 -0
  147. package/dist/esm/sampleData/findSampleRowLiterals.js +69 -0
  148. package/dist/esm/sampleData/findSampleRowLiterals.js.map +1 -0
  149. package/dist/esm/sampleData/generateSample.d.ts +6 -0
  150. package/dist/esm/sampleData/generateSample.d.ts.map +1 -0
  151. package/dist/esm/sampleData/generateSample.js +183 -0
  152. package/dist/esm/sampleData/generateSample.js.map +1 -0
  153. package/dist/esm/sampleData/index.d.ts +15 -0
  154. package/dist/esm/sampleData/index.d.ts.map +1 -0
  155. package/dist/esm/sampleData/index.js +15 -0
  156. package/dist/esm/sampleData/index.js.map +1 -0
  157. package/dist/esm/sampleData/inferSampleFieldKind.d.ts +3 -0
  158. package/dist/esm/sampleData/inferSampleFieldKind.d.ts.map +1 -0
  159. package/dist/esm/sampleData/inferSampleFieldKind.js +174 -0
  160. package/dist/esm/sampleData/inferSampleFieldKind.js.map +1 -0
  161. package/dist/esm/sampleData/resolveSampleData.d.ts +3 -0
  162. package/dist/esm/sampleData/resolveSampleData.d.ts.map +1 -0
  163. package/dist/esm/sampleData/resolveSampleData.js +105 -0
  164. package/dist/esm/sampleData/resolveSampleData.js.map +1 -0
  165. package/dist/esm/sampleData/sampleDataRules.d.ts +7 -0
  166. package/dist/esm/sampleData/sampleDataRules.d.ts.map +1 -0
  167. package/dist/esm/sampleData/sampleDataRules.js +19 -0
  168. package/dist/esm/sampleData/sampleDataRules.js.map +1 -0
  169. package/dist/esm/sampleData/sampleLocales.d.ts +13 -0
  170. package/dist/esm/sampleData/sampleLocales.d.ts.map +1 -0
  171. package/dist/esm/sampleData/sampleLocales.js +355 -0
  172. package/dist/esm/sampleData/sampleLocales.js.map +1 -0
  173. package/dist/esm/sampleData/validateSampleDataPack.d.ts +3 -0
  174. package/dist/esm/sampleData/validateSampleDataPack.d.ts.map +1 -0
  175. package/dist/esm/sampleData/validateSampleDataPack.js +42 -0
  176. package/dist/esm/sampleData/validateSampleDataPack.js.map +1 -0
  177. package/dist/esm/sampleData/validateSampleDataPackages.d.ts +3 -0
  178. package/dist/esm/sampleData/validateSampleDataPackages.d.ts.map +1 -0
  179. package/dist/esm/sampleData/validateSampleDataPackages.js +69 -0
  180. package/dist/esm/sampleData/validateSampleDataPackages.js.map +1 -0
  181. package/dist/esm/sampleData/validateSampleDataSelection.d.ts +3 -0
  182. package/dist/esm/sampleData/validateSampleDataSelection.d.ts.map +1 -0
  183. package/dist/esm/sampleData/validateSampleDataSelection.js +50 -0
  184. package/dist/esm/sampleData/validateSampleDataSelection.js.map +1 -0
  185. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  186. package/dist/esm/validateNavigationDestinations.js +2 -0
  187. package/dist/esm/validateNavigationDestinations.js.map +1 -1
  188. package/editing/resolveEffectiveConfiguration.ts +13 -0
  189. package/index.ts +1 -0
  190. package/navigation/EffectiveNavItem.ts +37 -0
  191. package/navigation/EffectiveNavigationRegion.ts +26 -0
  192. package/navigation/NavigationDiagnosticCode.ts +15 -0
  193. package/navigation/NavigationEdit.ts +36 -0
  194. package/navigation/NavigationEditKind.ts +19 -0
  195. package/navigation/NavigationEditOutcome.ts +18 -0
  196. package/navigation/NavigationEditPlan.ts +15 -0
  197. package/navigation/NavigationGraph.ts +10 -1
  198. package/navigation/NavigationItemOrigin.ts +13 -0
  199. package/navigation/NavigationSources.ts +15 -0
  200. package/navigation/NavigationSourcesKind.ts +19 -0
  201. package/navigation/ResolvedNavigationTarget.ts +19 -0
  202. package/navigation/diagnoseNavigation.ts +7 -1
  203. package/navigation/diagnoseNavigationRegions.ts +122 -0
  204. package/navigation/effectiveNavigation.ts +105 -0
  205. package/navigation/index.ts +14 -0
  206. package/navigation/navigationEdits.ts +176 -0
  207. package/navigation/navigationRegions.ts +39 -0
  208. package/package.json +3 -3
  209. package/sampleData/SampleDataPackSource.ts +13 -0
  210. package/sampleData/SampleDataResolution.ts +93 -0
  211. package/sampleData/SampleRandom.ts +85 -0
  212. package/sampleData/describeSampleDataCatalog.ts +108 -0
  213. package/sampleData/findSampleDataSet.ts +18 -0
  214. package/sampleData/findSampleRowLiterals.ts +86 -0
  215. package/sampleData/generateSample.ts +156 -0
  216. package/sampleData/index.ts +17 -0
  217. package/sampleData/inferSampleFieldKind.ts +64 -0
  218. package/sampleData/resolveSampleData.ts +96 -0
  219. package/sampleData/sampleDataRules.ts +30 -0
  220. package/sampleData/sampleLocales.ts +91 -0
  221. package/sampleData/validateSampleDataPack.ts +48 -0
  222. package/sampleData/validateSampleDataPackages.ts +79 -0
  223. package/sampleData/validateSampleDataSelection.ts +55 -0
@@ -0,0 +1,69 @@
1
+ import { PackageKind } from '@cratis/scene.model';
2
+ import { sampleDataIdPattern, sampleDataLocalePattern, isValidSampleDataPath, isValidSampleDataOwner } from './sampleDataRules.js';
3
+ import { validateSampleDataPack } from './validateSampleDataPack.js';
4
+
5
+ // Copyright (c) Cratis. All rights reserved.
6
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
7
+ /**
8
+ * Checks the sample data the given packages ship, in package then reference order: only a Blueprint package may
9
+ * ship packs; each reference needs a valid id, a title, a locale tag and a `sampleData/*.json` path, with no id
10
+ * or path repeated; and each loaded pack must be valid, match its reference's id and locale, be owned by a
11
+ * blueprint, and be one the manifest references. The C# engine (`SampleDataValidation.ValidatePackages`)
12
+ * reports the same problems in the same order.
13
+ */ function validateSampleDataPackages(sources) {
14
+ const problems = [];
15
+ for (const source of sources){
16
+ const manifest = source.manifest;
17
+ const references = manifest.sampleData ?? [];
18
+ const owner = `Package '${manifest.name}'`;
19
+ if (references.length > 0 && manifest.kind !== PackageKind.Blueprint) {
20
+ problems.push(`${owner} ships sample data but is not a Blueprint package`);
21
+ }
22
+ const ids = new Set();
23
+ const paths = new Set();
24
+ for (const reference of references){
25
+ const label = `${owner} sample data pack '${reference.id ?? ''}'`;
26
+ if ((reference.id ?? '').trim() === '') {
27
+ problems.push(`${owner} declares a sample data pack without an id`);
28
+ } else if (!sampleDataIdPattern.test(reference.id)) {
29
+ problems.push(`${label} has an invalid id`);
30
+ } else if (ids.has(reference.id)) {
31
+ problems.push(`${label} is declared more than once`);
32
+ } else {
33
+ ids.add(reference.id);
34
+ }
35
+ if ((reference.title ?? '').trim() === '') problems.push(`${label} declares no title`);
36
+ if ((reference.locale ?? '').trim() === '') {
37
+ problems.push(`${label} declares no locale`);
38
+ } else if (!sampleDataLocalePattern.test(reference.locale)) {
39
+ problems.push(`${label} declares an invalid locale '${reference.locale}'`);
40
+ }
41
+ if (!isValidSampleDataPath(reference.path)) {
42
+ problems.push(`${label} declares path '${reference.path ?? ''}', which is not 'sampleData/<name>.json'`);
43
+ } else if (paths.has(reference.path)) {
44
+ problems.push(`${label} reuses the path '${reference.path}'`);
45
+ } else {
46
+ paths.add(reference.path);
47
+ }
48
+ }
49
+ for (const pack of source.packs ?? []){
50
+ const label = `${owner} sample data pack '${pack.id ?? ''}'`;
51
+ problems.push(...validateSampleDataPack(pack));
52
+ const reference = references.find((candidate)=>candidate.id === pack.id);
53
+ if (reference === undefined) {
54
+ problems.push(`${label} is not referenced by the package's sampleData`);
55
+ continue;
56
+ }
57
+ if (reference.locale !== pack.locale) {
58
+ problems.push(`${label} has locale '${pack.locale}' but its reference declares '${reference.locale}'`);
59
+ }
60
+ if (isValidSampleDataOwner(pack.owner) && pack.owner === 'user') {
61
+ problems.push(`${label} must be owned by a blueprint, not 'user'`);
62
+ }
63
+ }
64
+ }
65
+ return problems;
66
+ }
67
+
68
+ export { validateSampleDataPackages };
69
+ //# sourceMappingURL=validateSampleDataPackages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSampleDataPackages.js","sources":["../../../sampleData/validateSampleDataPackages.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { PackageKind } from '@cratis/scene.model';\nimport { SampleDataPackSource } from './SampleDataPackSource';\nimport { isValidSampleDataOwner, isValidSampleDataPath, sampleDataIdPattern, sampleDataLocalePattern } from './sampleDataRules';\nimport { validateSampleDataPack } from './validateSampleDataPack';\n\n/**\n * Checks the sample data the given packages ship, in package then reference order: only a Blueprint package may\n * ship packs; each reference needs a valid id, a title, a locale tag and a `sampleData/*.json` path, with no id\n * or path repeated; and each loaded pack must be valid, match its reference's id and locale, be owned by a\n * blueprint, and be one the manifest references. The C# engine (`SampleDataValidation.ValidatePackages`)\n * reports the same problems in the same order.\n */\nexport function validateSampleDataPackages(sources: readonly SampleDataPackSource[]): string[] {\n const problems: string[] = [];\n\n for (const source of sources) {\n const manifest = source.manifest;\n const references = manifest.sampleData ?? [];\n const owner = `Package '${manifest.name}'`;\n\n if (references.length > 0 && manifest.kind !== PackageKind.Blueprint) {\n problems.push(`${owner} ships sample data but is not a Blueprint package`);\n }\n\n const ids = new Set<string>();\n const paths = new Set<string>();\n for (const reference of references) {\n const label = `${owner} sample data pack '${reference.id ?? ''}'`;\n if ((reference.id ?? '').trim() === '') {\n problems.push(`${owner} declares a sample data pack without an id`);\n } else if (!sampleDataIdPattern.test(reference.id)) {\n problems.push(`${label} has an invalid id`);\n } else if (ids.has(reference.id)) {\n problems.push(`${label} is declared more than once`);\n } else {\n ids.add(reference.id);\n }\n\n if ((reference.title ?? '').trim() === '') problems.push(`${label} declares no title`);\n\n if ((reference.locale ?? '').trim() === '') {\n problems.push(`${label} declares no locale`);\n } else if (!sampleDataLocalePattern.test(reference.locale)) {\n problems.push(`${label} declares an invalid locale '${reference.locale}'`);\n }\n\n if (!isValidSampleDataPath(reference.path)) {\n problems.push(`${label} declares path '${reference.path ?? ''}', which is not 'sampleData/<name>.json'`);\n } else if (paths.has(reference.path)) {\n problems.push(`${label} reuses the path '${reference.path}'`);\n } else {\n paths.add(reference.path);\n }\n }\n\n for (const pack of source.packs ?? []) {\n const label = `${owner} sample data pack '${pack.id ?? ''}'`;\n problems.push(...validateSampleDataPack(pack));\n const reference = references.find(candidate => candidate.id === pack.id);\n if (reference === undefined) {\n problems.push(`${label} is not referenced by the package's sampleData`);\n continue;\n }\n\n if (reference.locale !== pack.locale) {\n problems.push(`${label} has locale '${pack.locale}' but its reference declares '${reference.locale}'`);\n }\n\n if (isValidSampleDataOwner(pack.owner) && pack.owner === 'user') {\n problems.push(`${label} must be owned by a blueprint, not 'user'`);\n }\n }\n }\n\n return problems;\n}\n"],"names":["validateSampleDataPackages","sources","problems","source","manifest","references","sampleData","owner","name","length","kind","PackageKind","Blueprint","push","ids","Set","paths","reference","label","id","trim","sampleDataIdPattern","test","has","add","title","locale","sampleDataLocalePattern","isValidSampleDataPath","path","pack","packs","validateSampleDataPack","find","candidate","undefined","isValidSampleDataOwner"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { SampleDataPack, SampleDataSelection } from '@cratis/scene.model';
2
+ export declare function validateSampleDataSelection(selection: SampleDataSelection, packs: readonly SampleDataPack[]): string[];
3
+ //# sourceMappingURL=validateSampleDataSelection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSampleDataSelection.d.ts","sourceRoot":"","sources":["../../../sampleData/validateSampleDataSelection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ1E,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,EAAE,CA2CtH"}
@@ -0,0 +1,50 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /**
4
+ * Checks an application's sample data selection against the packs available: the active pack and every bound
5
+ * pack must exist, mappings and bindings must be complete and not repeated, and one read model must not be fed
6
+ * by two different shapes. The C# engine (`SampleDataValidation.ValidateSelection`) reports the same problems in
7
+ * the same order.
8
+ */ function validateSampleDataSelection(selection, packs) {
9
+ const problems = [];
10
+ const known = new Set(packs.map((pack)=>pack.id));
11
+ if (selection.activePack !== undefined && selection.activePack !== null && !known.has(selection.activePack)) {
12
+ problems.push(`The active sample data pack '${selection.activePack}' is not available`);
13
+ }
14
+ const pairs = new Set();
15
+ const shapeByReadModel = new Map();
16
+ for (const mapping of selection.mappings ?? []){
17
+ if ((mapping.shape ?? '').trim() === '') {
18
+ problems.push('A sample data mapping declares no shape');
19
+ } else if ((mapping.readModel ?? '').trim() === '') {
20
+ problems.push(`The sample data mapping for shape '${mapping.shape}' declares no read model`);
21
+ } else if (pairs.has(`${mapping.shape}\u0000${mapping.readModel}`)) {
22
+ problems.push(`The sample data mapping '${mapping.shape}' to '${mapping.readModel}' is declared more than once`);
23
+ } else {
24
+ pairs.add(`${mapping.shape}\u0000${mapping.readModel}`);
25
+ const existing = shapeByReadModel.get(mapping.readModel);
26
+ if (existing === undefined) {
27
+ shapeByReadModel.set(mapping.readModel, mapping.shape);
28
+ } else {
29
+ problems.push(`The read model '${mapping.readModel}' is mapped from both shape '${existing}' and shape '${mapping.shape}'`);
30
+ }
31
+ }
32
+ }
33
+ const targets = new Set();
34
+ for (const binding of selection.bindings ?? []){
35
+ if ((binding.target ?? '').trim() === '') {
36
+ problems.push('A sample data binding declares no target');
37
+ } else if (targets.has(binding.target)) {
38
+ problems.push(`The sample data target '${binding.target}' is bound more than once`);
39
+ } else {
40
+ targets.add(binding.target);
41
+ if (!known.has(binding.pack)) {
42
+ problems.push(`The sample data binding for '${binding.target}' names pack '${binding.pack ?? ''}', which is not available`);
43
+ }
44
+ }
45
+ }
46
+ return problems;
47
+ }
48
+
49
+ export { validateSampleDataSelection };
50
+ //# sourceMappingURL=validateSampleDataSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateSampleDataSelection.js","sources":["../../../sampleData/validateSampleDataSelection.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { SampleDataPack, SampleDataSelection } from '@cratis/scene.model';\n\n/**\n * Checks an application's sample data selection against the packs available: the active pack and every bound\n * pack must exist, mappings and bindings must be complete and not repeated, and one read model must not be fed\n * by two different shapes. The C# engine (`SampleDataValidation.ValidateSelection`) reports the same problems in\n * the same order.\n */\nexport function validateSampleDataSelection(selection: SampleDataSelection, packs: readonly SampleDataPack[]): string[] {\n const problems: string[] = [];\n const known = new Set(packs.map(pack => pack.id));\n\n if (selection.activePack !== undefined && selection.activePack !== null && !known.has(selection.activePack)) {\n problems.push(`The active sample data pack '${selection.activePack}' is not available`);\n }\n\n const pairs = new Set<string>();\n const shapeByReadModel = new Map<string, string>();\n for (const mapping of selection.mappings ?? []) {\n if ((mapping.shape ?? '').trim() === '') {\n problems.push('A sample data mapping declares no shape');\n } else if ((mapping.readModel ?? '').trim() === '') {\n problems.push(`The sample data mapping for shape '${mapping.shape}' declares no read model`);\n } else if (pairs.has(`${mapping.shape}\\u0000${mapping.readModel}`)) {\n problems.push(`The sample data mapping '${mapping.shape}' to '${mapping.readModel}' is declared more than once`);\n } else {\n pairs.add(`${mapping.shape}\\u0000${mapping.readModel}`);\n const existing = shapeByReadModel.get(mapping.readModel);\n if (existing === undefined) {\n shapeByReadModel.set(mapping.readModel, mapping.shape);\n } else {\n problems.push(`The read model '${mapping.readModel}' is mapped from both shape '${existing}' and shape '${mapping.shape}'`);\n }\n }\n }\n\n const targets = new Set<string>();\n for (const binding of selection.bindings ?? []) {\n if ((binding.target ?? '').trim() === '') {\n problems.push('A sample data binding declares no target');\n } else if (targets.has(binding.target)) {\n problems.push(`The sample data target '${binding.target}' is bound more than once`);\n } else {\n targets.add(binding.target);\n if (!known.has(binding.pack)) {\n problems.push(`The sample data binding for '${binding.target}' names pack '${binding.pack ?? ''}', which is not available`);\n }\n }\n }\n\n return problems;\n}\n"],"names":["validateSampleDataSelection","selection","packs","problems","known","Set","map","pack","id","activePack","undefined","has","push","pairs","shapeByReadModel","Map","mapping","mappings","shape","trim","readModel","add","existing","get","set","targets","binding","bindings","target"],"mappings":"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"}