@workflow/next 5.0.0-beta.3 → 5.0.0-beta.31
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/builder-eager.d.ts +1 -1
- package/dist/builder-eager.d.ts.map +1 -1
- package/dist/builder-eager.js +385 -201
- package/dist/builder.d.ts +1 -4
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +2 -28
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +369 -67
- package/dist/loader.d.ts +7 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +40 -356
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +2 -2
- package/dist/swc-plugin-cache.d.ts +7 -0
- package/dist/swc-plugin-cache.d.ts.map +1 -0
- package/dist/swc-plugin-cache.js +23 -0
- package/dist/watch-rebuild.d.ts +63 -0
- package/dist/watch-rebuild.d.ts.map +1 -0
- package/dist/watch-rebuild.js +399 -0
- package/docs/api-reference/with-workflow.mdx +56 -2
- package/docs/next.mdx +5 -3
- package/package.json +8 -7
- package/dist/builder-deferred.d.ts +0 -2
- package/dist/builder-deferred.d.ts.map +0 -1
- package/dist/builder-deferred.js +0 -1401
- package/dist/builder-deferred.js.map +0 -1
- package/dist/builder-eager.js.map +0 -1
- package/dist/builder.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/loader.js.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/socket-server.d.ts +0 -48
- package/dist/socket-server.d.ts.map +0 -1
- package/dist/socket-server.js +0 -154
- package/dist/socket-server.js.map +0 -1
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":"AAmJA,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,IAAI,CACnB,cAAc,oBAAoB,CAAC,EACnC,8BAA8B,GAAG,8BAA8B,CAChE,GACA,OAAO,CAAC,MAAM,CAAC,CAejB;AAqED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;;;;EAOzE;AAKD,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,CAgGtC"}
|
package/dist/loader.js
CHANGED
|
@@ -1,48 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.injectWorkflowTargetWorldImport = injectWorkflowTargetWorldImport;
|
|
4
|
+
exports.getLoaderSourceMapOptions = getLoaderSourceMapOptions;
|
|
3
5
|
exports.default = workflowLoader;
|
|
4
6
|
const node_fs_1 = require("node:fs");
|
|
5
|
-
const promises_1 = require("node:fs/promises");
|
|
6
|
-
const node_net_1 = require("node:net");
|
|
7
7
|
const node_path_1 = require("node:path");
|
|
8
8
|
const core_1 = require("@swc/core");
|
|
9
|
-
const socket_server_js_1 = require("./socket-server.js");
|
|
10
9
|
// Cache decorator options per working directory to avoid reading tsconfig for every file
|
|
11
10
|
const decoratorOptionsCache = new Map();
|
|
12
11
|
// Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)
|
|
13
12
|
let cachedBuildersModule = null;
|
|
14
13
|
let cachedLoaderStaticDependencies = null;
|
|
15
|
-
const discoveredPatternStateByFilePath = new Map();
|
|
16
|
-
// Cache socket connection to avoid reconnecting on every file.
|
|
17
|
-
let socketClientPromise = null;
|
|
18
|
-
let socketClient = null;
|
|
19
|
-
let socketClientKey = null;
|
|
20
|
-
const ROUTE_STUB_FILE_MARKER = 'WORKFLOW_ROUTE_STUB_FILE';
|
|
21
|
-
const ROUTE_STUB_BUILD_WAIT_TIMEOUT_MS = 120_000;
|
|
22
|
-
let pendingDeferredRouteStubBuildPromise = null;
|
|
23
14
|
function registerFileDependency(loaderContext, dependencyPath) {
|
|
24
15
|
loaderContext.addDependency?.(dependencyPath);
|
|
25
16
|
loaderContext.addBuildDependency?.(dependencyPath);
|
|
26
17
|
}
|
|
27
|
-
function updateDiscoveredPatternState(filePath, nextState) {
|
|
28
|
-
const previousState = discoveredPatternStateByFilePath.get(filePath);
|
|
29
|
-
const hasAnyPattern = nextState.hasWorkflow || nextState.hasStep || nextState.hasSerde;
|
|
30
|
-
if (!hasAnyPattern) {
|
|
31
|
-
if (!previousState) {
|
|
32
|
-
return { shouldNotify: false };
|
|
33
|
-
}
|
|
34
|
-
discoveredPatternStateByFilePath.delete(filePath);
|
|
35
|
-
return { shouldNotify: true, previousState };
|
|
36
|
-
}
|
|
37
|
-
if (previousState &&
|
|
38
|
-
previousState.hasWorkflow === nextState.hasWorkflow &&
|
|
39
|
-
previousState.hasStep === nextState.hasStep &&
|
|
40
|
-
previousState.hasSerde === nextState.hasSerde) {
|
|
41
|
-
return { shouldNotify: false, previousState };
|
|
42
|
-
}
|
|
43
|
-
discoveredPatternStateByFilePath.set(filePath, nextState);
|
|
44
|
-
return { shouldNotify: true, previousState };
|
|
45
|
-
}
|
|
46
18
|
function addIfExists(files, dependencyPath) {
|
|
47
19
|
if ((0, node_fs_1.existsSync)(dependencyPath)) {
|
|
48
20
|
files.add(dependencyPath);
|
|
@@ -61,7 +33,6 @@ function resolveLoaderStaticDependencies() {
|
|
|
61
33
|
const workflowBuildersPackageJsonPath = (0, node_path_1.join)((0, node_path_1.dirname)(workflowBuildersPath), '../package.json');
|
|
62
34
|
const files = new Set([
|
|
63
35
|
__filename,
|
|
64
|
-
require.resolve('./socket-server'),
|
|
65
36
|
swcPluginPath,
|
|
66
37
|
swcPluginBuildHashPath,
|
|
67
38
|
workflowBuildersPath,
|
|
@@ -81,286 +52,6 @@ function registerTransformDependencies(loaderContext) {
|
|
|
81
52
|
}
|
|
82
53
|
return staticDependencies.swcPluginPath;
|
|
83
54
|
}
|
|
84
|
-
function resetSocketClient(cachedSocket) {
|
|
85
|
-
if (cachedSocket && socketClient && socketClient !== cachedSocket) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
socketClientPromise = null;
|
|
89
|
-
socketClient = null;
|
|
90
|
-
socketClientKey = null;
|
|
91
|
-
}
|
|
92
|
-
async function writeSocketMessage(socket, message) {
|
|
93
|
-
await new Promise((resolve, reject) => {
|
|
94
|
-
socket.write(message, (error) => {
|
|
95
|
-
if (error) {
|
|
96
|
-
reject(error);
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
resolve();
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
function getSocketInfoFilePath() {
|
|
104
|
-
const configuredPath = process.env.WORKFLOW_SOCKET_INFO_PATH;
|
|
105
|
-
if (configuredPath) {
|
|
106
|
-
return configuredPath;
|
|
107
|
-
}
|
|
108
|
-
// Fallback for worker processes that don't inherit dynamic env updates
|
|
109
|
-
// from the process that created the socket server.
|
|
110
|
-
const distDir = process.env.WORKFLOW_NEXT_DIST_DIR || '.next';
|
|
111
|
-
const cwdFallbackPath = (0, node_path_1.join)(process.cwd(), distDir, 'cache', 'workflow-socket.json');
|
|
112
|
-
const projectRoot = process.env.WORKFLOW_PROJECT_ROOT;
|
|
113
|
-
if (projectRoot) {
|
|
114
|
-
const projectRootFallbackPath = (0, node_path_1.join)(projectRoot, distDir, 'cache', 'workflow-socket.json');
|
|
115
|
-
if ((0, node_fs_1.existsSync)(projectRootFallbackPath)) {
|
|
116
|
-
return projectRootFallbackPath;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return cwdFallbackPath;
|
|
120
|
-
}
|
|
121
|
-
function getSocketCredentialsFromEnv() {
|
|
122
|
-
const socketPort = process.env.WORKFLOW_SOCKET_PORT;
|
|
123
|
-
const authToken = process.env.WORKFLOW_SOCKET_AUTH;
|
|
124
|
-
if (!socketPort || !authToken) {
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
const port = Number.parseInt(socketPort, 10);
|
|
128
|
-
if (Number.isNaN(port)) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
return { port, authToken };
|
|
132
|
-
}
|
|
133
|
-
async function getSocketCredentialsFromFile() {
|
|
134
|
-
const socketInfoFilePath = getSocketInfoFilePath();
|
|
135
|
-
if (!socketInfoFilePath) {
|
|
136
|
-
return null;
|
|
137
|
-
}
|
|
138
|
-
if (!(0, node_fs_1.existsSync)(socketInfoFilePath)) {
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
try {
|
|
142
|
-
const raw = await (0, promises_1.readFile)(socketInfoFilePath, 'utf8');
|
|
143
|
-
const parsed = JSON.parse(raw);
|
|
144
|
-
const authToken = typeof parsed.authToken === 'string' ? parsed.authToken : null;
|
|
145
|
-
const numericPort = typeof parsed.port === 'number'
|
|
146
|
-
? parsed.port
|
|
147
|
-
: Number.parseInt(String(parsed.port), 10);
|
|
148
|
-
if (!authToken || Number.isNaN(numericPort)) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
return {
|
|
152
|
-
port: numericPort,
|
|
153
|
-
authToken,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
async function getSocketCredentials() {
|
|
161
|
-
const envCredentials = getSocketCredentialsFromEnv();
|
|
162
|
-
if (envCredentials) {
|
|
163
|
-
return envCredentials;
|
|
164
|
-
}
|
|
165
|
-
return await getSocketCredentialsFromFile();
|
|
166
|
-
}
|
|
167
|
-
async function getSocketClient() {
|
|
168
|
-
const socketCredentials = await getSocketCredentials();
|
|
169
|
-
if (!socketCredentials) {
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
if (socketClient?.destroyed) {
|
|
173
|
-
resetSocketClient(socketClient);
|
|
174
|
-
}
|
|
175
|
-
const currentSocketKey = `${socketCredentials.port}:${socketCredentials.authToken}`;
|
|
176
|
-
if (socketClientKey && socketClientKey !== currentSocketKey) {
|
|
177
|
-
if (socketClient) {
|
|
178
|
-
resetSocketClient(socketClient);
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
resetSocketClient();
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (!socketClientPromise) {
|
|
185
|
-
socketClientPromise = (async () => {
|
|
186
|
-
try {
|
|
187
|
-
const socket = (0, node_net_1.connect)({
|
|
188
|
-
port: socketCredentials.port,
|
|
189
|
-
host: '127.0.0.1',
|
|
190
|
-
});
|
|
191
|
-
// Wait for connection
|
|
192
|
-
await new Promise((resolve, reject) => {
|
|
193
|
-
const onConnect = () => {
|
|
194
|
-
socket.setNoDelay(true);
|
|
195
|
-
cleanup();
|
|
196
|
-
resolve();
|
|
197
|
-
};
|
|
198
|
-
const onError = (error) => {
|
|
199
|
-
cleanup();
|
|
200
|
-
reject(error);
|
|
201
|
-
};
|
|
202
|
-
const timeout = setTimeout(() => {
|
|
203
|
-
cleanup();
|
|
204
|
-
socket.destroy();
|
|
205
|
-
reject(new Error('Socket connection timeout'));
|
|
206
|
-
}, 1000);
|
|
207
|
-
const cleanup = () => {
|
|
208
|
-
clearTimeout(timeout);
|
|
209
|
-
socket.off('connect', onConnect);
|
|
210
|
-
socket.off('error', onError);
|
|
211
|
-
};
|
|
212
|
-
socket.on('connect', onConnect);
|
|
213
|
-
socket.on('error', onError);
|
|
214
|
-
});
|
|
215
|
-
socket.on('close', () => {
|
|
216
|
-
resetSocketClient(socket);
|
|
217
|
-
});
|
|
218
|
-
socket.on('error', () => {
|
|
219
|
-
resetSocketClient(socket);
|
|
220
|
-
});
|
|
221
|
-
socketClient = socket;
|
|
222
|
-
socketClientKey = currentSocketKey;
|
|
223
|
-
return socket;
|
|
224
|
-
}
|
|
225
|
-
catch (error) {
|
|
226
|
-
resetSocketClient();
|
|
227
|
-
throw error;
|
|
228
|
-
}
|
|
229
|
-
})();
|
|
230
|
-
}
|
|
231
|
-
return socketClientPromise;
|
|
232
|
-
}
|
|
233
|
-
async function notifySocketServer(filename, hasWorkflow, hasStep, hasSerde) {
|
|
234
|
-
const socketCredentials = await getSocketCredentials();
|
|
235
|
-
if (!socketCredentials) {
|
|
236
|
-
return;
|
|
237
|
-
}
|
|
238
|
-
const socket = await getSocketClient();
|
|
239
|
-
if (!socket) {
|
|
240
|
-
throw new Error('Invariant: missing workflow socket connection');
|
|
241
|
-
}
|
|
242
|
-
const message = {
|
|
243
|
-
type: 'file-discovered',
|
|
244
|
-
filePath: filename,
|
|
245
|
-
hasWorkflow,
|
|
246
|
-
hasStep,
|
|
247
|
-
hasSerde,
|
|
248
|
-
};
|
|
249
|
-
const serializedMessage = (0, socket_server_js_1.serializeMessage)(message, socketCredentials.authToken);
|
|
250
|
-
try {
|
|
251
|
-
await writeSocketMessage(socket, serializedMessage);
|
|
252
|
-
}
|
|
253
|
-
catch (error) {
|
|
254
|
-
resetSocketClient(socket);
|
|
255
|
-
const reconnectedSocket = await getSocketClient();
|
|
256
|
-
if (!reconnectedSocket) {
|
|
257
|
-
throw error;
|
|
258
|
-
}
|
|
259
|
-
await writeSocketMessage(reconnectedSocket, serializedMessage);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
function isWorkflowRouteStubSource(source) {
|
|
263
|
-
return source.includes(ROUTE_STUB_FILE_MARKER);
|
|
264
|
-
}
|
|
265
|
-
async function createSocketConnection(socketCredentials, timeoutMs = 1_000) {
|
|
266
|
-
return await new Promise((resolve, reject) => {
|
|
267
|
-
const socket = (0, node_net_1.connect)({
|
|
268
|
-
port: socketCredentials.port,
|
|
269
|
-
host: '127.0.0.1',
|
|
270
|
-
});
|
|
271
|
-
const timeout = setTimeout(() => {
|
|
272
|
-
cleanup();
|
|
273
|
-
socket.destroy();
|
|
274
|
-
reject(new Error('Socket connection timeout'));
|
|
275
|
-
}, timeoutMs);
|
|
276
|
-
const cleanup = () => {
|
|
277
|
-
clearTimeout(timeout);
|
|
278
|
-
socket.off('connect', onConnect);
|
|
279
|
-
socket.off('error', onError);
|
|
280
|
-
};
|
|
281
|
-
const onConnect = () => {
|
|
282
|
-
socket.setNoDelay(true);
|
|
283
|
-
cleanup();
|
|
284
|
-
resolve(socket);
|
|
285
|
-
};
|
|
286
|
-
const onError = (error) => {
|
|
287
|
-
cleanup();
|
|
288
|
-
socket.destroy();
|
|
289
|
-
reject(error);
|
|
290
|
-
};
|
|
291
|
-
socket.on('connect', onConnect);
|
|
292
|
-
socket.on('error', onError);
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
async function waitForDeferredBuildComplete(socket, authToken, timeoutMs = ROUTE_STUB_BUILD_WAIT_TIMEOUT_MS) {
|
|
296
|
-
await new Promise((resolve, reject) => {
|
|
297
|
-
let buffer = '';
|
|
298
|
-
const timeout = setTimeout(() => {
|
|
299
|
-
cleanup();
|
|
300
|
-
reject(new Error('Timed out waiting for deferred route build completion'));
|
|
301
|
-
}, timeoutMs);
|
|
302
|
-
const cleanup = () => {
|
|
303
|
-
clearTimeout(timeout);
|
|
304
|
-
socket.off('data', onData);
|
|
305
|
-
socket.off('error', onError);
|
|
306
|
-
socket.off('close', onClose);
|
|
307
|
-
socket.off('end', onClose);
|
|
308
|
-
};
|
|
309
|
-
const onError = (error) => {
|
|
310
|
-
cleanup();
|
|
311
|
-
reject(error);
|
|
312
|
-
};
|
|
313
|
-
const onClose = () => {
|
|
314
|
-
cleanup();
|
|
315
|
-
reject(new Error('Socket closed before deferred route build completed'));
|
|
316
|
-
};
|
|
317
|
-
const onData = (chunk) => {
|
|
318
|
-
buffer += chunk.toString();
|
|
319
|
-
let newlineIndex = buffer.indexOf('\n');
|
|
320
|
-
while (newlineIndex !== -1) {
|
|
321
|
-
const line = buffer.slice(0, newlineIndex);
|
|
322
|
-
buffer = buffer.slice(newlineIndex + 1);
|
|
323
|
-
newlineIndex = buffer.indexOf('\n');
|
|
324
|
-
const message = (0, socket_server_js_1.parseMessage)(line, authToken);
|
|
325
|
-
if (message?.type === 'build-complete') {
|
|
326
|
-
cleanup();
|
|
327
|
-
resolve();
|
|
328
|
-
return;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
};
|
|
332
|
-
socket.on('data', onData);
|
|
333
|
-
socket.on('error', onError);
|
|
334
|
-
socket.on('close', onClose);
|
|
335
|
-
socket.on('end', onClose);
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
async function triggerDeferredRouteStubBuildAndWait() {
|
|
339
|
-
const socketCredentials = await getSocketCredentials();
|
|
340
|
-
if (!socketCredentials) {
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
const socket = await createSocketConnection(socketCredentials);
|
|
344
|
-
try {
|
|
345
|
-
await writeSocketMessage(socket, (0, socket_server_js_1.serializeMessage)({ type: 'trigger-build' }, socketCredentials.authToken));
|
|
346
|
-
await waitForDeferredBuildComplete(socket, socketCredentials.authToken);
|
|
347
|
-
}
|
|
348
|
-
finally {
|
|
349
|
-
socket.destroy();
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
async function ensureDeferredRouteStubBuildAndWait() {
|
|
353
|
-
if (pendingDeferredRouteStubBuildPromise) {
|
|
354
|
-
return pendingDeferredRouteStubBuildPromise;
|
|
355
|
-
}
|
|
356
|
-
const pendingPromise = triggerDeferredRouteStubBuildAndWait();
|
|
357
|
-
pendingDeferredRouteStubBuildPromise = pendingPromise.finally(() => {
|
|
358
|
-
if (pendingDeferredRouteStubBuildPromise === pendingPromise) {
|
|
359
|
-
pendingDeferredRouteStubBuildPromise = null;
|
|
360
|
-
}
|
|
361
|
-
});
|
|
362
|
-
return pendingDeferredRouteStubBuildPromise;
|
|
363
|
-
}
|
|
364
55
|
async function getBuildersModule() {
|
|
365
56
|
if (cachedBuildersModule) {
|
|
366
57
|
return cachedBuildersModule;
|
|
@@ -402,6 +93,26 @@ async function resolveWorkflowAliasPath(filePath, workingDir) {
|
|
|
402
93
|
const { resolveWorkflowAliasRelativePath } = await getBuildersModule();
|
|
403
94
|
return resolveWorkflowAliasRelativePath(filePath, workingDir);
|
|
404
95
|
}
|
|
96
|
+
async function injectWorkflowTargetWorldImport(source, buildersModule) {
|
|
97
|
+
const targetModule = buildersModule?.WORKFLOW_WORLD_TARGET_MODULE ??
|
|
98
|
+
'@workflow/core/runtime/world-target';
|
|
99
|
+
if (!source.includes(targetModule)) {
|
|
100
|
+
return source;
|
|
101
|
+
}
|
|
102
|
+
const { ensureWorkflowTargetWorldEnv, WORKFLOW_WORLD_TARGET_MODULE } = buildersModule ?? (await getBuildersModule());
|
|
103
|
+
return source.replaceAll(WORKFLOW_WORLD_TARGET_MODULE, ensureWorkflowTargetWorldEnv());
|
|
104
|
+
}
|
|
105
|
+
function parseTransformMap(resultMap, fallbackMap) {
|
|
106
|
+
if (typeof resultMap !== 'string') {
|
|
107
|
+
return resultMap || fallbackMap;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
return JSON.parse(resultMap);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return resultMap;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
405
116
|
async function getRelativeFilenameForSwc(filename, workingDir) {
|
|
406
117
|
const normalizedWorkingDir = workingDir
|
|
407
118
|
.replace(/\\/g, '/')
|
|
@@ -442,6 +153,17 @@ async function getRelativeFilenameForSwc(filename, workingDir) {
|
|
|
442
153
|
}
|
|
443
154
|
return relativeFilename;
|
|
444
155
|
}
|
|
156
|
+
function isNodeModulesPath(filename) {
|
|
157
|
+
return /(?:^|[/\\])node_modules(?:[/\\]|$)/.test(filename);
|
|
158
|
+
}
|
|
159
|
+
function getLoaderSourceMapOptions(filename, sourceMap) {
|
|
160
|
+
const shouldEmitSourceMaps = !isNodeModulesPath(filename);
|
|
161
|
+
return {
|
|
162
|
+
inputSourceMap: shouldEmitSourceMaps ? (sourceMap ?? false) : false,
|
|
163
|
+
sourceMaps: shouldEmitSourceMaps,
|
|
164
|
+
inlineSourcesContent: shouldEmitSourceMaps,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
445
167
|
function workflowLoader(source, sourceMap) {
|
|
446
168
|
const callback = this.async?.();
|
|
447
169
|
const run = async () => {
|
|
@@ -449,43 +171,17 @@ function workflowLoader(source, sourceMap) {
|
|
|
449
171
|
const normalizedSource = source.toString();
|
|
450
172
|
const workingDir = process.cwd();
|
|
451
173
|
const swcPluginPath = registerTransformDependencies(this);
|
|
452
|
-
const sourceForTransform = normalizedSource;
|
|
174
|
+
const sourceForTransform = await injectWorkflowTargetWorldImport(normalizedSource);
|
|
453
175
|
const isGeneratedWorkflowFile = await checkGeneratedFile(filename);
|
|
454
176
|
// Skip generated workflow route files to avoid re-processing them.
|
|
455
|
-
// Deferred route stubs are a special case: wait for the generated route
|
|
456
|
-
// output to become available before returning.
|
|
457
177
|
if (isGeneratedWorkflowFile) {
|
|
458
|
-
|
|
459
|
-
isWorkflowRouteStubSource(normalizedSource)) {
|
|
460
|
-
try {
|
|
461
|
-
await ensureDeferredRouteStubBuildAndWait();
|
|
462
|
-
const refreshedSource = await (0, promises_1.readFile)(filename, 'utf8');
|
|
463
|
-
if (!isWorkflowRouteStubSource(refreshedSource)) {
|
|
464
|
-
return { code: refreshedSource, map: sourceMap };
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
catch (error) {
|
|
468
|
-
console.warn(`[workflow] Failed waiting for deferred route build for ${filename}, using stub output`, error);
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
return { code: normalizedSource, map: sourceMap };
|
|
178
|
+
return { code: sourceForTransform, map: sourceMap };
|
|
472
179
|
}
|
|
473
180
|
// Detect workflow patterns in the source code.
|
|
474
181
|
const patterns = await detectPatterns(sourceForTransform);
|
|
475
|
-
// Always notify discovery tracking, even for `false/false`, so files that
|
|
476
|
-
// previously had workflow/step usage are removed from the tracked sets.
|
|
477
|
-
const nextPatternState = {
|
|
478
|
-
hasWorkflow: patterns.hasUseWorkflow,
|
|
479
|
-
hasStep: patterns.hasUseStep,
|
|
480
|
-
hasSerde: patterns.hasSerde,
|
|
481
|
-
};
|
|
482
|
-
const { shouldNotify } = updateDiscoveredPatternState(filename, nextPatternState);
|
|
483
|
-
if (shouldNotify) {
|
|
484
|
-
await notifySocketServer(filename, nextPatternState.hasWorkflow, nextPatternState.hasStep, nextPatternState.hasSerde);
|
|
485
|
-
}
|
|
486
182
|
// Check if file needs transformation based on patterns and path
|
|
487
183
|
if (!(await checkShouldTransform(filename, patterns))) {
|
|
488
|
-
return { code:
|
|
184
|
+
return { code: sourceForTransform, map: sourceMap };
|
|
489
185
|
}
|
|
490
186
|
const isTypeScript = filename.endsWith('.ts') ||
|
|
491
187
|
filename.endsWith('.tsx') ||
|
|
@@ -521,6 +217,7 @@ function workflowLoader(source, sourceMap) {
|
|
|
521
217
|
},
|
|
522
218
|
target: 'es2022',
|
|
523
219
|
experimental: {
|
|
220
|
+
cacheRoot: (0, node_path_1.join)(workingDir, '.swc'),
|
|
524
221
|
plugins: [[swcPluginPath, { mode, moduleSpecifier }]],
|
|
525
222
|
},
|
|
526
223
|
transform: {
|
|
@@ -532,22 +229,9 @@ function workflowLoader(source, sourceMap) {
|
|
|
532
229
|
},
|
|
533
230
|
},
|
|
534
231
|
minify: false,
|
|
535
|
-
|
|
536
|
-
sourceMaps: true,
|
|
537
|
-
inlineSourcesContent: true,
|
|
232
|
+
...getLoaderSourceMapOptions(filename, sourceMap),
|
|
538
233
|
});
|
|
539
|
-
|
|
540
|
-
if (typeof result.map === 'string') {
|
|
541
|
-
try {
|
|
542
|
-
transformedMap = JSON.parse(result.map);
|
|
543
|
-
}
|
|
544
|
-
catch {
|
|
545
|
-
transformedMap = result.map;
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
else if (result.map) {
|
|
549
|
-
transformedMap = result.map;
|
|
550
|
-
}
|
|
234
|
+
const transformedMap = parseTransformMap(result.map, sourceMap);
|
|
551
235
|
return { code: result.code, map: transformedMap };
|
|
552
236
|
};
|
|
553
237
|
if (!callback) {
|
|
@@ -559,4 +243,4 @@ function workflowLoader(source, sourceMap) {
|
|
|
559
243
|
callback(error instanceof Error ? error : new Error(String(error)));
|
|
560
244
|
});
|
|
561
245
|
}
|
|
562
|
-
//# sourceMappingURL=loader.js.map
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1KQSwwRUFxQkM7QUFxRUQsOERBT0M7QUFnQkQsaUNBb0dDO0FBeFdELHFDQUFxQztBQUNyQyx5Q0FBb0Q7QUFDcEQsb0NBQXNDO0FBTXRDLHlGQUF5RjtBQUN6RixNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUdsQyxDQUFDO0FBQ0oseUdBQXlHO0FBQ3pHLElBQUksb0JBQW9CLEdBQStDLElBQUksQ0FBQztBQUs1RSxJQUFJLDhCQUE4QixHQUFvQyxJQUFJLENBQUM7QUFFM0UsU0FBUyxzQkFBc0IsQ0FDN0IsYUFBb0MsRUFDcEMsY0FBc0I7SUFFdEIsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFrQixFQUFFLGNBQXNCO0lBQzdELElBQUksSUFBQSxvQkFBVSxFQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsK0JBQStCO0lBQ3RDLElBQUksOEJBQThCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLDhCQUE4QixDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDOUQsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUM1QyxzQ0FBc0MsQ0FDdkMsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRW5FLCtEQUErRDtJQUMvRCxvRUFBb0U7SUFDcEUs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aUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCO2lCQUN0RDthQUNGO1lBQ0QsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3BELENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssR0FBRyxFQUFFO1NBQ1AsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pELEtBQUssQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLFFBQVEsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnQHN3Yy9jb3JlJztcblxudHlwZSBEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGggPVxuICBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLkRlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aDtcbnR5cGUgV29ya2Zsb3dQYXR0ZXJuTWF0Y2ggPSBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLldvcmtmbG93UGF0dGVybk1hdGNoO1xuXG4vLyBDYWNoZSBkZWNvcmF0b3Igb3B0aW9ucyBwZXIgd29ya2luZyBkaXJlY3RvcnkgdG8gYXZvaWQgcmVhZGluZyB0c2NvbmZpZyBmb3IgZXZlcnkgZmlsZVxuY29uc3QgZGVjb3JhdG9yT3B0aW9uc0NhY2hlID0gbmV3IE1hcDxcbiAgc3RyaW5nLFxuICBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD5cbj4oKTtcbi8vIENhY2hlIGZvciBzaGFyZWQgdXRpbGl0aWVzIGZyb20gQHdvcmtmbG93L2J1aWxkZXJzIChFU00gbW9kdWxlIGxvYWRlZCBkeW5hbWljYWxseSBpbiBDb21tb25KUyBjb250ZXh0KVxubGV0IGNhY2hlZEJ1aWxkZXJzTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSB8IG51bGwgPSBudWxsO1xudHlwZSBMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMgPSB7XG4gIHN3Y1BsdWdpblBhdGg6IHN0cmluZztcbiAgZmlsZXM6IHN0cmluZ1tdO1xufTtcbmxldCBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiByZWdpc3RlckZpbGVEZXBlbmRlbmN5KFxuICBsb2FkZXJDb250ZXh0OiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmdcbik6IHZvaWQge1xuICBsb2FkZXJDb250ZXh0LmFkZERlcGVuZGVuY3k/LihkZXBlbmRlbmN5UGF0aCk7XG4gIGxvYWRlckNvbnRleHQuYWRkQnVpbGREZXBlbmRlbmN5Py4oZGVwZW5kZW5jeVBhdGgpO1xufVxuXG5mdW5jdGlvbiBhZGRJZkV4aXN0cyhmaWxlczogU2V0PHN0cmluZz4sIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGV4aXN0c1N5bmMoZGVwZW5kZW5jeVBhdGgpKSB7XG4gICAgZmlsZXMuYWRkKGRlcGVuZGVuY3lQYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB7XG4gIGlmIChjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMpIHtcbiAgICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L3N3Yy1wbHVnaW4nKTtcbiAgY29uc3Qgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShcbiAgICAnQHdvcmtmbG93L3N3Yy1wbHVnaW4vYnVpbGQtaGFzaC5qc29uJ1xuICApO1xuICBjb25zdCB3b3JrZmxvd0J1aWxkZXJzUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L2J1aWxkZXJzJyk7XG5cbiAgLy8gRGVyaXZlIHBhY2thZ2UuanNvbiBwYXRocyBmcm9tIHJlc29sdmVkIGVudHJ5cG9pbnRzIHRvIGF2b2lkXG4gIC8vIFR1cmJvcGFjayBsb2FkZXItZXZhbCBmYWlsdXJlcyBhcm91bmQgLi4vcGFja2FnZS5qc29uIHJlc29sdXRpb24uXG4gIGNvbnN0IHN3Y1BsdWdpblBhY2thZ2VKc29uUGF0aCA9IGpvaW4oZGlybmFtZShzd2NQbHVnaW5QYXRoKSwgJ3BhY2thZ2UuanNvbicpO1xuICBjb25zdCB3b3JrZmxvd0J1aWxkZXJzUGFja2FnZUpzb25QYXRoID0gam9pbihcbiAgICBkaXJuYW1lKHdvcmtmbG93QnVpbGRlcnNQYXRoKSxcbiAgICAnLi4vcGFja2FnZS5qc29uJ1xuICApO1xuXG4gIGNvbnN0IGZpbGVzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICBfX2ZpbGVuYW1lLFxuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCxcbiAgICB3b3JrZmxvd0J1aWxkZXJzUGF0aCxcbiAgXSk7XG4gIGFkZElmRXhpc3RzKGZpbGVzLCBzd2NQbHVnaW5QYWNrYWdlSnNvblBhdGgpO1xuICBhZGRJZkV4aXN0cyhmaWxlcywgd29ya2Zsb3dCdWlsZGVyc1BhY2thZ2VKc29uUGF0aCk7XG5cbiAgY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzID0ge1xuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgZmlsZXM6IEFycmF5LmZyb20oZmlsZXMpLFxuICB9O1xuICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlclRyYW5zZm9ybURlcGVuZGVuY2llcyhcbiAgbG9hZGVyQ29udGV4dDogV29ya2Zsb3dMb2FkZXJDb250ZXh0XG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0aWNEZXBlbmRlbmNpZXMgPSByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk7XG4gIGZvciAoY29uc3QgZGVwZW5kZW5jeVBhdGggb2Ygc3RhdGljRGVwZW5kZW5jaWVzLmZpbGVzKSB7XG4gICAgcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeShsb2FkZXJDb250ZXh0LCBkZXBlbmRlbmN5UGF0aCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGljRGVwZW5kZW5jaWVzLnN3Y1BsdWdpblBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJ1aWxkZXJzTW9kdWxlKCk6IFByb21pc2U8XG4gIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpXG4+IHtcbiAgaWYgKGNhY2hlZEJ1aWxkZXJzTW9kdWxlKSB7XG4gICAgcmV0dXJuIGNhY2hlZEJ1aWxkZXJzTW9kdWxlO1xuICB9XG4gIC8vIER5bmFtaWMgaW1wb3J0IHRvIGhhbmRsZSBFU00gbW9kdWxlIGZyb20gQ29tbW9uSlMgY29udGV4dFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6IE5lZWQgdG8gdXNlIGV2YWwgaGVyZSB0byBhdm9pZCBUeXBlU2NyaXB0IGZyb20gdHJhbnNwaWxpbmcgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaW50byBgcmVxdWlyZSgpYFxuICBjYWNoZWRCdWlsZGVyc01vZHVsZSA9IChhd2FpdCBldmFsKFxuICAgICdpbXBvcnQoXCJAd29ya2Zsb3cvYnVpbGRlcnNcIiknXG4gICkpIGFzIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpO1xuICByZXR1cm4gY2FjaGVkQnVpbGRlcnNNb2R1bGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERlY29yYXRvck9wdGlvbnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGg+IHtcbiAgY29uc3QgY2FjaGVkID0gZGVjb3JhdG9yT3B0aW9uc0NhY2hlLmdldCh3b3JraW5nRGlyKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBjb25zdCBwcm9taXNlID0gKGFzeW5jICgpOiBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD4gPT4ge1xuICAgIGNvbnN0IHsgZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoIH0gPVxuICAgICAgYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgICByZXR1cm4gZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoKHdvcmtpbmdEaXIpO1xuICB9KSgpO1xuXG4gIGRlY29yYXRvck9wdGlvbnNDYWNoZS5zZXQod29ya2luZ0RpciwgcHJvbWlzZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8V29ya2Zsb3dQYXR0ZXJuTWF0Y2g+IHtcbiAgY29uc3QgeyBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUoZmlsZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja1Nob3VsZFRyYW5zZm9ybShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcGF0dGVybnM6IFdvcmtmbG93UGF0dGVybk1hdGNoXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBzaG91bGRUcmFuc2Zvcm1GaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gc2hvdWxkVHJhbnNmb3JtRmlsZShmaWxlUGF0aCwgcGF0dGVybnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoZmlsZVBhdGgsIHByb2plY3RSb290KS5tb2R1bGVTcGVjaWZpZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd0FsaWFzUGF0aChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoZmlsZVBhdGgsIHdvcmtpbmdEaXIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5qZWN0V29ya2Zsb3dUYXJnZXRXb3JsZEltcG9ydChcbiAgc291cmNlOiBzdHJpbmcsXG4gIGJ1aWxkZXJzTW9kdWxlPzogUGljazxcbiAgICB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSxcbiAgICAnZW5zdXJlV29ya2Zsb3dUYXJnZXRXb3JsZEVudicgfCAnV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSdcbiAgPlxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgdGFyZ2V0TW9kdWxlID1cbiAgICBidWlsZGVyc01vZHVsZT8uV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSA/P1xuICAgICdAd29ya2Zsb3cvY29yZS9ydW50aW1lL3dvcmxkLXRhcmdldCc7XG4gIGlmICghc291cmNlLmluY2x1ZGVzKHRhcmdldE1vZHVsZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3QgeyBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52LCBXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFIH0gPVxuICAgIGJ1aWxkZXJzTW9kdWxlID8/IChhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpKTtcblxuICByZXR1cm4gc291cmNlLnJlcGxhY2VBbGwoXG4gICAgV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSxcbiAgICBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KClcbiAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm1NYXAocmVzdWx0TWFwOiB1bmtub3duLCBmYWxsYmFja01hcDogYW55KTogYW55IHtcbiAgaWYgKHR5cGVvZiByZXN1bHRNYXAgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHJlc3VsdE1hcCB8fCBmYWxsYmFja01hcDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0TWFwKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHJlc3VsdE1hcDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZWxhdGl2ZUZpbGVuYW1lRm9yU3djKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gd29ya2luZ0RpclxuICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVwYXRoID0gZmlsZW5hbWUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIC8vIFdpbmRvd3MgZml4OiBVc2UgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uIHRvIHdvcmsgYXJvdW5kIGRyaXZlIGxldHRlciBjYXNpbmcgaXNzdWVzXG4gIGNvbnN0IGxvd2VyV2QgPSBub3JtYWxpemVkV29ya2luZ0Rpci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsb3dlclBhdGggPSBub3JtYWxpemVkRmlsZXBhdGgudG9Mb3dlckNhc2UoKTtcblxuICBsZXQgcmVsYXRpdmVGaWxlbmFtZTogc3RyaW5nO1xuICBpZiAobG93ZXJQYXRoLnN0YXJ0c1dpdGgoYCR7bG93ZXJXZH0vYCkpIHtcbiAgICAvLyBGaWxlIGlzIHVuZGVyIHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFudWFsbHkgY2FsY3VsYXRlIHJlbGF0aXZlIHBhdGhcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVwYXRoLnN1YnN0cmluZyhcbiAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLmxlbmd0aCArIDFcbiAgICApO1xuICB9IGVsc2UgaWYgKGxvd2VyUGF0aCA9PT0gbG93ZXJXZCkge1xuICAgIC8vIEZpbGUgSVMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChzaG91bGRuJ3QgaGFwcGVuKVxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSAnLic7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHJlbGF0aXZlKCkgZm9yIGZpbGVzIG91dHNpZGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gcmVsYXRpdmUod29ya2luZ0RpciwgZmlsZW5hbWUpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgIGlmIChyZWxhdGl2ZUZpbGVuYW1lLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICBjb25zdCBhbGlhc2VkUmVsYXRpdmVQYXRoID0gYXdhaXQgcmVzb2x2ZVdvcmtmbG93QWxpYXNQYXRoKFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgd29ya2luZ0RpclxuICAgICAgKTtcbiAgICAgIGlmIChhbGlhc2VkUmVsYXRpdmVQYXRoKSB7XG4gICAgICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBhbGlhc2VkUmVsYXRpdmVQYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVsYXRpdmVGaWxlbmFtZSA9IHJlbGF0aXZlRmlsZW5hbWVcbiAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5hbCBzYWZldHkgY2hlY2sgLSBlbnN1cmUgd2UgbmV2ZXIgcGFzcyBhbiBhYnNvbHV0ZSBwYXRoIHRvIFNXQ1xuICBpZiAocmVsYXRpdmVGaWxlbmFtZS5pbmNsdWRlcygnOicpIHx8IHJlbGF0aXZlRmlsZW5hbWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgcmFyZWx5IGhhcHBlbiwgYnV0IHVzZSBmaWxlbmFtZSBzcGxpdCBhcyBsYXN0IHJlc29ydFxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBub3JtYWxpemVkRmlsZXBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCAndW5rbm93bi50cyc7XG4gIH1cblxuICByZXR1cm4gcmVsYXRpdmVGaWxlbmFtZTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlTW9kdWxlc1BhdGgoZmlsZW5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gLyg/Ol58Wy9cXFxcXSlub2RlX21vZHVsZXMoPzpbL1xcXFxdfCQpLy50ZXN0KGZpbGVuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvYWRlclNvdXJjZU1hcE9wdGlvbnMoZmlsZW5hbWU6IHN0cmluZywgc291cmNlTWFwOiBhbnkpIHtcbiAgY29uc3Qgc2hvdWxkRW1pdFNvdXJjZU1hcHMgPSAhaXNOb2RlTW9kdWxlc1BhdGgoZmlsZW5hbWUpO1xuICByZXR1cm4ge1xuICAgIGlucHV0U291cmNlTWFwOiBzaG91bGRFbWl0U291cmNlTWFwcyA/IChzb3VyY2VNYXAgPz8gZmFsc2UpIDogZmFsc2UsXG4gICAgc291cmNlTWFwczogc2hvdWxkRW1pdFNvdXJjZU1hcHMsXG4gICAgaW5saW5lU291cmNlc0NvbnRlbnQ6IHNob3VsZEVtaXRTb3VyY2VNYXBzLFxuICB9O1xufVxuXG4vLyBUaGlzIGxvYWRlciBhcHBsaWVzIHRoZSBcInVzZSB3b3JrZmxvd1wiL1widXNlIHN0ZXBcIiB0cmFuc2Zvcm0uXG4vLyBBbGwgZmlsZXMgdXNlIHN0ZXAgbW9kZTsgdGhlIFNXQyBwbHVnaW4gZGVjaWRlcyBwZXItZnVuY3Rpb24gd2hldGhlclxuLy8gdG8gZW1pdCB3b3JrZmxvdyBvciBzdGVwIGJpbmRpbmdzIGJhc2VkIG9uIHRoZSBzb3VyY2UncyBkaXJlY3RpdmVzLlxudHlwZSBXb3JrZmxvd0xvYWRlckNvbnRleHQgPSB7XG4gIHJlc291cmNlUGF0aDogc3RyaW5nO1xuICBhc3luYz86ICgpID0+IChcbiAgICBlcnJvcjogRXJyb3IgfCBudWxsLFxuICAgIGNvbnRlbnQ/OiBzdHJpbmcsXG4gICAgc291cmNlTWFwPzogYW55XG4gICkgPT4gdm9pZDtcbiAgYWRkRGVwZW5kZW5jeT86IChkZXBlbmRlbmN5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEJ1aWxkRGVwZW5kZW5jeT86IChkZXBlbmRlbmN5OiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3b3JrZmxvd0xvYWRlcihcbiAgdGhpczogV29ya2Zsb3dMb2FkZXJDb250ZXh0LFxuICBzb3VyY2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgc291cmNlTWFwOiBhbnlcbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5hc3luYz8uKCk7XG4gIGNvbnN0IHJ1biA9IGFzeW5jICgpOiBQcm9taXNlPHsgY29kZTogc3RyaW5nOyBtYXA6IGFueSB9PiA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnJlc291cmNlUGF0aDtcbiAgICBjb25zdCBub3JtYWxpemVkU291cmNlID0gc291cmNlLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKHRoaXMpO1xuICAgIGNvbnN0IHNvdXJjZUZvclRyYW5zZm9ybSA9XG4gICAgICBhd2FpdCBpbmplY3RXb3JrZmxvd1RhcmdldFdvcmxkSW1wb3J0KG5vcm1hbGl6ZWRTb3VyY2UpO1xuXG4gICAgY29uc3QgaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUgPSBhd2FpdCBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZW5hbWUpO1xuICAgIC8vIFNraXAgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIHRvIGF2b2lkIHJlLXByb2Nlc3NpbmcgdGhlbS5cbiAgICBpZiAoaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUpIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IHNvdXJjZUZvclRyYW5zZm9ybSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3Qgd29ya2Zsb3cgcGF0dGVybnMgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgIGNvbnN0IHBhdHRlcm5zID0gYXdhaXQgZGV0ZWN0UGF0dGVybnMoc291cmNlRm9yVHJhbnNmb3JtKTtcblxuICAgIC8vIENoZWNrIGlmIGZpbGUgbmVlZHMgdHJhbnNmb3JtYXRpb24gYmFzZWQgb24gcGF0dGVybnMgYW5kIHBhdGhcbiAgICBpZiAoIShhd2FpdCBjaGVja1Nob3VsZFRyYW5zZm9ybShmaWxlbmFtZSwgcGF0dGVybnMpKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogc291cmNlRm9yVHJhbnNmb3JtLCBtYXA6IHNvdXJjZU1hcCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlzVHlwZVNjcmlwdCA9XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzJykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcudHN4JykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcubXRzJykgfHxcbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcuY3RzJyk7XG5cbiAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgZmlsZW5hbWUgZm9yIFNXQyBwbHVnaW5cbiAgICAvLyBUaGUgU1dDIHBsdWdpbiB1c2VzIGZpbGVuYW1lIHRvIGdlbmVyYXRlIHdvcmtmbG93SWQsIHNvIGl0IG11c3QgYmUgcmVsYXRpdmVcbiAgICBjb25zdCByZWxhdGl2ZUZpbGVuYW1lID0gYXdhaXQgZ2V0UmVsYXRpdmVGaWxlbmFtZUZvclN3YyhcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgd29ya2luZ0RpclxuICAgICk7XG5cbiAgICAvLyBHZXQgZGVjb3JhdG9yIG9wdGlvbnMgZnJvbSB0c2NvbmZpZyAoY2FjaGVkIHBlciB3b3JraW5nIGRpcmVjdG9yeSlcbiAgICBjb25zdCB7IG9wdGlvbnM6IGRlY29yYXRvck9wdGlvbnMsIGNvbmZpZ1BhdGggfSA9XG4gICAgICBhd2FpdCBnZXREZWNvcmF0b3JPcHRpb25zKHdvcmtpbmdEaXIpO1xuICAgIGlmIChjb25maWdQYXRoKSB7XG4gICAgICByZWdpc3RlckZpbGVEZXBlbmRlbmN5KHRoaXMsIGNvbmZpZ1BhdGgpO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgbW9kdWxlIHNwZWNpZmllciBmb3IgcGFja2FnZXMgKG5vZGVfbW9kdWxlcyBvciB3b3Jrc3BhY2UgcGFja2FnZXMpXG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gYXdhaXQgZ2V0TW9kdWxlU3BlY2lmaWVyKGZpbGVuYW1lLCB3b3JraW5nRGlyKTtcbiAgICBjb25zdCBtb2RlID0gJ3N0ZXAnO1xuXG4gICAgLy8gVHJhbnNmb3JtIHdpdGggU1dDXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhbnNmb3JtKHNvdXJjZUZvclRyYW5zZm9ybSwge1xuICAgICAgZmlsZW5hbWU6IHJlbGF0aXZlRmlsZW5hbWUsXG4gICAgICBqc2M6IHtcbiAgICAgICAgcGFyc2VyOiB7XG4gICAgICAgICAgLi4uKGlzVHlwZVNjcmlwdFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICAgICAgICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzeCcpLFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9ycyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgc3ludGF4OiAnZWNtYXNjcmlwdCcsXG4gICAgICAgICAgICAgICAganN4OiBmaWxlbmFtZS5lbmRzV2l0aCgnLmpzeCcpLFxuICAgICAgICAgICAgICAgIGRlY29yYXRvcnM6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9ycyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIHRhcmdldDogJ2VzMjAyMicsXG4gICAgICAgIGV4cGVyaW1lbnRhbDoge1xuICAgICAgICAgIGNhY2hlUm9vdDogam9pbih3b3JraW5nRGlyLCAnLnN3YycpLFxuICAgICAgICAgIHBsdWdpbnM6IFtbc3djUGx1Z2luUGF0aCwgeyBtb2RlLCBtb2R1bGVTcGVjaWZpZXIgfV1dLFxuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm06IHtcbiAgICAgICAgICByZWFjdDoge1xuICAgICAgICAgICAgcnVudGltZTogJ3ByZXNlcnZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxlZ2FjeURlY29yYXRvcjogZGVjb3JhdG9yT3B0aW9ucy5sZWdhY3lEZWNvcmF0b3IsXG4gICAgICAgICAgZGVjb3JhdG9yTWV0YWRhdGE6IGRlY29yYXRvck9wdGlvbnMuZGVjb3JhdG9yTWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbWluaWZ5OiBmYWxzZSxcbiAgICAgIC4uLmdldExvYWRlclNvdXJjZU1hcE9wdGlvbnMoZmlsZW5hbWUsIHNvdXJjZU1hcCksXG4gICAgfSk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZE1hcCA9IHBhcnNlVHJhbnNmb3JtTWFwKHJlc3VsdC5tYXAsIHNvdXJjZU1hcCk7XG5cbiAgICByZXR1cm4geyBjb2RlOiByZXN1bHQuY29kZSwgbWFwOiB0cmFuc2Zvcm1lZE1hcCB9O1xuICB9O1xuXG4gIGlmICghY2FsbGJhY2spIHtcbiAgICByZXR1cm4gcnVuKCkudGhlbigocmVzdWx0KSA9PiByZXN1bHQuY29kZSk7XG4gIH1cblxuICB2b2lkIHJ1bigpXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4gY2FsbGJhY2sobnVsbCwgcmVzdWx0LmNvZGUsIHJlc3VsdC5tYXApKVxuICAgIC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGNhbGxiYWNrKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSk7XG4gICAgfSk7XG59XG4iXX0=
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from '@workflow/core/
|
|
1
|
+
export * from '@workflow/core/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,wBAAwB,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/core/
|
|
21
|
-
//# sourceMappingURL=
|
|
20
|
+
__exportStar(require("@workflow/core/runtime"), exports);
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBaUQ7QUFDakQsb0RBQW9EO0FBQ3BELGlCQUFpQjtBQUNqQix5REFBdUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZS1leHBvcnQgcnVudGltZSBhcyBzdHViIGZvciByZXNvbHZpbmcgdG8gbm90XG4vLyByZXF1aXJlIEB3b3JrZmxvdy9jb3JlIGJlIGEgZGVwZW5kZW5jeSBhcyB3ZWxsIGFzXG4vLyBAd29ya2Zsb3cvbmV4dFxuZXhwb3J0ICogZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SWC does not atomically write its Wasmer cache. Compile the plugin before
|
|
3
|
+
* Next.js starts parallel loader workers.
|
|
4
|
+
* @see https://github.com/swc-project/swc/issues/10065
|
|
5
|
+
*/
|
|
6
|
+
export declare function prewarmWorkflowSwcPluginCache(projectRoot: string): void;
|
|
7
|
+
//# sourceMappingURL=swc-plugin-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swc-plugin-cache.d.ts","sourceRoot":"","sources":["../src/swc-plugin-cache.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAWvE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prewarmWorkflowSwcPluginCache = prewarmWorkflowSwcPluginCache;
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
5
|
+
const core_1 = require("@swc/core");
|
|
6
|
+
/**
|
|
7
|
+
* SWC does not atomically write its Wasmer cache. Compile the plugin before
|
|
8
|
+
* Next.js starts parallel loader workers.
|
|
9
|
+
* @see https://github.com/swc-project/swc/issues/10065
|
|
10
|
+
*/
|
|
11
|
+
function prewarmWorkflowSwcPluginCache(projectRoot) {
|
|
12
|
+
(0, core_1.transformSync)(`async function step() { 'use step'; }`, {
|
|
13
|
+
filename: '__workflow_swc_cache_warmup__.js',
|
|
14
|
+
swcrc: false,
|
|
15
|
+
jsc: {
|
|
16
|
+
experimental: {
|
|
17
|
+
cacheRoot: (0, node_path_1.join)(projectRoot, '.swc'),
|
|
18
|
+
plugins: [[require.resolve('@workflow/swc-plugin'), { mode: 'step' }]],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLXBsdWdpbi1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zd2MtcGx1Z2luLWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsc0VBV0M7QUFuQkQseUNBQWlDO0FBQ2pDLG9DQUEwQztBQUUxQzs7OztHQUlHO0FBQ0gsU0FBZ0IsNkJBQTZCLENBQUMsV0FBbUI7SUFDL0QsSUFBQSxvQkFBYSxFQUFDLHVDQUF1QyxFQUFFO1FBQ3JELFFBQVEsRUFBRSxrQ0FBa0M7UUFDNUMsS0FBSyxFQUFFLEtBQUs7UUFDWixHQUFHLEVBQUU7WUFDSCxZQUFZLEVBQUU7Z0JBQ1osU0FBUyxFQUFFLElBQUEsZ0JBQUksRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO2dCQUNwQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1TeW5jIH0gZnJvbSAnQHN3Yy9jb3JlJztcblxuLyoqXG4gKiBTV0MgZG9lcyBub3QgYXRvbWljYWxseSB3cml0ZSBpdHMgV2FzbWVyIGNhY2hlLiBDb21waWxlIHRoZSBwbHVnaW4gYmVmb3JlXG4gKiBOZXh0LmpzIHN0YXJ0cyBwYXJhbGxlbCBsb2FkZXIgd29ya2Vycy5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3N3Yy1wcm9qZWN0L3N3Yy9pc3N1ZXMvMTAwNjVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXdhcm1Xb3JrZmxvd1N3Y1BsdWdpbkNhY2hlKHByb2plY3RSb290OiBzdHJpbmcpOiB2b2lkIHtcbiAgdHJhbnNmb3JtU3luYyhgYXN5bmMgZnVuY3Rpb24gc3RlcCgpIHsgJ3VzZSBzdGVwJzsgfWAsIHtcbiAgICBmaWxlbmFtZTogJ19fd29ya2Zsb3dfc3djX2NhY2hlX3dhcm11cF9fLmpzJyxcbiAgICBzd2NyYzogZmFsc2UsXG4gICAganNjOiB7XG4gICAgICBleHBlcmltZW50YWw6IHtcbiAgICAgICAgY2FjaGVSb290OiBqb2luKHByb2plY3RSb290LCAnLnN3YycpLFxuICAgICAgICBwbHVnaW5zOiBbW3JlcXVpcmUucmVzb2x2ZSgnQHdvcmtmbG93L3N3Yy1wbHVnaW4nKSwgeyBtb2RlOiAnc3RlcCcgfV1dLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export interface DiscoveredEntriesLike {
|
|
2
|
+
discoveredSteps: Set<string>;
|
|
3
|
+
discoveredWorkflows: Set<string>;
|
|
4
|
+
discoveredSerdeFiles: Set<string>;
|
|
5
|
+
discoveredFiles?: Set<string>;
|
|
6
|
+
}
|
|
7
|
+
export interface FileChanges {
|
|
8
|
+
addedFiles: string[];
|
|
9
|
+
modifiedFiles: string[];
|
|
10
|
+
removedFiles: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface SourceSnapshot {
|
|
13
|
+
importSignature: string;
|
|
14
|
+
definitionSignature: string;
|
|
15
|
+
hasDirective: boolean;
|
|
16
|
+
hasSerde: boolean;
|
|
17
|
+
}
|
|
18
|
+
export type RebuildDecision = {
|
|
19
|
+
kind: 'none';
|
|
20
|
+
snapshots?: Map<string, SourceSnapshot>;
|
|
21
|
+
} | {
|
|
22
|
+
kind: 'hot';
|
|
23
|
+
refreshStepRegistrations: boolean;
|
|
24
|
+
snapshots: Map<string, SourceSnapshot>;
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'full';
|
|
27
|
+
};
|
|
28
|
+
export type SourcePatternDetector = (source: string) => {
|
|
29
|
+
hasDirective: boolean;
|
|
30
|
+
hasSerde: boolean;
|
|
31
|
+
};
|
|
32
|
+
export declare const stripCommentsFromSource: (source: string) => string;
|
|
33
|
+
export declare const extractImportSignature: (source: string) => string;
|
|
34
|
+
export declare const extractDefinitionSignature: (source: string) => string;
|
|
35
|
+
export declare const createSourceSnapshotFromSource: (source: string, detectWorkflowPatterns: SourcePatternDetector) => SourceSnapshot;
|
|
36
|
+
export declare const createSourceSnapshot: ({ file, detectWorkflowPatterns, }: {
|
|
37
|
+
file: string;
|
|
38
|
+
detectWorkflowPatterns: SourcePatternDetector;
|
|
39
|
+
}) => Promise<SourceSnapshot>;
|
|
40
|
+
export declare const getRelevantFiles: ({ discoveredEntries, inputFiles, normalizePath, }: {
|
|
41
|
+
discoveredEntries: DiscoveredEntriesLike;
|
|
42
|
+
inputFiles: string[];
|
|
43
|
+
normalizePath?: (path: string) => string;
|
|
44
|
+
}) => Set<string>;
|
|
45
|
+
export declare const replaceSourceSnapshots: ({ discoveredEntries, inputFiles, normalizePath, readSnapshot, sourceSnapshots, }: {
|
|
46
|
+
discoveredEntries: DiscoveredEntriesLike;
|
|
47
|
+
inputFiles: string[];
|
|
48
|
+
normalizePath?: (path: string) => string;
|
|
49
|
+
readSnapshot: (file: string) => Promise<SourceSnapshot>;
|
|
50
|
+
sourceSnapshots: Map<string, SourceSnapshot>;
|
|
51
|
+
}) => Promise<void>;
|
|
52
|
+
export declare const classifyRebuild: ({ discoveredEntries, fileChanges, inputFiles, normalizePath, parentHasChild, readSnapshot, sourceSnapshots, }: {
|
|
53
|
+
discoveredEntries: DiscoveredEntriesLike;
|
|
54
|
+
fileChanges: FileChanges;
|
|
55
|
+
inputFiles: string[];
|
|
56
|
+
normalizePath?: (path: string) => string;
|
|
57
|
+
parentHasChild: (parent: string, child: string, options?: {
|
|
58
|
+
excludedRoots?: Iterable<string>;
|
|
59
|
+
}) => boolean;
|
|
60
|
+
readSnapshot: (file: string) => Promise<SourceSnapshot>;
|
|
61
|
+
sourceSnapshots: Map<string, SourceSnapshot>;
|
|
62
|
+
}) => Promise<RebuildDecision>;
|
|
63
|
+
//# sourceMappingURL=watch-rebuild.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-rebuild.d.ts","sourceRoot":"","sources":["../src/watch-rebuild.ts"],"names":[],"mappings":"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"}
|