@workflow/next 4.0.1-beta.5 → 4.0.1-beta.51
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/LICENSE.md +201 -21
- package/dist/builder-deferred.d.ts +2 -0
- package/dist/builder-deferred.d.ts.map +1 -0
- package/dist/builder-deferred.js +744 -0
- package/dist/builder-deferred.js.map +1 -0
- package/dist/builder-eager.d.ts +2 -0
- package/dist/builder-eager.d.ts.map +1 -0
- package/dist/builder-eager.js +390 -0
- package/dist/builder-eager.js.map +1 -0
- package/dist/builder.d.ts +5 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +27 -0
- package/dist/builder.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -25
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +256 -8
- package/dist/loader.js.map +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/socket-server.d.ts +47 -0
- package/dist/socket-server.d.ts.map +1 -0
- package/dist/socket-server.js +132 -0
- package/dist/socket-server.js.map +1 -0
- package/dist/swc-cache.d.ts +8 -0
- package/dist/swc-cache.d.ts.map +1 -0
- package/dist/swc-cache.js +53 -0
- package/dist/swc-cache.js.map +1 -0
- package/docs/api-reference/index.mdx +14 -0
- package/docs/api-reference/with-workflow.mdx +52 -0
- package/docs/next.mdx +279 -0
- package/package.json +16 -10
package/dist/index.js
CHANGED
|
@@ -4,15 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.withWorkflow = withWorkflow;
|
|
7
|
-
const
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const semver_1 = __importDefault(require("semver"));
|
|
9
|
+
const builder_js_1 = require("./builder.js");
|
|
10
|
+
const swc_cache_js_1 = require("./swc-cache.js");
|
|
9
11
|
function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
10
12
|
if (!process.env.VERCEL_DEPLOYMENT_ID) {
|
|
11
13
|
if (!process.env.WORKFLOW_TARGET_WORLD) {
|
|
12
|
-
process.env.WORKFLOW_TARGET_WORLD = '
|
|
13
|
-
process.env.
|
|
14
|
+
process.env.WORKFLOW_TARGET_WORLD = 'local';
|
|
15
|
+
process.env.WORKFLOW_LOCAL_DATA_DIR = '.next/workflow-data';
|
|
14
16
|
}
|
|
15
|
-
const maybePort = workflows?.
|
|
17
|
+
const maybePort = workflows?.local?.port;
|
|
16
18
|
if (maybePort) {
|
|
17
19
|
process.env.PORT = maybePort.toString();
|
|
18
20
|
}
|
|
@@ -24,6 +26,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
24
26
|
}
|
|
25
27
|
return async function buildConfig(phase, ctx) {
|
|
26
28
|
const loaderPath = require.resolve('./loader');
|
|
29
|
+
let runDeferredBuildFromCallback;
|
|
27
30
|
let nextConfig;
|
|
28
31
|
if (typeof nextConfigOrFn === 'function') {
|
|
29
32
|
nextConfig = await nextConfigOrFn(phase, ctx);
|
|
@@ -43,16 +46,98 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
43
46
|
const existingRules = nextConfig.turbopack.rules;
|
|
44
47
|
const nextVersion = require('next/package.json').version;
|
|
45
48
|
const supportsTurboCondition = semver_1.default.gte(nextVersion, 'v16.0.0');
|
|
46
|
-
|
|
49
|
+
const useDeferredBuilder = (0, builder_js_1.shouldUseDeferredBuilder)(nextVersion);
|
|
50
|
+
// Deferred builder discovers files via loader socket notifications, so
|
|
51
|
+
// turbopack content conditions are only needed with the eager builder.
|
|
52
|
+
const shouldApplyTurboCondition = supportsTurboCondition && !useDeferredBuilder;
|
|
53
|
+
const shouldWatch = process.env.NODE_ENV === 'development';
|
|
54
|
+
let workflowBuilderPromise;
|
|
55
|
+
const getWorkflowBuilder = async () => {
|
|
56
|
+
if (!workflowBuilderPromise) {
|
|
57
|
+
workflowBuilderPromise = (async () => {
|
|
58
|
+
const NextBuilder = await (0, builder_js_1.getNextBuilder)(nextVersion);
|
|
59
|
+
return new NextBuilder({
|
|
60
|
+
watch: shouldWatch,
|
|
61
|
+
// discover workflows from pages/app entries
|
|
62
|
+
dirs: ['pages', 'app', 'src/pages', 'src/app'],
|
|
63
|
+
workingDir: process.cwd(),
|
|
64
|
+
distDir: nextConfig.distDir || '.next',
|
|
65
|
+
buildTarget: 'next',
|
|
66
|
+
workflowsBundlePath: '', // not used in base
|
|
67
|
+
stepsBundlePath: '', // not used in base
|
|
68
|
+
webhookBundlePath: '', // node used in base
|
|
69
|
+
externalPackages: [
|
|
70
|
+
// server-only and client-only are pseudo-packages handled by Next.js
|
|
71
|
+
// during its build process. We mark them as external to prevent esbuild
|
|
72
|
+
// from failing when bundling code that imports them.
|
|
73
|
+
// See: https://nextjs.org/docs/app/getting-started/server-and-client-components
|
|
74
|
+
'server-only',
|
|
75
|
+
'client-only',
|
|
76
|
+
...(nextConfig.serverExternalPackages || []),
|
|
77
|
+
],
|
|
78
|
+
});
|
|
79
|
+
})();
|
|
80
|
+
}
|
|
81
|
+
return workflowBuilderPromise;
|
|
82
|
+
};
|
|
83
|
+
if (useDeferredBuilder) {
|
|
84
|
+
runDeferredBuildFromCallback = async () => {
|
|
85
|
+
const workflowBuilder = await getWorkflowBuilder();
|
|
86
|
+
if (typeof workflowBuilder.onBeforeDeferredEntries === 'function') {
|
|
87
|
+
await workflowBuilder.onBeforeDeferredEntries();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const existingExperimental = (nextConfig.experimental ?? {});
|
|
91
|
+
const existingDeferredEntries = Array.isArray(existingExperimental.deferredEntries)
|
|
92
|
+
? existingExperimental.deferredEntries
|
|
93
|
+
: [];
|
|
94
|
+
const existingOnBeforeDeferredEntries = typeof existingExperimental.onBeforeDeferredEntries === 'function'
|
|
95
|
+
? existingExperimental.onBeforeDeferredEntries
|
|
96
|
+
: undefined;
|
|
97
|
+
nextConfig.experimental = {
|
|
98
|
+
...existingExperimental,
|
|
99
|
+
// biome-ignore lint/suspicious/noTsIgnore: expect-error is wrong as it will work on valid version
|
|
100
|
+
// @ts-ignore this is only available in canary Next.js
|
|
101
|
+
deferredEntries: [
|
|
102
|
+
...new Set([
|
|
103
|
+
...existingDeferredEntries,
|
|
104
|
+
...builder_js_1.WORKFLOW_DEFERRED_ENTRIES,
|
|
105
|
+
]),
|
|
106
|
+
],
|
|
107
|
+
onBeforeDeferredEntries: async (...args) => {
|
|
108
|
+
if (existingOnBeforeDeferredEntries) {
|
|
109
|
+
await existingOnBeforeDeferredEntries(...args);
|
|
110
|
+
}
|
|
111
|
+
if (runDeferredBuildFromCallback) {
|
|
112
|
+
await runDeferredBuildFromCallback();
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
for (const key of [
|
|
118
|
+
'*.tsx',
|
|
119
|
+
'*.ts',
|
|
120
|
+
'*.jsx',
|
|
121
|
+
'*.js',
|
|
122
|
+
'*.mjs',
|
|
123
|
+
'*.mts',
|
|
124
|
+
'*.cjs',
|
|
125
|
+
'*.cts',
|
|
126
|
+
]) {
|
|
47
127
|
nextConfig.turbopack.rules[key] = {
|
|
48
|
-
...(
|
|
128
|
+
...(shouldApplyTurboCondition
|
|
49
129
|
? {
|
|
50
130
|
condition: {
|
|
51
|
-
|
|
52
|
-
any
|
|
53
|
-
|
|
131
|
+
// Use 'all' to combine: must match content AND must NOT be in generated path
|
|
132
|
+
// Merge with any existing 'all' conditions from user config
|
|
133
|
+
all: [
|
|
134
|
+
...(existingRules[key]?.condition?.all || []),
|
|
135
|
+
// Exclude generated workflow route files from transformation
|
|
136
|
+
{ not: { path: /[/\\]\.well-known[/\\]workflow[/\\]/ } },
|
|
137
|
+
// Match files with workflow directives or custom serialization patterns
|
|
138
|
+
// Uses backreferences (\2, \3) to ensure matching quote types
|
|
54
139
|
{
|
|
55
|
-
content: /(use workflow|use step)/,
|
|
140
|
+
content: /(use workflow|use step|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\))/,
|
|
56
141
|
},
|
|
57
142
|
],
|
|
58
143
|
},
|
|
@@ -85,21 +170,10 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
85
170
|
// as Next.js uses child processes for different builds
|
|
86
171
|
if (!process.env.WORKFLOW_NEXT_PRIVATE_BUILT &&
|
|
87
172
|
phase !== 'phase-production-server') {
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
dirs: ['pages', 'app', 'src/pages', 'src/app'],
|
|
93
|
-
workingDir: process.cwd(),
|
|
94
|
-
buildTarget: 'next',
|
|
95
|
-
workflowsBundlePath: '', // not used in base
|
|
96
|
-
stepsBundlePath: '', // not used in base
|
|
97
|
-
webhookBundlePath: '', // node used in base
|
|
98
|
-
externalPackages: [
|
|
99
|
-
...require('next/dist/lib/server-external-packages.json'),
|
|
100
|
-
...(nextConfig.serverExternalPackages || []),
|
|
101
|
-
],
|
|
102
|
-
});
|
|
173
|
+
// Check swc-plugin build hash and invalidate cache if changed
|
|
174
|
+
const distDir = path_1.default.resolve(process.cwd(), nextConfig.distDir || '.next');
|
|
175
|
+
(0, swc_cache_js_1.maybeInvalidateCacheOnSwcChange)(distDir);
|
|
176
|
+
const workflowBuilder = await getWorkflowBuilder();
|
|
103
177
|
await workflowBuilder.build();
|
|
104
178
|
process.env.WORKFLOW_NEXT_PRIVATE_BUILT = '1';
|
|
105
179
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AA2OA,wBAA8B,cAAc,CAC1C,IAAI,EAAE;IACJ,YAAY,EAAE,MAAM,CAAC;CACtB,EACD,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,OAAO,CAAC,MAAM,CAAC,CAoIjB"}
|
package/dist/loader.js
CHANGED
|
@@ -1,32 +1,280 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = workflowLoader;
|
|
4
|
+
const node_net_1 = require("node:net");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
4
6
|
const core_1 = require("@swc/core");
|
|
7
|
+
const socket_server_js_1 = require("./socket-server.js");
|
|
8
|
+
// Cache decorator options per working directory to avoid reading tsconfig for every file
|
|
9
|
+
const decoratorOptionsCache = new Map();
|
|
10
|
+
// Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)
|
|
11
|
+
let cachedBuildersModule = null;
|
|
12
|
+
// Cache socket connection to avoid reconnecting on every file.
|
|
13
|
+
let socketClientPromise = null;
|
|
14
|
+
let socketClient = null;
|
|
15
|
+
function resetSocketClient(cachedSocket) {
|
|
16
|
+
if (cachedSocket && socketClient && socketClient !== cachedSocket) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
socketClientPromise = null;
|
|
20
|
+
socketClient = null;
|
|
21
|
+
}
|
|
22
|
+
async function writeSocketMessage(socket, message) {
|
|
23
|
+
await new Promise((resolve, reject) => {
|
|
24
|
+
socket.write(message, (error) => {
|
|
25
|
+
if (error) {
|
|
26
|
+
reject(error);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
resolve();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function shouldUseSocketDiscovery() {
|
|
34
|
+
return Boolean(process.env.WORKFLOW_SOCKET_PORT && process.env.WORKFLOW_SOCKET_AUTH);
|
|
35
|
+
}
|
|
36
|
+
async function getSocketClient() {
|
|
37
|
+
if (!shouldUseSocketDiscovery()) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
if (socketClient?.destroyed) {
|
|
41
|
+
resetSocketClient(socketClient);
|
|
42
|
+
}
|
|
43
|
+
if (!socketClientPromise) {
|
|
44
|
+
socketClientPromise = (async () => {
|
|
45
|
+
try {
|
|
46
|
+
const socketPort = process.env.WORKFLOW_SOCKET_PORT;
|
|
47
|
+
if (!socketPort) {
|
|
48
|
+
throw new Error('Invariant: no socket port provided for workflow loader');
|
|
49
|
+
}
|
|
50
|
+
const port = Number.parseInt(socketPort, 10);
|
|
51
|
+
if (Number.isNaN(port)) {
|
|
52
|
+
throw new Error(`Invariant: invalid socket port provided: ${socketPort}`);
|
|
53
|
+
}
|
|
54
|
+
const socket = (0, node_net_1.connect)({ port, host: '127.0.0.1' });
|
|
55
|
+
// Wait for connection
|
|
56
|
+
await new Promise((resolve, reject) => {
|
|
57
|
+
const onConnect = () => {
|
|
58
|
+
socket.setNoDelay(true);
|
|
59
|
+
cleanup();
|
|
60
|
+
resolve();
|
|
61
|
+
};
|
|
62
|
+
const onError = (error) => {
|
|
63
|
+
cleanup();
|
|
64
|
+
reject(error);
|
|
65
|
+
};
|
|
66
|
+
const timeout = setTimeout(() => {
|
|
67
|
+
cleanup();
|
|
68
|
+
socket.destroy();
|
|
69
|
+
reject(new Error('Socket connection timeout'));
|
|
70
|
+
}, 1000);
|
|
71
|
+
const cleanup = () => {
|
|
72
|
+
clearTimeout(timeout);
|
|
73
|
+
socket.off('connect', onConnect);
|
|
74
|
+
socket.off('error', onError);
|
|
75
|
+
};
|
|
76
|
+
socket.on('connect', onConnect);
|
|
77
|
+
socket.on('error', onError);
|
|
78
|
+
});
|
|
79
|
+
socket.on('close', () => {
|
|
80
|
+
resetSocketClient(socket);
|
|
81
|
+
});
|
|
82
|
+
socket.on('error', () => {
|
|
83
|
+
resetSocketClient(socket);
|
|
84
|
+
});
|
|
85
|
+
socketClient = socket;
|
|
86
|
+
return socket;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
resetSocketClient();
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
})();
|
|
93
|
+
}
|
|
94
|
+
return socketClientPromise;
|
|
95
|
+
}
|
|
96
|
+
async function notifySocketServer(filename, hasWorkflow, hasStep, hasSerde) {
|
|
97
|
+
if (!shouldUseSocketDiscovery()) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const socket = await getSocketClient();
|
|
101
|
+
if (!socket) {
|
|
102
|
+
throw new Error('Invariant: missing workflow socket connection');
|
|
103
|
+
}
|
|
104
|
+
const authToken = process.env.WORKFLOW_SOCKET_AUTH;
|
|
105
|
+
if (!authToken) {
|
|
106
|
+
throw new Error('Invariant: no socket auth token provided for workflow loader');
|
|
107
|
+
}
|
|
108
|
+
const message = {
|
|
109
|
+
type: 'file-discovered',
|
|
110
|
+
filePath: filename,
|
|
111
|
+
hasWorkflow,
|
|
112
|
+
hasStep,
|
|
113
|
+
hasSerde,
|
|
114
|
+
};
|
|
115
|
+
const serializedMessage = (0, socket_server_js_1.serializeMessage)(message, authToken);
|
|
116
|
+
try {
|
|
117
|
+
await writeSocketMessage(socket, serializedMessage);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
resetSocketClient(socket);
|
|
121
|
+
const reconnectedSocket = await getSocketClient();
|
|
122
|
+
if (!reconnectedSocket) {
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
await writeSocketMessage(reconnectedSocket, serializedMessage);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function getBuildersModule() {
|
|
129
|
+
if (cachedBuildersModule) {
|
|
130
|
+
return cachedBuildersModule;
|
|
131
|
+
}
|
|
132
|
+
// Dynamic import to handle ESM module from CommonJS context
|
|
133
|
+
// biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`
|
|
134
|
+
cachedBuildersModule = (await eval('import("@workflow/builders")'));
|
|
135
|
+
return cachedBuildersModule;
|
|
136
|
+
}
|
|
137
|
+
async function getDecoratorOptions(workingDir) {
|
|
138
|
+
const cached = decoratorOptionsCache.get(workingDir);
|
|
139
|
+
if (cached) {
|
|
140
|
+
return cached;
|
|
141
|
+
}
|
|
142
|
+
const promise = (async () => {
|
|
143
|
+
const { getDecoratorOptionsForDirectory } = await getBuildersModule();
|
|
144
|
+
return getDecoratorOptionsForDirectory(workingDir);
|
|
145
|
+
})();
|
|
146
|
+
decoratorOptionsCache.set(workingDir, promise);
|
|
147
|
+
return promise;
|
|
148
|
+
}
|
|
149
|
+
async function detectPatterns(source) {
|
|
150
|
+
const { detectWorkflowPatterns } = await getBuildersModule();
|
|
151
|
+
return detectWorkflowPatterns(source);
|
|
152
|
+
}
|
|
153
|
+
async function checkGeneratedFile(filePath) {
|
|
154
|
+
const { isGeneratedWorkflowFile } = await getBuildersModule();
|
|
155
|
+
return isGeneratedWorkflowFile(filePath);
|
|
156
|
+
}
|
|
157
|
+
async function checkSdkFile(filePath) {
|
|
158
|
+
const { isWorkflowSdkFile } = await getBuildersModule();
|
|
159
|
+
return isWorkflowSdkFile(filePath);
|
|
160
|
+
}
|
|
161
|
+
async function checkShouldTransform(filePath, patterns) {
|
|
162
|
+
const { shouldTransformFile } = await getBuildersModule();
|
|
163
|
+
return shouldTransformFile(filePath, patterns);
|
|
164
|
+
}
|
|
165
|
+
async function getModuleSpecifier(filePath, projectRoot) {
|
|
166
|
+
const { resolveModuleSpecifier } = await getBuildersModule();
|
|
167
|
+
return resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier;
|
|
168
|
+
}
|
|
169
|
+
async function resolveWorkflowAliasPath(filePath, workingDir) {
|
|
170
|
+
const { resolveWorkflowAliasRelativePath } = await getBuildersModule();
|
|
171
|
+
return resolveWorkflowAliasRelativePath(filePath, workingDir);
|
|
172
|
+
}
|
|
5
173
|
// This loader applies the "use workflow"/"use step"
|
|
6
174
|
// client transformation
|
|
7
175
|
async function workflowLoader(source, sourceMap) {
|
|
8
176
|
const filename = this.resourcePath;
|
|
9
177
|
const normalizedSource = source.toString();
|
|
10
|
-
//
|
|
11
|
-
if (
|
|
178
|
+
// Skip generated workflow route files to avoid re-processing them
|
|
179
|
+
if (await checkGeneratedFile(filename)) {
|
|
12
180
|
return normalizedSource;
|
|
13
181
|
}
|
|
14
|
-
|
|
15
|
-
const
|
|
182
|
+
// Detect workflow patterns in the source code
|
|
183
|
+
const patterns = await detectPatterns(normalizedSource);
|
|
184
|
+
// Always notify discovery tracking, even for `false/false`, so files that
|
|
185
|
+
// previously had workflow/step usage are removed from the tracked sets.
|
|
186
|
+
await notifySocketServer(filename, patterns.hasUseWorkflow, patterns.hasUseStep, patterns.hasSerde);
|
|
187
|
+
// For @workflow SDK packages, only transform files with actual directives,
|
|
188
|
+
// not files that just match serde patterns (which are internal SDK implementation files)
|
|
189
|
+
const isSdkFile = await checkSdkFile(filename);
|
|
190
|
+
if (isSdkFile && !patterns.hasDirective) {
|
|
191
|
+
return normalizedSource;
|
|
192
|
+
}
|
|
193
|
+
// Check if file needs transformation based on patterns and path
|
|
194
|
+
if (!(await checkShouldTransform(filename, patterns))) {
|
|
195
|
+
return normalizedSource;
|
|
196
|
+
}
|
|
197
|
+
const isTypeScript = filename.endsWith('.ts') ||
|
|
198
|
+
filename.endsWith('.tsx') ||
|
|
199
|
+
filename.endsWith('.mts') ||
|
|
200
|
+
filename.endsWith('.cts');
|
|
201
|
+
// Calculate relative filename for SWC plugin
|
|
202
|
+
// The SWC plugin uses filename to generate workflowId, so it must be relative
|
|
203
|
+
const workingDir = process.cwd();
|
|
204
|
+
const normalizedWorkingDir = workingDir
|
|
205
|
+
.replace(/\\/g, '/')
|
|
206
|
+
.replace(/\/$/, '');
|
|
207
|
+
const normalizedFilepath = filename.replace(/\\/g, '/');
|
|
208
|
+
// Windows fix: Use case-insensitive comparison to work around drive letter casing issues
|
|
209
|
+
const lowerWd = normalizedWorkingDir.toLowerCase();
|
|
210
|
+
const lowerPath = normalizedFilepath.toLowerCase();
|
|
211
|
+
let relativeFilename;
|
|
212
|
+
if (lowerPath.startsWith(lowerWd + '/')) {
|
|
213
|
+
// File is under working directory - manually calculate relative path
|
|
214
|
+
relativeFilename = normalizedFilepath.substring(normalizedWorkingDir.length + 1);
|
|
215
|
+
}
|
|
216
|
+
else if (lowerPath === lowerWd) {
|
|
217
|
+
// File IS the working directory (shouldn't happen)
|
|
218
|
+
relativeFilename = '.';
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// Use relative() for files outside working directory
|
|
222
|
+
relativeFilename = (0, node_path_1.relative)(workingDir, filename).replace(/\\/g, '/');
|
|
223
|
+
if (relativeFilename.startsWith('../')) {
|
|
224
|
+
const aliasedRelativePath = await resolveWorkflowAliasPath(filename, workingDir);
|
|
225
|
+
if (aliasedRelativePath) {
|
|
226
|
+
relativeFilename = aliasedRelativePath;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
relativeFilename = relativeFilename
|
|
230
|
+
.split('/')
|
|
231
|
+
.filter((part) => part !== '..')
|
|
232
|
+
.join('/');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Final safety check - ensure we never pass an absolute path to SWC
|
|
237
|
+
if (relativeFilename.includes(':') || relativeFilename.startsWith('/')) {
|
|
238
|
+
// This should rarely happen, but use filename split as last resort
|
|
239
|
+
relativeFilename = normalizedFilepath.split('/').pop() || 'unknown.ts';
|
|
240
|
+
}
|
|
241
|
+
// Get decorator options from tsconfig (cached per working directory)
|
|
242
|
+
const decoratorOptions = await getDecoratorOptions(workingDir);
|
|
243
|
+
// Resolve module specifier for packages (node_modules or workspace packages)
|
|
244
|
+
const moduleSpecifier = await getModuleSpecifier(filename, workingDir);
|
|
16
245
|
// Transform with SWC
|
|
17
246
|
const result = await (0, core_1.transform)(normalizedSource, {
|
|
18
|
-
filename,
|
|
247
|
+
filename: relativeFilename,
|
|
19
248
|
jsc: {
|
|
20
249
|
parser: {
|
|
21
|
-
|
|
22
|
-
|
|
250
|
+
...(isTypeScript
|
|
251
|
+
? {
|
|
252
|
+
syntax: 'typescript',
|
|
253
|
+
tsx: filename.endsWith('.tsx'),
|
|
254
|
+
decorators: decoratorOptions.decorators,
|
|
255
|
+
}
|
|
256
|
+
: {
|
|
257
|
+
syntax: 'ecmascript',
|
|
258
|
+
jsx: filename.endsWith('.jsx'),
|
|
259
|
+
decorators: decoratorOptions.decorators,
|
|
260
|
+
}),
|
|
23
261
|
},
|
|
24
262
|
target: 'es2022',
|
|
25
263
|
experimental: {
|
|
26
264
|
plugins: [
|
|
27
|
-
[
|
|
265
|
+
[
|
|
266
|
+
require.resolve('@workflow/swc-plugin'),
|
|
267
|
+
{ mode: 'client', moduleSpecifier },
|
|
268
|
+
],
|
|
28
269
|
],
|
|
29
270
|
},
|
|
271
|
+
transform: {
|
|
272
|
+
react: {
|
|
273
|
+
runtime: 'preserve',
|
|
274
|
+
},
|
|
275
|
+
legacyDecorator: decoratorOptions.legacyDecorator,
|
|
276
|
+
decoratorMetadata: decoratorOptions.decoratorMetadata,
|
|
277
|
+
},
|
|
30
278
|
},
|
|
31
279
|
minify: false,
|
|
32
280
|
inputSourceMap: sourceMap,
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;
|
|
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/
|
|
1
|
+
export * from '@workflow/core/dist/runtime';
|
|
2
2
|
//# sourceMappingURL=runtime.d.ts.map
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,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/
|
|
20
|
+
__exportStar(require("@workflow/core/dist/runtime"), exports);
|
|
21
21
|
//# sourceMappingURL=runtime.js.map
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,oDAAoD;AACpD,iBAAiB;AACjB,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,oDAAoD;AACpD,iBAAiB;AACjB,8DAA4C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Interface for the socket IO instance returned by createSocketServer
|
|
25
|
+
*/
|
|
26
|
+
export interface SocketIO {
|
|
27
|
+
emit(event: 'build-complete'): void;
|
|
28
|
+
getAuthToken(): string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Serialize a message with authentication preamble
|
|
32
|
+
*/
|
|
33
|
+
export declare function serializeMessage(message: SocketMessage, authToken: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Parse and authenticate a message from the socket
|
|
36
|
+
* Returns the parsed message if valid, null otherwise
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseMessage(line: string, authToken: string): SocketMessage | null;
|
|
39
|
+
/**
|
|
40
|
+
* Create a TCP socket server for loader<->builder communication.
|
|
41
|
+
* Returns a SocketIO interface for broadcasting messages and the auth token.
|
|
42
|
+
*
|
|
43
|
+
* SECURITY: Server listens on 127.0.0.1 (localhost only) and uses
|
|
44
|
+
* message authentication to prevent processing of unauthorized messages.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createSocketServer(config: SocketServerConfig): Promise<SocketIO>;
|
|
47
|
+
//# 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":"AAiBA;;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;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI,MAAM,CAAC;CACxB;AAED;;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,CA4EnB"}
|