@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.
- package/dist/cjs/index.js +52 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/sampleData/SampleRandom.js +77 -0
- package/dist/cjs/sampleData/SampleRandom.js.map +1 -0
- package/dist/cjs/sampleData/describeSampleDataCatalog.js +61 -0
- package/dist/cjs/sampleData/describeSampleDataCatalog.js.map +1 -0
- package/dist/cjs/sampleData/findSampleDataSet.js +18 -0
- package/dist/cjs/sampleData/findSampleDataSet.js.map +1 -0
- package/dist/cjs/sampleData/findSampleRowLiterals.js +73 -0
- package/dist/cjs/sampleData/findSampleRowLiterals.js.map +1 -0
- package/dist/cjs/sampleData/generateSample.js +188 -0
- package/dist/cjs/sampleData/generateSample.js.map +1 -0
- package/dist/cjs/sampleData/inferSampleFieldKind.js +176 -0
- package/dist/cjs/sampleData/inferSampleFieldKind.js.map +1 -0
- package/dist/cjs/sampleData/resolveSampleData.js +107 -0
- package/dist/cjs/sampleData/resolveSampleData.js.map +1 -0
- package/dist/cjs/sampleData/sampleDataRules.js +26 -0
- package/dist/cjs/sampleData/sampleDataRules.js.map +1 -0
- package/dist/cjs/sampleData/sampleLocales.js +359 -0
- package/dist/cjs/sampleData/sampleLocales.js.map +1 -0
- package/dist/cjs/sampleData/validateSampleDataPack.js +44 -0
- package/dist/cjs/sampleData/validateSampleDataPack.js.map +1 -0
- package/dist/cjs/sampleData/validateSampleDataPackages.js +71 -0
- package/dist/cjs/sampleData/validateSampleDataPackages.js.map +1 -0
- package/dist/cjs/sampleData/validateSampleDataSelection.js +52 -0
- package/dist/cjs/sampleData/validateSampleDataSelection.js.map +1 -0
- package/dist/cjs/templateApplicability.js.map +1 -1
- package/dist/cjs/templates/TemplateReferenceResolution.js +15 -0
- package/dist/cjs/templates/TemplateReferenceResolution.js.map +1 -0
- package/dist/cjs/templates/applicableTemplates.js +199 -0
- package/dist/cjs/templates/applicableTemplates.js.map +1 -0
- package/dist/cjs/templates/describeTemplateCatalog.js +11 -6
- package/dist/cjs/templates/describeTemplateCatalog.js.map +1 -1
- package/dist/cjs/templates/resolveTemplateReference.js +89 -0
- package/dist/cjs/templates/resolveTemplateReference.js.map +1 -0
- package/dist/cjs/templates/validateTemplateMetadata.js +9 -0
- package/dist/cjs/templates/validateTemplateMetadata.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +16 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/sampleData/SampleDataPackSource.d.ts +6 -0
- package/dist/esm/sampleData/SampleDataPackSource.d.ts.map +1 -0
- package/dist/esm/sampleData/SampleDataPackSource.js +2 -0
- package/dist/esm/sampleData/SampleDataPackSource.js.map +1 -0
- package/dist/esm/sampleData/SampleDataResolution.d.ts +29 -0
- package/dist/esm/sampleData/SampleDataResolution.d.ts.map +1 -0
- package/dist/esm/sampleData/SampleDataResolution.js +2 -0
- package/dist/esm/sampleData/SampleDataResolution.js.map +1 -0
- package/dist/esm/sampleData/SampleRandom.d.ts +14 -0
- package/dist/esm/sampleData/SampleRandom.d.ts.map +1 -0
- package/dist/esm/sampleData/SampleRandom.js +72 -0
- package/dist/esm/sampleData/SampleRandom.js.map +1 -0
- package/dist/esm/sampleData/describeSampleDataCatalog.d.ts +24 -0
- package/dist/esm/sampleData/describeSampleDataCatalog.d.ts.map +1 -0
- package/dist/esm/sampleData/describeSampleDataCatalog.js +57 -0
- package/dist/esm/sampleData/describeSampleDataCatalog.js.map +1 -0
- package/dist/esm/sampleData/findSampleDataSet.d.ts +3 -0
- package/dist/esm/sampleData/findSampleDataSet.d.ts.map +1 -0
- package/dist/esm/sampleData/findSampleDataSet.js +16 -0
- package/dist/esm/sampleData/findSampleDataSet.js.map +1 -0
- package/dist/esm/sampleData/findSampleRowLiterals.d.ts +11 -0
- package/dist/esm/sampleData/findSampleRowLiterals.d.ts.map +1 -0
- package/dist/esm/sampleData/findSampleRowLiterals.js +69 -0
- package/dist/esm/sampleData/findSampleRowLiterals.js.map +1 -0
- package/dist/esm/sampleData/generateSample.d.ts +6 -0
- package/dist/esm/sampleData/generateSample.d.ts.map +1 -0
- package/dist/esm/sampleData/generateSample.js +183 -0
- package/dist/esm/sampleData/generateSample.js.map +1 -0
- package/dist/esm/sampleData/index.d.ts +15 -0
- package/dist/esm/sampleData/index.d.ts.map +1 -0
- package/dist/esm/sampleData/index.js +15 -0
- package/dist/esm/sampleData/index.js.map +1 -0
- package/dist/esm/sampleData/inferSampleFieldKind.d.ts +3 -0
- package/dist/esm/sampleData/inferSampleFieldKind.d.ts.map +1 -0
- package/dist/esm/sampleData/inferSampleFieldKind.js +174 -0
- package/dist/esm/sampleData/inferSampleFieldKind.js.map +1 -0
- package/dist/esm/sampleData/resolveSampleData.d.ts +3 -0
- package/dist/esm/sampleData/resolveSampleData.d.ts.map +1 -0
- package/dist/esm/sampleData/resolveSampleData.js +105 -0
- package/dist/esm/sampleData/resolveSampleData.js.map +1 -0
- package/dist/esm/sampleData/sampleDataRules.d.ts +7 -0
- package/dist/esm/sampleData/sampleDataRules.d.ts.map +1 -0
- package/dist/esm/sampleData/sampleDataRules.js +19 -0
- package/dist/esm/sampleData/sampleDataRules.js.map +1 -0
- package/dist/esm/sampleData/sampleLocales.d.ts +13 -0
- package/dist/esm/sampleData/sampleLocales.d.ts.map +1 -0
- package/dist/esm/sampleData/sampleLocales.js +355 -0
- package/dist/esm/sampleData/sampleLocales.js.map +1 -0
- package/dist/esm/sampleData/validateSampleDataPack.d.ts +3 -0
- package/dist/esm/sampleData/validateSampleDataPack.d.ts.map +1 -0
- package/dist/esm/sampleData/validateSampleDataPack.js +42 -0
- package/dist/esm/sampleData/validateSampleDataPack.js.map +1 -0
- package/dist/esm/sampleData/validateSampleDataPackages.d.ts +3 -0
- package/dist/esm/sampleData/validateSampleDataPackages.d.ts.map +1 -0
- package/dist/esm/sampleData/validateSampleDataPackages.js +69 -0
- package/dist/esm/sampleData/validateSampleDataPackages.js.map +1 -0
- package/dist/esm/sampleData/validateSampleDataSelection.d.ts +3 -0
- package/dist/esm/sampleData/validateSampleDataSelection.d.ts.map +1 -0
- package/dist/esm/sampleData/validateSampleDataSelection.js +50 -0
- package/dist/esm/sampleData/validateSampleDataSelection.js.map +1 -0
- package/dist/esm/templateApplicability.d.ts +1 -2
- package/dist/esm/templateApplicability.d.ts.map +1 -1
- package/dist/esm/templateApplicability.js.map +1 -1
- package/dist/esm/templates/ApplicableTemplateSet.d.ts +27 -0
- package/dist/esm/templates/ApplicableTemplateSet.d.ts.map +1 -0
- package/dist/esm/templates/ApplicableTemplateSet.js +2 -0
- package/dist/esm/templates/ApplicableTemplateSet.js.map +1 -0
- package/dist/esm/templates/TemplateCatalogEntry.d.ts +3 -1
- package/dist/esm/templates/TemplateCatalogEntry.d.ts.map +1 -1
- package/dist/esm/templates/TemplateLibrary.d.ts +6 -0
- package/dist/esm/templates/TemplateLibrary.d.ts.map +1 -0
- package/dist/esm/templates/TemplateLibrary.js +2 -0
- package/dist/esm/templates/TemplateLibrary.js.map +1 -0
- package/dist/esm/templates/TemplateReferenceResolution.d.ts +16 -0
- package/dist/esm/templates/TemplateReferenceResolution.d.ts.map +1 -0
- package/dist/esm/templates/TemplateReferenceResolution.js +13 -0
- package/dist/esm/templates/TemplateReferenceResolution.js.map +1 -0
- package/dist/esm/templates/TemplateTarget.d.ts +9 -0
- package/dist/esm/templates/TemplateTarget.d.ts.map +1 -0
- package/dist/esm/templates/TemplateTarget.js +2 -0
- package/dist/esm/templates/TemplateTarget.js.map +1 -0
- package/dist/esm/templates/applicableTemplates.d.ts +9 -0
- package/dist/esm/templates/applicableTemplates.d.ts.map +1 -0
- package/dist/esm/templates/applicableTemplates.js +194 -0
- package/dist/esm/templates/applicableTemplates.js.map +1 -0
- package/dist/esm/templates/describeTemplateCatalog.d.ts.map +1 -1
- package/dist/esm/templates/describeTemplateCatalog.js +12 -7
- package/dist/esm/templates/describeTemplateCatalog.js.map +1 -1
- package/dist/esm/templates/index.d.ts +6 -0
- package/dist/esm/templates/index.d.ts.map +1 -1
- package/dist/esm/templates/index.js +6 -0
- package/dist/esm/templates/index.js.map +1 -1
- package/dist/esm/templates/resolveTemplateReference.d.ts +5 -0
- package/dist/esm/templates/resolveTemplateReference.d.ts.map +1 -0
- package/dist/esm/templates/resolveTemplateReference.js +87 -0
- package/dist/esm/templates/resolveTemplateReference.js.map +1 -0
- package/dist/esm/templates/validateTemplateMetadata.d.ts +2 -0
- package/dist/esm/templates/validateTemplateMetadata.d.ts.map +1 -1
- package/dist/esm/templates/validateTemplateMetadata.js +8 -1
- package/dist/esm/templates/validateTemplateMetadata.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/index.ts +1 -0
- package/package.json +3 -3
- package/sampleData/SampleDataPackSource.ts +13 -0
- package/sampleData/SampleDataResolution.ts +93 -0
- package/sampleData/SampleRandom.ts +85 -0
- package/sampleData/describeSampleDataCatalog.ts +108 -0
- package/sampleData/findSampleDataSet.ts +18 -0
- package/sampleData/findSampleRowLiterals.ts +86 -0
- package/sampleData/generateSample.ts +156 -0
- package/sampleData/index.ts +17 -0
- package/sampleData/inferSampleFieldKind.ts +64 -0
- package/sampleData/resolveSampleData.ts +96 -0
- package/sampleData/sampleDataRules.ts +30 -0
- package/sampleData/sampleLocales.ts +91 -0
- package/sampleData/validateSampleDataPack.ts +48 -0
- package/sampleData/validateSampleDataPackages.ts +79 -0
- package/sampleData/validateSampleDataSelection.ts +55 -0
- package/templateApplicability.ts +2 -1
- package/templates/ApplicableTemplateSet.ts +54 -0
- package/templates/TemplateCatalogEntry.ts +5 -1
- package/templates/TemplateLibrary.ts +16 -0
- package/templates/TemplateReferenceResolution.ts +35 -0
- package/templates/TemplateTarget.ts +23 -0
- package/templates/applicableTemplates.ts +148 -0
- package/templates/describeTemplateCatalog.ts +11 -7
- package/templates/index.ts +6 -0
- package/templates/resolveTemplateReference.ts +79 -0
- 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';\
|
|
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 @@
|
|
|
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;
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":";;;;;AAAA;AACA;AAWA,MAAMA,YAAAA,GAAe;AAACC,IAAAA,aAAAA,CAAcC,MAAM;AAAED,IAAAA,aAAAA,CAAcE,OAAO;AAAEF,IAAAA,aAAAA,CAAcG;AAAW,CAAA;AAC5F,MAAMC,gBAAAA,GAAmB;AAACC,IAAAA,SAAAA,CAAUC;AAAY,CAAA;AAChD,MAAMC,gBAAAA,GAAmB;AAACF,IAAAA,SAAAA,CAAUC,WAAW;AAAED,IAAAA,SAAAA,CAAUG;AAAU,CAAA;AAErE;;;;;;;;;;;;;;;AAeC,IACM,SAASC,mBAAAA,CAAoBC,OAAwB,EAAEC,MAAsB,EAAA;IAChF,MAAMC,GAAAA,GAAMF,OAAAA,CAAQE,GAAG,GAAGC,eAAAA,CAAgBC,YAAAA,CAAaJ,OAAAA,CAAQE,GAAG,EAAED,MAAAA,EAAQ,KAAA,CAAA,CAAA,GAAU,EAAE;AACxF,IAAA,MAAMI,aAAoC,EAAE;AAC5C,IAAA,KAAK,MAAMC,MAAAA,IAAUN,OAAAA,CAAQK,UAAU,CAAE;AACrC,QAAA,MAAME,UAAAA,GAAaJ,eAAAA,CAAgBC,YAAAA,CAAaE,MAAAA,EAAQL,MAAAA,EAAQ,IAAA,CAAA,CAAA;QAChE,IAAIM,UAAAA,CAAWC,MAAM,GAAG,CAAA,EAAG;AACvBH,YAAAA,UAAAA,CAAWI,IAAI,CAAC;gBAAEC,SAAAA,EAAWJ,MAAAA,CAAOK,QAAQ,CAACC,IAAI;gBAAEC,OAAAA,EAASP,MAAAA,CAAOK,QAAQ,CAACE,OAAO;gBAAEC,WAAAA,EAAaR,MAAAA,CAAOK,QAAQ,CAACG,WAAW;AAAEP,gBAAAA;AAAW,aAAA,CAAA;AAC9I,QAAA;AACJ,IAAA;IACA,OAAO;AAAEL,QAAAA,GAAAA;AAAKG,QAAAA;AAAW,KAAA;AAC7B;AAEA,oEACO,SAASU,uBAAAA,CAAwBC,MAAc,EAAEf,MAAsB,EAAA;AAC1E,IAAA,OAAOgB,YAAAA,CAAaC,2BAAAA,CAA4BF,MAAAA,EAAQf,MAAAA,CAAOkB,KAAK,CAAA,EAAGH,MAAAA,CAAOJ,IAAI,EAAEQ,mBAAAA,CAAoBC,MAAM,EAAEL,MAAAA,CAAOM,QAAQ,EAAErB,MAAAA,CAAAA;AACrI;AAEA,0HACO,SAASsB,+BAAAA,CAAgCC,QAAwB,EAAEvB,MAAsB,EAAA;AAC5F,IAAA,MAAMwB,WAAWR,YAAAA,CACbS,mCAAAA,CAAoCF,UAAUvB,MAAAA,CAAOkB,KAAK,EAAElB,MAAAA,CAAO0B,SAAS,CAAA,EAC5EH,QAAAA,CAASZ,IAAI,EACbQ,mBAAAA,CAAoBQ,cAAc,EAClCJ,QAAAA,CAASF,QAAQ,EACjBrB,MAAAA,CAAAA;AAEJ,IAAA,IAAIwB,QAAAA,CAASjB,MAAM,GAAG,CAAA,EAAG,OAAOiB,QAAAA;AAEhC,IAAA,IAAIxB,OAAO4B,KAAK,EAAEC,QAAAA,CAASN,QAAAA,CAASZ,IAAI,CAAA,EAAG;QACvC,OAAO;AAAC,YAAA,CAAC,UAAU,EAAEY,QAAAA,CAASZ,IAAI,CAAC,iFAAiF;AAAE,SAAA;AAC1H,IAAA;AAEA,IAAA,IAAIY,SAASO,QAAQ,KAAKC,SAAAA,IAAa/B,MAAAA,CAAO0B,SAAS,EAAE;AACrD,QAAA,MAAMM,aAAAA,GAAgBhC,MAAAA,CAAO0B,SAAS,CAACf,IAAI;AAC3C,QAAA,MAAMsB,aAAaC,sBAAAA,CAAuB;YAAEvB,IAAAA,EAAMqB,aAAAA;YAAeG,KAAAA,EAAOnC,MAAAA,CAAO0B,SAAS,CAACS;SAAM,EAAa;AAACZ,YAAAA;AAAS,SAAA,CAAA;QACtH,MAAMa,KAAAA,GAAQH,UAAAA,CAAWI,QAAQ,CAAC9B,MAAM,KAAK,CAAA,IAAK0B,UAAAA,CAAWK,MAAM,CAAC/B,MAAM,KAAK,CAAA;AAC/E,QAAA,IAAI,CAAC6B,KAAAA,IAAS,CAACH,WAAWM,UAAU,CAACC,IAAI,CAACC,CAAAA,YAAaA,SAAAA,CAAUlB,QAAQ,KAAKA,QAAAA,CAASZ,IAAI,IAAI8B,SAAAA,CAAUf,SAAS,KAAKM,aAAAA,CAAAA,EAAgB;YACnI,OAAO;gBAAC,CAAC,UAAU,EAAET,QAAAA,CAASZ,IAAI,CAAC,uBAAuB,EAAEqB,aAAAA,CAAc,oCAAoC;AAAE,aAAA;AACpH,QAAA;AACJ,IAAA;AACA,IAAA,OAAO,EAAE;AACb;AAEA,6EACO,SAASU,+BAAAA,CAAgCnB,QAAwB,EAAEvB,MAAsB,EAAA;AAC5F,IAAA,OAAOgB,YAAAA,CAAa2B,mCAAAA,CAAoCpB,QAAAA,EAAUvB,MAAAA,CAAOkB,KAAK,CAAA,EAAGK,QAAAA,CAASZ,IAAI,EAAEQ,mBAAAA,CAAoByB,cAAc,EAAErB,QAAAA,CAASF,QAAQ,EAAErB,MAAAA,CAAAA;AAC3J;AAEA,SAASG,YAAAA,CAAaE,MAAsB,EAAEL,MAAsB,EAAE6C,WAAoB,EAAA;IACtF,MAAM,EAAEnC,QAAQ,EAAE,GAAGL,MAAAA;IACrB,MAAMyC,WAAAA,GAAc,CAACnC,IAAAA,GAAoCkC,WAAAA,GACnD;AAAExC,YAAAA,MAAAA,EAAQ0C,wBAAwBC,SAAS;YAAEC,EAAAA,EAAItC,IAAAA;AAAMF,YAAAA,SAAAA,EAAWC,SAASC,IAAI;AAAEC,YAAAA,OAAAA,EAAS,CAAC,CAAC,EAAEF,QAAAA,CAASE,OAAO,CAAA;SAAG,GACjH;AAAEP,YAAAA,MAAAA,EAAQ0C,wBAAwBG,GAAG;YAAED,EAAAA,EAAItC;AAAK,SAAA;AAEtD,IAAA,MAAMwC,aAAmC,EAAE;AAC3C,IAAA,KAAK,MAAMpC,MAAAA,IAAUV,MAAAA,CAAO+C,OAAO,IAAI,EAAE,CAAE;AACvC,QAAA,IAAItC,uBAAAA,CAAwBC,MAAAA,EAAQf,MAAAA,CAAAA,CAAQO,MAAM,GAAG,CAAA,EAAG;AACxD4C,QAAAA,UAAAA,CAAW3C,IAAI,CAAC;AACZ6C,YAAAA,OAAAA,EAAS3C,SAASC,IAAI;AAAE2C,YAAAA,cAAAA,EAAgB5C,SAASE,OAAO;AAAE2C,YAAAA,IAAAA,EAAMpC,oBAAoBC,MAAM;AAAET,YAAAA,IAAAA,EAAMI,OAAOJ,IAAI;AAC7GU,YAAAA,QAAAA,EAAUN,OAAOM,QAAQ;YAAEmC,SAAAA,EAAWV,WAAAA,CAAY/B,OAAOJ,IAAI;AACjE,SAAA,CAAA;AACJ,IAAA;AACA,IAAA,KAAK,MAAMY,QAAAA,IAAYlB,MAAAA,CAAOoD,eAAe,IAAI,EAAE,CAAE;AACjD,QAAA,IAAInC,+BAAAA,CAAgCC,QAAAA,EAAUvB,MAAAA,CAAAA,CAAQO,MAAM,GAAG,CAAA,EAAG;AAClE4C,QAAAA,UAAAA,CAAW3C,IAAI,CAAC;AACZ6C,YAAAA,OAAAA,EAAS3C,SAASC,IAAI;AAAE2C,YAAAA,cAAAA,EAAgB5C,SAASE,OAAO;AAAE2C,YAAAA,IAAAA,EAAMpC,oBAAoBQ,cAAc;AAAEhB,YAAAA,IAAAA,EAAMY,SAASZ,IAAI;AACvHE,YAAAA,WAAAA,EAAaU,SAASV,WAAW;AAAE6C,YAAAA,WAAAA,EAAanC,SAASmC,WAAW;AAAErC,YAAAA,QAAAA,EAAUE,SAASF,QAAQ;YAAEmC,SAAAA,EAAWV,WAAAA,CAAYvB,SAASZ,IAAI;AAC3I,SAAA,CAAA;AACJ,IAAA;AACA,IAAA,KAAK,MAAMY,QAAAA,IAAYlB,MAAAA,CAAOsD,eAAe,IAAI,EAAE,CAAE;AACjD,QAAA,IAAIjB,+BAAAA,CAAgCnB,QAAAA,EAAUvB,MAAAA,CAAAA,CAAQO,MAAM,GAAG,CAAA,EAAG;AAClE4C,QAAAA,UAAAA,CAAW3C,IAAI,CAAC;AACZ6C,YAAAA,OAAAA,EAAS3C,SAASC,IAAI;AAAE2C,YAAAA,cAAAA,EAAgB5C,SAASE,OAAO;AAAE2C,YAAAA,IAAAA,EAAMpC,oBAAoByB,cAAc;AAAEjC,YAAAA,IAAAA,EAAMY,SAASZ,IAAI;AACvHE,YAAAA,WAAAA,EAAaU,SAASV,WAAW;AAAE6C,YAAAA,WAAAA,EAAanC,SAASmC,WAAW;AAAErC,YAAAA,QAAAA,EAAUE,SAASF,QAAQ;YAAEmC,SAAAA,EAAWV,WAAAA,CAAYvB,SAASZ,IAAI;AAC3I,SAAA,CAAA;AACJ,IAAA;IACA,OAAOwC,UAAAA;AACX;AAEA,SAASjD,gBAAgB0D,SAA+B,EAAA;AACpD,IAAA,MAAMC,UAAAA,GAAa,CAACtC,QAAAA,GAAiCA,QAAAA,CAASF,QAAQ,EAAEyC,QAAAA,EAAUC,IAAAA,EAAAA,GAASxC,QAAAA,CAASF,QAAQ,CAACyC,QAAQ,GAAG/B,SAAAA;AACxH,IAAA,MAAMzB,UAAAA,GAAa;WAAI,IAAI0D,GAAAA,CAAIJ,UAAUK,GAAG,CAACJ,YAAYK,MAAM,CAAC,CAACJ,QAAAA,GAAiCA,QAAAA,KAAa/B,SAAAA,CAAAA;AAAY,KAAA;AAC3H,IAAA,MAAMoC,SAAoC7D,UAAAA,CAAW2D,GAAG,CAACH,CAAAA,YAAa;AAAEA,YAAAA,QAAAA;AAAUF,YAAAA,SAAAA,EAAWA,UAAUM,MAAM,CAAC3C,CAAAA,QAAAA,GAAYsC,WAAWtC,QAAAA,CAAAA,KAAcuC,QAAAA;SAAU,CAAA,CAAA;AAC7J,IAAA,MAAMM,gBAAgBR,SAAAA,CAAUM,MAAM,CAAC3C,CAAAA,QAAAA,GAAYsC,WAAWtC,QAAAA,CAAAA,KAAcQ,SAAAA,CAAAA;AAC5E,IAAA,IAAIqC,cAAc7D,MAAM,GAAG,CAAA,EAAG4D,MAAAA,CAAO3D,IAAI,CAAC;QAAEoD,SAAAA,EAAWQ;AAAc,KAAA,CAAA;IACrE,OAAOD,MAAAA;AACX;AAEA,SAASnD,YAAAA,CAAaQ,QAAkB,EAAEb,IAAY,EAAE4C,IAAyB,EAAElC,QAAsC,EAAErB,MAAsB,EAAA;AAC7I,IAAA,IAAIwB,QAAAA,CAASjB,MAAM,GAAG,CAAA,IAAK,CAAC8D,MAAAA,CAAOC,MAAM,CAACjF,aAAAA,CAAAA,CAAewC,QAAQ,CAAC7B,MAAAA,CAAOkB,KAAK,GAAG,OAAOM,QAAAA;IAExF,IAAIH,QAAAA,EAAUkD,MAAAA,KAAWxC,SAAAA,IAAa,CAACyC,aAAAA,CAAcjB,IAAAA,EAAMlC,QAAAA,CAAAA,CAAUQ,QAAQ,CAAC7B,MAAAA,CAAOkB,KAAK,CAAA,EAAG;QACzF,OAAO;YAAC,CAAC,UAAU,EAAEP,IAAAA,CAAK,2BAA2B,EAAEX,MAAAA,CAAOkB,KAAK,CAAC,+BAA+B;AAAE,SAAA;AACzG,IAAA;IAEA,IAAIlB,MAAAA,CAAOkB,KAAK,KAAK7B,aAAAA,CAAcoF,KAAK,IAAIzE,MAAAA,CAAO0E,SAAS,KAAK3C,SAAAA,EAAW;QACxE,MAAM2C,SAAAA,GAAY1E,OAAO0E,SAAS;QAClC,IAAI,CAACL,OAAOC,MAAM,CAAC5E,WAAWmC,QAAQ,CAAC6C,YAAY,OAAO;AAAC,YAAA,CAAC,UAAU,EAAE/D,IAAAA,CAAK,iCAAiC,EAAE+D,SAAAA,CAAU,CAAC;AAAE,SAAA;AAC7H,QAAA,IAAIA,SAAAA,KAAchF,SAAAA,CAAUiF,UAAU,EAAE,OAAO;AAAC,YAAA,CAAC,UAAU,EAAEhE,IAAAA,CAAK,qEAAqE;AAAE,SAAA;QACzI,MAAMiE,KAAAA,GAAQvD,QAAAA,EAAUwD,UAAAA,IAAcC,iBAAAA,CAAkBvB,IAAAA,CAAAA;AACxD,QAAA,IAAI,CAACqB,KAAAA,CAAM/C,QAAQ,CAAC6C,YAAY,OAAO;AAAC,YAAA,CAAC,UAAU,EAAE/D,IAAAA,CAAK,gCAAgC,EAAE+D,SAAAA,CAAU,CAAC;AAAE,SAAA;AAC7G,IAAA;AACA,IAAA,OAAO,EAAE;AACb;AAEA,SAASF,aAAAA,CAAcjB,IAAyB,EAAElC,QAAsC,EAAA;IACpF,OAAQkC,IAAAA;AACJ,QAAA,KAAKpC,oBAAoBC,MAAM;YAAE,OAAO;AAAC/B,gBAAAA,aAAAA,CAAc0F;AAAY,aAAA;AACnE,QAAA,KAAK5D,oBAAoByB,cAAc;YAAE,OAAO;AAACvD,gBAAAA,aAAAA,CAAcoF;AAAM,aAAA;AACrE,QAAA;YAAS,OAAOpD,QAAAA,EAAUwD,UAAAA,KAAe9C,SAAAA,GAAY3C,YAAAA,GAAe;AAACC,gBAAAA,aAAAA,CAAcoF;AAAM,aAAA;AAC7F;AACJ;AAEA,SAASK,kBAAkBvB,IAAyB,EAAA;AAChD,IAAA,OAAOA,IAAAA,KAASpC,mBAAAA,CAAoByB,cAAc,GAAGnD,gBAAAA,GAAmBG,gBAAAA;AAC5E;;"}
|
|
@@ -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;
|
|
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.
|
|
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
|
-
|
|
41
|
-
|
|
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 = [
|
|
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"}
|