@ankhorage/studio 0.0.21 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +1 -2
  2. package/dist/cli/index.d.ts +4 -4
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +81 -66
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/hooks/useProjects.js +1 -1
  7. package/dist/hooks/useProjects.js.map +1 -1
  8. package/dist/host/createStudioHost.d.ts +13 -0
  9. package/dist/host/createStudioHost.d.ts.map +1 -0
  10. package/dist/host/createStudioHost.js +16 -0
  11. package/dist/host/createStudioHost.js.map +1 -0
  12. package/dist/host/http/security.d.ts +2 -0
  13. package/dist/host/http/security.d.ts.map +1 -0
  14. package/dist/host/http/security.js +55 -0
  15. package/dist/host/http/security.js.map +1 -0
  16. package/dist/host/http/server.d.ts +16 -0
  17. package/dist/host/http/server.d.ts.map +1 -0
  18. package/dist/host/http/server.js +549 -0
  19. package/dist/host/http/server.js.map +1 -0
  20. package/dist/host/layout/auth/resolveAuthLayoutPlan.d.ts +38 -0
  21. package/dist/host/layout/auth/resolveAuthLayoutPlan.d.ts.map +1 -0
  22. package/dist/host/layout/auth/resolveAuthLayoutPlan.js +262 -0
  23. package/dist/host/layout/auth/resolveAuthLayoutPlan.js.map +1 -0
  24. package/dist/host/layout/layoutGenerator.d.ts +19 -0
  25. package/dist/host/layout/layoutGenerator.d.ts.map +1 -0
  26. package/dist/host/layout/layoutGenerator.js +418 -0
  27. package/dist/host/layout/layoutGenerator.js.map +1 -0
  28. package/dist/host/layout/templates/auth/adapter.d.ts +6 -0
  29. package/dist/host/layout/templates/auth/adapter.d.ts.map +1 -0
  30. package/dist/host/layout/templates/auth/adapter.js +94 -0
  31. package/dist/host/layout/templates/auth/adapter.js.map +1 -0
  32. package/dist/host/layout/templates/auth/screen.d.ts +12 -0
  33. package/dist/host/layout/templates/auth/screen.d.ts.map +1 -0
  34. package/dist/host/layout/templates/auth/screen.js +648 -0
  35. package/dist/host/layout/templates/auth/screen.js.map +1 -0
  36. package/dist/host/layout/templates/auth/session.d.ts +2 -0
  37. package/dist/host/layout/templates/auth/session.d.ts.map +1 -0
  38. package/dist/host/layout/templates/auth/session.js +326 -0
  39. package/dist/host/layout/templates/auth/session.js.map +1 -0
  40. package/dist/host/layout/templates/auth/signOut.d.ts +2 -0
  41. package/dist/host/layout/templates/auth/signOut.d.ts.map +1 -0
  42. package/dist/host/layout/templates/auth/signOut.js +43 -0
  43. package/dist/host/layout/templates/auth/signOut.js.map +1 -0
  44. package/dist/host/layout/templates/index.d.ts +11 -0
  45. package/dist/host/layout/templates/index.d.ts.map +1 -0
  46. package/dist/host/layout/templates/index.js +10 -0
  47. package/dist/host/layout/templates/index.js.map +1 -0
  48. package/dist/host/layout/templates/navigation.d.ts +16 -0
  49. package/dist/host/layout/templates/navigation.d.ts.map +1 -0
  50. package/dist/host/layout/templates/navigation.js +332 -0
  51. package/dist/host/layout/templates/navigation.js.map +1 -0
  52. package/dist/host/layout/templates/nestedLayout.d.ts +7 -0
  53. package/dist/host/layout/templates/nestedLayout.d.ts.map +1 -0
  54. package/dist/host/layout/templates/nestedLayout.js +56 -0
  55. package/dist/host/layout/templates/nestedLayout.js.map +1 -0
  56. package/dist/host/layout/templates/redirect.d.ts +2 -0
  57. package/dist/host/layout/templates/redirect.d.ts.map +1 -0
  58. package/dist/host/layout/templates/redirect.js +10 -0
  59. package/dist/host/layout/templates/redirect.js.map +1 -0
  60. package/dist/host/layout/templates/rootLayout.d.ts +28 -0
  61. package/dist/host/layout/templates/rootLayout.d.ts.map +1 -0
  62. package/dist/host/layout/templates/rootLayout.js +507 -0
  63. package/dist/host/layout/templates/rootLayout.js.map +1 -0
  64. package/dist/host/layout/templates/screen.d.ts +6 -0
  65. package/dist/host/layout/templates/screen.d.ts.map +1 -0
  66. package/dist/host/layout/templates/screen.js +94 -0
  67. package/dist/host/layout/templates/screen.js.map +1 -0
  68. package/dist/host/layout/templates/utils/routes.d.ts +3 -0
  69. package/dist/host/layout/templates/utils/routes.d.ts.map +1 -0
  70. package/dist/host/layout/templates/utils/routes.js +15 -0
  71. package/dist/host/layout/templates/utils/routes.js.map +1 -0
  72. package/dist/host/layout/templates/utils/strings.d.ts +3 -0
  73. package/dist/host/layout/templates/utils/strings.d.ts.map +1 -0
  74. package/dist/host/layout/templates/utils/strings.js +7 -0
  75. package/dist/host/layout/templates/utils/strings.js.map +1 -0
  76. package/dist/host/layout/utils/escapeStringLiteral.d.ts +2 -0
  77. package/dist/host/layout/utils/escapeStringLiteral.d.ts.map +1 -0
  78. package/dist/host/layout/utils/escapeStringLiteral.js +8 -0
  79. package/dist/host/layout/utils/escapeStringLiteral.js.map +1 -0
  80. package/dist/host/manifestSystem/auth/index.d.ts +2 -0
  81. package/dist/host/manifestSystem/auth/index.d.ts.map +1 -0
  82. package/dist/host/manifestSystem/auth/index.js +2 -0
  83. package/dist/host/manifestSystem/auth/index.js.map +1 -0
  84. package/dist/host/manifestSystem/auth/shared/global.auth.system.tpl.d.ts +4 -0
  85. package/dist/host/manifestSystem/auth/shared/global.auth.system.tpl.d.ts.map +1 -0
  86. package/dist/host/manifestSystem/auth/shared/global.auth.system.tpl.js +7 -0
  87. package/dist/host/manifestSystem/auth/shared/global.auth.system.tpl.js.map +1 -0
  88. package/dist/host/manifestSystem/auth/shared/index.d.ts +3 -0
  89. package/dist/host/manifestSystem/auth/shared/index.d.ts.map +1 -0
  90. package/dist/host/manifestSystem/auth/shared/index.js +8 -0
  91. package/dist/host/manifestSystem/auth/shared/index.js.map +1 -0
  92. package/dist/host/manifestSystem/index.d.ts +5 -0
  93. package/dist/host/manifestSystem/index.d.ts.map +1 -0
  94. package/dist/host/manifestSystem/index.js +23 -0
  95. package/dist/host/manifestSystem/index.js.map +1 -0
  96. package/dist/host/manifestSystem/types.d.ts +8 -0
  97. package/dist/host/manifestSystem/types.d.ts.map +1 -0
  98. package/dist/host/manifestSystem/types.js +2 -0
  99. package/dist/host/manifestSystem/types.js.map +1 -0
  100. package/dist/host/modules/catalog.d.ts +40 -0
  101. package/dist/host/modules/catalog.d.ts.map +1 -0
  102. package/dist/host/modules/catalog.js +112 -0
  103. package/dist/host/modules/catalog.js.map +1 -0
  104. package/dist/host/modules/layout.d.ts +7 -0
  105. package/dist/host/modules/layout.d.ts.map +1 -0
  106. package/dist/host/modules/layout.js +2 -0
  107. package/dist/host/modules/layout.js.map +1 -0
  108. package/dist/host/modules/runtime/LocalFsTargetAdapter.d.ts +34 -0
  109. package/dist/host/modules/runtime/LocalFsTargetAdapter.d.ts.map +1 -0
  110. package/dist/host/modules/runtime/LocalFsTargetAdapter.js +85 -0
  111. package/dist/host/modules/runtime/LocalFsTargetAdapter.js.map +1 -0
  112. package/dist/host/orchestrator/generatedAppFiles.d.ts +8 -0
  113. package/dist/host/orchestrator/generatedAppFiles.d.ts.map +1 -0
  114. package/dist/host/orchestrator/generatedAppFiles.js +125 -0
  115. package/dist/host/orchestrator/generatedAppFiles.js.map +1 -0
  116. package/dist/host/orchestrator/generatedRouteCleanup.d.ts +5 -0
  117. package/dist/host/orchestrator/generatedRouteCleanup.d.ts.map +1 -0
  118. package/dist/host/orchestrator/generatedRouteCleanup.js +117 -0
  119. package/dist/host/orchestrator/generatedRouteCleanup.js.map +1 -0
  120. package/dist/host/orchestrator/infraGenerator.d.ts +35 -0
  121. package/dist/host/orchestrator/infraGenerator.d.ts.map +1 -0
  122. package/dist/host/orchestrator/infraGenerator.js +135 -0
  123. package/dist/host/orchestrator/infraGenerator.js.map +1 -0
  124. package/dist/host/orchestrator/infraRuntime.d.ts +38 -0
  125. package/dist/host/orchestrator/infraRuntime.d.ts.map +1 -0
  126. package/dist/host/orchestrator/infraRuntime.js +227 -0
  127. package/dist/host/orchestrator/infraRuntime.js.map +1 -0
  128. package/dist/host/orchestrator/infraValidation.d.ts +3 -0
  129. package/dist/host/orchestrator/infraValidation.d.ts.map +1 -0
  130. package/dist/host/orchestrator/infraValidation.js +59 -0
  131. package/dist/host/orchestrator/infraValidation.js.map +1 -0
  132. package/dist/host/orchestrator/moduleManager.d.ts +86 -0
  133. package/dist/host/orchestrator/moduleManager.d.ts.map +1 -0
  134. package/dist/host/orchestrator/moduleManager.js +312 -0
  135. package/dist/host/orchestrator/moduleManager.js.map +1 -0
  136. package/dist/host/orchestrator/projectDeletion.d.ts +27 -0
  137. package/dist/host/orchestrator/projectDeletion.d.ts.map +1 -0
  138. package/dist/host/orchestrator/projectDeletion.js +242 -0
  139. package/dist/host/orchestrator/projectDeletion.js.map +1 -0
  140. package/dist/host/orchestrator/projectManager.d.ts +87 -0
  141. package/dist/host/orchestrator/projectManager.d.ts.map +1 -0
  142. package/dist/host/orchestrator/projectManager.js +371 -0
  143. package/dist/host/orchestrator/projectManager.js.map +1 -0
  144. package/dist/host/orchestrator/projectPaths.d.ts +4 -0
  145. package/dist/host/orchestrator/projectPaths.d.ts.map +1 -0
  146. package/dist/host/orchestrator/projectPaths.js +25 -0
  147. package/dist/host/orchestrator/projectPaths.js.map +1 -0
  148. package/dist/host/orchestrator/projectStore.d.ts +24 -0
  149. package/dist/host/orchestrator/projectStore.d.ts.map +1 -0
  150. package/dist/host/orchestrator/projectStore.js +155 -0
  151. package/dist/host/orchestrator/projectStore.js.map +1 -0
  152. package/dist/host/orchestrator/resolveMutations.d.ts +3 -0
  153. package/dist/host/orchestrator/resolveMutations.d.ts.map +1 -0
  154. package/dist/host/orchestrator/resolveMutations.js +12 -0
  155. package/dist/host/orchestrator/resolveMutations.js.map +1 -0
  156. package/dist/host/orchestrator/scaffolder.d.ts +33 -0
  157. package/dist/host/orchestrator/scaffolder.d.ts.map +1 -0
  158. package/dist/host/orchestrator/scaffolder.js +246 -0
  159. package/dist/host/orchestrator/scaffolder.js.map +1 -0
  160. package/dist/host/orchestrator/templates.d.ts +83 -0
  161. package/dist/host/orchestrator/templates.d.ts.map +1 -0
  162. package/dist/host/orchestrator/templates.js +355 -0
  163. package/dist/host/orchestrator/templates.js.map +1 -0
  164. package/dist/host/orchestrator/workspaceRuntime.d.ts +2 -0
  165. package/dist/host/orchestrator/workspaceRuntime.d.ts.map +1 -0
  166. package/dist/host/orchestrator/workspaceRuntime.js +82 -0
  167. package/dist/host/orchestrator/workspaceRuntime.js.map +1 -0
  168. package/dist/host/templateRegistry/index.d.ts +16 -0
  169. package/dist/host/templateRegistry/index.d.ts.map +1 -0
  170. package/dist/host/templateRegistry/index.js +74 -0
  171. package/dist/host/templateRegistry/index.js.map +1 -0
  172. package/dist/host/utils/requirementsInference.d.ts +4 -0
  173. package/dist/host/utils/requirementsInference.d.ts.map +1 -0
  174. package/dist/host/utils/requirementsInference.js +49 -0
  175. package/dist/host/utils/requirementsInference.js.map +1 -0
  176. package/dist/host/utils/trimOutput.d.ts +7 -0
  177. package/dist/host/utils/trimOutput.d.ts.map +1 -0
  178. package/dist/host/utils/trimOutput.js +32 -0
  179. package/dist/host/utils/trimOutput.js.map +1 -0
  180. package/dist/host/utils/workspaceRoot.d.ts +2 -0
  181. package/dist/host/utils/workspaceRoot.d.ts.map +1 -0
  182. package/dist/host/utils/workspaceRoot.js +33 -0
  183. package/dist/host/utils/workspaceRoot.js.map +1 -0
  184. package/dist/host/zoraExtensions/index.d.ts +11 -0
  185. package/dist/host/zoraExtensions/index.d.ts.map +1 -0
  186. package/dist/host/zoraExtensions/index.js +54 -0
  187. package/dist/host/zoraExtensions/index.js.map +1 -0
  188. package/package.json +16 -3
