@pulumix/core 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 (66) hide show
  1. package/dist/dev/env-builder.d.ts +9 -0
  2. package/dist/dev/env-builder.d.ts.map +1 -0
  3. package/dist/dev/env-builder.js +67 -0
  4. package/dist/dev/env-builder.js.map +1 -0
  5. package/dist/dev/index.d.ts +20 -0
  6. package/dist/dev/index.d.ts.map +1 -0
  7. package/dist/dev/index.js +272 -0
  8. package/dist/dev/index.js.map +1 -0
  9. package/dist/dev/local-runner.d.ts +13 -0
  10. package/dist/dev/local-runner.d.ts.map +1 -0
  11. package/dist/dev/local-runner.js +100 -0
  12. package/dist/dev/local-runner.js.map +1 -0
  13. package/dist/dev/port-forward.d.ts +10 -0
  14. package/dist/dev/port-forward.d.ts.map +1 -0
  15. package/dist/dev/port-forward.js +146 -0
  16. package/dist/dev/port-forward.js.map +1 -0
  17. package/dist/dev/service-swap.d.ts +27 -0
  18. package/dist/dev/service-swap.d.ts.map +1 -0
  19. package/dist/dev/service-swap.js +272 -0
  20. package/dist/dev/service-swap.js.map +1 -0
  21. package/dist/dev/types.d.ts +60 -0
  22. package/dist/dev/types.d.ts.map +1 -0
  23. package/dist/dev/types.js +28 -0
  24. package/dist/dev/types.js.map +1 -0
  25. package/dist/docker.d.ts +55 -0
  26. package/dist/docker.d.ts.map +1 -0
  27. package/dist/docker.js +331 -0
  28. package/dist/docker.js.map +1 -0
  29. package/dist/index.d.ts +12 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +29 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/orchestrator/events.d.ts +28 -0
  34. package/dist/orchestrator/events.d.ts.map +1 -0
  35. package/dist/orchestrator/events.js +142 -0
  36. package/dist/orchestrator/events.js.map +1 -0
  37. package/dist/orchestrator/index.d.ts +32 -0
  38. package/dist/orchestrator/index.d.ts.map +1 -0
  39. package/dist/orchestrator/index.js +722 -0
  40. package/dist/orchestrator/index.js.map +1 -0
  41. package/dist/types/errors.d.ts +76 -0
  42. package/dist/types/errors.d.ts.map +1 -0
  43. package/dist/types/errors.js +271 -0
  44. package/dist/types/errors.js.map +1 -0
  45. package/dist/types/events.d.ts +100 -0
  46. package/dist/types/events.d.ts.map +1 -0
  47. package/dist/types/events.js +40 -0
  48. package/dist/types/events.js.map +1 -0
  49. package/dist/types/manifest.d.ts +121 -0
  50. package/dist/types/manifest.d.ts.map +1 -0
  51. package/dist/types/manifest.js +3 -0
  52. package/dist/types/manifest.js.map +1 -0
  53. package/dist/types/service.d.ts +35 -0
  54. package/dist/types/service.d.ts.map +1 -0
  55. package/dist/types/service.js +3 -0
  56. package/dist/types/service.js.map +1 -0
  57. package/dist/utils/kubernetes.d.ts +10 -0
  58. package/dist/utils/kubernetes.d.ts.map +1 -0
  59. package/dist/utils/kubernetes.js +38 -0
  60. package/dist/utils/kubernetes.js.map +1 -0
  61. package/dist/validation/manifest.d.ts +5 -0
  62. package/dist/validation/manifest.d.ts.map +1 -0
  63. package/dist/validation/manifest.js +114 -0
  64. package/dist/validation/manifest.js.map +1 -0
  65. package/package.json +49 -0
  66. package/src/schemas/service-manifest.schema.json +267 -0
