@ankhorage/studio 2.6.2 → 2.6.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.
Files changed (27) hide show
  1. package/README.md +1 -1
  2. package/apm/update.json +1 -1
  3. package/dist/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.d.ts +4 -0
  4. package/dist/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.d.ts.map +1 -0
  5. package/dist/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.js +148 -0
  6. package/dist/features/project-updates/adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync.js.map +1 -0
  7. package/dist/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.d.ts +4 -0
  8. package/dist/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.d.ts.map +1 -0
  9. package/dist/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.js +29 -0
  10. package/dist/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.js.map +1 -0
  11. package/dist/features/project-updates/composition/createStudioProjectUpdateProtocolPort.d.ts +4 -0
  12. package/dist/features/project-updates/composition/createStudioProjectUpdateProtocolPort.d.ts.map +1 -0
  13. package/dist/features/project-updates/composition/createStudioProjectUpdateProtocolPort.js +67 -0
  14. package/dist/features/project-updates/composition/createStudioProjectUpdateProtocolPort.js.map +1 -0
  15. package/dist/features/project-updates/composition/createStudioProjectUpdateService.d.ts +5 -0
  16. package/dist/features/project-updates/composition/createStudioProjectUpdateService.d.ts.map +1 -0
  17. package/dist/features/project-updates/composition/createStudioProjectUpdateService.js +12 -0
  18. package/dist/features/project-updates/composition/createStudioProjectUpdateService.js.map +1 -0
  19. package/dist/features/project-updates/constants.d.ts +4 -0
  20. package/dist/features/project-updates/constants.d.ts.map +1 -0
  21. package/dist/features/project-updates/constants.js +4 -0
  22. package/dist/features/project-updates/constants.js.map +1 -0
  23. package/dist/host/createStudioHost.d.ts +1 -2
  24. package/dist/host/createStudioHost.d.ts.map +1 -1
  25. package/dist/host/createStudioHost.js +2 -2
  26. package/dist/host/createStudioHost.js.map +1 -1
  27. package/package.json +1 -1
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  # @ankhorage/studio
5
5
 
