@ankhorage/studio 2.7.2 → 2.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/apm/update.json +1 -1
- package/dist/app/ProjectDetailScreen.d.ts.map +1 -1
- package/dist/app/ProjectDetailScreen.js +3 -8
- package/dist/app/ProjectDetailScreen.js.map +1 -1
- package/dist/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.d.ts +6 -0
- package/dist/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.js +94 -0
- package/dist/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.js.map +1 -0
- package/dist/features/project-updates/adapters/inbound/useProjectUpdateDashboard.d.ts +15 -0
- package/dist/features/project-updates/adapters/inbound/useProjectUpdateDashboard.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/inbound/useProjectUpdateDashboard.js +109 -0
- package/dist/features/project-updates/adapters/inbound/useProjectUpdateDashboard.js.map +1 -0
- package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.d.ts +4 -0
- package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.js +54 -0
- package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.js.map +1 -0
- package/dist/features/project-updates/application/ProjectUpdateDashboardService.d.ts +19 -0
- package/dist/features/project-updates/application/ProjectUpdateDashboardService.d.ts.map +1 -0
- package/dist/features/project-updates/application/ProjectUpdateDashboardService.js +51 -0
- package/dist/features/project-updates/application/ProjectUpdateDashboardService.js.map +1 -0
- package/dist/features/project-updates/application/createProjectUpdateDashboardState.d.ts +4 -0
- package/dist/features/project-updates/application/createProjectUpdateDashboardState.d.ts.map +1 -0
- package/dist/features/project-updates/application/createProjectUpdateDashboardState.js +20 -0
- package/dist/features/project-updates/application/createProjectUpdateDashboardState.js.map +1 -0
- package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.d.ts +14 -0
- package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.d.ts.map +1 -0
- package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.js +2 -0
- package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.js.map +1 -0
- package/dist/features/project-updates/application/reduceProjectUpdateDashboardState.d.ts +4 -0
- package/dist/features/project-updates/application/reduceProjectUpdateDashboardState.d.ts.map +1 -0
- package/dist/features/project-updates/application/reduceProjectUpdateDashboardState.js +53 -0
- package/dist/features/project-updates/application/reduceProjectUpdateDashboardState.js.map +1 -0
- package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.d.ts +126 -0
- package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.d.ts.map +1 -0
- package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.js +153 -0
- package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.js.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.d.ts +4 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.d.ts.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.js +8 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.js.map +1 -0
- package/dist/features/project-updates/utils/readProjectUpdateOperationId.d.ts +3 -0
- package/dist/features/project-updates/utils/readProjectUpdateOperationId.d.ts.map +1 -0
- package/dist/features/project-updates/utils/readProjectUpdateOperationId.js +10 -0
- package/dist/features/project-updates/utils/readProjectUpdateOperationId.js.map +1 -0
- package/dist/types/project-update-dashboard.d.ts +47 -0
- package/dist/types/project-update-dashboard.d.ts.map +1 -0
- package/dist/types/project-update-dashboard.js +2 -0
- package/dist/types/project-update-dashboard.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# @ankhorage/studio
|
|
5
5
|
|
|
6
|
-
         
