@workflow/next 4.0.1-beta.37 → 4.0.1-beta.38
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.d.ts.map +1 -1
- package/dist/builder.js +213 -207
- package/dist/builder.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -7
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +2 -155
- package/dist/loader.js.map +1 -1
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +21 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +9 -4
- package/dist/socket-server.d.ts +0 -46
- package/dist/socket-server.d.ts.map +0 -1
- package/dist/socket-server.js +0 -132
- package/dist/socket-server.js.map +0 -1
package/dist/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,iBAmdnC"}
|
package/dist/builder.js
CHANGED
|
@@ -6,10 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getNextBuilder = getNextBuilder;
|
|
7
7
|
const node_fs_1 = require("node:fs");
|
|
8
8
|
const promises_1 = require("node:fs/promises");
|
|
9
|
-
const node_os_1 = __importDefault(require("node:os"));
|
|
10
9
|
const node_path_1 = require("node:path");
|
|
11
|
-
const
|
|
12
|
-
const socket_server_1 = require("./socket-server");
|
|
10
|
+
const watchpack_1 = __importDefault(require("watchpack"));
|
|
13
11
|
let CachedNextBuilder;
|
|
14
12
|
// Create the NextBuilder class dynamically by extending the ESM BaseBuilder
|
|
15
13
|
// This is exported as getNextBuilder() to allow CommonJS modules to import
|
|
@@ -18,102 +16,26 @@ async function getNextBuilder() {
|
|
|
18
16
|
if (CachedNextBuilder) {
|
|
19
17
|
return CachedNextBuilder;
|
|
20
18
|
}
|
|
21
|
-
const { BaseBuilder: BaseBuilderClass, STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER,
|
|
19
|
+
const { BaseBuilder: BaseBuilderClass, STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER,
|
|
20
|
+
// biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`
|
|
21
|
+
} = (await eval('import("@workflow/builders")'));
|
|
22
22
|
class NextBuilder extends BaseBuilderClass {
|
|
23
|
-
|
|
24
|
-
isDevServer;
|
|
25
|
-
nextConfig;
|
|
26
|
-
getDistDir() {
|
|
27
|
-
return this.nextConfig?.distDir || '.next';
|
|
28
|
-
}
|
|
29
|
-
async writeWorkflowsCache(workflowFiles, stepFiles) {
|
|
30
|
-
const cwd = this.config.workingDir;
|
|
31
|
-
const distDir = this.getDistDir();
|
|
32
|
-
const cacheDir = (0, node_path_1.join)(cwd, distDir, 'cache');
|
|
33
|
-
const cacheFile = (0, node_path_1.join)(cacheDir, 'workflows.json');
|
|
34
|
-
try {
|
|
35
|
-
await (0, promises_1.mkdir)(cacheDir, { recursive: true });
|
|
36
|
-
const cacheData = {
|
|
37
|
-
workflowFiles: Array.from(workflowFiles),
|
|
38
|
-
stepFiles: Array.from(stepFiles),
|
|
39
|
-
timestamp: Date.now(),
|
|
40
|
-
};
|
|
41
|
-
await (0, promises_1.writeFile)(cacheFile, JSON.stringify(cacheData, null, 2));
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
console.error('Failed to write workflows cache:', error);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
async readWorkflowsCache() {
|
|
48
|
-
const cwd = this.config.workingDir;
|
|
49
|
-
const distDir = this.getDistDir();
|
|
50
|
-
const cacheFile = (0, node_path_1.join)(cwd, distDir, 'cache', 'workflows.json');
|
|
51
|
-
try {
|
|
52
|
-
const cacheContent = await (0, promises_1.readFile)(cacheFile, 'utf-8');
|
|
53
|
-
const cacheData = JSON.parse(cacheContent);
|
|
54
|
-
// Filter workflow files: check they exist and contain "use workflow"
|
|
55
|
-
const workflowFiles = [];
|
|
56
|
-
for (const file of cacheData.workflowFiles || []) {
|
|
57
|
-
try {
|
|
58
|
-
const content = await (0, promises_1.readFile)(file, 'utf-8');
|
|
59
|
-
if (builders_1.useWorkflowPattern.test(content)) {
|
|
60
|
-
workflowFiles.push(file);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// File doesn't exist or can't be read, skip it
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// Filter step files: check they exist and contain "use step"
|
|
68
|
-
const stepFiles = [];
|
|
69
|
-
for (const file of cacheData.stepFiles || []) {
|
|
70
|
-
try {
|
|
71
|
-
const content = await (0, promises_1.readFile)(file, 'utf-8');
|
|
72
|
-
if (builders_1.useStepPattern.test(content)) {
|
|
73
|
-
stepFiles.push(file);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
// File doesn't exist or can't be read, skip it
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
workflowFiles,
|
|
82
|
-
stepFiles,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
// Cache file doesn't exist or is invalid, return null
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async init(nextConfig, phase) {
|
|
91
|
-
this.nextConfig = nextConfig;
|
|
92
|
-
this.isDevServer = phase === 'phase-development-server';
|
|
93
|
-
const outputDir = await this.findAppDirectory();
|
|
94
|
-
// Write stub files
|
|
95
|
-
await this.writeStubFiles(outputDir);
|
|
96
|
-
// Create socket server for file path communication
|
|
97
|
-
await this.createSocketServer(outputDir);
|
|
98
|
-
}
|
|
99
|
-
async build(inputFiles) {
|
|
23
|
+
async build() {
|
|
100
24
|
const outputDir = await this.findAppDirectory();
|
|
101
25
|
const workflowGeneratedDir = (0, node_path_1.join)(outputDir, '.well-known/workflow/v1');
|
|
102
26
|
// Ensure output directories exist
|
|
103
27
|
await (0, promises_1.mkdir)(workflowGeneratedDir, { recursive: true });
|
|
104
28
|
// ignore the generated assets
|
|
105
29
|
await (0, promises_1.writeFile)((0, node_path_1.join)(workflowGeneratedDir, '.gitignore'), '*');
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
const tsConfig = await this.getTsConfigOptions();
|
|
30
|
+
const inputFiles = await this.getInputFiles();
|
|
31
|
+
const tsconfigPath = await this.findTsConfigPath();
|
|
109
32
|
const options = {
|
|
110
|
-
inputFiles
|
|
33
|
+
inputFiles,
|
|
111
34
|
workflowGeneratedDir,
|
|
112
|
-
|
|
113
|
-
tsPaths: tsConfig.paths,
|
|
35
|
+
tsconfigPath,
|
|
114
36
|
};
|
|
115
|
-
const { manifest } = await this.buildStepsFunction(options);
|
|
116
|
-
await this.buildWorkflowsFunction(options);
|
|
37
|
+
const { manifest, context: stepsBuildContext } = await this.buildStepsFunction(options);
|
|
38
|
+
const workflowsBundle = await this.buildWorkflowsFunction(options);
|
|
117
39
|
await this.buildWebhookRoute({ workflowGeneratedDir });
|
|
118
40
|
// Write unified manifest to workflow generated directory
|
|
119
41
|
const workflowBundlePath = (0, node_path_1.join)(workflowGeneratedDir, 'flow/route.js');
|
|
@@ -123,9 +45,203 @@ async function getNextBuilder() {
|
|
|
123
45
|
manifest,
|
|
124
46
|
});
|
|
125
47
|
await this.writeFunctionsConfig(outputDir);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
48
|
+
if (this.config.watch) {
|
|
49
|
+
if (!stepsBuildContext) {
|
|
50
|
+
throw new Error('Invariant: expected steps build context in watch mode');
|
|
51
|
+
}
|
|
52
|
+
if (!workflowsBundle) {
|
|
53
|
+
throw new Error('Invariant: expected workflows bundle in watch mode');
|
|
54
|
+
}
|
|
55
|
+
let stepsCtx = stepsBuildContext;
|
|
56
|
+
let workflowsCtx = workflowsBundle;
|
|
57
|
+
const normalizePath = (pathname) => pathname.replace(/\\/g, '/');
|
|
58
|
+
const knownFiles = new Set();
|
|
59
|
+
let previousTimeInfo = new Map();
|
|
60
|
+
const watchableExtensions = new Set([
|
|
61
|
+
'.js',
|
|
62
|
+
'.jsx',
|
|
63
|
+
'.ts',
|
|
64
|
+
'.tsx',
|
|
65
|
+
'.mts',
|
|
66
|
+
'.cts',
|
|
67
|
+
'.cjs',
|
|
68
|
+
'.mjs',
|
|
69
|
+
]);
|
|
70
|
+
const ignoredPathFragments = [
|
|
71
|
+
'/.git/',
|
|
72
|
+
'/node_modules/',
|
|
73
|
+
'/.next/',
|
|
74
|
+
'/.turbo/',
|
|
75
|
+
'/.vercel/',
|
|
76
|
+
'/dist/',
|
|
77
|
+
'/build/',
|
|
78
|
+
'/out/',
|
|
79
|
+
'/.cache/',
|
|
80
|
+
'/.yarn/',
|
|
81
|
+
'/.pnpm-store/',
|
|
82
|
+
'/.parcel-cache/',
|
|
83
|
+
'/.well-known/workflow/',
|
|
84
|
+
];
|
|
85
|
+
const normalizedGeneratedDir = workflowGeneratedDir.replace(/\\/g, '/');
|
|
86
|
+
ignoredPathFragments.push(normalizedGeneratedDir);
|
|
87
|
+
// There is a node.js bug on MacOS which causes closing file watchers to be really slow.
|
|
88
|
+
// This limits the number of watchers to mitigate the issue.
|
|
89
|
+
// https://github.com/nodejs/node/issues/29949
|
|
90
|
+
process.env.WATCHPACK_WATCHER_LIMIT =
|
|
91
|
+
process.platform === 'darwin' ? '20' : undefined;
|
|
92
|
+
const watcher = new watchpack_1.default({
|
|
93
|
+
// Watchpack default is 200ms which adds 200ms of dead time on bootup.
|
|
94
|
+
aggregateTimeout: 5,
|
|
95
|
+
ignored: (pathname) => {
|
|
96
|
+
const normalizedPath = pathname.replace(/\\/g, '/');
|
|
97
|
+
const extension = (0, node_path_1.extname)(normalizedPath);
|
|
98
|
+
if (extension && !watchableExtensions.has(extension)) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
if (normalizedPath.startsWith(normalizedGeneratedDir)) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
for (const fragment of ignoredPathFragments) {
|
|
105
|
+
if (normalizedPath.includes(fragment)) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
const readTimeInfoEntries = () => {
|
|
113
|
+
const rawEntries = watcher.getTimeInfoEntries();
|
|
114
|
+
const normalizedEntries = new Map();
|
|
115
|
+
for (const [path, info] of rawEntries) {
|
|
116
|
+
normalizedEntries.set(normalizePath(path), info);
|
|
117
|
+
}
|
|
118
|
+
return normalizedEntries;
|
|
119
|
+
};
|
|
120
|
+
let rebuildQueue = Promise.resolve();
|
|
121
|
+
const enqueue = (task) => {
|
|
122
|
+
rebuildQueue = rebuildQueue.then(task).catch((error) => {
|
|
123
|
+
console.error('Failed to process file change', error);
|
|
124
|
+
});
|
|
125
|
+
return rebuildQueue;
|
|
126
|
+
};
|
|
127
|
+
const fullRebuild = async () => {
|
|
128
|
+
const newInputFiles = await this.getInputFiles();
|
|
129
|
+
options.inputFiles = newInputFiles;
|
|
130
|
+
await stepsCtx.dispose();
|
|
131
|
+
const { context: newStepsCtx } = await this.buildStepsFunction(options);
|
|
132
|
+
if (!newStepsCtx) {
|
|
133
|
+
throw new Error('Invariant: expected steps build context after rebuild');
|
|
134
|
+
}
|
|
135
|
+
stepsCtx = newStepsCtx;
|
|
136
|
+
await workflowsCtx.interimBundleCtx.dispose();
|
|
137
|
+
const newWorkflowsCtx = await this.buildWorkflowsFunction(options);
|
|
138
|
+
if (!newWorkflowsCtx) {
|
|
139
|
+
throw new Error('Invariant: expected workflows bundle context after rebuild');
|
|
140
|
+
}
|
|
141
|
+
workflowsCtx = newWorkflowsCtx;
|
|
142
|
+
};
|
|
143
|
+
const logBuildMessages = (result, label) => {
|
|
144
|
+
const logByType = (messages, method) => {
|
|
145
|
+
if (!messages || messages.length === 0) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const descriptor = method === 'error' ? 'errors' : 'warnings';
|
|
149
|
+
console[method](`${descriptor} while rebuilding ${label}`);
|
|
150
|
+
for (const message of messages) {
|
|
151
|
+
console[method](message);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
logByType(result.errors, 'error');
|
|
155
|
+
logByType(result.warnings, 'warn');
|
|
156
|
+
};
|
|
157
|
+
const rebuildExistingFiles = async () => {
|
|
158
|
+
const rebuiltStepStart = Date.now();
|
|
159
|
+
const stepsResult = await stepsCtx.rebuild();
|
|
160
|
+
logBuildMessages(stepsResult, 'steps bundle');
|
|
161
|
+
console.log('Rebuilt steps bundle', `${Date.now() - rebuiltStepStart}ms`);
|
|
162
|
+
const rebuiltWorkflowStart = Date.now();
|
|
163
|
+
const workflowResult = await workflowsCtx.interimBundleCtx.rebuild();
|
|
164
|
+
logBuildMessages(workflowResult, 'workflows bundle');
|
|
165
|
+
if (!workflowResult.outputFiles ||
|
|
166
|
+
workflowResult.outputFiles.length === 0) {
|
|
167
|
+
console.error('No output generated while rebuilding workflows bundle');
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
await workflowsCtx.bundleFinal(workflowResult.outputFiles[0].text);
|
|
171
|
+
console.log('Rebuilt workflow bundle', `${Date.now() - rebuiltWorkflowStart}ms`);
|
|
172
|
+
};
|
|
173
|
+
const isWatchableFile = (path) => watchableExtensions.has((0, node_path_1.extname)(path));
|
|
174
|
+
const getComparableTimestamp = (entry) => entry.timestamp ?? entry.safeTime;
|
|
175
|
+
const findRemovedFiles = (currentEntries, previousEntries) => {
|
|
176
|
+
const removed = [];
|
|
177
|
+
for (const path of previousEntries.keys()) {
|
|
178
|
+
if (!currentEntries.has(path) && isWatchableFile(path)) {
|
|
179
|
+
removed.push(path);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return removed;
|
|
183
|
+
};
|
|
184
|
+
const findAddedAndModifiedFiles = (currentEntries, previousEntries) => {
|
|
185
|
+
const added = [];
|
|
186
|
+
const modified = [];
|
|
187
|
+
for (const [path, info] of currentEntries) {
|
|
188
|
+
if (!isWatchableFile(path)) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const previous = previousEntries.get(path);
|
|
192
|
+
if (!previous) {
|
|
193
|
+
added.push(path);
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (getComparableTimestamp(info) !== getComparableTimestamp(previous)) {
|
|
197
|
+
modified.push(path);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return { added, modified };
|
|
201
|
+
};
|
|
202
|
+
const determineFileChanges = (currentEntries, previousEntries) => {
|
|
203
|
+
const removedFiles = findRemovedFiles(currentEntries, previousEntries);
|
|
204
|
+
const { added, modified } = findAddedAndModifiedFiles(currentEntries, previousEntries);
|
|
205
|
+
return {
|
|
206
|
+
addedFiles: added,
|
|
207
|
+
modifiedFiles: modified,
|
|
208
|
+
removedFiles,
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
let isInitial = true;
|
|
212
|
+
watcher.on('aggregated', () => {
|
|
213
|
+
const currentEntries = readTimeInfoEntries();
|
|
214
|
+
const { addedFiles, modifiedFiles, removedFiles } = determineFileChanges(currentEntries, previousTimeInfo);
|
|
215
|
+
previousTimeInfo = currentEntries;
|
|
216
|
+
if (isInitial) {
|
|
217
|
+
isInitial = false;
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (addedFiles.length === 0 &&
|
|
221
|
+
modifiedFiles.length === 0 &&
|
|
222
|
+
removedFiles.length === 0) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
for (const removal of removedFiles) {
|
|
226
|
+
knownFiles.delete(removal);
|
|
227
|
+
}
|
|
228
|
+
for (const added of addedFiles) {
|
|
229
|
+
knownFiles.add(added);
|
|
230
|
+
}
|
|
231
|
+
enqueue(async () => {
|
|
232
|
+
if (addedFiles.length > 0 || removedFiles.length > 0) {
|
|
233
|
+
await fullRebuild();
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (modifiedFiles.length > 0) {
|
|
237
|
+
await rebuildExistingFiles();
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
watcher.watch({
|
|
242
|
+
directories: [this.config.workingDir],
|
|
243
|
+
startTime: 0,
|
|
244
|
+
});
|
|
129
245
|
}
|
|
130
246
|
}
|
|
131
247
|
async getInputFiles() {
|
|
@@ -138,7 +254,7 @@ async function getNextBuilder() {
|
|
|
138
254
|
}
|
|
139
255
|
async writeFunctionsConfig(outputDir) {
|
|
140
256
|
// we don't run this in development mode as it's not needed
|
|
141
|
-
if (
|
|
257
|
+
if (process.env.NODE_ENV === 'development') {
|
|
142
258
|
return;
|
|
143
259
|
}
|
|
144
260
|
const generatedConfig = {
|
|
@@ -154,7 +270,7 @@ async function getNextBuilder() {
|
|
|
154
270
|
// the Next.js builder to consume
|
|
155
271
|
await (0, promises_1.writeFile)((0, node_path_1.join)(outputDir, '.well-known/workflow/v1/config.json'), JSON.stringify(generatedConfig, null, 2));
|
|
156
272
|
}
|
|
157
|
-
async buildStepsFunction({ inputFiles, workflowGeneratedDir,
|
|
273
|
+
async buildStepsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
|
|
158
274
|
// Create steps bundle
|
|
159
275
|
const stepsRouteDir = (0, node_path_1.join)(workflowGeneratedDir, 'step');
|
|
160
276
|
await (0, promises_1.mkdir)(stepsRouteDir, { recursive: true });
|
|
@@ -168,11 +284,10 @@ async function getNextBuilder() {
|
|
|
168
284
|
inputFiles,
|
|
169
285
|
outfile: (0, node_path_1.join)(stepsRouteDir, 'route.js'),
|
|
170
286
|
externalizeNonSteps: true,
|
|
171
|
-
|
|
172
|
-
tsPaths,
|
|
287
|
+
tsconfigPath,
|
|
173
288
|
});
|
|
174
289
|
}
|
|
175
|
-
async buildWorkflowsFunction({ inputFiles, workflowGeneratedDir,
|
|
290
|
+
async buildWorkflowsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
|
|
176
291
|
const workflowsRouteDir = (0, node_path_1.join)(workflowGeneratedDir, 'flow');
|
|
177
292
|
await (0, promises_1.mkdir)(workflowsRouteDir, { recursive: true });
|
|
178
293
|
return await this.createWorkflowsBundle({
|
|
@@ -180,8 +295,7 @@ async function getNextBuilder() {
|
|
|
180
295
|
outfile: (0, node_path_1.join)(workflowsRouteDir, 'route.js'),
|
|
181
296
|
bundleFinalOutput: false,
|
|
182
297
|
inputFiles,
|
|
183
|
-
|
|
184
|
-
tsPaths,
|
|
298
|
+
tsconfigPath,
|
|
185
299
|
});
|
|
186
300
|
}
|
|
187
301
|
async buildWebhookRoute({ workflowGeneratedDir, }) {
|
|
@@ -216,114 +330,6 @@ async function getNextBuilder() {
|
|
|
216
330
|
}
|
|
217
331
|
}
|
|
218
332
|
}
|
|
219
|
-
async createSocketServer(_usersAppDir) {
|
|
220
|
-
if (process.env.WORKFLOW_SOCKET_PORT) {
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
const workflowFiles = new Set();
|
|
224
|
-
const stepFiles = new Set();
|
|
225
|
-
let debounceTimer = null;
|
|
226
|
-
let buildTriggered = false;
|
|
227
|
-
const BUILD_DEBOUNCE_MS = this.isDevServer ? 250 : 1_000;
|
|
228
|
-
// Attempt to load cached workflows/steps from previous build
|
|
229
|
-
const cache = await this.readWorkflowsCache();
|
|
230
|
-
if (cache) {
|
|
231
|
-
for (const file of cache.workflowFiles) {
|
|
232
|
-
workflowFiles.add(file);
|
|
233
|
-
}
|
|
234
|
-
for (const file of cache.stepFiles) {
|
|
235
|
-
stepFiles.add(file);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
// Debounced build trigger
|
|
239
|
-
const triggerBuild = () => {
|
|
240
|
-
if (debounceTimer) {
|
|
241
|
-
clearTimeout(debounceTimer);
|
|
242
|
-
}
|
|
243
|
-
debounceTimer = setTimeout(async () => {
|
|
244
|
-
if (buildTriggered && !this.isDevServer) {
|
|
245
|
-
// can't run another build after one has already been done
|
|
246
|
-
// in production mode as it won't have any affect since after
|
|
247
|
-
// the first is done we resolve the loaders for the stub entries
|
|
248
|
-
// and they can't be refreshed/rebuilt after that in production
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
// Combine workflow and step files into single array
|
|
252
|
-
const allFiles = new Set([...workflowFiles, ...stepFiles]);
|
|
253
|
-
const inputFiles = Array.from(allFiles);
|
|
254
|
-
try {
|
|
255
|
-
buildTriggered = true;
|
|
256
|
-
await this.build(inputFiles);
|
|
257
|
-
// Write cache after successful build
|
|
258
|
-
await this.writeWorkflowsCache(workflowFiles, stepFiles);
|
|
259
|
-
}
|
|
260
|
-
catch (error) {
|
|
261
|
-
if (!this.isDevServer) {
|
|
262
|
-
throw error;
|
|
263
|
-
}
|
|
264
|
-
console.error('Workflows build failed:', error);
|
|
265
|
-
}
|
|
266
|
-
}, BUILD_DEBOUNCE_MS);
|
|
267
|
-
};
|
|
268
|
-
// Configure and create socket server
|
|
269
|
-
const config = {
|
|
270
|
-
isDevServer: this.isDevServer || false,
|
|
271
|
-
onFileDiscovered: (filePath, hasWorkflow, hasStep) => {
|
|
272
|
-
const knownFile = workflowFiles.has(filePath) || stepFiles.has(filePath);
|
|
273
|
-
if (hasWorkflow) {
|
|
274
|
-
workflowFiles.add(filePath);
|
|
275
|
-
}
|
|
276
|
-
else {
|
|
277
|
-
workflowFiles.delete(filePath);
|
|
278
|
-
}
|
|
279
|
-
if (hasStep) {
|
|
280
|
-
stepFiles.add(filePath);
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
stepFiles.delete(filePath);
|
|
284
|
-
}
|
|
285
|
-
// Trigger debounced build if the file was previously seen
|
|
286
|
-
// or has workflows/steps currently
|
|
287
|
-
if (
|
|
288
|
-
// in non-dev we always update debounce on activity
|
|
289
|
-
!this.isDevServer ||
|
|
290
|
-
hasWorkflow ||
|
|
291
|
-
hasStep ||
|
|
292
|
-
knownFile) {
|
|
293
|
-
triggerBuild();
|
|
294
|
-
}
|
|
295
|
-
},
|
|
296
|
-
onTriggerBuild: triggerBuild,
|
|
297
|
-
};
|
|
298
|
-
this.socketIO = await (0, socket_server_1.createSocketServer)(config);
|
|
299
|
-
}
|
|
300
|
-
async writeStubFiles(usersAppDir) {
|
|
301
|
-
// NOTE: there is a limitation with turbopack that we can only
|
|
302
|
-
// have number of virtual entries with pending promise less than
|
|
303
|
-
// CPU count as that's the number of workers it uses so currently
|
|
304
|
-
// we're fine with > 3 vCPU but <= 3 vCPUs and we won't be able to
|
|
305
|
-
// discover workflows/steps
|
|
306
|
-
const parallelismCount = node_os_1.default.availableParallelism();
|
|
307
|
-
if (process.env.TURBOPACK && parallelismCount < 4) {
|
|
308
|
-
console.warn(`Available parallelism of ${parallelismCount} is less than needed 4. This can cause workflows/steps to fail to discover properly in turbopack`);
|
|
309
|
-
}
|
|
310
|
-
const routeStubContent = "export * from './inner'";
|
|
311
|
-
// this needs to change on each build so can refresh workflows
|
|
312
|
-
const innerStubContent = `WORKFLOW_INNER_STUB_FILE_${Date.now()}`;
|
|
313
|
-
const workflowDir = (0, node_path_1.join)(usersAppDir, '.well-known/workflow/v1');
|
|
314
|
-
// Ensure directories exist
|
|
315
|
-
await (0, promises_1.mkdir)((0, node_path_1.join)(workflowDir, 'flow'), { recursive: true });
|
|
316
|
-
await (0, promises_1.mkdir)((0, node_path_1.join)(workflowDir, 'step'), { recursive: true });
|
|
317
|
-
await (0, promises_1.mkdir)((0, node_path_1.join)(workflowDir, 'webhook/[token]'), { recursive: true });
|
|
318
|
-
// Write route.ts stub files (re-export from inner)
|
|
319
|
-
await (0, promises_1.writeFile)((0, node_path_1.join)(workflowDir, 'flow/route.js'), routeStubContent);
|
|
320
|
-
await (0, promises_1.writeFile)((0, node_path_1.join)(workflowDir, 'step/route.js'), routeStubContent);
|
|
321
|
-
await (0, promises_1.writeFile)((0, node_path_1.join)(workflowDir, 'webhook/[token]/route.js'), routeStubContent);
|
|
322
|
-
// Write inner.js stub files (actual stub marker)
|
|
323
|
-
await (0, promises_1.writeFile)((0, node_path_1.join)(workflowDir, 'flow/inner.js'), innerStubContent);
|
|
324
|
-
await (0, promises_1.writeFile)((0, node_path_1.join)(workflowDir, 'step/inner.js'), innerStubContent);
|
|
325
|
-
await (0, promises_1.writeFile)((0, node_path_1.join)(workflowDir, 'webhook/[token]/inner.js'), innerStubContent);
|
|
326
|
-
}
|
|
327
333
|
}
|
|
328
334
|
CachedNextBuilder = NextBuilder;
|
|
329
335
|
return NextBuilder;
|
package/dist/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAIvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;CACE,IAkBJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBAoGrC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.withWorkflow = withWorkflow;
|
|
7
|
+
const semver_1 = __importDefault(require("semver"));
|
|
4
8
|
const builder_js_1 = require("./builder.js");
|
|
5
9
|
function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
6
10
|
if (!process.env.VERCEL_DEPLOYMENT_ID) {
|
|
@@ -37,6 +41,8 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
37
41
|
nextConfig.turbopack.rules = {};
|
|
38
42
|
}
|
|
39
43
|
const existingRules = nextConfig.turbopack.rules;
|
|
44
|
+
const nextVersion = require('next/package.json').version;
|
|
45
|
+
const supportsTurboCondition = semver_1.default.gte(nextVersion, 'v16.0.0');
|
|
40
46
|
for (const key of [
|
|
41
47
|
'*.tsx',
|
|
42
48
|
'*.ts',
|
|
@@ -48,15 +54,22 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
48
54
|
'*.cts',
|
|
49
55
|
]) {
|
|
50
56
|
nextConfig.turbopack.rules[key] = {
|
|
57
|
+
...(supportsTurboCondition
|
|
58
|
+
? {
|
|
59
|
+
condition: {
|
|
60
|
+
...existingRules[key]?.condition,
|
|
61
|
+
any: [
|
|
62
|
+
...(existingRules[key]?.condition.any || []),
|
|
63
|
+
{
|
|
64
|
+
content: /(use workflow|use step)/,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
: {}),
|
|
51
70
|
loaders: [...(existingRules[key]?.loaders || []), loaderPath],
|
|
52
71
|
};
|
|
53
72
|
}
|
|
54
|
-
if (process.env.TURBOPACK) {
|
|
55
|
-
if (!nextConfig.experimental) {
|
|
56
|
-
nextConfig.experimental = {};
|
|
57
|
-
}
|
|
58
|
-
nextConfig.experimental.turbopackScopeHoisting = false;
|
|
59
|
-
}
|
|
60
73
|
// configure the loader for webpack
|
|
61
74
|
const existingWebpackModify = nextConfig.webpack;
|
|
62
75
|
nextConfig.webpack = (...args) => {
|
|
@@ -81,8 +94,10 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
81
94
|
// as Next.js uses child processes for different builds
|
|
82
95
|
if (!process.env.WORKFLOW_NEXT_PRIVATE_BUILT &&
|
|
83
96
|
phase !== 'phase-production-server') {
|
|
97
|
+
const shouldWatch = process.env.NODE_ENV === 'development';
|
|
84
98
|
const NextBuilder = await (0, builder_js_1.getNextBuilder)();
|
|
85
99
|
const workflowBuilder = new NextBuilder({
|
|
100
|
+
watch: shouldWatch,
|
|
86
101
|
// discover workflows from pages/app entries
|
|
87
102
|
dirs: ['pages', 'app', 'src/pages', 'src/app'],
|
|
88
103
|
workingDir: process.cwd(),
|
|
@@ -92,7 +107,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
92
107
|
webhookBundlePath: '', // node used in base
|
|
93
108
|
externalPackages: [...(nextConfig.serverExternalPackages || [])],
|
|
94
109
|
});
|
|
95
|
-
await workflowBuilder.
|
|
110
|
+
await workflowBuilder.build();
|
|
96
111
|
process.env.WORKFLOW_NEXT_PRIVATE_BUILT = '1';
|
|
97
112
|
}
|
|
98
113
|
return nextConfig;
|
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":"AAKA,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,CAwFjB"}
|
package/dist/loader.js
CHANGED
|
@@ -1,168 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = workflowLoader;
|
|
4
|
-
const promises_1 = require("node:fs/promises");
|
|
5
|
-
const node_net_1 = require("node:net");
|
|
6
4
|
const node_path_1 = require("node:path");
|
|
7
5
|
const core_1 = require("@swc/core");
|
|
8
|
-
const builders_1 = require("@workflow/builders");
|
|
9
|
-
const socket_server_1 = require("./socket-server");
|
|
10
|
-
// Stub content written by builder to inner.js files
|
|
11
|
-
const STUB_CONTENT = 'WORKFLOW_INNER_STUB_FILE';
|
|
12
|
-
// Cache for socket connection to avoid reconnecting on every file
|
|
13
|
-
let socketClientPromise = null;
|
|
14
|
-
async function getSocketClient() {
|
|
15
|
-
if (!socketClientPromise) {
|
|
16
|
-
socketClientPromise = (async () => {
|
|
17
|
-
const socketPort = process.env.WORKFLOW_SOCKET_PORT;
|
|
18
|
-
if (!socketPort) {
|
|
19
|
-
throw new Error(`Invariant: no socket port provided for workflow loader`);
|
|
20
|
-
}
|
|
21
|
-
const port = Number.parseInt(socketPort, 10);
|
|
22
|
-
if (Number.isNaN(port)) {
|
|
23
|
-
throw new Error(`Invariant: invalid socket port provided: ${socketPort}`);
|
|
24
|
-
}
|
|
25
|
-
const socket = (0, node_net_1.connect)({ port, host: '127.0.0.1' });
|
|
26
|
-
// Wait for connection
|
|
27
|
-
await new Promise((resolve, reject) => {
|
|
28
|
-
const timeout = setTimeout(() => {
|
|
29
|
-
socket.destroy();
|
|
30
|
-
reject(new Error('Socket connection timeout'));
|
|
31
|
-
}, 1000);
|
|
32
|
-
socket.on('connect', () => {
|
|
33
|
-
socket.setNoDelay(true);
|
|
34
|
-
clearTimeout(timeout);
|
|
35
|
-
resolve();
|
|
36
|
-
});
|
|
37
|
-
socket.on('error', (err) => {
|
|
38
|
-
clearTimeout(timeout);
|
|
39
|
-
reject(err);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
return socket;
|
|
43
|
-
})();
|
|
44
|
-
}
|
|
45
|
-
return socketClientPromise;
|
|
46
|
-
}
|
|
47
|
-
async function notifySocketServer(filename, hasWorkflow, hasStep) {
|
|
48
|
-
const socket = await getSocketClient();
|
|
49
|
-
if (!socket) {
|
|
50
|
-
throw new Error(`Invariant: missing workflow socket connection`);
|
|
51
|
-
}
|
|
52
|
-
const authToken = process.env.WORKFLOW_SOCKET_AUTH;
|
|
53
|
-
if (!authToken) {
|
|
54
|
-
throw new Error(`Invariant: no socket auth token provided for workflow loader`);
|
|
55
|
-
}
|
|
56
|
-
// Send authenticated message with workflow and step information
|
|
57
|
-
const message = {
|
|
58
|
-
type: 'file-discovered',
|
|
59
|
-
filePath: filename,
|
|
60
|
-
hasWorkflow,
|
|
61
|
-
hasStep,
|
|
62
|
-
};
|
|
63
|
-
socket.write((0, socket_server_1.serializeMessage)(message, authToken));
|
|
64
|
-
}
|
|
65
|
-
async function waitForBuildComplete() {
|
|
66
|
-
const socket = await getSocketClient();
|
|
67
|
-
return new Promise((resolve, reject) => {
|
|
68
|
-
if (!socket) {
|
|
69
|
-
reject(new Error('Socket not available'));
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
let buffer = '';
|
|
73
|
-
let timeout = null;
|
|
74
|
-
let settled = false;
|
|
75
|
-
const cleanup = () => {
|
|
76
|
-
if (timeout) {
|
|
77
|
-
clearTimeout(timeout);
|
|
78
|
-
timeout = null;
|
|
79
|
-
}
|
|
80
|
-
socket.off('data', onData);
|
|
81
|
-
socket.off('error', onError);
|
|
82
|
-
socket.off('end', onEnd);
|
|
83
|
-
socket.off('close', onClose);
|
|
84
|
-
};
|
|
85
|
-
const settle = (callback) => {
|
|
86
|
-
if (!settled) {
|
|
87
|
-
settled = true;
|
|
88
|
-
cleanup();
|
|
89
|
-
callback();
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
const onData = (data) => {
|
|
93
|
-
buffer += data.toString();
|
|
94
|
-
const authToken = process.env.WORKFLOW_SOCKET_AUTH;
|
|
95
|
-
if (!authToken) {
|
|
96
|
-
settle(() => reject(new Error('No socket auth token available')));
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
let newlineIndex = buffer.indexOf('\n');
|
|
100
|
-
while (newlineIndex !== -1) {
|
|
101
|
-
const line = buffer.slice(0, newlineIndex);
|
|
102
|
-
buffer = buffer.slice(newlineIndex + 1);
|
|
103
|
-
newlineIndex = buffer.indexOf('\n');
|
|
104
|
-
const message = (0, socket_server_1.parseMessage)(line, authToken);
|
|
105
|
-
if (message && message.type === 'build-complete') {
|
|
106
|
-
settle(() => resolve());
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
const onError = (err) => {
|
|
111
|
-
settle(() => reject(new Error(`Socket error: ${err.message}`)));
|
|
112
|
-
};
|
|
113
|
-
const onEnd = () => {
|
|
114
|
-
settle(() => reject(new Error('Socket ended unexpectedly before build-complete message received')));
|
|
115
|
-
};
|
|
116
|
-
const onClose = () => {
|
|
117
|
-
settle(() => reject(new Error('Socket closed unexpectedly before build-complete message received')));
|
|
118
|
-
};
|
|
119
|
-
// Set timeout to prevent indefinite hanging
|
|
120
|
-
timeout = setTimeout(() => {
|
|
121
|
-
settle(() => reject(new Error('Timeout waiting for build-complete message (60 seconds elapsed)')));
|
|
122
|
-
}, 60000); // 60 second timeout
|
|
123
|
-
socket.on('data', onData);
|
|
124
|
-
socket.on('error', onError);
|
|
125
|
-
socket.on('end', onEnd);
|
|
126
|
-
socket.on('close', onClose);
|
|
127
|
-
const authToken = process.env.WORKFLOW_SOCKET_AUTH;
|
|
128
|
-
if (!authToken) {
|
|
129
|
-
throw new Error(`Invariant: no socket auth token provided for workflow loader`);
|
|
130
|
-
}
|
|
131
|
-
// we trigger a build here in case no other events trigger
|
|
132
|
-
// the build so that we aren't waiting until 60 second timeout
|
|
133
|
-
const message = {
|
|
134
|
-
type: 'trigger-build',
|
|
135
|
-
};
|
|
136
|
-
socket.write((0, socket_server_1.serializeMessage)(message, authToken));
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
6
|
// This loader applies the "use workflow"/"use step"
|
|
140
7
|
// client transformation
|
|
141
8
|
async function workflowLoader(source, sourceMap) {
|
|
142
9
|
const filename = this.resourcePath;
|
|
143
10
|
const normalizedSource = source.toString();
|
|
144
|
-
// Normalize path separators for cross-platform compatibility
|
|
145
|
-
const normalizedFilename = filename.replace(/\\/g, '/');
|
|
146
|
-
// Check if this is a .well-known workflow inner.js file with stub content
|
|
147
|
-
const isWellKnownInnerFile = normalizedFilename.includes('.well-known/workflow/v1/') &&
|
|
148
|
-
(normalizedFilename.includes('/flow/inner.js') ||
|
|
149
|
-
normalizedFilename.includes('/step/inner.js') ||
|
|
150
|
-
normalizedFilename.includes('/webhook/[token]/inner.js'));
|
|
151
|
-
if (isWellKnownInnerFile &&
|
|
152
|
-
normalizedSource.trim().startsWith(STUB_CONTENT)) {
|
|
153
|
-
// Wait for build to complete
|
|
154
|
-
await waitForBuildComplete();
|
|
155
|
-
// Read the actual generated file content
|
|
156
|
-
const actualContent = await (0, promises_1.readFile)(filename.replace(/inner\.js$/, 'route.js'), 'utf-8');
|
|
157
|
-
return actualContent;
|
|
158
|
-
}
|
|
159
|
-
// Check for workflow and step directives
|
|
160
|
-
const hasWorkflow = builders_1.useWorkflowPattern.test(normalizedSource);
|
|
161
|
-
const hasStep = builders_1.useStepPattern.test(normalizedSource);
|
|
162
|
-
// Send message to socket server if workflow or step detected
|
|
163
|
-
await notifySocketServer(filename, hasWorkflow, hasStep);
|
|
164
11
|
// only apply the transform if file needs it
|
|
165
|
-
if (!
|
|
12
|
+
if (!normalizedSource.match(/(use step|use workflow)/)) {
|
|
166
13
|
return normalizedSource;
|
|
167
14
|
}
|
|
168
15
|
const isTypeScript = filename.endsWith('.ts') ||
|
|
@@ -180,7 +27,7 @@ async function workflowLoader(source, sourceMap) {
|
|
|
180
27
|
const lowerWd = normalizedWorkingDir.toLowerCase();
|
|
181
28
|
const lowerPath = normalizedFilepath.toLowerCase();
|
|
182
29
|
let relativeFilename;
|
|
183
|
-
if (lowerPath.startsWith(
|
|
30
|
+
if (lowerPath.startsWith(lowerWd + '/')) {
|
|
184
31
|
// File is under working directory - manually calculate relative path
|
|
185
32
|
relativeFilename = normalizedFilepath.substring(normalizedWorkingDir.length + 1);
|
|
186
33
|
}
|
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":";;AAKA,iCA8FC;AAnGD,yCAAqC;AACrC,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,GAChB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE5B,6CAA6C;IAC7C,8EAA8E;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,oBAAoB,GAAG,UAAU;SACpC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAExD,yFAAyF;IACzF,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;IAEnD,IAAI,gBAAwB,CAAC;IAC7B,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QACxC,qEAAqE;QACrE,gBAAgB,GAAG,kBAAkB,CAAC,SAAS,CAC7C,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAChC,CAAC;IACJ,CAAC;SAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QACjC,mDAAmD;QACnD,gBAAgB,GAAG,GAAG,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,gBAAgB,GAAG,IAAA,oBAAQ,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEtE,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,gBAAgB,GAAG,gBAAgB;iBAChC,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;iBAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvE,mEAAmE;QACnE,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,YAAY,CAAC;IACzE,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAS,EAAC,gBAAgB,EAAE;QAC/C,QAAQ,EAAE,gBAAgB;QAC1B,GAAG,EAAE;YACH,MAAM,EAAE;gBACN,GAAG,CAAC,YAAY;oBACd,CAAC,CAAC;wBACE,MAAM,EAAE,YAAY;wBACpB,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;qBAC/B;oBACH,CAAC,CAAC;wBACE,MAAM,EAAE,YAAY;wBACpB,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;qBAC/B,CAAC;aACP;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;YACD,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,OAAO,EAAE,UAAU;iBACpB;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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,cAAc,6BAA6B,CAAC"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
// re-export runtime as stub for resolving to not
|
|
18
|
+
// require @workflow/core be a dependency as well as
|
|
19
|
+
// @workflow/next
|
|
20
|
+
__exportStar(require("@workflow/core/dist/runtime"), exports);
|
|
21
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,oDAAoD;AACpD,iBAAiB;AACjB,8DAA4C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/next",
|
|
3
|
-
"version": "4.0.1-beta.
|
|
3
|
+
"version": "4.0.1-beta.38",
|
|
4
4
|
"description": "Next.js integration for Workflow DevKit",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,16 +18,21 @@
|
|
|
18
18
|
},
|
|
19
19
|
"exports": {
|
|
20
20
|
".": "./dist/index.js",
|
|
21
|
-
"./loader": "./dist/loader.js"
|
|
21
|
+
"./loader": "./dist/loader.js",
|
|
22
|
+
"./runtime": "./dist/runtime.js"
|
|
22
23
|
},
|
|
23
24
|
"dependencies": {
|
|
24
25
|
"@swc/core": "1.15.3",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
26
|
+
"semver": "7.7.3",
|
|
27
|
+
"watchpack": "2.4.4",
|
|
28
|
+
"@workflow/builders": "4.0.1-beta.33",
|
|
29
|
+
"@workflow/core": "4.0.1-beta.34",
|
|
27
30
|
"@workflow/swc-plugin": "4.0.1-beta.12"
|
|
28
31
|
},
|
|
29
32
|
"devDependencies": {
|
|
30
33
|
"@types/node": "22.19.0",
|
|
34
|
+
"@types/semver": "7.7.1",
|
|
35
|
+
"@types/watchpack": "2.4.4",
|
|
31
36
|
"next": "16.0.10",
|
|
32
37
|
"@workflow/tsconfig": "4.0.1-beta.0"
|
|
33
38
|
},
|
package/dist/socket-server.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
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
|
-
} | {
|
|
10
|
-
type: 'trigger-build';
|
|
11
|
-
} | {
|
|
12
|
-
type: 'build-complete';
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Configuration for the socket server
|
|
16
|
-
*/
|
|
17
|
-
export interface SocketServerConfig {
|
|
18
|
-
isDevServer: boolean;
|
|
19
|
-
onFileDiscovered: (filePath: string, hasWorkflow: boolean, hasStep: boolean) => void;
|
|
20
|
-
onTriggerBuild: () => void;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Interface for the socket IO instance returned by createSocketServer
|
|
24
|
-
*/
|
|
25
|
-
export interface SocketIO {
|
|
26
|
-
emit(event: 'build-complete'): void;
|
|
27
|
-
getAuthToken(): string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Serialize a message with authentication preamble
|
|
31
|
-
*/
|
|
32
|
-
export declare function serializeMessage(message: SocketMessage, authToken: string): string;
|
|
33
|
-
/**
|
|
34
|
-
* Parse and authenticate a message from the socket
|
|
35
|
-
* Returns the parsed message if valid, null otherwise
|
|
36
|
-
*/
|
|
37
|
-
export declare function parseMessage(line: string, authToken: string): SocketMessage | null;
|
|
38
|
-
/**
|
|
39
|
-
* Create a TCP socket server for loader<->builder communication.
|
|
40
|
-
* Returns a SocketIO interface for broadcasting messages and the auth token.
|
|
41
|
-
*
|
|
42
|
-
* SECURITY: Server listens on 127.0.0.1 (localhost only) and uses
|
|
43
|
-
* message authentication to prevent processing of unauthorized messages.
|
|
44
|
-
*/
|
|
45
|
-
export declare function createSocketServer(config: SocketServerConfig): Promise<SocketIO>;
|
|
46
|
-
//# sourceMappingURL=socket-server.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;CAClB,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,KACb,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,CA2EnB"}
|
package/dist/socket-server.js
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.serializeMessage = serializeMessage;
|
|
4
|
-
exports.parseMessage = parseMessage;
|
|
5
|
-
exports.createSocketServer = createSocketServer;
|
|
6
|
-
const node_crypto_1 = require("node:crypto");
|
|
7
|
-
const node_net_1 = require("node:net");
|
|
8
|
-
/**
|
|
9
|
-
* Magic preamble that must prefix all messages to authenticate them as workflow messages.
|
|
10
|
-
* This prevents accidental processing of messages from port scanners or other local processes.
|
|
11
|
-
*/
|
|
12
|
-
const MESSAGE_PREAMBLE = 'WF:';
|
|
13
|
-
/**
|
|
14
|
-
* Generate a random authentication token for this server session.
|
|
15
|
-
* Clients must include this token in all messages.
|
|
16
|
-
*/
|
|
17
|
-
function generateAuthToken() {
|
|
18
|
-
return (0, node_crypto_1.randomBytes)(16).toString('hex');
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Serialize a message with authentication preamble
|
|
22
|
-
*/
|
|
23
|
-
function serializeMessage(message, authToken) {
|
|
24
|
-
return `${MESSAGE_PREAMBLE}${authToken}:${JSON.stringify(message)}\n`;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Parse and authenticate a message from the socket
|
|
28
|
-
* Returns the parsed message if valid, null otherwise
|
|
29
|
-
*/
|
|
30
|
-
function parseMessage(line, authToken) {
|
|
31
|
-
const trimmed = line.trim();
|
|
32
|
-
if (!trimmed) {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
// Check for preamble
|
|
36
|
-
if (!trimmed.startsWith(MESSAGE_PREAMBLE)) {
|
|
37
|
-
console.warn('Received message without valid preamble, ignoring');
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
// Extract auth token and payload
|
|
41
|
-
const withoutPreamble = trimmed.slice(MESSAGE_PREAMBLE.length);
|
|
42
|
-
const colonIndex = withoutPreamble.indexOf(':');
|
|
43
|
-
if (colonIndex === -1) {
|
|
44
|
-
console.warn('Received message without auth token separator, ignoring');
|
|
45
|
-
return null;
|
|
46
|
-
}
|
|
47
|
-
const messageToken = withoutPreamble.slice(0, colonIndex);
|
|
48
|
-
const payload = withoutPreamble.slice(colonIndex + 1);
|
|
49
|
-
// Verify auth token
|
|
50
|
-
if (messageToken !== authToken) {
|
|
51
|
-
console.warn('Received message with invalid auth token, ignoring');
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
// Parse JSON payload
|
|
55
|
-
try {
|
|
56
|
-
return JSON.parse(payload);
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
console.error('Failed to parse socket message JSON:', error);
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Create a TCP socket server for loader<->builder communication.
|
|
65
|
-
* Returns a SocketIO interface for broadcasting messages and the auth token.
|
|
66
|
-
*
|
|
67
|
-
* SECURITY: Server listens on 127.0.0.1 (localhost only) and uses
|
|
68
|
-
* message authentication to prevent processing of unauthorized messages.
|
|
69
|
-
*/
|
|
70
|
-
async function createSocketServer(config) {
|
|
71
|
-
const authToken = generateAuthToken();
|
|
72
|
-
const clients = new Set();
|
|
73
|
-
let buildTriggered = false;
|
|
74
|
-
const server = (0, node_net_1.createServer)((socket) => {
|
|
75
|
-
socket.setNoDelay(true);
|
|
76
|
-
clients.add(socket);
|
|
77
|
-
// Send build-complete if build already finished (production mode)
|
|
78
|
-
if (buildTriggered && !config.isDevServer) {
|
|
79
|
-
socket.write(serializeMessage({ type: 'build-complete' }, authToken));
|
|
80
|
-
}
|
|
81
|
-
let buffer = '';
|
|
82
|
-
socket.on('data', (data) => {
|
|
83
|
-
buffer += data.toString();
|
|
84
|
-
// Process complete messages (newline-delimited)
|
|
85
|
-
let newlineIndex = buffer.indexOf('\n');
|
|
86
|
-
while (newlineIndex !== -1) {
|
|
87
|
-
const line = buffer.slice(0, newlineIndex);
|
|
88
|
-
buffer = buffer.slice(newlineIndex + 1);
|
|
89
|
-
newlineIndex = buffer.indexOf('\n');
|
|
90
|
-
const message = parseMessage(line, authToken);
|
|
91
|
-
if (!message) {
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
if (message.type === 'file-discovered') {
|
|
95
|
-
config.onFileDiscovered(message.filePath, message.hasWorkflow, message.hasStep);
|
|
96
|
-
}
|
|
97
|
-
else if (message.type === 'trigger-build') {
|
|
98
|
-
config.onTriggerBuild();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
socket.on('end', () => {
|
|
103
|
-
clients.delete(socket);
|
|
104
|
-
});
|
|
105
|
-
socket.on('error', (err) => {
|
|
106
|
-
console.error('Socket error:', err);
|
|
107
|
-
clients.delete(socket);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
// Listen on random available port (localhost only)
|
|
111
|
-
await new Promise((resolve) => {
|
|
112
|
-
server.listen(0, '127.0.0.1', () => {
|
|
113
|
-
const address = server.address();
|
|
114
|
-
if (address && typeof address === 'object') {
|
|
115
|
-
process.env.WORKFLOW_SOCKET_PORT = String(address.port);
|
|
116
|
-
process.env.WORKFLOW_SOCKET_AUTH = authToken;
|
|
117
|
-
}
|
|
118
|
-
resolve();
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
return {
|
|
122
|
-
emit: (_event) => {
|
|
123
|
-
buildTriggered = true;
|
|
124
|
-
const message = serializeMessage({ type: 'build-complete' }, authToken);
|
|
125
|
-
for (const client of clients) {
|
|
126
|
-
client.write(message);
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
getAuthToken: () => authToken,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=socket-server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../src/socket-server.ts"],"names":[],"mappings":";;AAsDA,4CAKC;AAMD,oCAuCC;AASD,gDA6EC;AA9LD,6CAA0C;AAC1C,uCAAkE;AAElE;;;GAGG;AACH,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B;;;GAGG;AACH,SAAS,iBAAiB;IACxB,OAAO,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAoCD;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,OAAsB,EACtB,SAAiB;IAEjB,OAAO,GAAG,gBAAgB,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAC1B,IAAY,EACZ,SAAiB;IAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iCAAiC;IACjC,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAEtD,oBAAoB;IACpB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAA0B;IAE1B,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,MAAM,MAAM,GAAW,IAAA,uBAAY,EAAC,CAAC,MAAc,EAAE,EAAE;QACrD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,kEAAkE;QAClE,IAAI,cAAc,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACjC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE1B,gDAAgD;YAChD,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBACxC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEpC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,SAAS;gBACX,CAAC;gBAED,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACvC,MAAM,CAAC,gBAAgB,CACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,OAAO,CAChB,CAAC;gBACJ,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBAC5C,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACpB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAChC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,SAAS,CAAC;YAC/C,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,CAAC,MAAwB,EAAE,EAAE;YACjC,cAAc,GAAG,IAAI,CAAC;YACtB,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,SAAS,CAAC,CAAC;YACxE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC"}
|