@@ -0,0 +1,59 @@
1
+ import { AUTH_PROVIDERS, AUTH_SCOPES, AUTHZ_ENGINES, DATABASE_PROVIDERS, DEPLOYMENT_TARGETS, } from '@ankhorage/contracts';
2
+ export function validateInfraSupport(manifest) {
3
+ const warnings = [];
4
+ const deploymentTarget = manifest.deployment?.target;
5
+ if (deploymentTarget && !isSupported(deploymentTarget, DEPLOYMENT_TARGETS)) {
6
+ warnings.push(warningForUnsupportedValue({
7
+ path: 'infra.deployment.target',
8
+ value: deploymentTarget,
9
+ supported: DEPLOYMENT_TARGETS,
10
+ }));
11
+ }
12
+ const databaseProvider = manifest.database?.provider;
13
+ if (databaseProvider && !isSupported(databaseProvider, DATABASE_PROVIDERS)) {
14
+ warnings.push(warningForUnsupportedValue({
15
+ path: 'infra.database.provider',
16
+ value: databaseProvider,
17
+ supported: DATABASE_PROVIDERS,
18
+ }));
19
+ }
20
+ const authProvider = manifest.auth?.provider;
21
+ if (authProvider && !isSupported(authProvider, AUTH_PROVIDERS)) {
22
+ warnings.push(warningForUnsupportedValue({
23
+ path: 'infra.auth.provider',
24
+ value: authProvider,
25
+ supported: AUTH_PROVIDERS,
26
+ }));
27
+ }
28
+ const authScope = manifest.auth?.scope;
29
+ if (authScope && !isSupported(authScope, AUTH_SCOPES)) {
30
+ warnings.push(warningForUnsupportedValue({
31
+ path: 'infra.auth.scope',
32
+ value: authScope,
33
+ supported: AUTH_SCOPES,
34
+ }));
35
+ }
36
+ const authzEngine = manifest.auth?.authorization.engine;
37
+ if (authzEngine && !isSupported(authzEngine, AUTHZ_ENGINES)) {
38
+ warnings.push(warningForUnsupportedValue({
39
+ path: 'infra.auth.authorization.engine',
40
+ value: authzEngine,
41
+ supported: AUTHZ_ENGINES,
42
+ }));
43
+ }
44
+ return warnings;
45
+ }
46
+ function warningForUnsupportedValue(args) {
47
+ const { path, value, supported } = args;
48
+ return `${path} "${value}" is not currently supported by implemented generators. Supported values: ${formatSupportedValues(supported)}.`;
49
+ }
50
+ function isSupported(value, supported) {
51
+ return supported.includes(value);
52
+ }
53
+ function formatSupportedValues(values) {
54
+ if (values.length === 0) {
55
+ return '(none)';
56
+ }
57
+ return values.join(', ');
58
+ }
59
+ //# sourceMappingURL=infraValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infraValidation.js","sourceRoot":"","sources":["../../../src/host/orchestrator/infraValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,UAAU,oBAAoB,CAAC,QAAuB;IAC1D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IACrD,IAAI,gBAAgB,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC3E,QAAQ,CAAC,IAAI,CACX,0BAA0B,CAAC;YACzB,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACrD,IAAI,gBAAgB,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC3E,QAAQ,CAAC,IAAI,CACX,0BAA0B,CAAC;YACzB,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC7C,IAAI,YAAY,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;QAC/D,QAAQ,CAAC,IAAI,CACX,0BAA0B,CAAC;YACzB,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,cAAc;SAC1B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACvC,IAAI,SAAS,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;QACtD,QAAQ,CAAC,IAAI,CACX,0BAA0B,CAAC;YACzB,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,WAAW;SACvB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC;IACxD,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;QAC5D,QAAQ,CAAC,IAAI,CACX,0BAA0B,CAAC;YACzB,IAAI,EAAE,iCAAiC;YACvC,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,aAAa;SACzB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,0BAA0B,CAAC,IAInC;IACC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACxC,OAAO,GAAG,IAAI,KAAK,KAAK,6EAA6E,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC;AAC3I,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,SAA4B;IAC9D,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAyB;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { type HostManifest } from '../modules/catalog';
2
+ /**
3
+ * ModuleManager remains the host boundary for bridge and CLI routes.
4
+ * Internally it operates only on orchestrator-backed host modules.
5
+ */
6
+ export declare class ModuleManager {
7
+ private readonly appsRoot;
8
+ private readonly projectManager;
9
+ private readonly adapter;
10
+ private readonly orchestratorsByAppRoot;
11
+ constructor(rootPath: string);
12
+ getAvailableModules(): {
13
+ id: string;
14
+ name: string;
15
+ description: string;
16
+ ui: {
17
+ modal?: {
18
+ title: string;
19
+ };
20
+ } | undefined;
21
+ }[];
22
+ proxyGet(moduleId: string, requestPath: string): Promise<unknown>;
23
+ installModule(projectId: string, moduleId: string, config?: unknown): Promise<{
24
+ success: boolean;
25
+ moduleId: string;
26
+ }>;
27
+ uninstallModule(projectId: string, moduleId: string): Promise<{
28
+ success: boolean;
29
+ needsReload: boolean;
30
+ pending: boolean;
31
+ error?: undefined;
32
+ } | {
33
+ success: boolean;
34
+ needsReload: boolean;
35
+ error: string;
36
+ pending?: undefined;
37
+ } | {
38
+ success: boolean;
39
+ needsReload: boolean;
40
+ pending?: undefined;
41
+ error?: undefined;
42
+ }>;
43
+ applyPendingOperations(projectId: string): Promise<{
44
+ success: boolean;
45
+ applied: number;
46
+ }>;
47
+ finalizeUninstalls(projectId: string): Promise<{
48
+ success: boolean;
49
+ applied: number;
50
+ }>;
51
+ generateModuleRegistry(projectId: string): Promise<void>;
52
+ pruneDependencies(_appPath: string): Promise<void>;
53
+ syncProject(args: {
54
+ projectId: string;
55
+ includeStudio?: boolean;
56
+ }): Promise<{
57
+ success: boolean;
58
+ }>;
59
+ rebuildRootLayout(projectId: string): Promise<{
60
+ success: boolean;
61
+ }>;
62
+ updateModuleConfig(projectId: string, moduleId: string, config: unknown): Promise<{
63
+ success: boolean;
64
+ ankhConfig: HostManifest;
65
+ installedModules: string[];
66
+ needsReload: boolean;
67
+ }>;
68
+ private getModule;
69
+ private getModuleOrchestrator;
70
+ private getAppPath;
71
+ private ensureProjectExists;
72
+ private resolveLayoutMutations;
73
+ private readManifest;
74
+ private writeManifest;
75
+ private applyInstalledModuleState;
76
+ private applyUninstalledModuleState;
77
+ private requirePlainObject;
78
+ private validateModuleConfig;
79
+ private removeManagedModuleDir;
80
+ private readPending;
81
+ private writePending;
82
+ private enqueuePending;
83
+ private removePendingOperation;
84
+ private clearPending;
85
+ }
86
+ //# sourceMappingURL=moduleManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleManager.d.ts","sourceRoot":"","sources":["../../../src/host/orchestrator/moduleManager.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,YAAY,EAIlB,MAAM,oBAAoB,CAAC;AAsB5B;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAmC;gBAE9D,QAAQ,EAAE,MAAM;IAM5B,mBAAmB;;;;;;;;;;IASb,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAQ9C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;;;;IA8BnE,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;IAoCnD,sBAAsB,CAAC,SAAS,EAAE,MAAM;;;;IAgCxC,kBAAkB,CAAC,SAAS,EAAE,MAAM;;;;IAIpC,sBAAsB,CAAC,SAAS,EAAE,MAAM;IAWxC,iBAAiB,CAAC,QAAQ,EAAE,MAAM;IAIlC,WAAW,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE;;;IAWhE,iBAAiB,CAAC,SAAS,EAAE,MAAM;;;IAMnC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;;;;;;IAqC7E,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,UAAU;YAIJ,mBAAmB;YAOnB,sBAAsB;YAKtB,YAAY;YASZ,aAAa;IAI3B,OAAO,CAAC,yBAAyB;IA0BjC,OAAO,CAAC,2BAA2B;IAiBnC,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;YAad,sBAAsB;YAQtB,WAAW;YAQX,YAAY;YAMZ,cAAc;YASd,sBAAsB;YAetB,YAAY;CAM3B"}
@@ -0,0 +1,312 @@
1
+ import { createOrchestrator } from '@ankhorage/orchestrator';
2
+ import path from 'path';
3
+ import { listHostModules, MODULE_CATALOG, } from '../modules/catalog';
4
+ import { LocalFsTargetAdapter } from '../modules/runtime/LocalFsTargetAdapter';
5
+ import { ProjectManager } from './projectManager';
6
+ import { resolveModuleLayoutMutations } from './resolveMutations';
7
+ const PENDING_OPS_FILE = '.ankh/pending.json';
8
+ const MANAGED_MODULE_DIRS = {
9
+ 'expo-localization': 'src/modules/localization',
10
+ 'expo-google-fonts': 'src/modules/google-fonts',
11
+ };
12
+ /**
13
+ * ModuleManager remains the host boundary for bridge and CLI routes.
14
+ * Internally it operates only on orchestrator-backed host modules.
15
+ */
16
+ export class ModuleManager {
17
+ appsRoot;
18
+ projectManager;
19
+ adapter;
20
+ orchestratorsByAppRoot = new Map();
21
+ constructor(rootPath) {
22
+ this.appsRoot = path.join(rootPath, 'apps');
23
+ this.projectManager = new ProjectManager(rootPath);
24
+ this.adapter = new LocalFsTargetAdapter();
25
+ }
26
+ getAvailableModules() {
27
+ return listHostModules().map((module) => ({
28
+ id: module.id,
29
+ name: module.name,
30
+ description: module.description,
31
+ ui: module.ui,
32
+ }));
33
+ }
34
+ async proxyGet(moduleId, requestPath) {
35
+ const module = this.getModule(moduleId);
36
+ if (!module.proxyGet) {
37
+ throw new Error(`Module '${moduleId}' does not support proxyGet.`);
38
+ }
39
+ return await module.proxyGet(requestPath);
40
+ }
41
+ async installModule(projectId, moduleId, config) {
42
+ const appPath = this.getAppPath(projectId);
43
+ await this.ensureProjectExists(projectId);
44
+ const manifest = await this.readManifest(appPath);
45
+ const module = this.getModule(moduleId);
46
+ const resolvedConfig = config === undefined
47
+ ? module.readStoredConfig(manifest)
48
+ : this.requirePlainObject(config, moduleId);
49
+ const validatedConfig = this.validateModuleConfig(module, resolvedConfig);
50
+ const orchestrator = this.getModuleOrchestrator(appPath);
51
+ await orchestrator.installModule(moduleId, {
52
+ config: validatedConfig,
53
+ });
54
+ await this.removePendingOperation(appPath, moduleId);
55
+ const nextManifest = this.applyInstalledModuleState(manifest, moduleId, validatedConfig);
56
+ await this.writeManifest(appPath, nextManifest);
57
+ await this.projectManager.updateStudioManifestIfExists(projectId, (draft) => this.applyInstalledModuleState(draft, moduleId, validatedConfig));
58
+ await this.rebuildRootLayout(projectId);
59
+ await this.generateModuleRegistry(projectId);
60
+ return { success: true, moduleId };
61
+ }
62
+ async uninstallModule(projectId, moduleId) {
63
+ const appPath = this.getAppPath(projectId);
64
+ await this.ensureProjectExists(projectId);
65
+ const manifest = await this.readManifest(appPath);
66
+ const pendingData = await this.readPending(appPath);
67
+ const hasPendingUninstall = pendingData.ops.some((op) => op.moduleId === moduleId);
68
+ if (!manifest.infra.plugins.includes(moduleId)) {
69
+ if (hasPendingUninstall) {
70
+ return { success: true, needsReload: true, pending: true };
71
+ }
72
+ return {
73
+ success: false,
74
+ needsReload: false,
75
+ error: `Module '${moduleId}' is not installed.`,
76
+ };
77
+ }
78
+ await this.enqueuePending(appPath, {
79
+ type: 'uninstall',
80
+ moduleId,
81
+ at: new Date().toISOString(),
82
+ });
83
+ const nextManifest = this.applyUninstalledModuleState(manifest, moduleId);
84
+ await this.writeManifest(appPath, nextManifest);
85
+ await this.projectManager.updateStudioManifestIfExists(projectId, (draft) => this.applyUninstalledModuleState(draft, moduleId));
86
+ await this.rebuildRootLayout(projectId);
87
+ await this.generateModuleRegistry(projectId);
88
+ return { success: true, needsReload: true };
89
+ }
90
+ async applyPendingOperations(projectId) {
91
+ const appPath = this.getAppPath(projectId);
92
+ const pendingData = await this.readPending(appPath);
93
+ if (pendingData.ops.length === 0) {
94
+ return { success: true, applied: 0 };
95
+ }
96
+ const orchestrator = this.getModuleOrchestrator(appPath);
97
+ for (const op of pendingData.ops) {
98
+ // Pending ops should be safe to apply repeatedly (e.g. after partial cleanups).
99
+ try {
100
+ await orchestrator.removeModule(op.moduleId);
101
+ }
102
+ catch (error) {
103
+ const message = error instanceof Error ? error.message : String(error);
104
+ // If module is already absent, continue cleanup without failing the whole finalize step.
105
+ if (!message.toLowerCase().includes('not installed')) {
106
+ throw error;
107
+ }
108
+ }
109
+ await this.removeManagedModuleDir(appPath, op.moduleId);
110
+ await this.projectManager.updateStudioManifestIfExists(projectId, (draft) => this.applyUninstalledModuleState(draft, op.moduleId));
111
+ }
112
+ await this.clearPending(appPath);
113
+ await this.rebuildRootLayout(projectId);
114
+ await this.generateModuleRegistry(projectId);
115
+ return { success: true, applied: pendingData.ops.length };
116
+ }
117
+ async finalizeUninstalls(projectId) {
118
+ return this.applyPendingOperations(projectId);
119
+ }
120
+ async generateModuleRegistry(projectId) {
121
+ const appPath = this.getAppPath(projectId);
122
+ const content = `/* generated by @ankhorage/studio */
123
+ export const MODULE_PANEL_LOADERS: Record<string, () => Promise<unknown>> = {};
124
+ `;
125
+ const registryPath = path.join(appPath, 'src/modules/registry.ts');
126
+ await this.adapter.ensureDir(path.dirname(registryPath));
127
+ await this.adapter.writeText(registryPath, content);
128
+ }
129
+ async pruneDependencies(_appPath) {
130
+ // Dependency cleanup is handled by orchestrator.removeModule().
131
+ }
132
+ async syncProject(args) {
133
+ const { projectId, includeStudio = true } = args;
134
+ await this.ensureProjectExists(projectId);
135
+ await this.applyPendingOperations(projectId);
136
+ const mutations = await this.resolveLayoutMutations(projectId);
137
+ const result = await this.projectManager.syncProject({ projectId, mutations, includeStudio });
138
+ await this.generateModuleRegistry(projectId);
139
+ return result;
140
+ }
141
+ async rebuildRootLayout(projectId) {
142
+ await this.ensureProjectExists(projectId);
143
+ const mutations = await this.resolveLayoutMutations(projectId);
144
+ return this.projectManager.rebuildRootLayout({ projectId, mutations });
145
+ }
146
+ async updateModuleConfig(projectId, moduleId, config) {
147
+ const appPath = this.getAppPath(projectId);
148
+ await this.ensureProjectExists(projectId);
149
+ const manifest = await this.readManifest(appPath);
150
+ if (!manifest.infra.plugins.includes(moduleId)) {
151
+ throw new Error(`Module '${moduleId}' is not installed.`);
152
+ }
153
+ const module = this.getModule(moduleId);
154
+ const validatedConfig = this.validateModuleConfig(module, this.requirePlainObject(config, moduleId));
155
+ const orchestrator = this.getModuleOrchestrator(appPath);
156
+ await orchestrator.installModule(moduleId, {
157
+ config: validatedConfig,
158
+ });
159
+ await this.removePendingOperation(appPath, moduleId);
160
+ const nextManifest = this.applyInstalledModuleState(manifest, moduleId, validatedConfig);
161
+ await this.writeManifest(appPath, nextManifest);
162
+ await this.projectManager.updateStudioManifestIfExists(projectId, (draft) => this.applyInstalledModuleState(draft, moduleId, validatedConfig));
163
+ await this.rebuildRootLayout(projectId);
164
+ await this.generateModuleRegistry(projectId);
165
+ return {
166
+ success: true,
167
+ ankhConfig: nextManifest,
168
+ installedModules: [...nextManifest.infra.plugins],
169
+ needsReload: false,
170
+ };
171
+ }
172
+ getModule(moduleId) {
173
+ const module = MODULE_CATALOG[moduleId];
174
+ if (!module) {
175
+ throw new Error(`Module '${moduleId}' not found in catalog.`);
176
+ }
177
+ return module;
178
+ }
179
+ getModuleOrchestrator(appPath) {
180
+ const cached = this.orchestratorsByAppRoot.get(appPath);
181
+ if (cached) {
182
+ return cached;
183
+ }
184
+ const orchestrator = createOrchestrator({
185
+ modules: listHostModules().map((module) => module.definition),
186
+ projectRoot: appPath,
187
+ });
188
+ this.orchestratorsByAppRoot.set(appPath, orchestrator);
189
+ return orchestrator;
190
+ }
191
+ getAppPath(projectId) {
192
+ return path.join(this.appsRoot, projectId);
193
+ }
194
+ async ensureProjectExists(projectId) {
195
+ const appPath = this.getAppPath(projectId);
196
+ if (!(await this.adapter.exists(appPath))) {
197
+ throw new Error(`Project '${projectId}' not found at ${appPath}`);
198
+ }
199
+ }
200
+ async resolveLayoutMutations(projectId) {
201
+ const manifest = await this.readManifest(this.getAppPath(projectId));
202
+ return resolveModuleLayoutMutations(manifest.infra.plugins);
203
+ }
204
+ async readManifest(appPath) {
205
+ const manifestPath = path.join(appPath, 'ankh.config.json');
206
+ const manifest = await this.adapter.readJson(manifestPath);
207
+ if (!manifest) {
208
+ throw new Error(`Manifest not found at ${manifestPath}`);
209
+ }
210
+ return manifest;
211
+ }
212
+ async writeManifest(appPath, manifest) {
213
+ await this.adapter.writeJson(path.join(appPath, 'ankh.config.json'), manifest);
214
+ }
215
+ applyInstalledModuleState(manifest, moduleId, config) {
216
+ const module = this.getModule(moduleId);
217
+ const normalizedConfig = module.normalizeConfig(config);
218
+ const modulesConfig = {
219
+ ...(manifest.infra.modulesConfig ?? {}),
220
+ [moduleId]: normalizedConfig,
221
+ };
222
+ const nextModules = Array.from(new Set([...manifest.infra.plugins, moduleId])).sort((left, right) => left.localeCompare(right));
223
+ const nextManifest = module.applyManifestConfig(manifest, normalizedConfig);
224
+ return {
225
+ ...nextManifest,
226
+ infra: {
227
+ ...nextManifest.infra,
228
+ plugins: nextModules,
229
+ modulesConfig,
230
+ },
231
+ };
232
+ }
233
+ applyUninstalledModuleState(manifest, moduleId) {
234
+ const nextModulesConfig = manifest.infra.modulesConfig
235
+ ? Object.fromEntries(Object.entries(manifest.infra.modulesConfig).filter((entry) => entry[0] !== moduleId))
236
+ : undefined;
237
+ return {
238
+ ...manifest,
239
+ infra: {
240
+ ...manifest.infra,
241
+ plugins: manifest.infra.plugins.filter((id) => id !== moduleId),
242
+ modulesConfig: nextModulesConfig,
243
+ },
244
+ };
245
+ }
246
+ requirePlainObject(config, moduleId) {
247
+ if (!isRecord(config)) {
248
+ throw new Error(`Invalid config for module '${moduleId}': must be a plain object.`);
249
+ }
250
+ return config;
251
+ }
252
+ validateModuleConfig(module, config) {
253
+ try {
254
+ JSON.stringify(config);
255
+ }
256
+ catch {
257
+ throw new Error(`Invalid config for module '${module.id}': must be JSON serializable.`);
258
+ }
259
+ return module.normalizeConfig(config);
260
+ }
261
+ async removeManagedModuleDir(appPath, moduleId) {
262
+ if (!isManagedModuleId(moduleId)) {
263
+ return;
264
+ }
265
+ await this.adapter.remove(path.join(appPath, MANAGED_MODULE_DIRS[moduleId]));
266
+ }
267
+ async readPending(appPath) {
268
+ const fullPath = path.join(appPath, PENDING_OPS_FILE);
269
+ if (!(await this.adapter.exists(fullPath))) {
270
+ return { ops: [] };
271
+ }
272
+ return (await this.adapter.readJson(fullPath)) ?? { ops: [] };
273
+ }
274
+ async writePending(appPath, data) {
275
+ const fullPath = path.join(appPath, PENDING_OPS_FILE);
276
+ await this.adapter.ensureDir(path.dirname(fullPath));
277
+ await this.adapter.writeJson(fullPath, data);
278
+ }
279
+ async enqueuePending(appPath, op) {
280
+ const data = await this.readPending(appPath);
281
+ if (data.ops.some((pending) => pending.moduleId === op.moduleId)) {
282
+ return;
283
+ }
284
+ data.ops.push(op);
285
+ await this.writePending(appPath, data);
286
+ }
287
+ async removePendingOperation(appPath, moduleId) {
288
+ const data = await this.readPending(appPath);
289
+ const next = data.ops.filter((op) => op.moduleId !== moduleId);
290
+ if (next.length === data.ops.length) {
291
+ return;
292
+ }
293
+ if (next.length === 0) {
294
+ await this.clearPending(appPath);
295
+ return;
296
+ }
297
+ await this.writePending(appPath, { ops: next });
298
+ }
299
+ async clearPending(appPath) {
300
+ const fullPath = path.join(appPath, PENDING_OPS_FILE);
301
+ if (await this.adapter.exists(fullPath)) {
302
+ await this.adapter.remove(fullPath);
303
+ }
304
+ }
305
+ }
306
+ function isRecord(value) {
307
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
308
+ }
309
+ function isManagedModuleId(moduleId) {
310
+ return Object.prototype.hasOwnProperty.call(MANAGED_MODULE_DIRS, moduleId);
311
+ }
312
+ //# sourceMappingURL=moduleManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleManager.js","sourceRoot":"","sources":["../../../src/host/orchestrator/moduleManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface ProjectSupabaseCleanupResult {
2
+ removedContainers: number;
3
+ warnings: string[];
4
+ }
5
+ export interface ProjectGeneratedAppImageCleanupResult {
6
+ removedImages: number;
7
+ warnings: string[];
8
+ skipped?: {
9
+ reason: string;
10
+ };
11
+ }
12
+ export interface CommandRunner {
13
+ run(command: string, args: string[], timeoutMs: number): Promise<{
14
+ stdout: string;
15
+ stderr: string;
16
+ }>;
17
+ }
18
+ export declare function cleanupProjectGeneratedAppImage(args: {
19
+ projectPath: string;
20
+ target: string;
21
+ runner?: CommandRunner;
22
+ }): Promise<ProjectGeneratedAppImageCleanupResult>;
23
+ export declare function stopProjectSupabaseContainers(args: {
24
+ projectId: string;
25
+ runner?: CommandRunner;
26
+ }): Promise<ProjectSupabaseCleanupResult>;
27
+ //# sourceMappingURL=projectDeletion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectDeletion.d.ts","sourceRoot":"","sources":["../../../src/host/orchestrator/projectDeletion.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,4BAA4B;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,qCAAqC;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CACD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AA0BD,wBAAsB,+BAA+B,CAAC,IAAI,EAAE;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAqDjD;AAED,wBAAsB,6BAA6B,CAAC,IAAI,EAAE;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAqDxC"}