6
- ![license: MIT](././paradox/badges/license.svg) ![npm: v2.6.1](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
6
+ ![license: MIT](././paradox/badges/license.svg) ![npm: v2.6.2](././paradox/badges/npm.svg) ![runtime: bun](././paradox/badges/runtime.svg) ![typescript: strict](././paradox/badges/typescript.svg) ![eslint: checked](././paradox/badges/eslint.svg) ![prettier: checked](././paradox/badges/prettier.svg) ![build: checked](././paradox/badges/build.svg) ![tests: checked](././paradox/badges/tests.svg) ![docs: paradox](././paradox/badges/docs.svg)
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.2" },
4
+ "owner": { "name": "@ankhorage/studio", "version": "2.6.3" },
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":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AASjE,4FAA4F;AAC5F,wBAAsB,0CAA0C,CAC9D,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAQ/B"}
@@ -0,0 +1,148 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { isRecord } from '@ankhorage/utility/object';
4
+ import { STUDIO_PENDING_MODULE_LIFECYCLE_EVIDENCE, STUDIO_PENDING_MODULE_LIFECYCLE_FILE, STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID, } from '../../constants';
5
+ /*** Inspect Studio's deferred module removals without mutating or executing the project. */
6
+ export async function inspectPendingModuleLifecycleEvidenceAsync(rootPath) {
7
+ const filePath = path.join(rootPath, STUDIO_PENDING_MODULE_LIFECYCLE_FILE);
8
+ try {
9
+ const content = await readFile(filePath, 'utf8');
10
+ return toExtensionEvidence(parsePendingModuleIds(content));
11
+ }
12
+ catch (error) {
13
+ return isMissingFileError(error) ? availableEvidence([]) : unreadableEvidence(error);
14
+ }
15
+ }
16
+ /*** Parse only the current Studio pending-operation shape and reject ambiguous state. */
17
+ function parsePendingModuleIds(content) {
18
+ const value = parseJson(content);
19
+ if (!isRecord(value) || !Array.isArray(value.ops))
20
+ return { valid: false };
21
+ const moduleIds = value.ops.map(readPendingModuleId);
22
+ if (moduleIds.some((moduleId) => moduleId === undefined))
23
+ return { valid: false };
24
+ const ids = moduleIds.filter((moduleId) => moduleId !== undefined);
25
+ return { valid: true, moduleIds: [...new Set(ids)].sort(compareText) };
26
+ }
27
+ /*** Parse JSON into unknown data without allowing JSON.parse's any type beyond this boundary. */
28
+ function parseJson(content) {
29
+ try {
30
+ const value = JSON.parse(content);
31
+ return value;
32
+ }
33
+ catch {
34
+ return undefined;
35
+ }
36
+ }
37
+ /*** Validate one queued uninstall operation and return its normalized module id. */
38
+ function readPendingModuleId(value) {
39
+ if (!isRecord(value) || value.type !== 'uninstall')
40
+ return undefined;
41
+ if (typeof value.moduleId !== 'string' || value.moduleId.trim() === '')
42
+ return undefined;
43
+ if (typeof value.at !== 'string' || value.at.trim() === '')
44
+ return undefined;
45
+ return value.moduleId.trim();
46
+ }
47
+ /*** Convert parsed pending state into conservative APM extension evidence. */
48
+ function toExtensionEvidence(result) {
49
+ if (!result.valid)
50
+ return malformedEvidence();
51
+ return availableEvidence(result.moduleIds);
52
+ }
53
+ /*** Return complete Studio extension evidence for absent, empty, or valid pending state. */
54
+ function availableEvidence(moduleIds) {
55
+ if (moduleIds.length === 0) {
56
+ return { state: 'available', complete: true, observations: [], diagnostics: [] };
57
+ }
58
+ return {
59
+ state: 'available',
60
+ complete: true,
61
+ observations: [
62
+ {
63
+ owner: '@ankhorage/studio',
64
+ projection: 'stale',
65
+ migration: 'not-applicable',
66
+ evidence: pendingEvidence(moduleIds),
67
+ reason: 'Studio has deferred module removals that are not yet materialized.',
68
+ nextAction: 'Review the pending Studio module lifecycle work before applying project updates.',
69
+ },
70
+ ],
71
+ diagnostics: [],
72
+ };
73
+ }
74
+ /*** Return incomplete evidence when the pending file exists but has an unsupported shape. */
75
+ function malformedEvidence() {
76
+ const evidence = baseEvidence();
77
+ return {
78
+ state: 'available',
79
+ complete: false,
80
+ observations: [
81
+ {
82
+ owner: '@ankhorage/studio',
83
+ projection: 'unknown',
84
+ migration: 'not-applicable',
85
+ evidence,
86
+ reason: 'Studio pending module lifecycle state is malformed or unsupported.',
87
+ nextAction: 'Repair or recreate the Studio pending module lifecycle state before updating.',
88
+ },
89
+ ],
90
+ diagnostics: [
91
+ {
92
+ code: 'studio.pending-module-lifecycle.invalid',
93
+ severity: 'error',
94
+ scope: { kind: 'projection', id: STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID },
95
+ evidence,
96
+ reason: 'The pending module lifecycle file cannot be interpreted safely.',
97
+ nextAction: 'Repair or recreate the Studio pending module lifecycle state before updating.',
98
+ },
99
+ ],
100
+ };
101
+ }
102
+ /*** Return incomplete evidence when the pending state cannot be read for an unexpected reason. */
103
+ function unreadableEvidence(error) {
104
+ const detail = error instanceof Error ? error.message : 'unknown pending-state read failure';
105
+ return {
106
+ state: 'available',
107
+ complete: false,
108
+ observations: [
109
+ {
110
+ owner: '@ankhorage/studio',
111
+ projection: 'unknown',
112
+ migration: 'not-applicable',
113
+ evidence: [...baseEvidence(), detail],
114
+ reason: 'Studio pending module lifecycle state could not be inspected.',
115
+ nextAction: 'Restore readable project state before updating.',
116
+ },
117
+ ],
118
+ diagnostics: [
119
+ {
120
+ code: 'studio.pending-module-lifecycle.unreadable',
121
+ severity: 'error',
122
+ scope: { kind: 'projection', id: STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID },
123
+ evidence: [...baseEvidence(), detail],
124
+ reason: 'The pending module lifecycle file could not be read.',
125
+ nextAction: 'Restore readable project state before updating.',
126
+ },
127
+ ],
128
+ };
129
+ }
130
+ /*** Build stable evidence for the pending lifecycle projection. */
131
+ function pendingEvidence(moduleIds) {
132
+ return [...baseEvidence(), ...moduleIds.map((moduleId) => `module-uninstall:${moduleId}`)];
133
+ }
134
+ /*** Build the stable evidence prefix used to recognize Studio's pending lifecycle projection. */
135
+ function baseEvidence() {
136
+ return [STUDIO_PENDING_MODULE_LIFECYCLE_EVIDENCE, STUDIO_PENDING_MODULE_LIFECYCLE_FILE];
137
+ }
138
+ /*** Detect a missing pending file without depending on a Node-specific error assertion. */
139
+ function isMissingFileError(error) {
140
+ return isRecord(error) && error.code === 'ENOENT';
141
+ }
142
+ /*** Compare serialized identifiers without locale-dependent ordering. */
143
+ function compareText(left, right) {
144
+ if (left < right)
145
+ return -1;
146
+ return left > right ? 1 : 0;
147
+ }
148
+ //# 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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"}
@@ -0,0 +1,4 @@
1
+ import type { ApmStatusExtensionEvidencePort } from '@ankhorage/apm/types';
2
+ /*** Compose Studio pending-lifecycle evidence with any existing package-owner status provider. */
3
+ export declare function createStudioProjectUpdateExtensionEvidencePort(base?: ApmStatusExtensionEvidencePort): ApmStatusExtensionEvidencePort;
4
+ //# sourceMappingURL=createStudioProjectUpdateExtensionEvidencePort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createStudioProjectUpdateExtensionEvidencePort.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAIjG,kGAAkG;AAClG,wBAAgB,8CAA8C,CAC5D,IAAI,CAAC,EAAE,8BAA8B,GACpC,8BAA8B,CAUhC"}
@@ -0,0 +1,29 @@
1
+ import { inspectPendingModuleLifecycleEvidenceAsync } from '../adapters/outbound/inspectPendingModuleLifecycleEvidenceAsync';
2
+ /*** Compose Studio pending-lifecycle evidence with any existing package-owner status provider. */
3
+ export function createStudioProjectUpdateExtensionEvidencePort(base) {
4
+ return {
5
+ inspectExtensionEvidenceAsync: async (input) => {
6
+ const [baseEvidence, pendingEvidence] = await Promise.all([
7
+ readBaseEvidenceAsync(base, input),
8
+ inspectPendingModuleLifecycleEvidenceAsync(input.rootPath),
9
+ ]);
10
+ return mergeExtensionEvidence(baseEvidence, pendingEvidence);
11
+ },
12
+ };
13
+ }
14
+ /*** Read optional existing owner evidence without treating an absent provider as incomplete. */
15
+ async function readBaseEvidenceAsync(base, input) {
16
+ return base === undefined
17
+ ? { state: 'unavailable', complete: true, observations: [], diagnostics: [] }
18
+ : base.inspectExtensionEvidenceAsync(input);
19
+ }
20
+ /*** Merge independent owner evidence without replacing an already composed provider. */
21
+ function mergeExtensionEvidence(base, pending) {
22
+ return {
23
+ state: base.state === 'available' || pending.state === 'available' ? 'available' : 'unavailable',
24
+ complete: base.complete && pending.complete,
25
+ observations: [...base.observations, ...pending.observations],
26
+ diagnostics: [...base.diagnostics, ...pending.diagnostics],
27
+ };
28
+ }
29
+ //# sourceMappingURL=createStudioProjectUpdateExtensionEvidencePort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createStudioProjectUpdateExtensionEvidencePort.js","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateExtensionEvidencePort.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0CAA0C,EAAE,MAAM,iEAAiE,CAAC;AAE7H,kGAAkG;AAClG,MAAM,UAAU,8CAA8C,CAC5D,IAAqC;IAErC,OAAO;QACL,6BAA6B,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACxD,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC;gBAClC,0CAA0C,CAAC,KAAK,CAAC,QAAQ,CAAC;aAC3D,CAAC,CAAC;YACH,OAAO,sBAAsB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAC/D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,KAAK,UAAU,qBAAqB,CAClC,IAAgD,EAChD,KAAqF;IAErF,OAAO,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QAC7E,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,wFAAwF;AACxF,SAAS,sBAAsB,CAC7B,IAA0B,EAC1B,OAA6B;IAE7B,OAAO;QACL,KAAK,EACH,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;QAC3F,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;QAC3C,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;QAC7D,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;KAC3D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ApmPlanProtocolPort } from '@ankhorage/apm/types';
2
+ /*** Extend package-owner planning with explicit pending Studio module-lifecycle blockers. */
3
+ export declare function createStudioProjectUpdateProtocolPort(base?: ApmPlanProtocolPort): ApmPlanProtocolPort;
4
+ //# sourceMappingURL=createStudioProjectUpdateProtocolPort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createStudioProjectUpdateProtocolPort.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateProtocolPort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,mBAAmB,EAEpB,MAAM,sBAAsB,CAAC;AAO9B,6FAA6F;AAC7F,wBAAgB,qCAAqC,CACnD,IAAI,CAAC,EAAE,mBAAmB,GACzB,mBAAmB,CA0BrB"}
@@ -0,0 +1,67 @@
1
+ import { STUDIO_PENDING_MODULE_LIFECYCLE_EVIDENCE, STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID, } from '../constants';
2
+ /*** Extend package-owner planning with explicit pending Studio module-lifecycle blockers. */
3
+ export function createStudioProjectUpdateProtocolPort(base) {
4
+ return {
5
+ planProtocolAsync: async (input) => {
6
+ const baseResult = await readBaseProtocolResultAsync(base, input);
7
+ const pending = input.status.extensions.observations.find(isPendingModuleLifecycleObservation);
8
+ const unhandled = base === undefined
9
+ ? input.status.extensions.observations.filter((observation) => !isPendingModuleLifecycleObservation(observation) &&
10
+ requiresProtocolPlanning(observation, input.policy.repairProjections))
11
+ : [];
12
+ const additionalBlockers = [
13
+ ...(pending === undefined ? [] : [pendingLifecycleBlocker(pending)]),
14
+ ...(unhandled.length === 0 ? [] : [protocolUnavailableBlocker(unhandled)]),
15
+ ];
16
+ return {
17
+ ...baseResult,
18
+ complete: baseResult.complete && additionalBlockers.length === 0,
19
+ blockers: [...baseResult.blockers, ...additionalBlockers],
20
+ };
21
+ },
22
+ };
23
+ }
24
+ const EMPTY_PROTOCOL_RESULT = {
25
+ complete: true,
26
+ requiredSelections: [],
27
+ files: [],
28
+ artifacts: [],
29
+ steps: [],
30
+ effects: [],
31
+ findings: [],
32
+ blockers: [],
33
+ diagnostics: [],
34
+ };
35
+ /*** Delegate existing package-owner planning when present instead of replacing it. */
36
+ async function readBaseProtocolResultAsync(base, input) {
37
+ return base === undefined ? EMPTY_PROTOCOL_RESULT : base.planProtocolAsync(input);
38
+ }
39
+ /*** Identify the Studio-owned pending module lifecycle observation by stable evidence. */
40
+ function isPendingModuleLifecycleObservation(observation) {
41
+ return observation.evidence.includes(STUDIO_PENDING_MODULE_LIFECYCLE_EVIDENCE);
42
+ }
43
+ /*** Mirror APM's owner-planning requirement for evidence not handled by Studio's local blocker. */
44
+ function requiresProtocolPlanning(observation, repairProjections) {
45
+ return (observation.migration === 'pending' || (repairProjections && observation.projection === 'stale'));
46
+ }
47
+ /*** Block apply until queued removals have a reviewed owner execution boundary. */
48
+ function pendingLifecycleBlocker(observation) {
49
+ return {
50
+ code: 'protocol.studio-pending-module-lifecycle',
51
+ scope: { kind: 'projection', id: STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID },
52
+ evidence: observation.evidence,
53
+ reason: 'Studio module removals are queued, but no reviewed APM owner execution step exists for their Orchestrator lifecycle effects yet.',
54
+ nextAction: 'Review or finalize the pending module lifecycle through its explicit owner flow before applying the project update plan.',
55
+ };
56
+ }
57
+ /*** Preserve APM's fail-closed behavior when another owner observation lacks a planner. */
58
+ function protocolUnavailableBlocker(observations) {
59
+ return {
60
+ code: 'plan.protocol-unavailable',
61
+ scope: { kind: 'project' },
62
+ evidence: observations.flatMap((observation) => observation.evidence),
63
+ reason: 'Package-owned migration or projection work is pending without a composed planner.',
64
+ nextAction: 'Compose the required trusted owner planner before applying project updates.',
65
+ };
66
+ }
67
+ //# sourceMappingURL=createStudioProjectUpdateProtocolPort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createStudioProjectUpdateProtocolPort.js","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateProtocolPort.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ProjectUpdateServiceOptions } from '../../../types/project-updates';
2
+ import { ProjectUpdateService } from '../application/ProjectUpdateService';
3
+ /*** Compose Studio-owned status and planning evidence around the released APM lifecycle service. */
4
+ export declare function createStudioProjectUpdateService(options?: ProjectUpdateServiceOptions): ProjectUpdateService;
5
+ //# sourceMappingURL=createStudioProjectUpdateService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createStudioProjectUpdateService.d.ts","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAI3E,oGAAoG;AACpG,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAMtB"}
@@ -0,0 +1,12 @@
1
+ import { ProjectUpdateService } from '../application/ProjectUpdateService';
2
+ import { createStudioProjectUpdateExtensionEvidencePort } from './createStudioProjectUpdateExtensionEvidencePort';
3
+ import { createStudioProjectUpdateProtocolPort } from './createStudioProjectUpdateProtocolPort';
4
+ /*** Compose Studio-owned status and planning evidence around the released APM lifecycle service. */
5
+ export function createStudioProjectUpdateService(options = {}) {
6
+ return new ProjectUpdateService({
7
+ ...options,
8
+ extensions: createStudioProjectUpdateExtensionEvidencePort(options.extensions),
9
+ protocol: createStudioProjectUpdateProtocolPort(options.protocol),
10
+ });
11
+ }
12
+ //# sourceMappingURL=createStudioProjectUpdateService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createStudioProjectUpdateService.js","sourceRoot":"","sources":["../../../../src/features/project-updates/composition/createStudioProjectUpdateService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,8CAA8C,EAAE,MAAM,kDAAkD,CAAC;AAClH,OAAO,EAAE,qCAAqC,EAAE,MAAM,yCAAyC,CAAC;AAEhG,oGAAoG;AACpG,MAAM,UAAU,gCAAgC,CAC9C,UAAuC,EAAE;IAEzC,OAAO,IAAI,oBAAoB,CAAC;QAC9B,GAAG,OAAO;QACV,UAAU,EAAE,8CAA8C,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9E,QAAQ,EAAE,qCAAqC,CAAC,OAAO,CAAC,QAAQ,CAAC;KAClE,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const STUDIO_PENDING_MODULE_LIFECYCLE_FILE = ".ankh/pending.json";
2
+ export declare const STUDIO_PENDING_MODULE_LIFECYCLE_EVIDENCE = "studio:pending-module-lifecycle";
3
+ export declare const STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID = "studio-module-lifecycle";
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/features/project-updates/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,uBAAuB,CAAC;AACzE,eAAO,MAAM,wCAAwC,oCAAoC,CAAC;AAC1F,eAAO,MAAM,6CAA6C,4BAA4B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const STUDIO_PENDING_MODULE_LIFECYCLE_FILE = '.ankh/pending.json';
2
+ export const STUDIO_PENDING_MODULE_LIFECYCLE_EVIDENCE = 'studio:pending-module-lifecycle';
3
+ export const STUDIO_PENDING_MODULE_LIFECYCLE_PROJECTION_ID = 'studio-module-lifecycle';
4
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/features/project-updates/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oCAAoC,GAAG,oBAAoB,CAAC;AACzE,MAAM,CAAC,MAAM,wCAAwC,GAAG,iCAAiC,CAAC;AAC1F,MAAM,CAAC,MAAM,6CAA6C,GAAG,yBAAyB,CAAC"}
@@ -1,4 +1,3 @@
1
- import { ProjectUpdateService } from '../features/project-updates/application/ProjectUpdateService';
2
1
  import { ProjectDeployService } from './deploy/ProjectDeployService';
