@cratis/scene.engine 4.24.0 → 4.26.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 (170) hide show
  1. package/dist/cjs/index.js +52 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/sampleData/SampleRandom.js +77 -0
  4. package/dist/cjs/sampleData/SampleRandom.js.map +1 -0
  5. package/dist/cjs/sampleData/describeSampleDataCatalog.js +61 -0
  6. package/dist/cjs/sampleData/describeSampleDataCatalog.js.map +1 -0
  7. package/dist/cjs/sampleData/findSampleDataSet.js +18 -0
  8. package/dist/cjs/sampleData/findSampleDataSet.js.map +1 -0
  9. package/dist/cjs/sampleData/findSampleRowLiterals.js +73 -0
  10. package/dist/cjs/sampleData/findSampleRowLiterals.js.map +1 -0
  11. package/dist/cjs/sampleData/generateSample.js +188 -0
  12. package/dist/cjs/sampleData/generateSample.js.map +1 -0
  13. package/dist/cjs/sampleData/inferSampleFieldKind.js +176 -0
  14. package/dist/cjs/sampleData/inferSampleFieldKind.js.map +1 -0
  15. package/dist/cjs/sampleData/resolveSampleData.js +107 -0
  16. package/dist/cjs/sampleData/resolveSampleData.js.map +1 -0
  17. package/dist/cjs/sampleData/sampleDataRules.js +26 -0
  18. package/dist/cjs/sampleData/sampleDataRules.js.map +1 -0
  19. package/dist/cjs/sampleData/sampleLocales.js +359 -0
  20. package/dist/cjs/sampleData/sampleLocales.js.map +1 -0
  21. package/dist/cjs/sampleData/validateSampleDataPack.js +44 -0
  22. package/dist/cjs/sampleData/validateSampleDataPack.js.map +1 -0
  23. package/dist/cjs/sampleData/validateSampleDataPackages.js +71 -0
  24. package/dist/cjs/sampleData/validateSampleDataPackages.js.map +1 -0
  25. package/dist/cjs/sampleData/validateSampleDataSelection.js +52 -0
  26. package/dist/cjs/sampleData/validateSampleDataSelection.js.map +1 -0
  27. package/dist/cjs/templateApplicability.js.map +1 -1
  28. package/dist/cjs/templates/TemplateReferenceResolution.js +15 -0
  29. package/dist/cjs/templates/TemplateReferenceResolution.js.map +1 -0
  30. package/dist/cjs/templates/applicableTemplates.js +199 -0
  31. package/dist/cjs/templates/applicableTemplates.js.map +1 -0
  32. package/dist/cjs/templates/describeTemplateCatalog.js +11 -6
  33. package/dist/cjs/templates/describeTemplateCatalog.js.map +1 -1
  34. package/dist/cjs/templates/resolveTemplateReference.js +89 -0
  35. package/dist/cjs/templates/resolveTemplateReference.js.map +1 -0
  36. package/dist/cjs/templates/validateTemplateMetadata.js +9 -0
  37. package/dist/cjs/templates/validateTemplateMetadata.js.map +1 -1
  38. package/dist/esm/index.d.ts +1 -0
  39. package/dist/esm/index.d.ts.map +1 -1
  40. package/dist/esm/index.js +16 -1
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/sampleData/SampleDataPackSource.d.ts +6 -0
  43. package/dist/esm/sampleData/SampleDataPackSource.d.ts.map +1 -0
  44. package/dist/esm/sampleData/SampleDataPackSource.js +2 -0
  45. package/dist/esm/sampleData/SampleDataPackSource.js.map +1 -0
  46. package/dist/esm/sampleData/SampleDataResolution.d.ts +29 -0
  47. package/dist/esm/sampleData/SampleDataResolution.d.ts.map +1 -0
  48. package/dist/esm/sampleData/SampleDataResolution.js +2 -0
  49. package/dist/esm/sampleData/SampleDataResolution.js.map +1 -0
  50. package/dist/esm/sampleData/SampleRandom.d.ts +14 -0
  51. package/dist/esm/sampleData/SampleRandom.d.ts.map +1 -0
  52. package/dist/esm/sampleData/SampleRandom.js +72 -0
  53. package/dist/esm/sampleData/SampleRandom.js.map +1 -0
  54. package/dist/esm/sampleData/describeSampleDataCatalog.d.ts +24 -0
  55. package/dist/esm/sampleData/describeSampleDataCatalog.d.ts.map +1 -0
  56. package/dist/esm/sampleData/describeSampleDataCatalog.js +57 -0
  57. package/dist/esm/sampleData/describeSampleDataCatalog.js.map +1 -0
  58. package/dist/esm/sampleData/findSampleDataSet.d.ts +3 -0
  59. package/dist/esm/sampleData/findSampleDataSet.d.ts.map +1 -0
  60. package/dist/esm/sampleData/findSampleDataSet.js +16 -0
  61. package/dist/esm/sampleData/findSampleDataSet.js.map +1 -0
  62. package/dist/esm/sampleData/findSampleRowLiterals.d.ts +11 -0
  63. package/dist/esm/sampleData/findSampleRowLiterals.d.ts.map +1 -0
  64. package/dist/esm/sampleData/findSampleRowLiterals.js +69 -0
  65. package/dist/esm/sampleData/findSampleRowLiterals.js.map +1 -0
  66. package/dist/esm/sampleData/generateSample.d.ts +6 -0
  67. package/dist/esm/sampleData/generateSample.d.ts.map +1 -0
  68. package/dist/esm/sampleData/generateSample.js +183 -0
  69. package/dist/esm/sampleData/generateSample.js.map +1 -0
  70. package/dist/esm/sampleData/index.d.ts +15 -0
  71. package/dist/esm/sampleData/index.d.ts.map +1 -0
  72. package/dist/esm/sampleData/index.js +15 -0
  73. package/dist/esm/sampleData/index.js.map +1 -0
  74. package/dist/esm/sampleData/inferSampleFieldKind.d.ts +3 -0
  75. package/dist/esm/sampleData/inferSampleFieldKind.d.ts.map +1 -0
  76. package/dist/esm/sampleData/inferSampleFieldKind.js +174 -0
  77. package/dist/esm/sampleData/inferSampleFieldKind.js.map +1 -0
  78. package/dist/esm/sampleData/resolveSampleData.d.ts +3 -0
  79. package/dist/esm/sampleData/resolveSampleData.d.ts.map +1 -0
  80. package/dist/esm/sampleData/resolveSampleData.js +105 -0
  81. package/dist/esm/sampleData/resolveSampleData.js.map +1 -0
  82. package/dist/esm/sampleData/sampleDataRules.d.ts +7 -0
  83. package/dist/esm/sampleData/sampleDataRules.d.ts.map +1 -0
  84. package/dist/esm/sampleData/sampleDataRules.js +19 -0
  85. package/dist/esm/sampleData/sampleDataRules.js.map +1 -0
  86. package/dist/esm/sampleData/sampleLocales.d.ts +13 -0
  87. package/dist/esm/sampleData/sampleLocales.d.ts.map +1 -0
  88. package/dist/esm/sampleData/sampleLocales.js +355 -0
  89. package/dist/esm/sampleData/sampleLocales.js.map +1 -0
  90. package/dist/esm/sampleData/validateSampleDataPack.d.ts +3 -0
  91. package/dist/esm/sampleData/validateSampleDataPack.d.ts.map +1 -0
  92. package/dist/esm/sampleData/validateSampleDataPack.js +42 -0
  93. package/dist/esm/sampleData/validateSampleDataPack.js.map +1 -0
  94. package/dist/esm/sampleData/validateSampleDataPackages.d.ts +3 -0
  95. package/dist/esm/sampleData/validateSampleDataPackages.d.ts.map +1 -0
  96. package/dist/esm/sampleData/validateSampleDataPackages.js +69 -0
  97. package/dist/esm/sampleData/validateSampleDataPackages.js.map +1 -0
  98. package/dist/esm/sampleData/validateSampleDataSelection.d.ts +3 -0
  99. package/dist/esm/sampleData/validateSampleDataSelection.d.ts.map +1 -0
  100. package/dist/esm/sampleData/validateSampleDataSelection.js +50 -0
  101. package/dist/esm/sampleData/validateSampleDataSelection.js.map +1 -0
  102. package/dist/esm/templateApplicability.d.ts +1 -2
  103. package/dist/esm/templateApplicability.d.ts.map +1 -1
  104. package/dist/esm/templateApplicability.js.map +1 -1
  105. package/dist/esm/templates/ApplicableTemplateSet.d.ts +27 -0
  106. package/dist/esm/templates/ApplicableTemplateSet.d.ts.map +1 -0
  107. package/dist/esm/templates/ApplicableTemplateSet.js +2 -0
  108. package/dist/esm/templates/ApplicableTemplateSet.js.map +1 -0
  109. package/dist/esm/templates/TemplateCatalogEntry.d.ts +3 -1
  110. package/dist/esm/templates/TemplateCatalogEntry.d.ts.map +1 -1
  111. package/dist/esm/templates/TemplateLibrary.d.ts +6 -0
  112. package/dist/esm/templates/TemplateLibrary.d.ts.map +1 -0
  113. package/dist/esm/templates/TemplateLibrary.js +2 -0
  114. package/dist/esm/templates/TemplateLibrary.js.map +1 -0
  115. package/dist/esm/templates/TemplateReferenceResolution.d.ts +16 -0
  116. package/dist/esm/templates/TemplateReferenceResolution.d.ts.map +1 -0
  117. package/dist/esm/templates/TemplateReferenceResolution.js +13 -0
  118. package/dist/esm/templates/TemplateReferenceResolution.js.map +1 -0
  119. package/dist/esm/templates/TemplateTarget.d.ts +9 -0
  120. package/dist/esm/templates/TemplateTarget.d.ts.map +1 -0
  121. package/dist/esm/templates/TemplateTarget.js +2 -0
  122. package/dist/esm/templates/TemplateTarget.js.map +1 -0
  123. package/dist/esm/templates/applicableTemplates.d.ts +9 -0
  124. package/dist/esm/templates/applicableTemplates.d.ts.map +1 -0
  125. package/dist/esm/templates/applicableTemplates.js +194 -0
  126. package/dist/esm/templates/applicableTemplates.js.map +1 -0
  127. package/dist/esm/templates/describeTemplateCatalog.d.ts.map +1 -1
  128. package/dist/esm/templates/describeTemplateCatalog.js +12 -7
  129. package/dist/esm/templates/describeTemplateCatalog.js.map +1 -1
  130. package/dist/esm/templates/index.d.ts +6 -0
  131. package/dist/esm/templates/index.d.ts.map +1 -1
  132. package/dist/esm/templates/index.js +6 -0
  133. package/dist/esm/templates/index.js.map +1 -1
  134. package/dist/esm/templates/resolveTemplateReference.d.ts +5 -0
  135. package/dist/esm/templates/resolveTemplateReference.d.ts.map +1 -0
  136. package/dist/esm/templates/resolveTemplateReference.js +87 -0
  137. package/dist/esm/templates/resolveTemplateReference.js.map +1 -0
  138. package/dist/esm/templates/validateTemplateMetadata.d.ts +2 -0
  139. package/dist/esm/templates/validateTemplateMetadata.d.ts.map +1 -1
  140. package/dist/esm/templates/validateTemplateMetadata.js +8 -1
  141. package/dist/esm/templates/validateTemplateMetadata.js.map +1 -1
  142. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  143. package/index.ts +1 -0
  144. package/package.json +3 -3
  145. package/sampleData/SampleDataPackSource.ts +13 -0
  146. package/sampleData/SampleDataResolution.ts +93 -0
  147. package/sampleData/SampleRandom.ts +85 -0
  148. package/sampleData/describeSampleDataCatalog.ts +108 -0
  149. package/sampleData/findSampleDataSet.ts +18 -0
  150. package/sampleData/findSampleRowLiterals.ts +86 -0
  151. package/sampleData/generateSample.ts +156 -0
  152. package/sampleData/index.ts +17 -0
  153. package/sampleData/inferSampleFieldKind.ts +64 -0
  154. package/sampleData/resolveSampleData.ts +96 -0
  155. package/sampleData/sampleDataRules.ts +30 -0
  156. package/sampleData/sampleLocales.ts +91 -0
  157. package/sampleData/validateSampleDataPack.ts +48 -0
  158. package/sampleData/validateSampleDataPackages.ts +79 -0
  159. package/sampleData/validateSampleDataSelection.ts +55 -0
  160. package/templateApplicability.ts +2 -1
  161. package/templates/ApplicableTemplateSet.ts +54 -0
  162. package/templates/TemplateCatalogEntry.ts +5 -1
  163. package/templates/TemplateLibrary.ts +16 -0
  164. package/templates/TemplateReferenceResolution.ts +35 -0
  165. package/templates/TemplateTarget.ts +23 -0
  166. package/templates/applicableTemplates.ts +148 -0
  167. package/templates/describeTemplateCatalog.ts +11 -7
  168. package/templates/index.ts +6 -0
  169. package/templates/resolveTemplateReference.ts +79 -0
  170. package/templates/validateTemplateMetadata.ts +11 -0
