@ankhorage/studio 2.6.2 → 2.6.4
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/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.d.ts +4 -0
- package/dist/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.js +112 -0
- package/dist/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.js.map +1 -0
- package/dist/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.d.ts +21 -0
- package/dist/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.js +35 -0
- package/dist/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.js.map +1 -0
- package/dist/features/project-updates/adapters/outbound/readStudioManifestDigestAsync.d.ts +3 -0
- package/dist/features/project-updates/adapters/outbound/readStudioManifestDigestAsync.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/outbound/readStudioManifestDigestAsync.js +9 -0
- package/dist/features/project-updates/adapters/outbound/readStudioManifestDigestAsync.js.map +1 -0
- package/dist/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.d.ts +15 -0
- package/dist/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.js +32 -0
- package/dist/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.js.map +1 -0
- package/dist/features/project-updates/application/StudioPendingModuleLifecyclePort.d.ts +6 -0
- package/dist/features/project-updates/application/StudioPendingModuleLifecyclePort.d.ts.map +1 -0
- package/dist/features/project-updates/application/StudioPendingModuleLifecyclePort.js +2 -0
- package/dist/features/project-updates/application/StudioPendingModuleLifecyclePort.js.map +1 -0
- package/dist/features/project-updates/application/planPendingModuleLifecycleAsync.d.ts +15 -0
- package/dist/features/project-updates/application/planPendingModuleLifecycleAsync.d.ts.map +1 -0
- package/dist/features/project-updates/application/planPendingModuleLifecycleAsync.js +214 -0
- package/dist/features/project-updates/application/planPendingModuleLifecycleAsync.js.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateApplyOwnerStepPort.d.ts +5 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateApplyOwnerStepPort.d.ts.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateApplyOwnerStepPort.js +171 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateApplyOwnerStepPort.js.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.d.ts +4 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.d.ts.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.js +29 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.js.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateProtocolPort.d.ts +10 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateProtocolPort.d.ts.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateProtocolPort.js +106 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateProtocolPort.js.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateService.d.ts +6 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateService.d.ts.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateService.js +22 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateService.js.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateVerifyOwnerStepPort.d.ts +5 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateVerifyOwnerStepPort.d.ts.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateVerifyOwnerStepPort.js +67 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateVerifyOwnerStepPort.js.map +1 -0
- package/dist/features/project-updates/constants.d.ts +4 -0
- package/dist/features/project-updates/constants.d.ts.map +1 -0
- package/dist/features/project-updates/constants.js +4 -0
- package/dist/features/project-updates/constants.js.map +1 -0
- package/dist/features/project-updates/domain/pendingModuleLifecycleState.d.ts +24 -0
- package/dist/features/project-updates/domain/pendingModuleLifecycleState.d.ts.map +1 -0
- package/dist/features/project-updates/domain/pendingModuleLifecycleState.js +48 -0
- package/dist/features/project-updates/domain/pendingModuleLifecycleState.js.map +1 -0
- package/dist/features/project-updates/domain/pendingModulePlanStep.d.ts +10 -0
- package/dist/features/project-updates/domain/pendingModulePlanStep.d.ts.map +1 -0
- package/dist/features/project-updates/domain/pendingModulePlanStep.js +25 -0
- package/dist/features/project-updates/domain/pendingModulePlanStep.js.map +1 -0
- package/dist/host/createStudioHost.d.ts +1 -2
- package/dist/host/createStudioHost.d.ts.map +1 -1
- package/dist/host/createStudioHost.js +3 -2
- package/dist/host/createStudioHost.js.map +1 -1
- package/dist/host/orchestrator/createHostModuleOrchestrator.d.ts +4 -0
- package/dist/host/orchestrator/createHostModuleOrchestrator.d.ts.map +1 -0
- package/dist/host/orchestrator/createHostModuleOrchestrator.js +10 -0
- package/dist/host/orchestrator/createHostModuleOrchestrator.js.map +1 -0
- package/dist/host/orchestrator/createStudioPendingModuleLifecyclePort.d.ts +4 -0
- package/dist/host/orchestrator/createStudioPendingModuleLifecyclePort.d.ts.map +1 -0
- package/dist/host/orchestrator/createStudioPendingModuleLifecyclePort.js +20 -0
- package/dist/host/orchestrator/createStudioPendingModuleLifecyclePort.js.map +1 -0
- package/dist/host/orchestrator/moduleManager.d.ts.map +1 -1
- package/dist/host/orchestrator/moduleManager.js +3 -6
- package/dist/host/orchestrator/moduleManager.js.map +1 -1
- package/package.json +2 -2
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.6.
|
|
4
|
+
"owner": { "name": "@ankhorage/studio", "version": "2.6.4" },
|
|
5
5
|
"history": {
|
|
6
6
|
"supported": [{ "sourceRange": ">=2.5.7 <3.0.0", "mode": "no-migration" }],
|
|
7
7
|
"unsupported": [],
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ApmExtensionEvidence } from '@ankhorage/apm/types';
|
|
2
|
+
/*** Inspect Studio's deferred module removals without mutating or executing the project. */
|
|
3
|
+
export declare function inspectPendingModuleLifecycleEvidenceAsync(rootPath: string): Promise<ApmExtensionEvidence>;
|
|
4
|
+
//# sourceMappingURL=inspectPendingModuleLifecycleEvidenceAsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectPendingModuleLifecycleEvidenceAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAUjE,4FAA4F;AAC5F,wBAAsB,0CAA0C,CAC9D,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAY/B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { STUDIO_PENDING_MODULE_LIFECYCLE_EVIDENCE, STUDIO_PENDING_MODULE_LIFECYCLE_FILE, STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID, } from '../../constants';
|
|
2
|
+
import { pendingModuleLifecycleIds } from '../../domain/pendingModuleLifecycleState';
|
|
3
|
+
import { readPendingModuleLifecycleStateAsync } from './readPendingModuleLifecycleStateAsync';
|
|
4
|
+
/*** Inspect Studio's deferred module removals without mutating or executing the project. */
|
|
5
|
+
export async function inspectPendingModuleLifecycleEvidenceAsync(rootPath) {
|
|
6
|
+
const result = await readPendingModuleLifecycleStateAsync(rootPath);
|
|
7
|
+
switch (result.state) {
|
|
8
|
+
case 'absent':
|
|
9
|
+
return availableEvidence([], undefined);
|
|
10
|
+
case 'valid':
|
|
11
|
+
return availableEvidence(pendingModuleLifecycleIds(result.value), result.digest);
|
|
12
|
+
case 'invalid':
|
|
13
|
+
return malformedEvidence(result.digest);
|
|
14
|
+
case 'unreadable':
|
|
15
|
+
return unreadableEvidence(result.reason);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/*** Return complete Studio extension evidence for absent, empty, or valid pending state. */
|
|
19
|
+
function availableEvidence(moduleIds, digest) {
|
|
20
|
+
if (moduleIds.length === 0) {
|
|
21
|
+
return { state: 'available', complete: true, observations: [], diagnostics: [] };
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
state: 'available',
|
|
25
|
+
complete: true,
|
|
26
|
+
observations: [
|
|
27
|
+
{
|
|
28
|
+
owner: '@ankhorage/studio',
|
|
29
|
+
projection: 'stale',
|
|
30
|
+
migration: 'not-applicable',
|
|
31
|
+
evidence: pendingEvidence(moduleIds, digest),
|
|
32
|
+
reason: 'Studio has deferred module removals that are not yet materialized.',
|
|
33
|
+
nextAction: 'Review the pending Studio module lifecycle work before applying project updates.',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
diagnostics: [],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/*** Return incomplete evidence when the pending file exists but has an unsupported shape. */
|
|
40
|
+
function malformedEvidence(digest) {
|
|
41
|
+
const evidence = [...baseEvidence(), `pending-digest:${digest}`];
|
|
42
|
+
return {
|
|
43
|
+
state: 'available',
|
|
44
|
+
complete: false,
|
|
45
|
+
observations: [
|
|
46
|
+
{
|
|
47
|
+
owner: '@ankhorage/studio',
|
|
48
|
+
projection: 'unknown',
|
|
49
|
+
migration: 'not-applicable',
|
|
50
|
+
evidence,
|
|
51
|
+
reason: 'Studio pending module lifecycle state is malformed or unsupported.',
|
|
52
|
+
nextAction: 'Repair or recreate the Studio pending module lifecycle state before updating.',
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
diagnostics: [
|
|
56
|
+
{
|
|
57
|
+
code: 'studio.pending-module-lifecycle.invalid',
|
|
58
|
+
severity: 'error',
|
|
59
|
+
scope: { kind: 'projection', id: STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID },
|
|
60
|
+
evidence,
|
|
61
|
+
reason: 'The pending module lifecycle file cannot be interpreted safely.',
|
|
62
|
+
nextAction: 'Repair or recreate the Studio pending module lifecycle state before updating.',
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/*** Return incomplete evidence when the pending state cannot be read for an unexpected reason. */
|
|
68
|
+
function unreadableEvidence(detail) {
|
|
69
|
+
return {
|
|
70
|
+
state: 'available',
|
|
71
|
+
complete: false,
|
|
72
|
+
observations: [
|
|
73
|
+
{
|
|
74
|
+
owner: '@ankhorage/studio',
|
|
75
|
+
projection: 'unknown',
|
|
76
|
+
migration: 'not-applicable',
|
|
77
|
+
evidence: [...baseEvidence(), detail],
|
|
78
|
+
reason: 'Studio pending module lifecycle state could not be inspected.',
|
|
79
|
+
nextAction: 'Restore readable project state before updating.',
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
diagnostics: [
|
|
83
|
+
{
|
|
84
|
+
code: 'studio.pending-module-lifecycle.unreadable',
|
|
85
|
+
severity: 'error',
|
|
86
|
+
scope: { kind: 'projection', id: STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID },
|
|
87
|
+
evidence: [...baseEvidence(), detail],
|
|
88
|
+
reason: 'The pending module lifecycle file could not be read.',
|
|
89
|
+
nextAction: 'Restore readable project state before updating.',
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/*** Build stable evidence for the pending lifecycle projection. */
|
|
95
|
+
function pendingEvidence(moduleIds, digest) {
|
|
96
|
+
return [
|
|
97
|
+
...baseEvidence(),
|
|
98
|
+
...(digest === undefined ? [] : [`pending-digest:${digest}`]),
|
|
99
|
+
...[...moduleIds].sort(compareText).map((moduleId) => `module-uninstall:${moduleId}`),
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
/*** Build the stable evidence prefix used to recognize Studio's pending lifecycle projection. */
|
|
103
|
+
function baseEvidence() {
|
|
104
|
+
return [STUDIO_PENDING_MODULE_LIFECYCLE_EVIDENCE, STUDIO_PENDING_MODULE_LIFECYCLE_FILE];
|
|
105
|
+
}
|
|
106
|
+
/*** Compare serialized identifiers without locale-dependent ordering. */
|
|
107
|
+
function compareText(left, right) {
|
|
108
|
+
if (left < right)
|
|
109
|
+
return -1;
|
|
110
|
+
return left > right ? 1 : 0;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=inspectPendingModuleLifecycleEvidenceAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectPendingModuleLifecycleEvidenceAsync.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.ts"],"names":[],"mappings":"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"}
|
package/dist/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type PendingModuleLifecycleState } from '../../domain/pendingModuleLifecycleState';
|
|
2
|
+
export type PendingModuleLifecycleReadResult = {
|
|
3
|
+
readonly state: 'absent';
|
|
4
|
+
} | {
|
|
5
|
+
readonly state: 'valid';
|
|
6
|
+
readonly value: PendingModuleLifecycleState;
|
|
7
|
+
readonly content: string;
|
|
8
|
+
readonly digest: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly state: 'invalid';
|
|
11
|
+
readonly content: string;
|
|
12
|
+
readonly digest: string;
|
|
13
|
+
} | {
|
|
14
|
+
readonly state: 'unreadable';
|
|
15
|
+
readonly reason: string;
|
|
16
|
+
};
|
|
17
|
+
/*** Read Studio pending lifecycle state with an immutable digest for plan/recovery preconditions. */
|
|
18
|
+
export declare function readPendingModuleLifecycleStateAsync(rootPath: string): Promise<PendingModuleLifecycleReadResult>;
|
|
19
|
+
/*** Compute the canonical SHA-256 digest used by APM reviewed text changes. */
|
|
20
|
+
export declare function digestProjectUpdateText(content: string): string;
|
|
21
|
+
//# sourceMappingURL=readPendingModuleLifecycleStateAsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readPendingModuleLifecycleStateAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,0CAA0C,CAAC;AAElD,MAAM,MAAM,gCAAgC,GACxC;IAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAC5B;IACE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,2BAA2B,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GACD;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,qGAAqG;AACrG,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gCAAgC,CAAC,CAgB3C;AAED,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D"}
|
package/dist/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { isMissingPathError } from '@ankhorage/utility/node/fs';
|
|
5
|
+
import { STUDIO_PENDING_MODULE_LIFECYCLE_FILE } from '../../constants';
|
|
6
|
+
import { parsePendingModuleLifecycleState, } from '../../domain/pendingModuleLifecycleState';
|
|
7
|
+
/*** Read Studio pending lifecycle state with an immutable digest for plan/recovery preconditions. */
|
|
8
|
+
export async function readPendingModuleLifecycleStateAsync(rootPath) {
|
|
9
|
+
const filePath = path.join(rootPath, STUDIO_PENDING_MODULE_LIFECYCLE_FILE);
|
|
10
|
+
try {
|
|
11
|
+
const content = await readFile(filePath, 'utf8');
|
|
12
|
+
const digest = digestText(content);
|
|
13
|
+
const parsed = parsePendingModuleLifecycleState(content);
|
|
14
|
+
return parsed.valid
|
|
15
|
+
? { state: 'valid', value: parsed.value, content, digest }
|
|
16
|
+
: { state: 'invalid', content, digest };
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (isMissingPathError(error))
|
|
20
|
+
return { state: 'absent' };
|
|
21
|
+
return {
|
|
22
|
+
state: 'unreadable',
|
|
23
|
+
reason: error instanceof Error ? error.message : 'unknown pending-state read failure',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/*** Compute the canonical SHA-256 digest used by APM reviewed text changes. */
|
|
28
|
+
export function digestProjectUpdateText(content) {
|
|
29
|
+
return digestText(content);
|
|
30
|
+
}
|
|
31
|
+
/*** Hash one reviewed text value without environment-dependent encoding. */
|
|
32
|
+
function digestText(content) {
|
|
33
|
+
return createHash('sha256').update(content, 'utf8').digest('hex');
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=readPendingModuleLifecycleStateAsync.js.map
|
package/dist/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readPendingModuleLifecycleStateAsync.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/readPendingModuleLifecycleStateAsync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,oCAAoC,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,gCAAgC,GAEjC,MAAM,0CAA0C,CAAC;AAalD,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,QAAgB;IAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,KAAK;YACjB,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;YAC1D,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,kBAAkB,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC1D,OAAO;YACL,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC;SACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,4EAA4E;AAC5E,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC"}
|
package/dist/features/project-updates/adapters/outbound/readStudioManifestDigestAsync.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readStudioManifestDigestAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/readStudioManifestDigestAsync.ts"],"names":[],"mappings":"AAOA,wGAAwG;AACxG,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { digestProjectUpdateText } from './readPendingModuleLifecycleStateAsync';
|
|
4
|
+
const STUDIO_MANIFEST_FILE = 'ankh.config.json';
|
|
5
|
+
/*** Read the canonical Studio manifest bytes and digest used as an irreversible-effect precondition. */
|
|
6
|
+
export async function readStudioManifestDigestAsync(rootPath) {
|
|
7
|
+
return digestProjectUpdateText(await readFile(path.join(rootPath, STUDIO_MANIFEST_FILE), 'utf8'));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=readStudioManifestDigestAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readStudioManifestDigestAsync.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/readStudioManifestDigestAsync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEjF,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEhD,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,QAAgB;IAClE,OAAO,uBAAuB,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACpG,CAAC"}
|
package/dist/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ApmExtensionArtifactIdentity, ApmExtensionArtifactIdentityResolution } from '@ankhorage/apm/types';
|
|
2
|
+
declare const STUDIO_PACKAGE_NAME = "@ankhorage/studio";
|
|
3
|
+
export interface CurrentStudioApmArtifactBinding {
|
|
4
|
+
readonly packageName: typeof STUDIO_PACKAGE_NAME;
|
|
5
|
+
readonly version: string;
|
|
6
|
+
readonly descriptorDigest: string;
|
|
7
|
+
}
|
|
8
|
+
/*** Resolve this installed Studio version to its immutable published npm artifact identity. */
|
|
9
|
+
export declare function resolveCurrentStudioApmArtifactAsync(rootPath: string): Promise<ApmExtensionArtifactIdentityResolution>;
|
|
10
|
+
/*** Read the exact package version and update-descriptor digest loaded by this Studio runtime. */
|
|
11
|
+
export declare function readCurrentStudioApmArtifactBindingAsync(): Promise<CurrentStudioApmArtifactBinding>;
|
|
12
|
+
/*** Test whether one reviewed owner artifact is executed by this exact loaded Studio package. */
|
|
13
|
+
export declare function currentStudioApmArtifactMatchesAsync(artifact: ApmExtensionArtifactIdentity): Promise<boolean>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=resolveCurrentStudioApmArtifactAsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveCurrentStudioApmArtifactAsync.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,4BAA4B,EAC5B,sCAAsC,EACvC,MAAM,sBAAsB,CAAC;AAI9B,QAAA,MAAM,mBAAmB,sBAAsB,CAAC;AAGhD,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,WAAW,EAAE,OAAO,mBAAmB,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,+FAA+F;AAC/F,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sCAAsC,CAAC,CAOjD;AAED,kGAAkG;AAClG,wBAAsB,wCAAwC,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAOzG;AAED,iGAAiG;AACjG,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,4BAA4B,GACrC,OAAO,CAAC,OAAO,CAAC,CAOlB"}
|
package/dist/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { resolveNpmExtensionArtifactIdentityAsync } from '@ankhorage/apm/node';
|
|
4
|
+
import { getGeneratedPackagePolicy } from './getGeneratedPackagePolicy';
|
|
5
|
+
const STUDIO_PACKAGE_NAME = '@ankhorage/studio';
|
|
6
|
+
const UPDATE_DESCRIPTOR_URL = new URL('../../../../../apm/update.json', import.meta.url);
|
|
7
|
+
/*** Resolve this installed Studio version to its immutable published npm artifact identity. */
|
|
8
|
+
export async function resolveCurrentStudioApmArtifactAsync(rootPath) {
|
|
9
|
+
const binding = await readCurrentStudioApmArtifactBindingAsync();
|
|
10
|
+
return resolveNpmExtensionArtifactIdentityAsync({
|
|
11
|
+
rootPath,
|
|
12
|
+
role: 'target',
|
|
13
|
+
...binding,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/*** Read the exact package version and update-descriptor digest loaded by this Studio runtime. */
|
|
17
|
+
export async function readCurrentStudioApmArtifactBindingAsync() {
|
|
18
|
+
const descriptorSource = await readFile(UPDATE_DESCRIPTOR_URL, 'utf8');
|
|
19
|
+
return {
|
|
20
|
+
packageName: STUDIO_PACKAGE_NAME,
|
|
21
|
+
version: getGeneratedPackagePolicy().ownerVersion,
|
|
22
|
+
descriptorDigest: createHash('sha256').update(descriptorSource, 'utf8').digest('hex'),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/*** Test whether one reviewed owner artifact is executed by this exact loaded Studio package. */
|
|
26
|
+
export async function currentStudioApmArtifactMatchesAsync(artifact) {
|
|
27
|
+
const binding = await readCurrentStudioApmArtifactBindingAsync();
|
|
28
|
+
return (artifact.packageName === binding.packageName &&
|
|
29
|
+
artifact.version === binding.version &&
|
|
30
|
+
artifact.descriptorDigest === binding.descriptorDigest);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=resolveCurrentStudioApmArtifactAsync.js.map
|
package/dist/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveCurrentStudioApmArtifactAsync.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/outbound/resolveCurrentStudioApmArtifactAsync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,wCAAwC,EAAE,MAAM,qBAAqB,CAAC;AAM/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAChD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAQzF,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,QAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,wCAAwC,EAAE,CAAC;IACjE,OAAO,wCAAwC,CAAC;QAC9C,QAAQ;QACR,IAAI,EAAE,QAAQ;QACd,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,wCAAwC;IAC5D,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACvE,OAAO;QACL,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,yBAAyB,EAAE,CAAC,YAAY;QACjD,gBAAgB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KACtF,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,QAAsC;IAEtC,MAAM,OAAO,GAAG,MAAM,wCAAwC,EAAE,CAAC;IACjE,OAAO,CACL,QAAQ,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW;QAC5C,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;QACpC,QAAQ,CAAC,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CACvD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*** Trusted host boundary for observing and executing one published Orchestrator module removal. */
|
|
2
|
+
export interface StudioPendingModuleLifecyclePort {
|
|
3
|
+
readonly isModuleInstalledAsync: (rootPath: string, moduleId: string) => Promise<boolean | undefined>;
|
|
4
|
+
readonly removeModuleAsync: (rootPath: string, moduleId: string) => Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=StudioPendingModuleLifecyclePort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudioPendingModuleLifecyclePort.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/application/StudioPendingModuleLifecyclePort.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,sBAAsB,EAAE,CAC/B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudioPendingModuleLifecyclePort.js","sourceRoot":"","sources":["../../../../src/features/project-updates/application/StudioPendingModuleLifecyclePort.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ApmExtensionArtifactIdentityResolution, ApmPlanArtifactIdentity, ApmPlanBlocker, ApmPlanFileChange, ApmPlanStep } from '@ankhorage/apm/types';
|
|
2
|
+
export interface PendingModuleLifecyclePlanSlice {
|
|
3
|
+
readonly files: readonly ApmPlanFileChange[];
|
|
4
|
+
readonly artifacts: readonly ApmPlanArtifactIdentity[];
|
|
5
|
+
readonly steps: readonly ApmPlanStep[];
|
|
6
|
+
readonly blockers: readonly ApmPlanBlocker[];
|
|
7
|
+
}
|
|
8
|
+
/*** Plan reviewed Orchestrator removals plus APM-native Studio lifecycle file finalization. */
|
|
9
|
+
export declare function planPendingModuleLifecycleAsync(input: {
|
|
10
|
+
readonly rootPath: string;
|
|
11
|
+
readonly expectedPendingDigest: string;
|
|
12
|
+
readonly resolveArtifactAsync: (rootPath: string) => Promise<ApmExtensionArtifactIdentityResolution>;
|
|
13
|
+
readonly nowIso: () => string;
|
|
14
|
+
}): Promise<PendingModuleLifecyclePlanSlice>;
|
|
15
|
+
//# sourceMappingURL=planPendingModuleLifecycleAsync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planPendingModuleLifecycleAsync.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/application/planPendingModuleLifecycleAsync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,sCAAsC,EACtC,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAuB9B,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,+FAA+F;AAC/F,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,sCAAsC,CAAC,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAgD3C"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { isAppManifest } from '../../../contractGuards';
|
|
4
|
+
import { digestProjectUpdateText, readPendingModuleLifecycleStateAsync, } from '../adapters/outbound/readPendingModuleLifecycleStateAsync';
|
|
5
|
+
import { STUDIO_PENDING_MODULE_LIFECYCLE_FILE, STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID, } from '../constants';
|
|
6
|
+
import { pendingModuleLifecycleIds, removeReviewedPendingModules, serializePendingModuleLifecycleState, } from '../domain/pendingModuleLifecycleState';
|
|
7
|
+
const STUDIO_MANIFEST_FILE = 'ankh.config.json';
|
|
8
|
+
const STUDIO_PACKAGE_NAME = '@ankhorage/studio';
|
|
9
|
+
const REMOVAL_STEP_PREFIX = 'projection:@ankhorage/studio:pending-module-remove:';
|
|
10
|
+
const FINALIZE_STEP_ID = 'dependency-files:studio-pending-module-lifecycle';
|
|
11
|
+
/*** Plan reviewed Orchestrator removals plus APM-native Studio lifecycle file finalization. */
|
|
12
|
+
export async function planPendingModuleLifecycleAsync(input) {
|
|
13
|
+
const pending = await readPendingModuleLifecycleStateAsync(input.rootPath);
|
|
14
|
+
if (pending.state !== 'valid')
|
|
15
|
+
return blockedPendingState(input.rootPath, pending.state);
|
|
16
|
+
if (pending.digest !== input.expectedPendingDigest) {
|
|
17
|
+
return blockedDigest(input.rootPath, input.expectedPendingDigest, pending.digest);
|
|
18
|
+
}
|
|
19
|
+
const moduleIds = pendingModuleLifecycleIds(pending.value);
|
|
20
|
+
if (moduleIds.length === 0)
|
|
21
|
+
return emptySlice();
|
|
22
|
+
const artifactResolution = await input.resolveArtifactAsync(input.rootPath);
|
|
23
|
+
if (artifactResolution.state !== 'resolved') {
|
|
24
|
+
return blockedArtifact(input.rootPath, artifactResolution.reason, artifactResolution.evidence);
|
|
25
|
+
}
|
|
26
|
+
const manifestPath = path.join(input.rootPath, STUDIO_MANIFEST_FILE);
|
|
27
|
+
const manifestContent = await readFile(manifestPath, 'utf8');
|
|
28
|
+
const manifestDigest = digestProjectUpdateText(manifestContent);
|
|
29
|
+
const manifest = parseManifest(manifestContent);
|
|
30
|
+
const reviewedIds = new Set(moduleIds);
|
|
31
|
+
const nextManifest = projectReviewedRemovals(manifest, reviewedIds, input.nowIso());
|
|
32
|
+
const nextManifestContent = serializeManifest(nextManifest);
|
|
33
|
+
const nextPending = removeReviewedPendingModules(pending.value, reviewedIds);
|
|
34
|
+
const files = reviewedFileChanges({
|
|
35
|
+
manifestContent,
|
|
36
|
+
nextManifestContent,
|
|
37
|
+
pendingContent: pending.content,
|
|
38
|
+
nextPendingContent: nextPending.ops.length === 0 ? undefined : serializePendingModuleLifecycleState(nextPending),
|
|
39
|
+
});
|
|
40
|
+
const removalSteps = moduleIds.map((moduleId, index) => removalStep({
|
|
41
|
+
moduleId,
|
|
42
|
+
prerequisites: index === 0 ? [] : [removalStepId(moduleIds[index - 1] ?? '')],
|
|
43
|
+
pendingDigest: pending.digest,
|
|
44
|
+
manifestDigest,
|
|
45
|
+
artifact: artifactResolution.artifact,
|
|
46
|
+
}));
|
|
47
|
+
const lastRemovalStep = removalSteps.at(-1);
|
|
48
|
+
return {
|
|
49
|
+
files,
|
|
50
|
+
artifacts: [toPlanArtifact(artifactResolution.artifact)],
|
|
51
|
+
steps: [
|
|
52
|
+
...removalSteps,
|
|
53
|
+
finalizationStep(files, lastRemovalStep === undefined ? [] : [lastRemovalStep.id]),
|
|
54
|
+
],
|
|
55
|
+
blockers: [],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/*** Build one non-restartable dynamic owner step for exactly one Orchestrator module removal. */
|
|
59
|
+
function removalStep(input) {
|
|
60
|
+
const projectionId = `pending-module-remove:${input.moduleId}`;
|
|
61
|
+
const evidence = [
|
|
62
|
+
`module-uninstall:${input.moduleId}`,
|
|
63
|
+
`pending-digest:${input.pendingDigest}`,
|
|
64
|
+
`manifest-digest:${input.manifestDigest}`,
|
|
65
|
+
];
|
|
66
|
+
return {
|
|
67
|
+
id: removalStepId(input.moduleId),
|
|
68
|
+
kind: 'projection',
|
|
69
|
+
prerequisites: input.prerequisites,
|
|
70
|
+
owner: STUDIO_PACKAGE_NAME,
|
|
71
|
+
reason: `Remove reviewed pending Orchestrator module '${input.moduleId}'.`,
|
|
72
|
+
evidence,
|
|
73
|
+
execution: {
|
|
74
|
+
kind: 'projection',
|
|
75
|
+
descriptor: {
|
|
76
|
+
id: projectionId,
|
|
77
|
+
claims: [{ kind: 'dynamic', scope: `orchestrator-module:${input.moduleId}` }],
|
|
78
|
+
requiresExtension: false,
|
|
79
|
+
reason: 'Studio delegates module uninstall side effects to the published Orchestrator owner.',
|
|
80
|
+
},
|
|
81
|
+
artifact: input.artifact,
|
|
82
|
+
plan: {
|
|
83
|
+
projectionId,
|
|
84
|
+
mutations: [],
|
|
85
|
+
inputFingerprint: `pending:${input.pendingDigest}:manifest:${input.manifestDigest}:${input.moduleId}`,
|
|
86
|
+
generatorFingerprint: input.artifact.descriptorDigest,
|
|
87
|
+
evidence,
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/*** Build the native APM file step that commits canonical Studio lifecycle state after removals. */
|
|
93
|
+
function finalizationStep(files, prerequisites) {
|
|
94
|
+
const filePaths = files.map(({ path: filePath }) => filePath);
|
|
95
|
+
return {
|
|
96
|
+
id: FINALIZE_STEP_ID,
|
|
97
|
+
kind: 'dependency-files',
|
|
98
|
+
prerequisites,
|
|
99
|
+
reason: 'Commit the reviewed Studio manifest and pending-lifecycle state after module removals.',
|
|
100
|
+
evidence: filePaths,
|
|
101
|
+
execution: { kind: 'dependency-files', filePaths },
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/*** Build exact reviewed manifest/pending-state changes for APM's native file adapter. */
|
|
105
|
+
function reviewedFileChanges(input) {
|
|
106
|
+
const manifest = {
|
|
107
|
+
path: STUDIO_MANIFEST_FILE,
|
|
108
|
+
kind: 'update',
|
|
109
|
+
beforeContent: input.manifestContent,
|
|
110
|
+
beforeDigest: digestProjectUpdateText(input.manifestContent),
|
|
111
|
+
afterContent: input.nextManifestContent,
|
|
112
|
+
afterDigest: digestProjectUpdateText(input.nextManifestContent),
|
|
113
|
+
};
|
|
114
|
+
const pending = input.nextPendingContent === undefined
|
|
115
|
+
? {
|
|
116
|
+
path: STUDIO_PENDING_MODULE_LIFECYCLE_FILE,
|
|
117
|
+
kind: 'delete',
|
|
118
|
+
beforeContent: input.pendingContent,
|
|
119
|
+
beforeDigest: digestProjectUpdateText(input.pendingContent),
|
|
120
|
+
}
|
|
121
|
+
: {
|
|
122
|
+
path: STUDIO_PENDING_MODULE_LIFECYCLE_FILE,
|
|
123
|
+
kind: 'update',
|
|
124
|
+
beforeContent: input.pendingContent,
|
|
125
|
+
beforeDigest: digestProjectUpdateText(input.pendingContent),
|
|
126
|
+
afterContent: input.nextPendingContent,
|
|
127
|
+
afterDigest: digestProjectUpdateText(input.nextPendingContent),
|
|
128
|
+
};
|
|
129
|
+
return [manifest, pending];
|
|
130
|
+
}
|
|
131
|
+
/*** Project reviewed removals into canonical manifest module ids/config without touching other fields. */
|
|
132
|
+
function projectReviewedRemovals(manifest, reviewedIds, updated) {
|
|
133
|
+
return {
|
|
134
|
+
...manifest,
|
|
135
|
+
metadata: { ...manifest.metadata, updated },
|
|
136
|
+
infra: {
|
|
137
|
+
...manifest.infra,
|
|
138
|
+
modules: manifest.infra.modules.filter((moduleId) => !reviewedIds.has(moduleId)),
|
|
139
|
+
modulesConfig: Object.fromEntries(Object.entries(manifest.infra.modulesConfig ?? {}).filter(([moduleId]) => !reviewedIds.has(moduleId))),
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/*** Parse one canonical Studio project manifest before planning reviewed lifecycle changes. */
|
|
144
|
+
function parseManifest(content) {
|
|
145
|
+
const value = JSON.parse(content);
|
|
146
|
+
if (!isAppManifest(value))
|
|
147
|
+
throw new Error('Project manifest is not a canonical AppManifest.');
|
|
148
|
+
return value;
|
|
149
|
+
}
|
|
150
|
+
/*** Serialize the exact reviewed manifest bytes APM will materialize. */
|
|
151
|
+
function serializeManifest(manifest) {
|
|
152
|
+
return `${JSON.stringify(manifest, null, 2)}\n`;
|
|
153
|
+
}
|
|
154
|
+
/*** Convert executable extension identity into plan-level immutable artifact evidence. */
|
|
155
|
+
function toPlanArtifact(artifact) {
|
|
156
|
+
return {
|
|
157
|
+
id: `${artifact.packageName}@${artifact.version}:${artifact.integrity}`,
|
|
158
|
+
packageName: artifact.packageName,
|
|
159
|
+
version: artifact.version,
|
|
160
|
+
source: 'registry',
|
|
161
|
+
integrity: artifact.integrity,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/*** Explain pending-state drift between status evidence and planning I/O. */
|
|
165
|
+
function blockedDigest(rootPath, expected, actual) {
|
|
166
|
+
return blocked({
|
|
167
|
+
code: 'protocol.studio-pending-module-lifecycle-changed',
|
|
168
|
+
scope: {
|
|
169
|
+
kind: 'projection',
|
|
170
|
+
id: STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID,
|
|
171
|
+
path: rootPath,
|
|
172
|
+
},
|
|
173
|
+
evidence: [expected, actual],
|
|
174
|
+
reason: 'Studio pending module lifecycle state changed while the reviewed plan was being built.',
|
|
175
|
+
nextAction: 'Refresh status and create a new plan from current pending module state.',
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/*** Explain unavailable or invalid pending state discovered during planning. */
|
|
179
|
+
function blockedPendingState(rootPath, state) {
|
|
180
|
+
return blocked({
|
|
181
|
+
code: 'protocol.studio-pending-module-lifecycle-unavailable',
|
|
182
|
+
scope: {
|
|
183
|
+
kind: 'projection',
|
|
184
|
+
id: STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID,
|
|
185
|
+
path: rootPath,
|
|
186
|
+
},
|
|
187
|
+
evidence: [state],
|
|
188
|
+
reason: 'Reviewed pending module lifecycle evidence is no longer available for planning.',
|
|
189
|
+
nextAction: 'Refresh status and repair pending lifecycle state before planning again.',
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/*** Explain missing immutable npm artifact identity for executable Studio owner code. */
|
|
193
|
+
function blockedArtifact(rootPath, reason, evidence) {
|
|
194
|
+
return blocked({
|
|
195
|
+
code: 'protocol.studio-owner-artifact-unavailable',
|
|
196
|
+
scope: { kind: 'host', id: STUDIO_PACKAGE_NAME, path: rootPath },
|
|
197
|
+
evidence,
|
|
198
|
+
reason,
|
|
199
|
+
nextAction: 'Restore registry access and re-plan so exact Studio owner code can be reviewed.',
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/*** Return one blocked plan slice without executable intermediate changes. */
|
|
203
|
+
function blocked(blocker) {
|
|
204
|
+
return { files: [], artifacts: [], steps: [], blockers: [blocker] };
|
|
205
|
+
}
|
|
206
|
+
/*** Return no owner work for an empty pending lifecycle state. */
|
|
207
|
+
function emptySlice() {
|
|
208
|
+
return { files: [], artifacts: [], steps: [], blockers: [] };
|
|
209
|
+
}
|
|
210
|
+
/*** Build the stable reviewed owner-step id for one module. */
|
|
211
|
+
function removalStepId(moduleId) {
|
|
212
|
+
return `${REMOVAL_STEP_PREFIX}${moduleId}`;
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=planPendingModuleLifecycleAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planPendingModuleLifecycleAsync.js","sourceRoot":"","sources":["../../../../src/features/project-updates/application/planPendingModuleLifecycleAsync.ts"],"names":[],"mappings":"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"}
|
package/dist/features/project-updates/composition/createStudioProjectUpdateApplyOwnerStepPort.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ApmApplyStepPort } from '@ankhorage/apm/types';
|
|
2
|
+
import type { StudioPendingModuleLifecyclePort } from '../application/StudioPendingModuleLifecyclePort';
|
|
3
|
+
/*** Compose Studio pending-module execution around any pre-existing trusted owner step adapter. */
|
|
4
|
+
export declare function createStudioProjectUpdateApplyOwnerStepPort(lifecycle: StudioPendingModuleLifecyclePort, base?: ApmApplyStepPort): ApmApplyStepPort;
|
|
5
|
+
//# sourceMappingURL=createStudioProjectUpdateApplyOwnerStepPort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStudioProjectUpdateApplyOwnerStepPort.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateApplyOwnerStepPort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,iDAAiD,CAAC;AAGxG,mGAAmG;AACnG,wBAAgB,2CAA2C,CACzD,SAAS,EAAE,gCAAgC,EAC3C,IAAI,CAAC,EAAE,gBAAgB,GACtB,gBAAgB,CAqBlB"}
|