- harmony |
- property |
-
+
+ Signature
+
+(node: UiNode, registry: Readonly<Record<string, StudioAuthoringComponentMeta | undefined>>) => readonly StudioInstancePropertyField[]
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ node |
+ UiNode |
+ yes |
+ |
+
+
+ registry |
+
+ Readonly<Record<string, StudioAuthoringComponentMeta |
+ undefined>>
+ |
+ yes |
+ |
+
+
+
+
+ Returns: readonly StudioInstancePropertyField[]
+
+
+
+
+ resolveStudioInstancePropertyGroups
+ function • src/propertiesAuthoringModel.ts:74:1
+
+ Export paths: src/index.ts
+
+ Related symbols:
+
+ - StudioAuthoringComponentMeta
+ - StudioInstancePropertyGroup
+
+
+
+ Signature
+
+(node: UiNode, registry: Readonly<Record<string, StudioAuthoringComponentMeta | undefined>>) => readonly StudioInstancePropertyGroup[]
+
+
+
+ | Parameter |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ node |
+ UiNode |
+ yes |
+ |
+
+
+ registry |
+
+ Readonly<Record<string, StudioAuthoringComponentMeta |
+ undefined>>
+ |
+ yes |
+ |
+
+
+
+
+ Returns: readonly StudioInstancePropertyGroup[]
+
+
+
+
+ StudioAuthoringComponentMeta
+ type • src/propertiesAuthoringModel.ts:14:1
+
+ Export paths: src/index.ts
+
+ Related symbols:
+
+ - StudioAuthoringPropSchema
+
+
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ name |
+ property |
+ string |
+ yes |
+ |
+
+
+ props |
+ property |
+
+ Readonly<Record<string, StudioAuthoringPropSchema>>
+ |
+ yes |
+ |
+
+
+
+
+
+ StudioAuthoringMetaRegistry
+ unknown • src/propertiesAuthoringModel.ts:19:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+ StudioAuthoringPropSchema
+ type • src/propertiesAuthoringModel.ts:3:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ authoring |
+ property |
+ { readonly authority: string; } | undefined |
+ no |
+ |
+
+
+ category |
+ property |
+ string |
+ yes |
+ |
+
+
+ default |
+ property |
+ unknown |
+ no |
+ |
+
+
+ enum |
+ property |
+ readonly (string | number)[] | undefined |
+ no |
+ |
+
+
+ label |
+ property |
+ string | undefined |
+ no |
+ |
+
+
+ type |
+ property |
+ string |
+ yes |
+ |
+
+
+
+
+
+ StudioInstancePropertyEditorKind
+ unknown • src/propertiesAuthoringModel.ts:23:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+ StudioInstancePropertyField
+ type • src/propertiesAuthoringModel.ts:26:1
+
+ Export paths: src/index.ts
+
+ Related symbols:
+
+ - StudioInstancePropertyEditorKind
+
+
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ category |
+ property |
+ string |
+ yes |
+ |
+
+
+ defaultValue |
+ property |
+ unknown |
+ yes |
+ |
+
+
+ editor |
+ property |
+ StudioInstancePropertyEditorKind |
+ yes |
+ |
+
+
+ isExplicit |
+ property |
+ boolean |
+ yes |
+ |
+
+
+ label |
+ property |
+ string |
+ yes |
+ |
+
+
+ name |
+ property |
+ string |
+ yes |
+ |
+
+
+ options |
+ property |
+ readonly (string | number)[] |
+ yes |
+ |
+
+
+ schemaType |
+ property |
+ string |
+ yes |
+ |
+
+
+ value |
+ property |
+ unknown |
+ yes |
+ |
+
+
+
+
+
+ StudioInstancePropertyGroup
+ type • src/propertiesAuthoringModel.ts:38:1
+
+ Export paths: src/index.ts
+
+ Related symbols:
+
+ - StudioInstancePropertyField
+
+
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ category |
+ property |
+ string |
+ yes |
+ |
+
+
+ fields |
+ property |
+ readonly StudioInstancePropertyField[] |
+ yes |
+ |
+
+
+
+
+
+ StudioInstancePropertyValue
+ unknown • src/propertiesAuthoringModel.ts:43:1
+
+ Export paths: src/index.ts
+ Related symbols: None
+
+
+
+ src/templateCatalogContracts.ts
+
+ TemplateCatalog
+ type • src/templateCatalogContracts.ts:21:1
+
+ Export paths: src/index.ts
+
+ Related symbols:
+
+ - TemplateCatalogCategory
+
+
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ categories |
+ property |
+ TemplateCatalogCategory[] |
+ yes |
+ |
+
+
+
+
+
+ TemplateCatalogCategory
+ type • src/templateCatalogContracts.ts:10:1
+
+ Export paths: src/index.ts
+
+ Related symbols:
+
+ - TemplateCatalogTemplate
+
+
+
+
+
+
+ | Member |
+ Kind |
+ Type |
+ Required |
+ Description |
+
+
+
+
+ focusAreas |
+ property |
+ readonly string[] |
+ yes |
+ |
+
+
+ harmony |
+ property |
+
"monochromatic" | "analogous" |
"complementary" | "triadic" | "tetradic" |
@@ -8932,11 +9598,30 @@ Architecture overview
module_src_host_auth_projectAuthHealthService_ts["src/host/auth/projectAuthHealthService.ts"]
package__ankhorage_studio -.-> module_src_host_auth_projectAuthHealthService_ts
module_src_host_auth_projectAuthHealthService_ts -->
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthHealthService_ts -->
module_src_host_orchestrator_projectManager_ts
module_src_host_auth_projectAuthHealthService_ts -->
module_src_host_secrets_projectSecretService_ts
module_src_host_auth_projectAuthHealthService_ts -->
+ module_src_projectAuthHealth_ts module_src_host_auth_projectAuthHealthService_ts
+ --> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts["src/host/auth/projectAuthRuntimeDiagnostics.test.ts"]
+ package__ankhorage_studio -.->
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts -->
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts["src/host/auth/projectAuthRuntimeDiagnostics.ts"]
+ package__ankhorage_studio -.->
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts -->
+ module_src_host_orchestrator_infraRuntime_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts -->
+ module_src_host_orchestrator_projectPaths_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts -->
module_src_projectAuthHealth_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts -->
+ module_src_projectAuthRuntimeDiagnostics_ts
module_src_host_createStudioHost_ts["src/host/createStudioHost.ts"]
package__ankhorage_studio -.-> module_src_host_createStudioHost_ts
module_src_host_createStudioHost_ts -->
@@ -8966,6 +9651,11 @@ Architecture overview
module_src_host_orchestrator_projectManager_ts
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts -->
module_src_host_templateRegistry_index_ts
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts["src/host/generatedOAuthLifecycle.e2e.test.ts"]
+ package__ankhorage_studio -.->
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts -->
+ module_src_host_layout_templates_auth_oauth_ts
module_src_host_hostLifecycle_smoke_test_ts["src/host/hostLifecycle.smoke.test.ts"]
package__ankhorage_studio -.-> module_src_host_hostLifecycle_smoke_test_ts
module_src_host_hostLifecycle_smoke_test_ts -->
@@ -9077,12 +9767,22 @@ Architecture overview
module_src_host_layout_templates_auth_adapter_ts
module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_adapter_ts
+ module_src_host_layout_templates_auth_callback_test_ts["src/host/layout/templates/auth/callback.test.ts"]
+ package__ankhorage_studio -.->
+ module_src_host_layout_templates_auth_callback_test_ts
+ module_src_host_layout_templates_auth_callback_test_ts -->
+ module_src_host_layout_templates_auth_callback_ts
module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_callback_ts
module_src_host_layout_templates_auth_callback_ts -->
module_src_host_layout_templates_utils_routes_ts
module_src_host_layout_templates_auth_callback_ts -->
module_src_host_layout_utils_escapeStringLiteral_ts
+ module_src_host_layout_templates_auth_oauth_test_ts["src/host/layout/templates/auth/oauth.test.ts"]
+ package__ankhorage_studio -.->
+ module_src_host_layout_templates_auth_oauth_test_ts
+ module_src_host_layout_templates_auth_oauth_test_ts -->
+ module_src_host_layout_templates_auth_oauth_ts
module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_oauth_ts
module_src_host_layout_templates_auth_oauth_ts -->
@@ -9496,6 +10196,14 @@ Architecture overview
module_src_projectAuthHealth_ts["src/projectAuthHealth.ts"]
package__ankhorage_studio -.-> module_src_projectAuthHealth_ts
module_src_projectAuthHealth_ts --> module_src_authSettings_ts
+ module_src_projectAuthRuntimeDiagnostics_test_ts["src/projectAuthRuntimeDiagnostics.test.ts"]
+ package__ankhorage_studio -.-> module_src_projectAuthRuntimeDiagnostics_test_ts
+ module_src_projectAuthRuntimeDiagnostics_test_ts -->
+ module_src_projectAuthHealth_ts module_src_projectAuthRuntimeDiagnostics_test_ts
+ --> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_projectAuthRuntimeDiagnostics_ts["src/projectAuthRuntimeDiagnostics.ts"]
+ package__ankhorage_studio -.-> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthHealth_ts
module_src_projectIdentity_test_ts["src/projectIdentity.test.ts"]
package__ankhorage_studio -.-> module_src_projectIdentity_test_ts
module_src_projectIdentity_test_ts --> module_src_projectIdentity_ts
@@ -9517,6 +10225,11 @@ Architecture overview
package__ankhorage_studio -.-> module_src_projectSecretUsage_ts
module_src_projectWorkspaceContracts_ts["src/projectWorkspaceContracts.ts"]
package__ankhorage_studio -.-> module_src_projectWorkspaceContracts_ts
+ module_src_propertiesAuthoringModel_test_ts["src/propertiesAuthoringModel.test.ts"]
+ package__ankhorage_studio -.-> module_src_propertiesAuthoringModel_test_ts
+ module_src_propertiesAuthoringModel_test_ts --> module_src_index_ts
+ module_src_propertiesAuthoringModel_ts["src/propertiesAuthoringModel.ts"]
+ package__ankhorage_studio -.-> module_src_propertiesAuthoringModel_ts
module_src_root_test_ts["src/root.test.ts"] package__ankhorage_studio
-.-> module_src_root_test_ts module_src_root_ts["src/root.ts"]
package__ankhorage_studio -.-> module_src_root_ts
@@ -9650,6 +10363,11 @@ Architecture overview
module_src_studioAdminRouteModel_ts["src/studioAdminRouteModel.ts"]
package__ankhorage_studio -.-> module_src_studioAdminRouteModel_ts
module_src_studioAdminRouteModel_ts --> module_src_index_ts
+ module_src_studioRuntimeApi_test_ts["src/studioRuntimeApi.test.ts"]
+ package__ankhorage_studio -.-> module_src_studioRuntimeApi_test_ts
+ module_src_studioRuntimeApi_test_ts --> module_src_studioRuntimeApi_ts
+ module_src_studioRuntimeApi_ts["src/studioRuntimeApi.ts"]
+ package__ankhorage_studio -.-> module_src_studioRuntimeApi_ts
module_src_studioSelectionModel_knip_test_ts["src/studioSelectionModel.knip.test.ts"]
package__ankhorage_studio -.-> module_src_studioSelectionModel_knip_test_ts
module_src_studioSelectionModel_knip_test_ts -->
@@ -9767,6 +10485,7 @@ Architecture overview
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthHealth_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectSecretApi_ts
+ module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_studioRuntimeApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx -->
module_src_ui_admin_AuthAdminSession_tsx module_src_ui_admin_pages_AuthAdminPage_tsx
--> module_src_ui_admin_pages_adminAuthCredentialFlow_ts
@@ -9787,9 +10506,9 @@ Architecture overview
module_src_ui_admin_pages_PropertiesAdminPage_tsx -->
module_src_core_StudioContext_ts module_src_ui_admin_pages_PropertiesAdminPage_tsx
--> module_src_manifestState_ts module_src_ui_admin_pages_PropertiesAdminPage_tsx
- --> module_src_ui_admin_adminPagePrimitives_tsx
+ --> module_src_propertiesAuthoringModel_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx -->
- module_src_ui_admin_adminPageUtils_ts
+ module_src_ui_admin_adminPagePrimitives_tsx
module_src_ui_admin_pages_SecretsAdminPage_test_ts["src/ui/admin/pages/SecretsAdminPage.test.ts"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_SecretsAdminPage_test_ts
module_src_ui_admin_pages_SecretsAdminPage_tsx["src/ui/admin/pages/SecretsAdminPage.tsx"]
@@ -10016,9 +10735,20 @@ Architecture overview
module_src_hooks_useWorkspaceActions_ts --> module_src_core_constants_ts
module_src_host_auth_projectAuthHealthService_ts["src/host/auth/projectAuthHealthService.ts"]
package__ankhorage_studio -.-> module_src_host_auth_projectAuthHealthService_ts
+ module_src_host_auth_projectAuthHealthService_ts --> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_host_orchestrator_projectManager_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_host_secrets_projectSecretService_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_projectAuthHealth_ts
+ module_src_host_auth_projectAuthHealthService_ts --> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts["src/host/auth/projectAuthRuntimeDiagnostics.test.ts"]
+ package__ankhorage_studio -.-> module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts --> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts["src/host/auth/projectAuthRuntimeDiagnostics.ts"]
+ package__ankhorage_studio -.-> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_host_orchestrator_infraRuntime_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_host_orchestrator_projectPaths_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthHealth_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthRuntimeDiagnostics_ts
module_src_host_createStudioHost_ts["src/host/createStudioHost.ts"]
package__ankhorage_studio -.-> module_src_host_createStudioHost_ts
module_src_host_createStudioHost_ts --> module_src_host_orchestrator_infraRuntime_ts
@@ -10036,6 +10766,9 @@ Architecture overview
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_templateRegistry_index_ts
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts["src/host/generatedOAuthLifecycle.e2e.test.ts"]
+ package__ankhorage_studio -.-> module_src_host_generatedOAuthLifecycle_e2e_test_ts
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts --> module_src_host_layout_templates_auth_oauth_ts
module_src_host_hostLifecycle_smoke_test_ts["src/host/hostLifecycle.smoke.test.ts"]
package__ankhorage_studio -.-> module_src_host_hostLifecycle_smoke_test_ts
module_src_host_hostLifecycle_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts
@@ -10122,10 +10855,16 @@ Architecture overview
module_src_host_layout_templates_auth_adapter_test_ts --> module_src_host_layout_templates_auth_adapter_ts
module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_adapter_ts
+ module_src_host_layout_templates_auth_callback_test_ts["src/host/layout/templates/auth/callback.test.ts"]
+ package__ankhorage_studio -.-> module_src_host_layout_templates_auth_callback_test_ts
+ module_src_host_layout_templates_auth_callback_test_ts --> module_src_host_layout_templates_auth_callback_ts
module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_callback_ts
module_src_host_layout_templates_auth_callback_ts --> module_src_host_layout_templates_utils_routes_ts
module_src_host_layout_templates_auth_callback_ts --> module_src_host_layout_utils_escapeStringLiteral_ts
+ module_src_host_layout_templates_auth_oauth_test_ts["src/host/layout/templates/auth/oauth.test.ts"]
+ package__ankhorage_studio -.-> module_src_host_layout_templates_auth_oauth_test_ts
+ module_src_host_layout_templates_auth_oauth_test_ts --> module_src_host_layout_templates_auth_oauth_ts
module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"]
package__ankhorage_studio -.-> module_src_host_layout_templates_auth_oauth_ts
module_src_host_layout_templates_auth_oauth_ts --> module_src_host_layout_auth_resolveAuthLayoutPlan_ts
@@ -10428,6 +11167,13 @@ Architecture overview
module_src_projectAuthHealth_ts["src/projectAuthHealth.ts"]
package__ankhorage_studio -.-> module_src_projectAuthHealth_ts
module_src_projectAuthHealth_ts --> module_src_authSettings_ts
+ module_src_projectAuthRuntimeDiagnostics_test_ts["src/projectAuthRuntimeDiagnostics.test.ts"]
+ package__ankhorage_studio -.-> module_src_projectAuthRuntimeDiagnostics_test_ts
+ module_src_projectAuthRuntimeDiagnostics_test_ts --> module_src_projectAuthHealth_ts
+ module_src_projectAuthRuntimeDiagnostics_test_ts --> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_projectAuthRuntimeDiagnostics_ts["src/projectAuthRuntimeDiagnostics.ts"]
+ package__ankhorage_studio -.-> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthHealth_ts
module_src_projectIdentity_test_ts["src/projectIdentity.test.ts"]
package__ankhorage_studio -.-> module_src_projectIdentity_test_ts
module_src_projectIdentity_test_ts --> module_src_projectIdentity_ts
@@ -10449,6 +11195,11 @@ Architecture overview
package__ankhorage_studio -.-> module_src_projectSecretUsage_ts
module_src_projectWorkspaceContracts_ts["src/projectWorkspaceContracts.ts"]
package__ankhorage_studio -.-> module_src_projectWorkspaceContracts_ts
+ module_src_propertiesAuthoringModel_test_ts["src/propertiesAuthoringModel.test.ts"]
+ package__ankhorage_studio -.-> module_src_propertiesAuthoringModel_test_ts
+ module_src_propertiesAuthoringModel_test_ts --> module_src_index_ts
+ module_src_propertiesAuthoringModel_ts["src/propertiesAuthoringModel.ts"]
+ package__ankhorage_studio -.-> module_src_propertiesAuthoringModel_ts
module_src_root_test_ts["src/root.test.ts"]
package__ankhorage_studio -.-> module_src_root_test_ts
module_src_root_ts["src/root.ts"]
@@ -10557,6 +11308,11 @@ Architecture overview
module_src_studioAdminRouteModel_ts["src/studioAdminRouteModel.ts"]
package__ankhorage_studio -.-> module_src_studioAdminRouteModel_ts
module_src_studioAdminRouteModel_ts --> module_src_index_ts
+ module_src_studioRuntimeApi_test_ts["src/studioRuntimeApi.test.ts"]
+ package__ankhorage_studio -.-> module_src_studioRuntimeApi_test_ts
+ module_src_studioRuntimeApi_test_ts --> module_src_studioRuntimeApi_ts
+ module_src_studioRuntimeApi_ts["src/studioRuntimeApi.ts"]
+ package__ankhorage_studio -.-> module_src_studioRuntimeApi_ts
module_src_studioSelectionModel_knip_test_ts["src/studioSelectionModel.knip.test.ts"]
package__ankhorage_studio -.-> module_src_studioSelectionModel_knip_test_ts
module_src_studioSelectionModel_knip_test_ts --> module_src_studioSelectionModel_ts
@@ -10649,6 +11405,7 @@ Architecture overview
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthHealth_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectSecretApi_ts
+ module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_studioRuntimeApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_AuthAdminSession_tsx
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthCredentialFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthHealthFlow_ts
@@ -10663,8 +11420,8 @@ Architecture overview
package__ankhorage_studio -.-> module_src_ui_admin_pages_PropertiesAdminPage_tsx
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_core_StudioContext_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_manifestState_ts
+ module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_propertiesAuthoringModel_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
- module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_ui_admin_adminPageUtils_ts
module_src_ui_admin_pages_SecretsAdminPage_test_ts["src/ui/admin/pages/SecretsAdminPage.test.ts"]
package__ankhorage_studio -.-> module_src_ui_admin_pages_SecretsAdminPage_test_ts
module_src_ui_admin_pages_SecretsAdminPage_tsx["src/ui/admin/pages/SecretsAdminPage.tsx"]
@@ -10764,9 +11521,12 @@ Module relationships
module_src_hooks_useTemplateCatalog_ts["src/hooks/useTemplateCatalog.ts"]
module_src_hooks_useWorkspaceActions_ts["src/hooks/useWorkspaceActions.ts"]
module_src_host_auth_projectAuthHealthService_ts["src/host/auth/projectAuthHealthService.ts"]
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts["src/host/auth/projectAuthRuntimeDiagnostics.test.ts"]
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts["src/host/auth/projectAuthRuntimeDiagnostics.ts"]
module_src_host_createStudioHost_ts["src/host/createStudioHost.ts"]
module_src_host_generatedAdminExpoWeb_smoke_test_ts["src/host/generatedAdminExpoWeb.smoke.test.ts"]
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts["src/host/generatedAuthAdapterRuntime.smoke.test.ts"]
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts["src/host/generatedOAuthLifecycle.e2e.test.ts"]
module_src_host_hostLifecycle_smoke_test_ts["src/host/hostLifecycle.smoke.test.ts"]
module_src_host_hostOwnership_test_ts["src/host/hostOwnership.test.ts"]
module_src_host_http_authRoutes_test_ts["src/host/http/authRoutes.test.ts"]
@@ -10788,7 +11548,9 @@ Module relationships
module_src_host_layout_layoutGenerator_ts["src/host/layout/layoutGenerator.ts"]
module_src_host_layout_templates_auth_adapter_test_ts["src/host/layout/templates/auth/adapter.test.ts"]
module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"]
+ module_src_host_layout_templates_auth_callback_test_ts["src/host/layout/templates/auth/callback.test.ts"]
module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"]
+ module_src_host_layout_templates_auth_oauth_test_ts["src/host/layout/templates/auth/oauth.test.ts"]
module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"]
module_src_host_layout_templates_auth_screen_ts["src/host/layout/templates/auth/screen.ts"]
module_src_host_layout_templates_auth_session_ts["src/host/layout/templates/auth/session.ts"]
@@ -10877,6 +11639,8 @@ Module relationships
module_src_projectAuthApi_ts["src/projectAuthApi.ts"]
module_src_projectAuthHealth_test_ts["src/projectAuthHealth.test.ts"]
module_src_projectAuthHealth_ts["src/projectAuthHealth.ts"]
+ module_src_projectAuthRuntimeDiagnostics_test_ts["src/projectAuthRuntimeDiagnostics.test.ts"]
+ module_src_projectAuthRuntimeDiagnostics_ts["src/projectAuthRuntimeDiagnostics.ts"]
module_src_projectIdentity_test_ts["src/projectIdentity.test.ts"]
module_src_projectIdentity_ts["src/projectIdentity.ts"]
module_src_projectSecretApi_test_ts["src/projectSecretApi.test.ts"]
@@ -10884,6 +11648,8 @@ Module relationships
module_src_projectSecretUsage_test_ts["src/projectSecretUsage.test.ts"]
module_src_projectSecretUsage_ts["src/projectSecretUsage.ts"]
module_src_projectWorkspaceContracts_ts["src/projectWorkspaceContracts.ts"]
+ module_src_propertiesAuthoringModel_test_ts["src/propertiesAuthoringModel.test.ts"]
+ module_src_propertiesAuthoringModel_ts["src/propertiesAuthoringModel.ts"]
module_src_root_test_ts["src/root.test.ts"]
module_src_root_ts["src/root.ts"]
module_src_routeUtils_public_test_ts["src/routeUtils.public.test.ts"]
@@ -10924,6 +11690,8 @@ Module relationships
module_src_secretResponseGuard_ts["src/secretResponseGuard.ts"]
module_src_studioAdminRouteModel_test_ts["src/studioAdminRouteModel.test.ts"]
module_src_studioAdminRouteModel_ts["src/studioAdminRouteModel.ts"]
+ module_src_studioRuntimeApi_test_ts["src/studioRuntimeApi.test.ts"]
+ module_src_studioRuntimeApi_ts["src/studioRuntimeApi.ts"]
module_src_studioSelectionModel_knip_test_ts["src/studioSelectionModel.knip.test.ts"]
module_src_studioSelectionModel_test_ts["src/studioSelectionModel.test.ts"]
module_src_studioSelectionModel_ts["src/studioSelectionModel.ts"]
@@ -11058,15 +11826,28 @@ Module relationships
module_src_core_constants_ts module_src_hooks_useTemplateCatalog_ts -->
module_src_templateCatalogContracts_ts module_src_hooks_useWorkspaceActions_ts
--> module_src_core_constants_ts module_src_host_auth_projectAuthHealthService_ts
- --> module_src_host_orchestrator_projectManager_ts
+ --> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthHealthService_ts -->
+ module_src_host_orchestrator_projectManager_ts
module_src_host_auth_projectAuthHealthService_ts -->
module_src_host_secrets_projectSecretService_ts
module_src_host_auth_projectAuthHealthService_ts -->
- module_src_projectAuthHealth_ts module_src_host_createStudioHost_ts -->
- module_src_host_orchestrator_infraRuntime_ts module_src_host_createStudioHost_ts
- --> module_src_host_orchestrator_moduleManager_ts
+ module_src_projectAuthHealth_ts module_src_host_auth_projectAuthHealthService_ts
+ --> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts -->
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts -->
+ module_src_host_orchestrator_infraRuntime_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts -->
+ module_src_host_orchestrator_projectPaths_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts -->
+ module_src_projectAuthHealth_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts -->
+ module_src_projectAuthRuntimeDiagnostics_ts module_src_host_createStudioHost_ts
+ --> module_src_host_orchestrator_infraRuntime_ts
module_src_host_createStudioHost_ts -->
- module_src_host_orchestrator_projectManager_ts
+ module_src_host_orchestrator_moduleManager_ts module_src_host_createStudioHost_ts
+ --> module_src_host_orchestrator_projectManager_ts
module_src_host_generatedAdminExpoWeb_smoke_test_ts -->
module_src_host_installedPackageProvenance_ts
module_src_host_generatedAdminExpoWeb_smoke_test_ts -->
@@ -11083,6 +11864,8 @@ Module relationships
module_src_host_orchestrator_projectManager_ts
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts -->
module_src_host_templateRegistry_index_ts
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts -->
+ module_src_host_layout_templates_auth_oauth_ts
module_src_host_hostLifecycle_smoke_test_ts -->
module_src_host_orchestrator_moduleManager_ts
module_src_host_hostLifecycle_smoke_test_ts -->
@@ -11144,10 +11927,14 @@ Module relationships
module_src_host_layout_layoutGenerator_ts --> module_src_studioAdminRouteModel_ts
module_src_host_layout_templates_auth_adapter_test_ts -->
module_src_host_layout_templates_auth_adapter_ts
+ module_src_host_layout_templates_auth_callback_test_ts -->
+ module_src_host_layout_templates_auth_callback_ts
module_src_host_layout_templates_auth_callback_ts -->
module_src_host_layout_templates_utils_routes_ts
module_src_host_layout_templates_auth_callback_ts -->
module_src_host_layout_utils_escapeStringLiteral_ts
+ module_src_host_layout_templates_auth_oauth_test_ts -->
+ module_src_host_layout_templates_auth_oauth_ts
module_src_host_layout_templates_auth_oauth_ts -->
module_src_host_layout_auth_resolveAuthLayoutPlan_ts
module_src_host_layout_templates_auth_oauth_ts -->
@@ -11360,6 +12147,10 @@ Module relationships
module_src_projectAuthApi_ts --> module_src_secretResponseGuard_ts
module_src_projectAuthHealth_test_ts --> module_src_projectAuthHealth_ts
module_src_projectAuthHealth_ts --> module_src_authSettings_ts
+ module_src_projectAuthRuntimeDiagnostics_test_ts -->
+ module_src_projectAuthHealth_ts module_src_projectAuthRuntimeDiagnostics_test_ts
+ --> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthHealth_ts
module_src_projectIdentity_test_ts --> module_src_projectIdentity_ts
module_src_projectIdentity_test_ts --> module_src_projectWorkspaceContracts_ts
module_src_projectIdentity_ts --> module_src_projectWorkspaceContracts_ts
@@ -11367,6 +12158,7 @@ Module relationships
module_src_projectSecretApi_ts --> module_src_projectSecretUsage_ts
module_src_projectSecretApi_ts --> module_src_secretResponseGuard_ts
module_src_projectSecretUsage_test_ts --> module_src_projectSecretUsage_ts
+ module_src_propertiesAuthoringModel_test_ts --> module_src_index_ts
module_src_routeUtils_public_test_ts --> module_src_routeUtils_ts
module_src_routeUtils_test_ts --> module_src_routeUtils_ts
module_src_routeUtils_ts --> module_src_manifestState_ts
@@ -11410,7 +12202,8 @@ Module relationships
--> module_src_runtimeLocalization_ts module_src_secretResponseGuard_test_ts
--> module_src_secretResponseGuard_ts module_src_studioAdminRouteModel_test_ts
--> module_src_studioAdminRouteModel_ts module_src_studioAdminRouteModel_ts
- --> module_src_index_ts module_src_studioSelectionModel_knip_test_ts -->
+ --> module_src_index_ts module_src_studioRuntimeApi_test_ts -->
+ module_src_studioRuntimeApi_ts module_src_studioSelectionModel_knip_test_ts -->
module_src_studioSelectionModel_ts module_src_studioSelectionModel_test_ts -->
module_src_studioSelectionModel_ts module_src_ui_admin_AnkhAdminPage_tsx -->
module_src_core_StudioContext_ts module_src_ui_admin_AnkhAdminPage_tsx -->
@@ -11470,6 +12263,7 @@ Module relationships
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthHealth_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectSecretApi_ts
+ module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_studioRuntimeApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx -->
module_src_ui_admin_AuthAdminSession_tsx module_src_ui_admin_pages_AuthAdminPage_tsx
--> module_src_ui_admin_pages_adminAuthCredentialFlow_ts
@@ -11483,13 +12277,13 @@ Module relationships
module_src_ui_admin_pages_PropertiesAdminPage_tsx -->
module_src_core_StudioContext_ts module_src_ui_admin_pages_PropertiesAdminPage_tsx
--> module_src_manifestState_ts module_src_ui_admin_pages_PropertiesAdminPage_tsx
- --> module_src_ui_admin_adminPagePrimitives_tsx
+ --> module_src_propertiesAuthoringModel_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx -->
- module_src_ui_admin_adminPageUtils_ts module_src_ui_admin_pages_SecretsAdminPage_tsx
- --> module_src_projectSecretApi_ts module_src_ui_admin_pages_SecretsAdminPage_tsx
- --> module_src_projectSecretUsage_ts
+ module_src_ui_admin_adminPagePrimitives_tsx
+ module_src_ui_admin_pages_SecretsAdminPage_tsx --> module_src_projectSecretApi_ts
module_src_ui_admin_pages_SecretsAdminPage_tsx -->
- module_src_ui_admin_AuthAdminSession_tsx
+ module_src_projectSecretUsage_ts module_src_ui_admin_pages_SecretsAdminPage_tsx
+ --> module_src_ui_admin_AuthAdminSession_tsx
module_src_ui_admin_pages_SecretsAdminPage_tsx -->
module_src_ui_admin_pages_adminAuthSessionModel_ts
module_src_ui_admin_pages_ThemeAdminPage_test_ts -->
@@ -11564,9 +12358,12 @@ Module relationships
module_src_hooks_useTemplateCatalog_ts["src/hooks/useTemplateCatalog.ts"]
module_src_hooks_useWorkspaceActions_ts["src/hooks/useWorkspaceActions.ts"]
module_src_host_auth_projectAuthHealthService_ts["src/host/auth/projectAuthHealthService.ts"]
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts["src/host/auth/projectAuthRuntimeDiagnostics.test.ts"]
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts["src/host/auth/projectAuthRuntimeDiagnostics.ts"]
module_src_host_createStudioHost_ts["src/host/createStudioHost.ts"]
module_src_host_generatedAdminExpoWeb_smoke_test_ts["src/host/generatedAdminExpoWeb.smoke.test.ts"]
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts["src/host/generatedAuthAdapterRuntime.smoke.test.ts"]
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts["src/host/generatedOAuthLifecycle.e2e.test.ts"]
module_src_host_hostLifecycle_smoke_test_ts["src/host/hostLifecycle.smoke.test.ts"]
module_src_host_hostOwnership_test_ts["src/host/hostOwnership.test.ts"]
module_src_host_http_authRoutes_test_ts["src/host/http/authRoutes.test.ts"]
@@ -11588,7 +12385,9 @@ Module relationships
module_src_host_layout_layoutGenerator_ts["src/host/layout/layoutGenerator.ts"]
module_src_host_layout_templates_auth_adapter_test_ts["src/host/layout/templates/auth/adapter.test.ts"]
module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"]
+ module_src_host_layout_templates_auth_callback_test_ts["src/host/layout/templates/auth/callback.test.ts"]
module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"]
+ module_src_host_layout_templates_auth_oauth_test_ts["src/host/layout/templates/auth/oauth.test.ts"]
module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"]
module_src_host_layout_templates_auth_screen_ts["src/host/layout/templates/auth/screen.ts"]
module_src_host_layout_templates_auth_session_ts["src/host/layout/templates/auth/session.ts"]
@@ -11677,6 +12476,8 @@ Module relationships
module_src_projectAuthApi_ts["src/projectAuthApi.ts"]
module_src_projectAuthHealth_test_ts["src/projectAuthHealth.test.ts"]
module_src_projectAuthHealth_ts["src/projectAuthHealth.ts"]
+ module_src_projectAuthRuntimeDiagnostics_test_ts["src/projectAuthRuntimeDiagnostics.test.ts"]
+ module_src_projectAuthRuntimeDiagnostics_ts["src/projectAuthRuntimeDiagnostics.ts"]
module_src_projectIdentity_test_ts["src/projectIdentity.test.ts"]
module_src_projectIdentity_ts["src/projectIdentity.ts"]
module_src_projectSecretApi_test_ts["src/projectSecretApi.test.ts"]
@@ -11684,6 +12485,8 @@ Module relationships
module_src_projectSecretUsage_test_ts["src/projectSecretUsage.test.ts"]
module_src_projectSecretUsage_ts["src/projectSecretUsage.ts"]
module_src_projectWorkspaceContracts_ts["src/projectWorkspaceContracts.ts"]
+ module_src_propertiesAuthoringModel_test_ts["src/propertiesAuthoringModel.test.ts"]
+ module_src_propertiesAuthoringModel_ts["src/propertiesAuthoringModel.ts"]
module_src_root_test_ts["src/root.test.ts"]
module_src_root_ts["src/root.ts"]
module_src_routeUtils_public_test_ts["src/routeUtils.public.test.ts"]
@@ -11724,6 +12527,8 @@ Module relationships
module_src_secretResponseGuard_ts["src/secretResponseGuard.ts"]
module_src_studioAdminRouteModel_test_ts["src/studioAdminRouteModel.test.ts"]
module_src_studioAdminRouteModel_ts["src/studioAdminRouteModel.ts"]
+ module_src_studioRuntimeApi_test_ts["src/studioRuntimeApi.test.ts"]
+ module_src_studioRuntimeApi_ts["src/studioRuntimeApi.ts"]
module_src_studioSelectionModel_knip_test_ts["src/studioSelectionModel.knip.test.ts"]
module_src_studioSelectionModel_test_ts["src/studioSelectionModel.test.ts"]
module_src_studioSelectionModel_ts["src/studioSelectionModel.ts"]
@@ -11839,9 +12644,16 @@ Module relationships
module_src_hooks_useTemplateCatalog_ts --> module_src_core_constants_ts
module_src_hooks_useTemplateCatalog_ts --> module_src_templateCatalogContracts_ts
module_src_hooks_useWorkspaceActions_ts --> module_src_core_constants_ts
+ module_src_host_auth_projectAuthHealthService_ts --> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_host_orchestrator_projectManager_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_host_secrets_projectSecretService_ts
module_src_host_auth_projectAuthHealthService_ts --> module_src_projectAuthHealth_ts
+ module_src_host_auth_projectAuthHealthService_ts --> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts --> module_src_host_auth_projectAuthRuntimeDiagnostics_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_host_orchestrator_infraRuntime_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_host_orchestrator_projectPaths_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthHealth_ts
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthRuntimeDiagnostics_ts
module_src_host_createStudioHost_ts --> module_src_host_orchestrator_infraRuntime_ts
module_src_host_createStudioHost_ts --> module_src_host_orchestrator_moduleManager_ts
module_src_host_createStudioHost_ts --> module_src_host_orchestrator_projectManager_ts
@@ -11853,6 +12665,7 @@ Module relationships
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts --> module_src_host_templateRegistry_index_ts
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts --> module_src_host_layout_templates_auth_oauth_ts
module_src_host_hostLifecycle_smoke_test_ts --> module_src_host_orchestrator_moduleManager_ts
module_src_host_hostLifecycle_smoke_test_ts --> module_src_host_orchestrator_projectManager_ts
module_src_host_hostLifecycle_smoke_test_ts --> module_src_host_templateRegistry_index_ts
@@ -11897,8 +12710,10 @@ Module relationships
module_src_host_layout_layoutGenerator_ts --> module_src_index_ts
module_src_host_layout_layoutGenerator_ts --> module_src_studioAdminRouteModel_ts
module_src_host_layout_templates_auth_adapter_test_ts --> module_src_host_layout_templates_auth_adapter_ts
+ module_src_host_layout_templates_auth_callback_test_ts --> module_src_host_layout_templates_auth_callback_ts
module_src_host_layout_templates_auth_callback_ts --> module_src_host_layout_templates_utils_routes_ts
module_src_host_layout_templates_auth_callback_ts --> module_src_host_layout_utils_escapeStringLiteral_ts
+ module_src_host_layout_templates_auth_oauth_test_ts --> module_src_host_layout_templates_auth_oauth_ts
module_src_host_layout_templates_auth_oauth_ts --> module_src_host_layout_auth_resolveAuthLayoutPlan_ts
module_src_host_layout_templates_auth_oauth_ts --> module_src_host_layout_utils_escapeStringLiteral_ts
module_src_host_layout_templates_auth_screen_ts --> module_src_host_layout_auth_resolveAuthLayoutPlan_ts
@@ -12026,6 +12841,9 @@ Module relationships
module_src_projectAuthApi_ts --> module_src_secretResponseGuard_ts
module_src_projectAuthHealth_test_ts --> module_src_projectAuthHealth_ts
module_src_projectAuthHealth_ts --> module_src_authSettings_ts
+ module_src_projectAuthRuntimeDiagnostics_test_ts --> module_src_projectAuthHealth_ts
+ module_src_projectAuthRuntimeDiagnostics_test_ts --> module_src_projectAuthRuntimeDiagnostics_ts
+ module_src_projectAuthRuntimeDiagnostics_ts --> module_src_projectAuthHealth_ts
module_src_projectIdentity_test_ts --> module_src_projectIdentity_ts
module_src_projectIdentity_test_ts --> module_src_projectWorkspaceContracts_ts
module_src_projectIdentity_ts --> module_src_projectWorkspaceContracts_ts
@@ -12033,6 +12851,7 @@ Module relationships
module_src_projectSecretApi_ts --> module_src_projectSecretUsage_ts
module_src_projectSecretApi_ts --> module_src_secretResponseGuard_ts
module_src_projectSecretUsage_test_ts --> module_src_projectSecretUsage_ts
+ module_src_propertiesAuthoringModel_test_ts --> module_src_index_ts
module_src_routeUtils_public_test_ts --> module_src_routeUtils_ts
module_src_routeUtils_test_ts --> module_src_routeUtils_ts
module_src_routeUtils_ts --> module_src_manifestState_ts
@@ -12061,6 +12880,7 @@ Module relationships
module_src_secretResponseGuard_test_ts --> module_src_secretResponseGuard_ts
module_src_studioAdminRouteModel_test_ts --> module_src_studioAdminRouteModel_ts
module_src_studioAdminRouteModel_ts --> module_src_index_ts
+ module_src_studioRuntimeApi_test_ts --> module_src_studioRuntimeApi_ts
module_src_studioSelectionModel_knip_test_ts --> module_src_studioSelectionModel_ts
module_src_studioSelectionModel_test_ts --> module_src_studioSelectionModel_ts
module_src_ui_admin_AnkhAdminPage_tsx --> module_src_core_StudioContext_ts
@@ -12103,6 +12923,7 @@ Module relationships
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectAuthHealth_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_projectSecretApi_ts
+ module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_studioRuntimeApi_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_AuthAdminSession_tsx
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthCredentialFlow_ts
module_src_ui_admin_pages_AuthAdminPage_tsx --> module_src_ui_admin_pages_adminAuthHealthFlow_ts
@@ -12111,8 +12932,8 @@ Module relationships
module_src_ui_admin_pages_OverviewAdminPage_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_core_StudioContext_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_manifestState_ts
+ module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_propertiesAuthoringModel_ts
module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_ui_admin_adminPagePrimitives_tsx
- module_src_ui_admin_pages_PropertiesAdminPage_tsx --> module_src_ui_admin_adminPageUtils_ts
module_src_ui_admin_pages_SecretsAdminPage_tsx --> module_src_projectSecretApi_ts
module_src_ui_admin_pages_SecretsAdminPage_tsx --> module_src_projectSecretUsage_ts
module_src_ui_admin_pages_SecretsAdminPage_tsx --> module_src_ui_admin_AuthAdminSession_tsx
@@ -12185,9 +13006,12 @@ Export graph
module_src_hooks_useTemplateCatalog_ts["src/hooks/useTemplateCatalog.ts"]
module_src_hooks_useWorkspaceActions_ts["src/hooks/useWorkspaceActions.ts"]
module_src_host_auth_projectAuthHealthService_ts["src/host/auth/projectAuthHealthService.ts"]
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts["src/host/auth/projectAuthRuntimeDiagnostics.test.ts"]
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts["src/host/auth/projectAuthRuntimeDiagnostics.ts"]
module_src_host_createStudioHost_ts["src/host/createStudioHost.ts"]
module_src_host_generatedAdminExpoWeb_smoke_test_ts["src/host/generatedAdminExpoWeb.smoke.test.ts"]
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts["src/host/generatedAuthAdapterRuntime.smoke.test.ts"]
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts["src/host/generatedOAuthLifecycle.e2e.test.ts"]
module_src_host_hostLifecycle_smoke_test_ts["src/host/hostLifecycle.smoke.test.ts"]
module_src_host_hostOwnership_test_ts["src/host/hostOwnership.test.ts"]
module_src_host_http_authRoutes_test_ts["src/host/http/authRoutes.test.ts"]
@@ -12209,7 +13033,9 @@ Export graph
module_src_host_layout_layoutGenerator_ts["src/host/layout/layoutGenerator.ts"]
module_src_host_layout_templates_auth_adapter_test_ts["src/host/layout/templates/auth/adapter.test.ts"]
module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"]
+ module_src_host_layout_templates_auth_callback_test_ts["src/host/layout/templates/auth/callback.test.ts"]
module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"]
+ module_src_host_layout_templates_auth_oauth_test_ts["src/host/layout/templates/auth/oauth.test.ts"]
module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"]
module_src_host_layout_templates_auth_screen_ts["src/host/layout/templates/auth/screen.ts"]
module_src_host_layout_templates_auth_session_ts["src/host/layout/templates/auth/session.ts"]
@@ -12298,6 +13124,8 @@ Export graph
module_src_projectAuthApi_ts["src/projectAuthApi.ts"]
module_src_projectAuthHealth_test_ts["src/projectAuthHealth.test.ts"]
module_src_projectAuthHealth_ts["src/projectAuthHealth.ts"]
+ module_src_projectAuthRuntimeDiagnostics_test_ts["src/projectAuthRuntimeDiagnostics.test.ts"]
+ module_src_projectAuthRuntimeDiagnostics_ts["src/projectAuthRuntimeDiagnostics.ts"]
module_src_projectIdentity_test_ts["src/projectIdentity.test.ts"]
module_src_projectIdentity_ts["src/projectIdentity.ts"]
module_src_projectSecretApi_test_ts["src/projectSecretApi.test.ts"]
@@ -12305,6 +13133,8 @@ Export graph
module_src_projectSecretUsage_test_ts["src/projectSecretUsage.test.ts"]
module_src_projectSecretUsage_ts["src/projectSecretUsage.ts"]
module_src_projectWorkspaceContracts_ts["src/projectWorkspaceContracts.ts"]
+ module_src_propertiesAuthoringModel_test_ts["src/propertiesAuthoringModel.test.ts"]
+ module_src_propertiesAuthoringModel_ts["src/propertiesAuthoringModel.ts"]
module_src_root_test_ts["src/root.test.ts"]
module_src_root_ts["src/root.ts"]
module_src_routeUtils_public_test_ts["src/routeUtils.public.test.ts"]
@@ -12345,6 +13175,8 @@ Export graph
module_src_secretResponseGuard_ts["src/secretResponseGuard.ts"]
module_src_studioAdminRouteModel_test_ts["src/studioAdminRouteModel.test.ts"]
module_src_studioAdminRouteModel_ts["src/studioAdminRouteModel.ts"]
+ module_src_studioRuntimeApi_test_ts["src/studioRuntimeApi.test.ts"]
+ module_src_studioRuntimeApi_ts["src/studioRuntimeApi.ts"]
module_src_studioSelectionModel_knip_test_ts["src/studioSelectionModel.knip.test.ts"]
module_src_studioSelectionModel_test_ts["src/studioSelectionModel.test.ts"]
module_src_studioSelectionModel_ts["src/studioSelectionModel.ts"]
@@ -12406,6 +13238,10 @@ Export graph
export_createNodeFromCatalogEntry -.-> export_InsertCatalogEntry
export_createNodeFromCatalogEntry -.-> export_StudioComponentMetaRegistry
export_createNodeFromCatalogEntry -.-> export_StudioIdGenerator
+ export_createStudioInstancePropertyPatch["createStudioInstancePropertyPatch"]
+ module_src_propertiesAuthoringModel_ts -->
+ export_createStudioInstancePropertyPatch export_createStudioInstancePropertyPatch
+ -.-> export_StudioInstancePropertyValue
export_deriveProjectId["deriveProjectId"] module_src_projectIdentity_ts
--> export_deriveProjectId export_findNodeById["findNodeById"]
module_src_index_ts --> export_findNodeById
@@ -12536,6 +13372,18 @@ Export graph
export_resolveInsertPlacement -.-> export_PlacementKind
export_resolveInsertPlacement -.-> export_PlacementResolutionResult
export_resolveInsertPlacement -.-> export_StudioComponentMetaRegistry
+ export_resolveStudioInstancePropertyFields["resolveStudioInstancePropertyFields"]
+ module_src_propertiesAuthoringModel_ts -->
+ export_resolveStudioInstancePropertyFields
+ export_resolveStudioInstancePropertyFields -.->
+ export_StudioAuthoringComponentMeta export_resolveStudioInstancePropertyFields
+ -.-> export_StudioInstancePropertyField
+ export_resolveStudioInstancePropertyGroups["resolveStudioInstancePropertyGroups"]
+ module_src_propertiesAuthoringModel_ts -->
+ export_resolveStudioInstancePropertyGroups
+ export_resolveStudioInstancePropertyGroups -.->
+ export_StudioAuthoringComponentMeta export_resolveStudioInstancePropertyGroups
+ -.-> export_StudioInstancePropertyGroup
export_STUDIO_INSERT_RECIPES["STUDIO_INSERT_RECIPES"] module_src_index_ts
--> export_STUDIO_INSERT_RECIPES
export_STUDIO_PACKAGE_BOUNDARY["STUDIO_PACKAGE_BOUNDARY"]
@@ -12557,6 +13405,13 @@ Export graph
--> export_StudioAdminRoutePath
export_StudioAdminStaticRoutePath["StudioAdminStaticRoutePath"]
module_src_index_ts --> export_StudioAdminStaticRoutePath
+ export_StudioAuthoringComponentMeta["StudioAuthoringComponentMeta"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringComponentMeta
+ export_StudioAuthoringComponentMeta -.-> export_StudioAuthoringPropSchema
+ export_StudioAuthoringMetaRegistry["StudioAuthoringMetaRegistry"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringMetaRegistry
+ export_StudioAuthoringPropSchema["StudioAuthoringPropSchema"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringPropSchema
export_StudioCommand["StudioCommand"] module_src_index_ts -->
export_StudioCommand
export_StudioComponentBlueprint["StudioComponentBlueprint"]
@@ -12579,6 +13434,17 @@ Export graph
export_StudioEvent["StudioEvent"] module_src_index_ts -->
export_StudioEvent export_StudioIdGenerator["StudioIdGenerator"]
module_src_index_ts --> export_StudioIdGenerator
+ export_StudioInstancePropertyEditorKind["StudioInstancePropertyEditorKind"]
+ module_src_propertiesAuthoringModel_ts -->
+ export_StudioInstancePropertyEditorKind
+ export_StudioInstancePropertyField["StudioInstancePropertyField"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioInstancePropertyField
+ export_StudioInstancePropertyField -.-> export_StudioInstancePropertyEditorKind
+ export_StudioInstancePropertyGroup["StudioInstancePropertyGroup"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioInstancePropertyGroup
+ export_StudioInstancePropertyGroup -.-> export_StudioInstancePropertyField
+ export_StudioInstancePropertyValue["StudioInstancePropertyValue"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioInstancePropertyValue
export_StudioLocale["StudioLocale"] module_src_index_ts -->
export_StudioLocale export_StudioManifest["StudioManifest"]
module_src_index_ts --> export_StudioManifest
@@ -12683,9 +13549,12 @@ Export graph
module_src_hooks_useTemplateCatalog_ts["src/hooks/useTemplateCatalog.ts"]
module_src_hooks_useWorkspaceActions_ts["src/hooks/useWorkspaceActions.ts"]
module_src_host_auth_projectAuthHealthService_ts["src/host/auth/projectAuthHealthService.ts"]
+ module_src_host_auth_projectAuthRuntimeDiagnostics_test_ts["src/host/auth/projectAuthRuntimeDiagnostics.test.ts"]
+ module_src_host_auth_projectAuthRuntimeDiagnostics_ts["src/host/auth/projectAuthRuntimeDiagnostics.ts"]
module_src_host_createStudioHost_ts["src/host/createStudioHost.ts"]
module_src_host_generatedAdminExpoWeb_smoke_test_ts["src/host/generatedAdminExpoWeb.smoke.test.ts"]
module_src_host_generatedAuthAdapterRuntime_smoke_test_ts["src/host/generatedAuthAdapterRuntime.smoke.test.ts"]
+ module_src_host_generatedOAuthLifecycle_e2e_test_ts["src/host/generatedOAuthLifecycle.e2e.test.ts"]
module_src_host_hostLifecycle_smoke_test_ts["src/host/hostLifecycle.smoke.test.ts"]
module_src_host_hostOwnership_test_ts["src/host/hostOwnership.test.ts"]
module_src_host_http_authRoutes_test_ts["src/host/http/authRoutes.test.ts"]
@@ -12707,7 +13576,9 @@ Export graph
module_src_host_layout_layoutGenerator_ts["src/host/layout/layoutGenerator.ts"]
module_src_host_layout_templates_auth_adapter_test_ts["src/host/layout/templates/auth/adapter.test.ts"]
module_src_host_layout_templates_auth_adapter_ts["src/host/layout/templates/auth/adapter.ts"]
+ module_src_host_layout_templates_auth_callback_test_ts["src/host/layout/templates/auth/callback.test.ts"]
module_src_host_layout_templates_auth_callback_ts["src/host/layout/templates/auth/callback.ts"]
+ module_src_host_layout_templates_auth_oauth_test_ts["src/host/layout/templates/auth/oauth.test.ts"]
module_src_host_layout_templates_auth_oauth_ts["src/host/layout/templates/auth/oauth.ts"]
module_src_host_layout_templates_auth_screen_ts["src/host/layout/templates/auth/screen.ts"]
module_src_host_layout_templates_auth_session_ts["src/host/layout/templates/auth/session.ts"]
@@ -12796,6 +13667,8 @@ Export graph
module_src_projectAuthApi_ts["src/projectAuthApi.ts"]
module_src_projectAuthHealth_test_ts["src/projectAuthHealth.test.ts"]
module_src_projectAuthHealth_ts["src/projectAuthHealth.ts"]
+ module_src_projectAuthRuntimeDiagnostics_test_ts["src/projectAuthRuntimeDiagnostics.test.ts"]
+ module_src_projectAuthRuntimeDiagnostics_ts["src/projectAuthRuntimeDiagnostics.ts"]
module_src_projectIdentity_test_ts["src/projectIdentity.test.ts"]
module_src_projectIdentity_ts["src/projectIdentity.ts"]
module_src_projectSecretApi_test_ts["src/projectSecretApi.test.ts"]
@@ -12803,6 +13676,8 @@ Export graph
module_src_projectSecretUsage_test_ts["src/projectSecretUsage.test.ts"]
module_src_projectSecretUsage_ts["src/projectSecretUsage.ts"]
module_src_projectWorkspaceContracts_ts["src/projectWorkspaceContracts.ts"]
+ module_src_propertiesAuthoringModel_test_ts["src/propertiesAuthoringModel.test.ts"]
+ module_src_propertiesAuthoringModel_ts["src/propertiesAuthoringModel.ts"]
module_src_root_test_ts["src/root.test.ts"]
module_src_root_ts["src/root.ts"]
module_src_routeUtils_public_test_ts["src/routeUtils.public.test.ts"]
@@ -12843,6 +13718,8 @@ Export graph
module_src_secretResponseGuard_ts["src/secretResponseGuard.ts"]
module_src_studioAdminRouteModel_test_ts["src/studioAdminRouteModel.test.ts"]
module_src_studioAdminRouteModel_ts["src/studioAdminRouteModel.ts"]
+ module_src_studioRuntimeApi_test_ts["src/studioRuntimeApi.test.ts"]
+ module_src_studioRuntimeApi_ts["src/studioRuntimeApi.ts"]
module_src_studioSelectionModel_knip_test_ts["src/studioSelectionModel.knip.test.ts"]
module_src_studioSelectionModel_test_ts["src/studioSelectionModel.test.ts"]
module_src_studioSelectionModel_ts["src/studioSelectionModel.ts"]
@@ -12907,6 +13784,9 @@ Export graph
export_createNodeFromCatalogEntry -.-> export_InsertCatalogEntry
export_createNodeFromCatalogEntry -.-> export_StudioComponentMetaRegistry
export_createNodeFromCatalogEntry -.-> export_StudioIdGenerator
+ export_createStudioInstancePropertyPatch["createStudioInstancePropertyPatch"]
+ module_src_propertiesAuthoringModel_ts --> export_createStudioInstancePropertyPatch
+ export_createStudioInstancePropertyPatch -.-> export_StudioInstancePropertyValue
export_deriveProjectId["deriveProjectId"]
module_src_projectIdentity_ts --> export_deriveProjectId
export_findNodeById["findNodeById"]
@@ -13040,6 +13920,14 @@ Export graph
export_resolveInsertPlacement -.-> export_PlacementKind
export_resolveInsertPlacement -.-> export_PlacementResolutionResult
export_resolveInsertPlacement -.-> export_StudioComponentMetaRegistry
+ export_resolveStudioInstancePropertyFields["resolveStudioInstancePropertyFields"]
+ module_src_propertiesAuthoringModel_ts --> export_resolveStudioInstancePropertyFields
+ export_resolveStudioInstancePropertyFields -.-> export_StudioAuthoringComponentMeta
+ export_resolveStudioInstancePropertyFields -.-> export_StudioInstancePropertyField
+ export_resolveStudioInstancePropertyGroups["resolveStudioInstancePropertyGroups"]
+ module_src_propertiesAuthoringModel_ts --> export_resolveStudioInstancePropertyGroups
+ export_resolveStudioInstancePropertyGroups -.-> export_StudioAuthoringComponentMeta
+ export_resolveStudioInstancePropertyGroups -.-> export_StudioInstancePropertyGroup
export_STUDIO_INSERT_RECIPES["STUDIO_INSERT_RECIPES"]
module_src_index_ts --> export_STUDIO_INSERT_RECIPES
export_STUDIO_PACKAGE_BOUNDARY["STUDIO_PACKAGE_BOUNDARY"]
@@ -13061,6 +13949,13 @@ Export graph
module_src_index_ts --> export_StudioAdminRoutePath
export_StudioAdminStaticRoutePath["StudioAdminStaticRoutePath"]
module_src_index_ts --> export_StudioAdminStaticRoutePath
+ export_StudioAuthoringComponentMeta["StudioAuthoringComponentMeta"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringComponentMeta
+ export_StudioAuthoringComponentMeta -.-> export_StudioAuthoringPropSchema
+ export_StudioAuthoringMetaRegistry["StudioAuthoringMetaRegistry"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringMetaRegistry
+ export_StudioAuthoringPropSchema["StudioAuthoringPropSchema"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioAuthoringPropSchema
export_StudioCommand["StudioCommand"]
module_src_index_ts --> export_StudioCommand
export_StudioComponentBlueprint["StudioComponentBlueprint"]
@@ -13088,6 +13983,16 @@ Export graph
module_src_index_ts --> export_StudioEvent
export_StudioIdGenerator["StudioIdGenerator"]
module_src_index_ts --> export_StudioIdGenerator
+ export_StudioInstancePropertyEditorKind["StudioInstancePropertyEditorKind"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioInstancePropertyEditorKind
+ export_StudioInstancePropertyField["StudioInstancePropertyField"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioInstancePropertyField
+ export_StudioInstancePropertyField -.-> export_StudioInstancePropertyEditorKind
+ export_StudioInstancePropertyGroup["StudioInstancePropertyGroup"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioInstancePropertyGroup
+ export_StudioInstancePropertyGroup -.-> export_StudioInstancePropertyField
+ export_StudioInstancePropertyValue["StudioInstancePropertyValue"]
+ module_src_propertiesAuthoringModel_ts --> export_StudioInstancePropertyValue
export_StudioLocale["StudioLocale"]
module_src_index_ts --> export_StudioLocale
export_StudioManifest["StudioManifest"]
@@ -13288,6 +14193,35 @@ findNodeById sequence
participant participant_findNodeById as findNodeById
participant_findNodeById->>participant_findNodeById: findNodeById()
participant_findNodeById-->>participant_findNodeById: return
+
+
+
+
+ resolveStudioInstancePropertyGroups sequence
+
+ diagrams/sequences/resolve-studio-instance-property-groups.mmd
+
+
+ sequenceDiagram participant participant_resolveStudioInstancePropertyFields as
+ resolveStudioInstancePropertyFields participant
+ participant_resolveStudioInstancePropertyGroups as
+ resolveStudioInstancePropertyGroups
+ participant_resolveStudioInstancePropertyGroups->>participant_resolveStudioInstancePropertyFields:
+ resolveStudioInstancePropertyFields()
+ participant_resolveStudioInstancePropertyFields-->>participant_resolveStudioInstancePropertyGroups:
+ return
+
+
+ View Mermaid source
+
+sequenceDiagram
+ participant participant_resolveStudioInstancePropertyFields as resolveStudioInstancePropertyFields
+ participant participant_resolveStudioInstancePropertyGroups as resolveStudioInstancePropertyGroups
+ participant_resolveStudioInstancePropertyGroups->>participant_resolveStudioInstancePropertyFields: resolveStudioInstancePropertyFields()
+ participant_resolveStudioInstancePropertyFields-->>participant_resolveStudioInstancePropertyGroups: return
@@ -14841,58 +15775,166 @@ isRecord
src/hooks/useTemplateCatalog.ts:7:1
No description available.
-
- isCatalogCategory
- src/hooks/useTemplateCatalog.ts:11:1
+
+ isCatalogCategory
+ src/hooks/useTemplateCatalog.ts:11:1
+ No description available.
+
+
+ parseTemplateCatalog
+ src/hooks/useTemplateCatalog.ts:34:1
+ No description available.
+
+
+ useTemplateCatalog
+ src/hooks/useTemplateCatalog.ts:46:1
+ No description available.
+
+
+
+
+
+ src/hooks/useWorkspaceActions.ts
+
+ isRecord
+ src/hooks/useWorkspaceActions.ts:10:1
+ No description available.
+
+
+ readJson
+ src/hooks/useWorkspaceActions.ts:14:1
+ No description available.
+
+
+ parseInstallWorkspacePackagesResponse
+ src/hooks/useWorkspaceActions.ts:18:1
+ No description available.
+
+
+ useWorkspaceActions
+ src/hooks/useWorkspaceActions.ts:29:1
+ No description available.
+
+
+
+
+
+ src/host/auth/projectAuthHealthService.ts
+
+ resolveAuthRedirectEnvironment
+ src/host/auth/projectAuthHealthService.ts:104:1
+ No description available.
+
+
+
+
-
-
- src/hooks/useWorkspaceActions.ts
-
- isRecord
- src/hooks/useWorkspaceActions.ts:10:1
+
+ splitCommaSeparated
+ src/host/auth/projectAuthRuntimeDiagnostics.ts:234:1
No description available.
-
- readJson
- src/hooks/useWorkspaceActions.ts:14:1
+
+ readSafeStatusValue
+ src/host/auth/projectAuthRuntimeDiagnostics.ts:242:1
No description available.
- parseInstallWorkspacePackagesResponse
- src/hooks/useWorkspaceActions.ts:18:1
+ isExactWebCallbackUrl
+ src/host/auth/projectAuthRuntimeDiagnostics.ts:248:1
No description available.
- useWorkspaceActions
- src/hooks/useWorkspaceActions.ts:29:1
+ exists
+ src/host/auth/projectAuthRuntimeDiagnostics.ts:252:1
No description available.
@@ -15421,6 +16463,104 @@ expectAuthError
+
+
+ src/host/generatedOAuthLifecycle.e2e.test.ts
+
+ runIsolatedScenario
+ src/host/generatedOAuthLifecycle.e2e.test.ts:83:1
+ No description available.
+
+
+ runSuccessfulCallbackScenario
+ src/host/generatedOAuthLifecycle.e2e.test.ts:103:1
+ No description available.
+
+
+ runProviderDenialScenario
+ src/host/generatedOAuthLifecycle.e2e.test.ts:140:1
+ No description available.
+
+
+ createHarness
+ src/host/generatedOAuthLifecycle.e2e.test.ts:171:1
+ No description available.
+
+
+ writeDocument
+ src/host/generatedOAuthLifecycle.e2e.test.ts:203:1
+ No description available.
+
+
+ createGeneratedOAuthSource
+ src/host/generatedOAuthLifecycle.e2e.test.ts:270:1
+ No description available.
+
+
+ readTransportMarker
+ src/host/generatedOAuthLifecycle.e2e.test.ts:291:1
+ No description available.
+
+
+ hasPkceVerifier
+ src/host/generatedOAuthLifecycle.e2e.test.ts:307:1
+ No description available.
+
+
+ waitFor
+ src/host/generatedOAuthLifecycle.e2e.test.ts:311:1
+ No description available.
+
+
+ moduleUrl
+ src/host/generatedOAuthLifecycle.e2e.test.ts:319:1
+ No description available.
+
+
+ isRecord
+ src/host/generatedOAuthLifecycle.e2e.test.ts:323:1
+ No description available.
+
+
+
registerProjectAuthRoutes
data-search="sendProjectAuthHealthResult src/host/http/authRoutes.ts "
>
sendProjectAuthHealthResult
- src/host/http/authRoutes.ts:45:1
+ src/host/http/authRoutes.ts:46:1
No description available.
@@ -16202,6 +17342,24 @@ getAuthOAuthCallbackTsx
+
+
+ src/host/layout/templates/auth/oauth.test.ts
+
+ createOAuthRuntime
+ src/host/layout/templates/auth/oauth.test.ts:5:1
+ No description available.
+
+
+
createRoot
src/index.ts
generateStudioId
- src/index.ts:509:14
+ src/index.ts:513:14
No description available.
cloneWithNewIds
- src/index.ts:516:14
+ src/index.ts:520:14
No description available.
findNodeById
- src/index.ts:533:14
+ src/index.ts:537:14
No description available.
updateNodeInTree
- src/index.ts:545:14
+ src/index.ts:549:14
No description available.
removeNodeFromTree
- src/index.ts:573:14
+ src/index.ts:577:14
No description available.
addNodeToTree
- src/index.ts:591:14
+ src/index.ts:595:14
No description available.
moveNodeInTree
- src/index.ts:624:14
+ src/index.ts:628:14
No description available.
findNodeWithParent
- src/index.ts:660:1
+ src/index.ts:664:1
No description available.
visit
- src/index.ts:665:9
+ src/index.ts:669:9
No description available.
isDescendantNode
- src/index.ts:684:1
+ src/index.ts:688:1
No description available.
removeNodeForMove
- src/index.ts:695:1
+ src/index.ts:699:1
No description available.
canAcceptChild
- src/index.ts:750:1
+ src/index.ts:754:1
No description available.
validateNodePlacement
- src/index.ts:762:1
+ src/index.ts:766:1
No description available.
resolveInsertPlacement
- src/index.ts:817:1
+ src/index.ts:821:1
No description available.
resolveDefaultInsertPlacement
- src/index.ts:878:1
+ src/index.ts:882:1
No description available.
insertChildAtIndex
- src/index.ts:935:1
+ src/index.ts:939:1
No description available.
insertNodeAtPlacement
- src/index.ts:980:1
+ src/index.ts:984:1
No description available.
getAdjustedMovePlacement
- src/index.ts:1019:1
+ src/index.ts:1023:1
No description available.
moveNodeToPlacement
- src/index.ts:1048:1
+ src/index.ts:1052:1
No description available.
getInsertCatalogCategoryLabel
- src/index.ts:1148:1
+ src/index.ts:1152:1
No description available.
resolveCategoryOrder
- src/index.ts:1152:1
+ src/index.ts:1156:1
No description available.
describeInsertRecipeIssue
- src/index.ts:1157:1
+ src/index.ts:1161:1
No description available.
validateInsertRecipe
- src/index.ts:1165:1
+ src/index.ts:1169:1
No description available.
visit
- src/index.ts:1169:9
+ src/index.ts:1173:9
No description available.
createNodeFromRecipe
- src/index.ts:1202:1
+ src/index.ts:1206:1
No description available.
buildNode
- src/index.ts:1207:9
+ src/index.ts:1211:9
No description available.
createNodeFromCatalogEntry
- src/index.ts:1222:1
+ src/index.ts:1226:1
No description available.
createComponentEntry
- src/index.ts:1242:1
+ src/index.ts:1246:1
No description available.
createRecipeEntry
- src/index.ts:1265:1
+ src/index.ts:1269:1
No description available.
buildInsertCatalogEntries
- src/index.ts:1303:1
+ src/index.ts:1307:1
No description available.
resolvePlacementForEntry
- src/index.ts:1329:1
+ src/index.ts:1333:1
No description available.
resolveInsertCatalogEntries
- src/index.ts:1345:1
+ src/index.ts:1349:1
No description available.
isStyleRecord
- src/index.ts:1394:1
+ src/index.ts:1398:1
No description available.
@@ -19567,6 +20725,56 @@ sortDiagnostics
+
+
+
+ src/propertiesAuthoringModel.ts
+
+ resolveStudioInstancePropertyFields
+ src/propertiesAuthoringModel.ts:45:1
+ No description available.
+
+
+ resolveStudioInstancePropertyGroups
+ src/propertiesAuthoringModel.ts:74:1
+ No description available.
+
+
+ createStudioInstancePropertyPatch
+ src/propertiesAuthoringModel.ts:89:1
+ No description available.
+
+
+ resolveEditorKind
+ src/propertiesAuthoringModel.ts:102:1
+ No description available.
+
+
+
resolveStudioLastNonAdminLocation
+
+
+ src/studioRuntimeApi.test.ts
+
+ requestUrl
+ src/studioRuntimeApi.test.ts:54:1
+ No description available.
+
+
+ captureError
+ src/studioRuntimeApi.test.ts:60:1
+ No description available.
+
+
+
+
+
+ src/studioRuntimeApi.ts
+
+ syncStudioRuntime
+ src/studioRuntimeApi.ts:1:1
+ No description available.
+
+
+ readJson
+ src/studioRuntimeApi.ts:26:1
+ No description available.
+
+
+ readErrorMessage
+ src/studioRuntimeApi.ts:34:1
+ No description available.
+
+
+
ApisAdminPage
src/ui/admin/pages/AuthAdminPage.tsx
AuthAdminPage
- src/ui/admin/pages/AuthAdminPage.tsx:64:1
+ src/ui/admin/pages/AuthAdminPage.tsx:65:1
No description available.
AuthAdminPage
data-search="PendingCredentialLinkCard src/ui/admin/pages/AuthAdminPage.tsx "
>
PendingCredentialLinkCard
- src/ui/admin/pages/AuthAdminPage.tsx:583:1
+ src/ui/admin/pages/AuthAdminPage.tsx:588:1
No description available.
PendingCredentialLinkCard
data-search="OAuthProviderSetting src/ui/admin/pages/AuthAdminPage.tsx "
>
OAuthProviderSetting
- src/ui/admin/pages/AuthAdminPage.tsx:608:1
+ src/ui/admin/pages/AuthAdminPage.tsx:613:1
No description available.
setEnabled
- src/ui/admin/pages/AuthAdminPage.tsx:642:9
+ src/ui/admin/pages/AuthAdminPage.tsx:647:9
No description available.
setEnabled
data-search="saveCredentials src/ui/admin/pages/AuthAdminPage.tsx "
>
saveCredentials
- src/ui/admin/pages/AuthAdminPage.tsx:668:9
+ src/ui/admin/pages/AuthAdminPage.tsx:673:9
No description available.
saveCredentials
data-search="upsertProvider src/ui/admin/pages/AuthAdminPage.tsx "
>
upsertProvider
- src/ui/admin/pages/AuthAdminPage.tsx:788:1
+ src/ui/admin/pages/AuthAdminPage.tsx:793:1
No description available.
updateFlow
- src/ui/admin/pages/AuthAdminPage.tsx:799:1
+ src/ui/admin/pages/AuthAdminPage.tsx:804:1
No description available.
omitSignUp
- src/ui/admin/pages/AuthAdminPage.tsx:806:1
+ src/ui/admin/pages/AuthAdminPage.tsx:811:1
No description available.
omitProfile
- src/ui/admin/pages/AuthAdminPage.tsx:811:1
+ src/ui/admin/pages/AuthAdminPage.tsx:816:1
No description available.
omitProfile
data-search="createDefaultSettings src/ui/admin/pages/AuthAdminPage.tsx "
>
createDefaultSettings
- src/ui/admin/pages/AuthAdminPage.tsx:816:1
+ src/ui/admin/pages/AuthAdminPage.tsx:821:1
No description available.
createDefaultSettings
data-search="createDefaultOAuth src/ui/admin/pages/AuthAdminPage.tsx "
>
createDefaultOAuth
- src/ui/admin/pages/AuthAdminPage.tsx:826:1
+ src/ui/admin/pages/AuthAdminPage.tsx:831:1
No description available.
createDefaultOAuth
data-search="createFallbackManifest src/ui/admin/pages/AuthAdminPage.tsx "
>
createFallbackManifest
- src/ui/admin/pages/AuthAdminPage.tsx:834:1
+ src/ui/admin/pages/AuthAdminPage.tsx:839:1
No description available.
splitList
- src/ui/admin/pages/AuthAdminPage.tsx:852:1
+ src/ui/admin/pages/AuthAdminPage.tsx:857:1
No description available.
toMessage
- src/ui/admin/pages/AuthAdminPage.tsx:863:1
+ src/ui/admin/pages/AuthAdminPage.tsx:868:1
No description available.
toMessage
data-search="formatAuthAdminWriteBusyReason src/ui/admin/pages/AuthAdminPage.tsx "
>
formatAuthAdminWriteBusyReason
- src/ui/admin/pages/AuthAdminPage.tsx:868:1
+ src/ui/admin/pages/AuthAdminPage.tsx:873:1
No description available.
formatAuthAdminWriteBusyReason
data-search="AuthHealthCard src/ui/admin/pages/AuthAdminPage.tsx "
>
AuthHealthCard
- src/ui/admin/pages/AuthAdminPage.tsx:886:1
+ src/ui/admin/pages/AuthAdminPage.tsx:891:1
No description available.
AuthHealthCard
data-search="formatHealthStatus src/ui/admin/pages/AuthAdminPage.tsx "
>
formatHealthStatus
- src/ui/admin/pages/AuthAdminPage.tsx:946:1
+ src/ui/admin/pages/AuthAdminPage.tsx:951:1
No description available.
formatHealthStatus
data-search="formatProviderHealthStatus src/ui/admin/pages/AuthAdminPage.tsx "
>
formatProviderHealthStatus
- src/ui/admin/pages/AuthAdminPage.tsx:953:1
+ src/ui/admin/pages/AuthAdminPage.tsx:958:1
No description available.
formatProviderHealthStatus
data-search="healthStatusColor src/ui/admin/pages/AuthAdminPage.tsx "
>
healthStatusColor
- src/ui/admin/pages/AuthAdminPage.tsx:961:1
+ src/ui/admin/pages/AuthAdminPage.tsx:966:1
No description available.
healthStatusColor
data-search="diagnosticSeverityColor src/ui/admin/pages/AuthAdminPage.tsx "
>
diagnosticSeverityColor
- src/ui/admin/pages/AuthAdminPage.tsx:968:1
+ src/ui/admin/pages/AuthAdminPage.tsx:973:1
No description available.
Card
- src/ui/admin/pages/AuthAdminPage.tsx:974:1
+ src/ui/admin/pages/AuthAdminPage.tsx:979:1
No description available.
Field
- src/ui/admin/pages/AuthAdminPage.tsx:989:1
+ src/ui/admin/pages/AuthAdminPage.tsx:994:1
No description available.
RouteField
- src/ui/admin/pages/AuthAdminPage.tsx:1000:1
+ src/ui/admin/pages/AuthAdminPage.tsx:1005:1
No description available.
Input
- src/ui/admin/pages/AuthAdminPage.tsx:1012:1
+ src/ui/admin/pages/AuthAdminPage.tsx:1017:1
No description available.
SwitchSetting
- src/ui/admin/pages/AuthAdminPage.tsx:1031:1
+ src/ui/admin/pages/AuthAdminPage.tsx:1036:1
No description available.
Choice
- src/ui/admin/pages/AuthAdminPage.tsx:1050:1
+ src/ui/admin/pages/AuthAdminPage.tsx:1055:1
No description available.
KeyValue
- src/ui/admin/pages/AuthAdminPage.tsx:1074:1
+ src/ui/admin/pages/AuthAdminPage.tsx:1079:1
No description available.
PrimaryButton
- src/ui/admin/pages/AuthAdminPage.tsx:1085:1
+ src/ui/admin/pages/AuthAdminPage.tsx:1090:1
No description available.
PrimaryButton
data-search="SecondaryButton src/ui/admin/pages/AuthAdminPage.tsx "
>
SecondaryButton
- src/ui/admin/pages/AuthAdminPage.tsx:1108:1
+ src/ui/admin/pages/AuthAdminPage.tsx:1113:1
No description available.
Message
- src/ui/admin/pages/AuthAdminPage.tsx:1120:1
+ src/ui/admin/pages/AuthAdminPage.tsx:1125:1
No description available.
@@ -21750,15 +23042,84 @@ src/ui/admin/pages/PropertiesAdminPage.tsx
data-search="PropertiesAdminPage src/ui/admin/pages/PropertiesAdminPage.tsx "
>
PropertiesAdminPage
- src/ui/admin/pages/PropertiesAdminPage.tsx:10:1
+ src/ui/admin/pages/PropertiesAdminPage.tsx:16:1
+ No description available.
+
+
+ ResolvedProperties
+ src/ui/admin/pages/PropertiesAdminPage.tsx:41:1
+ No description available.
+
+
+ updateProperty
+ src/ui/admin/pages/PropertiesAdminPage.tsx:45:9
+ No description available.
+
+
+ InstancePropertyEditor
+ src/ui/admin/pages/PropertiesAdminPage.tsx:81:1
+ No description available.
+
+
+ NumberPropertyInput
+ src/ui/admin/pages/PropertiesAdminPage.tsx:110:1
+ No description available.
+
+
+ commit
+ src/ui/admin/pages/PropertiesAdminPage.tsx:123:9
+ No description available.
+
+
+ BooleanPropertyInput
+ src/ui/admin/pages/PropertiesAdminPage.tsx:159:1
+ No description available.
+
+
+ ChoicePropertyInput
+ src/ui/admin/pages/PropertiesAdminPage.tsx:178:1
+ No description available.
+
+
+ UnavailableNode
+ src/ui/admin/pages/PropertiesAdminPage.tsx:204:1
+ No description available.
+
+
+ NoInstanceProperties
+ src/ui/admin/pages/PropertiesAdminPage.tsx:214:1
No description available.
- NodeProps
- src/ui/admin/pages/PropertiesAdminPage.tsx:53:1
+ toInputText
+ src/ui/admin/pages/PropertiesAdminPage.tsx:224:1
No description available.
diff --git a/paradox/paradox.json b/paradox/paradox.json
index 1454420..57a0e8b 100644
--- a/paradox/paradox.json
+++ b/paradox/paradox.json
@@ -12,7 +12,7 @@
{
"id": "npm",
"label": "npm",
- "value": "v0.11.4",
+ "value": "v0.11.11",
"color": "cb3837"
},
{
@@ -578,12 +578,37 @@
"path": "src/host/auth/projectAuthHealthService.ts",
"isEntrypoint": false,
"dependencies": [
+ "src/host/auth/projectAuthRuntimeDiagnostics.ts",
"src/host/orchestrator/projectManager.ts",
"src/host/secrets/projectSecretService.ts",
- "src/projectAuthHealth.ts"
+ "src/projectAuthHealth.ts",
+ "src/projectAuthRuntimeDiagnostics.ts"
],
"exports": ["ProjectAuthHealthResult", "ProjectAuthHealthService"]
},
+ {
+ "path": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/host/auth/projectAuthRuntimeDiagnostics.ts"],
+ "exports": []
+ },
+ {
+ "path": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "isEntrypoint": false,
+ "dependencies": [
+ "src/host/orchestrator/infraRuntime.ts",
+ "src/host/orchestrator/projectPaths.ts",
+ "src/projectAuthHealth.ts",
+ "src/projectAuthRuntimeDiagnostics.ts"
+ ],
+ "exports": [
+ "observeProjectAuthRuntimeDiagnostics",
+ "ParsedProjectAuthRuntimeStatus",
+ "parseProjectAuthRuntimeStatus",
+ "ProjectAuthRedirectRuntime",
+ "resolveProjectAuthRedirectRuntime"
+ ]
+ },
{
"path": "src/host/createStudioHost.ts",
"isEntrypoint": false,
@@ -616,6 +641,12 @@
],
"exports": []
},
+ {
+ "path": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/host/layout/templates/auth/oauth.ts"],
+ "exports": []
+ },
{
"path": "src/host/hostLifecycle.smoke.test.ts",
"isEntrypoint": false,
@@ -827,6 +858,12 @@
"dependencies": [],
"exports": ["getAuthAdapterTs"]
},
+ {
+ "path": "src/host/layout/templates/auth/callback.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/host/layout/templates/auth/callback.ts"],
+ "exports": []
+ },
{
"path": "src/host/layout/templates/auth/callback.ts",
"isEntrypoint": false,
@@ -836,6 +873,12 @@
],
"exports": ["getAuthOAuthCallbackTsx"]
},
+ {
+ "path": "src/host/layout/templates/auth/oauth.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/host/layout/templates/auth/oauth.ts"],
+ "exports": []
+ },
{
"path": "src/host/layout/templates/auth/oauth.ts",
"isEntrypoint": false,
@@ -1407,6 +1450,7 @@
"canAcceptChild",
"cloneWithNewIds",
"createNodeFromCatalogEntry",
+ "createStudioInstancePropertyPatch",
"deriveProjectId",
"findNodeById",
"generateStudioId",
@@ -1454,6 +1498,8 @@
"resolveDefaultInsertPlacement",
"resolveInsertCatalogEntries",
"resolveInsertPlacement",
+ "resolveStudioInstancePropertyFields",
+ "resolveStudioInstancePropertyGroups",
"STUDIO_INSERT_RECIPES",
"STUDIO_PACKAGE_BOUNDARY",
"STUDIO_PACKAGE_NAME",
@@ -1464,6 +1510,9 @@
"StudioAdminRouteId",
"StudioAdminRoutePath",
"StudioAdminStaticRoutePath",
+ "StudioAuthoringComponentMeta",
+ "StudioAuthoringMetaRegistry",
+ "StudioAuthoringPropSchema",
"StudioCommand",
"StudioComponentBlueprint",
"StudioComponentMeta",
@@ -1471,6 +1520,10 @@
"StudioContextValue",
"StudioEvent",
"StudioIdGenerator",
+ "StudioInstancePropertyEditorKind",
+ "StudioInstancePropertyField",
+ "StudioInstancePropertyGroup",
+ "StudioInstancePropertyValue",
"StudioLocale",
"StudioManifest",
"StudioMode",
@@ -1718,6 +1771,22 @@
"ProjectOAuthProviderHealthStatus"
]
},
+ {
+ "path": "src/projectAuthRuntimeDiagnostics.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/projectAuthHealth.ts", "src/projectAuthRuntimeDiagnostics.ts"],
+ "exports": []
+ },
+ {
+ "path": "src/projectAuthRuntimeDiagnostics.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/projectAuthHealth.ts"],
+ "exports": [
+ "applyProjectAuthRuntimeDiagnostics",
+ "ProjectAuthRuntimeDiagnostics",
+ "ProjectAuthRuntimeRolloutStatus"
+ ]
+ },
{
"path": "src/projectIdentity.test.ts",
"isEntrypoint": false,
@@ -1793,6 +1862,29 @@
"StudioProjectSummary"
]
},
+ {
+ "path": "src/propertiesAuthoringModel.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/index.ts"],
+ "exports": []
+ },
+ {
+ "path": "src/propertiesAuthoringModel.ts",
+ "isEntrypoint": false,
+ "dependencies": [],
+ "exports": [
+ "createStudioInstancePropertyPatch",
+ "resolveStudioInstancePropertyFields",
+ "resolveStudioInstancePropertyGroups",
+ "StudioAuthoringComponentMeta",
+ "StudioAuthoringMetaRegistry",
+ "StudioAuthoringPropSchema",
+ "StudioInstancePropertyEditorKind",
+ "StudioInstancePropertyField",
+ "StudioInstancePropertyGroup",
+ "StudioInstancePropertyValue"
+ ]
+ },
{
"path": "src/root.test.ts",
"isEntrypoint": false,
@@ -1819,6 +1911,7 @@
"CreateCategoryTemplatesScreen",
"createNodeFromCatalogEntry",
"CreateProjectFromTemplateScreen",
+ "createStudioInstancePropertyPatch",
"deriveProjectId",
"findNodeById",
"findProjectSecretUsages",
@@ -1872,6 +1965,8 @@
"resolveDefaultInsertPlacement",
"resolveInsertCatalogEntries",
"resolveInsertPlacement",
+ "resolveStudioInstancePropertyFields",
+ "resolveStudioInstancePropertyGroups",
"STUDIO_INSERT_RECIPES",
"STUDIO_PACKAGE_BOUNDARY",
"STUDIO_PACKAGE_NAME",
@@ -1883,6 +1978,9 @@
"StudioAdminRoutePath",
"StudioAdminStaticRoutePath",
"StudioApp",
+ "StudioAuthoringComponentMeta",
+ "StudioAuthoringMetaRegistry",
+ "StudioAuthoringPropSchema",
"StudioCommand",
"StudioComponentBlueprint",
"StudioComponentMeta",
@@ -1890,6 +1988,10 @@
"StudioContextValue",
"StudioEvent",
"StudioIdGenerator",
+ "StudioInstancePropertyEditorKind",
+ "StudioInstancePropertyField",
+ "StudioInstancePropertyGroup",
+ "StudioInstancePropertyValue",
"StudioLocale",
"StudioManifest",
"StudioMode",
@@ -2325,6 +2427,18 @@
"StudioAdminRouteRenderState"
]
},
+ {
+ "path": "src/studioRuntimeApi.test.ts",
+ "isEntrypoint": false,
+ "dependencies": ["src/studioRuntimeApi.ts"],
+ "exports": []
+ },
+ {
+ "path": "src/studioRuntimeApi.ts",
+ "isEntrypoint": false,
+ "dependencies": [],
+ "exports": ["syncStudioRuntime"]
+ },
{
"path": "src/studioSelectionModel.knip.test.ts",
"isEntrypoint": false,
@@ -2544,6 +2658,7 @@
"src/projectAuthApi.ts",
"src/projectAuthHealth.ts",
"src/projectSecretApi.ts",
+ "src/studioRuntimeApi.ts",
"src/ui/admin/AuthAdminSession.tsx",
"src/ui/admin/pages/adminAuthCredentialFlow.ts",
"src/ui/admin/pages/adminAuthHealthFlow.ts",
@@ -2569,8 +2684,8 @@
"dependencies": [
"src/core/StudioContext.ts",
"src/manifestState.ts",
- "src/ui/admin/adminPagePrimitives.tsx",
- "src/ui/admin/adminPageUtils.ts"
+ "src/propertiesAuthoringModel.ts",
+ "src/ui/admin/adminPagePrimitives.tsx"
],
"exports": ["PropertiesAdminPage"]
},
@@ -2691,7 +2806,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 369,
+ "line": 373,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -2709,7 +2824,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 279,
+ "line": 283,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -2763,7 +2878,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 591,
+ "line": 595,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -2795,7 +2910,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1303,
+ "line": 1307,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -2827,7 +2942,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 750,
+ "line": 754,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -2859,7 +2974,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 516,
+ "line": 520,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -2897,7 +3012,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1222,
+ "line": 1226,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -2932,6 +3047,50 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "createStudioInstancePropertyPatch",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 89,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioInstancePropertyValue"],
+ "signatures": [
+ {
+ "label": "(node: UiNode, propertyName: string, value: StudioInstancePropertyValue | undefined) => Readonly>",
+ "parameters": [
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "propertyName",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "value",
+ "type": "StudioInstancePropertyValue | undefined",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "Readonly>",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "deriveProjectId",
"description": null,
@@ -2973,7 +3132,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 533,
+ "line": 537,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -3011,7 +3170,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 509,
+ "line": 513,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -3043,7 +3202,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1148,
+ "line": 1152,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3075,7 +3234,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 257,
+ "line": 261,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3168,7 +3327,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 239,
+ "line": 243,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3208,7 +3367,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 216,
+ "line": 220,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3226,7 +3385,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 267,
+ "line": 271,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3244,7 +3403,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 245,
+ "line": 249,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3331,7 +3490,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 213,
+ "line": 217,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3349,7 +3508,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 214,
+ "line": 218,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3367,7 +3526,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 262,
+ "line": 266,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3461,7 +3620,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 980,
+ "line": 984,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3493,7 +3652,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 923,
+ "line": 927,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3540,7 +3699,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 930,
+ "line": 934,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3573,7 +3732,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 224,
+ "line": 228,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3627,7 +3786,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 232,
+ "line": 236,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3674,7 +3833,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 219,
+ "line": 223,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3707,7 +3866,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 287,
+ "line": 291,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3754,7 +3913,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 624,
+ "line": 628,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -3798,7 +3957,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1048,
+ "line": 1052,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3830,7 +3989,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1007,
+ "line": 1011,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3877,7 +4036,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1014,
+ "line": 1018,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3910,7 +4069,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 175,
+ "line": 179,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3957,7 +4116,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 182,
+ "line": 186,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -3975,7 +4134,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 194,
+ "line": 198,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4008,7 +4167,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 173,
+ "line": 177,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4026,7 +4185,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 206,
+ "line": 210,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4044,7 +4203,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 199,
+ "line": 203,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4520,7 +4679,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 573,
+ "line": 577,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -4558,7 +4717,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 878,
+ "line": 882,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4590,7 +4749,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1345,
+ "line": 1349,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4622,7 +4781,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 817,
+ "line": 821,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4649,6 +4808,82 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "resolveStudioInstancePropertyFields",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 45,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioAuthoringComponentMeta", "StudioInstancePropertyField"],
+ "signatures": [
+ {
+ "label": "(node: UiNode, registry: Readonly>) => readonly StudioInstancePropertyField[]",
+ "parameters": [
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "registry",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "readonly StudioInstancePropertyField[]",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "resolveStudioInstancePropertyGroups",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "function",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 74,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioAuthoringComponentMeta", "StudioInstancePropertyGroup"],
+ "signatures": [
+ {
+ "label": "(node: UiNode, registry: Readonly>) => readonly StudioInstancePropertyGroup[]",
+ "parameters": [
+ {
+ "name": "node",
+ "type": "UiNode",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "registry",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "returnType": "readonly StudioInstancePropertyGroup[]",
+ "returnDescription": null
+ }
+ ],
+ "members": [],
+ "structuredRows": []
+ },
{
"name": "STUDIO_INSERT_RECIPES",
"description": null,
@@ -4658,7 +4893,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1115,
+ "line": 1119,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -4701,7 +4936,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 57,
+ "line": 58,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -4719,7 +4954,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 49,
+ "line": 50,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -4737,7 +4972,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 85,
+ "line": 86,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -4755,7 +4990,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 271,
+ "line": 275,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4795,7 +5030,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 269,
+ "line": 273,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4813,7 +5048,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 277,
+ "line": 281,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4831,7 +5066,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 117,
+ "line": 121,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4849,7 +5084,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 140,
+ "line": 144,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4867,7 +5102,58 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 129,
+ "line": 133,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioAuthoringComponentMeta",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 14,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioAuthoringPropSchema"],
+ "signatures": [],
+ "members": [
+ {
+ "name": "name",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "props",
+ "kind": "property",
+ "type": "Readonly>",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioAuthoringMetaRegistry",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "unknown",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 19,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4876,6 +5162,67 @@
"members": [],
"structuredRows": []
},
+ {
+ "name": "StudioAuthoringPropSchema",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 3,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [
+ {
+ "name": "authoring",
+ "kind": "property",
+ "type": "{ readonly authority: string; } | undefined",
+ "required": false,
+ "description": null
+ },
+ {
+ "name": "category",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "default",
+ "kind": "property",
+ "type": "unknown",
+ "required": false,
+ "description": null
+ },
+ {
+ "name": "enum",
+ "kind": "property",
+ "type": "readonly (string | number)[] | undefined",
+ "required": false,
+ "description": null
+ },
+ {
+ "name": "label",
+ "kind": "property",
+ "type": "string | undefined",
+ "required": false,
+ "description": null
+ },
+ {
+ "name": "type",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
{
"name": "StudioCommand",
"description": null,
@@ -4885,7 +5232,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 312,
+ "line": 316,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4903,7 +5250,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 296,
+ "line": 300,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4936,7 +5283,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 301,
+ "line": 305,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -4983,7 +5330,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 308,
+ "line": 312,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5001,7 +5348,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 328,
+ "line": 332,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5397,7 +5744,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 321,
+ "line": 325,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5415,7 +5762,158 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 310,
+ "line": 314,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioInstancePropertyEditorKind",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "unknown",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 23,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": [],
+ "signatures": [],
+ "members": [],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioInstancePropertyField",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 26,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioInstancePropertyEditorKind"],
+ "signatures": [],
+ "members": [
+ {
+ "name": "category",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "defaultValue",
+ "kind": "property",
+ "type": "unknown",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "editor",
+ "kind": "property",
+ "type": "StudioInstancePropertyEditorKind",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "isExplicit",
+ "kind": "property",
+ "type": "boolean",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "label",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "name",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "options",
+ "kind": "property",
+ "type": "readonly (string | number)[]",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "schemaType",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "value",
+ "kind": "property",
+ "type": "unknown",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioInstancePropertyGroup",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "type",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 38,
+ "column": 1
+ },
+ "exportPaths": ["src/index.ts"],
+ "relatedSymbols": ["StudioInstancePropertyField"],
+ "signatures": [],
+ "members": [
+ {
+ "name": "category",
+ "kind": "property",
+ "type": "string",
+ "required": true,
+ "description": null
+ },
+ {
+ "name": "fields",
+ "kind": "property",
+ "type": "readonly StudioInstancePropertyField[]",
+ "required": true,
+ "description": null
+ }
+ ],
+ "structuredRows": []
+ },
+ {
+ "name": "StudioInstancePropertyValue",
+ "description": null,
+ "isReadme": false,
+ "examples": [],
+ "kind": "unknown",
+ "modulePath": "src/propertiesAuthoringModel.ts",
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 43,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5433,7 +5931,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 112,
+ "line": 116,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5451,7 +5949,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 142,
+ "line": 146,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5469,7 +5967,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 114,
+ "line": 118,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5487,7 +5985,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 111,
+ "line": 115,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5505,7 +6003,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 109,
+ "line": 113,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5523,7 +6021,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 51,
+ "line": 52,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5563,7 +6061,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 116,
+ "line": 120,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5581,7 +6079,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 107,
+ "line": 111,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5688,7 +6186,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 105,
+ "line": 109,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5706,7 +6204,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 115,
+ "line": 119,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5724,7 +6222,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 110,
+ "line": 114,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5742,7 +6240,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 153,
+ "line": 157,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5796,7 +6294,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 108,
+ "line": 112,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -5814,7 +6312,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 161,
+ "line": 165,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6062,7 +6560,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 148,
+ "line": 152,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6080,7 +6578,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 461,
+ "line": 465,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -6098,7 +6596,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 545,
+ "line": 549,
"column": 14
},
"exportPaths": ["src/index.ts"],
@@ -6142,7 +6640,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1165,
+ "line": 1169,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -6180,7 +6678,7 @@
"modulePath": "src/index.ts",
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 762,
+ "line": 766,
"column": 1
},
"exportPaths": ["src/index.ts"],
@@ -8069,6 +8567,105 @@
"column": 1
}
},
+ {
+ "name": "resolveAuthRedirectEnvironment",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthHealthService.ts",
+ "line": 104,
+ "column": 1
+ }
+ },
+ {
+ "name": "observeProjectAuthRuntimeDiagnostics",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 37,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveProjectAuthRedirectRuntime",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 129,
+ "column": 1
+ }
+ },
+ {
+ "name": "parseProjectAuthRuntimeStatus",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 166,
+ "column": 1
+ }
+ },
+ {
+ "name": "readSafeGeneratedInfraEnvironment",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 185,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveOrigin",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 214,
+ "column": 1
+ }
+ },
+ {
+ "name": "parsePort",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 227,
+ "column": 1
+ }
+ },
+ {
+ "name": "splitCommaSeparated",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 234,
+ "column": 1
+ }
+ },
+ {
+ "name": "readSafeStatusValue",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 242,
+ "column": 1
+ }
+ },
+ {
+ "name": "isExactWebCallbackUrl",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 248,
+ "column": 1
+ }
+ },
+ {
+ "name": "exists",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "line": 252,
+ "column": 1
+ }
+ },
{
"name": "createStudioHost",
"description": null,
@@ -8609,6 +9206,105 @@
"column": 1
}
},
+ {
+ "name": "runIsolatedScenario",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 83,
+ "column": 1
+ }
+ },
+ {
+ "name": "runSuccessfulCallbackScenario",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 103,
+ "column": 1
+ }
+ },
+ {
+ "name": "runProviderDenialScenario",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 140,
+ "column": 1
+ }
+ },
+ {
+ "name": "createHarness",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 171,
+ "column": 1
+ }
+ },
+ {
+ "name": "writeDocument",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 203,
+ "column": 1
+ }
+ },
+ {
+ "name": "createGeneratedOAuthSource",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 270,
+ "column": 1
+ }
+ },
+ {
+ "name": "readTransportMarker",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 291,
+ "column": 1
+ }
+ },
+ {
+ "name": "hasPkceVerifier",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 307,
+ "column": 1
+ }
+ },
+ {
+ "name": "waitFor",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 311,
+ "column": 1
+ }
+ },
+ {
+ "name": "moduleUrl",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 319,
+ "column": 1
+ }
+ },
+ {
+ "name": "isRecord",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "line": 323,
+ "column": 1
+ }
+ },
{
"name": "collectSourceFiles",
"description": null,
@@ -8632,7 +9328,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/host/http/authRoutes.ts",
- "line": 45,
+ "line": 46,
"column": 1
}
},
@@ -9347,6 +10043,15 @@
"column": 1
}
},
+ {
+ "name": "createOAuthRuntime",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/host/layout/templates/auth/oauth.test.ts",
+ "line": 5,
+ "column": 1
+ }
+ },
{
"name": "getAuthOAuthRuntimeTs",
"description": null,
@@ -11449,7 +12154,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 509,
+ "line": 513,
"column": 14
}
},
@@ -11458,7 +12163,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 516,
+ "line": 520,
"column": 14
}
},
@@ -11467,7 +12172,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 533,
+ "line": 537,
"column": 14
}
},
@@ -11476,7 +12181,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 545,
+ "line": 549,
"column": 14
}
},
@@ -11485,7 +12190,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 573,
+ "line": 577,
"column": 14
}
},
@@ -11494,7 +12199,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 591,
+ "line": 595,
"column": 14
}
},
@@ -11503,7 +12208,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 624,
+ "line": 628,
"column": 14
}
},
@@ -11512,7 +12217,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 660,
+ "line": 664,
"column": 1
}
},
@@ -11521,7 +12226,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 665,
+ "line": 669,
"column": 9
}
},
@@ -11530,7 +12235,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 684,
+ "line": 688,
"column": 1
}
},
@@ -11539,7 +12244,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 695,
+ "line": 699,
"column": 1
}
},
@@ -11548,7 +12253,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 750,
+ "line": 754,
"column": 1
}
},
@@ -11557,7 +12262,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 762,
+ "line": 766,
"column": 1
}
},
@@ -11566,7 +12271,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 817,
+ "line": 821,
"column": 1
}
},
@@ -11575,7 +12280,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 878,
+ "line": 882,
"column": 1
}
},
@@ -11584,7 +12289,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 935,
+ "line": 939,
"column": 1
}
},
@@ -11593,7 +12298,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 980,
+ "line": 984,
"column": 1
}
},
@@ -11602,7 +12307,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1019,
+ "line": 1023,
"column": 1
}
},
@@ -11611,7 +12316,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1048,
+ "line": 1052,
"column": 1
}
},
@@ -11620,7 +12325,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1148,
+ "line": 1152,
"column": 1
}
},
@@ -11629,7 +12334,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1152,
+ "line": 1156,
"column": 1
}
},
@@ -11638,7 +12343,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1157,
+ "line": 1161,
"column": 1
}
},
@@ -11647,7 +12352,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1165,
+ "line": 1169,
"column": 1
}
},
@@ -11656,7 +12361,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1169,
+ "line": 1173,
"column": 9
}
},
@@ -11665,7 +12370,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1202,
+ "line": 1206,
"column": 1
}
},
@@ -11674,7 +12379,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1207,
+ "line": 1211,
"column": 9
}
},
@@ -11683,7 +12388,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1222,
+ "line": 1226,
"column": 1
}
},
@@ -11692,7 +12397,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1242,
+ "line": 1246,
"column": 1
}
},
@@ -11701,7 +12406,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1265,
+ "line": 1269,
"column": 1
}
},
@@ -11710,7 +12415,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1303,
+ "line": 1307,
"column": 1
}
},
@@ -11719,7 +12424,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1329,
+ "line": 1333,
"column": 1
}
},
@@ -11728,7 +12433,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1345,
+ "line": 1349,
"column": 1
}
},
@@ -11737,7 +12442,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/index.ts",
- "line": 1394,
+ "line": 1398,
"column": 1
}
},
@@ -12848,6 +13553,51 @@
"column": 1
}
},
+ {
+ "name": "applyProjectAuthRuntimeDiagnostics",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/projectAuthRuntimeDiagnostics.ts",
+ "line": 19,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveRolloutDiagnostic",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/projectAuthRuntimeDiagnostics.ts",
+ "line": 53,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveHealthStatus",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/projectAuthRuntimeDiagnostics.ts",
+ "line": 86,
+ "column": 1
+ }
+ },
+ {
+ "name": "sortDiagnostics",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/projectAuthRuntimeDiagnostics.ts",
+ "line": 94,
+ "column": 1
+ }
+ },
+ {
+ "name": "uniqueDiagnostics",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/projectAuthRuntimeDiagnostics.ts",
+ "line": 112,
+ "column": 1
+ }
+ },
{
"name": "deriveProjectId",
"description": null,
@@ -13154,6 +13904,42 @@
"column": 1
}
},
+ {
+ "name": "resolveStudioInstancePropertyFields",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 45,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveStudioInstancePropertyGroups",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 74,
+ "column": 1
+ }
+ },
+ {
+ "name": "createStudioInstancePropertyPatch",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 89,
+ "column": 1
+ }
+ },
+ {
+ "name": "resolveEditorKind",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/propertiesAuthoringModel.ts",
+ "line": 102,
+ "column": 1
+ }
+ },
{
"name": "buildRoutes",
"description": null,
@@ -14180,6 +14966,51 @@
"column": 1
}
},
+ {
+ "name": "requestUrl",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/studioRuntimeApi.test.ts",
+ "line": 54,
+ "column": 1
+ }
+ },
+ {
+ "name": "captureError",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/studioRuntimeApi.test.ts",
+ "line": 60,
+ "column": 1
+ }
+ },
+ {
+ "name": "syncStudioRuntime",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/studioRuntimeApi.ts",
+ "line": 1,
+ "column": 1
+ }
+ },
+ {
+ "name": "readJson",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/studioRuntimeApi.ts",
+ "line": 26,
+ "column": 1
+ }
+ },
+ {
+ "name": "readErrorMessage",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/studioRuntimeApi.ts",
+ "line": 34,
+ "column": 1
+ }
+ },
{
"name": "containsUiNode",
"description": null,
@@ -14743,7 +15574,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 64,
+ "line": 65,
"column": 1
}
},
@@ -14752,7 +15583,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 583,
+ "line": 588,
"column": 1
}
},
@@ -14761,7 +15592,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 608,
+ "line": 613,
"column": 1
}
},
@@ -14770,7 +15601,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 642,
+ "line": 647,
"column": 9
}
},
@@ -14779,7 +15610,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 668,
+ "line": 673,
"column": 9
}
},
@@ -14788,7 +15619,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 788,
+ "line": 793,
"column": 1
}
},
@@ -14797,7 +15628,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 799,
+ "line": 804,
"column": 1
}
},
@@ -14806,7 +15637,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 806,
+ "line": 811,
"column": 1
}
},
@@ -14815,7 +15646,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 811,
+ "line": 816,
"column": 1
}
},
@@ -14824,7 +15655,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 816,
+ "line": 821,
"column": 1
}
},
@@ -14833,7 +15664,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 826,
+ "line": 831,
"column": 1
}
},
@@ -14842,7 +15673,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 834,
+ "line": 839,
"column": 1
}
},
@@ -14851,7 +15682,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 852,
+ "line": 857,
"column": 1
}
},
@@ -14860,7 +15691,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 863,
+ "line": 868,
"column": 1
}
},
@@ -14869,7 +15700,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 868,
+ "line": 873,
"column": 1
}
},
@@ -14878,7 +15709,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 886,
+ "line": 891,
"column": 1
}
},
@@ -14887,7 +15718,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 946,
+ "line": 951,
"column": 1
}
},
@@ -14896,7 +15727,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 953,
+ "line": 958,
"column": 1
}
},
@@ -14905,7 +15736,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 961,
+ "line": 966,
"column": 1
}
},
@@ -14914,7 +15745,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 968,
+ "line": 973,
"column": 1
}
},
@@ -14923,7 +15754,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 974,
+ "line": 979,
"column": 1
}
},
@@ -14932,7 +15763,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 989,
+ "line": 994,
"column": 1
}
},
@@ -14941,7 +15772,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 1000,
+ "line": 1005,
"column": 1
}
},
@@ -14950,7 +15781,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 1012,
+ "line": 1017,
"column": 1
}
},
@@ -14959,7 +15790,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 1031,
+ "line": 1036,
"column": 1
}
},
@@ -14968,7 +15799,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 1050,
+ "line": 1055,
"column": 1
}
},
@@ -14977,7 +15808,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 1074,
+ "line": 1079,
"column": 1
}
},
@@ -14986,7 +15817,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 1085,
+ "line": 1090,
"column": 1
}
},
@@ -14995,7 +15826,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 1108,
+ "line": 1113,
"column": 1
}
},
@@ -15004,7 +15835,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/AuthAdminPage.tsx",
- "line": 1120,
+ "line": 1125,
"column": 1
}
},
@@ -15022,16 +15853,97 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 10,
+ "line": 16,
"column": 1
}
},
{
- "name": "NodeProps",
+ "name": "ResolvedProperties",
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 53,
+ "line": 41,
+ "column": 1
+ }
+ },
+ {
+ "name": "updateProperty",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 45,
+ "column": 9
+ }
+ },
+ {
+ "name": "InstancePropertyEditor",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 81,
+ "column": 1
+ }
+ },
+ {
+ "name": "NumberPropertyInput",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 110,
+ "column": 1
+ }
+ },
+ {
+ "name": "commit",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 123,
+ "column": 9
+ }
+ },
+ {
+ "name": "BooleanPropertyInput",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 159,
+ "column": 1
+ }
+ },
+ {
+ "name": "ChoicePropertyInput",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 178,
+ "column": 1
+ }
+ },
+ {
+ "name": "UnavailableNode",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 204,
+ "column": 1
+ }
+ },
+ {
+ "name": "NoInstanceProperties",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 214,
+ "column": 1
+ }
+ },
+ {
+ "name": "toInputText",
+ "description": null,
+ "sourceLocation": {
+ "filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "line": 224,
"column": 1
}
},
@@ -15374,6 +16286,14 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "createStudioInstancePropertyPatch",
+ "sourcePath": "src/propertiesAuthoringModel.ts",
+ "symbolName": "createStudioInstancePropertyPatch",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "deriveProjectId",
@@ -15462,6 +16382,22 @@
"description": null,
"isReadme": false
},
+ {
+ "kind": "export",
+ "name": "resolveStudioInstancePropertyFields",
+ "sourcePath": "src/propertiesAuthoringModel.ts",
+ "symbolName": "resolveStudioInstancePropertyFields",
+ "description": null,
+ "isReadme": false
+ },
+ {
+ "kind": "export",
+ "name": "resolveStudioInstancePropertyGroups",
+ "sourcePath": "src/propertiesAuthoringModel.ts",
+ "symbolName": "resolveStudioInstancePropertyGroups",
+ "description": null,
+ "isReadme": false
+ },
{
"kind": "export",
"name": "updateNodeInTree",
@@ -15587,6 +16523,11 @@
"toPath": "src/projectWorkspaceContracts.ts",
"sourcePath": "src/index.ts"
},
+ {
+ "fromPath": "src/index.ts",
+ "toPath": "src/propertiesAuthoringModel.ts",
+ "sourcePath": "src/index.ts"
+ },
{
"fromPath": "src/index.ts",
"toPath": "src/templateCatalogContracts.ts",
@@ -15722,6 +16663,21 @@
"toPath": "src/authSettings.ts",
"sourcePath": "src/projectAuthHealth.ts"
},
+ {
+ "fromPath": "src/projectAuthRuntimeDiagnostics.test.ts",
+ "toPath": "src/projectAuthHealth.ts",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromPath": "src/projectAuthRuntimeDiagnostics.test.ts",
+ "toPath": "src/projectAuthRuntimeDiagnostics.ts",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromPath": "src/projectAuthRuntimeDiagnostics.ts",
+ "toPath": "src/projectAuthHealth.ts",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.ts"
+ },
{
"fromPath": "src/projectIdentity.test.ts",
"toPath": "src/projectIdentity.ts",
@@ -15757,6 +16713,11 @@
"toPath": "src/projectSecretUsage.ts",
"sourcePath": "src/projectSecretUsage.test.ts"
},
+ {
+ "fromPath": "src/propertiesAuthoringModel.test.ts",
+ "toPath": "src/index.ts",
+ "sourcePath": "src/propertiesAuthoringModel.test.ts"
+ },
{
"fromPath": "src/root.ts",
"toPath": "src/app/index.ts",
@@ -15857,6 +16818,11 @@
"toPath": "src/index.ts",
"sourcePath": "src/studioAdminRouteModel.ts"
},
+ {
+ "fromPath": "src/studioRuntimeApi.test.ts",
+ "toPath": "src/studioRuntimeApi.ts",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
{
"fromPath": "src/studioSelectionModel.knip.test.ts",
"toPath": "src/studioSelectionModel.ts",
@@ -16247,6 +17213,11 @@
"toPath": "src/host/templateRegistry/index.ts",
"sourcePath": "src/host/generatedAuthAdapterRuntime.smoke.test.ts"
},
+ {
+ "fromPath": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "toPath": "src/host/layout/templates/auth/oauth.ts",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
{
"fromPath": "src/host/hostLifecycle.smoke.test.ts",
"toPath": "src/host/orchestrator/moduleManager.ts",
@@ -16652,6 +17623,11 @@
"toPath": "src/projectAuthHealth.ts",
"sourcePath": "src/host/auth/projectAuthHealthService.ts"
},
+ {
+ "fromPath": "src/host/auth/projectAuthHealthService.ts",
+ "toPath": "src/projectAuthRuntimeDiagnostics.ts",
+ "sourcePath": "src/host/auth/projectAuthHealthService.ts"
+ },
{
"fromPath": "src/host/auth/projectAuthHealthService.ts",
"toPath": "src/host/orchestrator/projectManager.ts",
@@ -16662,6 +17638,36 @@
"toPath": "src/host/secrets/projectSecretService.ts",
"sourcePath": "src/host/auth/projectAuthHealthService.ts"
},
+ {
+ "fromPath": "src/host/auth/projectAuthHealthService.ts",
+ "toPath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "sourcePath": "src/host/auth/projectAuthHealthService.ts"
+ },
+ {
+ "fromPath": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts",
+ "toPath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromPath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "toPath": "src/projectAuthHealth.ts",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromPath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "toPath": "src/projectAuthRuntimeDiagnostics.ts",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromPath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "toPath": "src/host/orchestrator/infraRuntime.ts",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromPath": "src/host/auth/projectAuthRuntimeDiagnostics.ts",
+ "toPath": "src/host/orchestrator/projectPaths.ts",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
{
"fromPath": "src/host/http/authRoutes.test.ts",
"toPath": "src/host/orchestrator/projectManager.ts",
@@ -17512,6 +18518,11 @@
"toPath": "src/projectSecretApi.ts",
"sourcePath": "src/ui/admin/pages/AuthAdminPage.tsx"
},
+ {
+ "fromPath": "src/ui/admin/pages/AuthAdminPage.tsx",
+ "toPath": "src/studioRuntimeApi.ts",
+ "sourcePath": "src/ui/admin/pages/AuthAdminPage.tsx"
+ },
{
"fromPath": "src/ui/admin/pages/AuthAdminPage.tsx",
"toPath": "src/ui/admin/AuthAdminSession.tsx",
@@ -17554,12 +18565,12 @@
},
{
"fromPath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "toPath": "src/ui/admin/adminPagePrimitives.tsx",
+ "toPath": "src/propertiesAuthoringModel.ts",
"sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
},
{
"fromPath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "toPath": "src/ui/admin/adminPageUtils.ts",
+ "toPath": "src/ui/admin/adminPagePrimitives.tsx",
"sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
},
{
@@ -17617,6 +18628,11 @@
"toPath": "src/host/layout/templates/auth/adapter.ts",
"sourcePath": "src/host/layout/templates/auth/adapter.test.ts"
},
+ {
+ "fromPath": "src/host/layout/templates/auth/callback.test.ts",
+ "toPath": "src/host/layout/templates/auth/callback.ts",
+ "sourcePath": "src/host/layout/templates/auth/callback.test.ts"
+ },
{
"fromPath": "src/host/layout/templates/auth/callback.ts",
"toPath": "src/host/layout/utils/escapeStringLiteral.ts",
@@ -17627,6 +18643,11 @@
"toPath": "src/host/layout/templates/utils/routes.ts",
"sourcePath": "src/host/layout/templates/auth/callback.ts"
},
+ {
+ "fromPath": "src/host/layout/templates/auth/oauth.test.ts",
+ "toPath": "src/host/layout/templates/auth/oauth.ts",
+ "sourcePath": "src/host/layout/templates/auth/oauth.test.ts"
+ },
{
"fromPath": "src/host/layout/templates/auth/oauth.ts",
"toPath": "src/host/layout/auth/resolveAuthLayoutPlan.ts",
@@ -21083,6 +22104,54 @@
"callExpression": "resolveProviderStatus",
"sourcePath": "src/projectAuthHealth.ts"
},
+ {
+ "fromSymbol": "src/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "describe",
+ "callExpression": "describe",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "src/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "src/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "applyProjectAuthRuntimeDiagnostics",
+ "callExpression": "applyProjectAuthRuntimeDiagnostics",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "src/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "applyProjectAuthRuntimeDiagnostics",
+ "toSymbol": "resolveRolloutDiagnostic",
+ "callExpression": "resolveRolloutDiagnostic",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "applyProjectAuthRuntimeDiagnostics",
+ "toSymbol": "sortDiagnostics",
+ "callExpression": "sortDiagnostics",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "applyProjectAuthRuntimeDiagnostics",
+ "toSymbol": "uniqueDiagnostics",
+ "callExpression": "uniqueDiagnostics",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "applyProjectAuthRuntimeDiagnostics",
+ "toSymbol": "resolveHealthStatus",
+ "callExpression": "resolveHealthStatus",
+ "sourcePath": "src/projectAuthRuntimeDiagnostics.ts"
+ },
{
"fromSymbol": "src/projectIdentity.test.ts",
"toSymbol": "test",
@@ -21545,6 +22614,54 @@
"callExpression": "titleCase",
"sourcePath": "src/projectSecretUsage.ts"
},
+ {
+ "fromSymbol": "src/propertiesAuthoringModel.test.ts",
+ "toSymbol": "describe",
+ "callExpression": "describe",
+ "sourcePath": "src/propertiesAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/propertiesAuthoringModel.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/propertiesAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/propertiesAuthoringModel.test.ts",
+ "toSymbol": "resolveStudioInstancePropertyFields",
+ "callExpression": "resolveStudioInstancePropertyFields",
+ "sourcePath": "src/propertiesAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/propertiesAuthoringModel.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/propertiesAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/propertiesAuthoringModel.test.ts",
+ "toSymbol": "resolveStudioInstancePropertyGroups",
+ "callExpression": "resolveStudioInstancePropertyGroups",
+ "sourcePath": "src/propertiesAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/propertiesAuthoringModel.test.ts",
+ "toSymbol": "createStudioInstancePropertyPatch",
+ "callExpression": "createStudioInstancePropertyPatch",
+ "sourcePath": "src/propertiesAuthoringModel.test.ts"
+ },
+ {
+ "fromSymbol": "src/propertiesAuthoringModel.ts",
+ "toSymbol": "resolveEditorKind",
+ "callExpression": "resolveEditorKind",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyGroups",
+ "toSymbol": "resolveStudioInstancePropertyFields",
+ "callExpression": "resolveStudioInstancePropertyFields",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
{
"fromSymbol": "src/root.test.ts",
"toSymbol": "test",
@@ -22187,6 +23304,66 @@
"callExpression": "resolveStudioNavigableLocation",
"sourcePath": "src/studioAdminRouteModel.ts"
},
+ {
+ "fromSymbol": "src/studioRuntimeApi.test.ts",
+ "toSymbol": "afterEach",
+ "callExpression": "afterEach",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
+ {
+ "fromSymbol": "src/studioRuntimeApi.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
+ {
+ "fromSymbol": "src/studioRuntimeApi.test.ts",
+ "toSymbol": "mock",
+ "callExpression": "mock",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
+ {
+ "fromSymbol": "src/studioRuntimeApi.test.ts",
+ "toSymbol": "requestUrl",
+ "callExpression": "requestUrl",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
+ {
+ "fromSymbol": "src/studioRuntimeApi.test.ts",
+ "toSymbol": "syncStudioRuntime",
+ "callExpression": "syncStudioRuntime",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
+ {
+ "fromSymbol": "src/studioRuntimeApi.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
+ {
+ "fromSymbol": "src/studioRuntimeApi.test.ts",
+ "toSymbol": "captureError",
+ "callExpression": "captureError",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
+ {
+ "fromSymbol": "captureError",
+ "toSymbol": "action",
+ "callExpression": "action",
+ "sourcePath": "src/studioRuntimeApi.test.ts"
+ },
+ {
+ "fromSymbol": "syncStudioRuntime",
+ "toSymbol": "readJson",
+ "callExpression": "readJson",
+ "sourcePath": "src/studioRuntimeApi.ts"
+ },
+ {
+ "fromSymbol": "syncStudioRuntime",
+ "toSymbol": "readErrorMessage",
+ "callExpression": "readErrorMessage",
+ "sourcePath": "src/studioRuntimeApi.ts"
+ },
{
"fromSymbol": "src/studioSelectionModel.knip.test.ts",
"toSymbol": "describe",
@@ -25313,6 +26490,246 @@
"callExpression": "loadedBabel.transformAsync",
"sourcePath": "src/host/generatedAuthAdapterRuntime.smoke.test.ts"
},
+ {
+ "fromSymbol": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "toSymbol": "afterEach",
+ "callExpression": "afterEach",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "toSymbol": "rm",
+ "callExpression": "rm",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "toSymbol": "describe",
+ "callExpression": "describe",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "toSymbol": "it",
+ "callExpression": "it",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "toSymbol": "runSuccessfulCallbackScenario",
+ "callExpression": "runSuccessfulCallbackScenario",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "toSymbol": "runProviderDenialScenario",
+ "callExpression": "runProviderDenialScenario",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/generatedOAuthLifecycle.e2e.test.ts",
+ "toSymbol": "runIsolatedScenario",
+ "callExpression": "runIsolatedScenario",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runIsolatedScenario",
+ "toSymbol": "fileURLToPath",
+ "callExpression": "fileURLToPath",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "createHarness",
+ "callExpression": "createHarness",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "importDocument",
+ "callExpression": "harness.importDocument",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "startOAuthAuthorization",
+ "callExpression": "startDocument.startOAuthAuthorization",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "waitFor",
+ "callExpression": "waitFor",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "readTransportMarker",
+ "callExpression": "readTransportMarker",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "hasPkceVerifier",
+ "callExpression": "hasPkceVerifier",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "completeOAuthCallback",
+ "callExpression": "callbackDocument.completeOAuthCallback",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runSuccessfulCallbackScenario",
+ "toSymbol": "completeOAuthCallback",
+ "callExpression": "reloadedCallbackDocument.completeOAuthCallback",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "createHarness",
+ "callExpression": "createHarness",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "importDocument",
+ "callExpression": "harness.importDocument",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "startOAuthAuthorization",
+ "callExpression": "startDocument.startOAuthAuthorization",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "waitFor",
+ "callExpression": "waitFor",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "readTransportMarker",
+ "callExpression": "readTransportMarker",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "hasPkceVerifier",
+ "callExpression": "hasPkceVerifier",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "completeOAuthCallback",
+ "callExpression": "callbackDocument.completeOAuthCallback",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "runProviderDenialScenario",
+ "toSymbol": "startOAuthAuthorization",
+ "callExpression": "restartDocument.startOAuthAuthorization",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "createHarness",
+ "toSymbol": "mkdtemp",
+ "callExpression": "mkdtemp",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "createHarness",
+ "toSymbol": "tmpdir",
+ "callExpression": "tmpdir",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "createHarness",
+ "toSymbol": "symlink",
+ "callExpression": "symlink",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "createHarness",
+ "toSymbol": "writeFile",
+ "callExpression": "writeFile",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "createHarness",
+ "toSymbol": "moduleUrl",
+ "callExpression": "moduleUrl",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "importDocument",
+ "toSymbol": "writeDocument",
+ "callExpression": "writeDocument",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "importDocument",
+ "toSymbol": "moduleUrl",
+ "callExpression": "moduleUrl",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "writeDocument",
+ "toSymbol": "mkdir",
+ "callExpression": "mkdir",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "writeDocument",
+ "toSymbol": "writeFile",
+ "callExpression": "writeFile",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "writeDocument",
+ "toSymbol": "createGeneratedOAuthSource",
+ "callExpression": "createGeneratedOAuthSource",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "createGeneratedOAuthSource",
+ "toSymbol": "getAuthOAuthRuntimeTs",
+ "callExpression": "getAuthOAuthRuntimeTs",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "readTransportMarker",
+ "toSymbol": "isRecord",
+ "callExpression": "isRecord",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "waitFor",
+ "toSymbol": "predicate",
+ "callExpression": "predicate",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
+ {
+ "fromSymbol": "moduleUrl",
+ "toSymbol": "pathToFileURL",
+ "callExpression": "pathToFileURL",
+ "sourcePath": "src/host/generatedOAuthLifecycle.e2e.test.ts"
+ },
{
"fromSymbol": "collectSourceFiles",
"toSymbol": "readdir",
@@ -27989,6 +29406,30 @@
"callExpression": "analyzeProjectAuthHealth",
"sourcePath": "src/host/auth/projectAuthHealthService.ts"
},
+ {
+ "fromSymbol": "get",
+ "toSymbol": "getInfrastructureStatus",
+ "callExpression": "this.projectManager.getInfrastructureStatus",
+ "sourcePath": "src/host/auth/projectAuthHealthService.ts"
+ },
+ {
+ "fromSymbol": "get",
+ "toSymbol": "observeProjectAuthRuntimeDiagnostics",
+ "callExpression": "observeProjectAuthRuntimeDiagnostics",
+ "sourcePath": "src/host/auth/projectAuthHealthService.ts"
+ },
+ {
+ "fromSymbol": "get",
+ "toSymbol": "resolveAuthRedirectEnvironment",
+ "callExpression": "resolveAuthRedirectEnvironment",
+ "sourcePath": "src/host/auth/projectAuthHealthService.ts"
+ },
+ {
+ "fromSymbol": "get",
+ "toSymbol": "applyProjectAuthRuntimeDiagnostics",
+ "callExpression": "applyProjectAuthRuntimeDiagnostics",
+ "sourcePath": "src/host/auth/projectAuthHealthService.ts"
+ },
{
"fromSymbol": "readEditableManifest",
"toSymbol": "getStudioManifest",
@@ -28001,6 +29442,102 @@
"callExpression": "this.projectManager.getProjectManifest",
"sourcePath": "src/host/auth/projectAuthHealthService.ts"
},
+ {
+ "fromSymbol": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "describe",
+ "callExpression": "describe",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "resolveProjectAuthRedirectRuntime",
+ "callExpression": "resolveProjectAuthRedirectRuntime",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts",
+ "toSymbol": "parseProjectAuthRuntimeStatus",
+ "callExpression": "parseProjectAuthRuntimeStatus",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.test.ts"
+ },
+ {
+ "fromSymbol": "observeProjectAuthRuntimeDiagnostics",
+ "toSymbol": "readSafeGeneratedInfraEnvironment",
+ "callExpression": "readSafeGeneratedInfraEnvironment",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "observeProjectAuthRuntimeDiagnostics",
+ "toSymbol": "resolveProjectAuthRedirectRuntime",
+ "callExpression": "resolveProjectAuthRedirectRuntime",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "observeProjectAuthRuntimeDiagnostics",
+ "toSymbol": "runProjectInfraScriptCapture",
+ "callExpression": "runProjectInfraScriptCapture",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "observeProjectAuthRuntimeDiagnostics",
+ "toSymbol": "parseProjectAuthRuntimeStatus",
+ "callExpression": "parseProjectAuthRuntimeStatus",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "resolveProjectAuthRedirectRuntime",
+ "toSymbol": "resolveOrigin",
+ "callExpression": "resolveOrigin",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "resolveProjectAuthRedirectRuntime",
+ "toSymbol": "resolveAuthRedirectConfiguration",
+ "callExpression": "resolveAuthRedirectConfiguration",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "resolveProjectAuthRedirectRuntime",
+ "toSymbol": "splitCommaSeparated",
+ "callExpression": "splitCommaSeparated",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "parseProjectAuthRuntimeStatus",
+ "toSymbol": "readSafeStatusValue",
+ "callExpression": "readSafeStatusValue",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "readSafeGeneratedInfraEnvironment",
+ "toSymbol": "getProjectPath",
+ "callExpression": "getProjectPath",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "readSafeGeneratedInfraEnvironment",
+ "toSymbol": "exists",
+ "callExpression": "exists",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
+ {
+ "fromSymbol": "resolveOrigin",
+ "toSymbol": "parsePort",
+ "callExpression": "parsePort",
+ "sourcePath": "src/host/auth/projectAuthRuntimeDiagnostics.ts"
+ },
{
"fromSymbol": "src/host/http/authRoutes.test.ts",
"toSymbol": "describe",
@@ -34145,6 +35682,12 @@
"callExpression": "flushManifest",
"sourcePath": "src/ui/admin/pages/AuthAdminPage.tsx"
},
+ {
+ "fromSymbol": "src/ui/admin/pages/AuthAdminPage.tsx",
+ "toSymbol": "syncStudioRuntime",
+ "callExpression": "syncStudioRuntime",
+ "sourcePath": "src/ui/admin/pages/AuthAdminPage.tsx"
+ },
{
"fromSymbol": "src/ui/admin/pages/AuthAdminPage.tsx",
"toSymbol": "setMessage",
@@ -34488,15 +36031,81 @@
"sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
},
{
- "fromSymbol": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "fromSymbol": "ResolvedProperties",
+ "toSymbol": "useStudio",
+ "callExpression": "useStudio",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "ResolvedProperties",
+ "toSymbol": "resolveStudioInstancePropertyGroups",
+ "callExpression": "resolveStudioInstancePropertyGroups",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "updateProperty",
"toSymbol": "updateNode",
"callExpression": "studio.updateNode",
"sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
},
+ {
+ "fromSymbol": "updateProperty",
+ "toSymbol": "createStudioInstancePropertyPatch",
+ "callExpression": "createStudioInstancePropertyPatch",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
{
"fromSymbol": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "toSymbol": "formatPrimitive",
- "callExpression": "formatPrimitive",
+ "toSymbol": "updateProperty",
+ "callExpression": "updateProperty",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "InstancePropertyEditor",
+ "toSymbol": "toInputText",
+ "callExpression": "toInputText",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "NumberPropertyInput",
+ "toSymbol": "toInputText",
+ "callExpression": "toInputText",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "toSymbol": "setDraft",
+ "callExpression": "setDraft",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "toSymbol": "toInputText",
+ "callExpression": "toInputText",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "toSymbol": "setError",
+ "callExpression": "setError",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "commit",
+ "toSymbol": "setError",
+ "callExpression": "setError",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "commit",
+ "toSymbol": "onChange",
+ "callExpression": "onChange",
+ "sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
+ },
+ {
+ "fromSymbol": "src/ui/admin/pages/PropertiesAdminPage.tsx",
+ "toSymbol": "onChange",
+ "callExpression": "onChange",
"sourcePath": "src/ui/admin/pages/PropertiesAdminPage.tsx"
},
{
@@ -34979,6 +36588,24 @@
"callExpression": "expect",
"sourcePath": "src/host/layout/templates/auth/adapter.test.ts"
},
+ {
+ "fromSymbol": "src/host/layout/templates/auth/callback.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/host/layout/templates/auth/callback.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/layout/templates/auth/callback.test.ts",
+ "toSymbol": "getAuthOAuthCallbackTsx",
+ "callExpression": "getAuthOAuthCallbackTsx",
+ "sourcePath": "src/host/layout/templates/auth/callback.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/layout/templates/auth/callback.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/host/layout/templates/auth/callback.test.ts"
+ },
{
"fromSymbol": "getAuthOAuthCallbackTsx",
"toSymbol": "escapeStringLiteral",
@@ -34991,6 +36618,30 @@
"callExpression": "routeNameToGroupedHref",
"sourcePath": "src/host/layout/templates/auth/callback.ts"
},
+ {
+ "fromSymbol": "createOAuthRuntime",
+ "toSymbol": "getAuthOAuthRuntimeTs",
+ "callExpression": "getAuthOAuthRuntimeTs",
+ "sourcePath": "src/host/layout/templates/auth/oauth.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/layout/templates/auth/oauth.test.ts",
+ "toSymbol": "test",
+ "callExpression": "test",
+ "sourcePath": "src/host/layout/templates/auth/oauth.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/layout/templates/auth/oauth.test.ts",
+ "toSymbol": "createOAuthRuntime",
+ "callExpression": "createOAuthRuntime",
+ "sourcePath": "src/host/layout/templates/auth/oauth.test.ts"
+ },
+ {
+ "fromSymbol": "src/host/layout/templates/auth/oauth.test.ts",
+ "toSymbol": "expect",
+ "callExpression": "expect",
+ "sourcePath": "src/host/layout/templates/auth/oauth.test.ts"
+ },
{
"fromSymbol": "getAuthOAuthRuntimeTs",
"toSymbol": "escapeStringLiteral",
@@ -35543,6 +37194,81 @@
"fromSymbol": "MoveNodeToPlacementResult",
"toType": "UiNode",
"sourcePath": "src/index.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyFields",
+ "toType": "Readonly",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyFields",
+ "toType": "StudioAuthoringComponentMeta",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyFields",
+ "toType": "StudioInstancePropertyField",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyFields",
+ "toType": "UiNode",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyGroups",
+ "toType": "Readonly",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyGroups",
+ "toType": "StudioAuthoringComponentMeta",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyGroups",
+ "toType": "StudioInstancePropertyGroup",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "resolveStudioInstancePropertyGroups",
+ "toType": "UiNode",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "createStudioInstancePropertyPatch",
+ "toType": "Readonly",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "createStudioInstancePropertyPatch",
+ "toType": "StudioInstancePropertyValue",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "createStudioInstancePropertyPatch",
+ "toType": "UiNode",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "StudioAuthoringComponentMeta",
+ "toType": "Readonly",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "StudioAuthoringComponentMeta",
+ "toType": "StudioAuthoringPropSchema",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "StudioInstancePropertyField",
+ "toType": "StudioInstancePropertyEditorKind",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
+ },
+ {
+ "fromSymbol": "StudioInstancePropertyGroup",
+ "toType": "StudioInstancePropertyField",
+ "sourcePath": "src/propertiesAuthoringModel.ts"
}
],
"componentComposition": []
diff --git a/src/index.ts b/src/index.ts
index c93df76..a2a3c49 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -7,6 +7,7 @@ import type {
DataSourceRegistry,
NavigatorType,
RouteDefinition,
+ ThemeConfig,
ThemeModeConfig,
UiNode,
} from '@ankhorage/contracts';
@@ -68,7 +69,6 @@ export const STUDIO_PACKAGE_BOUNDARY: StudioPackageBoundary = {
'@ankhorage/expo-runtime',
'@ankhorage/templates',
'@ankhorage/ankh',
- '@ankhorage/zora',
],
doesNotOwn: [
'generic runtime renderer behavior',
@@ -78,7 +78,6 @@ export const STUDIO_PACKAGE_BOUNDARY: StudioPackageBoundary = {
'template catalog content',
'root command bus behavior',
'React Native UI components',
- 'ZORA component metadata or authoring authority',
'DnD implementation',
'Supabase storage implementation',
],
@@ -144,376 +143,1262 @@ export type StudioAdminStaticRoutePath =
| '/ankh/theme';
export type StudioAdminRoutePath = StudioAdminStaticRoutePath | `/ankh/properties/${string}`;
+export type StudioManifest = AppManifest & {
+ infra: AppManifest['infra'] & {
+ modulesConfig?: Record;
+ };
+};
+
+export type ThemeUpdates = Partial> & {
+ light?: Partial;
+ dark?: Partial;
+};
+
export interface StudioSelectionState {
- readonly selectedNodeId: StudioNodeId | null;
- readonly hoveredNodeId: StudioNodeId | null;
- readonly focusedNodeId: StudioNodeId | null;
+ activeScreenId: StudioScreenId | null;
+ selectedNodeId: StudioNodeId | null;
+ activePanelId: StudioPanelId | null;
+ activeAdminRouteId: StudioAdminRouteId;
+ activeCanvasDragNodeId: StudioNodeId | null;
+}
+
+export interface StudioSessionState {
+ projectId: StudioProjectId;
+ sessionId?: StudioSessionId;
+ activeLocale: StudioLocale;
+ studioMode: StudioMode;
+ previewMode: boolean;
+ lastNonAdminLocation: string;
+ saveStatus: StudioSaveStatus;
+ isLoading: boolean;
+ error: string | null;
}
-export type StudioModeChangeReason = 'user' | 'system' | 'manifest';
+export type PlacementKind = 'inside' | 'before' | 'after';
-export interface StudioModeChange {
- readonly mode: StudioMode;
- readonly reason: StudioModeChangeReason;
+export interface NodePlacement {
+ parentId: StudioNodeId;
+ index: number;
+ kind: PlacementKind;
+ referenceId?: StudioNodeId;
}
-export interface StudioActionDefinition {
- readonly id: string;
- readonly label: string;
- readonly icon?: string;
- readonly capability?: string;
+export type PlacementFailureCode =
+ | 'missing-root'
+ | 'missing-target'
+ | 'missing-parent'
+ | 'child-not-allowed'
+ | 'invalid-index'
+ | 'no-valid-target'
+ | 'cannot-move-root'
+ | 'cannot-move-into-self'
+ | 'cannot-move-into-descendant'
+ | 'no-op';
+
+export interface PlacementFailureReason {
+ code: PlacementFailureCode;
+ message: string;
}
-export interface StudioComponentMeta {
- readonly category: 'foundation' | 'component' | 'pattern' | 'layout';
- readonly allowedChildren: readonly string[];
- readonly directManifestNode: boolean;
- readonly blueprint?: {
- readonly label: string;
- readonly icon?: { readonly name: string; readonly provider?: string };
- readonly defaultProps?: Readonly>;
- };
- readonly events?: Readonly>;
- readonly slots?: Readonly>;
- readonly requirements?: Readonly>;
-}
-
-export type StudioComponentMetaRegistry = Readonly>;
-
-export interface StudioManifest extends AppManifest {
- readonly settings?: AppManifest['settings'];
-}
-
-export interface StudioContextValue {
- readonly projectId: string;
- readonly activeLocale: string;
- readonly activeScreenId: StudioScreenId | null;
- readonly selectedNodeId: StudioNodeId | null;
- readonly activePanelId: StudioPanelId | null;
- readonly activeAdminRouteId: StudioAdminRouteId;
- readonly activeCanvasDragNodeId: StudioNodeId | null;
- readonly studioMode: StudioMode;
- readonly previewMode: boolean;
- readonly lastNonAdminLocation: string;
- readonly saveStatus: StudioSaveStatus;
- readonly isLoading: boolean;
- readonly error: string | null;
- readonly manifest: StudioManifest | null;
- readonly rootNode: UiNode | null;
- readonly selectNode: (nodeId: StudioNodeId | null) => void;
- readonly setActivePanelId: (panelId: StudioPanelId | null) => void;
- readonly setActiveAdminRouteId: (routeId: StudioAdminRouteId) => void;
- readonly setLastNonAdminLocation: (location: string) => void;
- readonly setActiveCanvasDragNodeId: (nodeId: StudioNodeId | null) => void;
- readonly updateNode: (nodeId: StudioNodeId, props: Record) => void;
- readonly updateAppData: (data: AppDataManifest) => void;
- readonly updateDataBindings: (dataBindings: ComponentDataBindingRegistry) => void;
- readonly updateDataSources: (dataSources: DataSourceRegistry) => void;
- readonly deleteNode: (nodeId: StudioNodeId) => void;
- readonly insertFromCatalogEntry: (entry: InsertCatalogEntry) => boolean;
- readonly moveNodeToPlacement: (nodeId: StudioNodeId, placement: NodePlacement) => boolean;
- readonly addScreen: (name?: string) => void;
- readonly deleteScreen: (screenId: StudioScreenId) => void;
- readonly setNavigatorType: (type: NavigatorType) => void;
- readonly setNavigatorInitialRoute: (screenId: StudioScreenId) => void;
- readonly addTheme: (name?: string) => void;
- readonly updateTheme: (id: string, updates: ThemeUpdates) => void;
- readonly deleteTheme: (id: string) => void;
- readonly setActiveThemeId: (id: string) => void;
- readonly setActiveThemeMode: (mode: StudioMode) => void;
- readonly updateAuthSettings: (settings: StudioAuthSettings) => void;
- readonly mutateAuthSettings: (mutation: StudioAuthSettingsMutation) => StudioAuthSettings | null;
- readonly updateModuleConfig: (moduleId: StudioModuleId, config: Record) => void;
- readonly updateOAuthProviders: (providers: AuthOAuthProviderConfig[]) => void;
- readonly moveNode: (nodeId: StudioNodeId, direction: 'up' | 'down') => void;
- readonly reorderScreens: (newRoutes: RouteDefinition[]) => void;
- readonly setActiveScreenId: (screenId: StudioScreenId | null) => void;
- readonly findNode: (root: UiNode, nodeId: StudioNodeId) => UiNode | null;
- readonly setStudioMode: (mode: StudioMode) => void;
- readonly togglePreviewMode: () => void;
- readonly t: (key: string) => string;
- readonly setActiveLocale: (locale: string) => void;
- readonly reloadDictionaries: () => Promise;
- readonly refetchManifest: () => Promise;
- readonly flushManifest: () => Promise;
+export type PlacementValidationResult =
+ | { ok: true }
+ | {
+ ok: false;
+ reason: PlacementFailureReason;
+ };
+
+export type PlacementResolutionResult =
+ | { ok: true; placement: NodePlacement }
+ | {
+ ok: false;
+ reason: PlacementFailureReason;
+ };
+
+export type InsertCatalogEntryKind = 'component' | 'recipe';
+export type InsertCatalogEntryStatus = 'enabled' | 'disabled';
+
+export type InsertCatalogDisabledReasonCode =
+ 'missing-meta' | 'invalid-recipe' | 'no-placement' | 'not-direct';
+
+export interface InsertRecipeNode {
+ type: string;
+ children?: InsertRecipeNode[];
}
-export interface NodePlacement {
- readonly parentId: StudioNodeId;
- readonly index: number;
- readonly kind: 'before' | 'inside' | 'after';
- readonly referenceId?: StudioNodeId;
-}
-
-export interface InsertCatalogEntry {
- readonly id: string;
- readonly label: string;
- readonly category: string;
- readonly type: string;
- readonly defaultProps?: Readonly>;
- readonly recipe?: UiNode;
-}
-
-export interface ResolvedInsertCatalogEntry extends InsertCatalogEntry {
- readonly status: 'enabled' | 'disabled';
- readonly placement?: NodePlacement;
- readonly disabledReason?: {
- readonly code: string;
- readonly message: string;
- };
+export interface InsertRecipe {
+ id: string;
+ label: string;
+ description?: string;
+ category: string;
+ root: InsertRecipeNode;
}
-export type StudioIdGenerator = (prefix?: string) => string;
+export interface InsertRecipeIssue {
+ code: 'missing-meta' | 'child-not-allowed';
+ path: string[];
+ nodeType: string;
+ childType?: string;
+}
-export interface ThemeUpdates {
- readonly name?: string;
- readonly modes?: Partial>>;
+export interface InsertCatalogDisabledReason {
+ code: InsertCatalogDisabledReasonCode;
+ detail: string;
+ issue?: InsertRecipeIssue;
}
-export interface StudioModuleConfig {
- readonly moduleId: StudioModuleId;
- readonly config: Record;
+export interface InsertCatalogEntryBase {
+ id: string;
+ label: string;
+ description?: string;
+ category: string;
+ rootType: string;
+ kind: InsertCatalogEntryKind;
+ status: InsertCatalogEntryStatus;
+ disabledReason?: InsertCatalogDisabledReason;
+ placement?: NodePlacement;
}
+export interface InsertCatalogComponentEntry extends InsertCatalogEntryBase {
+ kind: 'component';
+ componentType: string;
+}
+
+export interface InsertCatalogRecipeEntry extends InsertCatalogEntryBase {
+ kind: 'recipe';
+ recipe: InsertRecipe;
+}
+
+export type InsertCatalogEntry = InsertCatalogComponentEntry | InsertCatalogRecipeEntry;
+
+export type StudioActionPayloadPrimitive = 'string' | 'number' | 'boolean' | 'object';
+
+export interface StudioActionPayloadField {
+ type: StudioActionPayloadPrimitive;
+ label: string;
+ required?: boolean;
+}
+
+export type StudioActionPayloadSchema = Record;
+
export interface ActionDefinition {
- readonly id: string;
- readonly type: ActionType;
- readonly label: string;
- readonly description?: string;
- readonly requiresPayload: boolean;
- readonly payloadSchema?: Record;
+ type: ActionType;
+ label: string;
+ description: string;
+ requiresPayload: boolean;
+ payloadSchema?: StudioActionPayloadSchema;
}
-export interface StudioCommand {
- readonly id: string;
- readonly type: string;
- readonly payload?: unknown;
+export interface ModuleDefinition {
+ id: StudioModuleId;
+ name: string;
+ description: string;
+ ui?: {
+ modal?: { title: string };
+ };
+}
+
+export interface StudioComponentBlueprint {
+ label?: string;
+ defaultProps?: Record;
}
-export interface StudioEvent {
- readonly type: string;
- readonly payload?: unknown;
+export interface StudioComponentMeta {
+ category: string;
+ allowedChildren: readonly string[];
+ directManifestNode?: boolean;
+ blueprint?: StudioComponentBlueprint;
}
-export const ACTION_REGISTRY: Readonly> = {
+export type StudioComponentMetaRegistry = Record;
+
+export type StudioIdGenerator = (prefix?: string) => string;
+
+export type StudioCommand =
+ | { type: 'studio.selectNode'; nodeId: StudioNodeId | null }
+ | { type: 'studio.setActivePanel'; panelId: StudioPanelId | null }
+ | { type: 'studio.setActiveAdminRoute'; routeId: StudioAdminRouteId }
+ | { type: 'studio.setActiveCanvasDragNode'; nodeId: StudioNodeId | null }
+ | { type: 'studio.setActiveScreen'; screenId: StudioScreenId }
+ | { type: 'studio.setStudioMode'; mode: StudioMode }
+ | { type: 'studio.togglePreviewMode' };
+
+export type StudioEvent =
+ | { type: 'studio.nodeSelected'; nodeId: StudioNodeId | null }
+ | { type: 'studio.panelChanged'; panelId: StudioPanelId | null }
+ | { type: 'studio.adminRouteChanged'; routePath: StudioAdminRoutePath }
+ | { type: 'studio.screenChanged'; screenId: StudioScreenId }
+ | { type: 'studio.saveStatusChanged'; status: StudioSaveStatus };
+
+export interface StudioContextValue extends StudioSelectionState, StudioSessionState {
+ manifest: StudioManifest | null;
+ rootNode: UiNode | null;
+ selectNode: (id: StudioNodeId | null) => void;
+ setActivePanelId: (panelId: StudioPanelId | null) => void;
+ setActiveAdminRouteId: (routeId: StudioAdminRouteId) => void;
+ setLastNonAdminLocation: (location: string) => void;
+ setActiveCanvasDragNodeId: (nodeId: StudioNodeId | null) => void;
+ updateNode: (nodeId: StudioNodeId, props: Record) => void;
+ updateAppData: (data: AppDataManifest) => void;
+ updateDataBindings: (dataBindings: ComponentDataBindingRegistry) => void;
+ updateDataSources: (dataSources: DataSourceRegistry) => void;
+ deleteNode: (id: StudioNodeId) => void;
+ insertFromCatalogEntry: (entry: InsertCatalogEntry) => boolean;
+ moveNodeToPlacement: (nodeId: StudioNodeId, placement: NodePlacement) => boolean;
+ addScreen: (name: string) => void;
+ deleteScreen: (id: StudioScreenId) => void;
+ setNavigatorType: (type: NavigatorType) => void;
+ setNavigatorInitialRoute: (routeName: string) => void;
+ addTheme: () => void;
+ updateTheme: (id: string, updates: ThemeUpdates) => void;
+ deleteTheme: (id: string) => void;
+ setActiveThemeId: (id: string) => void;
+ setActiveThemeMode: (mode: StudioMode) => void;
+ updateAuthSettings: (settings: StudioAuthSettings) => void;
+ mutateAuthSettings: (mutation: StudioAuthSettingsMutation) => StudioAuthSettings | null;
+ updateModuleConfig: (moduleId: StudioModuleId, config: Record) => void;
+ updateOAuthProviders: (providers: AuthOAuthProviderConfig[]) => void;
+ moveNode: (id: StudioNodeId, direction: 'up' | 'down') => void;
+ reorderScreens: (newRoutes: RouteDefinition[]) => void;
+ setActiveScreenId: (id: StudioScreenId) => void;
+ findNode: (root: UiNode, id: StudioNodeId) => UiNode | null;
+ setStudioMode: (mode: StudioMode) => void;
+ togglePreviewMode: () => void;
+ t: (key: string) => string;
+ setActiveLocale: (locale: StudioLocale) => void;
+ reloadDictionaries: () => Promise;
+ refetchManifest: () => Promise;
+ flushManifest: () => Promise;
+}
+
+export const ACTION_REGISTRY: Record = {
navigate: {
- id: 'navigate',
type: 'navigate',
label: 'Navigate',
+ description: 'Navigate to another screen or route',
requiresPayload: true,
- payloadSchema: { route: { required: true } },
+ payloadSchema: {
+ route: {
+ type: 'string',
+ label: 'Route',
+ required: true,
+ },
+ params: {
+ type: 'object',
+ label: 'Parameters',
+ },
+ },
+ },
+ alert: {
+ type: 'alert',
+ label: 'Alert',
+ description: 'Show an alert dialog',
+ requiresPayload: false,
+ payloadSchema: {
+ message: {
+ type: 'string',
+ label: 'Message',
+ },
+ },
+ },
+ console: {
+ type: 'console',
+ label: 'Console Log',
+ description: 'Log a message to the console',
+ requiresPayload: false,
},
toggleDarkMode: {
- id: 'toggleDarkMode',
type: 'toggleDarkMode',
- label: 'Toggle dark mode',
+ label: 'Toggle Dark Mode',
+ description: 'Toggle between light and dark theme modes',
requiresPayload: false,
},
+ setLanguage: {
+ type: 'setLanguage',
+ label: 'Set Language',
+ description: 'Change the application language',
+ requiresPayload: true,
+ payloadSchema: {
+ locale: {
+ type: 'string',
+ label: 'Locale',
+ required: true,
+ },
+ },
+ },
+ search: {
+ type: 'search',
+ label: 'Search',
+ description: 'Search for content by text and metadata',
+ requiresPayload: true,
+ payloadSchema: {
+ query: {
+ type: 'string',
+ label: 'Search Query',
+ required: true,
+ },
+ scope: {
+ type: 'string',
+ label: 'Search Scope',
+ },
+ },
+ },
+ filter: {
+ type: 'filter',
+ label: 'Filter',
+ description: 'Filter content by key-value pairs',
+ requiresPayload: true,
+ payloadSchema: {
+ filterKey: {
+ type: 'string',
+ label: 'Filter Key',
+ required: true,
+ },
+ filterValue: {
+ type: 'string',
+ label: 'Filter Value',
+ required: true,
+ },
+ },
+ },
};
export const TPL_SCREEN_EMPTY: UiNode = {
id: 'tpl-screen-empty',
type: 'Screen',
- props: { width: 'wide' },
- children: [],
+ props: {
+ width: 'wide',
+ },
+ children: [
+ {
+ id: 'tpl-screen-empty-header',
+ type: 'SectionHeader',
+ props: {
+ title: 'New Screen',
+ description: 'Start authoring with ZORA layouts and patterns.',
+ },
+ },
+ {
+ id: 'tpl-screen-empty-section',
+ type: 'ScreenSection',
+ props: {
+ title: 'Build the first section',
+ description: 'Insert panels, forms, or content patterns to start authoring.',
+ },
+ children: [
+ {
+ id: 'tpl-screen-empty-state',
+ type: 'EmptyState',
+ props: {
+ title: 'Canvas is ready',
+ description: 'Use Insert to add components and layouts.',
+ },
+ },
+ ],
+ },
+ {
+ id: 'tpl-screen-empty-action',
+ type: 'Button',
+ props: {
+ children: 'Add first section',
+ tone: 'primary',
+ emphasis: 'solid',
+ },
+ },
+ ],
+};
+
+/**
+ * Generates a unique ID for Studio-authored nodes and entities.
+ */
+export const generateStudioId: StudioIdGenerator = (prefix?: string): string => {
+ const timestamp = Date.now().toString(36);
+ const random = Math.random().toString(36).substring(2, 11);
+ const id = `${timestamp}-${random}`;
+ return prefix ? `${prefix.toLowerCase()}-${id}` : id;
+};
+
+export const cloneWithNewIds = (
+ node: UiNode,
+ createId: StudioIdGenerator = generateStudioId,
+): UiNode => {
+ const clonedNode: UiNode = {
+ ...node,
+ id: createId(node.type),
+ props: node.props ? { ...node.props } : node.props,
+ };
+
+ if (node.children) {
+ clonedNode.children = node.children.map((child) => cloneWithNewIds(child, createId));
+ }
+
+ return clonedNode;
};
-export function findNodeById(root: UiNode, nodeId: StudioNodeId): UiNode | null {
- if (root.id === nodeId) return root;
- for (const child of root.children ?? []) {
- const found = findNodeById(child, nodeId);
+export const findNodeById = (root: UiNode, id: string): UiNode | null => {
+ if (root.id === id) return root;
+ if (!root.children) return null;
+
+ for (const child of root.children) {
+ const found = findNodeById(child, id);
if (found) return found;
}
+
return null;
-}
+};
+
+export const updateNodeInTree = (
+ root: UiNode,
+ id: string,
+ newProps: Record,
+): UiNode => {
+ if (root.id === id) {
+ const { alias, style, ...rest } = newProps;
+ const aliasUpdate = typeof alias === 'string' ? { alias } : {};
+ const styleUpdate = isStyleRecord(style) ? { style } : {};
+
+ return {
+ ...root,
+ ...aliasUpdate,
+ ...styleUpdate,
+ props: { ...(root.props ?? {}), ...rest },
+ };
+ }
+
+ if (!root.children) {
+ return root;
+ }
-export function cloneWithNewIds(node: UiNode, makeId: StudioIdGenerator): UiNode {
return {
- ...node,
- id: makeId(node.type),
- children: node.children?.map((child) => cloneWithNewIds(child, makeId)),
+ ...root,
+ children: root.children.map((child) => updateNodeInTree(child, id, newProps)),
};
+};
+
+export const removeNodeFromTree = (root: UiNode, nodeId: string): UiNode | null => {
+ if (root.id === nodeId) return null;
+
+ if (!root.children) {
+ return root;
+ }
+
+ const filteredChildren = root.children.filter((child) => child.id !== nodeId);
+ if (filteredChildren.length !== root.children.length) {
+ return { ...root, children: filteredChildren };
+ }
+
+ const nextChildren = root.children.map((child) => removeNodeFromTree(child, nodeId) ?? child);
+ const hasChanged = nextChildren.some((child, index) => child !== root.children?.[index]);
+
+ return hasChanged ? { ...root, children: nextChildren } : root;
+};
+
+export const addNodeToTree = (args: {
+ root: UiNode;
+ targetId: string;
+ newNode: UiNode;
+ componentMeta: StudioComponentMetaRegistry;
+ mode?: 'append' | 'prepend';
+}): UiNode => {
+ const { root, targetId, newNode, componentMeta, mode = 'append' } = args;
+
+ if (root.id === targetId) {
+ if (!canAcceptChild({ parentType: root.type, childType: newNode.type, componentMeta })) {
+ return root;
+ }
+
+ const children = root.children ?? [];
+ return {
+ ...root,
+ children: mode === 'prepend' ? [newNode, ...children] : [...children, newNode],
+ };
+ }
+
+ if (!root.children) {
+ return root;
+ }
+
+ const nextChildren = root.children.map((child) =>
+ addNodeToTree({ root: child, targetId, newNode, componentMeta, mode }),
+ );
+ const hasChanged = nextChildren.some((child, index) => child !== root.children?.[index]);
+
+ return hasChanged ? { ...root, children: nextChildren } : root;
+};
+
+export const moveNodeInTree = (root: UiNode, nodeId: string, direction: 'up' | 'down'): UiNode => {
+ if (root.id === nodeId || !root.children) return root;
+
+ const index = root.children.findIndex((child) => child.id === nodeId);
+ if (index !== -1) {
+ const targetIndex = direction === 'up' ? index - 1 : index + 1;
+ if (targetIndex < 0 || targetIndex >= root.children.length) {
+ return root;
+ }
+
+ const currentNode = root.children[index];
+ const targetNode = root.children[targetIndex];
+ if (!currentNode || !targetNode) {
+ return root;
+ }
+
+ const nextChildren = [...root.children];
+ nextChildren[index] = targetNode;
+ nextChildren[targetIndex] = currentNode;
+ return { ...root, children: nextChildren };
+ }
+
+ const nextChildren = root.children.map((child) => moveNodeInTree(child, nodeId, direction));
+ const hasChanged = nextChildren.some(
+ (child, childIndex) => child !== root.children?.[childIndex],
+ );
+
+ return hasChanged ? { ...root, children: nextChildren } : root;
+};
+
+interface NodeWithParent {
+ node: UiNode;
+ parent: UiNode | null;
+ index: number;
}
-export function updateNodeInTree(
- root: UiNode,
- nodeId: StudioNodeId,
- updates: Record,
-): UiNode {
- if (root.id === nodeId) return { ...root, ...updates };
- if (!root.children) return root;
+function findNodeWithParent(root: UiNode, nodeId: string): NodeWithParent | null {
+ if (root.id === nodeId) {
+ return { node: root, parent: null, index: -1 };
+ }
+
+ const visit = (node: UiNode): NodeWithParent | null => {
+ const children = node.children ?? [];
+ for (const [index, child] of children.entries()) {
+ if (child.id === nodeId) {
+ return { node: child, parent: node, index };
+ }
- const children = root.children.map((child) => updateNodeInTree(child, nodeId, updates));
- if (children.every((child, index) => child === root.children?.[index])) return root;
- return { ...root, children };
+ const nested = visit(child);
+ if (nested) {
+ return nested;
+ }
+ }
+
+ return null;
+ };
+
+ return visit(root);
}
-export function resolveDefaultInsertPlacement(args: {
- readonly root: UiNode;
- readonly selectedNodeId: StudioNodeId | null;
- readonly childType: string;
- readonly componentMeta: StudioComponentMetaRegistry;
-}):
- | { readonly ok: true; readonly placement: NodePlacement }
- | { readonly ok: false; readonly reason: string } {
- const selected = args.selectedNodeId ? findNodeById(args.root, args.selectedNodeId) : null;
- if (!selected) {
- return { ok: true, placement: { parentId: args.root.id, index: 0, kind: 'inside' } };
- }
-
- const selectedMeta = new Map(Object.entries(args.componentMeta)).get(selected.type);
- if (selectedMeta?.allowedChildren.includes(args.childType)) {
+function isDescendantNode(node: UiNode, descendantId: string): boolean {
+ const children = node.children ?? [];
+ for (const child of children) {
+ if (child.id === descendantId || isDescendantNode(child, descendantId)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function removeNodeForMove(args: { node: UiNode; nodeId: string }): {
+ node: UiNode;
+ removedNode: UiNode | null;
+} {
+ const { node, nodeId } = args;
+ const children = node.children ?? [];
+ const directIndex = children.findIndex((child) => child.id === nodeId);
+
+ if (directIndex !== -1) {
+ const removedNode = children[directIndex];
+ if (!removedNode) {
+ return { node, removedNode: null };
+ }
+
return {
- ok: true,
- placement: {
- parentId: selected.id,
- index: selected.children?.length ?? 0,
- kind: 'inside',
+ node: {
+ ...node,
+ children: children.filter((child) => child.id !== nodeId),
},
+ removedNode,
};
}
- const parent = findParent(args.root, selected.id);
- if (!parent) return { ok: false, reason: 'No valid insertion parent.' };
- const index = parent.children?.findIndex((child) => child.id === selected.id) ?? -1;
- if (index < 0) return { ok: false, reason: 'Selected node is not in its parent.' };
+ const nextChildren: UiNode[] = [];
+ let removedNode: UiNode | null = null;
+
+ for (const child of children) {
+ if (removedNode) {
+ nextChildren.push(child);
+ continue;
+ }
+
+ const { node: nextChild, removedNode: nextRemovedNode } = removeNodeForMove({
+ node: child,
+ nodeId,
+ });
+ if (nextRemovedNode) {
+ removedNode = nextRemovedNode;
+ }
+ nextChildren.push(nextChild);
+ }
+
+ if (!removedNode) {
+ return { node, removedNode: null };
+ }
+
return {
- ok: true,
- placement: {
+ node: {
+ ...node,
+ children: nextChildren,
+ },
+ removedNode,
+ };
+}
+
+export function canAcceptChild(args: {
+ parentType: string;
+ childType: string;
+ componentMeta: StudioComponentMetaRegistry;
+}): boolean {
+ const { parentType, childType, componentMeta } = args;
+ const meta = componentMeta[parentType];
+ if (!meta) return false;
+
+ return meta.allowedChildren.includes(childType);
+}
+
+export function validateNodePlacement(args: {
+ root: UiNode;
+ placement: NodePlacement;
+ childType: string;
+ componentMeta: StudioComponentMetaRegistry;
+}): PlacementValidationResult {
+ const { root, placement, childType, componentMeta } = args;
+ const parent = findNodeById(root, placement.parentId);
+ if (!parent) {
+ return {
+ ok: false,
+ reason: {
+ code: 'missing-parent',
+ message: `Parent node ${placement.parentId} was not found.`,
+ },
+ };
+ }
+
+ if (!canAcceptChild({ parentType: parent.type, childType, componentMeta })) {
+ return {
+ ok: false,
+ reason: {
+ code: 'child-not-allowed',
+ message: `Parent ${parent.type} does not allow ${childType} children.`,
+ },
+ };
+ }
+
+ const children = parent.children ?? [];
+ if (placement.referenceId) {
+ const hasReference = children.some((child) => child.id === placement.referenceId);
+ if (!hasReference) {
+ return {
+ ok: false,
+ reason: {
+ code: 'missing-target',
+ message: `Reference node ${placement.referenceId} was not found under ${parent.id}.`,
+ },
+ };
+ }
+ }
+
+ if (placement.index < 0 || placement.index > children.length) {
+ return {
+ ok: false,
+ reason: {
+ code: 'invalid-index',
+ message: `Index ${placement.index} is out of bounds for ${parent.id}.`,
+ },
+ };
+ }
+
+ return { ok: true };
+}
+
+export function resolveInsertPlacement(args: {
+ root: UiNode;
+ targetNodeId: string;
+ childType: string;
+ componentMeta: StudioComponentMetaRegistry;
+ kind: PlacementKind;
+}): PlacementResolutionResult {
+ const { root, targetNodeId, childType, componentMeta, kind } = args;
+ const target = findNodeWithParent(root, targetNodeId);
+ if (!target) {
+ return {
+ ok: false,
+ reason: {
+ code: 'missing-target',
+ message: `Target node ${targetNodeId} was not found.`,
+ },
+ };
+ }
+
+ if (kind === 'inside') {
+ const parent = target.node;
+ const children = parent.children ?? [];
+ const placement: NodePlacement = {
parentId: parent.id,
- index: index + 1,
+ index: children.length,
+ kind,
+ };
+ const validation = validateNodePlacement({ root, placement, childType, componentMeta });
+ if (!validation.ok) {
+ return validation;
+ }
+
+ return { ok: true, placement };
+ }
+
+ const { parent } = target;
+ if (!parent) {
+ return {
+ ok: false,
+ reason: {
+ code: 'missing-parent',
+ message: `Target node ${targetNodeId} has no parent.`,
+ },
+ };
+ }
+
+ const index = kind === 'before' ? target.index : target.index + 1;
+ const placement: NodePlacement = {
+ parentId: parent.id,
+ index,
+ kind,
+ referenceId: target.node.id,
+ };
+ const validation = validateNodePlacement({ root, placement, childType, componentMeta });
+ if (!validation.ok) {
+ return validation;
+ }
+
+ return { ok: true, placement };
+}
+
+export function resolveDefaultInsertPlacement(args: {
+ root: UiNode;
+ selectedNodeId: string | null;
+ childType: string;
+ componentMeta: StudioComponentMetaRegistry;
+}): PlacementResolutionResult {
+ const { root, selectedNodeId, childType, componentMeta } = args;
+ if (selectedNodeId) {
+ const inside = resolveInsertPlacement({
+ root,
+ targetNodeId: selectedNodeId,
+ childType,
+ componentMeta,
+ kind: 'inside',
+ });
+ if (inside.ok) return inside;
+
+ const after = resolveInsertPlacement({
+ root,
+ targetNodeId: selectedNodeId,
+ childType,
+ componentMeta,
kind: 'after',
- referenceId: selected.id,
+ });
+ if (after.ok) return after;
+ }
+
+ const atRoot = resolveInsertPlacement({
+ root,
+ targetNodeId: root.id,
+ childType,
+ componentMeta,
+ kind: 'inside',
+ });
+ if (atRoot.ok) return atRoot;
+
+ return {
+ ok: false,
+ reason: {
+ code: 'no-valid-target',
+ message: `No valid insertion target found for ${childType}.`,
},
};
}
-export function buildInsertCatalogEntries(args: {
- readonly componentMeta: StudioComponentMetaRegistry;
- readonly recipes?: readonly InsertCatalogEntry[];
-}): readonly InsertCatalogEntry[] {
- const components = Object.entries(args.componentMeta).map(([type, meta]) => ({
- id: `component:${type}`,
- label: meta.blueprint?.label ?? type,
- category: meta.category,
- type,
- defaultProps: meta.blueprint?.defaultProps,
- }));
- return [...components, ...(args.recipes ?? [])];
+export interface InsertNodeAtPlacementArgs {
+ root: UiNode;
+ placement: NodePlacement;
+ componentMeta: StudioComponentMetaRegistry;
+ makeNode: () => UiNode;
}
-export function resolveInsertCatalogEntries(args: {
- readonly entries: readonly InsertCatalogEntry[];
- readonly root: UiNode;
- readonly selectedNodeId: StudioNodeId | null;
- readonly componentMeta: StudioComponentMetaRegistry;
-}): readonly ResolvedInsertCatalogEntry[] {
- return args.entries.map((entry) => {
- const meta = new Map(Object.entries(args.componentMeta)).get(entry.type);
- if (!meta?.directManifestNode) {
+export interface InsertNodeAtPlacementResult {
+ root: UiNode;
+ insertedNodeId: string;
+}
+
+function insertChildAtIndex(args: {
+ node: UiNode;
+ parentId: string;
+ index: number;
+ newNode: UiNode;
+}): { node: UiNode; inserted: boolean } {
+ const { node, parentId, index, newNode } = args;
+ if (node.id === parentId) {
+ const children = node.children ?? [];
+ if (index < 0 || index > children.length) {
+ return { node, inserted: false };
+ }
+
+ const nextChildren = [...children.slice(0, index), newNode, ...children.slice(index)];
+ return {
+ node: {
+ ...node,
+ children: nextChildren,
+ },
+ inserted: true,
+ };
+ }
+
+ if (!node.children || node.children.length === 0) {
+ return { node, inserted: false };
+ }
+
+ const results = node.children.map((child) =>
+ insertChildAtIndex({ node: child, parentId, index, newNode }),
+ );
+ const inserted = results.some((result) => result.inserted);
+
+ if (!inserted) {
+ return { node, inserted: false };
+ }
+
+ return {
+ node: {
+ ...node,
+ children: results.map((result) => result.node),
+ },
+ inserted: true,
+ };
+}
+
+export function insertNodeAtPlacement(
+ args: InsertNodeAtPlacementArgs,
+): InsertNodeAtPlacementResult | null {
+ const { root, placement, componentMeta, makeNode } = args;
+ const newNode = makeNode();
+ const validation = validateNodePlacement({
+ root,
+ placement,
+ childType: newNode.type,
+ componentMeta,
+ });
+
+ if (!validation.ok) {
+ return null;
+ }
+
+ const result = insertChildAtIndex({
+ node: root,
+ parentId: placement.parentId,
+ index: placement.index,
+ newNode,
+ });
+ if (!result.inserted) return null;
+
+ return { root: result.node, insertedNodeId: newNode.id };
+}
+
+export interface MoveNodeToPlacementArgs {
+ root: UiNode;
+ nodeId: string;
+ placement: NodePlacement;
+ componentMeta: StudioComponentMetaRegistry;
+}
+
+export interface MoveNodeToPlacementResult {
+ root: UiNode;
+ movedNodeId: string;
+}
+
+function getAdjustedMovePlacement(args: {
+ source: NodeWithParent;
+ placement: NodePlacement;
+}): NodePlacement | null {
+ const { source, placement } = args;
+ if (!source.parent) {
+ return null;
+ }
+
+ if (placement.referenceId === source.node.id) {
+ return null;
+ }
+
+ const sourceParentId = source.parent.id;
+ if (placement.parentId !== sourceParentId) {
+ return placement;
+ }
+
+ const adjustedIndex = source.index < placement.index ? placement.index - 1 : placement.index;
+ if (adjustedIndex === source.index) {
+ return null;
+ }
+
+ return {
+ ...placement,
+ index: adjustedIndex,
+ };
+}
+
+export function moveNodeToPlacement(
+ args: MoveNodeToPlacementArgs,
+): MoveNodeToPlacementResult | null {
+ const { root, nodeId, placement, componentMeta } = args;
+ const source = findNodeWithParent(root, nodeId);
+ if (!source) {
+ return null;
+ }
+
+ if (!source.parent) {
+ return null;
+ }
+
+ if (placement.parentId === nodeId) {
+ return null;
+ }
+
+ if (isDescendantNode(source.node, placement.parentId)) {
+ return null;
+ }
+
+ const adjustedPlacement = getAdjustedMovePlacement({ source, placement });
+ if (!adjustedPlacement) {
+ return null;
+ }
+
+ const removed = removeNodeForMove({ node: root, nodeId });
+ if (!removed.removedNode) {
+ return null;
+ }
+
+ const validation = validateNodePlacement({
+ root: removed.node,
+ placement: adjustedPlacement,
+ childType: removed.removedNode.type,
+ componentMeta,
+ });
+ if (!validation.ok) {
+ return null;
+ }
+
+ const inserted = insertChildAtIndex({
+ node: removed.node,
+ parentId: adjustedPlacement.parentId,
+ index: adjustedPlacement.index,
+ newNode: removed.removedNode,
+ });
+ if (!inserted.inserted) {
+ return null;
+ }
+
+ return {
+ root: inserted.node,
+ movedNodeId: removed.removedNode.id,
+ };
+}
+
+const CATEGORY_LABELS: Record = {
+ layout: 'Layouts',
+ pattern: 'Patterns',
+ component: 'Components',
+ foundation: 'Foundation',
+ recipe: 'Recipes',
+};
+
+const CATEGORY_ORDER = ['layout', 'pattern', 'component', 'foundation', 'recipe'] as const;
+
+export const STUDIO_INSERT_RECIPES: readonly InsertRecipe[] = [
+ {
+ id: 'screen-section',
+ label: 'Screen section',
+ description: 'A screen section with a starter heading.',
+ category: 'recipe',
+ root: {
+ type: 'ScreenSection',
+ children: [{ type: 'Heading' }],
+ },
+ },
+ {
+ id: 'panel-stack',
+ label: 'Panel stack',
+ description: 'Panel with a stack starter.',
+ category: 'recipe',
+ root: {
+ type: 'Panel',
+ children: [{ type: 'Stack' }],
+ },
+ },
+ {
+ id: 'card-heading',
+ label: 'Card heading',
+ description: 'Card with a headline.',
+ category: 'recipe',
+ root: {
+ type: 'Card',
+ children: [{ type: 'Heading' }],
+ },
+ },
+];
+
+export function getInsertCatalogCategoryLabel(category: string): string {
+ return CATEGORY_LABELS[category] ?? category;
+}
+
+function resolveCategoryOrder(category: string): number {
+ const index = CATEGORY_ORDER.indexOf(category as (typeof CATEGORY_ORDER)[number]);
+ return index === -1 ? CATEGORY_ORDER.length : index;
+}
+
+function describeInsertRecipeIssue(issue: InsertRecipeIssue): string {
+ if (issue.code === 'missing-meta') {
+ return `Missing component metadata for ${issue.nodeType}.`;
+ }
+
+ return `Child ${issue.childType ?? 'unknown'} is not allowed under ${issue.nodeType}.`;
+}
+
+export function validateInsertRecipe(
+ recipe: InsertRecipe,
+ componentMeta: StudioComponentMetaRegistry,
+): InsertRecipeIssue | null {
+ const visit = (node: InsertRecipeNode, path: string[]): InsertRecipeIssue | null => {
+ const meta = componentMeta[node.type];
+ if (!meta) {
return {
- ...entry,
- status: 'disabled' as const,
- disabledReason: { code: 'not-direct', message: 'Not a direct manifest node.' },
+ code: 'missing-meta',
+ path,
+ nodeType: node.type,
};
}
- const placement = resolveDefaultInsertPlacement({
- root: args.root,
- selectedNodeId: args.selectedNodeId,
- childType: entry.type,
- componentMeta: args.componentMeta,
- });
- return placement.ok
- ? { ...entry, status: 'enabled' as const, placement: placement.placement }
- : {
- ...entry,
- status: 'disabled' as const,
- disabledReason: { code: 'invalid-placement', message: placement.reason },
+
+ const children = node.children ?? [];
+ for (const child of children) {
+ if (!meta.allowedChildren.includes(child.type)) {
+ return {
+ code: 'child-not-allowed',
+ path,
+ nodeType: node.type,
+ childType: child.type,
};
- });
+ }
+
+ const nested = visit(child, [...path, child.type]);
+ if (nested) {
+ return nested;
+ }
+ }
+
+ return null;
+ };
+
+ return visit(recipe.root, [recipe.root.type]);
+}
+
+function createNodeFromRecipe(
+ recipe: InsertRecipe,
+ componentMeta: StudioComponentMetaRegistry,
+ createId: StudioIdGenerator,
+): UiNode {
+ const buildNode = (node: InsertRecipeNode): UiNode => {
+ const meta = componentMeta[node.type];
+ const defaultProps = meta?.blueprint?.defaultProps;
+
+ return {
+ id: createId(node.type),
+ type: node.type,
+ props: defaultProps ? { ...defaultProps } : {},
+ children: (node.children ?? []).map(buildNode),
+ };
+ };
+
+ return buildNode(recipe.root);
}
export function createNodeFromCatalogEntry(
entry: InsertCatalogEntry,
componentMeta: StudioComponentMetaRegistry,
- makeId: StudioIdGenerator,
+ createId: StudioIdGenerator = generateStudioId,
): UiNode {
- if (entry.recipe) return cloneWithNewIds(entry.recipe, makeId);
- const meta = new Map(Object.entries(componentMeta)).get(entry.type);
+ if (entry.kind === 'recipe') {
+ return createNodeFromRecipe(entry.recipe, componentMeta, createId);
+ }
+
+ const meta = componentMeta[entry.componentType];
+ const defaultProps = meta?.blueprint?.defaultProps;
+
return {
- id: makeId(entry.type),
- type: entry.type,
- props: { ...(meta?.blueprint?.defaultProps ?? entry.defaultProps ?? {}) },
+ id: createId(entry.componentType),
+ type: entry.componentType,
+ props: defaultProps ? { ...defaultProps } : {},
children: [],
};
}
-export function insertNodeAtPlacement(args: {
- readonly root: UiNode;
- readonly placement: NodePlacement;
- readonly componentMeta: StudioComponentMetaRegistry;
- readonly makeNode: () => UiNode;
-}): UiNode | null {
- const node = args.makeNode();
- if (!new Map(Object.entries(args.componentMeta)).get(node.type)) return null;
- return insertIntoTree(args.root, args.placement, node);
-}
-
-export function moveNodeToPlacement(args: {
- readonly root: UiNode;
- readonly nodeId: StudioNodeId;
- readonly placement: NodePlacement;
- readonly componentMeta: StudioComponentMetaRegistry;
-}): UiNode | null {
- const node = findNodeById(args.root, args.nodeId);
- if (!node || args.root.id === node.id) return null;
- const withoutNode = removeFromTree(args.root, args.nodeId);
- if (!withoutNode) return null;
- return insertIntoTree(withoutNode, args.placement, node);
-}
-
-function findParent(root: UiNode, nodeId: StudioNodeId): UiNode | null {
- for (const child of root.children ?? []) {
- if (child.id === nodeId) return root;
- const found = findParent(child, nodeId);
- if (found) return found;
- }
- return null;
+function createComponentEntry(
+ componentType: string,
+ meta: StudioComponentMeta,
+): InsertCatalogComponentEntry {
+ const isDirect = meta.directManifestNode === true;
+
+ return {
+ id: `component:${componentType}`,
+ label: meta.blueprint?.label ?? componentType,
+ category: meta.category,
+ rootType: componentType,
+ kind: 'component',
+ componentType,
+ status: isDirect ? 'enabled' : 'disabled',
+ disabledReason: isDirect
+ ? undefined
+ : {
+ code: 'not-direct',
+ detail: 'Not a direct manifest node.',
+ },
+ };
}
-function insertIntoTree(root: UiNode, placement: NodePlacement, node: UiNode): UiNode | null {
- if (root.id === placement.parentId) {
- const children = [...(root.children ?? [])];
- children.splice(placement.index, 0, node);
- return { ...root, children };
- }
- if (!root.children) return null;
+function createRecipeEntry(
+ recipe: InsertRecipe,
+ componentMeta: StudioComponentMetaRegistry,
+): InsertCatalogRecipeEntry {
+ const issue = validateInsertRecipe(recipe, componentMeta);
+ if (issue) {
+ const code: InsertCatalogDisabledReasonCode =
+ issue.code === 'missing-meta' ? 'missing-meta' : 'invalid-recipe';
- for (let index = 0; index < root.children.length; index += 1) {
- const child = root.children[index];
- if (!child) continue;
- const updated = insertIntoTree(child, placement, node);
- if (!updated) continue;
- const children = [...root.children];
- children[index] = updated;
- return { ...root, children };
+ return {
+ id: `recipe:${recipe.id}`,
+ label: recipe.label,
+ description: recipe.description,
+ category: 'recipe',
+ rootType: recipe.root.type,
+ kind: 'recipe',
+ recipe,
+ status: 'disabled',
+ disabledReason: {
+ code,
+ detail: describeInsertRecipeIssue(issue),
+ issue,
+ },
+ };
}
- return null;
+
+ return {
+ id: `recipe:${recipe.id}`,
+ label: recipe.label,
+ description: recipe.description,
+ category: 'recipe',
+ rootType: recipe.root.type,
+ kind: 'recipe',
+ recipe,
+ status: 'enabled',
+ };
}
-function removeFromTree(root: UiNode, nodeId: StudioNodeId): UiNode | null {
- if (!root.children) return root;
- const children = root.children.filter((child) => child.id !== nodeId);
- if (children.length !== root.children.length) return { ...root, children };
+export function buildInsertCatalogEntries(args: {
+ componentMeta: StudioComponentMetaRegistry;
+ recipes?: readonly InsertRecipe[];
+}): InsertCatalogEntry[] {
+ const { componentMeta, recipes = STUDIO_INSERT_RECIPES } = args;
+ const componentEntries: InsertCatalogComponentEntry[] = [];
- for (let index = 0; index < root.children.length; index += 1) {
- const child = root.children[index];
- if (!child) continue;
- const updated = removeFromTree(child, nodeId);
- if (updated === child) continue;
- const nextChildren = [...root.children];
- if (updated) nextChildren[index] = updated;
- return { ...root, children: nextChildren };
+ for (const [type, meta] of Object.entries(componentMeta)) {
+ if (meta) {
+ componentEntries.push(createComponentEntry(type, meta));
+ }
}
- return root;
+
+ const recipeEntries = recipes.map((recipe) => createRecipeEntry(recipe, componentMeta));
+
+ return [...componentEntries, ...recipeEntries].sort((left, right) => {
+ const leftOrder = resolveCategoryOrder(left.category);
+ const rightOrder = resolveCategoryOrder(right.category);
+ if (leftOrder !== rightOrder) {
+ return leftOrder - rightOrder;
+ }
+
+ return left.label.localeCompare(right.label);
+ });
+}
+
+function resolvePlacementForEntry(args: {
+ entry: InsertCatalogEntry;
+ root: UiNode;
+ selectedNodeId: string | null;
+ componentMeta: StudioComponentMetaRegistry;
+}): PlacementResolutionResult {
+ const { entry, root, selectedNodeId, componentMeta } = args;
+
+ return resolveDefaultInsertPlacement({
+ root,
+ selectedNodeId,
+ childType: entry.rootType,
+ componentMeta,
+ });
+}
+
+export function resolveInsertCatalogEntries(args: {
+ entries: readonly InsertCatalogEntry[];
+ root: UiNode | null;
+ selectedNodeId: string | null;
+ componentMeta: StudioComponentMetaRegistry;
+}): InsertCatalogEntry[] {
+ const { entries, root, selectedNodeId, componentMeta } = args;
+
+ return entries.map((entry) => {
+ if (entry.status === 'disabled') {
+ return entry;
+ }
+
+ if (!root) {
+ return {
+ ...entry,
+ status: 'disabled',
+ disabledReason: {
+ code: 'no-placement',
+ detail: 'No active screen available.',
+ },
+ };
+ }
+
+ const placement = resolvePlacementForEntry({
+ entry,
+ root,
+ selectedNodeId,
+ componentMeta,
+ });
+ if (!placement.ok) {
+ return {
+ ...entry,
+ status: 'disabled',
+ disabledReason: {
+ code: 'no-placement',
+ detail: placement.reason.message,
+ },
+ };
+ }
+
+ return {
+ ...entry,
+ status: 'enabled',
+ placement: placement.placement,
+ };
+ });
+}
+
+function isStyleRecord(value: unknown): value is Record {
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;
+
+ return Object.values(value).every(
+ (entry) => typeof entry === 'string' || typeof entry === 'number',
+ );
}
diff --git a/src/ui/admin/pages/PropertiesAdminPage.tsx b/src/ui/admin/pages/PropertiesAdminPage.tsx
index 5b5f5a8..a9ae256 100644
--- a/src/ui/admin/pages/PropertiesAdminPage.tsx
+++ b/src/ui/admin/pages/PropertiesAdminPage.tsx
@@ -42,10 +42,7 @@ function ResolvedProperties({ node }: { readonly node: UiNode }) {
const studio = useStudio();
const componentMeta = new Map(Object.entries(ZORA_COMPONENT_META)).get(node.type);
const groups = resolveStudioInstancePropertyGroups(node, ZORA_COMPONENT_META);
- const updateProperty = (
- propertyName: string,
- value: StudioInstancePropertyValue | undefined,
- ) => {
+ const updateProperty = (propertyName: string, value: StudioInstancePropertyValue | undefined) => {
studio.updateNode(node.id, createStudioInstancePropertyPatch(node, propertyName, value));
};
@@ -89,15 +86,11 @@ function InstancePropertyEditor(props: {
{field.editor === 'text' ? (
) : null}
- {field.editor === 'number' ? (
-
- ) : null}
+ {field.editor === 'number' ? : null}
{field.editor === 'boolean' ? (
) : null}
- {field.editor === 'choice' ? (
-
- ) : null}
+ {field.editor === 'choice' ? : null}
{field.editor === 'unsupported' ? (
This instance property requires a dedicated editor that is not available yet.
From 4cab8eb1f4accde1b8d656be91139fad932a3155 Mon Sep 17 00:00:00 2001
From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com>
Date: Thu, 6 Aug 2026 02:12:37 +0200
Subject: [PATCH 21/28] refactor: remove obsolete raw property formatter
---
src/ui/admin/adminPageUtils.ts | 6 ------
1 file changed, 6 deletions(-)
diff --git a/src/ui/admin/adminPageUtils.ts b/src/ui/admin/adminPageUtils.ts
index 394e37a..12e24ef 100644
--- a/src/ui/admin/adminPageUtils.ts
+++ b/src/ui/admin/adminPageUtils.ts
@@ -5,9 +5,3 @@ export function readRecord(value: unknown): Record {
export function readString(value: unknown): string | null {
return typeof value === 'string' ? value : null;
}
-
-export function formatPrimitive(value: unknown): string {
- if (typeof value === 'string') return value;
- if (typeof value === 'number' || typeof value === 'boolean') return String(value);
- return JSON.stringify(value);
-}
From 3bcc772a6ec944240353fbfc5142ddcbb54c57da Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 6 Aug 2026 00:16:24 +0000
Subject: [PATCH 22/28] feat: add metadata-driven instance properties
---
.../apply-adm3-instance-properties.yml | 145 ------------------
adm3-knip.log | 4 -
paradox/index.html | 30 ++--
paradox/paradox.json | 27 ++--
4 files changed, 20 insertions(+), 186 deletions(-)
delete mode 100644 .github/workflows/apply-adm3-instance-properties.yml
delete mode 100644 adm3-knip.log
diff --git a/.github/workflows/apply-adm3-instance-properties.yml b/.github/workflows/apply-adm3-instance-properties.yml
deleted file mode 100644
index c9720f1..0000000
--- a/.github/workflows/apply-adm3-instance-properties.yml
+++ /dev/null
@@ -1,145 +0,0 @@
-name: Validate ADM 3 instance Properties
-
-on:
- push:
- branches:
- - agent/adm-3-instance-properties
-
-permissions:
- contents: write
-
-concurrency:
- group: adm-3-instance-properties
- cancel-in-progress: false
-
-jobs:
- validate:
- if: github.actor != 'github-actions[bot]'
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout branch
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- ref: agent/adm-3-instance-properties
-
- - name: Restore minimal public API patch
- shell: bash
- run: |
- git checkout origin/main -- src/index.ts
- python3 - <<'PY'
- from pathlib import Path
-
- path = Path('src/index.ts')
- source = path.read_text()
- export_marker = "export type {\n TemplateCatalog,"
- source = source.replace(
- export_marker,
- "export * from './propertiesAuthoringModel';\n" + export_marker,
- 1,
- )
- contracts_marker = " 'StudioComponentMetaRegistry',\n"
- source = source.replace(
- contracts_marker,
- contracts_marker
- + " 'StudioInstancePropertyField',\n"
- + " 'resolveStudioInstancePropertyGroups',\n"
- + " 'createStudioInstancePropertyPatch',\n",
- 1,
- )
- path.write_text(source)
- PY
-
- - name: Setup Bun
- uses: oven-sh/setup-bun@v2
- with:
- bun-version: '1.3.13'
-
- - name: Clean temporary diagnostics
- run: rm -f adm3-lint-fix.log adm3-validation.log adm3-knip.log
-
- - name: Install dependencies
- run: bun install --frozen-lockfile
-
- - name: Regenerate and format
- shell: bash
- run: |
- set -o pipefail
- {
- bun run lint:fix
- bun run docs
- bun run format
- } 2>&1 | tee /tmp/adm3-validation.log
-
- - name: Capture preparation failure
- if: failure()
- shell: bash
- run: |
- cp /tmp/adm3-validation.log adm3-validation.log || true
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- git add -A
- git commit -m "chore: capture adm 3 validation failure"
- git push origin HEAD:agent/adm-3-instance-properties
-
- - name: Build
- run: bun run build
-
- - name: Validate Ankhorage repository
- run: bunx @ankhorage/ankh doctor validate .
-
- - name: Lint
- run: bun run lint
-
- - name: Format check
- run: bun run format:check
-
- - name: Knip
- shell: bash
- run: |
- set -o pipefail
- bun run knip 2>&1 | tee /tmp/adm3-knip.log
-
- - name: Capture Knip failure
- if: failure()
- shell: bash
- run: |
- cp /tmp/adm3-knip.log adm3-knip.log || true
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- git add -A
- git commit -m "chore: capture adm 3 knip failure"
- git push origin HEAD:agent/adm-3-instance-properties
-
- - name: Tests
- run: bun run test
-
- - name: Studio web smoke
- run: bun run test:smoke:studio-web
-
- - name: Generated app web E2E
- run: bun run test:e2e:generated-app-web
-
- - name: Typecheck package
- run: bun run typecheck
-
- - name: Typecheck Studio app
- run: bun run type-check:studio
-
- - name: Changeset status
- run: bun run changeset:status
-
- - name: Package smoke
- run: npm pack --dry-run
-
- - name: Commit validated implementation
- shell: bash
- run: |
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- git rm .github/workflows/apply-adm3-instance-properties.yml
- rm -f adm3-lint-fix.log adm3-validation.log adm3-knip.log
- git add -A
- git commit -m "feat: add metadata-driven instance properties"
- git push origin HEAD:agent/adm-3-instance-properties
diff --git a/adm3-knip.log b/adm3-knip.log
deleted file mode 100644
index 699c397..0000000
--- a/adm3-knip.log
+++ /dev/null
@@ -1,4 +0,0 @@
-$ ankhorage-knip
-Unused exports (1)
-formatPrimitive function src/ui/admin/adminPageUtils.ts:9:17
-error: script "knip" exited with code 1
diff --git a/paradox/index.html b/paradox/index.html
index 9285ab7..1191cb2 100644
--- a/paradox/index.html
+++ b/paradox/index.html
@@ -1544,7 +1544,7 @@ @ankhorage/studio
@@ -4732,15 +4732,12 @@ src/ui/admin/adminPagePrimitives.tsx
src/ui/admin/adminPageUtils.ts
Referenced module
Dependencies: None
-
- Exports: formatPrimitive, readRecord,
- readString
-
+ Exports: readRecord, readString
src/ui/admin/AnkhAdminPage.test.ts
@@ -22308,11 +22305,6 @@ readString
src/ui/admin/adminPageUtils.ts:5:1
No description available.
-
- formatPrimitive
- src/ui/admin/adminPageUtils.ts:9:1
- No description available.
-
updateProperty
data-search="InstancePropertyEditor src/ui/admin/pages/PropertiesAdminPage.tsx "
>
InstancePropertyEditor
- src/ui/admin/pages/PropertiesAdminPage.tsx:81:1
+ src/ui/admin/pages/PropertiesAdminPage.tsx:78:1
No description available.
InstancePropertyEditor
data-search="NumberPropertyInput src/ui/admin/pages/PropertiesAdminPage.tsx "
>
NumberPropertyInput
- src/ui/admin/pages/PropertiesAdminPage.tsx:110:1
+ src/ui/admin/pages/PropertiesAdminPage.tsx:103:1
No description available.
commit
- src/ui/admin/pages/PropertiesAdminPage.tsx:123:9
+ src/ui/admin/pages/PropertiesAdminPage.tsx:116:9
No description available.
commit
data-search="BooleanPropertyInput src/ui/admin/pages/PropertiesAdminPage.tsx "
>
BooleanPropertyInput
- src/ui/admin/pages/PropertiesAdminPage.tsx:159:1
+ src/ui/admin/pages/PropertiesAdminPage.tsx:152:1
No description available.
BooleanPropertyInput
data-search="ChoicePropertyInput src/ui/admin/pages/PropertiesAdminPage.tsx "
>
ChoicePropertyInput
- src/ui/admin/pages/PropertiesAdminPage.tsx:178:1
+ src/ui/admin/pages/PropertiesAdminPage.tsx:171:1
No description available.
ChoicePropertyInput
data-search="UnavailableNode src/ui/admin/pages/PropertiesAdminPage.tsx "
>
UnavailableNode
- src/ui/admin/pages/PropertiesAdminPage.tsx:204:1
+ src/ui/admin/pages/PropertiesAdminPage.tsx:197:1
No description available.
UnavailableNode
data-search="NoInstanceProperties src/ui/admin/pages/PropertiesAdminPage.tsx "
>
NoInstanceProperties
- src/ui/admin/pages/PropertiesAdminPage.tsx:214:1
+ src/ui/admin/pages/PropertiesAdminPage.tsx:207:1
No description available.
NoInstanceProperties
data-search="toInputText src/ui/admin/pages/PropertiesAdminPage.tsx "
>
toInputText
- src/ui/admin/pages/PropertiesAdminPage.tsx:224:1
+ src/ui/admin/pages/PropertiesAdminPage.tsx:217:1
No description available.
diff --git a/paradox/paradox.json b/paradox/paradox.json
index 57a0e8b..8a23b7c 100644
--- a/paradox/paradox.json
+++ b/paradox/paradox.json
@@ -2494,7 +2494,7 @@
"path": "src/ui/admin/adminPageUtils.ts",
"isEntrypoint": false,
"dependencies": [],
- "exports": ["formatPrimitive", "readRecord", "readString"]
+ "exports": ["readRecord", "readString"]
},
{
"path": "src/ui/admin/AnkhAdminPage.test.ts",
@@ -15146,15 +15146,6 @@
"column": 1
}
},
- {
- "name": "formatPrimitive",
- "description": null,
- "sourceLocation": {
- "filePath": "src/ui/admin/adminPageUtils.ts",
- "line": 9,
- "column": 1
- }
- },
{
"name": "AnkhAdminPage",
"description": null,
@@ -15880,7 +15871,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 81,
+ "line": 78,
"column": 1
}
},
@@ -15889,7 +15880,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 110,
+ "line": 103,
"column": 1
}
},
@@ -15898,7 +15889,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 123,
+ "line": 116,
"column": 9
}
},
@@ -15907,7 +15898,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 159,
+ "line": 152,
"column": 1
}
},
@@ -15916,7 +15907,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 178,
+ "line": 171,
"column": 1
}
},
@@ -15925,7 +15916,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 204,
+ "line": 197,
"column": 1
}
},
@@ -15934,7 +15925,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 214,
+ "line": 207,
"column": 1
}
},
@@ -15943,7 +15934,7 @@
"description": null,
"sourceLocation": {
"filePath": "src/ui/admin/pages/PropertiesAdminPage.tsx",
- "line": 224,
+ "line": 217,
"column": 1
}
},
From 45d35d67562262ee61cbb8cd25a95772a389065a Mon Sep 17 00:00:00 2001
From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com>
Date: Thu, 6 Aug 2026 02:54:02 +0200
Subject: [PATCH 23/28] chore: finalize ADM 3 against ZORA 2.9.3
---
.github/workflows/finalize-adm3-zora-293.yml | 148 +++++++++++++++++++
1 file changed, 148 insertions(+)
create mode 100644 .github/workflows/finalize-adm3-zora-293.yml
diff --git a/.github/workflows/finalize-adm3-zora-293.yml b/.github/workflows/finalize-adm3-zora-293.yml
new file mode 100644
index 0000000..ca5808c
--- /dev/null
+++ b/.github/workflows/finalize-adm3-zora-293.yml
@@ -0,0 +1,148 @@
+name: Finalize ADM 3 with ZORA 2.9.3
+
+on:
+ push:
+ branches:
+ - agent/adm-3-instance-properties
+
+permissions:
+ contents: write
+
+jobs:
+ finalize:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout branch
+ uses: actions/checkout@v4
+ with:
+ ref: agent/adm-3-instance-properties
+ fetch-depth: 0
+
+ - name: Setup Bun
+ uses: oven-sh/setup-bun@v2
+ with:
+ bun-version: '1.3.13'
+
+ - name: Consume released ZORA metadata
+ run: |
+ python3 <<'PY'
+ from pathlib import Path
+
+ package_path = Path('package.json')
+ package_text = package_path.read_text()
+ old_dependency = '"@ankhorage/zora": "^2.9.2"'
+ new_dependency = '"@ankhorage/zora": "^2.9.3"'
+ if old_dependency in package_text:
+ package_text = package_text.replace(old_dependency, new_dependency, 1)
+ elif new_dependency not in package_text:
+ raise SystemExit('Expected ZORA dependency was not found')
+ package_path.write_text(package_text)
+
+ test_path = Path('src/propertiesAuthoringModel.test.ts')
+ test_text = test_path.read_text()
+ zora_import = "import { ZORA_COMPONENT_META } from '@ankhorage/zora';\n"
+ if zora_import not in test_text:
+ contract_import = "import type { UiNode } from '@ankhorage/contracts';\n"
+ test_text = test_text.replace(contract_import, contract_import + zora_import, 1)
+
+ marker = " test('consumes released ZORA Heading metadata without exposing theme presentation', () => {"
+ if marker not in test_text:
+ addition = r'''
+
+ test('consumes released ZORA Heading metadata without exposing theme presentation', () => {
+ const node: UiNode = {
+ id: 'heading',
+ type: 'Heading',
+ props: {
+ text: 'Overview',
+ level: 3,
+ size: 'h1',
+ color: 'accent',
+ numberOfLines: 2,
+ },
+ };
+
+ const fields = resolveStudioInstancePropertyFields(node, ZORA_COMPONENT_META);
+
+ expect(fields.map((field) => field.name)).toEqual([
+ 'text',
+ 'i18nKey',
+ 'level',
+ 'numberOfLines',
+ ]);
+ expect(fields.find((field) => field.name === 'level')).toMatchObject({
+ editor: 'choice',
+ options: [1, 2, 3, 4, 5, 6],
+ value: 3,
+ defaultValue: 2,
+ isExplicit: true,
+ });
+ expect(fields.some((field) => field.name === 'size')).toBe(false);
+ expect(fields.some((field) => field.name === 'color')).toBe(false);
+ });
+'''
+ closing = '\n});\n'
+ if closing not in test_text:
+ raise SystemExit('Could not find test suite closing marker')
+ test_text = test_text.rsplit(closing, 1)[0] + addition + closing
+ test_path.write_text(test_text)
+ PY
+
+ - name: Update dependency lock
+ run: bun install
+
+ - name: Regenerate and format
+ run: |
+ bun run lint:fix
+ bun run docs
+ bun run format
+
+ - name: Build
+ run: bun run build
+
+ - name: Validate repository
+ run: bunx @ankhorage/ankh doctor validate .
+
+ - name: Lint
+ run: bun run lint
+
+ - name: Format check
+ run: bun run format:check
+
+ - name: Knip
+ run: bun run knip
+
+ - name: Tests
+ run: bun run test
+
+ - name: Studio web smoke
+ run: bun run test:smoke:studio-web
+
+ - name: Generated app web E2E
+ run: bun run test:e2e:generated-app-web
+
+ - name: Package typecheck
+ run: bun run typecheck
+
+ - name: Studio app typecheck
+ run: bun run type-check:studio
+
+ - name: Changeset status
+ run: bun run changeset:status
+
+ - name: Package smoke
+ run: npm pack --dry-run
+
+ - name: Commit finalized ADM 3 branch
+ run: |
+ rm .github/workflows/finalize-adm3-zora-293.yml
+ git config user.name 'Fabio Gartenmann'
+ git config user.email '137318798+artiphishle@users.noreply.github.com'
+ git add -A
+ if git diff --cached --quiet; then
+ echo 'No changes to commit.'
+ else
+ git commit -m 'chore: consume ZORA 2.9.3 for ADM 3'
+ git push origin HEAD:agent/adm-3-instance-properties
+ fi
From 7b9e5d7c1bd5f48b2db80036e28db8d157be8854 Mon Sep 17 00:00:00 2001
From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com>
Date: Thu, 6 Aug 2026 02:55:41 +0200
Subject: [PATCH 24/28] fix: make ADM 3 finalizer workflow parse-safe
---
.github/workflows/finalize-adm3-zora-293.yml | 64 +-------------------
1 file changed, 1 insertion(+), 63 deletions(-)
diff --git a/.github/workflows/finalize-adm3-zora-293.yml b/.github/workflows/finalize-adm3-zora-293.yml
index ca5808c..1a6513b 100644
--- a/.github/workflows/finalize-adm3-zora-293.yml
+++ b/.github/workflows/finalize-adm3-zora-293.yml
@@ -25,69 +25,7 @@ jobs:
bun-version: '1.3.13'
- name: Consume released ZORA metadata
- run: |
- python3 <<'PY'
- from pathlib import Path
-
- package_path = Path('package.json')
- package_text = package_path.read_text()
- old_dependency = '"@ankhorage/zora": "^2.9.2"'
- new_dependency = '"@ankhorage/zora": "^2.9.3"'
- if old_dependency in package_text:
- package_text = package_text.replace(old_dependency, new_dependency, 1)
- elif new_dependency not in package_text:
- raise SystemExit('Expected ZORA dependency was not found')
- package_path.write_text(package_text)
-
- test_path = Path('src/propertiesAuthoringModel.test.ts')
- test_text = test_path.read_text()
- zora_import = "import { ZORA_COMPONENT_META } from '@ankhorage/zora';\n"
- if zora_import not in test_text:
- contract_import = "import type { UiNode } from '@ankhorage/contracts';\n"
- test_text = test_text.replace(contract_import, contract_import + zora_import, 1)
-
- marker = " test('consumes released ZORA Heading metadata without exposing theme presentation', () => {"
- if marker not in test_text:
- addition = r'''
-
- test('consumes released ZORA Heading metadata without exposing theme presentation', () => {
- const node: UiNode = {
- id: 'heading',
- type: 'Heading',
- props: {
- text: 'Overview',
- level: 3,
- size: 'h1',
- color: 'accent',
- numberOfLines: 2,
- },
- };
-
- const fields = resolveStudioInstancePropertyFields(node, ZORA_COMPONENT_META);
-
- expect(fields.map((field) => field.name)).toEqual([
- 'text',
- 'i18nKey',
- 'level',
- 'numberOfLines',
- ]);
- expect(fields.find((field) => field.name === 'level')).toMatchObject({
- editor: 'choice',
- options: [1, 2, 3, 4, 5, 6],
- value: 3,
- defaultValue: 2,
- isExplicit: true,
- });
- expect(fields.some((field) => field.name === 'size')).toBe(false);
- expect(fields.some((field) => field.name === 'color')).toBe(false);
- });
-'''
- closing = '\n});\n'
- if closing not in test_text:
- raise SystemExit('Could not find test suite closing marker')
- test_text = test_text.rsplit(closing, 1)[0] + addition + closing
- test_path.write_text(test_text)
- PY
+ run: echo 'ZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgpwYWNrYWdlX3BhdGggPSBQYXRoKCJwYWNrYWdlLmpzb24iKQpwYWNrYWdlX3RleHQgPSBwYWNrYWdlX3BhdGgucmVhZF90ZXh0KCkKb2xkX2RlcGVuZGVuY3kgPSAnIkBhbmtob3JhZ2Uvem9yYSI6ICJeMi45LjIiJwpuZXdfZGVwZW5kZW5jeSA9ICciQGFua2hvcmFnZS96b3JhIjogIl4yLjkuMyInCmlmIG9sZF9kZXBlbmRlbmN5IGluIHBhY2thZ2VfdGV4dDoKICAgIHBhY2thZ2VfdGV4dCA9IHBhY2thZ2VfdGV4dC5yZXBsYWNlKG9sZF9kZXBlbmRlbmN5LCBuZXdfZGVwZW5kZW5jeSwgMSkKZWxpZiBuZXdfZGVwZW5kZW5jeSBub3QgaW4gcGFja2FnZV90ZXh0OgogICAgcmFpc2UgU3lzdGVtRXhpdCgiRXhwZWN0ZWQgWk9SQSBkZXBlbmRlbmN5IHdhcyBub3QgZm91bmQiKQpwYWNrYWdlX3BhdGgud3JpdGVfdGV4dChwYWNrYWdlX3RleHQpCgp0ZXN0X3BhdGggPSBQYXRoKCJzcmMvcHJvcGVydGllc0F1dGhvcmluZ01vZGVsLnRlc3QudHMiKQp0ZXN0X3RleHQgPSB0ZXN0X3BhdGgucmVhZF90ZXh0KCkKem9yYV9pbXBvcnQgPSAiaW1wb3J0IHsgWk9SQV9DT01QT05FTlRfTUVUQSB9IGZyb20gJ0Bhbmtob3JhZ2Uvem9yYSc7XG4iCmlmIHpvcmFfaW1wb3J0IG5vdCBpbiB0ZXN0X3RleHQ6CiAgICBjb250cmFjdF9pbXBvcnQgPSAiaW1wb3J0IHR5cGUgeyBVaU5vZGUgfSBmcm9tICdAYW5raG9yYWdlL2NvbnRyYWN0cyc7XG4iCiAgICB0ZXN0X3RleHQgPSB0ZXN0X3RleHQucmVwbGFjZShjb250cmFjdF9pbXBvcnQsIGNvbnRyYWN0X2ltcG9ydCArIHpvcmFfaW1wb3J0LCAxKQoKbWFya2VyID0gIiAgdGVzdCgnY29uc3VtZXMgcmVsZWFzZWQgWk9SQSBIZWFkaW5nIG1ldGFkYXRhIHdpdGhvdXQgZXhwb3NpbmcgdGhlbWUgcHJlc2VudGF0aW9uJywgKCkgPT4geyIKaWYgbWFya2VyIG5vdCBpbiB0ZXN0X3RleHQ6CiAgICBhZGRpdGlvbiA9ICIiIgoKICB0ZXN0KCdjb25zdW1lcyByZWxlYXNlZCBaT1JBIEhlYWRpbmcgbWV0YWRhdGEgd2l0aG91dCBleHBvc2luZyB0aGVtZSBwcmVzZW50YXRpb24nLCAoKSA9PiB7CiAgICBjb25zdCBub2RlOiBVaU5vZGUgPSB7CiAgICAgIGlkOiAnaGVhZGluZycsCiAgICAgIHR5cGU6ICdIZWFkaW5nJywKICAgICAgcHJvcHM6IHsKICAgICAgICB0ZXh0OiAnT3ZlcnZpZXcnLAogICAgICAgIGxldmVsOiAzLAogICAgICAgIHNpemU6ICdoMScsCiAgICAgICAgY29sb3I6ICdhY2NlbnQnLAogICAgICAgIG51bWJlck9mTGluZXM6IDIsCiAgICAgIH0sCiAgICB9OwoKICAgIGNvbnN0IGZpZWxkcyA9IHJlc29sdmVTdHVkaW9JbnN0YW5jZVByb3BlcnR5RmllbGRzKG5vZGUsIFpPUkFfQ09NUE9ORU5UX01FVEEpOwoKICAgIGV4cGVjdChmaWVsZHMubWFwKChmaWVsZCkgPT4gZmllbGQubmFtZSkpLnRvRXF1YWwoWwogICAgICAndGV4dCcsCiAgICAgICdpMThuS2V5JywKICAgICAgJ2xldmVsJywKICAgICAgJ251bWJlck9mTGluZXMnLAogICAgXSk7CiAgICBleHBlY3QoZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSAnbGV2ZWwnKSkudG9NYXRjaE9iamVjdCh7CiAgICAgIGVkaXRvcjogJ2Nob2ljZScsCiAgICAgIG9wdGlvbnM6IFsxLCAyLCAzLCA0LCA1LCA2XSwKICAgICAgdmFsdWU6IDMsCiAgICAgIGRlZmF1bHRWYWx1ZTogMiwKICAgICAgaXNFeHBsaWNpdDogdHJ1ZSwKICAgIH0pOwogICAgZXhwZWN0KGZpZWxkcy5zb21lKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0gJ3NpemUnKSkudG9CZShmYWxzZSk7CiAgICBleHBlY3QoZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSAnY29sb3InKSkudG9CZShmYWxzZSk7CiAgfSk7CiIiIgogICAgY2xvc2luZyA9ICJcbn0pO1xuIgogICAgaWYgY2xvc2luZyBub3QgaW4gdGVzdF90ZXh0OgogICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoIkNvdWxkIG5vdCBmaW5kIHRlc3Qgc3VpdGUgY2xvc2luZyBtYXJrZXIiKQogICAgdGVzdF90ZXh0ID0gdGVzdF90ZXh0LnJzcGxpdChjbG9zaW5nLCAxKVswXSArIGFkZGl0aW9uICsgY2xvc2luZwp0ZXN0X3BhdGgud3JpdGVfdGV4dCh0ZXN0X3RleHQpCg==' | base64 --decode | python3
- name: Update dependency lock
run: bun install
From 0b60b8078e72e11985a14f2d052e8b4469972074 Mon Sep 17 00:00:00 2001
From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com>
Date: Thu, 6 Aug 2026 02:57:38 +0200
Subject: [PATCH 25/28] chore: remove temporary ADM 3 finalizer workflow
---
.github/workflows/finalize-adm3-zora-293.yml | 86 --------------------
1 file changed, 86 deletions(-)
delete mode 100644 .github/workflows/finalize-adm3-zora-293.yml
diff --git a/.github/workflows/finalize-adm3-zora-293.yml b/.github/workflows/finalize-adm3-zora-293.yml
deleted file mode 100644
index 1a6513b..0000000
--- a/.github/workflows/finalize-adm3-zora-293.yml
+++ /dev/null
@@ -1,86 +0,0 @@
-name: Finalize ADM 3 with ZORA 2.9.3
-
-on:
- push:
- branches:
- - agent/adm-3-instance-properties
-
-permissions:
- contents: write
-
-jobs:
- finalize:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout branch
- uses: actions/checkout@v4
- with:
- ref: agent/adm-3-instance-properties
- fetch-depth: 0
-
- - name: Setup Bun
- uses: oven-sh/setup-bun@v2
- with:
- bun-version: '1.3.13'
-
- - name: Consume released ZORA metadata
- run: echo 'ZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCgpwYWNrYWdlX3BhdGggPSBQYXRoKCJwYWNrYWdlLmpzb24iKQpwYWNrYWdlX3RleHQgPSBwYWNrYWdlX3BhdGgucmVhZF90ZXh0KCkKb2xkX2RlcGVuZGVuY3kgPSAnIkBhbmtob3JhZ2Uvem9yYSI6ICJeMi45LjIiJwpuZXdfZGVwZW5kZW5jeSA9ICciQGFua2hvcmFnZS96b3JhIjogIl4yLjkuMyInCmlmIG9sZF9kZXBlbmRlbmN5IGluIHBhY2thZ2VfdGV4dDoKICAgIHBhY2thZ2VfdGV4dCA9IHBhY2thZ2VfdGV4dC5yZXBsYWNlKG9sZF9kZXBlbmRlbmN5LCBuZXdfZGVwZW5kZW5jeSwgMSkKZWxpZiBuZXdfZGVwZW5kZW5jeSBub3QgaW4gcGFja2FnZV90ZXh0OgogICAgcmFpc2UgU3lzdGVtRXhpdCgiRXhwZWN0ZWQgWk9SQSBkZXBlbmRlbmN5IHdhcyBub3QgZm91bmQiKQpwYWNrYWdlX3BhdGgud3JpdGVfdGV4dChwYWNrYWdlX3RleHQpCgp0ZXN0X3BhdGggPSBQYXRoKCJzcmMvcHJvcGVydGllc0F1dGhvcmluZ01vZGVsLnRlc3QudHMiKQp0ZXN0X3RleHQgPSB0ZXN0X3BhdGgucmVhZF90ZXh0KCkKem9yYV9pbXBvcnQgPSAiaW1wb3J0IHsgWk9SQV9DT01QT05FTlRfTUVUQSB9IGZyb20gJ0Bhbmtob3JhZ2Uvem9yYSc7XG4iCmlmIHpvcmFfaW1wb3J0IG5vdCBpbiB0ZXN0X3RleHQ6CiAgICBjb250cmFjdF9pbXBvcnQgPSAiaW1wb3J0IHR5cGUgeyBVaU5vZGUgfSBmcm9tICdAYW5raG9yYWdlL2NvbnRyYWN0cyc7XG4iCiAgICB0ZXN0X3RleHQgPSB0ZXN0X3RleHQucmVwbGFjZShjb250cmFjdF9pbXBvcnQsIGNvbnRyYWN0X2ltcG9ydCArIHpvcmFfaW1wb3J0LCAxKQoKbWFya2VyID0gIiAgdGVzdCgnY29uc3VtZXMgcmVsZWFzZWQgWk9SQSBIZWFkaW5nIG1ldGFkYXRhIHdpdGhvdXQgZXhwb3NpbmcgdGhlbWUgcHJlc2VudGF0aW9uJywgKCkgPT4geyIKaWYgbWFya2VyIG5vdCBpbiB0ZXN0X3RleHQ6CiAgICBhZGRpdGlvbiA9ICIiIgoKICB0ZXN0KCdjb25zdW1lcyByZWxlYXNlZCBaT1JBIEhlYWRpbmcgbWV0YWRhdGEgd2l0aG91dCBleHBvc2luZyB0aGVtZSBwcmVzZW50YXRpb24nLCAoKSA9PiB7CiAgICBjb25zdCBub2RlOiBVaU5vZGUgPSB7CiAgICAgIGlkOiAnaGVhZGluZycsCiAgICAgIHR5cGU6ICdIZWFkaW5nJywKICAgICAgcHJvcHM6IHsKICAgICAgICB0ZXh0OiAnT3ZlcnZpZXcnLAogICAgICAgIGxldmVsOiAzLAogICAgICAgIHNpemU6ICdoMScsCiAgICAgICAgY29sb3I6ICdhY2NlbnQnLAogICAgICAgIG51bWJlck9mTGluZXM6IDIsCiAgICAgIH0sCiAgICB9OwoKICAgIGNvbnN0IGZpZWxkcyA9IHJlc29sdmVTdHVkaW9JbnN0YW5jZVByb3BlcnR5RmllbGRzKG5vZGUsIFpPUkFfQ09NUE9ORU5UX01FVEEpOwoKICAgIGV4cGVjdChmaWVsZHMubWFwKChmaWVsZCkgPT4gZmllbGQubmFtZSkpLnRvRXF1YWwoWwogICAgICAndGV4dCcsCiAgICAgICdpMThuS2V5JywKICAgICAgJ2xldmVsJywKICAgICAgJ251bWJlck9mTGluZXMnLAogICAgXSk7CiAgICBleHBlY3QoZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSAnbGV2ZWwnKSkudG9NYXRjaE9iamVjdCh7CiAgICAgIGVkaXRvcjogJ2Nob2ljZScsCiAgICAgIG9wdGlvbnM6IFsxLCAyLCAzLCA0LCA1LCA2XSwKICAgICAgdmFsdWU6IDMsCiAgICAgIGRlZmF1bHRWYWx1ZTogMiwKICAgICAgaXNFeHBsaWNpdDogdHJ1ZSwKICAgIH0pOwogICAgZXhwZWN0KGZpZWxkcy5zb21lKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0gJ3NpemUnKSkudG9CZShmYWxzZSk7CiAgICBleHBlY3QoZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSAnY29sb3InKSkudG9CZShmYWxzZSk7CiAgfSk7CiIiIgogICAgY2xvc2luZyA9ICJcbn0pO1xuIgogICAgaWYgY2xvc2luZyBub3QgaW4gdGVzdF90ZXh0OgogICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoIkNvdWxkIG5vdCBmaW5kIHRlc3Qgc3VpdGUgY2xvc2luZyBtYXJrZXIiKQogICAgdGVzdF90ZXh0ID0gdGVzdF90ZXh0LnJzcGxpdChjbG9zaW5nLCAxKVswXSArIGFkZGl0aW9uICsgY2xvc2luZwp0ZXN0X3BhdGgud3JpdGVfdGV4dCh0ZXN0X3RleHQpCg==' | base64 --decode | python3
-
- - name: Update dependency lock
- run: bun install
-
- - name: Regenerate and format
- run: |
- bun run lint:fix
- bun run docs
- bun run format
-
- - name: Build
- run: bun run build
-
- - name: Validate repository
- run: bunx @ankhorage/ankh doctor validate .
-
- - name: Lint
- run: bun run lint
-
- - name: Format check
- run: bun run format:check
-
- - name: Knip
- run: bun run knip
-
- - name: Tests
- run: bun run test
-
- - name: Studio web smoke
- run: bun run test:smoke:studio-web
-
- - name: Generated app web E2E
- run: bun run test:e2e:generated-app-web
-
- - name: Package typecheck
- run: bun run typecheck
-
- - name: Studio app typecheck
- run: bun run type-check:studio
-
- - name: Changeset status
- run: bun run changeset:status
-
- - name: Package smoke
- run: npm pack --dry-run
-
- - name: Commit finalized ADM 3 branch
- run: |
- rm .github/workflows/finalize-adm3-zora-293.yml
- git config user.name 'Fabio Gartenmann'
- git config user.email '137318798+artiphishle@users.noreply.github.com'
- git add -A
- if git diff --cached --quiet; then
- echo 'No changes to commit.'
- else
- git commit -m 'chore: consume ZORA 2.9.3 for ADM 3'
- git push origin HEAD:agent/adm-3-instance-properties
- fi
From fe61159857e7fefb4c9c20a1f46bdee6788d1faf Mon Sep 17 00:00:00 2001
From: artiphishle
Date: Thu, 6 Aug 2026 03:01:24 +0200
Subject: [PATCH 26/28] chore(deps): update ZORA
---
bun.lock | 4 ++--
package.json | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/bun.lock b/bun.lock
index d09d37c..c8cffb6 100644
--- a/bun.lock
+++ b/bun.lock
@@ -17,7 +17,7 @@
"@ankhorage/supabase-auth": "^1.1.2",
"@ankhorage/supabase-vault": "^0.2.4",
"@ankhorage/templates": "^3.0.0",
- "@ankhorage/zora": "^2.9.2",
+ "@ankhorage/zora": "^2.9.3",
"@ankhorage/zora-chess": "^0.1.2",
"@ankhorage/zora-tabletop": "^0.0.5",
"@fastify/cors": "^11.2.0",
@@ -123,7 +123,7 @@
"@ankhorage/templates": ["@ankhorage/templates@3.0.0", "", { "dependencies": { "@ankhorage/contracts": "^4.0.0", "@ankhorage/zora": "^2.8.0" }, "bin": { "ankhorage-templates": "dist/cli/standalone.js" } }, "sha512-aflIReBWhuXpjLLToWHr13zDCuEOvjebfdeGBS5qYfbUg93gJV6xakDNN51tNgCAiroeG6jkytDqrqRPj3ZkJw=="],
- "@ankhorage/zora": ["@ankhorage/zora@2.9.2", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.8", "@ankhorage/contracts": "^4.0.1", "@ankhorage/surface": "^2.1.1" }, "peerDependencies": { "@expo/vector-icons": ">=14.0.0", "@react-native-picker/picker": ">=2.0.0", "expo-font": "^55.0.6", "expo-linear-gradient": ">=14.0.0", "react": ">=18.2.0", "react-native": ">=0.72.0" }, "optionalPeers": ["@expo/vector-icons", "expo-font"] }, "sha512-Ad0okya9QiHZHCbtfV2sPlQEk8wf129sovl/ecOfDSTbZD2o4EKJZWJelOvGkRE5psWroOgkcc4Pxt/cGwohVA=="],
+ "@ankhorage/zora": ["@ankhorage/zora@2.9.3", "", { "dependencies": { "@ankhorage/color-theory": "^0.0.8", "@ankhorage/contracts": "^4.0.1", "@ankhorage/surface": "^2.1.1" }, "peerDependencies": { "@expo/vector-icons": ">=14.0.0", "@react-native-picker/picker": ">=2.0.0", "expo-font": "^55.0.6", "expo-linear-gradient": ">=14.0.0", "react": ">=18.2.0", "react-native": ">=0.72.0" }, "optionalPeers": ["@expo/vector-icons", "expo-font"] }, "sha512-DgavI+3j7qPU8RplPtPu2D0jaJ4nLqILcIhgeqoQwK2YRN4eF40zjroNskZoRbSmlOeqAZeiSpMHT+dB2fkvgg=="],
"@ankhorage/zora-chess": ["@ankhorage/zora-chess@0.1.2", "", { "dependencies": { "chess.js": "^1.4.0" }, "peerDependencies": { "@ankhorage/zora": ">=0.1.0", "react": ">=18.2.0", "react-native": ">=0.72.0" } }, "sha512-uVZyqJzvnyAzCNrrys4UGR/ioVgYxgcKbY/5ET0d7tyOt5joaKqiQMNEbQL+5gby34mqhLjmBSS3xt8mxZgRQg=="],
diff --git a/package.json b/package.json
index f8ae578..1f61efc 100644
--- a/package.json
+++ b/package.json
@@ -244,7 +244,7 @@
"@ankhorage/supabase-auth": "^1.1.2",
"@ankhorage/supabase-vault": "^0.2.4",
"@ankhorage/templates": "^3.0.0",
- "@ankhorage/zora": "^2.9.2",
+ "@ankhorage/zora": "^2.9.3",
"@ankhorage/zora-chess": "^0.1.2",
"@ankhorage/zora-tabletop": "^0.0.5",
"@fastify/cors": "^11.2.0",
From ac76a37b1026e100142cf3c779fd784b0360bb8e Mon Sep 17 00:00:00 2001
From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com>
Date: Thu, 6 Aug 2026 03:06:25 +0200
Subject: [PATCH 27/28] test: cover released ZORA Heading authoring metadata
---
src/propertiesAuthoringModel.test.ts | 33 ++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/src/propertiesAuthoringModel.test.ts b/src/propertiesAuthoringModel.test.ts
index c0d188c..6ea57d3 100644
--- a/src/propertiesAuthoringModel.test.ts
+++ b/src/propertiesAuthoringModel.test.ts
@@ -1,4 +1,5 @@
import type { UiNode } from '@ankhorage/contracts';
+import { ZORA_COMPONENT_META } from '@ankhorage/zora';
import { describe, expect, test } from 'bun:test';
import {
@@ -133,4 +134,36 @@ describe('instance Properties authoring model', () => {
props: { text: 'Hello' },
});
});
+
+ test('consumes released ZORA Heading metadata without exposing theme presentation', () => {
+ const node: UiNode = {
+ id: 'heading',
+ type: 'Heading',
+ props: {
+ text: 'Overview',
+ level: 3,
+ size: 'h1',
+ color: 'accent',
+ numberOfLines: 2,
+ },
+ };
+
+ const fields = resolveStudioInstancePropertyFields(node, ZORA_COMPONENT_META);
+
+ expect(fields.map((field) => field.name)).toEqual([
+ 'text',
+ 'i18nKey',
+ 'level',
+ 'numberOfLines',
+ ]);
+ expect(fields.find((field) => field.name === 'level')).toMatchObject({
+ editor: 'choice',
+ options: [1, 2, 3, 4, 5, 6],
+ value: 3,
+ defaultValue: 2,
+ isExplicit: true,
+ });
+ expect(fields.some((field) => field.name === 'size')).toBe(false);
+ expect(fields.some((field) => field.name === 'color')).toBe(false);
+ });
});
From 91dfe09dcf53ccae8fb0a320fe621b1a076dbbf0 Mon Sep 17 00:00:00 2001
From: Fabio Gartenmann <137318798+artiphishle@users.noreply.github.com>
Date: Thu, 6 Aug 2026 03:08:35 +0200
Subject: [PATCH 28/28] test: load ZORA metadata from serializable subpath
---
src/propertiesAuthoringModel.test.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/propertiesAuthoringModel.test.ts b/src/propertiesAuthoringModel.test.ts
index 6ea57d3..5dffe1f 100644
--- a/src/propertiesAuthoringModel.test.ts
+++ b/src/propertiesAuthoringModel.test.ts
@@ -1,5 +1,5 @@
import type { UiNode } from '@ankhorage/contracts';
-import { ZORA_COMPONENT_META } from '@ankhorage/zora';
+import { ZORA_COMPONENT_META } from '@ankhorage/zora/metadata';
import { describe, expect, test } from 'bun:test';
import {
| |