|
|
7
7
|
|
|
8
8
|
Studio authoring package for Ankhorage apps
|
|
9
9
|
|
package/apm/update.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"protocolVersion": 1,
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"owner": { "name": "@ankhorage/studio", "version": "2.7.
|
|
4
|
+
"owner": { "name": "@ankhorage/studio", "version": "2.7.3" },
|
|
5
5
|
"history": {
|
|
6
6
|
"supported": [{ "sourceRange": ">=2.5.7 <3.0.0", "mode": "no-migration" }],
|
|
7
7
|
"unsupported": [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectDetailScreen.d.ts","sourceRoot":"","sources":["../../src/app/ProjectDetailScreen.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ProjectDetailScreen.d.ts","sourceRoot":"","sources":["../../src/app/ProjectDetailScreen.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAmBxC,wBAAgB,mBAAmB,sBAoKlC"}
|
|
@@ -3,13 +3,14 @@ import { Heading, Text } from '@ankhorage/zora';
|
|
|
3
3
|
import { useLocalSearchParams } from 'expo-router';
|
|
4
4
|
import React, { useState } from 'react';
|
|
5
5
|
import { Alert, Linking, View } from 'react-native';
|
|
6
|
+
import { ProjectUpdateDashboardPanel } from '../features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel';
|
|
6
7
|
import { useProjects } from '../hooks/useProjects';
|
|
7
8
|
import { confirmDelete, openProjectUrl } from '../workspacePlatform';
|
|
8
9
|
import { EmptyState, formatCategory, formatDate, InlineMessage, LifecycleAction, LoadingState, MetadataRows, styles, WorkspaceScreen, } from './workspace/WorkspacePrimitives';
|
|
9
10
|
import { replaceWorkspaceRoute } from './workspace/workspaceRouter';
|
|
10
11
|
export function ProjectDetailScreen() {
|
|
11
12
|
const { projectId } = useProjectRouteParams();
|
|
12
|
-
const { projects, isLoading, error, refresh, deleteProject,
|
|
13
|
+
const { projects, isLoading, error, refresh, deleteProject, connectProjectRepository, upProjectInfrastructure, launchProject, } = useProjects();
|
|
13
14
|
const project = projects.find((candidate) => candidate.id === projectId);
|
|
14
15
|
const [activeAction, setActiveAction] = useState(null);
|
|
15
16
|
const [message, setMessage] = useState(null);
|
|
@@ -62,13 +63,7 @@ export function ProjectDetailScreen() {
|
|
|
62
63
|
] }), _jsxs(View, { style: styles.nameSlugRow, children: [_jsx(Heading, { level: 2, text: project.name }), _jsxs(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: ["#", project.id] })] }), _jsx(MetadataRows, { rows: [
|
|
63
64
|
['App category', formatCategory(project.category)],
|
|
64
65
|
['Creation', formatDate(project.created)],
|
|
65
|
-
] })] }), _jsxs(View, { style: styles.lifecyclePanel, children: [_jsx(Heading, { level: 3, text: "
|
|
66
|
-
await syncProject(project.id);
|
|
67
|
-
return 'Project synchronized.';
|
|
68
|
-
}) }), _jsx(LifecycleAction, { iconName: "download-outline", label: "Install packages", detail: "Install dependencies using this generated app as the package root.", loading: activeAction === 'Install packages', disabled: activeAction !== null, onPress: () => void runAction('Install packages', async () => {
|
|
69
|
-
await installProjectPackages(project.id);
|
|
70
|
-
return 'Project packages installed.';
|
|
71
|
-
}) }), _jsx(LifecycleAction, { iconName: "logo-github", label: "Connect GitHub", detail: "Publish the reconciled app snapshot to its private GitHub repository.", loading: activeAction === 'Connect GitHub', disabled: activeAction !== null, onPress: () => void runAction('Connect GitHub', async () => {
|
|
66
|
+
] })] }), _jsx(ProjectUpdateDashboardPanel, { projectId: project.id }), _jsxs(View, { style: styles.lifecyclePanel, children: [_jsx(Heading, { level: 3, text: "Project operations" }), message ? _jsx(InlineMessage, { tone: message.tone, text: message.text }) : null, _jsxs(View, { style: styles.actionStack, children: [_jsx(LifecycleAction, { iconName: "logo-github", label: "Connect GitHub", detail: "Publish the reconciled app snapshot to its private GitHub repository.", loading: activeAction === 'Connect GitHub', disabled: activeAction !== null, onPress: () => void runAction('Connect GitHub', async () => {
|
|
72
67
|
const response = await connectProjectRepository(project.id);
|
|
73
68
|
return response.status === 'already-connected'
|
|
74
69
|
? `GitHub repository already connected at ${response.repository.url}.`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectDetailScreen.js","sourceRoot":"","sources":["../../src/app/ProjectDetailScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAA8B,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,UAAU,EACV,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,UAAU,mBAAmB;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC9C,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,OAAO,EACP,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"ProjectDetailScreen.js","sourceRoot":"","sources":["../../src/app/ProjectDetailScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/*** Render the project-scoped APM inspect, review, apply/recovery, and verify Dashboard lifecycle. */
|
|
3
|
+
export declare function ProjectUpdateDashboardPanel(props: {
|
|
4
|
+
readonly projectId: string;
|
|
5
|
+
}): React.JSX.Element;
|
|
6
|
+
//# sourceMappingURL=ProjectUpdateDashboardPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUpdateDashboardPanel.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,sGAAsG;AACtG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,qBAmEhF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { CheckboxGroup, Heading, Text, useZoraTheme } from '@ankhorage/zora';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { StyleSheet, View } from 'react-native';
|
|
5
|
+
import { InlineMessage, LifecycleAction, SegmentedControl, ThemedWorkspaceTextInput, } from '../../../../app/workspace/WorkspacePrimitives';
|
|
6
|
+
import { resolveProjectUpdateDashboardPresentation } from '../../application/resolveProjectUpdateDashboardPresentation';
|
|
7
|
+
import { useProjectUpdateDashboard } from './useProjectUpdateDashboard';
|
|
8
|
+
/*** Render the project-scoped APM inspect, review, apply/recovery, and verify Dashboard lifecycle. */
|
|
9
|
+
export function ProjectUpdateDashboardPanel(props) {
|
|
10
|
+
const { theme } = useZoraTheme();
|
|
11
|
+
const { state, inspectAsync, planAsync, applyAsync, resumeAsync, verifyAsync, setAvailability, setPermissionSelection, setOperationId, } = useProjectUpdateDashboard(props.projectId);
|
|
12
|
+
const presentation = resolveProjectUpdateDashboardPresentation(state);
|
|
13
|
+
return (_jsxs(View, { style: [
|
|
14
|
+
styles.panel,
|
|
15
|
+
{ borderColor: theme.colors.border, backgroundColor: theme.colors.surface },
|
|
16
|
+
], children: [_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 3, text: "Updates" }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "Inspect APM evidence, review the exact plan, authorize effects, then verify the durable operation separately." }), _jsx(SegmentedControl, { value: state.availability, options: AVAILABILITY_OPTIONS, onChange: setAvailability }), _jsx(LifecycleAction, { iconName: "search-outline", label: "Inspect updates", detail: "Read current dependency, migration, projection, and availability evidence.", loading: state.busy === 'status', disabled: state.busy !== null, onPress: () => void inspectAsync() }), state.error ? _jsx(InlineMessage, { tone: "error", text: state.error }) : null] }), presentation.status ? (_jsx(StatusSection, { status: presentation.status, state: state, onPlan: () => void planAsync() })) : null, presentation.plan ? (_jsx(PlanSection, { plan: presentation.plan, state: state, onPermissionSelection: setPermissionSelection, onApply: () => void applyAsync() })) : null, presentation.execution ? _jsx(ExecutionSection, { execution: presentation.execution }) : null, _jsx(RecoverySection, { state: state, onOperationIdChange: setOperationId, onResume: () => void resumeAsync(), onVerify: () => void verifyAsync() }), presentation.verification ? (_jsx(VerificationSection, { verification: presentation.verification })) : null] }));
|
|
17
|
+
}
|
|
18
|
+
const AVAILABILITY_OPTIONS = [
|
|
19
|
+
{ label: 'Refresh registry', value: 'refresh' },
|
|
20
|
+
{ label: 'Offline evidence', value: 'offline' },
|
|
21
|
+
];
|
|
22
|
+
const PERMISSION_OPTIONS = [
|
|
23
|
+
{
|
|
24
|
+
value: 'owner-code',
|
|
25
|
+
label: 'Owner code',
|
|
26
|
+
description: 'Allow reviewed package-owned update steps.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
value: 'lifecycle-scripts',
|
|
30
|
+
label: 'Lifecycle scripts',
|
|
31
|
+
description: 'Allow reviewed package-manager lifecycle scripts when required.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
value: 'external-effects',
|
|
35
|
+
label: 'External effects',
|
|
36
|
+
description: 'Allow reviewed external-service effects when required.',
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
function StatusSection(props) {
|
|
40
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Evidence" }), _jsxs(Text, { variant: "bodySmall", weight: "semiBold", children: [props.status.currency, " \u00B7 ", props.status.complete ? 'complete' : 'incomplete'] }), _jsx(DetailItems, { title: "Dependencies", empty: "No dependency changes are currently reported.", items: props.status.dependencies.map((dependency) => `${dependency.name} · ${dependency.direct ? 'direct' : 'transitive'} · ${dependency.currentVersion} → ${dependency.availableVersion}`) }), _jsx(DetailItems, { title: "Migration & projection evidence", empty: "No extension observations are currently reported.", items: props.status.observations.map((observation) => `${observation.owner} · projection ${observation.projection} · migration ${observation.migration}${observation.reason ? ` · ${observation.reason}` : ''}`) }), _jsx(ReasonItems, { title: "Findings", items: props.status.findings }), _jsx(ReasonItems, { title: "Diagnostics", items: props.status.diagnostics }), _jsx(LifecycleAction, { iconName: "git-compare-outline", label: "Review update plan", detail: "Create a concrete safe-update and repair plan from fresh host evidence.", loading: props.state.busy === 'plan', disabled: props.state.busy !== null, onPress: props.onPlan })] }));
|
|
41
|
+
}
|
|
42
|
+
function PlanSection(props) {
|
|
43
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Reviewed plan" }), _jsxs(Text, { variant: "bodySmall", weight: "semiBold", children: [props.plan.id, " \u00B7 ", props.plan.complete ? 'complete' : 'blocked'] }), _jsx(DetailItems, { title: "Dependency targets", empty: "No dependency version changes.", items: props.plan.targets.map((target) => `${target.name} · ${target.direct ? 'direct' : 'transitive'} · ${target.currentVersion} → ${target.targetVersion} · ${target.reason}`) }), _jsx(DetailItems, { title: "File changes", empty: "No reviewed file changes.", items: props.plan.files.map((file) => `${file.kind} · ${file.path}`) }), _jsx(DetailItems, { title: "Ordered steps", empty: "No executable steps.", items: props.plan.steps.map((step) => `${step.kind} · ${step.reason}`) }), _jsx(EffectItems, { title: "Shipment & follow-up effects", effects: props.plan.effects }), _jsx(ReasonItems, { title: "Plan blockers", items: props.plan.blockers }), _jsx(ReasonItems, { title: "Plan findings", items: props.plan.findings }), props.plan.hostRestartRequired ? (_jsx(InlineMessage, { tone: "info", text: "Studio host upgrade/restart is required. Restart the host, then Inspect updates again and create a fresh plan; this reviewed plan is not executable across the restart boundary." })) : null, props.plan.canApply ? (_jsxs(_Fragment, { children: [_jsxs(View, { style: styles.permissions, children: [_jsx(Text, { weight: "semiBold", children: "Execution permissions" }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: "Every permission is explicit. Leave an effect disabled unless the reviewed plan requires and you approve it." }), _jsx(CheckboxGroup, { value: permissionSelection(props.state.permissions), options: PERMISSION_OPTIONS, orientation: "vertical", gap: "s", onValueChange: props.onPermissionSelection })] }), _jsx(LifecycleAction, { iconName: "play-outline", label: "Apply reviewed plan", detail: "Execute only this reviewed plan through APM's durable lock and journal.", loading: props.state.busy === 'apply', disabled: props.state.busy !== null, onPress: props.onApply })] })) : null] }));
|
|
44
|
+
}
|
|
45
|
+
function ExecutionSection(props) {
|
|
46
|
+
const tone = props.execution.status === 'completed' ? 'success' : 'info';
|
|
47
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Execution" }), _jsx(InlineMessage, { tone: tone, text: `Operation ${props.execution.operationId || 'unknown'}: ${props.execution.status}.` }), _jsx(DetailItems, { title: "Journal steps", empty: "No journal steps are available yet.", items: props.execution.steps.map((step) => `${step.id} · ${step.state} · ${step.attempts} attempt${step.attempts === 1 ? '' : 's'}`) }), _jsx(ReasonItems, { title: "Execution blockers", items: props.execution.blockers }), _jsx(ReasonItems, { title: "Execution diagnostics", items: props.execution.diagnostics }), props.execution.status === 'recovery-required' ? (_jsx(InlineMessage, { tone: "info", text: "Recovery is durable. Keep the operation ID below and resume the same APM journal; do not start a replacement update." })) : null] }));
|
|
48
|
+
}
|
|
49
|
+
function RecoverySection(props) {
|
|
50
|
+
const hasOperation = props.state.operationId.trim().length > 0;
|
|
51
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Recovery & verification" }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: "Durable operation IDs can be resumed after interruption or entered again after reloading the Dashboard. Verification is a separate evidence pass." }), _jsx(ThemedWorkspaceTextInput, { value: props.state.operationId, onChangeText: props.onOperationIdChange, placeholder: "APM operation ID", accessibilityLabel: "APM operation ID", autoCapitalize: "none", autoCorrect: false }), _jsxs(View, { style: styles.actions, children: [_jsx(LifecycleAction, { iconName: "refresh-circle-outline", label: "Resume operation", detail: "Resume the same durable APM journal and its recovery semantics.", loading: props.state.busy === 'resume', disabled: props.state.busy !== null || !hasOperation, onPress: props.onResume }), _jsx(LifecycleAction, { iconName: "checkmark-circle-outline", label: "Verify operation", detail: "Reinspect project and owner evidence for this operation after execution.", loading: props.state.busy === 'verify', disabled: props.state.busy !== null || !hasOperation, onPress: props.onVerify })] })] }));
|
|
52
|
+
}
|
|
53
|
+
function VerificationSection(props) {
|
|
54
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Verification" }), _jsx(InlineMessage, { tone: props.verification.verified ? 'success' : 'info', text: `Operation ${props.verification.operationId || 'unknown'} is ${props.verification.verified ? 'verified' : 'not fully verified'}.` }), _jsx(DetailItems, { title: "Checks", empty: "No verification checks were returned.", items: props.verification.checks.map((check) => `${check.kind} · ${check.status}${check.reason ? ` · ${check.reason}` : ''}${check.nextAction ? ` · next: ${check.nextAction}` : ''}`) }), _jsx(ReasonItems, { title: "Remaining findings", items: props.verification.findings }), _jsx(ReasonItems, { title: "Verification diagnostics", items: props.verification.diagnostics }), _jsx(EffectItems, { title: "Shipment & follow-up", effects: props.verification.followUp })] }));
|
|
55
|
+
}
|
|
56
|
+
function DetailItems(props) {
|
|
57
|
+
return (_jsxs(View, { style: styles.detailList, children: [_jsx(Text, { weight: "semiBold", variant: "bodySmall", children: props.title }), props.items.length === 0 ? (_jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: props.empty })) : (props.items.map((item) => (_jsxs(Text, { variant: "caption", children: ["\u2022 ", item] }, item))))] }));
|
|
58
|
+
}
|
|
59
|
+
function ReasonItems(props) {
|
|
60
|
+
return (_jsx(DetailItems, { title: props.title, empty: `No ${props.title.toLowerCase()}.`, items: props.items.map((item) => `${item.code ? `${item.code} · ` : ''}${item.reason}${item.nextAction ? ` · next: ${item.nextAction}` : ''}`) }));
|
|
61
|
+
}
|
|
62
|
+
function EffectItems(props) {
|
|
63
|
+
return (_jsx(DetailItems, { title: props.title, empty: "No shipment or follow-up effects.", items: props.effects.map((effect) => `${effect.kind} · ${effect.state} · ${effect.reason}`) }));
|
|
64
|
+
}
|
|
65
|
+
function permissionSelection(permissions) {
|
|
66
|
+
return [
|
|
67
|
+
...(permissions.ownerCode ? ['owner-code'] : []),
|
|
68
|
+
...(permissions.lifecycleScripts ? ['lifecycle-scripts'] : []),
|
|
69
|
+
...(permissions.externalEffects ? ['external-effects'] : []),
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
const styles = StyleSheet.create({
|
|
73
|
+
panel: {
|
|
74
|
+
width: '100%',
|
|
75
|
+
flexBasis: '100%',
|
|
76
|
+
borderWidth: 1,
|
|
77
|
+
borderRadius: 10,
|
|
78
|
+
padding: 16,
|
|
79
|
+
gap: 18,
|
|
80
|
+
},
|
|
81
|
+
section: {
|
|
82
|
+
gap: 10,
|
|
83
|
+
},
|
|
84
|
+
detailList: {
|
|
85
|
+
gap: 4,
|
|
86
|
+
},
|
|
87
|
+
permissions: {
|
|
88
|
+
gap: 8,
|
|
89
|
+
},
|
|
90
|
+
actions: {
|
|
91
|
+
gap: 10,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=ProjectUpdateDashboardPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUpdateDashboardPanel.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ApmStatusAvailabilityMode } from '@ankhorage/apm/types';
|
|
2
|
+
import type { ProjectUpdatePermissionId } from '../../../../types/project-update-dashboard';
|
|
3
|
+
/*** Bind one selected project to the authorized Dashboard APM lifecycle and its reviewed state. */
|
|
4
|
+
export declare function useProjectUpdateDashboard(projectId: string): {
|
|
5
|
+
state: import("../../../../types/project-update-dashboard").ProjectUpdateDashboardState;
|
|
6
|
+
inspectAsync: () => Promise<void>;
|
|
7
|
+
planAsync: () => Promise<void>;
|
|
8
|
+
applyAsync: () => Promise<void>;
|
|
9
|
+
resumeAsync: () => Promise<void>;
|
|
10
|
+
verifyAsync: () => Promise<void>;
|
|
11
|
+
setAvailability: (availability: ApmStatusAvailabilityMode) => void;
|
|
12
|
+
setPermissionSelection: (selection: readonly ProjectUpdatePermissionId[]) => void;
|
|
13
|
+
setOperationId: (operationId: string) => void;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=useProjectUpdateDashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProjectUpdateDashboard.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/useProjectUpdateDashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAG3F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAM5F,mGAAmG;AACnG,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM;;;;;;;oCA0EN,yBAAyB;wCAIrB,SAAS,yBAAyB,EAAE;kCAO1C,MAAM;EAexD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useReducer } from 'react';
|
|
2
|
+
import { createProjectUpdateDashboardState } from '../../application/createProjectUpdateDashboardState';
|
|
3
|
+
import { reduceProjectUpdateDashboardState } from '../../application/reduceProjectUpdateDashboardState';
|
|
4
|
+
import { createStudioProjectUpdateDashboardService } from '../../composition/createStudioProjectUpdateDashboardService';
|
|
5
|
+
import { readProjectUpdateOperationId } from '../../utils/readProjectUpdateOperationId';
|
|
6
|
+
/*** Bind one selected project to the authorized Dashboard APM lifecycle and its reviewed state. */
|
|
7
|
+
export function useProjectUpdateDashboard(projectId) {
|
|
8
|
+
const service = useMemo(() => createStudioProjectUpdateDashboardService(), []);
|
|
9
|
+
const [state, dispatch] = useReducer(reduceProjectUpdateDashboardState, projectId, createProjectUpdateDashboardState);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
dispatch({ type: 'project-changed', projectId });
|
|
12
|
+
}, [projectId]);
|
|
13
|
+
const inspectAsync = useCallback(async () => {
|
|
14
|
+
dispatch({ type: 'request-started', action: 'status' });
|
|
15
|
+
try {
|
|
16
|
+
const status = await service.inspectAsync(projectId, state.availability);
|
|
17
|
+
dispatch({ type: 'status-received', status });
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
dispatch({ type: 'request-failed', message: readErrorMessage(error) });
|
|
21
|
+
}
|
|
22
|
+
}, [projectId, service, state.availability]);
|
|
23
|
+
const planAsync = useCallback(async () => {
|
|
24
|
+
dispatch({ type: 'request-started', action: 'plan' });
|
|
25
|
+
try {
|
|
26
|
+
const plan = await service.planAsync(projectId, state.availability);
|
|
27
|
+
dispatch({ type: 'plan-received', plan });
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
dispatch({ type: 'request-failed', message: readErrorMessage(error) });
|
|
31
|
+
}
|
|
32
|
+
}, [projectId, service, state.availability]);
|
|
33
|
+
const applyAsync = useCallback(async () => {
|
|
34
|
+
if (state.plan === null) {
|
|
35
|
+
dispatch({ type: 'request-failed', message: 'Inspect and review a plan before applying.' });
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
dispatch({ type: 'request-started', action: 'apply' });
|
|
39
|
+
try {
|
|
40
|
+
const execution = await service.applyAsync(projectId, state.plan, state.permissions);
|
|
41
|
+
dispatch({
|
|
42
|
+
type: 'execution-received',
|
|
43
|
+
execution,
|
|
44
|
+
operationId: readProjectUpdateOperationId(execution),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
dispatch({ type: 'request-failed', message: readErrorMessage(error) });
|
|
49
|
+
}
|
|
50
|
+
}, [projectId, service, state.permissions, state.plan]);
|
|
51
|
+
const resumeAsync = useCallback(async () => {
|
|
52
|
+
dispatch({ type: 'request-started', action: 'resume' });
|
|
53
|
+
try {
|
|
54
|
+
const execution = await service.resumeAsync(projectId, state.operationId, state.permissions);
|
|
55
|
+
dispatch({
|
|
56
|
+
type: 'execution-received',
|
|
57
|
+
execution,
|
|
58
|
+
operationId: readProjectUpdateOperationId(execution),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
dispatch({ type: 'request-failed', message: readErrorMessage(error) });
|
|
63
|
+
}
|
|
64
|
+
}, [projectId, service, state.operationId, state.permissions]);
|
|
65
|
+
const verifyAsync = useCallback(async () => {
|
|
66
|
+
dispatch({ type: 'request-started', action: 'verify' });
|
|
67
|
+
try {
|
|
68
|
+
const verification = await service.verifyAsync(projectId, state.operationId);
|
|
69
|
+
dispatch({ type: 'verification-received', verification });
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
dispatch({ type: 'request-failed', message: readErrorMessage(error) });
|
|
73
|
+
}
|
|
74
|
+
}, [projectId, service, state.operationId]);
|
|
75
|
+
const setAvailability = useCallback((availability) => {
|
|
76
|
+
dispatch({ type: 'availability-changed', availability });
|
|
77
|
+
}, []);
|
|
78
|
+
const setPermissionSelection = useCallback((selection) => {
|
|
79
|
+
dispatch({
|
|
80
|
+
type: 'permissions-changed',
|
|
81
|
+
permissions: selectionToPermissions(selection),
|
|
82
|
+
});
|
|
83
|
+
}, []);
|
|
84
|
+
const setOperationId = useCallback((operationId) => {
|
|
85
|
+
dispatch({ type: 'operation-id-changed', operationId });
|
|
86
|
+
}, []);
|
|
87
|
+
return {
|
|
88
|
+
state,
|
|
89
|
+
inspectAsync,
|
|
90
|
+
planAsync,
|
|
91
|
+
applyAsync,
|
|
92
|
+
resumeAsync,
|
|
93
|
+
verifyAsync,
|
|
94
|
+
setAvailability,
|
|
95
|
+
setPermissionSelection,
|
|
96
|
+
setOperationId,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function selectionToPermissions(selection) {
|
|
100
|
+
return {
|
|
101
|
+
ownerCode: selection.includes('owner-code'),
|
|
102
|
+
lifecycleScripts: selection.includes('lifecycle-scripts'),
|
|
103
|
+
externalEffects: selection.includes('external-effects'),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function readErrorMessage(error) {
|
|
107
|
+
return error instanceof Error ? error.message : 'Project update request failed.';
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=useProjectUpdateDashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProjectUpdateDashboard.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/useProjectUpdateDashboard.ts"],"names":[],"mappings":"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"}
|
package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ProjectUpdateHostPort } from '../../application/ports/outbound/ProjectUpdateHostPort';
|
|
2
|
+
/*** Create the browser-safe outbound adapter for Studio's project-scoped APM host routes. */
|
|
3
|
+
export declare function createProjectUpdateHostHttpAdapter(apiBase: string): ProjectUpdateHostPort;
|
|
4
|
+
//# sourceMappingURL=createProjectUpdateHostHttpAdapter.d.ts.map
|
package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProjectUpdateHostHttpAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wDAAwD,CAAC;AAEpG,6FAA6F;AAC7F,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAiCzF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { isRecord } from '@ankhorage/utility/object';
|
|
2
|
+
/*** Create the browser-safe outbound adapter for Studio's project-scoped APM host routes. */
|
|
3
|
+
export function createProjectUpdateHostHttpAdapter(apiBase) {
|
|
4
|
+
return {
|
|
5
|
+
statusAsync: async (projectId, availability) => requestJsonAsync(apiBase, `/projects/${encodeURIComponent(projectId)}/updates/status?availability=${encodeURIComponent(availability)}`, { method: 'GET' }),
|
|
6
|
+
planAsync: async (projectId, input) => requestJsonAsync(apiBase, `/projects/${encodeURIComponent(projectId)}/updates/plan`, {
|
|
7
|
+
method: 'POST',
|
|
8
|
+
headers: { 'Content-Type': 'application/json' },
|
|
9
|
+
body: JSON.stringify(input),
|
|
10
|
+
}),
|
|
11
|
+
applyAsync: async (projectId, plan, permissions) => requestJsonAsync(apiBase, `/projects/${encodeURIComponent(projectId)}/updates/apply`, {
|
|
12
|
+
method: 'POST',
|
|
13
|
+
headers: { 'Content-Type': 'application/json' },
|
|
14
|
+
body: JSON.stringify({ plan, permissions }),
|
|
15
|
+
}),
|
|
16
|
+
resumeAsync: async (projectId, operationId, permissions) => requestJsonAsync(apiBase, `/projects/${encodeURIComponent(projectId)}/updates/resume`, {
|
|
17
|
+
method: 'POST',
|
|
18
|
+
headers: { 'Content-Type': 'application/json' },
|
|
19
|
+
body: JSON.stringify({ operationId, permissions }),
|
|
20
|
+
}),
|
|
21
|
+
verifyAsync: async (projectId, operationId) => requestJsonAsync(apiBase, `/projects/${encodeURIComponent(projectId)}/updates/verify`, {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
headers: { 'Content-Type': 'application/json' },
|
|
24
|
+
body: JSON.stringify({ operationId }),
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/*** Execute one bounded Studio host request and preserve structured APM results as untrusted JSON. */
|
|
29
|
+
async function requestJsonAsync(apiBase, path, init) {
|
|
30
|
+
const response = await fetch(`${apiBase}${path}`, init);
|
|
31
|
+
const body = await readResponseJsonAsync(response);
|
|
32
|
+
if (!response.ok) {
|
|
33
|
+
throw new Error(readFailureMessage(body) ?? `Project update request failed with ${response.status}.`);
|
|
34
|
+
}
|
|
35
|
+
return body;
|
|
36
|
+
}
|
|
37
|
+
/*** Read a response body without turning an invalid error payload into a second exception. */
|
|
38
|
+
async function readResponseJsonAsync(response) {
|
|
39
|
+
try {
|
|
40
|
+
return await response.json();
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/*** Read the bounded host error message without echoing arbitrary response values. */
|
|
47
|
+
function readFailureMessage(value) {
|
|
48
|
+
if (!isRecord(value))
|
|
49
|
+
return undefined;
|
|
50
|
+
if (typeof value.error === 'string')
|
|
51
|
+
return value.error;
|
|
52
|
+
return typeof value.message === 'string' ? value.message : undefined;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=createProjectUpdateHostHttpAdapter.js.map
|
package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProjectUpdateHostHttpAdapter.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ApmApplyPermissions, ApmStatusAvailabilityMode } from '@ankhorage/apm/types';
|
|
2
|
+
import type { ProjectUpdateHostPort } from './ports/outbound/ProjectUpdateHostPort';
|
|
3
|
+
/*** Coordinate Dashboard APM lifecycle requests through the authorized project-scoped host port. */
|
|
4
|
+
export declare class ProjectUpdateDashboardService {
|
|
5
|
+
private readonly host;
|
|
6
|
+
/*** Bind Dashboard lifecycle orchestration to one project-update host capability. */
|
|
7
|
+
constructor(host: ProjectUpdateHostPort);
|
|
8
|
+
/*** Inspect fresh or offline APM evidence for one selected Studio project. */
|
|
9
|
+
inspectAsync(projectId: string, availability: ApmStatusAvailabilityMode): Promise<unknown>;
|
|
10
|
+
/*** Build a concrete safe-update/repair plan for one selected Studio project. */
|
|
11
|
+
planAsync(projectId: string, availability: ApmStatusAvailabilityMode): Promise<unknown>;
|
|
12
|
+
/*** Execute one explicitly reviewed plan using the user's explicit permission envelope. */
|
|
13
|
+
applyAsync(projectId: string, plan: unknown, permissions: ApmApplyPermissions): Promise<unknown>;
|
|
14
|
+
/*** Resume one durable APM operation for the selected project. */
|
|
15
|
+
resumeAsync(projectId: string, operationId: string, permissions: ApmApplyPermissions): Promise<unknown>;
|
|
16
|
+
/*** Verify one durable APM operation against fresh owner-aware evidence. */
|
|
17
|
+
verifyAsync(projectId: string, operationId: string): Promise<unknown>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ProjectUpdateDashboardService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUpdateDashboardService.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/application/ProjectUpdateDashboardService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAEnB,yBAAyB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEpF,oGAAoG;AACpG,qBAAa,6BAA6B;IAE5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IADjC,qFAAqF;gBACxD,IAAI,EAAE,qBAAqB;IAExD,8EAA8E;IACxE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhG,iFAAiF;IAC3E,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC;IAO7F,2FAA2F;IACrF,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,mBAAmB,GAC/B,OAAO,CAAC,OAAO,CAAC;IAInB,kEAAkE;IAC5D,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,GAC/B,OAAO,CAAC,OAAO,CAAC;IAQnB,4EAA4E;IACtE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAM5E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*** Coordinate Dashboard APM lifecycle requests through the authorized project-scoped host port. */
|
|
2
|
+
export class ProjectUpdateDashboardService {
|
|
3
|
+
host;
|
|
4
|
+
/*** Bind Dashboard lifecycle orchestration to one project-update host capability. */
|
|
5
|
+
constructor(host) {
|
|
6
|
+
this.host = host;
|
|
7
|
+
}
|
|
8
|
+
/*** Inspect fresh or offline APM evidence for one selected Studio project. */
|
|
9
|
+
async inspectAsync(projectId, availability) {
|
|
10
|
+
return await this.host.statusAsync(requireProjectId(projectId), availability);
|
|
11
|
+
}
|
|
12
|
+
/*** Build a concrete safe-update/repair plan for one selected Studio project. */
|
|
13
|
+
async planAsync(projectId, availability) {
|
|
14
|
+
return await this.host.planAsync(requireProjectId(projectId), {
|
|
15
|
+
availability,
|
|
16
|
+
policy: DASHBOARD_PLAN_POLICY,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/*** Execute one explicitly reviewed plan using the user's explicit permission envelope. */
|
|
20
|
+
async applyAsync(projectId, plan, permissions) {
|
|
21
|
+
return await this.host.applyAsync(requireProjectId(projectId), plan, permissions);
|
|
22
|
+
}
|
|
23
|
+
/*** Resume one durable APM operation for the selected project. */
|
|
24
|
+
async resumeAsync(projectId, operationId, permissions) {
|
|
25
|
+
return await this.host.resumeAsync(requireProjectId(projectId), requireOperationId(operationId), permissions);
|
|
26
|
+
}
|
|
27
|
+
/*** Verify one durable APM operation against fresh owner-aware evidence. */
|
|
28
|
+
async verifyAsync(projectId, operationId) {
|
|
29
|
+
return await this.host.verifyAsync(requireProjectId(projectId), requireOperationId(operationId));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const DASHBOARD_PLAN_POLICY = {
|
|
33
|
+
dependencyUpdates: 'safe',
|
|
34
|
+
repairInstallations: true,
|
|
35
|
+
repairProjections: true,
|
|
36
|
+
};
|
|
37
|
+
/*** Reject an empty project identity before invoking the host boundary. */
|
|
38
|
+
function requireProjectId(projectId) {
|
|
39
|
+
const value = projectId.trim();
|
|
40
|
+
if (value.length === 0)
|
|
41
|
+
throw new Error('A selected project is required.');
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
/*** Reject an empty durable operation identity before resume or verification. */
|
|
45
|
+
function requireOperationId(operationId) {
|
|
46
|
+
const value = operationId.trim();
|
|
47
|
+
if (value.length === 0)
|
|
48
|
+
throw new Error('An APM operation ID is required.');
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=ProjectUpdateDashboardService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUpdateDashboardService.js","sourceRoot":"","sources":["../../../../src/features/project-updates/application/ProjectUpdateDashboardService.ts"],"names":[],"mappings":"AAQA,oGAAoG;AACpG,MAAM,OAAO,6BAA6B;IAEX;IAD7B,qFAAqF;IACrF,YAA6B,IAA2B;QAA3B,SAAI,GAAJ,IAAI,CAAuB;IAAG,CAAC;IAE5D,8EAA8E;IAC9E,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,YAAuC;QAC3E,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;IAChF,CAAC;IAED,iFAAiF;IACjF,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,YAAuC;QACxE,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;YAC5D,YAAY;YACZ,MAAM,EAAE,qBAAqB;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,2FAA2F;IAC3F,KAAK,CAAC,UAAU,CACd,SAAiB,EACjB,IAAa,EACb,WAAgC;QAEhC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACpF,CAAC;IAED,kEAAkE;IAClE,KAAK,CAAC,WAAW,CACf,SAAiB,EACjB,WAAmB,EACnB,WAAgC;QAEhC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAChC,gBAAgB,CAAC,SAAS,CAAC,EAC3B,kBAAkB,CAAC,WAAW,CAAC,EAC/B,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,WAAmB;QACtD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAChC,gBAAgB,CAAC,SAAS,CAAC,EAC3B,kBAAkB,CAAC,WAAW,CAAC,CAChC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,qBAAqB,GAAuB;IAChD,iBAAiB,EAAE,MAAM;IACzB,mBAAmB,EAAE,IAAI;IACzB,iBAAiB,EAAE,IAAI;CACxB,CAAC;AAEF,2EAA2E;AAC3E,SAAS,gBAAgB,CAAC,SAAiB;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iFAAiF;AACjF,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ProjectUpdateDashboardState } from '../../../types/project-update-dashboard';
|
|
2
|
+
/*** Create isolated Dashboard APM lifecycle state for one selected Studio project. */
|
|
3
|
+
export declare function createProjectUpdateDashboardState(projectId: string): ProjectUpdateDashboardState;
|
|
4
|
+
//# sourceMappingURL=createProjectUpdateDashboardState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProjectUpdateDashboardState.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/application/createProjectUpdateDashboardState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AAE3F,sFAAsF;AACtF,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,2BAA2B,CAiBhG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/*** Create isolated Dashboard APM lifecycle state for one selected Studio project. */
|
|
2
|
+
export function createProjectUpdateDashboardState(projectId) {
|
|
3
|
+
return {
|
|
4
|
+
projectId,
|
|
5
|
+
availability: 'refresh',
|
|
6
|
+
status: null,
|
|
7
|
+
plan: null,
|
|
8
|
+
execution: null,
|
|
9
|
+
verification: null,
|
|
10
|
+
operationId: '',
|
|
11
|
+
permissions: {
|
|
12
|
+
ownerCode: false,
|
|
13
|
+
lifecycleScripts: false,
|
|
14
|
+
externalEffects: false,
|
|
15
|
+
},
|
|
16
|
+
busy: null,
|
|
17
|
+
error: null,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=createProjectUpdateDashboardState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProjectUpdateDashboardState.js","sourceRoot":"","sources":["../../../../src/features/project-updates/application/createProjectUpdateDashboardState.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,MAAM,UAAU,iCAAiC,CAAC,SAAiB;IACjE,OAAO;QACL,SAAS;QACT,YAAY,EAAE,SAAS;QACvB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACX,SAAS,EAAE,KAAK;YAChB,gBAAgB,EAAE,KAAK;YACvB,eAAe,EAAE,KAAK;SACvB;QACD,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ApmApplyPermissions, ApmPlanPolicyInput, ApmStatusAvailabilityMode } from '@ankhorage/apm/types';
|
|
2
|
+
interface ProjectUpdateHostPlanInput {
|
|
3
|
+
readonly availability: ApmStatusAvailabilityMode;
|
|
4
|
+
readonly policy: ApmPlanPolicyInput;
|
|
5
|
+
}
|
|
6
|
+
export interface ProjectUpdateHostPort {
|
|
7
|
+
readonly statusAsync: (projectId: string, availability: ApmStatusAvailabilityMode) => Promise<unknown>;
|
|
8
|
+
readonly planAsync: (projectId: string, input: ProjectUpdateHostPlanInput) => Promise<unknown>;
|
|
9
|
+
readonly applyAsync: (projectId: string, plan: unknown, permissions: ApmApplyPermissions) => Promise<unknown>;
|
|
10
|
+
readonly resumeAsync: (projectId: string, operationId: string, permissions: ApmApplyPermissions) => Promise<unknown>;
|
|
11
|
+
readonly verifyAsync: (projectId: string, operationId: string) => Promise<unknown>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=ProjectUpdateHostPort.d.ts.map
|
package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUpdateHostPort.d.ts","sourceRoot":"","sources":["../../../../../../src/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,UAAU,0BAA0B;IAClC,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,CACpB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,yBAAyB,KACpC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/F,QAAQ,CAAC,UAAU,EAAE,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,mBAAmB,KAC7B,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,CACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,mBAAmB,KAC7B,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUpdateHostPort.js","sourceRoot":"","sources":["../../../../../../src/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ProjectUpdateDashboardEvent, ProjectUpdateDashboardState } from '../../../types/project-update-dashboard';
|
|
2
|
+
/*** Reduce Dashboard APM lifecycle events while invalidating reviewed plans on fresh evidence. */
|
|
3
|
+
export declare function reduceProjectUpdateDashboardState(state: ProjectUpdateDashboardState, event: ProjectUpdateDashboardEvent): ProjectUpdateDashboardState;
|
|
4
|
+
//# sourceMappingURL=reduceProjectUpdateDashboardState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reduceProjectUpdateDashboardState.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/application/reduceProjectUpdateDashboardState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,yCAAyC,CAAC;AAGjD,kGAAkG;AAClG,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,2BAA2B,EAClC,KAAK,EAAE,2BAA2B,GACjC,2BAA2B,CAiD7B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createProjectUpdateDashboardState } from './createProjectUpdateDashboardState';
|
|
2
|
+
/*** Reduce Dashboard APM lifecycle events while invalidating reviewed plans on fresh evidence. */
|
|
3
|
+
export function reduceProjectUpdateDashboardState(state, event) {
|
|
4
|
+
switch (event.type) {
|
|
5
|
+
case 'project-changed':
|
|
6
|
+
return createProjectUpdateDashboardState(event.projectId);
|
|
7
|
+
case 'availability-changed':
|
|
8
|
+
return {
|
|
9
|
+
...state,
|
|
10
|
+
availability: event.availability,
|
|
11
|
+
status: null,
|
|
12
|
+
plan: null,
|
|
13
|
+
error: null,
|
|
14
|
+
};
|
|
15
|
+
case 'request-started':
|
|
16
|
+
return {
|
|
17
|
+
...state,
|
|
18
|
+
busy: event.action,
|
|
19
|
+
error: null,
|
|
20
|
+
...(event.action === 'status' || event.action === 'plan' ? { plan: null } : {}),
|
|
21
|
+
};
|
|
22
|
+
case 'request-failed':
|
|
23
|
+
return { ...state, busy: null, error: event.message };
|
|
24
|
+
case 'status-received':
|
|
25
|
+
return { ...state, status: event.status, plan: null, busy: null, error: null };
|
|
26
|
+
case 'plan-received':
|
|
27
|
+
return {
|
|
28
|
+
...state,
|
|
29
|
+
plan: event.plan,
|
|
30
|
+
execution: null,
|
|
31
|
+
verification: null,
|
|
32
|
+
busy: null,
|
|
33
|
+
error: null,
|
|
34
|
+
};
|
|
35
|
+
case 'permissions-changed':
|
|
36
|
+
return { ...state, permissions: event.permissions };
|
|
37
|
+
case 'execution-received':
|
|
38
|
+
return {
|
|
39
|
+
...state,
|
|
40
|
+
plan: null,
|
|
41
|
+
execution: event.execution,
|
|
42
|
+
verification: null,
|
|
43
|
+
operationId: event.operationId ?? state.operationId,
|
|
44
|
+
busy: null,
|
|
45
|
+
error: null,
|
|
46
|
+
};
|
|
47
|
+
case 'verification-received':
|
|
48
|
+
return { ...state, verification: event.verification, busy: null, error: null };
|
|
49
|
+
case 'operation-id-changed':
|
|
50
|
+
return { ...state, operationId: event.operationId, verification: null };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=reduceProjectUpdateDashboardState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reduceProjectUpdateDashboardState.js","sourceRoot":"","sources":["../../../../src/features/project-updates/application/reduceProjectUpdateDashboardState.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAExF,kGAAkG;AAClG,MAAM,UAAU,iCAAiC,CAC/C,KAAkC,EAClC,KAAkC;IAElC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,iCAAiC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5D,KAAK,sBAAsB;YACzB,OAAO;gBACL,GAAG,KAAK;gBACR,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,IAAI,EAAE,KAAK,CAAC,MAAM;gBAClB,KAAK,EAAE,IAAI;gBACX,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChF,CAAC;QACJ,KAAK,gBAAgB;YACnB,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACxD,KAAK,iBAAiB;YACpB,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACjF,KAAK,eAAe;YAClB,OAAO;gBACL,GAAG,KAAK;gBACR,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,IAAI;gBAClB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,KAAK,qBAAqB;YACxB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QACtD,KAAK,oBAAoB;YACvB,OAAO;gBACL,GAAG,KAAK;gBACR,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,YAAY,EAAE,IAAI;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW;gBACnD,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,KAAK,uBAAuB;YAC1B,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACjF,KAAK,sBAAsB;YACzB,OAAO,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC5E,CAAC;AACH,CAAC"}
|
package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.d.ts
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { ProjectUpdateDashboardState } from '../../../types/project-update-dashboard';
|
|
2
|
+
/*** Resolve untrusted structured APM host results into the bounded Dashboard presentation model. */
|
|
3
|
+
export declare function resolveProjectUpdateDashboardPresentation(state: ProjectUpdateDashboardState): {
|
|
4
|
+
status: {
|
|
5
|
+
complete: boolean;
|
|
6
|
+
currency: string;
|
|
7
|
+
dependencies: {
|
|
8
|
+
name: string;
|
|
9
|
+
direct: boolean;
|
|
10
|
+
currentVersion: string;
|
|
11
|
+
availableVersion: string;
|
|
12
|
+
findings: {
|
|
13
|
+
code: string | undefined;
|
|
14
|
+
reason: string;
|
|
15
|
+
nextAction: string | undefined;
|
|
16
|
+
}[];
|
|
17
|
+
}[];
|
|
18
|
+
observations: {
|
|
19
|
+
owner: string;
|
|
20
|
+
projection: string;
|
|
21
|
+
migration: string;
|
|
22
|
+
reason: string | undefined;
|
|
23
|
+
nextAction: string | undefined;
|
|
24
|
+
}[];
|
|
25
|
+
findings: {
|
|
26
|
+
code: string | undefined;
|
|
27
|
+
reason: string;
|
|
28
|
+
nextAction: string | undefined;
|
|
29
|
+
}[];
|
|
30
|
+
diagnostics: {
|
|
31
|
+
code: string | undefined;
|
|
32
|
+
reason: string;
|
|
33
|
+
nextAction: string | undefined;
|
|
34
|
+
}[];
|
|
35
|
+
} | null;
|
|
36
|
+
plan: {
|
|
37
|
+
id: string;
|
|
38
|
+
complete: boolean;
|
|
39
|
+
hostRestartRequired: boolean;
|
|
40
|
+
canApply: boolean;
|
|
41
|
+
targets: {
|
|
42
|
+
name: string;
|
|
43
|
+
direct: boolean;
|
|
44
|
+
currentVersion: string;
|
|
45
|
+
targetVersion: string;
|
|
46
|
+
reason: string;
|
|
47
|
+
}[];
|
|
48
|
+
files: {
|
|
49
|
+
path: string;
|
|
50
|
+
kind: string;
|
|
51
|
+
}[];
|
|
52
|
+
steps: {
|
|
53
|
+
id: string;
|
|
54
|
+
kind: string;
|
|
55
|
+
reason: string;
|
|
56
|
+
evidence: readonly string[];
|
|
57
|
+
}[];
|
|
58
|
+
effects: {
|
|
59
|
+
kind: string;
|
|
60
|
+
state: string;
|
|
61
|
+
reason: string;
|
|
62
|
+
}[];
|
|
63
|
+
blockers: {
|
|
64
|
+
code: string;
|
|
65
|
+
reason: string;
|
|
66
|
+
nextAction: string | undefined;
|
|
67
|
+
}[];
|
|
68
|
+
findings: {
|
|
69
|
+
code: string | undefined;
|
|
70
|
+
reason: string;
|
|
71
|
+
nextAction: string | undefined;
|
|
72
|
+
}[];
|
|
73
|
+
diagnostics: {
|
|
74
|
+
code: string | undefined;
|
|
75
|
+
reason: string;
|
|
76
|
+
nextAction: string | undefined;
|
|
77
|
+
}[];
|
|
78
|
+
} | null;
|
|
79
|
+
execution: {
|
|
80
|
+
operationId: string;
|
|
81
|
+
status: string;
|
|
82
|
+
complete: boolean;
|
|
83
|
+
blockers: {
|
|
84
|
+
code: string | undefined;
|
|
85
|
+
reason: string;
|
|
86
|
+
nextAction: string | undefined;
|
|
87
|
+
}[];
|
|
88
|
+
diagnostics: {
|
|
89
|
+
code: string | undefined;
|
|
90
|
+
reason: string;
|
|
91
|
+
nextAction: string | undefined;
|
|
92
|
+
}[];
|
|
93
|
+
steps: {
|
|
94
|
+
id: string;
|
|
95
|
+
state: string;
|
|
96
|
+
attempts: number;
|
|
97
|
+
}[];
|
|
98
|
+
} | null;
|
|
99
|
+
verification: {
|
|
100
|
+
operationId: string;
|
|
101
|
+
verified: boolean;
|
|
102
|
+
checks: {
|
|
103
|
+
id: string;
|
|
104
|
+
kind: string;
|
|
105
|
+
status: string;
|
|
106
|
+
reason: string | undefined;
|
|
107
|
+
nextAction: string | undefined;
|
|
108
|
+
}[];
|
|
109
|
+
findings: {
|
|
110
|
+
code: string | undefined;
|
|
111
|
+
reason: string;
|
|
112
|
+
nextAction: string | undefined;
|
|
113
|
+
}[];
|
|
114
|
+
followUp: {
|
|
115
|
+
kind: string;
|
|
116
|
+
state: string;
|
|
117
|
+
reason: string;
|
|
118
|
+
}[];
|
|
119
|
+
diagnostics: {
|
|
120
|
+
code: string | undefined;
|
|
121
|
+
reason: string;
|
|
122
|
+
nextAction: string | undefined;
|
|
123
|
+
}[];
|
|
124
|
+
} | null;
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=resolveProjectUpdateDashboardPresentation.d.ts.map
|
package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveProjectUpdateDashboardPresentation.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/application/resolveProjectUpdateDashboardPresentation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AAE3F,oGAAoG;AACpG,wBAAgB,yCAAyC,CAAC,KAAK,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO3F"}
|
package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { isRecord } from '@ankhorage/utility/object';
|
|
2
|
+
/*** Resolve untrusted structured APM host results into the bounded Dashboard presentation model. */
|
|
3
|
+
export function resolveProjectUpdateDashboardPresentation(state) {
|
|
4
|
+
return {
|
|
5
|
+
status: resolveStatus(state.status),
|
|
6
|
+
plan: resolvePlan(state.plan),
|
|
7
|
+
execution: resolveExecution(state.execution),
|
|
8
|
+
verification: resolveVerification(state.verification),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function resolveStatus(value) {
|
|
12
|
+
if (!isOperation(value, 'status'))
|
|
13
|
+
return null;
|
|
14
|
+
const dependencies = readRecords(value.dependencies).map((dependency) => {
|
|
15
|
+
const installed = isRecord(dependency.installed) ? dependency.installed : {};
|
|
16
|
+
const availability = isRecord(dependency.availability) ? dependency.availability : {};
|
|
17
|
+
return {
|
|
18
|
+
name: readString(dependency.name, 'Unknown package'),
|
|
19
|
+
direct: dependency.direct === true,
|
|
20
|
+
currentVersion: readOptionalString(dependency.lockedVersion) ??
|
|
21
|
+
readOptionalString(installed.version) ??
|
|
22
|
+
'unknown',
|
|
23
|
+
availableVersion: readOptionalString(availability.compatibleVersion) ??
|
|
24
|
+
readOptionalString(availability.latestVersion) ??
|
|
25
|
+
readString(availability.state, 'unknown'),
|
|
26
|
+
findings: readReasonRows(dependency.findings),
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
const extensions = isRecord(value.extensions) ? value.extensions : {};
|
|
30
|
+
return {
|
|
31
|
+
complete: value.complete === true,
|
|
32
|
+
currency: readString(value.currency, 'unknown'),
|
|
33
|
+
dependencies,
|
|
34
|
+
observations: readRecords(extensions.observations).map((observation) => ({
|
|
35
|
+
owner: readOptionalString(observation.owner) ??
|
|
36
|
+
readOptionalString(observation.packageId) ??
|
|
37
|
+
'Unknown owner',
|
|
38
|
+
projection: readString(observation.projection, 'unknown'),
|
|
39
|
+
migration: readString(observation.migration, 'unknown'),
|
|
40
|
+
reason: readOptionalString(observation.reason),
|
|
41
|
+
nextAction: readOptionalString(observation.nextAction),
|
|
42
|
+
})),
|
|
43
|
+
findings: readReasonRows(value.findings),
|
|
44
|
+
diagnostics: readReasonRows(value.diagnostics),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function resolvePlan(value) {
|
|
48
|
+
if (!isOperation(value, 'plan'))
|
|
49
|
+
return null;
|
|
50
|
+
const blockers = readRecords(value.blockers).map((blocker) => ({
|
|
51
|
+
code: readString(blocker.code, 'plan.blocked'),
|
|
52
|
+
reason: readString(blocker.reason, 'Plan is blocked.'),
|
|
53
|
+
nextAction: readOptionalString(blocker.nextAction),
|
|
54
|
+
}));
|
|
55
|
+
const steps = readRecords(value.steps).map((step) => ({
|
|
56
|
+
id: readString(step.id, 'step'),
|
|
57
|
+
kind: readString(step.kind, 'unknown'),
|
|
58
|
+
reason: readString(step.reason, 'No reason provided.'),
|
|
59
|
+
evidence: readStrings(step.evidence),
|
|
60
|
+
}));
|
|
61
|
+
const hostRestartRequired = blockers.some((blocker) => blocker.code === 'plan.host-upgrade-required') ||
|
|
62
|
+
steps.some((step) => step.kind === 'host-restart');
|
|
63
|
+
const complete = value.complete === true;
|
|
64
|
+
return {
|
|
65
|
+
id: readString(value.id, 'unknown-plan'),
|
|
66
|
+
complete,
|
|
67
|
+
hostRestartRequired,
|
|
68
|
+
canApply: complete && !hostRestartRequired,
|
|
69
|
+
targets: readRecords(value.targets).map((target) => ({
|
|
70
|
+
name: readString(target.name, 'Unknown package'),
|
|
71
|
+
direct: target.direct === true,
|
|
72
|
+
currentVersion: readOptionalString(target.currentVersion) ?? 'unknown',
|
|
73
|
+
targetVersion: readString(target.targetVersion, 'unknown'),
|
|
74
|
+
reason: readString(target.reason, 'No reason provided.'),
|
|
75
|
+
})),
|
|
76
|
+
files: readRecords(value.files).map((file) => ({
|
|
77
|
+
path: readString(file.path, 'unknown path'),
|
|
78
|
+
kind: readString(file.kind, 'update'),
|
|
79
|
+
})),
|
|
80
|
+
steps,
|
|
81
|
+
effects: readRecords(value.effects).map(resolveEffect),
|
|
82
|
+
blockers,
|
|
83
|
+
findings: readReasonRows(value.findings),
|
|
84
|
+
diagnostics: readReasonRows(value.diagnostics),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function resolveExecution(value) {
|
|
88
|
+
if (!isOperation(value, 'apply'))
|
|
89
|
+
return null;
|
|
90
|
+
const journal = isRecord(value.journal) ? value.journal : {};
|
|
91
|
+
return {
|
|
92
|
+
operationId: readString(value.operationId, ''),
|
|
93
|
+
status: readString(value.status, 'unknown'),
|
|
94
|
+
complete: value.complete === true,
|
|
95
|
+
blockers: readReasonRows(value.blockers),
|
|
96
|
+
diagnostics: readReasonRows(value.diagnostics),
|
|
97
|
+
steps: readRecords(journal.steps).map((step) => ({
|
|
98
|
+
id: readString(step.stepId, 'step'),
|
|
99
|
+
state: readString(step.state, 'unknown'),
|
|
100
|
+
attempts: typeof step.attempts === 'number' ? step.attempts : 0,
|
|
101
|
+
})),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function resolveVerification(value) {
|
|
105
|
+
if (!isOperation(value, 'verify'))
|
|
106
|
+
return null;
|
|
107
|
+
return {
|
|
108
|
+
operationId: readString(value.operationId, ''),
|
|
109
|
+
verified: value.verified === true,
|
|
110
|
+
checks: readRecords(value.checks).map((check) => ({
|
|
111
|
+
id: readString(check.id, 'check'),
|
|
112
|
+
kind: readString(check.kind, 'unknown'),
|
|
113
|
+
status: readString(check.status, 'unknown'),
|
|
114
|
+
reason: readOptionalString(check.reason),
|
|
115
|
+
nextAction: readOptionalString(check.nextAction),
|
|
116
|
+
})),
|
|
117
|
+
findings: readReasonRows(value.findings),
|
|
118
|
+
followUp: readRecords(value.followUp).map(resolveEffect),
|
|
119
|
+
diagnostics: readReasonRows(value.diagnostics),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function resolveEffect(effect) {
|
|
123
|
+
return {
|
|
124
|
+
kind: readString(effect.kind, 'follow-up'),
|
|
125
|
+
state: readOptionalString(effect.requirement) ?? readOptionalString(effect.eligibility) ?? 'unknown',
|
|
126
|
+
reason: readString(effect.reason, 'No reason provided.'),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function readReasonRows(value) {
|
|
130
|
+
return readRecords(value).map((entry) => ({
|
|
131
|
+
code: readOptionalString(entry.code),
|
|
132
|
+
reason: readString(entry.reason, 'No reason provided.'),
|
|
133
|
+
nextAction: readOptionalString(entry.nextAction),
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
function isOperation(value, operation) {
|
|
137
|
+
return isRecord(value) && value.operation === operation;
|
|
138
|
+
}
|
|
139
|
+
function readRecords(value) {
|
|
140
|
+
return Array.isArray(value) ? value.filter(isRecord) : [];
|
|
141
|
+
}
|
|
142
|
+
function readStrings(value) {
|
|
143
|
+
return Array.isArray(value)
|
|
144
|
+
? value.filter((entry) => typeof entry === 'string')
|
|
145
|
+
: [];
|
|
146
|
+
}
|
|
147
|
+
function readString(value, fallback) {
|
|
148
|
+
return typeof value === 'string' && value.length > 0 ? value : fallback;
|
|
149
|
+
}
|
|
150
|
+
function readOptionalString(value) {
|
|
151
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=resolveProjectUpdateDashboardPresentation.js.map
|
package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveProjectUpdateDashboardPresentation.js","sourceRoot":"","sources":["../../../../src/features/project-updates/application/resolveProjectUpdateDashboardPresentation.ts"],"names":[],"mappings":"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"}
|
package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ProjectUpdateDashboardService } from '../application/ProjectUpdateDashboardService';
|
|
2
|
+
/*** Compose Dashboard APM lifecycle orchestration with Studio's authorized HTTP host adapter. */
|
|
3
|
+
export declare function createStudioProjectUpdateDashboardService(): ProjectUpdateDashboardService;
|
|
4
|
+
//# sourceMappingURL=createStudioProjectUpdateDashboardService.d.ts.map
|
package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStudioProjectUpdateDashboardService.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateDashboardService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAE7F,iGAAiG;AACjG,wBAAgB,yCAAyC,IAAI,6BAA6B,CAEzF"}
|
package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { API_BASE } from '../../../core/constants';
|
|
2
|
+
import { createProjectUpdateHostHttpAdapter } from '../adapters/outbound/createProjectUpdateHostHttpAdapter';
|
|
3
|
+
import { ProjectUpdateDashboardService } from '../application/ProjectUpdateDashboardService';
|
|
4
|
+
/*** Compose Dashboard APM lifecycle orchestration with Studio's authorized HTTP host adapter. */
|
|
5
|
+
export function createStudioProjectUpdateDashboardService() {
|
|
6
|
+
return new ProjectUpdateDashboardService(createProjectUpdateHostHttpAdapter(API_BASE));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=createStudioProjectUpdateDashboardService.js.map
|
package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStudioProjectUpdateDashboardService.js","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateDashboardService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,kCAAkC,EAAE,MAAM,yDAAyD,CAAC;AAC7G,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAE7F,iGAAiG;AACjG,MAAM,UAAU,yCAAyC;IACvD,OAAO,IAAI,6BAA6B,CAAC,kCAAkC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readProjectUpdateOperationId.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/utils/readProjectUpdateOperationId.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK/E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { isRecord } from '@ankhorage/utility/object';
|
|
2
|
+
/*** Read a durable APM operation id from one structured apply/resume result. */
|
|
3
|
+
export function readProjectUpdateOperationId(value) {
|
|
4
|
+
if (!isRecord(value) || value.operation !== 'apply')
|
|
5
|
+
return undefined;
|
|
6
|
+
return typeof value.operationId === 'string' && value.operationId.length > 0
|
|
7
|
+
? value.operationId
|
|
8
|
+
: undefined;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=readProjectUpdateOperationId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readProjectUpdateOperationId.js","sourceRoot":"","sources":["../../../../src/features/project-updates/utils/readProjectUpdateOperationId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,gFAAgF;AAChF,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACtE,OAAO,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC1E,CAAC,CAAC,KAAK,CAAC,WAAW;QACnB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ApmApplyPermissions, ApmStatusAvailabilityMode } from '@ankhorage/apm/types';
|
|
2
|
+
export type ProjectUpdatePermissionId = 'owner-code' | 'lifecycle-scripts' | 'external-effects';
|
|
3
|
+
export interface ProjectUpdateDashboardState {
|
|
4
|
+
readonly projectId: string;
|
|
5
|
+
readonly availability: ApmStatusAvailabilityMode;
|
|
6
|
+
readonly status: unknown;
|
|
7
|
+
readonly plan: unknown;
|
|
8
|
+
readonly execution: unknown;
|
|
9
|
+
readonly verification: unknown;
|
|
10
|
+
readonly operationId: string;
|
|
11
|
+
readonly permissions: ApmApplyPermissions;
|
|
12
|
+
readonly busy: 'status' | 'plan' | 'apply' | 'resume' | 'verify' | null;
|
|
13
|
+
readonly error: string | null;
|
|
14
|
+
}
|
|
15
|
+
export type ProjectUpdateDashboardEvent = {
|
|
16
|
+
readonly type: 'project-changed';
|
|
17
|
+
readonly projectId: string;
|
|
18
|
+
} | {
|
|
19
|
+
readonly type: 'availability-changed';
|
|
20
|
+
readonly availability: ApmStatusAvailabilityMode;
|
|
21
|
+
} | {
|
|
22
|
+
readonly type: 'request-started';
|
|
23
|
+
readonly action: 'status' | 'plan' | 'apply' | 'resume' | 'verify';
|
|
24
|
+
} | {
|
|
25
|
+
readonly type: 'request-failed';
|
|
26
|
+
readonly message: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly type: 'status-received';
|
|
29
|
+
readonly status: unknown;
|
|
30
|
+
} | {
|
|
31
|
+
readonly type: 'plan-received';
|
|
32
|
+
readonly plan: unknown;
|
|
33
|
+
} | {
|
|
34
|
+
readonly type: 'permissions-changed';
|
|
35
|
+
readonly permissions: ApmApplyPermissions;
|
|
36
|
+
} | {
|
|
37
|
+
readonly type: 'execution-received';
|
|
38
|
+
readonly execution: unknown;
|
|
39
|
+
readonly operationId?: string;
|
|
40
|
+
} | {
|
|
41
|
+
readonly type: 'verification-received';
|
|
42
|
+
readonly verification: unknown;
|
|
43
|
+
} | {
|
|
44
|
+
readonly type: 'operation-id-changed';
|
|
45
|
+
readonly operationId: string;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=project-update-dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-update-dashboard.d.ts","sourceRoot":"","sources":["../../src/types/project-update-dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,MAAM,MAAM,yBAAyB,GAAG,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEhG,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAA;CAAE,GAC3F;IACE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACpE,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1D;IACE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;CAC3C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAAE,GAC1E;IAAE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-update-dashboard.js","sourceRoot":"","sources":["../../src/types/project-update-dashboard.ts"],"names":[],"mappings":""}
|