package/dist/docker.js ADDED
@@ -0,0 +1,331 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getImageDigestFromRegistry = exports.imageExistsInRegistry = exports.hashBuildContext = exports.isDockerAvailable = exports.buildAndPushImage = exports.pushImage = exports.buildImage = exports.getDockerClient = void 0;
40
+ const dockerode_1 = __importDefault(require("dockerode"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const crypto = __importStar(require("crypto"));
44
+ const tar = __importStar(require("tar-fs"));
45
+ const Either_1 = require("purify-ts/Either");
46
+ const errors_1 = require("./types/errors");
47
+ let dockerClient = null;
48
+ const getDockerClient = () => {
49
+ if (!dockerClient) {
50
+ dockerClient = new dockerode_1.default();
51
+ }
52
+ return dockerClient;
53
+ };
54
+ exports.getDockerClient = getDockerClient;
55
+ const buildImage = async (options) => {
56
+ const docker = (0, exports.getDockerClient)();
57
+ const { contextPath, tag, dockerfile, buildArgs, onProgress } = options;
58
+ if (!fs.existsSync(contextPath)) {
59
+ return (0, Either_1.Left)((0, errors_1.createBuildError)('DockerBuildFailed', `Build context not found: ${contextPath}`, tag));
60
+ }
61
+ const dockerfilePath = dockerfile || 'Dockerfile';
62
+ const normalizedContext = path.resolve(contextPath);
63
+ const fullDockerfilePath = path.resolve(path.join(normalizedContext, dockerfilePath));
64
+ if (!fullDockerfilePath.startsWith(normalizedContext)) {
65
+ return (0, Either_1.Left)((0, errors_1.createBuildError)('DockerBuildFailed', `Dockerfile path escapes build context: ${dockerfilePath}`, tag));
66
+ }
67
+ if (!fs.existsSync(fullDockerfilePath)) {
68
+ return (0, Either_1.Left)((0, errors_1.createBuildError)('DockerBuildFailed', `Dockerfile not found: ${fullDockerfilePath}`, tag));
69
+ }
70
+ try {
71
+ const tarStream = tar.pack(contextPath);
72
+ const buildOptions = {
73
+ t: tag,
74
+ dockerfile: dockerfilePath,
75
+ buildargs: buildArgs,
76
+ };
77
+ const stream = await docker.buildImage(tarStream, buildOptions);
78
+ let imageId;
79
+ await new Promise((resolve, reject) => {
80
+ docker.modem.followProgress(stream, (err, output) => {
81
+ if (err) {
82
+ reject(err);
83
+ return;
84
+ }
85
+ const errorOutput = output.find(o => o.error);
86
+ if (errorOutput) {
87
+ reject(new Error(errorOutput.error));
88
+ return;
89
+ }
90
+ const auxOutput = output.find(o => o.aux?.ID);
91
+ if (auxOutput?.aux?.ID) {
92
+ imageId = auxOutput.aux.ID;
93
+ }
94
+ resolve();
95
+ }, (event) => {
96
+ if (event.error) {
97
+ return;
98
+ }
99
+ if (event.aux?.ID) {
100
+ imageId = event.aux.ID;
101
+ }
102
+ if (event.stream && onProgress) {
103
+ const line = event.stream.trim();
104
+ if (!line)
105
+ return;
106
+ const stepMatch = line.match(/^Step (\d+)\/(\d+)\s*:\s*(.*)/);
107
+ if (stepMatch) {
108
+ onProgress({
109
+ step: `Step ${stepMatch[1]}/${stepMatch[2]}`,
110
+ current: parseInt(stepMatch[1] || '0'),
111
+ total: parseInt(stepMatch[2] || '1'),
112
+ message: stepMatch[3] || line,
113
+ stream: 'stdout'
114
+ });
115
+ }
116
+ else if (line.includes('Successfully built') || line.includes('Successfully tagged')) {
117
+ onProgress({
118
+ message: line,
119
+ stream: 'stdout'
120
+ });
121
+ }
122
+ else if (line.startsWith('---> ') || line.includes('Removing intermediate')) {
123
+ }
124
+ else {
125
+ onProgress({
126
+ message: line,
127
+ stream: 'stdout'
128
+ });
129
+ }
130
+ }
131
+ });
132
+ });
133
+ return (0, Either_1.Right)({ tag, imageId });
134
+ }
135
+ catch (err) {
136
+ const message = err instanceof Error ? err.message : String(err);
137
+ return (0, Either_1.Left)((0, errors_1.createBuildError)('DockerBuildFailed', message, tag));
138
+ }
139
+ };
140
+ exports.buildImage = buildImage;
141
+ const pushImage = async (options) => {
142
+ const docker = (0, exports.getDockerClient)();
143
+ const { tag, auth, onProgress } = options;
144
+ try {
145
+ const image = docker.getImage(tag);
146
+ const pushOptions = {};
147
+ if (auth) {
148
+ pushOptions.authconfig = auth;
149
+ }
150
+ const stream = await image.push(pushOptions);
151
+ let digest;
152
+ await new Promise((resolve, reject) => {
153
+ docker.modem.followProgress(stream, (err, output) => {
154
+ if (err) {
155
+ reject(err);
156
+ return;
157
+ }
158
+ const errorOutput = output.find(o => o.error);
159
+ if (errorOutput) {
160
+ reject(new Error(errorOutput.error));
161
+ return;
162
+ }
163
+ const auxOutput = output.find(o => o.aux?.Digest);
164
+ if (auxOutput?.aux?.Digest) {
165
+ digest = auxOutput.aux.Digest;
166
+ }
167
+ resolve();
168
+ }, (event) => {
169
+ if (event.error) {
170
+ return;
171
+ }
172
+ if (event.aux?.Digest) {
173
+ digest = event.aux.Digest;
174
+ }
175
+ if (onProgress && event.status) {
176
+ const progressPercent = event.progressDetail?.current && event.progressDetail?.total
177
+ ? Math.round((event.progressDetail.current / event.progressDetail.total) * 100)
178
+ : undefined;
179
+ onProgress({
180
+ id: event.id,
181
+ status: event.status,
182
+ progress: progressPercent,
183
+ progressDetail: event.progressDetail
184
+ });
185
+ }
186
+ });
187
+ });
188
+ return (0, Either_1.Right)({ tag, digest });
189
+ }
190
+ catch (err) {
191
+ const message = err instanceof Error ? err.message : String(err);
192
+ return (0, Either_1.Left)((0, errors_1.createBuildError)('DockerPushFailed', message, tag));
193
+ }
194
+ };
195
+ exports.pushImage = pushImage;
196
+ const buildAndPushImage = async (buildOptions, pushAuth) => {
197
+ const buildResult = await (0, exports.buildImage)(buildOptions);
198
+ if (buildResult.isLeft()) {
199
+ return (0, Either_1.Left)(buildResult.extract());
200
+ }
201
+ const pushResult = await (0, exports.pushImage)({
202
+ tag: buildOptions.tag,
203
+ auth: pushAuth,
204
+ onProgress: buildOptions.onProgress ? (p) => {
205
+ buildOptions.onProgress?.({
206
+ message: `${p.status}${p.id ? ` ${p.id}` : ''}${p.progress ? ` (${p.progress}%)` : ''}`,
207
+ stream: 'stdout'
208
+ });
209
+ } : undefined
210
+ });
211
+ if (pushResult.isLeft()) {
212
+ return (0, Either_1.Left)(pushResult.extract());
213
+ }
214
+ return (0, Either_1.Right)({
215
+ build: buildResult.extract(),
216
+ push: pushResult.extract()
217
+ });
218
+ };
219
+ exports.buildAndPushImage = buildAndPushImage;
220
+ const isDockerAvailable = async () => {
221
+ try {
222
+ const docker = (0, exports.getDockerClient)();
223
+ await docker.ping();
224
+ return true;
225
+ }
226
+ catch {
227
+ return false;
228
+ }
229
+ };
230
+ exports.isDockerAvailable = isDockerAvailable;
231
+ const DEFAULT_IGNORE_PATTERNS = [
232
+ 'node_modules',
233
+ '.git',
234
+ '.gitignore',
235
+ '.DS_Store',
236
+ '*.log',
237
+ '.env',
238
+ '.env.*',
239
+ 'dist',
240
+ 'build',
241
+ 'coverage',
242
+ '.nyc_output',
243
+ '.turbo',
244
+ ];
245
+ const shouldIgnore = (name, ignorePatterns) => {
246
+ return ignorePatterns.some(pattern => {
247
+ if (pattern.startsWith('*')) {
248
+ return name.endsWith(pattern.slice(1));
249
+ }
250
+ return name === pattern;
251
+ });
252
+ };
253
+ const collectFilesAsync = async (dir, baseDir, ignorePatterns) => {
254
+ const files = [];
255
+ const entries = await fs.promises.readdir(dir, { withFileTypes: true });
256
+ for (const entry of entries) {
257
+ if (shouldIgnore(entry.name, ignorePatterns)) {
258
+ continue;
259
+ }
260
+ const fullPath = path.join(dir, entry.name);
261
+ if (entry.isDirectory()) {
262
+ const subFiles = await collectFilesAsync(fullPath, baseDir, ignorePatterns);
263
+ files.push(...subFiles);
264
+ }
265
+ else if (entry.isFile()) {
266
+ files.push(fullPath);
267
+ }
268
+ }
269
+ return files;
270
+ };
271
+ const hashBuildContext = async (contextPath, ignorePatterns = DEFAULT_IGNORE_PATTERNS) => {
272
+ const hash = crypto.createHash('sha256');
273
+ const files = (await collectFilesAsync(contextPath, contextPath, ignorePatterns)).sort();
274
+ for (const file of files) {
275
+ const relativePath = path.relative(contextPath, file);
276
+ hash.update(relativePath);
277
+ const content = await fs.promises.readFile(file);
278
+ hash.update(content);
279
+ }
280
+ return hash.digest('hex').slice(0, 12);
281
+ };
282
+ exports.hashBuildContext = hashBuildContext;
283
+ const getRegistryProtocol = (registry) => {
284
+ if (registry.startsWith('localhost') ||
285
+ registry.startsWith('127.0.0.1') ||
286
+ registry.startsWith('0.0.0.0') ||
287
+ registry.includes('.localhost')) {
288
+ return 'http';
289
+ }
290
+ return 'https';
291
+ };
292
+ const getRegistryUrl = (registry, imageName, tag) => {
293
+ const protocol = getRegistryProtocol(registry);
294
+ return `${protocol}://${registry}/v2/${imageName}/manifests/${tag}`;
295
+ };
296
+ const imageExistsInRegistry = async (registry, imageName, tag) => {
297
+ try {
298
+ const url = getRegistryUrl(registry, imageName, tag);
299
+ const response = await fetch(url, {
300
+ method: 'HEAD',
301
+ headers: {
302
+ 'Accept': 'application/vnd.docker.distribution.manifest.v2+json'
303
+ }
304
+ });
305
+ return response.ok;
306
+ }
307
+ catch {
308
+ return false;
309
+ }
310
+ };
311
+ exports.imageExistsInRegistry = imageExistsInRegistry;
312
+ const getImageDigestFromRegistry = async (registry, imageName, tag) => {
313
+ try {
314
+ const url = getRegistryUrl(registry, imageName, tag);
315
+ const response = await fetch(url, {
316
+ method: 'GET',
317
+ headers: {
318
+ 'Accept': 'application/vnd.docker.distribution.manifest.v2+json'
319
+ }
320
+ });
321
+ if (!response.ok) {
322
+ return null;
323
+ }
324
+ return response.headers.get('Docker-Content-Digest');
325
+ }
326
+ catch {
327
+ return null;
328
+ }
329
+ };
330
+ exports.getImageDigestFromRegistry = getImageDigestFromRegistry;
331
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const version = "0.0.0";
2
+ export * from './types/service';
3
+ export * from './types/manifest';
4
+ export * from './types/errors';
5
+ export * from './types/events';
6
+ export * from './validation/manifest';
7
+ export * from './orchestrator';
8
+ export * from './orchestrator/events';
9
+ export * from './utils/kubernetes';
10
+ export * from './docker';
11
+ export * from './dev';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,UAAU,CAAA;AAG9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAG9B,cAAc,uBAAuB,CAAA;AAGrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AAGrC,cAAc,oBAAoB,CAAA;AAGlC,cAAc,UAAU,CAAA;AAGxB,cAAc,OAAO,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.version = void 0;
18
+ exports.version = '0.0.0';
19
+ __exportStar(require("./types/service"), exports);
20
+ __exportStar(require("./types/manifest"), exports);
21
+ __exportStar(require("./types/errors"), exports);
22
+ __exportStar(require("./types/events"), exports);
23
+ __exportStar(require("./validation/manifest"), exports);
24
+ __exportStar(require("./orchestrator"), exports);
25
+ __exportStar(require("./orchestrator/events"), exports);
26
+ __exportStar(require("./utils/kubernetes"), exports);
27
+ __exportStar(require("./docker"), exports);
28
+ __exportStar(require("./dev"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAOa,QAAA,OAAO,GAAG,OAAO,CAAA;AAG9B,kDAA+B;AAC/B,mDAAgC;AAChC,iDAA8B;AAC9B,iDAA8B;AAG9B,wDAAqC;AAGrC,iDAA8B;AAC9B,wDAAqC;AAGrC,qDAAkC;AAGlC,2CAAwB;AAGxB,wCAAqB"}
@@ -0,0 +1,28 @@
1
+ import { DeploymentEvent, PhaseName } from '../types/events';
2
+ export type DeploymentPhase = 'initialization' | 'configuration' | 'discovery' | 'dependency-analysis' | 'bootstrap' | 'image-build' | 'deployment' | 'complete';
3
+ export interface PhaseProgress {
4
+ readonly phase: DeploymentPhase;
5
+ readonly current: number;
6
+ readonly total: number;
7
+ readonly message?: string;
8
+ }
9
+ export type EventListener = (event: DeploymentEvent) => void;
10
+ export declare class OrchestratorEventEmitter {
11
+ private listeners;
12
+ private currentPhase;
13
+ private taskStartTimes;
14
+ on(listener: EventListener): () => void;
15
+ emit(event: DeploymentEvent): void;
16
+ emitPhaseStart(phase: DeploymentPhase): void;
17
+ emitPhaseProgress(progress: PhaseProgress): void;
18
+ emitPhaseComplete(phase: DeploymentPhase): void;
19
+ emitTaskStart(taskIdOrName: string, taskName?: string, phase?: string): void;
20
+ emitTaskUpdate(taskName: string, message: string, progress?: number): void;
21
+ emitTaskComplete(taskName: string, success: boolean, skipped?: boolean, contentHash?: string): void;
22
+ emitDiagnostic(message: string, phase?: PhaseName): void;
23
+ emitLog(level: 'info' | 'warn' | 'error' | 'debug', message: string, context?: Record<string, unknown>, phase?: PhaseName): void;
24
+ getCurrentPhase(): DeploymentPhase;
25
+ clear(): void;
26
+ }
27
+ export declare const createEventEmitter: () => OrchestratorEventEmitter;
28
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/orchestrator/events.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAA;AASnF,MAAM,MAAM,eAAe,GACvB,gBAAgB,GAChB,eAAe,GACf,WAAW,GACX,qBAAqB,GACrB,WAAW,GACX,aAAa,GACb,YAAY,GACZ,UAAU,CAAA;AAKd,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAKD,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;AAkD5D,qBAAa,wBAAwB;IACnC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,cAAc,CAAiC;IAKvD,EAAE,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAevC,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAclC,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAgB5C,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAkBhD,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAgB/C,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAsB5E,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAa1E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAuBnG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI;IAOxD,OAAO,CACL,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAC1C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,CAAC,EAAE,SAAS,GAChB,IAAI;IAYP,eAAe,IAAI,eAAe;IAOlC,KAAK,IAAI,IAAI;CAGd;AAKD,eAAO,MAAM,kBAAkB,QAAO,wBACN,CAAA"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEventEmitter = exports.OrchestratorEventEmitter = void 0;
4
+ const events_1 = require("../types/events");
5
+ const PHASE_NUMBERS = {
6
+ 'initialization': 0,
7
+ 'configuration': 1,
8
+ 'discovery': 2,
9
+ 'dependency-analysis': 3,
10
+ 'bootstrap': 4,
11
+ 'image-build': 5,
12
+ 'deployment': 6,
13
+ 'complete': 7
14
+ };
15
+ const mapPhaseToEventPhase = (phase) => {
16
+ const mapping = {
17
+ 'initialization': 'Discovery',
18
+ 'configuration': 'Configuration',
19
+ 'discovery': 'Discovery',
20
+ 'dependency-analysis': 'DependencyGraph',
21
+ 'bootstrap': 'Bootstrap',
22
+ 'image-build': 'Build',
23
+ 'deployment': 'Deploy',
24
+ 'complete': 'Outputs'
25
+ };
26
+ return mapping[phase];
27
+ };
28
+ const getPhaseNumber = (phase) => PHASE_NUMBERS[phase];
29
+ class OrchestratorEventEmitter {
30
+ listeners = [];
31
+ currentPhase = 'initialization';
32
+ taskStartTimes = new Map();
33
+ on(listener) {
34
+ this.listeners.push(listener);
35
+ return () => {
36
+ const index = this.listeners.indexOf(listener);
37
+ if (index > -1) {
38
+ this.listeners.splice(index, 1);
39
+ }
40
+ };
41
+ }
42
+ emit(event) {
43
+ for (const listener of this.listeners) {
44
+ try {
45
+ listener(event);
46
+ }
47
+ catch (err) {
48
+ console.error('Event listener error:', err);
49
+ }
50
+ }
51
+ }
52
+ emitPhaseStart(phase) {
53
+ this.currentPhase = phase;
54
+ const eventPhase = mapPhaseToEventPhase(phase);
55
+ const phaseNumber = getPhaseNumber(phase);
56
+ this.emit({
57
+ type: 'PhaseStart',
58
+ phaseNumber,
59
+ phase: eventPhase,
60
+ timestamp: Date.now()
61
+ });
62
+ }
63
+ emitPhaseProgress(progress) {
64
+ const eventPhase = mapPhaseToEventPhase(progress.phase);
65
+ const phaseNumber = getPhaseNumber(progress.phase);
66
+ this.emit({
67
+ type: 'PhaseProgress',
68
+ phaseNumber,
69
+ phase: eventPhase,
70
+ current: progress.current,
71
+ total: progress.total,
72
+ label: progress.message,
73
+ timestamp: Date.now()
74
+ });
75
+ }
76
+ emitPhaseComplete(phase) {
77
+ const eventPhase = mapPhaseToEventPhase(phase);
78
+ const phaseNumber = getPhaseNumber(phase);
79
+ this.emit({
80
+ type: 'PhaseComplete',
81
+ phaseNumber,
82
+ phase: eventPhase,
83
+ status: 'success',
84
+ timestamp: Date.now()
85
+ });
86
+ }
87
+ emitTaskStart(taskIdOrName, taskName, phase) {
88
+ const taskId = taskIdOrName;
89
+ const displayName = taskName || taskIdOrName;
90
+ const eventPhase = phase ? mapPhaseToEventPhase(phase) : mapPhaseToEventPhase(this.currentPhase);
91
+ const now = Date.now();
92
+ this.taskStartTimes.set(taskId, now);
93
+ this.emit({
94
+ type: 'TaskStart',
95
+ taskId,
96
+ taskName: displayName,
97
+ phase: eventPhase,
98
+ timestamp: now
99
+ });
100
+ }
101
+ emitTaskUpdate(taskName, message, progress) {
102
+ this.emit({
103
+ type: 'TaskUpdate',
104
+ taskId: taskName,
105
+ progress,
106
+ message,
107
+ timestamp: Date.now()
108
+ });
109
+ }
110
+ emitTaskComplete(taskName, success, skipped, contentHash) {
111
+ const now = Date.now();
112
+ const startTime = this.taskStartTimes.get(taskName);
113
+ const duration = startTime ? now - startTime : undefined;
114
+ this.taskStartTimes.delete(taskName);
115
+ this.emit({
116
+ type: 'TaskComplete',
117
+ taskId: taskName,
118
+ taskName,
119
+ status: success ? 'success' : 'error',
120
+ timestamp: now,
121
+ duration,
122
+ skipped,
123
+ contentHash
124
+ });
125
+ }
126
+ emitDiagnostic(message, phase) {
127
+ this.emit((0, events_1.createDiagnosticEvent)('info', message, phase));
128
+ }
129
+ emitLog(level, message, context, phase) {
130
+ this.emit((0, events_1.createDiagnosticEvent)(level === 'warn' ? 'warning' : level, message, phase, context));
131
+ }
132
+ getCurrentPhase() {
133
+ return this.currentPhase;
134
+ }
135
+ clear() {
136
+ this.listeners = [];
137
+ }
138
+ }
139
+ exports.OrchestratorEventEmitter = OrchestratorEventEmitter;
140
+ const createEventEmitter = () => new OrchestratorEventEmitter();
141
+ exports.createEventEmitter = createEventEmitter;
142
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/orchestrator/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { EitherAsync } from 'purify-ts/EitherAsync';
2
+ import { Either } from 'purify-ts/Either';
3
+ import { DeployError } from '../types/errors';
4
+ import { OrchestratorEventEmitter } from './events';
5
+ import { DiscoveredService, ResolvedService } from '../types/service';
6
+ export interface OrchestratorConfig {
7
+ readonly rootPath: string;
8
+ readonly stackName: string;
9
+ readonly servicesToDeploy?: readonly string[];
10
+ readonly onOutput?: (message: string) => void;
11
+ }
12
+ export interface OrchestratorResult {
13
+ readonly success: boolean;
14
+ readonly stack: string;
15
+ readonly servicesDeployed: number;
16
+ readonly duration: number;
17
+ readonly outputs: Record<string, Record<string, unknown>>;
18
+ }
19
+ export declare const discoverServices: (rootPath: string) => Promise<Either<DeployError, readonly DiscoveredService[]>>;
20
+ export declare const discoverPublishedServices: (rootPath: string, allowlist: string[]) => Promise<Either<DeployError, readonly DiscoveredService[]>>;
21
+ export declare const sortByDependencies: (services: readonly DiscoveredService[]) => readonly DiscoveredService[];
22
+ export declare const resolveStackConfig: (service: DiscoveredService, stackName: string) => ResolvedService;
23
+ export declare class Orchestrator {
24
+ private readonly eventEmitter;
25
+ constructor(eventEmitter?: OrchestratorEventEmitter);
26
+ getEventEmitter(): OrchestratorEventEmitter;
27
+ private validateEnvironment;
28
+ deploy(config: OrchestratorConfig): EitherAsync<DeployError, OrchestratorResult>;
29
+ destroy(config: OrchestratorConfig): EitherAsync<DeployError, OrchestratorResult>;
30
+ }
31
+ export declare const createOrchestrator: (eventEmitter?: OrchestratorEventEmitter) => Orchestrator;
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAe,MAAM,kBAAkB,CAAA;AAItD,OAAO,EAIL,WAAW,EACZ,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,wBAAwB,EAAsB,MAAM,UAAU,CAAA;AACvE,OAAO,EACL,iBAAiB,EACjB,eAAe,EAGhB,MAAM,kBAAkB,CAAA;AA6BzB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAE7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C;AAKD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC1D;AAoND,eAAO,MAAM,gBAAgB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC,CA8FlH,CAAA;AAqBD,eAAO,MAAM,yBAAyB,GACpC,UAAU,MAAM,EAChB,WAAW,MAAM,EAAE,KAClB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC,CAiH3D,CAAA;AAKD,eAAO,MAAM,kBAAkB,GAC7B,UAAU,SAAS,iBAAiB,EAAE,KACrC,SAAS,iBAAiB,EAwB5B,CAAA;AAKD,eAAO,MAAM,kBAAkB,GAC7B,SAAS,iBAAiB,EAC1B,WAAW,MAAM,KAChB,eAUF,CAAA;AAqUD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;gBAE3C,YAAY,CAAC,EAAE,wBAAwB;IAInD,eAAe,IAAI,wBAAwB;IAO3C,OAAO,CAAC,mBAAmB;IAyB3B,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,WAAW,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAkPhF,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,WAAW,CAAC,WAAW,EAAE,kBAAkB,CAAC;CAoDlF;AAKD,eAAO,MAAM,kBAAkB,GAAI,eAAe,wBAAwB,KAAG,YAC7C,CAAA"}