@workflow/next 4.0.1-beta.6 → 4.0.1-beta.60

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/dist/loader.js CHANGED
@@ -1,38 +1,439 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = workflowLoader;
4
+ const node_fs_1 = require("node:fs");
5
+ const promises_1 = require("node:fs/promises");
6
+ const node_net_1 = require("node:net");
7
+ const node_path_1 = require("node:path");
4
8
  const core_1 = require("@swc/core");
5
- // This loader applies the "use workflow"/"use step"
6
- // client transformation
7
- async function workflowLoader(source, sourceMap) {
8
- const filename = this.resourcePath;
9
- const normalizedSource = source.toString();
10
- // only apply the transform if file needs it
11
- if (!normalizedSource.match(/(use step|use workflow)/)) {
12
- return normalizedSource;
13
- }
14
- const isTypeScript = filename.endsWith('.ts') || filename.endsWith('.tsx');
15
- const isTsx = filename.endsWith('.tsx');
16
- // Transform with SWC
17
- const result = await (0, core_1.transform)(normalizedSource, {
18
- filename,
19
- jsc: {
20
- parser: {
21
- syntax: isTypeScript ? 'typescript' : 'ecmascript',
22
- tsx: isTsx,
23
- },
24
- target: 'es2022',
25
- experimental: {
26
- plugins: [
27
- [require.resolve('@workflow/swc-plugin'), { mode: 'client' }],
28
- ],
9
+ const socket_server_js_1 = require("./socket-server.js");
10
+ const step_copy_utils_js_1 = require("./step-copy-utils.js");
11
+ // Cache decorator options per working directory to avoid reading tsconfig for every file
12
+ const decoratorOptionsCache = new Map();
13
+ // Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)
14
+ let cachedBuildersModule = null;
15
+ let cachedLoaderStaticDependencies = null;
16
+ // Cache socket connection to avoid reconnecting on every file.
17
+ let socketClientPromise = null;
18
+ let socketClient = null;
19
+ let socketClientKey = null;
20
+ function registerFileDependency(loaderContext, dependencyPath) {
21
+ loaderContext.addDependency?.(dependencyPath);
22
+ loaderContext.addBuildDependency?.(dependencyPath);
23
+ }
24
+ function addIfExists(files, dependencyPath) {
25
+ if ((0, node_fs_1.existsSync)(dependencyPath)) {
26
+ files.add(dependencyPath);
27
+ }
28
+ }
29
+ function resolveLoaderStaticDependencies() {
30
+ if (cachedLoaderStaticDependencies) {
31
+ return cachedLoaderStaticDependencies;
32
+ }
33
+ const swcPluginPath = require.resolve('@workflow/swc-plugin');
34
+ const swcPluginBuildHashPath = require.resolve('@workflow/swc-plugin/build-hash.json');
35
+ const workflowBuildersPath = require.resolve('@workflow/builders');
36
+ // Derive package.json paths from resolved entrypoints to avoid
37
+ // Turbopack loader-eval failures around ../package.json resolution.
38
+ const swcPluginPackageJsonPath = (0, node_path_1.join)((0, node_path_1.dirname)(swcPluginPath), 'package.json');
39
+ const workflowBuildersPackageJsonPath = (0, node_path_1.join)((0, node_path_1.dirname)(workflowBuildersPath), '../package.json');
40
+ const files = new Set([
41
+ __filename,
42
+ require.resolve('./socket-server'),
43
+ require.resolve('./step-copy-utils'),
44
+ swcPluginPath,
45
+ swcPluginBuildHashPath,
46
+ workflowBuildersPath,
47
+ ]);
48
+ addIfExists(files, swcPluginPackageJsonPath);
49
+ addIfExists(files, workflowBuildersPackageJsonPath);
50
+ cachedLoaderStaticDependencies = {
51
+ swcPluginPath,
52
+ files: Array.from(files),
53
+ };
54
+ return cachedLoaderStaticDependencies;
55
+ }
56
+ function registerTransformDependencies(loaderContext) {
57
+ const staticDependencies = resolveLoaderStaticDependencies();
58
+ for (const dependencyPath of staticDependencies.files) {
59
+ registerFileDependency(loaderContext, dependencyPath);
60
+ }
61
+ return staticDependencies.swcPluginPath;
62
+ }
63
+ function resetSocketClient(cachedSocket) {
64
+ if (cachedSocket && socketClient && socketClient !== cachedSocket) {
65
+ return;
66
+ }
67
+ socketClientPromise = null;
68
+ socketClient = null;
69
+ socketClientKey = null;
70
+ }
71
+ async function writeSocketMessage(socket, message) {
72
+ await new Promise((resolve, reject) => {
73
+ socket.write(message, (error) => {
74
+ if (error) {
75
+ reject(error);
76
+ return;
77
+ }
78
+ resolve();
79
+ });
80
+ });
81
+ }
82
+ function getSocketInfoFilePath() {
83
+ return (process.env.WORKFLOW_SOCKET_INFO_PATH ??
84
+ (0, node_path_1.join)(process.cwd(), '.next', 'cache', 'workflow-socket.json'));
85
+ }
86
+ function getSocketCredentialsFromEnv() {
87
+ const socketPort = process.env.WORKFLOW_SOCKET_PORT;
88
+ const authToken = process.env.WORKFLOW_SOCKET_AUTH;
89
+ if (!socketPort || !authToken) {
90
+ return null;
91
+ }
92
+ const port = Number.parseInt(socketPort, 10);
93
+ if (Number.isNaN(port)) {
94
+ return null;
95
+ }
96
+ return { port, authToken };
97
+ }
98
+ async function getSocketCredentialsFromFile() {
99
+ const socketInfoFilePath = getSocketInfoFilePath();
100
+ if (!(0, node_fs_1.existsSync)(socketInfoFilePath)) {
101
+ return null;
102
+ }
103
+ try {
104
+ const raw = await (0, promises_1.readFile)(socketInfoFilePath, 'utf8');
105
+ const parsed = JSON.parse(raw);
106
+ const authToken = typeof parsed.authToken === 'string' ? parsed.authToken : null;
107
+ const numericPort = typeof parsed.port === 'number'
108
+ ? parsed.port
109
+ : Number.parseInt(String(parsed.port), 10);
110
+ if (!authToken || Number.isNaN(numericPort)) {
111
+ return null;
112
+ }
113
+ return {
114
+ port: numericPort,
115
+ authToken,
116
+ };
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ }
122
+ async function getSocketCredentials() {
123
+ return (getSocketCredentialsFromEnv() ?? (await getSocketCredentialsFromFile()));
124
+ }
125
+ async function getSocketClient() {
126
+ const socketCredentials = await getSocketCredentials();
127
+ if (!socketCredentials) {
128
+ return null;
129
+ }
130
+ if (socketClient?.destroyed) {
131
+ resetSocketClient(socketClient);
132
+ }
133
+ const currentSocketKey = `${socketCredentials.port}:${socketCredentials.authToken}`;
134
+ if (socketClientKey && socketClientKey !== currentSocketKey) {
135
+ if (socketClient) {
136
+ resetSocketClient(socketClient);
137
+ }
138
+ else {
139
+ resetSocketClient();
140
+ }
141
+ }
142
+ if (!socketClientPromise) {
143
+ socketClientPromise = (async () => {
144
+ try {
145
+ const socket = (0, node_net_1.connect)({
146
+ port: socketCredentials.port,
147
+ host: '127.0.0.1',
148
+ });
149
+ // Wait for connection
150
+ await new Promise((resolve, reject) => {
151
+ const onConnect = () => {
152
+ socket.setNoDelay(true);
153
+ cleanup();
154
+ resolve();
155
+ };
156
+ const onError = (error) => {
157
+ cleanup();
158
+ reject(error);
159
+ };
160
+ const timeout = setTimeout(() => {
161
+ cleanup();
162
+ socket.destroy();
163
+ reject(new Error('Socket connection timeout'));
164
+ }, 1000);
165
+ const cleanup = () => {
166
+ clearTimeout(timeout);
167
+ socket.off('connect', onConnect);
168
+ socket.off('error', onError);
169
+ };
170
+ socket.on('connect', onConnect);
171
+ socket.on('error', onError);
172
+ });
173
+ socket.on('close', () => {
174
+ resetSocketClient(socket);
175
+ });
176
+ socket.on('error', () => {
177
+ resetSocketClient(socket);
178
+ });
179
+ socketClient = socket;
180
+ socketClientKey = currentSocketKey;
181
+ return socket;
182
+ }
183
+ catch (error) {
184
+ resetSocketClient();
185
+ throw error;
186
+ }
187
+ })();
188
+ }
189
+ return socketClientPromise;
190
+ }
191
+ async function notifySocketServer(filename, hasWorkflow, hasStep, hasSerde) {
192
+ const socketCredentials = await getSocketCredentials();
193
+ if (!socketCredentials) {
194
+ return;
195
+ }
196
+ const socket = await getSocketClient();
197
+ if (!socket) {
198
+ throw new Error('Invariant: missing workflow socket connection');
199
+ }
200
+ const message = {
201
+ type: 'file-discovered',
202
+ filePath: filename,
203
+ hasWorkflow,
204
+ hasStep,
205
+ hasSerde,
206
+ };
207
+ const serializedMessage = (0, socket_server_js_1.serializeMessage)(message, socketCredentials.authToken);
208
+ try {
209
+ await writeSocketMessage(socket, serializedMessage);
210
+ }
211
+ catch (error) {
212
+ resetSocketClient(socket);
213
+ const reconnectedSocket = await getSocketClient();
214
+ if (!reconnectedSocket) {
215
+ throw error;
216
+ }
217
+ await writeSocketMessage(reconnectedSocket, serializedMessage);
218
+ }
219
+ }
220
+ async function getBuildersModule() {
221
+ if (cachedBuildersModule) {
222
+ return cachedBuildersModule;
223
+ }
224
+ // Dynamic import to handle ESM module from CommonJS context
225
+ // biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`
226
+ cachedBuildersModule = (await eval('import("@workflow/builders")'));
227
+ return cachedBuildersModule;
228
+ }
229
+ async function getDecoratorOptions(workingDir) {
230
+ const cached = decoratorOptionsCache.get(workingDir);
231
+ if (cached) {
232
+ return cached;
233
+ }
234
+ const promise = (async () => {
235
+ const { getDecoratorOptionsForDirectoryWithConfigPath } = await getBuildersModule();
236
+ return getDecoratorOptionsForDirectoryWithConfigPath(workingDir);
237
+ })();
238
+ decoratorOptionsCache.set(workingDir, promise);
239
+ return promise;
240
+ }
241
+ async function detectPatterns(source) {
242
+ const { detectWorkflowPatterns } = await getBuildersModule();
243
+ return detectWorkflowPatterns(source);
244
+ }
245
+ async function checkGeneratedFile(filePath) {
246
+ const { isGeneratedWorkflowFile } = await getBuildersModule();
247
+ return isGeneratedWorkflowFile(filePath);
248
+ }
249
+ async function checkSdkFile(filePath) {
250
+ const { isWorkflowSdkFile } = await getBuildersModule();
251
+ return isWorkflowSdkFile(filePath);
252
+ }
253
+ async function checkShouldTransform(filePath, patterns) {
254
+ const { shouldTransformFile } = await getBuildersModule();
255
+ return shouldTransformFile(filePath, patterns);
256
+ }
257
+ async function getModuleSpecifier(filePath, projectRoot) {
258
+ const { resolveModuleSpecifier } = await getBuildersModule();
259
+ return resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier;
260
+ }
261
+ async function resolveWorkflowAliasPath(filePath, workingDir) {
262
+ const { resolveWorkflowAliasRelativePath } = await getBuildersModule();
263
+ return resolveWorkflowAliasRelativePath(filePath, workingDir);
264
+ }
265
+ async function getRelativeFilenameForSwc(filename, workingDir) {
266
+ const normalizedWorkingDir = workingDir
267
+ .replace(/\\/g, '/')
268
+ .replace(/\/$/, '');
269
+ const normalizedFilepath = filename.replace(/\\/g, '/');
270
+ // Windows fix: Use case-insensitive comparison to work around drive letter casing issues
271
+ const lowerWd = normalizedWorkingDir.toLowerCase();
272
+ const lowerPath = normalizedFilepath.toLowerCase();
273
+ let relativeFilename;
274
+ if (lowerPath.startsWith(`${lowerWd}/`)) {
275
+ // File is under working directory - manually calculate relative path
276
+ relativeFilename = normalizedFilepath.substring(normalizedWorkingDir.length + 1);
277
+ }
278
+ else if (lowerPath === lowerWd) {
279
+ // File IS the working directory (shouldn't happen)
280
+ relativeFilename = '.';
281
+ }
282
+ else {
283
+ // Use relative() for files outside working directory
284
+ relativeFilename = (0, node_path_1.relative)(workingDir, filename).replace(/\\/g, '/');
285
+ if (relativeFilename.startsWith('../')) {
286
+ const aliasedRelativePath = await resolveWorkflowAliasPath(filename, workingDir);
287
+ if (aliasedRelativePath) {
288
+ relativeFilename = aliasedRelativePath;
289
+ }
290
+ else {
291
+ relativeFilename = relativeFilename
292
+ .split('/')
293
+ .filter((part) => part !== '..')
294
+ .join('/');
295
+ }
296
+ }
297
+ }
298
+ // Final safety check - ensure we never pass an absolute path to SWC
299
+ if (relativeFilename.includes(':') || relativeFilename.startsWith('/')) {
300
+ // This should rarely happen, but use filename split as last resort
301
+ relativeFilename = normalizedFilepath.split('/').pop() || 'unknown.ts';
302
+ }
303
+ return relativeFilename;
304
+ }
305
+ function stripDeferredStepSourceMetadataComment(source) {
306
+ const metadataPattern = new RegExp(`^\\s*//\\s*${step_copy_utils_js_1.DEFERRED_STEP_SOURCE_METADATA_PREFIX}[A-Za-z0-9+/=]+\\s*\\r?\\n?`);
307
+ return source.replace(metadataPattern, '');
308
+ }
309
+ function workflowLoader(source, sourceMap) {
310
+ const callback = this.async?.();
311
+ const run = async () => {
312
+ const filename = this.resourcePath;
313
+ const normalizedSource = source.toString();
314
+ const workingDir = process.cwd();
315
+ const swcPluginPath = registerTransformDependencies(this);
316
+ const isDeferredStepCopyFile = (0, step_copy_utils_js_1.isDeferredStepCopyFilePath)(filename);
317
+ const deferredStepSourceMetadata = isDeferredStepCopyFile
318
+ ? (0, step_copy_utils_js_1.parseDeferredStepSourceMetadata)(normalizedSource)
319
+ : null;
320
+ const sourceWithoutDeferredMetadata = isDeferredStepCopyFile
321
+ ? stripDeferredStepSourceMetadataComment(normalizedSource)
322
+ : normalizedSource;
323
+ const deferredSourceMapResult = isDeferredStepCopyFile
324
+ ? (0, step_copy_utils_js_1.parseInlineSourceMapComment)(sourceWithoutDeferredMetadata)
325
+ : {
326
+ sourceWithoutMapComment: sourceWithoutDeferredMetadata,
327
+ sourceMap: null,
328
+ };
329
+ const sourceForTransform = deferredSourceMapResult.sourceWithoutMapComment;
330
+ const discoveryFilePath = deferredStepSourceMetadata?.absolutePath || filename;
331
+ if (deferredStepSourceMetadata?.absolutePath) {
332
+ // Ensure edits to the original source invalidate deferred step copies.
333
+ registerFileDependency(this, deferredStepSourceMetadata.absolutePath);
334
+ }
335
+ // Skip generated workflow route files to avoid re-processing them
336
+ if ((await checkGeneratedFile(filename)) && !isDeferredStepCopyFile) {
337
+ return { code: normalizedSource, map: sourceMap };
338
+ }
339
+ // Detect workflow patterns in the source code.
340
+ const patterns = await detectPatterns(sourceForTransform);
341
+ // Always notify discovery tracking, even for `false/false`, so files that
342
+ // previously had workflow/step usage are removed from the tracked sets.
343
+ // Deferred step copy files must report using their original source path so
344
+ // deferred rebuilds can react to source edits outside generated artifacts.
345
+ if (!isDeferredStepCopyFile || deferredStepSourceMetadata?.absolutePath) {
346
+ // For @workflow SDK packages, do not report serde-only matches for
347
+ // discovery, otherwise deferred mode can incorrectly treat SDK internals
348
+ // as app serde entrypoints.
349
+ const isSdkFile = await checkSdkFile(discoveryFilePath);
350
+ await notifySocketServer(discoveryFilePath, patterns.hasUseWorkflow, patterns.hasUseStep, patterns.hasSerde && !isSdkFile);
351
+ }
352
+ if (!isDeferredStepCopyFile) {
353
+ // For @workflow SDK packages, only transform files with actual directives,
354
+ // not files that just match serde patterns (which are internal SDK implementation files)
355
+ const isSdkFile = await checkSdkFile(filename);
356
+ if (isSdkFile && !patterns.hasDirective) {
357
+ return { code: normalizedSource, map: sourceMap };
358
+ }
359
+ // Check if file needs transformation based on patterns and path
360
+ if (!(await checkShouldTransform(filename, patterns))) {
361
+ return { code: normalizedSource, map: sourceMap };
362
+ }
363
+ }
364
+ const isTypeScript = filename.endsWith('.ts') ||
365
+ filename.endsWith('.tsx') ||
366
+ filename.endsWith('.mts') ||
367
+ filename.endsWith('.cts');
368
+ // Calculate relative filename for SWC plugin
369
+ // The SWC plugin uses filename to generate workflowId, so it must be relative
370
+ const relativeFilename = deferredStepSourceMetadata?.relativeFilename ||
371
+ (await getRelativeFilenameForSwc(filename, workingDir));
372
+ // Get decorator options from tsconfig (cached per working directory)
373
+ const { options: decoratorOptions, configPath } = await getDecoratorOptions(workingDir);
374
+ if (configPath) {
375
+ registerFileDependency(this, configPath);
376
+ }
377
+ // Resolve module specifier for packages (node_modules or workspace packages)
378
+ const moduleSpecifier = await getModuleSpecifier(deferredStepSourceMetadata?.absolutePath || filename, workingDir);
379
+ const mode = isDeferredStepCopyFile ? 'step' : 'client';
380
+ // Transform with SWC
381
+ const result = await (0, core_1.transform)(sourceForTransform, {
382
+ filename: relativeFilename,
383
+ jsc: {
384
+ parser: {
385
+ ...(isTypeScript
386
+ ? {
387
+ syntax: 'typescript',
388
+ tsx: filename.endsWith('.tsx'),
389
+ decorators: decoratorOptions.decorators,
390
+ }
391
+ : {
392
+ syntax: 'ecmascript',
393
+ jsx: filename.endsWith('.jsx'),
394
+ decorators: decoratorOptions.decorators,
395
+ }),
396
+ },
397
+ target: 'es2022',
398
+ experimental: {
399
+ plugins: [[swcPluginPath, { mode, moduleSpecifier }]],
400
+ },
401
+ transform: {
402
+ react: {
403
+ runtime: 'preserve',
404
+ },
405
+ legacyDecorator: decoratorOptions.legacyDecorator,
406
+ decoratorMetadata: decoratorOptions.decoratorMetadata,
407
+ },
29
408
  },
30
- },
31
- minify: false,
32
- inputSourceMap: sourceMap,
33
- sourceMaps: true,
34
- inlineSourcesContent: true,
409
+ minify: false,
410
+ inputSourceMap: isDeferredStepCopyFile
411
+ ? deferredSourceMapResult.sourceMap || sourceMap
412
+ : sourceMap,
413
+ sourceMaps: true,
414
+ inlineSourcesContent: true,
415
+ });
416
+ let transformedMap = sourceMap;
417
+ if (typeof result.map === 'string') {
418
+ try {
419
+ transformedMap = JSON.parse(result.map);
420
+ }
421
+ catch {
422
+ transformedMap = result.map;
423
+ }
424
+ }
425
+ else if (result.map) {
426
+ transformedMap = result.map;
427
+ }
428
+ return { code: result.code, map: transformedMap };
429
+ };
430
+ if (!callback) {
431
+ return run().then((result) => result.code);
432
+ }
433
+ void run()
434
+ .then((result) => callback(null, result.code, result.map))
435
+ .catch((error) => {
436
+ callback(error instanceof Error ? error : new Error(String(error)));
35
437
  });
36
- return result.code;
37
438
  }
38
439
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;AAIA,iCAwCC;AA5CD,oCAAsC;AAEtC,oDAAoD;AACpD,wBAAwB;AACT,KAAK,UAAU,cAAc,CAI1C,MAAuB,EACvB,SAAc;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;IACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAE3C,4CAA4C;IAC5C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACvD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAExC,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAS,EAAC,gBAAgB,EAAE;QAC/C,QAAQ;QACR,GAAG,EAAE;YACH,MAAM,EAAE;gBACN,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;gBAClD,GAAG,EAAE,KAAK;aACX;YACD,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE;gBACZ,OAAO,EAAE;oBACP,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;iBAC9D;aACF;SACF;QACD,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,IAAI;QAChB,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from '@workflow/cli/dist/lib/runtime';
1
+ export * from '@workflow/core/dist/runtime';
2
2
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,cAAc,6BAA6B,CAAC"}
package/dist/runtime.js CHANGED
@@ -17,5 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  // re-export runtime as stub for resolving to not
18
18
  // require @workflow/core be a dependency as well as
19
19
  // @workflow/next
20
- __exportStar(require("@workflow/cli/dist/lib/runtime"), exports);
20
+ __exportStar(require("@workflow/core/dist/runtime"), exports);
21
21
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,oDAAoD;AACpD,iBAAiB;AACjB,iEAA+C"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,oDAAoD;AACpD,iBAAiB;AACjB,8DAA4C"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Message types that can be sent between loader and builder
3
+ */
4
+ export type SocketMessage = {
5
+ type: 'file-discovered';
6
+ filePath: string;
7
+ hasWorkflow: boolean;
8
+ hasStep: boolean;
9
+ hasSerde: boolean;
10
+ } | {
11
+ type: 'trigger-build';
12
+ } | {
13
+ type: 'build-complete';
14
+ };
15
+ /**
16
+ * Configuration for the socket server
17
+ */
18
+ export interface SocketServerConfig {
19
+ isDevServer: boolean;
20
+ onFileDiscovered: (filePath: string, hasWorkflow: boolean, hasStep: boolean, hasSerde: boolean) => void;
21
+ onTriggerBuild: () => void;
22
+ socketInfoFilePath?: string;
23
+ }
24
+ /**
25
+ * Interface for the socket IO instance returned by createSocketServer
26
+ */
27
+ export interface SocketIO {
28
+ emit(event: 'build-complete'): void;
29
+ getAuthToken(): string;
30
+ }
31
+ /**
32
+ * Serialize a message with authentication preamble
33
+ */
34
+ export declare function serializeMessage(message: SocketMessage, authToken: string): string;
35
+ /**
36
+ * Parse and authenticate a message from the socket
37
+ * Returns the parsed message if valid, null otherwise
38
+ */
39
+ export declare function parseMessage(line: string, authToken: string): SocketMessage | null;
40
+ /**
41
+ * Create a TCP socket server for loader<->builder communication.
42
+ * Returns a SocketIO interface for broadcasting messages and the auth token.
43
+ *
44
+ * SECURITY: Server listens on 127.0.0.1 (localhost only) and uses
45
+ * message authentication to prevent processing of unauthorized messages.
46
+ */
47
+ export declare function createSocketServer(config: SocketServerConfig): Promise<SocketIO>;
48
+ //# sourceMappingURL=socket-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-server.d.ts","sourceRoot":"","sources":["../src/socket-server.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,CAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,KACd,IAAI,CAAC;IACV,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI,MAAM,CAAC;CACxB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAoCtB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,CAoGnB"}