@@ -1 +1 @@
1
- {"version":3,"file":"templateApplicability.js","sources":["../../templateApplicability.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 { DialogTemplate, Layout, ScreenTemplate, TemplateMetadata, TemplateScope } from '@cratis/scene.model';\n\ntype TemplateKind = 'Layout' | 'ScreenTemplate' | 'DialogTemplate';\ntype TemplateContainer = Pick<Layout, 'name' | 'slots'>;\n\n/** Validates application-shell selection without introducing a competing shell model. */\nexport function validateLayoutApplicability(layout: Layout | undefined, scope: TemplateScope): string[] {\n return layout ? validateRole(layout.name, 'Layout', layout.metadata, scope) : [];\n}\n\n/**\n * Validates selection at any depth of the application hierarchy, including qualified fitsSlot names.\n * Undefined represents outlet-only composition and is valid. Invalid author input is never rewritten.\n */\nexport function validateScreenTemplateApplicability(\n template: ScreenTemplate | undefined,\n scope: TemplateScope,\n container?: TemplateContainer,\n): string[] {\n if (!template) return [];\n const problems = validateRole(template.name, 'ScreenTemplate', template.metadata, scope);\n if (template.fitsSlot !== undefined) {\n const separator = template.fitsSlot.lastIndexOf('.');\n const qualifier = separator < 0 ? undefined : template.fitsSlot.slice(0, separator);\n const slot = separator < 0 ? template.fitsSlot : template.fitsSlot.slice(separator + 1);\n if (!container || (qualifier !== undefined && qualifier !== container.name) || !container.slots.some(candidate => candidate.name === slot)) {\n problems.push(`Template '${template.name}' does not fit slot '${template.fitsSlot}' on '${container?.name ?? '(no container)'}'`);\n }\n }\n return problems;\n}\n\n/** Validates an overlay template separately from slot-based screen composition. */\nexport function validateDialogTemplateApplicability(template: DialogTemplate | undefined, scope: TemplateScope): string[] {\n return template ? validateRole(template.name, 'DialogTemplate', template.metadata, scope) : [];\n}\n\n/** The shared picker predicate uses exactly the same rules as validation on apply. */\nexport function filterApplicableScreenTemplates(\n templates: readonly ScreenTemplate[],\n scope: TemplateScope,\n container?: TemplateContainer,\n): ScreenTemplate[] {\n return templates.filter(template => validateScreenTemplateApplicability(template, scope, container).length === 0);\n}\n\nfunction validateRole(name: string, kind: TemplateKind, metadata: TemplateMetadata | undefined, scope: TemplateScope): string[] {\n const problems: string[] = [];\n if (!Object.values(TemplateScope).includes(scope)) {\n problems.push(`Template '${name}' has unknown target scope '${scope}'`);\n } else if ((kind === 'Layout') !== (scope === TemplateScope.Application)) {\n problems.push(`Template '${name}' of kind '${kind}' cannot be applied at scope '${scope}'`);\n }\n if (metadata?.type === 'ApplicationShell' && kind !== 'Layout') {\n problems.push(`Template '${name}' of type 'ApplicationShell' must be a Layout`);\n }\n if (metadata?.type === 'Dialog' && kind !== 'DialogTemplate') {\n problems.push(`Template '${name}' of type 'Dialog' must be a DialogTemplate`);\n }\n if (kind === 'Layout' && ['Workspace', 'List', 'Detail', 'Form'].includes(metadata?.type ?? '')) {\n problems.push(`Template '${name}' of type '${metadata?.type}' must not be a Layout`);\n }\n for (const declaredScope of metadata?.scopes ?? []) {\n if (!Object.values(TemplateScope).includes(declaredScope)) {\n problems.push(`Template '${name}' declares unknown scope '${declaredScope}'`);\n }\n }\n if (metadata?.scopes !== undefined && !metadata.scopes.includes(scope)) {\n problems.push(`Template '${name}' does not declare scope '${scope}'`);\n }\n return problems;\n}\n"],"names":["validateLayoutApplicability","layout","scope","validateRole","name","metadata","validateScreenTemplateApplicability","template","container","problems","fitsSlot","undefined","separator","lastIndexOf","qualifier","slice","slot","slots","some","candidate","push","validateDialogTemplateApplicability","filterApplicableScreenTemplates","templates","filter","length","kind","Object","values","TemplateScope","includes","Application","type","declaredScope","scopes"],"mappings":"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"}
1
+ {"version":3,"file":"templateApplicability.js","sources":["../../templateApplicability.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 { DialogTemplate, Layout, ScreenTemplate, TemplateMetadata, TemplateScope } from '@cratis/scene.model';\n\ntype TemplateKind = 'Layout' | 'ScreenTemplate' | 'DialogTemplate';\n/** The containing layout or screen template against which a fitsSlot selection is checked. */\nexport type TemplateContainer = Pick<Layout, 'name' | 'slots'>;\n\n/** Validates application-shell selection without introducing a competing shell model. */\nexport function validateLayoutApplicability(layout: Layout | undefined, scope: TemplateScope): string[] {\n return layout ? validateRole(layout.name, 'Layout', layout.metadata, scope) : [];\n}\n\n/**\n * Validates selection at any depth of the application hierarchy, including qualified fitsSlot names.\n * Undefined represents outlet-only composition and is valid. Invalid author input is never rewritten.\n */\nexport function validateScreenTemplateApplicability(\n template: ScreenTemplate | undefined,\n scope: TemplateScope,\n container?: TemplateContainer,\n): string[] {\n if (!template) return [];\n const problems = validateRole(template.name, 'ScreenTemplate', template.metadata, scope);\n if (template.fitsSlot !== undefined) {\n const separator = template.fitsSlot.lastIndexOf('.');\n const qualifier = separator < 0 ? undefined : template.fitsSlot.slice(0, separator);\n const slot = separator < 0 ? template.fitsSlot : template.fitsSlot.slice(separator + 1);\n if (!container || (qualifier !== undefined && qualifier !== container.name) || !container.slots.some(candidate => candidate.name === slot)) {\n problems.push(`Template '${template.name}' does not fit slot '${template.fitsSlot}' on '${container?.name ?? '(no container)'}'`);\n }\n }\n return problems;\n}\n\n/** Validates an overlay template separately from slot-based screen composition. */\nexport function validateDialogTemplateApplicability(template: DialogTemplate | undefined, scope: TemplateScope): string[] {\n return template ? validateRole(template.name, 'DialogTemplate', template.metadata, scope) : [];\n}\n\n/** The shared picker predicate uses exactly the same rules as validation on apply. */\nexport function filterApplicableScreenTemplates(\n templates: readonly ScreenTemplate[],\n scope: TemplateScope,\n container?: TemplateContainer,\n): ScreenTemplate[] {\n return templates.filter(template => validateScreenTemplateApplicability(template, scope, container).length === 0);\n}\n\nfunction validateRole(name: string, kind: TemplateKind, metadata: TemplateMetadata | undefined, scope: TemplateScope): string[] {\n const problems: string[] = [];\n if (!Object.values(TemplateScope).includes(scope)) {\n problems.push(`Template '${name}' has unknown target scope '${scope}'`);\n } else if ((kind === 'Layout') !== (scope === TemplateScope.Application)) {\n problems.push(`Template '${name}' of kind '${kind}' cannot be applied at scope '${scope}'`);\n }\n if (metadata?.type === 'ApplicationShell' && kind !== 'Layout') {\n problems.push(`Template '${name}' of type 'ApplicationShell' must be a Layout`);\n }\n if (metadata?.type === 'Dialog' && kind !== 'DialogTemplate') {\n problems.push(`Template '${name}' of type 'Dialog' must be a DialogTemplate`);\n }\n if (kind === 'Layout' && ['Workspace', 'List', 'Detail', 'Form'].includes(metadata?.type ?? '')) {\n problems.push(`Template '${name}' of type '${metadata?.type}' must not be a Layout`);\n }\n for (const declaredScope of metadata?.scopes ?? []) {\n if (!Object.values(TemplateScope).includes(declaredScope)) {\n problems.push(`Template '${name}' declares unknown scope '${declaredScope}'`);\n }\n }\n if (metadata?.scopes !== undefined && !metadata.scopes.includes(scope)) {\n problems.push(`Template '${name}' does not declare scope '${scope}'`);\n }\n return problems;\n}\n"],"names":["validateLayoutApplicability","layout","scope","validateRole","name","metadata","validateScreenTemplateApplicability","template","container","problems","fitsSlot","undefined","separator","lastIndexOf","qualifier","slice","slot","slots","some","candidate","push","validateDialogTemplateApplicability","filterApplicableScreenTemplates","templates","filter","length","kind","Object","values","TemplateScope","includes","Application","type","declaredScope","scopes"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { TemplateMetadata, TemplateReference } from '@cratis/scene.model';
2
+ import { TemplateCatalogKind } from './TemplateCatalogKind';
3
+ export interface ApplicableTemplate {
4
+ package: string;
5
+ packageVersion: string;
6
+ kind: TemplateCatalogKind;
7
+ name: string;
8
+ displayName?: string;
9
+ description?: string;
10
+ metadata?: TemplateMetadata;
11
+ reference: TemplateReference;
12
+ }
13
+ export interface ApplicableTemplateGroup {
14
+ category?: string;
15
+ templates: ApplicableTemplate[];
16
+ }
17
+ export interface ApplicableBlueprint {
18
+ blueprint: string;
19
+ version: string;
20
+ displayName?: string;
21
+ categories: ApplicableTemplateGroup[];
22
+ }
23
+ export interface ApplicableTemplateSet {
24
+ own: ApplicableTemplateGroup[];
25
+ blueprints: ApplicableBlueprint[];
26
+ }
27
+ //# sourceMappingURL=ApplicableTemplateSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicableTemplateSet.d.ts","sourceRoot":"","sources":["../../../templates/ApplicableTemplateSet.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,WAAW,kBAAkB;IAE/B,OAAO,EAAE,MAAM,CAAC;IAGhB,cAAc,EAAE,MAAM,CAAC;IAEvB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAG5B,SAAS,EAAE,iBAAiB,CAAC;CAChC;AAGD,MAAM,WAAW,uBAAuB;IAEpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAGD,MAAM,WAAW,mBAAmB;IAEhC,SAAS,EAAE,MAAM,CAAC;IAGlB,OAAO,EAAE,MAAM,CAAC;IAGhB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,EAAE,uBAAuB,EAAE,CAAC;CACzC;AAGD,MAAM,WAAW,qBAAqB;IAElC,GAAG,EAAE,uBAAuB,EAAE,CAAC;IAG/B,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ApplicableTemplateSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicableTemplateSet.js","sourceRoot":"","sources":["../../../templates/ApplicableTemplateSet.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { TemplateAttribution, TemplateCompatibility, TemplateScope } from '@cratis/scene.model';
1
+ import { TemplateAttribution, TemplateCompatibility, TemplateScope, SliceKind } from '@cratis/scene.model';
2
2
  import { TemplateCatalogKind } from './TemplateCatalogKind';
3
3
  export interface TemplateCatalogEntry {
4
4
  package: string;
@@ -10,11 +10,13 @@ export interface TemplateCatalogEntry {
10
10
  type?: string;
11
11
  category?: string;
12
12
  scopes?: TemplateScope[];
13
+ sliceKinds?: SliceKind[];
13
14
  compatibility?: TemplateCompatibility;
14
15
  attribution?: TemplateAttribution;
15
16
  license?: string;
16
17
  licenseUrl?: string;
17
18
  compatible: boolean;
18
19
  problems: string[];
20
+ warnings: string[];
19
21
  }
20
22
  //# sourceMappingURL=TemplateCatalogEntry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateCatalogEntry.d.ts","sourceRoot":"","sources":["../../../templates/TemplateCatalogEntry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D,MAAM,WAAW,oBAAoB;IAEjC,OAAO,EAAE,MAAM,CAAC;IAGhB,cAAc,EAAE,MAAM,CAAC;IAEvB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,OAAO,CAAC;IAGpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB"}
1
+ {"version":3,"file":"TemplateCatalogEntry.d.ts","sourceRoot":"","sources":["../../../templates/TemplateCatalogEntry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D,MAAM,WAAW,oBAAoB;IAEjC,OAAO,EAAE,MAAM,CAAC;IAGhB,cAAc,EAAE,MAAM,CAAC;IAEvB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,UAAU,EAAE,OAAO,CAAC;IAGpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAGnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB"}
@@ -0,0 +1,6 @@
1
+ import { TemplateSource } from './TemplateSource';
2
+ export interface TemplateLibrary {
3
+ own?: TemplateSource;
4
+ blueprints: TemplateSource[];
5
+ }
6
+ //# sourceMappingURL=TemplateLibrary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateLibrary.d.ts","sourceRoot":"","sources":["../../../templates/TemplateLibrary.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,MAAM,WAAW,eAAe;IAE5B,GAAG,CAAC,EAAE,cAAc,CAAC;IAGrB,UAAU,EAAE,cAAc,EAAE,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TemplateLibrary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateLibrary.js","sourceRoot":"","sources":["../../../templates/TemplateLibrary.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { TemplateCatalogKind } from './TemplateCatalogKind';
2
+ export declare enum TemplateReferenceStatus {
3
+ Resolved = "Resolved",
4
+ Malformed = "Malformed",
5
+ UnknownBlueprint = "UnknownBlueprint",
6
+ VersionNotSatisfied = "VersionNotSatisfied",
7
+ UnknownTemplate = "UnknownTemplate"
8
+ }
9
+ export interface TemplateReferenceResolution {
10
+ status: TemplateReferenceStatus;
11
+ package?: string;
12
+ packageVersion?: string;
13
+ kind?: TemplateCatalogKind;
14
+ message?: string;
15
+ }
16
+ //# sourceMappingURL=TemplateReferenceResolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateReferenceResolution.d.ts","sourceRoot":"","sources":["../../../templates/TemplateReferenceResolution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,oBAAY,uBAAuB;IAE/B,QAAQ,aAAa;IAErB,SAAS,cAAc;IAEvB,gBAAgB,qBAAqB;IAErC,mBAAmB,wBAAwB;IAE3C,eAAe,oBAAoB;CACtC;AAGD,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,uBAAuB,CAAC;IAGhC,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAG3B,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,13 @@
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
+ /** The outcome of resolving a template reference against a template library. */ var TemplateReferenceStatus = /*#__PURE__*/ function(TemplateReferenceStatus) {
4
+ /** The reference names a template that exists, at a version the reference accepts. */ TemplateReferenceStatus["Resolved"] = "Resolved";
5
+ /** The reference is not well formed: an own reference carrying a blueprint or version, a blueprint reference without a blueprint, or an invalid version range. */ TemplateReferenceStatus["Malformed"] = "Malformed";
6
+ /** No blueprint package of that name is available. */ TemplateReferenceStatus["UnknownBlueprint"] = "UnknownBlueprint";
7
+ /** The installed version of the blueprint is outside the reference's version range: the blueprint has drifted from what was chosen. */ TemplateReferenceStatus["VersionNotSatisfied"] = "VersionNotSatisfied";
8
+ /** The blueprint or workspace has no template of that name. */ TemplateReferenceStatus["UnknownTemplate"] = "UnknownTemplate";
9
+ return TemplateReferenceStatus;
10
+ }({});
11
+
12
+ export { TemplateReferenceStatus };
13
+ //# sourceMappingURL=TemplateReferenceResolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateReferenceResolution.js","sources":["../../../templates/TemplateReferenceResolution.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 { TemplateCatalogKind } from './TemplateCatalogKind';\n\n/** The outcome of resolving a template reference against a template library. */\nexport enum TemplateReferenceStatus {\n /** The reference names a template that exists, at a version the reference accepts. */\n Resolved = 'Resolved',\n /** The reference is not well formed: an own reference carrying a blueprint or version, a blueprint reference without a blueprint, or an invalid version range. */\n Malformed = 'Malformed',\n /** No blueprint package of that name is available. */\n UnknownBlueprint = 'UnknownBlueprint',\n /** The installed version of the blueprint is outside the reference's version range: the blueprint has drifted from what was chosen. */\n VersionNotSatisfied = 'VersionNotSatisfied',\n /** The blueprint or workspace has no template of that name. */\n UnknownTemplate = 'UnknownTemplate',\n}\n\n/** The result of resolving a template reference. */\nexport interface TemplateReferenceResolution {\n status: TemplateReferenceStatus;\n\n /** The package providing the template, when it was found or its blueprint was. */\n package?: string;\n\n /** The installed version of that package. */\n packageVersion?: string;\n\n /** Which kind of template was found, when the status is Resolved. */\n kind?: TemplateCatalogKind;\n\n /** A diagnostic when the reference did not resolve. */\n message?: string;\n}\n"],"names":["TemplateReferenceStatus"],"mappings":"AAAA;AACA;AAIA,iFACO,IAAKA,uBAAAA,iBAAAA,SAAAA,uBAAAA,EAAAA;2FAC4E,uBAAA,CAAA,UAAA,CAAA,GAAA,UAAA;uKAE4E,uBAAA,CAAA,WAAA,CAAA,GAAA,WAAA;2DAE5G,uBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAA;4IAEiF,uBAAA,CAAA,qBAAA,CAAA,GAAA,qBAAA;oEAExE,uBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAA;AATrDA,IAAAA,OAAAA,uBAAAA;AAWX,CAAA,CAAA,EAAA;;"}
@@ -0,0 +1,9 @@
1
+ import { TemplateScope, SliceKind } from '@cratis/scene.model';
2
+ import { TemplateContainer } from '../templateApplicability';
3
+ export interface TemplateTarget {
4
+ scope: TemplateScope;
5
+ sliceKind?: SliceKind;
6
+ container?: TemplateContainer;
7
+ chain?: string[];
8
+ }
9
+ //# sourceMappingURL=TemplateTarget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateTarget.d.ts","sourceRoot":"","sources":["../../../templates/TemplateTarget.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,MAAM,WAAW,cAAc;IAE3B,KAAK,EAAE,aAAa,CAAC;IAGrB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAM9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TemplateTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateTarget.js","sourceRoot":"","sources":["../../../templates/TemplateTarget.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { DialogTemplate, Layout, ScreenTemplate } from '@cratis/scene.model';
2
+ import { ApplicableTemplateSet } from './ApplicableTemplateSet';
3
+ import { TemplateLibrary } from './TemplateLibrary';
4
+ import { TemplateTarget } from './TemplateTarget';
5
+ export declare function applicableTemplates(library: TemplateLibrary, target: TemplateTarget): ApplicableTemplateSet;
6
+ export declare function validateLayoutForTarget(layout: Layout, target: TemplateTarget): string[];
7
+ export declare function validateScreenTemplateForTarget(template: ScreenTemplate, target: TemplateTarget): string[];
8
+ export declare function validateDialogTemplateForTarget(template: DialogTemplate, target: TemplateTarget): string[];
9
+ //# sourceMappingURL=applicableTemplates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applicableTemplates.d.ts","sourceRoot":"","sources":["../../../templates/applicableTemplates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAA0F,MAAM,qBAAqB,CAAC;AAGrK,OAAO,EAAoE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAElI,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAsBlD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAU3G;AAGD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAExF;AAGD,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAuB1G;AAGD,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAE1G"}
@@ -0,0 +1,194 @@
1
+ import { TemplateScope, SliceKind, TemplateReferenceSource } from '@cratis/scene.model';
2
+ import { resolveScreenTemplates } from '../resolveScreenTemplates.js';
3
+ import { validateDialogTemplateApplicability, validateLayoutApplicability, validateScreenTemplateApplicability } from '../templateApplicability.js';
4
+ import { TemplateCatalogKind } from './TemplateCatalogKind.js';
5
+
6
+ // Copyright (c) Cratis. All rights reserved.
7
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
8
+ const screenScopes = [
9
+ TemplateScope.Module,
10
+ TemplateScope.Feature,
11
+ TemplateScope.Subfeature
12
+ ];
13
+ const dialogSliceKinds = [
14
+ SliceKind.StateChange
15
+ ];
16
+ const screenSliceKinds = [
17
+ SliceKind.StateChange,
18
+ SliceKind.StateView
19
+ ];
20
+ /**
21
+ * Decides which templates a picker offers at a target, so no host re-implements the rules: own templates by
22
+ * category, then each blueprint that has at least one applicable template. A blueprint with none is omitted.
23
+ *
24
+ * It composes the applicability validators (kind and scope, explicit scopes override, category never implies a
25
+ * scope, slot fit against the container) and `resolveScreenTemplates` (a template must find exactly one home and
26
+ * nothing may nest inside itself) with the defaults of each hierarchy level, used when a template declares no scopes:
27
+ *
28
+ * - Application - layouts.
29
+ * - Module, Feature, Subfeature - screen templates, fitting a slot of the container.
30
+ * - Slice, state change - dialog templates.
31
+ * - Slice, state view - screen templates that declare the Slice scope or state view slice kinds.
32
+ *
33
+ * Declared `scopes` and `sliceKinds` always override the defaults. The C# engine (`ApplicableTemplates.Compute`)
34
+ * returns identical results; both are asserted against `template-applicability-fixtures.json`.
35
+ */ function applicableTemplates(library, target) {
36
+ const own = library.own ? groupByCategory(applicableIn(library.own, target, false)) : [];
37
+ const blueprints = [];
38
+ for (const source of library.blueprints){
39
+ const categories = groupByCategory(applicableIn(source, target, true));
40
+ if (categories.length > 0) {
41
+ blueprints.push({
42
+ blueprint: source.manifest.name,
43
+ version: source.manifest.version,
44
+ displayName: source.manifest.displayName,
45
+ categories
46
+ });
47
+ }
48
+ }
49
+ return {
50
+ own,
51
+ blueprints
52
+ };
53
+ }
54
+ /** Why a layout does not apply at a target; empty when it does. */ function validateLayoutForTarget(layout, target) {
55
+ return withDefaults(validateLayoutApplicability(layout, target.scope), layout.name, TemplateCatalogKind.Layout, layout.metadata, target);
56
+ }
57
+ /** Why a screen template does not apply at a target, including whether its slot nesting resolves; empty when it does. */ function validateScreenTemplateForTarget(template, target) {
58
+ const problems = withDefaults(validateScreenTemplateApplicability(template, target.scope, target.container), template.name, TemplateCatalogKind.ScreenTemplate, template.metadata, target);
59
+ if (problems.length > 0) return problems;
60
+ if (target.chain?.includes(template.name)) {
61
+ return [
62
+ `Template '${template.name}' is already chosen above this target; nesting it again would make the chain loop`
63
+ ];
64
+ }
65
+ if (template.fitsSlot !== undefined && target.container) {
66
+ const containerName = target.container.name;
67
+ const resolution = resolveScreenTemplates({
68
+ name: containerName,
69
+ slots: target.container.slots
70
+ }, [
71
+ template
72
+ ]);
73
+ const valid = resolution.unplaced.length === 0 && resolution.cycles.length === 0;
74
+ if (!valid || !resolution.placements.some((placement)=>placement.template === template.name && placement.container === containerName)) {
75
+ return [
76
+ `Template '${template.name}' cannot be placed in '${containerName}': its slot nesting does not resolve`
77
+ ];
78
+ }
79
+ }
80
+ return [];
81
+ }
82
+ /** Why a dialog template does not apply at a target; empty when it does. */ function validateDialogTemplateForTarget(template, target) {
83
+ return withDefaults(validateDialogTemplateApplicability(template, target.scope), template.name, TemplateCatalogKind.DialogTemplate, template.metadata, target);
84
+ }
85
+ function applicableIn(source, target, isBlueprint) {
86
+ const { manifest } = source;
87
+ const referenceTo = (name)=>isBlueprint ? {
88
+ source: TemplateReferenceSource.Blueprint,
89
+ id: name,
90
+ blueprint: manifest.name,
91
+ version: `^${manifest.version}`
92
+ } : {
93
+ source: TemplateReferenceSource.Own,
94
+ id: name
95
+ };
96
+ const applicable = [];
97
+ for (const layout of source.layouts ?? []){
98
+ if (validateLayoutForTarget(layout, target).length > 0) continue;
99
+ applicable.push({
100
+ package: manifest.name,
101
+ packageVersion: manifest.version,
102
+ kind: TemplateCatalogKind.Layout,
103
+ name: layout.name,
104
+ metadata: layout.metadata,
105
+ reference: referenceTo(layout.name)
106
+ });
107
+ }
108
+ for (const template of source.screenTemplates ?? []){
109
+ if (validateScreenTemplateForTarget(template, target).length > 0) continue;
110
+ applicable.push({
111
+ package: manifest.name,
112
+ packageVersion: manifest.version,
113
+ kind: TemplateCatalogKind.ScreenTemplate,
114
+ name: template.name,
115
+ displayName: template.displayName,
116
+ description: template.description,
117
+ metadata: template.metadata,
118
+ reference: referenceTo(template.name)
119
+ });
120
+ }
121
+ for (const template of source.dialogTemplates ?? []){
122
+ if (validateDialogTemplateForTarget(template, target).length > 0) continue;
123
+ applicable.push({
124
+ package: manifest.name,
125
+ packageVersion: manifest.version,
126
+ kind: TemplateCatalogKind.DialogTemplate,
127
+ name: template.name,
128
+ displayName: template.displayName,
129
+ description: template.description,
130
+ metadata: template.metadata,
131
+ reference: referenceTo(template.name)
132
+ });
133
+ }
134
+ return applicable;
135
+ }
136
+ function groupByCategory(templates) {
137
+ const categoryOf = (template)=>template.metadata?.category?.trim() ? template.metadata.category : undefined;
138
+ const categories = [
139
+ ...new Set(templates.map(categoryOf).filter((category)=>category !== undefined))
140
+ ];
141
+ const groups = categories.map((category)=>({
142
+ category,
143
+ templates: templates.filter((template)=>categoryOf(template) === category)
144
+ }));
145
+ const uncategorized = templates.filter((template)=>categoryOf(template) === undefined);
146
+ if (uncategorized.length > 0) groups.push({
147
+ templates: uncategorized
148
+ });
149
+ return groups;
150
+ }
151
+ function withDefaults(problems, name, kind, metadata, target) {
152
+ if (problems.length > 0 || !Object.values(TemplateScope).includes(target.scope)) return problems;
153
+ if (metadata?.scopes === undefined && !defaultScopes(kind, metadata).includes(target.scope)) {
154
+ return [
155
+ `Template '${name}' is not offered at scope '${target.scope}' unless it declares that scope`
156
+ ];
157
+ }
158
+ if (target.scope === TemplateScope.Slice && target.sliceKind !== undefined) {
159
+ const sliceKind = target.sliceKind;
160
+ if (!Object.values(SliceKind).includes(sliceKind)) return [
161
+ `Template '${name}' has unknown target slice kind '${sliceKind}'`
162
+ ];
163
+ if (sliceKind === SliceKind.Automation) return [
164
+ `Template '${name}' cannot be applied to an Automation slice, which has no presentation`
165
+ ];
166
+ const kinds = metadata?.sliceKinds ?? defaultSliceKinds(kind);
167
+ if (!kinds.includes(sliceKind)) return [
168
+ `Template '${name}' does not apply to slice kind '${sliceKind}'`
169
+ ];
170
+ }
171
+ return [];
172
+ }
173
+ function defaultScopes(kind, metadata) {
174
+ switch(kind){
175
+ case TemplateCatalogKind.Layout:
176
+ return [
177
+ TemplateScope.Application
178
+ ];
179
+ case TemplateCatalogKind.DialogTemplate:
180
+ return [
181
+ TemplateScope.Slice
182
+ ];
183
+ default:
184
+ return metadata?.sliceKinds === undefined ? screenScopes : [
185
+ TemplateScope.Slice
186
+ ];
187
+ }
188
+ }
189
+ function defaultSliceKinds(kind) {
190
+ return kind === TemplateCatalogKind.DialogTemplate ? dialogSliceKinds : screenSliceKinds;
191
+ }
192
+
193
+ export { applicableTemplates, validateDialogTemplateForTarget, validateLayoutForTarget, validateScreenTemplateForTarget };
194
+ //# sourceMappingURL=applicableTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applicableTemplates.js","sources":["../../../templates/applicableTemplates.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 { DialogTemplate, Layout, ScreenTemplate, TemplateMetadata, TemplateReference, TemplateReferenceSource, TemplateScope, SliceKind } from '@cratis/scene.model';\nimport { resolveScreenTemplates } from '../resolveScreenTemplates';\nimport { validateDialogTemplateApplicability, validateLayoutApplicability, validateScreenTemplateApplicability } from '../templateApplicability';\nimport { ApplicableBlueprint, ApplicableTemplate, ApplicableTemplateGroup, ApplicableTemplateSet } from './ApplicableTemplateSet';\nimport { TemplateCatalogKind } from './TemplateCatalogKind';\nimport { TemplateLibrary } from './TemplateLibrary';\nimport { TemplateSource } from './TemplateSource';\nimport { TemplateTarget } from './TemplateTarget';\n\nconst screenScopes = [TemplateScope.Module, TemplateScope.Feature, TemplateScope.Subfeature];\nconst dialogSliceKinds = [SliceKind.StateChange];\nconst screenSliceKinds = [SliceKind.StateChange, SliceKind.StateView];\n\n/**\n * Decides which templates a picker offers at a target, so no host re-implements the rules: own templates by\n * category, then each blueprint that has at least one applicable template. A blueprint with none is omitted.\n *\n * It composes the applicability validators (kind and scope, explicit scopes override, category never implies a\n * scope, slot fit against the container) and `resolveScreenTemplates` (a template must find exactly one home and\n * nothing may nest inside itself) with the defaults of each hierarchy level, used when a template declares no scopes:\n *\n * - Application - layouts.\n * - Module, Feature, Subfeature - screen templates, fitting a slot of the container.\n * - Slice, state change - dialog templates.\n * - Slice, state view - screen templates that declare the Slice scope or state view slice kinds.\n *\n * Declared `scopes` and `sliceKinds` always override the defaults. The C# engine (`ApplicableTemplates.Compute`)\n * returns identical results; both are asserted against `template-applicability-fixtures.json`.\n */\nexport function applicableTemplates(library: TemplateLibrary, target: TemplateTarget): ApplicableTemplateSet {\n const own = library.own ? groupByCategory(applicableIn(library.own, target, false)) : [];\n const blueprints: ApplicableBlueprint[] = [];\n for (const source of library.blueprints) {\n const categories = groupByCategory(applicableIn(source, target, true));\n if (categories.length > 0) {\n blueprints.push({ blueprint: source.manifest.name, version: source.manifest.version, displayName: source.manifest.displayName, categories });\n }\n }\n return { own, blueprints };\n}\n\n/** Why a layout does not apply at a target; empty when it does. */\nexport function validateLayoutForTarget(layout: Layout, target: TemplateTarget): string[] {\n return withDefaults(validateLayoutApplicability(layout, target.scope), layout.name, TemplateCatalogKind.Layout, layout.metadata, target);\n}\n\n/** Why a screen template does not apply at a target, including whether its slot nesting resolves; empty when it does. */\nexport function validateScreenTemplateForTarget(template: ScreenTemplate, target: TemplateTarget): string[] {\n const problems = withDefaults(\n validateScreenTemplateApplicability(template, target.scope, target.container),\n template.name,\n TemplateCatalogKind.ScreenTemplate,\n template.metadata,\n target,\n );\n if (problems.length > 0) return problems;\n\n if (target.chain?.includes(template.name)) {\n return [`Template '${template.name}' is already chosen above this target; nesting it again would make the chain loop`];\n }\n\n if (template.fitsSlot !== undefined && target.container) {\n const containerName = target.container.name;\n const resolution = resolveScreenTemplates({ name: containerName, slots: target.container.slots } as Layout, [template]);\n const valid = resolution.unplaced.length === 0 && resolution.cycles.length === 0;\n if (!valid || !resolution.placements.some(placement => placement.template === template.name && placement.container === containerName)) {\n return [`Template '${template.name}' cannot be placed in '${containerName}': its slot nesting does not resolve`];\n }\n }\n return [];\n}\n\n/** Why a dialog template does not apply at a target; empty when it does. */\nexport function validateDialogTemplateForTarget(template: DialogTemplate, target: TemplateTarget): string[] {\n return withDefaults(validateDialogTemplateApplicability(template, target.scope), template.name, TemplateCatalogKind.DialogTemplate, template.metadata, target);\n}\n\nfunction applicableIn(source: TemplateSource, target: TemplateTarget, isBlueprint: boolean): ApplicableTemplate[] {\n const { manifest } = source;\n const referenceTo = (name: string): TemplateReference => isBlueprint\n ? { source: TemplateReferenceSource.Blueprint, id: name, blueprint: manifest.name, version: `^${manifest.version}` }\n : { source: TemplateReferenceSource.Own, id: name };\n\n const applicable: ApplicableTemplate[] = [];\n for (const layout of source.layouts ?? []) {\n if (validateLayoutForTarget(layout, target).length > 0) continue;\n applicable.push({\n package: manifest.name, packageVersion: manifest.version, kind: TemplateCatalogKind.Layout, name: layout.name,\n metadata: layout.metadata, reference: referenceTo(layout.name),\n });\n }\n for (const template of source.screenTemplates ?? []) {\n if (validateScreenTemplateForTarget(template, target).length > 0) continue;\n applicable.push({\n package: manifest.name, packageVersion: manifest.version, kind: TemplateCatalogKind.ScreenTemplate, name: template.name,\n displayName: template.displayName, description: template.description, metadata: template.metadata, reference: referenceTo(template.name),\n });\n }\n for (const template of source.dialogTemplates ?? []) {\n if (validateDialogTemplateForTarget(template, target).length > 0) continue;\n applicable.push({\n package: manifest.name, packageVersion: manifest.version, kind: TemplateCatalogKind.DialogTemplate, name: template.name,\n displayName: template.displayName, description: template.description, metadata: template.metadata, reference: referenceTo(template.name),\n });\n }\n return applicable;\n}\n\nfunction groupByCategory(templates: ApplicableTemplate[]): ApplicableTemplateGroup[] {\n const categoryOf = (template: ApplicableTemplate) => template.metadata?.category?.trim() ? template.metadata.category : undefined;\n const categories = [...new Set(templates.map(categoryOf).filter((category): category is string => category !== undefined))];\n const groups: ApplicableTemplateGroup[] = categories.map(category => ({ category, templates: templates.filter(template => categoryOf(template) === category) }));\n const uncategorized = templates.filter(template => categoryOf(template) === undefined);\n if (uncategorized.length > 0) groups.push({ templates: uncategorized });\n return groups;\n}\n\nfunction withDefaults(problems: string[], name: string, kind: TemplateCatalogKind, metadata: TemplateMetadata | undefined, target: TemplateTarget): string[] {\n if (problems.length > 0 || !Object.values(TemplateScope).includes(target.scope)) return problems;\n\n if (metadata?.scopes === undefined && !defaultScopes(kind, metadata).includes(target.scope)) {\n return [`Template '${name}' is not offered at scope '${target.scope}' unless it declares that scope`];\n }\n\n if (target.scope === TemplateScope.Slice && target.sliceKind !== undefined) {\n const sliceKind = target.sliceKind;\n if (!Object.values(SliceKind).includes(sliceKind)) return [`Template '${name}' has unknown target slice kind '${sliceKind}'`];\n if (sliceKind === SliceKind.Automation) return [`Template '${name}' cannot be applied to an Automation slice, which has no presentation`];\n const kinds = metadata?.sliceKinds ?? defaultSliceKinds(kind);\n if (!kinds.includes(sliceKind)) return [`Template '${name}' does not apply to slice kind '${sliceKind}'`];\n }\n return [];\n}\n\nfunction defaultScopes(kind: TemplateCatalogKind, metadata: TemplateMetadata | undefined): TemplateScope[] {\n switch (kind) {\n case TemplateCatalogKind.Layout: return [TemplateScope.Application];\n case TemplateCatalogKind.DialogTemplate: return [TemplateScope.Slice];\n default: return metadata?.sliceKinds === undefined ? screenScopes : [TemplateScope.Slice];\n }\n}\n\nfunction defaultSliceKinds(kind: TemplateCatalogKind): SliceKind[] {\n return kind === TemplateCatalogKind.DialogTemplate ? dialogSliceKinds : screenSliceKinds;\n}\n"],"names":["screenScopes","TemplateScope","Module","Feature","Subfeature","dialogSliceKinds","SliceKind","StateChange","screenSliceKinds","StateView","applicableTemplates","library","target","own","groupByCategory","applicableIn","blueprints","source","categories","length","push","blueprint","manifest","name","version","displayName","validateLayoutForTarget","layout","withDefaults","validateLayoutApplicability","scope","TemplateCatalogKind","Layout","metadata","validateScreenTemplateForTarget","template","problems","validateScreenTemplateApplicability","container","ScreenTemplate","chain","includes","fitsSlot","undefined","containerName","resolution","resolveScreenTemplates","slots","valid","unplaced","cycles","placements","some","placement","validateDialogTemplateForTarget","validateDialogTemplateApplicability","DialogTemplate","isBlueprint","referenceTo","TemplateReferenceSource","Blueprint","id","Own","applicable","layouts","package","packageVersion","kind","reference","screenTemplates","description","dialogTemplates","templates","categoryOf","category","trim","Set","map","filter","groups","uncategorized","Object","values","scopes","defaultScopes","Slice","sliceKind","Automation","kinds","sliceKinds","defaultSliceKinds","Application"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"describeTemplateCatalog.d.ts","sourceRoot":"","sources":["../../../templates/describeTemplateCatalog.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAwChH"}
1
+ {"version":3,"file":"describeTemplateCatalog.d.ts","sourceRoot":"","sources":["../../../templates/describeTemplateCatalog.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAalD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,oBAAoB,EAAE,CA2ChH"}
@@ -1,6 +1,7 @@
1
+ import { PackageKind } from '@cratis/scene.model';
1
2
  import { isVersionSatisfiedBy } from '../packageVersionRange.js';
2
3
  import { TemplateCatalogKind } from './TemplateCatalogKind.js';
3
- import { validateTemplateMetadata } from './validateTemplateMetadata.js';
4
+ import { validateTemplateMetadata, validateTemplateCategory } from './validateTemplateMetadata.js';
4
5
 
5
6
  // Copyright (c) Cratis. All rights reserved.
6
7
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
@@ -10,7 +11,8 @@ import { validateTemplateMetadata } from './validateTemplateMetadata.js';
10
11
  *
11
12
  * A template is compatible when its metadata is complete and valid, the Scene version (when given) satisfies
12
13
  * its Scene range, and every package it requires is among the given packages at a satisfying version and is
13
- * either its own package or one that package depends on. Nothing is filtered out: a browser shows incompatible
14
+ * either its own package or one that package depends on. A blueprint template without a category is a problem; an
15
+ * own template without one is a warning. Nothing is filtered out: a browser shows incompatible
14
16
  * templates with their problems rather than hiding why they are unavailable.
15
17
  */ function describeTemplateCatalog(sources, sceneVersion) {
16
18
  const versions = new Map(sources.map((source)=>[
@@ -36,10 +38,11 @@ import { validateTemplateMetadata } from './validateTemplateMetadata.js';
36
38
  for (const { kind, template } of templates){
37
39
  const metadata = template.metadata;
38
40
  const describable = template;
39
- const problems = [
40
- ...validateTemplateMetadata(template.name, metadata),
41
- ...requirementProblems(template.name, metadata, source.manifest, versions, sceneVersion)
42
- ];
41
+ const problems = validateTemplateMetadata(template.name, metadata);
42
+ const warnings = [];
43
+ const missingCategory = validateTemplateCategory(template.name, metadata);
44
+ if (missingCategory) (source.manifest.kind === PackageKind.Blueprint ? problems : warnings).push(missingCategory);
45
+ problems.push(...requirementProblems(template.name, metadata, source.manifest, versions, sceneVersion));
43
46
  entries.push({
44
47
  package: source.manifest.name,
45
48
  packageVersion: source.manifest.version,
@@ -50,12 +53,14 @@ import { validateTemplateMetadata } from './validateTemplateMetadata.js';
50
53
  type: metadata?.type,
51
54
  category: metadata?.category,
52
55
  scopes: metadata?.scopes,
56
+ sliceKinds: metadata?.sliceKinds,
53
57
  compatibility: metadata?.compatibility,
54
58
  attribution: metadata?.attribution,
55
59
  license: metadata?.license,
56
60
  licenseUrl: metadata?.licenseUrl,
57
61
  compatible: problems.length === 0,
58
- problems
62
+ problems,
63
+ warnings
59
64
  });
60
65
  }
61
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"describeTemplateCatalog.js","sources":["../../../templates/describeTemplateCatalog.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 { ScenePackage, TemplateMetadata } from '@cratis/scene.model';\nimport { isVersionSatisfiedBy } from '../packageVersionRange';\nimport { TemplateCatalogEntry } from './TemplateCatalogEntry';\nimport { TemplateCatalogKind } from './TemplateCatalogKind';\nimport { TemplateSource } from './TemplateSource';\nimport { validateTemplateMetadata } from './validateTemplateMetadata';\n\n/**\n * Describes every template the given packages provide, in package then layout, screen template, dialog\n * template order, with its compatibility, attribution and license metadata and whether it can be used.\n *\n * A template is compatible when its metadata is complete and valid, the Scene version (when given) satisfies\n * its Scene range, and every package it requires is among the given packages at a satisfying version and is\n * either its own package or one that package depends on. Nothing is filtered out: a browser shows incompatible\n * templates with their problems rather than hiding why they are unavailable.\n */\nexport function describeTemplateCatalog(sources: TemplateSource[], sceneVersion?: string): TemplateCatalogEntry[] {\n const versions = new Map(sources.map(source => [source.manifest.name, source.manifest.version]));\n const entries: TemplateCatalogEntry[] = [];\n\n for (const source of sources) {\n const templates = [\n ...(source.layouts ?? []).map(template => ({ kind: TemplateCatalogKind.Layout, template })),\n ...(source.screenTemplates ?? []).map(template => ({ kind: TemplateCatalogKind.ScreenTemplate, template })),\n ...(source.dialogTemplates ?? []).map(template => ({ kind: TemplateCatalogKind.DialogTemplate, template })),\n ];\n\n for (const { kind, template } of templates) {\n const metadata = template.metadata;\n const describable = template as { displayName?: string; description?: string };\n const problems = [\n ...validateTemplateMetadata(template.name, metadata),\n ...requirementProblems(template.name, metadata, source.manifest, versions, sceneVersion),\n ];\n\n entries.push({\n package: source.manifest.name,\n packageVersion: source.manifest.version,\n kind,\n name: template.name,\n displayName: describable.displayName,\n description: describable.description,\n type: metadata?.type,\n category: metadata?.category,\n scopes: metadata?.scopes,\n compatibility: metadata?.compatibility,\n attribution: metadata?.attribution,\n license: metadata?.license,\n licenseUrl: metadata?.licenseUrl,\n compatible: problems.length === 0,\n problems,\n });\n }\n }\n\n return entries;\n}\n\nfunction requirementProblems(\n name: string,\n metadata: TemplateMetadata | undefined,\n owner: ScenePackage,\n versions: Map<string, string>,\n sceneVersion: string | undefined,\n): string[] {\n const problems: string[] = [];\n const compatibility = metadata?.compatibility;\n if (!compatibility) return problems;\n\n if (sceneVersion !== undefined && compatibility.scene?.trim() && !isVersionSatisfiedBy(sceneVersion, compatibility.scene)) {\n problems.push(`Template '${name}' requires Scene ${compatibility.scene} but the host runs ${sceneVersion}`);\n }\n\n for (const requirement of compatibility.packages ?? []) {\n if (!requirement.name?.trim()) continue;\n if (requirement.name !== owner.name && !owner.dependencies.some(dependency => dependency.name === requirement.name)) {\n problems.push(`Template '${name}' requires package '${requirement.name}', which its package '${owner.name}' does not depend on`);\n }\n\n const version = versions.get(requirement.name);\n if (version === undefined) {\n problems.push(`Template '${name}' requires package '${requirement.name}', which is not available`);\n } else if (!isVersionSatisfiedBy(version, requirement.versionRange)) {\n problems.push(`Template '${name}' requires package '${requirement.name}' ${requirement.versionRange} but version ${version} is available`);\n }\n }\n\n return problems;\n}\n"],"names":["describeTemplateCatalog","sources","sceneVersion","versions","Map","map","source","manifest","name","version","entries","templates","layouts","template","kind","TemplateCatalogKind","Layout","screenTemplates","ScreenTemplate","dialogTemplates","DialogTemplate","metadata","describable","problems","validateTemplateMetadata","requirementProblems","push","package","packageVersion","displayName","description","type","category","scopes","compatibility","attribution","license","licenseUrl","compatible","length","owner","undefined","scene","trim","isVersionSatisfiedBy","requirement","packages","dependencies","some","dependency","get","versionRange"],"mappings":"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"}
1
+ {"version":3,"file":"describeTemplateCatalog.js","sources":["../../../templates/describeTemplateCatalog.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, ScenePackage, TemplateMetadata } from '@cratis/scene.model';\nimport { isVersionSatisfiedBy } from '../packageVersionRange';\nimport { TemplateCatalogEntry } from './TemplateCatalogEntry';\nimport { TemplateCatalogKind } from './TemplateCatalogKind';\nimport { TemplateSource } from './TemplateSource';\nimport { validateTemplateCategory, validateTemplateMetadata } from './validateTemplateMetadata';\n\n/**\n * Describes every template the given packages provide, in package then layout, screen template, dialog\n * template order, with its compatibility, attribution and license metadata and whether it can be used.\n *\n * A template is compatible when its metadata is complete and valid, the Scene version (when given) satisfies\n * its Scene range, and every package it requires is among the given packages at a satisfying version and is\n * either its own package or one that package depends on. A blueprint template without a category is a problem; an\n * own template without one is a warning. Nothing is filtered out: a browser shows incompatible\n * templates with their problems rather than hiding why they are unavailable.\n */\nexport function describeTemplateCatalog(sources: TemplateSource[], sceneVersion?: string): TemplateCatalogEntry[] {\n const versions = new Map(sources.map(source => [source.manifest.name, source.manifest.version]));\n const entries: TemplateCatalogEntry[] = [];\n\n for (const source of sources) {\n const templates = [\n ...(source.layouts ?? []).map(template => ({ kind: TemplateCatalogKind.Layout, template })),\n ...(source.screenTemplates ?? []).map(template => ({ kind: TemplateCatalogKind.ScreenTemplate, template })),\n ...(source.dialogTemplates ?? []).map(template => ({ kind: TemplateCatalogKind.DialogTemplate, template })),\n ];\n\n for (const { kind, template } of templates) {\n const metadata = template.metadata;\n const describable = template as { displayName?: string; description?: string };\n const problems = validateTemplateMetadata(template.name, metadata);\n const warnings: string[] = [];\n const missingCategory = validateTemplateCategory(template.name, metadata);\n if (missingCategory) (source.manifest.kind === PackageKind.Blueprint ? problems : warnings).push(missingCategory);\n problems.push(...requirementProblems(template.name, metadata, source.manifest, versions, sceneVersion));\n\n entries.push({\n package: source.manifest.name,\n packageVersion: source.manifest.version,\n kind,\n name: template.name,\n displayName: describable.displayName,\n description: describable.description,\n type: metadata?.type,\n category: metadata?.category,\n scopes: metadata?.scopes,\n sliceKinds: metadata?.sliceKinds,\n compatibility: metadata?.compatibility,\n attribution: metadata?.attribution,\n license: metadata?.license,\n licenseUrl: metadata?.licenseUrl,\n compatible: problems.length === 0,\n problems,\n warnings,\n });\n }\n }\n\n return entries;\n}\n\nfunction requirementProblems(\n name: string,\n metadata: TemplateMetadata | undefined,\n owner: ScenePackage,\n versions: Map<string, string>,\n sceneVersion: string | undefined,\n): string[] {\n const problems: string[] = [];\n const compatibility = metadata?.compatibility;\n if (!compatibility) return problems;\n\n if (sceneVersion !== undefined && compatibility.scene?.trim() && !isVersionSatisfiedBy(sceneVersion, compatibility.scene)) {\n problems.push(`Template '${name}' requires Scene ${compatibility.scene} but the host runs ${sceneVersion}`);\n }\n\n for (const requirement of compatibility.packages ?? []) {\n if (!requirement.name?.trim()) continue;\n if (requirement.name !== owner.name && !owner.dependencies.some(dependency => dependency.name === requirement.name)) {\n problems.push(`Template '${name}' requires package '${requirement.name}', which its package '${owner.name}' does not depend on`);\n }\n\n const version = versions.get(requirement.name);\n if (version === undefined) {\n problems.push(`Template '${name}' requires package '${requirement.name}', which is not available`);\n } else if (!isVersionSatisfiedBy(version, requirement.versionRange)) {\n problems.push(`Template '${name}' requires package '${requirement.name}' ${requirement.versionRange} but version ${version} is available`);\n }\n }\n\n return problems;\n}\n"],"names":["describeTemplateCatalog","sources","sceneVersion","versions","Map","map","source","manifest","name","version","entries","templates","layouts","template","kind","TemplateCatalogKind","Layout","screenTemplates","ScreenTemplate","dialogTemplates","DialogTemplate","metadata","describable","problems","validateTemplateMetadata","warnings","missingCategory","validateTemplateCategory","PackageKind","Blueprint","push","requirementProblems","package","packageVersion","displayName","description","type","category","scopes","sliceKinds","compatibility","attribution","license","licenseUrl","compatible","length","owner","undefined","scene","trim","isVersionSatisfiedBy","requirement","packages","dependencies","some","dependency","get","versionRange"],"mappings":"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"}
@@ -1,7 +1,13 @@
1
+ export * from './ApplicableTemplateSet';
1
2
  export * from './TemplateCatalogEntry';
2
3
  export * from './TemplateCatalogKind';
4
+ export * from './TemplateLibrary';
5
+ export * from './TemplateReferenceResolution';
3
6
  export * from './TemplateSource';
7
+ export * from './TemplateTarget';
8
+ export * from './applicableTemplates';
4
9
  export * from './describeTemplateCatalog';
10
+ export * from './resolveTemplateReference';
5
11
  export * from './templateMetadataRules';
6
12
  export * from './validateTemplateMetadata';
7
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../templates/index.ts"],"names":[],"mappings":"AAGA,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../templates/index.ts"],"names":[],"mappings":"AAGA,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
@@ -1,7 +1,13 @@
1
+ export * from './ApplicableTemplateSet';
1
2
  export * from './TemplateCatalogEntry';
2
3
  export * from './TemplateCatalogKind';
4
+ export * from './TemplateLibrary';
5
+ export * from './TemplateReferenceResolution';
3
6
  export * from './TemplateSource';
7
+ export * from './TemplateTarget';
8
+ export * from './applicableTemplates';
4
9
  export * from './describeTemplateCatalog';
10
+ export * from './resolveTemplateReference';
5
11
  export * from './templateMetadataRules';
6
12
  export * from './validateTemplateMetadata';
7
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../templates/index.ts"],"names":[],"mappings":"AAGA,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../templates/index.ts"],"names":[],"mappings":"AAGA,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { TemplateReference } from '@cratis/scene.model';
2
+ import { TemplateLibrary } from './TemplateLibrary';
3
+ import { TemplateReferenceResolution } from './TemplateReferenceResolution';
4
+ export declare function resolveTemplateReference(reference: TemplateReference, library: TemplateLibrary): TemplateReferenceResolution;
5
+ //# sourceMappingURL=resolveTemplateReference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveTemplateReference.d.ts","sourceRoot":"","sources":["../../../templates/resolveTemplateReference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAA2B,MAAM,qBAAqB,CAAC;AAGjF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAA2B,MAAM,+BAA+B,CAAC;AAQrG,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,GAAG,2BAA2B,CAsC5H"}