3
2
  import { ModuleManager } from './orchestrator/moduleManager';
4
3
  import { ProjectManager } from './orchestrator/projectManager';
@@ -13,7 +12,7 @@ export declare function createStudioHost(options: CreateStudioHostOptions): {
13
12
  workspaceRoot: string;
14
13
  projectManager: ProjectManager;
15
14
  moduleManager: ModuleManager;
16
- projectUpdateService: ProjectUpdateService;
15
+ projectUpdateService: import(".").ProjectUpdateService;
17
16
  projectDeployService: ProjectDeployService;
18
17
  /*** Close host-owned infrastructure sessions during Studio host shutdown. */
19
18
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"createStudioHost.d.ts","sourceRoot":"","sources":["../../src/host/createStudioHost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8DAA8D,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB;;;;;;IAc7D,6EAA6E;;EAKhF;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"createStudioHost.d.ts","sourceRoot":"","sources":["../../src/host/createStudioHost.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB;;;;;;IAc7D,6EAA6E;;EAKhF;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ProjectUpdateService } from '../features/project-updates/application/ProjectUpdateService';
1
+ import { createStudioProjectUpdateService } from '../features/project-updates/composition/createStudioProjectUpdateService';
2
2
  import { ProjectDeployService } from './deploy/ProjectDeployService';
3
3
  import { stopAllProjectInfraPortForwards } from './orchestrator/infraSession';
4
4
  import { ModuleManager } from './orchestrator/moduleManager';
@@ -10,7 +10,7 @@ import { ProjectManager } from './orchestrator/projectManager';
10
10
  export function createStudioHost(options) {
11
11
  const projectManager = new ProjectManager(options.workspaceRoot);
12
12
  const moduleManager = new ModuleManager(options.workspaceRoot);
13
- const projectUpdateService = new ProjectUpdateService();
13
+ const projectUpdateService = createStudioProjectUpdateService();
14
14
  const projectDeployService = new ProjectDeployService({
15
15
  projectManager,
16
16
  workspaceRoot: options.workspaceRoot,
@@ -1 +1 @@
1
- {"version":3,"file":"createStudioHost.js","sourceRoot":"","sources":["../../src/host/createStudioHost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8DAA8D,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAM/D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgC;IAC/D,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;IACxD,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC;QACpD,cAAc;QACd,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IACH,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,cAAc;QACd,aAAa;QACb,oBAAoB;QACpB,oBAAoB;QACpB,6EAA6E;QAC7E,KAAK,CAAC,KAAK;YACT,MAAM,+BAA+B,EAAE,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"createStudioHost.js","sourceRoot":"","sources":["../../src/host/createStudioHost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,0EAA0E,CAAC;AAC5H,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAM/D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgC;IAC/D,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,oBAAoB,GAAG,gCAAgC,EAAE,CAAC;IAChE,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC;QACpD,cAAc;QACd,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IACH,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,cAAc;QACd,aAAa;QACb,oBAAoB;QACpB,oBAAoB;QACpB,6EAA6E;QAC7E,KAAK,CAAC,KAAK;YACT,MAAM,+BAA+B,EAAE,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/studio",
3
- "version": "2.6.2",
3
+ "version": "2.6.3",
4
4
  "description": "Studio authoring package for Ankhorage apps",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ankhorage/studio#readme",