@cratis/scene.react 4.11.0 → 4.13.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/core/coreComponents.js +1 -0
- package/dist/cjs/core/coreComponents.js.map +1 -1
- package/dist/cjs/core/coreDescriptors.js +1 -0
- package/dist/cjs/core/coreDescriptors.js.map +1 -1
- package/dist/cjs/index.js +17 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/navigation/diagnoseRenderedNavigation.js +17 -0
- package/dist/cjs/navigation/diagnoseRenderedNavigation.js.map +1 -0
- package/dist/cjs/navigation/identityRoute.js +19 -0
- package/dist/cjs/navigation/identityRoute.js.map +1 -0
- package/dist/cjs/navigation/navigationRouteKey.js +19 -0
- package/dist/cjs/navigation/navigationRouteKey.js.map +1 -0
- package/dist/cjs/navigation/resolveDestination.js +2 -10
- package/dist/cjs/navigation/resolveDestination.js.map +1 -1
- package/dist/cjs/packages/DesignTimeContractVersion.js +15 -0
- package/dist/cjs/packages/DesignTimeContractVersion.js.map +1 -0
- package/dist/cjs/packages/DesignTimeExtensionPoint.js +26 -0
- package/dist/cjs/packages/DesignTimeExtensionPoint.js.map +1 -0
- package/dist/cjs/packages/PackageHostConfiguration.js +1 -0
- package/dist/cjs/packages/PackageHostConfiguration.js.map +1 -1
- package/dist/cjs/packages/loadDesignTimeContributions.js +80 -0
- package/dist/cjs/packages/loadDesignTimeContributions.js.map +1 -0
- package/dist/cjs/packages/resolveDesignTimeHost.js +114 -0
- package/dist/cjs/packages/resolveDesignTimeHost.js.map +1 -0
- package/dist/cjs/packages/runDesignTimeAction.js +50 -0
- package/dist/cjs/packages/runDesignTimeAction.js.map +1 -0
- package/dist/esm/core/coreComponents.js +1 -0
- package/dist/esm/core/coreComponents.js.map +1 -1
- package/dist/esm/core/coreDescriptors.js +1 -0
- package/dist/esm/core/coreDescriptors.js.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/navigation/diagnoseRenderedNavigation.d.ts +3 -0
- package/dist/esm/navigation/diagnoseRenderedNavigation.d.ts.map +1 -0
- package/dist/esm/navigation/diagnoseRenderedNavigation.js +15 -0
- package/dist/esm/navigation/diagnoseRenderedNavigation.js.map +1 -0
- package/dist/esm/navigation/identityRoute.d.ts +3 -0
- package/dist/esm/navigation/identityRoute.d.ts.map +1 -0
- package/dist/esm/navigation/identityRoute.js +17 -0
- package/dist/esm/navigation/identityRoute.js.map +1 -0
- package/dist/esm/navigation/index.d.ts +3 -0
- package/dist/esm/navigation/index.d.ts.map +1 -1
- package/dist/esm/navigation/index.js +3 -0
- package/dist/esm/navigation/index.js.map +1 -1
- package/dist/esm/navigation/navigationRouteKey.d.ts +3 -0
- package/dist/esm/navigation/navigationRouteKey.d.ts.map +1 -0
- package/dist/esm/navigation/navigationRouteKey.js +17 -0
- package/dist/esm/navigation/navigationRouteKey.js.map +1 -0
- package/dist/esm/navigation/resolveDestination.d.ts.map +1 -1
- package/dist/esm/navigation/resolveDestination.js +1 -9
- package/dist/esm/navigation/resolveDestination.js.map +1 -1
- package/dist/esm/packages/DesignTimeActionOutcome.d.ts +7 -0
- package/dist/esm/packages/DesignTimeActionOutcome.d.ts.map +1 -0
- package/dist/esm/packages/DesignTimeActionOutcome.js +2 -0
- package/dist/esm/packages/DesignTimeActionOutcome.js.map +1 -0
- package/dist/esm/packages/DesignTimeActionState.d.ts +9 -0
- package/dist/esm/packages/DesignTimeActionState.d.ts.map +1 -0
- package/dist/esm/packages/DesignTimeActionState.js +2 -0
- package/dist/esm/packages/DesignTimeActionState.js.map +1 -0
- package/dist/esm/packages/DesignTimeContractVersion.d.ts +2 -0
- package/dist/esm/packages/DesignTimeContractVersion.d.ts.map +1 -0
- package/dist/esm/packages/DesignTimeContractVersion.js +13 -0
- package/dist/esm/packages/DesignTimeContractVersion.js.map +1 -0
- package/dist/esm/packages/DesignTimeExtensionPoint.d.ts +9 -0
- package/dist/esm/packages/DesignTimeExtensionPoint.d.ts.map +1 -0
- package/dist/esm/packages/DesignTimeExtensionPoint.js +23 -0
- package/dist/esm/packages/DesignTimeExtensionPoint.js.map +1 -0
- package/dist/esm/packages/DesignTimeResolution.d.ts +7 -0
- package/dist/esm/packages/DesignTimeResolution.d.ts.map +1 -0
- package/dist/esm/packages/DesignTimeResolution.js +2 -0
- package/dist/esm/packages/DesignTimeResolution.js.map +1 -0
- package/dist/esm/packages/PackageHostConfiguration.d.ts +3 -0
- package/dist/esm/packages/PackageHostConfiguration.d.ts.map +1 -1
- package/dist/esm/packages/PackageHostConfiguration.js +2 -1
- package/dist/esm/packages/PackageHostConfiguration.js.map +1 -1
- package/dist/esm/packages/index.d.ts +8 -0
- package/dist/esm/packages/index.d.ts.map +1 -1
- package/dist/esm/packages/index.js +8 -0
- package/dist/esm/packages/index.js.map +1 -1
- package/dist/esm/packages/loadDesignTimeContributions.d.ts +11 -0
- package/dist/esm/packages/loadDesignTimeContributions.d.ts.map +1 -0
- package/dist/esm/packages/loadDesignTimeContributions.js +78 -0
- package/dist/esm/packages/loadDesignTimeContributions.js.map +1 -0
- package/dist/esm/packages/resolveDesignTimeHost.d.ts +26 -0
- package/dist/esm/packages/resolveDesignTimeHost.d.ts.map +1 -0
- package/dist/esm/packages/resolveDesignTimeHost.js +112 -0
- package/dist/esm/packages/resolveDesignTimeHost.js.map +1 -0
- package/dist/esm/packages/runDesignTimeAction.d.ts +4 -0
- package/dist/esm/packages/runDesignTimeAction.d.ts.map +1 -0
- package/dist/esm/packages/runDesignTimeAction.js +48 -0
- package/dist/esm/packages/runDesignTimeAction.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/navigation/diagnoseRenderedNavigation.ts +14 -0
- package/navigation/identityRoute.ts +14 -0
- package/navigation/index.ts +3 -0
- package/navigation/navigationRouteKey.ts +22 -0
- package/navigation/resolveDestination.ts +1 -6
- package/package.json +5 -5
- package/packages/DesignTimeActionOutcome.ts +18 -0
- package/packages/DesignTimeActionState.ts +21 -0
- package/packages/DesignTimeContractVersion.ts +12 -0
- package/packages/DesignTimeExtensionPoint.ts +23 -0
- package/packages/DesignTimeResolution.ts +23 -0
- package/packages/PackageHostConfiguration.ts +11 -1
- package/packages/index.ts +8 -0
- package/packages/loadDesignTimeContributions.ts +98 -0
- package/packages/resolveDesignTimeHost.ts +133 -0
- package/packages/runDesignTimeAction.ts +36 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
/**
|
|
4
|
+
* The versioned design-time extension points a package can fill. The values are the keys shared by
|
|
5
|
+
* `PackageDesignTimeMetadata` (what a manifest declares) and `DesignTimeBundle` (what a bundle provides).
|
|
6
|
+
*/ var DesignTimeExtensionPoint = /*#__PURE__*/ function(DesignTimeExtensionPoint) {
|
|
7
|
+
DesignTimeExtensionPoint["Preview"] = "previews";
|
|
8
|
+
DesignTimeExtensionPoint["Designer"] = "designers";
|
|
9
|
+
DesignTimeExtensionPoint["PropertyEditor"] = "propertyEditors";
|
|
10
|
+
DesignTimeExtensionPoint["PropertyDisplay"] = "propertyDisplays";
|
|
11
|
+
DesignTimeExtensionPoint["Action"] = "actions";
|
|
12
|
+
return DesignTimeExtensionPoint;
|
|
13
|
+
}({});
|
|
14
|
+
/** How a diagnostic names an extension point. */ const designTimeExtensionPointLabels = {
|
|
15
|
+
["previews"]: 'preview',
|
|
16
|
+
["designers"]: 'designer',
|
|
17
|
+
["propertyEditors"]: 'property editor',
|
|
18
|
+
["propertyDisplays"]: 'property display',
|
|
19
|
+
["actions"]: 'action'
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { DesignTimeExtensionPoint, designTimeExtensionPointLabels };
|
|
23
|
+
//# sourceMappingURL=DesignTimeExtensionPoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignTimeExtensionPoint.js","sources":["../../../packages/DesignTimeExtensionPoint.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\n/**\n * The versioned design-time extension points a package can fill. The values are the keys shared by\n * `PackageDesignTimeMetadata` (what a manifest declares) and `DesignTimeBundle` (what a bundle provides).\n */\nexport enum DesignTimeExtensionPoint {\n Preview = 'previews',\n Designer = 'designers',\n PropertyEditor = 'propertyEditors',\n PropertyDisplay = 'propertyDisplays',\n Action = 'actions',\n}\n\n/** How a diagnostic names an extension point. */\nexport const designTimeExtensionPointLabels: Record<DesignTimeExtensionPoint, string> = {\n [DesignTimeExtensionPoint.Preview]: 'preview',\n [DesignTimeExtensionPoint.Designer]: 'designer',\n [DesignTimeExtensionPoint.PropertyEditor]: 'property editor',\n [DesignTimeExtensionPoint.PropertyDisplay]: 'property display',\n [DesignTimeExtensionPoint.Action]: 'action',\n};\n"],"names":["DesignTimeExtensionPoint","designTimeExtensionPointLabels"],"mappings":"AAAA;AACA;AAEA;;;IAIO,IAAKA,wBAAAA,iBAAAA,SAAAA,wBAAAA,EAAAA;;;;;;AAAAA,IAAAA,OAAAA,wBAAAA;AAMX,CAAA,CAAA,EAAA;AAED,kDACO,MAAMC,8BAAAA,GAA2E;AACpF,IAAA,CAAA,UAAA,GAAoC,SAAA;AACpC,IAAA,CAAA,WAAA,GAAqC,UAAA;AACrC,IAAA,CAAA,iBAAA,GAA2C,iBAAA;AAC3C,IAAA,CAAA,kBAAA,GAA4C,kBAAA;AAC5C,IAAA,CAAA,SAAA,GAAmC;AACvC;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignTimeResolution.d.ts","sourceRoot":"","sources":["../../../packages/DesignTimeResolution.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,oBAAoB,CAAC,CAAC;IAEnC,YAAY,CAAC,EAAE,CAAC,CAAC;IAGjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignTimeResolution.js","sourceRoot":"","sources":["../../../packages/DesignTimeResolution.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DialogTemplate, Layout, ScreenTemplate, Theme, UiProfile } from '@cratis/scene.model';
|
|
2
|
+
import { TemplateCatalogEntry } from '@cratis/scene.engine';
|
|
2
3
|
import { IconAdapterRegistry } from '../icons/IconAdapterRegistry';
|
|
3
4
|
import { ScenePackageBundle, mergePackageRegistries } from './ScenePackageBundle';
|
|
4
5
|
export interface PackageHostPolicy {
|
|
@@ -10,6 +11,7 @@ export interface PackageHostConfiguration {
|
|
|
10
11
|
bundles: ScenePackageBundle[];
|
|
11
12
|
profile: UiProfile;
|
|
12
13
|
policy: PackageHostPolicy;
|
|
14
|
+
sceneVersion?: string;
|
|
13
15
|
}
|
|
14
16
|
export interface ResolvedPackageHost {
|
|
15
17
|
bundles: ScenePackageBundle[];
|
|
@@ -18,6 +20,7 @@ export interface ResolvedPackageHost {
|
|
|
18
20
|
screenTemplates: ScreenTemplate[];
|
|
19
21
|
dialogTemplates: DialogTemplate[];
|
|
20
22
|
themes: Theme[];
|
|
23
|
+
templates: TemplateCatalogEntry[];
|
|
21
24
|
icons: IconAdapterRegistry;
|
|
22
25
|
assets: string[];
|
|
23
26
|
fonts: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageHostConfiguration.d.ts","sourceRoot":"","sources":["../../../packages/PackageHostConfiguration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"PackageHostConfiguration.d.ts","sourceRoot":"","sources":["../../../packages/PackageHostConfiguration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAuD,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAAE,mBAAmB,EAA6B,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AAEzG,MAAM,WAAW,iBAAiB;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAG5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACrC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAG1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,CAAC;IAMhB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAKD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,wBAAwB,GAAG,mBAAmB,CAsE/F"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolvePackageDependencies } from '@cratis/scene.engine';
|
|
1
|
+
import { resolvePackageDependencies, describeTemplateCatalog } from '@cratis/scene.engine';
|
|
2
2
|
import { createIconAdapterRegistry } from '../icons/IconAdapterRegistry.js';
|
|
3
3
|
import { validatePackageBundle, mergePackageRegistries } from './ScenePackageBundle.js';
|
|
4
4
|
|
|
@@ -62,6 +62,7 @@ import { validatePackageBundle, mergePackageRegistries } from './ScenePackageBun
|
|
|
62
62
|
screenTemplates: approved.flatMap((bundle)=>bundle.screenTemplates ?? []),
|
|
63
63
|
dialogTemplates: approved.flatMap((bundle)=>bundle.dialogTemplates ?? []),
|
|
64
64
|
themes: approved.flatMap((bundle)=>bundle.themes ?? []),
|
|
65
|
+
templates: describeTemplateCatalog(approved, configuration.sceneVersion),
|
|
65
66
|
icons: createIconAdapterRegistry(approved.map((bundle)=>bundle.iconLibrary?.adapter).filter((adapter)=>adapter !== undefined)),
|
|
66
67
|
assets: approvedAssets,
|
|
67
68
|
fonts: approvedAssets.filter(isFontAsset),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackageHostConfiguration.js","sources":["../../../packages/PackageHostConfiguration.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, Theme, UiProfile } from '@cratis/scene.model';\nimport { resolvePackageDependencies } from '@cratis/scene.engine';\nimport { IconAdapterRegistry, createIconAdapterRegistry } from '../icons/IconAdapterRegistry';\nimport { ScenePackageBundle, mergePackageRegistries, validatePackageBundle } from './ScenePackageBundle';\n\nexport interface PackageHostPolicy {\n allowExecutableImports: boolean;\n allowNetworkAssets: boolean;\n\n /** Whether this host is resolving optional design-time bundles in addition to runtime contributions. */\n loadDesignTime?: boolean;\n}\n\nexport interface PackageHostConfiguration {\n bundles: ScenePackageBundle[];\n profile: UiProfile;\n policy: PackageHostPolicy;\n}\n\nexport interface ResolvedPackageHost {\n bundles: ScenePackageBundle[];\n components: ReturnType<typeof mergePackageRegistries>;\n layouts: Layout[];\n screenTemplates: ScreenTemplate[];\n dialogTemplates: DialogTemplate[];\n themes: Theme[];\n icons: IconAdapterRegistry;\n assets: string[];\n fonts: string[];\n blocked: boolean;\n diagnostics: string[];\n}\n\n/**\n * Resolves the approved package set a standalone or embedded React host uses.\n */\nexport function resolvePackageHost(configuration: PackageHostConfiguration): ResolvedPackageHost {\n const diagnostics: string[] = [];\n const names = new Map<string, number>();\n for (const bundle of configuration.bundles) {\n names.set(bundle.manifest.name, (names.get(bundle.manifest.name) ?? 0) + 1);\n }\n\n for (const [name, count] of names) {\n if (count > 1) diagnostics.push(`Package '${name}' is approved more than once; duplicate bundles are ambiguous`);\n }\n\n const byName = new Map(configuration.bundles.map(bundle => [bundle.manifest.name, bundle]));\n const selection = resolvePackageDependencies(configuration.profile.packages, configuration.bundles.map(bundle => bundle.manifest));\n for (const missing of selection.missing) diagnostics.push(`Package '${missing.package}' depends on missing package '${missing.dependsOn}'`);\n for (const conflict of selection.versionConflicts) {\n diagnostics.push(`Package '${conflict.package}' requires '${conflict.dependsOn}' ${conflict.requiredRange} but approved version is ${conflict.actualVersion}`);\n }\n for (const cycle of selection.cycles) diagnostics.push(`Package dependency cycle: ${cycle.join(' -> ')}`);\n\n const bundles: ScenePackageBundle[] = [];\n const runtimeSingletons = new Map<string, string>();\n const assets: string[] = [];\n\n for (const packageName of selection.packages) {\n const bundle = byName.get(packageName);\n if (!bundle) {\n diagnostics.push(`UI profile asks for '${packageName}' but the host did not approve a bundle for it`);\n continue;\n }\n\n diagnostics.push(...validatePackageBundle(bundle).map(problem => `${packageName}: ${problem}`));\n if (configuration.policy.loadDesignTime === true && !configuration.policy.allowExecutableImports && bundle.designTime) {\n diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);\n }\n\n const packageAssets = bundle.manifest.assets ?? [];\n if (!configuration.policy.allowNetworkAssets && packageAssets.some(asset => /^https?:\\/\\//.test(asset))) {\n diagnostics.push(`Package '${packageName}' declares network assets, but host policy forbids them`);\n }\n assets.push(...packageAssets);\n\n for (const dependency of bundle.manifest.runtimeSingletons ?? []) {\n const owner = runtimeSingletons.get(dependency);\n if (owner && owner !== packageName) {\n diagnostics.push(`Runtime singleton '${dependency}' is provided by both '${owner}' and '${packageName}'`);\n }\n runtimeSingletons.set(dependency, packageName);\n }\n\n bundles.push(bundle);\n }\n\n const blocked = diagnostics.length > 0;\n const approved = blocked ? [] : bundles;\n const approvedAssets = blocked ? [] : assets;\n\n return {\n bundles: approved,\n components: mergePackageRegistries(approved),\n layouts: approved.flatMap(bundle => bundle.layouts ?? []),\n screenTemplates: approved.flatMap(bundle => bundle.screenTemplates ?? []),\n dialogTemplates: approved.flatMap(bundle => bundle.dialogTemplates ?? []),\n themes: approved.flatMap(bundle => bundle.themes ?? []),\n icons: createIconAdapterRegistry(approved.map(bundle => bundle.iconLibrary?.adapter).filter(adapter => adapter !== undefined)),\n assets: approvedAssets,\n fonts: approvedAssets.filter(isFontAsset),\n blocked,\n diagnostics,\n };\n}\n\nfunction isFontAsset(asset: string): boolean {\n return /\\.(woff2?|otf|ttf)(\\?|$)/.test(asset) || asset.includes('/fonts/');\n}\n"],"names":["resolvePackageHost","configuration","diagnostics","names","Map","bundle","bundles","set","manifest","name","get","count","push","byName","map","selection","resolvePackageDependencies","profile","packages","missing","package","dependsOn","conflict","versionConflicts","requiredRange","actualVersion","cycle","cycles","join","runtimeSingletons","assets","packageName","validatePackageBundle","problem","policy","loadDesignTime","allowExecutableImports","designTime","packageAssets","allowNetworkAssets","some","asset","test","dependency","owner","blocked","length","approved","approvedAssets","components","mergePackageRegistries","layouts","flatMap","screenTemplates","dialogTemplates","themes","icons","createIconAdapterRegistry","iconLibrary","adapter","filter","undefined","fonts","isFontAsset","includes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PackageHostConfiguration.js","sources":["../../../packages/PackageHostConfiguration.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, Theme, UiProfile } from '@cratis/scene.model';\nimport { TemplateCatalogEntry, describeTemplateCatalog, resolvePackageDependencies } from '@cratis/scene.engine';\nimport { IconAdapterRegistry, createIconAdapterRegistry } from '../icons/IconAdapterRegistry';\nimport { ScenePackageBundle, mergePackageRegistries, validatePackageBundle } from './ScenePackageBundle';\n\nexport interface PackageHostPolicy {\n allowExecutableImports: boolean;\n allowNetworkAssets: boolean;\n\n /** Whether this host is resolving optional design-time bundles in addition to runtime contributions. */\n loadDesignTime?: boolean;\n}\n\nexport interface PackageHostConfiguration {\n bundles: ScenePackageBundle[];\n profile: UiProfile;\n policy: PackageHostPolicy;\n\n /** The Scene version the host runs, checked against each template's compatibility range when given. */\n sceneVersion?: string;\n}\n\nexport interface ResolvedPackageHost {\n bundles: ScenePackageBundle[];\n components: ReturnType<typeof mergePackageRegistries>;\n layouts: Layout[];\n screenTemplates: ScreenTemplate[];\n dialogTemplates: DialogTemplate[];\n themes: Theme[];\n\n /**\n * Every template the approved packages provide, with compatibility, attribution and license metadata and\n * whether it can be used with this package set. Template browsers read this rather than the raw lists.\n */\n templates: TemplateCatalogEntry[];\n icons: IconAdapterRegistry;\n assets: string[];\n fonts: string[];\n blocked: boolean;\n diagnostics: string[];\n}\n\n/**\n * Resolves the approved package set a standalone or embedded React host uses.\n */\nexport function resolvePackageHost(configuration: PackageHostConfiguration): ResolvedPackageHost {\n const diagnostics: string[] = [];\n const names = new Map<string, number>();\n for (const bundle of configuration.bundles) {\n names.set(bundle.manifest.name, (names.get(bundle.manifest.name) ?? 0) + 1);\n }\n\n for (const [name, count] of names) {\n if (count > 1) diagnostics.push(`Package '${name}' is approved more than once; duplicate bundles are ambiguous`);\n }\n\n const byName = new Map(configuration.bundles.map(bundle => [bundle.manifest.name, bundle]));\n const selection = resolvePackageDependencies(configuration.profile.packages, configuration.bundles.map(bundle => bundle.manifest));\n for (const missing of selection.missing) diagnostics.push(`Package '${missing.package}' depends on missing package '${missing.dependsOn}'`);\n for (const conflict of selection.versionConflicts) {\n diagnostics.push(`Package '${conflict.package}' requires '${conflict.dependsOn}' ${conflict.requiredRange} but approved version is ${conflict.actualVersion}`);\n }\n for (const cycle of selection.cycles) diagnostics.push(`Package dependency cycle: ${cycle.join(' -> ')}`);\n\n const bundles: ScenePackageBundle[] = [];\n const runtimeSingletons = new Map<string, string>();\n const assets: string[] = [];\n\n for (const packageName of selection.packages) {\n const bundle = byName.get(packageName);\n if (!bundle) {\n diagnostics.push(`UI profile asks for '${packageName}' but the host did not approve a bundle for it`);\n continue;\n }\n\n diagnostics.push(...validatePackageBundle(bundle).map(problem => `${packageName}: ${problem}`));\n if (configuration.policy.loadDesignTime === true && !configuration.policy.allowExecutableImports && bundle.designTime) {\n diagnostics.push(`Package '${packageName}' provides executable design-time contributions, but host policy forbids them`);\n }\n\n const packageAssets = bundle.manifest.assets ?? [];\n if (!configuration.policy.allowNetworkAssets && packageAssets.some(asset => /^https?:\\/\\//.test(asset))) {\n diagnostics.push(`Package '${packageName}' declares network assets, but host policy forbids them`);\n }\n assets.push(...packageAssets);\n\n for (const dependency of bundle.manifest.runtimeSingletons ?? []) {\n const owner = runtimeSingletons.get(dependency);\n if (owner && owner !== packageName) {\n diagnostics.push(`Runtime singleton '${dependency}' is provided by both '${owner}' and '${packageName}'`);\n }\n runtimeSingletons.set(dependency, packageName);\n }\n\n bundles.push(bundle);\n }\n\n const blocked = diagnostics.length > 0;\n const approved = blocked ? [] : bundles;\n const approvedAssets = blocked ? [] : assets;\n\n return {\n bundles: approved,\n components: mergePackageRegistries(approved),\n layouts: approved.flatMap(bundle => bundle.layouts ?? []),\n screenTemplates: approved.flatMap(bundle => bundle.screenTemplates ?? []),\n dialogTemplates: approved.flatMap(bundle => bundle.dialogTemplates ?? []),\n themes: approved.flatMap(bundle => bundle.themes ?? []),\n templates: describeTemplateCatalog(approved, configuration.sceneVersion),\n icons: createIconAdapterRegistry(approved.map(bundle => bundle.iconLibrary?.adapter).filter(adapter => adapter !== undefined)),\n assets: approvedAssets,\n fonts: approvedAssets.filter(isFontAsset),\n blocked,\n diagnostics,\n };\n}\n\nfunction isFontAsset(asset: string): boolean {\n return /\\.(woff2?|otf|ttf)(\\?|$)/.test(asset) || asset.includes('/fonts/');\n}\n"],"names":["resolvePackageHost","configuration","diagnostics","names","Map","bundle","bundles","set","manifest","name","get","count","push","byName","map","selection","resolvePackageDependencies","profile","packages","missing","package","dependsOn","conflict","versionConflicts","requiredRange","actualVersion","cycle","cycles","join","runtimeSingletons","assets","packageName","validatePackageBundle","problem","policy","loadDesignTime","allowExecutableImports","designTime","packageAssets","allowNetworkAssets","some","asset","test","dependency","owner","blocked","length","approved","approvedAssets","components","mergePackageRegistries","layouts","flatMap","screenTemplates","dialogTemplates","themes","templates","describeTemplateCatalog","sceneVersion","icons","createIconAdapterRegistry","iconLibrary","adapter","filter","undefined","fonts","isFontAsset","includes"],"mappings":"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"}
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
export * from './DesignTimeAction';
|
|
2
|
+
export * from './DesignTimeActionOutcome';
|
|
3
|
+
export * from './DesignTimeActionState';
|
|
2
4
|
export * from './DesignTimeBundle';
|
|
3
5
|
export * from './DesignTimeComponentProps';
|
|
4
6
|
export * from './DesignTimeContext';
|
|
7
|
+
export * from './DesignTimeContractVersion';
|
|
8
|
+
export * from './DesignTimeExtensionPoint';
|
|
5
9
|
export * from './DesignTimePropertyDisplayProps';
|
|
6
10
|
export * from './DesignTimePropertyEditorProps';
|
|
7
11
|
export * from './DesignTimeProvider';
|
|
12
|
+
export * from './DesignTimeResolution';
|
|
8
13
|
export * from '../navigation';
|
|
9
14
|
export * from './EmbeddedPackageHost';
|
|
15
|
+
export * from './loadDesignTimeContributions';
|
|
10
16
|
export * from './PackageHostAssets';
|
|
11
17
|
export * from './PackageHostConfiguration';
|
|
12
18
|
export * from './PackageHostRenderMode';
|
|
13
19
|
export * from './PackageHostView';
|
|
20
|
+
export * from './resolveDesignTimeHost';
|
|
21
|
+
export * from './runDesignTimeAction';
|
|
14
22
|
export * from './ScenePackageBundle';
|
|
15
23
|
export * from './StandalonePackageHost';
|
|
16
24
|
export * from './WebViewPackageHost';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
export * from './DesignTimeAction';
|
|
2
|
+
export * from './DesignTimeActionOutcome';
|
|
3
|
+
export * from './DesignTimeActionState';
|
|
2
4
|
export * from './DesignTimeBundle';
|
|
3
5
|
export * from './DesignTimeComponentProps';
|
|
4
6
|
export * from './DesignTimeContext';
|
|
7
|
+
export * from './DesignTimeContractVersion';
|
|
8
|
+
export * from './DesignTimeExtensionPoint';
|
|
5
9
|
export * from './DesignTimePropertyDisplayProps';
|
|
6
10
|
export * from './DesignTimePropertyEditorProps';
|
|
7
11
|
export * from './DesignTimeProvider';
|
|
12
|
+
export * from './DesignTimeResolution';
|
|
8
13
|
export * from '../navigation';
|
|
9
14
|
export * from './EmbeddedPackageHost';
|
|
15
|
+
export * from './loadDesignTimeContributions';
|
|
10
16
|
export * from './PackageHostAssets';
|
|
11
17
|
export * from './PackageHostConfiguration';
|
|
12
18
|
export * from './PackageHostRenderMode';
|
|
13
19
|
export * from './PackageHostView';
|
|
20
|
+
export * from './resolveDesignTimeHost';
|
|
21
|
+
export * from './runDesignTimeAction';
|
|
14
22
|
export * from './ScenePackageBundle';
|
|
15
23
|
export * from './StandalonePackageHost';
|
|
16
24
|
export * from './WebViewPackageHost';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DesignTimeExtensionPoint } from './DesignTimeExtensionPoint';
|
|
2
|
+
import { ScenePackageBundle } from './ScenePackageBundle';
|
|
3
|
+
export interface LoadedDesignTimeContributions {
|
|
4
|
+
contributions: Partial<Record<DesignTimeExtensionPoint, Record<string, unknown>>>;
|
|
5
|
+
unavailableReason?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function loadDesignTimeContributions(bundles: ScenePackageBundle[], loadDesignTime: boolean): {
|
|
8
|
+
packages: Map<string, LoadedDesignTimeContributions>;
|
|
9
|
+
diagnostics: string[];
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=loadDesignTimeContributions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadDesignTimeContributions.d.ts","sourceRoot":"","sources":["../../../packages/loadDesignTimeContributions.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAkC,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,WAAW,6BAA6B;IAC1C,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAClF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AASD,wBAAgB,2BAA2B,CACvC,OAAO,EAAE,kBAAkB,EAAE,EAC7B,cAAc,EAAE,OAAO,GACxB;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,CAsCjF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { DesignTimeContractVersion } from './DesignTimeContractVersion.js';
|
|
2
|
+
import { DesignTimeExtensionPoint, designTimeExtensionPointLabels } from './DesignTimeExtensionPoint.js';
|
|
3
|
+
|
|
4
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
5
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
6
|
+
/**
|
|
7
|
+
* Loads the design-time contributions of approved bundles, checking each against the contract version this
|
|
8
|
+
* host implements and against what its manifest declares. Nothing is partially trusted: a package with an
|
|
9
|
+
* incompatible or unreadable contract version, or contributions its manifest does not declare at all,
|
|
10
|
+
* contributes nothing; a single undeclared contribution is left out; a declared one the bundle lacks is
|
|
11
|
+
* reported and falls back.
|
|
12
|
+
*/ function loadDesignTimeContributions(bundles, loadDesignTime) {
|
|
13
|
+
const packages = new Map();
|
|
14
|
+
const diagnostics = [];
|
|
15
|
+
const hostMajor = DesignTimeContractVersion.split('.')[0];
|
|
16
|
+
for (const { manifest, designTime } of bundles){
|
|
17
|
+
const declared = manifest.designTime;
|
|
18
|
+
const unavailable = (reason)=>{
|
|
19
|
+
diagnostics.push(reason);
|
|
20
|
+
packages.set(manifest.name, {
|
|
21
|
+
contributions: {},
|
|
22
|
+
unavailableReason: reason
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
if (!declared && !designTime) continue;
|
|
26
|
+
if (!loadDesignTime) {
|
|
27
|
+
packages.set(manifest.name, {
|
|
28
|
+
contributions: {},
|
|
29
|
+
unavailableReason: `This host does not load design-time contributions, so package '${manifest.name}' uses generic editors`
|
|
30
|
+
});
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (!declared) {
|
|
34
|
+
unavailable(`Package '${manifest.name}' provides design-time contributions its manifest does not declare; none are loaded`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const version = declared.contractVersion ?? '1.0';
|
|
38
|
+
if (!/^\d+\.\d+$/.test(version)) {
|
|
39
|
+
unavailable(`Package '${manifest.name}' declares design-time contract version '${version}', which is not a major.minor version; none of its contributions are loaded`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (version.split('.')[0] !== hostMajor) {
|
|
43
|
+
unavailable(`Package '${manifest.name}' targets design-time contract ${version}, but this host implements ${DesignTimeContractVersion}; none of its contributions are loaded`);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
packages.set(manifest.name, {
|
|
47
|
+
contributions: declaredContributions(manifest.name, declared, designTime, diagnostics)
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
packages,
|
|
52
|
+
diagnostics
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function declaredContributions(packageName, declared, provided, diagnostics) {
|
|
56
|
+
const contributions = {};
|
|
57
|
+
for (const point of Object.values(DesignTimeExtensionPoint)){
|
|
58
|
+
const label = designTimeExtensionPointLabels[point];
|
|
59
|
+
const names = new Set(declared[point] ?? []);
|
|
60
|
+
const available = provided?.[point] ?? {};
|
|
61
|
+
const loaded = {};
|
|
62
|
+
for (const name of names){
|
|
63
|
+
if (name in available) {
|
|
64
|
+
loaded[name] = available[name];
|
|
65
|
+
} else {
|
|
66
|
+
diagnostics.push(`Package '${packageName}' declares the ${label} '${name}', but its design-time bundle does not provide it`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const name of Object.keys(available).filter((name)=>!names.has(name))){
|
|
70
|
+
diagnostics.push(`Package '${packageName}' provides the ${label} '${name}', which its manifest does not declare; it is not loaded`);
|
|
71
|
+
}
|
|
72
|
+
contributions[point] = loaded;
|
|
73
|
+
}
|
|
74
|
+
return contributions;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { loadDesignTimeContributions };
|
|
78
|
+
//# sourceMappingURL=loadDesignTimeContributions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadDesignTimeContributions.js","sources":["../../../packages/loadDesignTimeContributions.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 { DesignTimeBundle } from './DesignTimeBundle';\nimport { DesignTimeContractVersion } from './DesignTimeContractVersion';\nimport { DesignTimeExtensionPoint, designTimeExtensionPointLabels } from './DesignTimeExtensionPoint';\nimport { ScenePackageBundle } from './ScenePackageBundle';\n\n/**\n * A package's design-time contributions as a host loaded them: only what the manifest declares, or nothing\n * with the reason when the package cannot be loaded at all.\n */\nexport interface LoadedDesignTimeContributions {\n contributions: Partial<Record<DesignTimeExtensionPoint, Record<string, unknown>>>;\n unavailableReason?: string;\n}\n\n/**\n * Loads the design-time contributions of approved bundles, checking each against the contract version this\n * host implements and against what its manifest declares. Nothing is partially trusted: a package with an\n * incompatible or unreadable contract version, or contributions its manifest does not declare at all,\n * contributes nothing; a single undeclared contribution is left out; a declared one the bundle lacks is\n * reported and falls back.\n */\nexport function loadDesignTimeContributions(\n bundles: ScenePackageBundle[],\n loadDesignTime: boolean,\n): { packages: Map<string, LoadedDesignTimeContributions>; diagnostics: string[] } {\n const packages = new Map<string, LoadedDesignTimeContributions>();\n const diagnostics: string[] = [];\n const hostMajor = DesignTimeContractVersion.split('.')[0];\n\n for (const { manifest, designTime } of bundles) {\n const declared = manifest.designTime;\n const unavailable = (reason: string) => {\n diagnostics.push(reason);\n packages.set(manifest.name, { contributions: {}, unavailableReason: reason });\n };\n\n if (!declared && !designTime) continue;\n if (!loadDesignTime) {\n packages.set(manifest.name, { contributions: {}, unavailableReason: `This host does not load design-time contributions, so package '${manifest.name}' uses generic editors` });\n continue;\n }\n\n if (!declared) {\n unavailable(`Package '${manifest.name}' provides design-time contributions its manifest does not declare; none are loaded`);\n continue;\n }\n\n const version = declared.contractVersion ?? '1.0';\n if (!/^\\d+\\.\\d+$/.test(version)) {\n unavailable(`Package '${manifest.name}' declares design-time contract version '${version}', which is not a major.minor version; none of its contributions are loaded`);\n continue;\n }\n\n if (version.split('.')[0] !== hostMajor) {\n unavailable(`Package '${manifest.name}' targets design-time contract ${version}, but this host implements ${DesignTimeContractVersion}; none of its contributions are loaded`);\n continue;\n }\n\n packages.set(manifest.name, { contributions: declaredContributions(manifest.name, declared, designTime, diagnostics) });\n }\n\n return { packages, diagnostics };\n}\n\nfunction declaredContributions(\n packageName: string,\n declared: Record<DesignTimeExtensionPoint, string[]>,\n provided: DesignTimeBundle | undefined,\n diagnostics: string[],\n): LoadedDesignTimeContributions['contributions'] {\n const contributions: LoadedDesignTimeContributions['contributions'] = {};\n\n for (const point of Object.values(DesignTimeExtensionPoint)) {\n const label = designTimeExtensionPointLabels[point];\n const names = new Set(declared[point] ?? []);\n const available = (provided?.[point] ?? {}) as Record<string, unknown>;\n const loaded: Record<string, unknown> = {};\n\n for (const name of names) {\n if (name in available) {\n loaded[name] = available[name];\n } else {\n diagnostics.push(`Package '${packageName}' declares the ${label} '${name}', but its design-time bundle does not provide it`);\n }\n }\n\n for (const name of Object.keys(available).filter(name => !names.has(name))) {\n diagnostics.push(`Package '${packageName}' provides the ${label} '${name}', which its manifest does not declare; it is not loaded`);\n }\n\n contributions[point] = loaded;\n }\n\n return contributions;\n}\n"],"names":["loadDesignTimeContributions","bundles","loadDesignTime","packages","Map","diagnostics","hostMajor","DesignTimeContractVersion","split","manifest","designTime","declared","unavailable","reason","push","set","name","contributions","unavailableReason","version","contractVersion","test","declaredContributions","packageName","provided","point","Object","values","DesignTimeExtensionPoint","label","designTimeExtensionPointLabels","names","Set","available","loaded","keys","filter","has"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
import { ComponentDescriptor, PropertyDescriptor } from '@cratis/scene.model';
|
|
3
|
+
import { DesignTimeActionContext } from './DesignTimeAction';
|
|
4
|
+
import { DesignTimeActionOutcome } from './DesignTimeActionOutcome';
|
|
5
|
+
import { DesignTimeActionState } from './DesignTimeActionState';
|
|
6
|
+
import { DesignTimeComponentProps } from './DesignTimeComponentProps';
|
|
7
|
+
import { DesignTimePropertyDisplayProps } from './DesignTimePropertyDisplayProps';
|
|
8
|
+
import { DesignTimePropertyEditorProps } from './DesignTimePropertyEditorProps';
|
|
9
|
+
import { DesignTimeResolution } from './DesignTimeResolution';
|
|
10
|
+
import { PackageHostConfiguration, ResolvedPackageHost } from './PackageHostConfiguration';
|
|
11
|
+
export interface DesignTimeHost {
|
|
12
|
+
host: ResolvedPackageHost;
|
|
13
|
+
diagnostics: string[];
|
|
14
|
+
preview(descriptor: ComponentDescriptor): DesignTimeResolution<ComponentType<DesignTimeComponentProps>>;
|
|
15
|
+
designer(descriptor: ComponentDescriptor): DesignTimeResolution<ComponentType<DesignTimeComponentProps>>;
|
|
16
|
+
propertyEditor(descriptor: ComponentDescriptor, property: PropertyDescriptor): DesignTimeResolution<ComponentType<DesignTimePropertyEditorProps>>;
|
|
17
|
+
propertyDisplay(descriptor: ComponentDescriptor): DesignTimeResolution<ComponentType<DesignTimePropertyDisplayProps>>;
|
|
18
|
+
actions(descriptor: ComponentDescriptor, context: DesignTimeActionContext): DesignTimeActionState[];
|
|
19
|
+
runAction(descriptor: ComponentDescriptor, actionId: string, context: DesignTimeActionContext): DesignTimeActionOutcome;
|
|
20
|
+
diagnoseDescriptors(): string[];
|
|
21
|
+
}
|
|
22
|
+
export interface DesignTimeHostOptions {
|
|
23
|
+
hostEditorKinds?: string[];
|
|
24
|
+
}
|
|
25
|
+
export declare function resolveDesignTimeHost(configuration: PackageHostConfiguration, options?: DesignTimeHostOptions): DesignTimeHost;
|
|
26
|
+
//# sourceMappingURL=resolveDesignTimeHost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveDesignTimeHost.d.ts","sourceRoot":"","sources":["../../../packages/resolveDesignTimeHost.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAoB,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAsB,MAAM,4BAA4B,CAAC;AAO/G,MAAM,WAAW,cAAc;IAE3B,IAAI,EAAE,mBAAmB,CAAC;IAG1B,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,OAAO,CAAC,UAAU,EAAE,mBAAmB,GAAG,oBAAoB,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACxG,QAAQ,CAAC,UAAU,EAAE,mBAAmB,GAAG,oBAAoB,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACzG,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,kBAAkB,GAAG,oBAAoB,CAAC,aAAa,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAClJ,eAAe,CAAC,UAAU,EAAE,mBAAmB,GAAG,oBAAoB,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAGtH,OAAO,CAAC,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,uBAAuB,GAAG,qBAAqB,EAAE,CAAC;IAGpG,SAAS,CAAC,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,uBAAuB,CAAC;IAGxH,mBAAmB,IAAI,MAAM,EAAE,CAAC;CACnC;AAGD,MAAM,WAAW,qBAAqB;IAElC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAMD,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,wBAAwB,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CA0ElI"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { DesignTimeExtensionPoint, designTimeExtensionPointLabels } from './DesignTimeExtensionPoint.js';
|
|
2
|
+
import { loadDesignTimeContributions } from './loadDesignTimeContributions.js';
|
|
3
|
+
import { resolvePackageHost } from './PackageHostConfiguration.js';
|
|
4
|
+
import { runDesignTimeAction } from './runDesignTimeAction.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
|
+
/**
|
|
9
|
+
* Resolves a package host and the design-time contributions of its approved packages. Design-time code is
|
|
10
|
+
* only loaded when the host policy sets `loadDesignTime`; a runtime host gets generic fallbacks everywhere.
|
|
11
|
+
*/ function resolveDesignTimeHost(configuration, options = {}) {
|
|
12
|
+
const host = resolvePackageHost(configuration);
|
|
13
|
+
const loaded = loadDesignTimeContributions(host.bundles, configuration.policy.loadDesignTime === true);
|
|
14
|
+
const hostEditorKinds = new Set(options.hostEditorKinds ?? []);
|
|
15
|
+
const approved = new Set(host.bundles.map((bundle)=>bundle.manifest.name));
|
|
16
|
+
const lookup = (descriptor, point, kind)=>{
|
|
17
|
+
if (!kind) return {};
|
|
18
|
+
const label = designTimeExtensionPointLabels[point];
|
|
19
|
+
const separator = kind.indexOf(':');
|
|
20
|
+
const owner = separator > 0 ? kind.substring(0, separator) : ownerOf(descriptor);
|
|
21
|
+
const name = separator > 0 ? kind.substring(separator + 1) : kind;
|
|
22
|
+
const outcome = point === DesignTimeExtensionPoint.Action ? 'the host shows it disabled' : `the host uses its generic ${label}`;
|
|
23
|
+
const fallback = (reason)=>({
|
|
24
|
+
diagnostic: `'${descriptor.component}' asks for the ${label} '${kind}', ${reason}; ${outcome}`
|
|
25
|
+
});
|
|
26
|
+
if (!approved.has(owner)) return fallback(`but package '${owner}' is not approved by this host`);
|
|
27
|
+
const contributions = loaded.packages.get(owner);
|
|
28
|
+
if (contributions?.unavailableReason) return fallback(`but design-time contributions from package '${owner}' are not loaded`);
|
|
29
|
+
const contribution = contributions?.contributions[point]?.[name];
|
|
30
|
+
if (contribution !== undefined) return {
|
|
31
|
+
contribution,
|
|
32
|
+
package: owner
|
|
33
|
+
};
|
|
34
|
+
if (point === DesignTimeExtensionPoint.PropertyEditor && separator < 0 && hostEditorKinds.has(kind)) return {
|
|
35
|
+
hostKind: kind
|
|
36
|
+
};
|
|
37
|
+
return fallback(`which package '${owner}' does not provide`);
|
|
38
|
+
};
|
|
39
|
+
const actionOf = (descriptor, actionId)=>loaded.packages.get(ownerOf(descriptor))?.contributions[DesignTimeExtensionPoint.Action]?.[actionId];
|
|
40
|
+
const actions = (descriptor, context)=>(descriptor.actions ?? []).map((action)=>{
|
|
41
|
+
const state = {
|
|
42
|
+
descriptor: action,
|
|
43
|
+
package: ownerOf(descriptor)
|
|
44
|
+
};
|
|
45
|
+
const handler = actionOf(descriptor, action.id);
|
|
46
|
+
if (!handler) {
|
|
47
|
+
const resolution = lookup(descriptor, DesignTimeExtensionPoint.Action, action.id);
|
|
48
|
+
return {
|
|
49
|
+
...state,
|
|
50
|
+
visible: true,
|
|
51
|
+
enabled: false,
|
|
52
|
+
diagnostic: resolution.diagnostic
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
return {
|
|
57
|
+
...state,
|
|
58
|
+
visible: handler.isVisible(context),
|
|
59
|
+
enabled: handler.isEnabled(context)
|
|
60
|
+
};
|
|
61
|
+
} catch (error) {
|
|
62
|
+
return {
|
|
63
|
+
...state,
|
|
64
|
+
visible: true,
|
|
65
|
+
enabled: false,
|
|
66
|
+
diagnostic: `Action '${action.id}' could not decide its availability: ${String(error)}`
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const descriptors = host.bundles.flatMap((bundle)=>bundle.descriptors ?? []);
|
|
71
|
+
return {
|
|
72
|
+
host,
|
|
73
|
+
diagnostics: [
|
|
74
|
+
...host.diagnostics,
|
|
75
|
+
...loaded.diagnostics
|
|
76
|
+
],
|
|
77
|
+
preview: (descriptor)=>lookup(descriptor, DesignTimeExtensionPoint.Preview, descriptor.previewKind),
|
|
78
|
+
designer: (descriptor)=>lookup(descriptor, DesignTimeExtensionPoint.Designer, descriptor.editorKind),
|
|
79
|
+
propertyEditor: (descriptor, property)=>lookup(descriptor, DesignTimeExtensionPoint.PropertyEditor, property.editorKind),
|
|
80
|
+
propertyDisplay: (descriptor)=>lookup(descriptor, DesignTimeExtensionPoint.PropertyDisplay, descriptor.propertyDisplayKind),
|
|
81
|
+
actions,
|
|
82
|
+
runAction: (descriptor, actionId, context)=>{
|
|
83
|
+
const state = actions(descriptor, context).find((action)=>action.descriptor.id === actionId);
|
|
84
|
+
const handler = actionOf(descriptor, actionId);
|
|
85
|
+
if (!state || !handler || !state.visible || !state.enabled) {
|
|
86
|
+
const reason = state?.diagnostic ?? (state ? `Action '${actionId}' is not available here` : `'${descriptor.component}' has no action '${actionId}'`);
|
|
87
|
+
return {
|
|
88
|
+
submitted: false,
|
|
89
|
+
edits: [],
|
|
90
|
+
diagnostics: [
|
|
91
|
+
reason
|
|
92
|
+
]
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return runDesignTimeAction(handler, context);
|
|
96
|
+
},
|
|
97
|
+
diagnoseDescriptors: ()=>descriptors.flatMap((descriptor)=>[
|
|
98
|
+
lookup(descriptor, DesignTimeExtensionPoint.Preview, descriptor.previewKind),
|
|
99
|
+
lookup(descriptor, DesignTimeExtensionPoint.Designer, descriptor.editorKind),
|
|
100
|
+
lookup(descriptor, DesignTimeExtensionPoint.PropertyDisplay, descriptor.propertyDisplayKind),
|
|
101
|
+
...descriptor.properties.map((property)=>lookup(descriptor, DesignTimeExtensionPoint.PropertyEditor, property.editorKind)),
|
|
102
|
+
...(descriptor.actions ?? []).map((action)=>lookup(descriptor, DesignTimeExtensionPoint.Action, action.id))
|
|
103
|
+
]).map((resolution)=>resolution.diagnostic).filter((diagnostic)=>diagnostic !== undefined)
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function ownerOf(descriptor) {
|
|
107
|
+
const separator = descriptor.component.indexOf(':');
|
|
108
|
+
return separator > 0 ? descriptor.component.substring(0, separator) : descriptor.component;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { resolveDesignTimeHost };
|
|
112
|
+
//# sourceMappingURL=resolveDesignTimeHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveDesignTimeHost.js","sources":["../../../packages/resolveDesignTimeHost.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 { ComponentType } from 'react';\nimport { ComponentDescriptor, PropertyDescriptor } from '@cratis/scene.model';\nimport { DesignTimeAction, DesignTimeActionContext } from './DesignTimeAction';\nimport { DesignTimeActionOutcome } from './DesignTimeActionOutcome';\nimport { DesignTimeActionState } from './DesignTimeActionState';\nimport { DesignTimeComponentProps } from './DesignTimeComponentProps';\nimport { DesignTimeExtensionPoint, designTimeExtensionPointLabels } from './DesignTimeExtensionPoint';\nimport { DesignTimePropertyDisplayProps } from './DesignTimePropertyDisplayProps';\nimport { DesignTimePropertyEditorProps } from './DesignTimePropertyEditorProps';\nimport { DesignTimeResolution } from './DesignTimeResolution';\nimport { LoadedDesignTimeContributions, loadDesignTimeContributions } from './loadDesignTimeContributions';\nimport { PackageHostConfiguration, ResolvedPackageHost, resolvePackageHost } from './PackageHostConfiguration';\nimport { runDesignTimeAction } from './runDesignTimeAction';\n\n/**\n * The generic design-time host contract: every package - first or third party - is reached through these\n * lookups, so a designer never switches on package or component names.\n */\nexport interface DesignTimeHost {\n /** The runtime package host the design-time contributions were loaded alongside. */\n host: ResolvedPackageHost;\n\n /** Package-level problems: the host's own, contract version mismatches and declared/provided disagreements. */\n diagnostics: string[];\n\n preview(descriptor: ComponentDescriptor): DesignTimeResolution<ComponentType<DesignTimeComponentProps>>;\n designer(descriptor: ComponentDescriptor): DesignTimeResolution<ComponentType<DesignTimeComponentProps>>;\n propertyEditor(descriptor: ComponentDescriptor, property: PropertyDescriptor): DesignTimeResolution<ComponentType<DesignTimePropertyEditorProps>>;\n propertyDisplay(descriptor: ComponentDescriptor): DesignTimeResolution<ComponentType<DesignTimePropertyDisplayProps>>;\n\n /** The component's actions, with the visibility and enablement their owning package decides. */\n actions(descriptor: ComponentDescriptor, context: DesignTimeActionContext): DesignTimeActionState[];\n\n /** Runs an action and submits its canonical edit batch to the host through `context.submitAction`. */\n runAction(descriptor: ComponentDescriptor, actionId: string, context: DesignTimeActionContext): DesignTimeActionOutcome;\n\n /** Every unknown or unavailable extension the approved packages' descriptors ask for. */\n diagnoseDescriptors(): string[];\n}\n\n/** Options for {@link resolveDesignTimeHost}. */\nexport interface DesignTimeHostOptions {\n /** Property editor kinds the host implements itself, such as an icon picker or a query binder. */\n hostEditorKinds?: string[];\n}\n\n/**\n * Resolves a package host and the design-time contributions of its approved packages. Design-time code is\n * only loaded when the host policy sets `loadDesignTime`; a runtime host gets generic fallbacks everywhere.\n */\nexport function resolveDesignTimeHost(configuration: PackageHostConfiguration, options: DesignTimeHostOptions = {}): DesignTimeHost {\n const host = resolvePackageHost(configuration);\n const loaded = loadDesignTimeContributions(host.bundles, configuration.policy.loadDesignTime === true);\n const hostEditorKinds = new Set(options.hostEditorKinds ?? []);\n const approved = new Set(host.bundles.map(bundle => bundle.manifest.name));\n\n const lookup = <T>(descriptor: ComponentDescriptor, point: DesignTimeExtensionPoint, kind: string | undefined): DesignTimeResolution<T> => {\n if (!kind) return {};\n const label = designTimeExtensionPointLabels[point];\n const separator = kind.indexOf(':');\n const owner = separator > 0 ? kind.substring(0, separator) : ownerOf(descriptor);\n const name = separator > 0 ? kind.substring(separator + 1) : kind;\n const outcome = point === DesignTimeExtensionPoint.Action ? 'the host shows it disabled' : `the host uses its generic ${label}`;\n const fallback = (reason: string) => ({ diagnostic: `'${descriptor.component}' asks for the ${label} '${kind}', ${reason}; ${outcome}` });\n\n if (!approved.has(owner)) return fallback(`but package '${owner}' is not approved by this host`);\n const contributions: LoadedDesignTimeContributions | undefined = loaded.packages.get(owner);\n if (contributions?.unavailableReason) return fallback(`but design-time contributions from package '${owner}' are not loaded`);\n const contribution = contributions?.contributions[point]?.[name] as T | undefined;\n if (contribution !== undefined) return { contribution, package: owner };\n if (point === DesignTimeExtensionPoint.PropertyEditor && separator < 0 && hostEditorKinds.has(kind)) return { hostKind: kind };\n return fallback(`which package '${owner}' does not provide`);\n };\n\n const actionOf = (descriptor: ComponentDescriptor, actionId: string): DesignTimeAction | undefined =>\n loaded.packages.get(ownerOf(descriptor))?.contributions[DesignTimeExtensionPoint.Action]?.[actionId] as DesignTimeAction | undefined;\n\n const actions = (descriptor: ComponentDescriptor, context: DesignTimeActionContext): DesignTimeActionState[] =>\n (descriptor.actions ?? []).map(action => {\n const state = { descriptor: action, package: ownerOf(descriptor) };\n const handler = actionOf(descriptor, action.id);\n if (!handler) {\n const resolution = lookup<DesignTimeAction>(descriptor, DesignTimeExtensionPoint.Action, action.id);\n return { ...state, visible: true, enabled: false, diagnostic: resolution.diagnostic };\n }\n\n try {\n return { ...state, visible: handler.isVisible(context), enabled: handler.isEnabled(context) };\n } catch (error) {\n return { ...state, visible: true, enabled: false, diagnostic: `Action '${action.id}' could not decide its availability: ${String(error)}` };\n }\n });\n\n const descriptors = host.bundles.flatMap(bundle => bundle.descriptors ?? []);\n\n return {\n host,\n diagnostics: [...host.diagnostics, ...loaded.diagnostics],\n preview: descriptor => lookup(descriptor, DesignTimeExtensionPoint.Preview, descriptor.previewKind),\n designer: descriptor => lookup(descriptor, DesignTimeExtensionPoint.Designer, descriptor.editorKind),\n propertyEditor: (descriptor, property) => lookup(descriptor, DesignTimeExtensionPoint.PropertyEditor, property.editorKind),\n propertyDisplay: descriptor => lookup(descriptor, DesignTimeExtensionPoint.PropertyDisplay, descriptor.propertyDisplayKind),\n actions,\n runAction: (descriptor, actionId, context) => {\n const state = actions(descriptor, context).find(action => action.descriptor.id === actionId);\n const handler = actionOf(descriptor, actionId);\n if (!state || !handler || !state.visible || !state.enabled) {\n const reason = state?.diagnostic ?? (state ? `Action '${actionId}' is not available here` : `'${descriptor.component}' has no action '${actionId}'`);\n return { submitted: false, edits: [], diagnostics: [reason] };\n }\n\n return runDesignTimeAction(handler, context);\n },\n diagnoseDescriptors: () =>\n descriptors.flatMap(descriptor => [\n lookup(descriptor, DesignTimeExtensionPoint.Preview, descriptor.previewKind),\n lookup(descriptor, DesignTimeExtensionPoint.Designer, descriptor.editorKind),\n lookup(descriptor, DesignTimeExtensionPoint.PropertyDisplay, descriptor.propertyDisplayKind),\n ...descriptor.properties.map(property => lookup(descriptor, DesignTimeExtensionPoint.PropertyEditor, property.editorKind)),\n ...(descriptor.actions ?? []).map(action => lookup(descriptor, DesignTimeExtensionPoint.Action, action.id)),\n ])\n .map(resolution => resolution.diagnostic)\n .filter((diagnostic): diagnostic is string => diagnostic !== undefined),\n };\n}\n\nfunction ownerOf(descriptor: ComponentDescriptor): string {\n const separator = descriptor.component.indexOf(':');\n return separator > 0 ? descriptor.component.substring(0, separator) : descriptor.component;\n}\n"],"names":["resolveDesignTimeHost","configuration","options","host","resolvePackageHost","loaded","loadDesignTimeContributions","bundles","policy","loadDesignTime","hostEditorKinds","Set","approved","map","bundle","manifest","name","lookup","descriptor","point","kind","label","designTimeExtensionPointLabels","separator","indexOf","owner","substring","ownerOf","outcome","DesignTimeExtensionPoint","Action","fallback","reason","diagnostic","component","has","contributions","packages","get","unavailableReason","contribution","undefined","package","PropertyEditor","hostKind","actionOf","actionId","actions","context","action","state","handler","id","resolution","visible","enabled","isVisible","isEnabled","error","String","descriptors","flatMap","diagnostics","preview","Preview","previewKind","designer","Designer","editorKind","propertyEditor","property","propertyDisplay","PropertyDisplay","propertyDisplayKind","runAction","find","submitted","edits","runDesignTimeAction","diagnoseDescriptors","properties","filter"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { DesignTimeAction, DesignTimeActionContext } from './DesignTimeAction';
|
|
2
|
+
import { DesignTimeActionOutcome } from './DesignTimeActionOutcome';
|
|
3
|
+
export declare function runDesignTimeAction(action: DesignTimeAction, context: DesignTimeActionContext): DesignTimeActionOutcome;
|
|
4
|
+
//# sourceMappingURL=runDesignTimeAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runDesignTimeAction.d.ts","sourceRoot":"","sources":["../../../packages/runDesignTimeAction.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AASpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,uBAAuB,GAAG,uBAAuB,CAqBvH"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { SceneEditKind } from '@cratis/scene.model';
|
|
2
|
+
|
|
3
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
4
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
5
|
+
const editKinds = new Set(Object.values(SceneEditKind));
|
|
6
|
+
/**
|
|
7
|
+
* Runs one design-time action and hands its edit batch to the host as a single canonical batch, so the host's
|
|
8
|
+
* own validation and undo/redo stay authoritative. A batch containing anything that is not a canonical Scene
|
|
9
|
+
* edit is rejected whole - a partially applied action is never reported as success.
|
|
10
|
+
*/ function runDesignTimeAction(action, context) {
|
|
11
|
+
let result;
|
|
12
|
+
try {
|
|
13
|
+
result = action.execute(context);
|
|
14
|
+
} catch (error) {
|
|
15
|
+
return {
|
|
16
|
+
submitted: false,
|
|
17
|
+
edits: [],
|
|
18
|
+
diagnostics: [
|
|
19
|
+
`Action '${action.descriptor.id}' failed: ${String(error)}`
|
|
20
|
+
]
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const invalid = result.edits.filter((edit)=>!editKinds.has(edit.kind ?? ''));
|
|
24
|
+
if (invalid.length > 0) {
|
|
25
|
+
return {
|
|
26
|
+
submitted: false,
|
|
27
|
+
edits: result.edits,
|
|
28
|
+
diagnostics: [
|
|
29
|
+
...result.diagnostics,
|
|
30
|
+
`Action '${action.descriptor.id}' produced ${invalid.length} edit(s) that are not canonical Scene edits; nothing was submitted`
|
|
31
|
+
]
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (result.edits.length === 0) return {
|
|
35
|
+
submitted: false,
|
|
36
|
+
edits: [],
|
|
37
|
+
diagnostics: result.diagnostics
|
|
38
|
+
};
|
|
39
|
+
context.submitAction(action.descriptor.id, result.edits);
|
|
40
|
+
return {
|
|
41
|
+
submitted: true,
|
|
42
|
+
edits: result.edits,
|
|
43
|
+
diagnostics: result.diagnostics
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { runDesignTimeAction };
|
|
48
|
+
//# sourceMappingURL=runDesignTimeAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runDesignTimeAction.js","sources":["../../../packages/runDesignTimeAction.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 { SceneEdit, SceneEditKind } from '@cratis/scene.model';\nimport { DesignTimeAction, DesignTimeActionContext } from './DesignTimeAction';\nimport { DesignTimeActionOutcome } from './DesignTimeActionOutcome';\n\nconst editKinds = new Set<string>(Object.values(SceneEditKind));\n\n/**\n * Runs one design-time action and hands its edit batch to the host as a single canonical batch, so the host's\n * own validation and undo/redo stay authoritative. A batch containing anything that is not a canonical Scene\n * edit is rejected whole - a partially applied action is never reported as success.\n */\nexport function runDesignTimeAction(action: DesignTimeAction, context: DesignTimeActionContext): DesignTimeActionOutcome {\n let result: { edits: SceneEdit[]; diagnostics: string[] };\n try {\n result = action.execute(context);\n } catch (error) {\n return { submitted: false, edits: [], diagnostics: [`Action '${action.descriptor.id}' failed: ${String(error)}`] };\n }\n\n const invalid = result.edits.filter(edit => !editKinds.has((edit as { kind?: string }).kind ?? ''));\n if (invalid.length > 0) {\n return {\n submitted: false,\n edits: result.edits,\n diagnostics: [...result.diagnostics, `Action '${action.descriptor.id}' produced ${invalid.length} edit(s) that are not canonical Scene edits; nothing was submitted`],\n };\n }\n\n if (result.edits.length === 0) return { submitted: false, edits: [], diagnostics: result.diagnostics };\n\n context.submitAction(action.descriptor.id, result.edits);\n return { submitted: true, edits: result.edits, diagnostics: result.diagnostics };\n}\n"],"names":["editKinds","Set","Object","values","SceneEditKind","runDesignTimeAction","action","context","result","execute","error","submitted","edits","diagnostics","descriptor","id","String","invalid","filter","edit","has","kind","length","submitAction"],"mappings":";;AAAA;AACA;AAMA,MAAMA,SAAAA,GAAY,IAAIC,GAAAA,CAAYC,MAAAA,CAAOC,MAAM,CAACC,aAAAA,CAAAA,CAAAA;AAEhD;;;;AAIC,IACM,SAASC,mBAAAA,CAAoBC,MAAwB,EAAEC,OAAgC,EAAA;IAC1F,IAAIC,MAAAA;IACJ,IAAI;QACAA,MAAAA,GAASF,MAAAA,CAAOG,OAAO,CAACF,OAAAA,CAAAA;AAC5B,IAAA,CAAA,CAAE,OAAOG,KAAAA,EAAO;QACZ,OAAO;YAAEC,SAAAA,EAAW,KAAA;AAAOC,YAAAA,KAAAA,EAAO,EAAE;YAAEC,WAAAA,EAAa;gBAAC,CAAC,QAAQ,EAAEP,MAAAA,CAAOQ,UAAU,CAACC,EAAE,CAAC,UAAU,EAAEC,MAAAA,CAAON,KAAAA,CAAAA,CAAAA;AAAS;AAAC,SAAA;AACrH,IAAA;AAEA,IAAA,MAAMO,OAAAA,GAAUT,MAAAA,CAAOI,KAAK,CAACM,MAAM,CAACC,CAAAA,IAAAA,GAAQ,CAACnB,UAAUoB,GAAG,CAAC,IAACD,CAA2BE,IAAI,IAAI,EAAA,CAAA,CAAA;IAC/F,IAAIJ,OAAAA,CAAQK,MAAM,GAAG,CAAA,EAAG;QACpB,OAAO;YACHX,SAAAA,EAAW,KAAA;AACXC,YAAAA,KAAAA,EAAOJ,OAAOI,KAAK;YACnBC,WAAAA,EAAa;AAAIL,gBAAAA,GAAAA,MAAAA,CAAOK,WAAW;AAAE,gBAAA,CAAC,QAAQ,EAAEP,MAAAA,CAAOQ,UAAU,CAACC,EAAE,CAAC,WAAW,EAAEE,OAAAA,CAAQK,MAAM,CAAC,kEAAkE;AAAE;AACzK,SAAA;AACJ,IAAA;AAEA,IAAA,IAAId,OAAOI,KAAK,CAACU,MAAM,KAAK,GAAG,OAAO;QAAEX,SAAAA,EAAW,KAAA;AAAOC,QAAAA,KAAAA,EAAO,EAAE;AAAEC,QAAAA,WAAAA,EAAaL,OAAOK;AAAY,KAAA;IAErGN,OAAAA,CAAQgB,YAAY,CAACjB,MAAAA,CAAOQ,UAAU,CAACC,EAAE,EAAEP,OAAOI,KAAK,CAAA;IACvD,OAAO;QAAED,SAAAA,EAAW,IAAA;AAAMC,QAAAA,KAAAA,EAAOJ,OAAOI,KAAK;AAAEC,QAAAA,WAAAA,EAAaL,OAAOK;AAAY,KAAA;AACnF;;"}
|