@workflow/builders 4.0.1-beta.9 → 5.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/apply-swc-transform.d.ts +19 -4
- package/dist/apply-swc-transform.d.ts.map +1 -1
- package/dist/apply-swc-transform.js +62 -7
- package/dist/apply-swc-transform.js.map +1 -1
- package/dist/base-builder.d.ts +77 -22
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +667 -202
- package/dist/base-builder.js.map +1 -1
- package/dist/build-queue.d.ts +18 -0
- package/dist/build-queue.d.ts.map +1 -0
- package/dist/build-queue.js +26 -0
- package/dist/build-queue.js.map +1 -0
- package/dist/config-helpers.d.ts +32 -0
- package/dist/config-helpers.d.ts.map +1 -1
- package/dist/config-helpers.js +61 -0
- package/dist/config-helpers.js.map +1 -1
- package/dist/constants.d.ts +2 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -4
- package/dist/constants.js.map +1 -1
- package/dist/discover-entries-esbuild-plugin.d.ts +5 -6
- package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
- package/dist/discover-entries-esbuild-plugin.js +98 -30
- package/dist/discover-entries-esbuild-plugin.js.map +1 -1
- package/dist/discover-entries-esbuild-plugin.test.d.ts +2 -0
- package/dist/discover-entries-esbuild-plugin.test.d.ts.map +1 -0
- package/dist/discover-entries-esbuild-plugin.test.js +110 -0
- package/dist/discover-entries-esbuild-plugin.test.js.map +1 -0
- package/dist/esbuild-tsconfig.d.ts +13 -0
- package/dist/esbuild-tsconfig.d.ts.map +1 -0
- package/dist/esbuild-tsconfig.js +25 -0
- package/dist/esbuild-tsconfig.js.map +1 -0
- package/dist/esbuild-tsconfig.test.d.ts +2 -0
- package/dist/esbuild-tsconfig.test.d.ts.map +1 -0
- package/dist/esbuild-tsconfig.test.js +94 -0
- package/dist/esbuild-tsconfig.test.js.map +1 -0
- package/dist/get-input-files.test.d.ts +2 -0
- package/dist/get-input-files.test.d.ts.map +1 -0
- package/dist/get-input-files.test.js +121 -0
- package/dist/get-input-files.test.js.map +1 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/module-specifier.d.ts +85 -0
- package/dist/module-specifier.d.ts.map +1 -0
- package/dist/module-specifier.js +448 -0
- package/dist/module-specifier.js.map +1 -0
- package/dist/module-specifier.test.d.ts +2 -0
- package/dist/module-specifier.test.d.ts.map +1 -0
- package/dist/module-specifier.test.js +240 -0
- package/dist/module-specifier.test.js.map +1 -0
- package/dist/node-module-esbuild-plugin.d.ts +37 -0
- package/dist/node-module-esbuild-plugin.d.ts.map +1 -1
- package/dist/node-module-esbuild-plugin.js +364 -7
- package/dist/node-module-esbuild-plugin.js.map +1 -1
- package/dist/node-module-esbuild-plugin.test.js +461 -146
- package/dist/node-module-esbuild-plugin.test.js.map +1 -1
- package/dist/pseudo-package-esbuild-plugin.d.ts +20 -0
- package/dist/pseudo-package-esbuild-plugin.d.ts.map +1 -0
- package/dist/pseudo-package-esbuild-plugin.js +47 -0
- package/dist/pseudo-package-esbuild-plugin.js.map +1 -0
- package/dist/pseudo-package-esbuild-plugin.test.d.ts +2 -0
- package/dist/pseudo-package-esbuild-plugin.test.d.ts.map +1 -0
- package/dist/pseudo-package-esbuild-plugin.test.js +315 -0
- package/dist/pseudo-package-esbuild-plugin.test.js.map +1 -0
- package/dist/request-converter.d.ts +3 -0
- package/dist/request-converter.d.ts.map +1 -0
- package/dist/request-converter.js +14 -0
- package/dist/request-converter.js.map +1 -0
- package/dist/serde-checker.d.ts +70 -0
- package/dist/serde-checker.d.ts.map +1 -0
- package/dist/serde-checker.js +118 -0
- package/dist/serde-checker.js.map +1 -0
- package/dist/standalone.d.ts +3 -0
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +37 -13
- package/dist/standalone.js.map +1 -1
- package/dist/swc-esbuild-plugin.d.ts +23 -2
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +133 -43
- package/dist/swc-esbuild-plugin.js.map +1 -1
- package/dist/swc-esbuild-plugin.test.d.ts +2 -0
- package/dist/swc-esbuild-plugin.test.d.ts.map +1 -0
- package/dist/swc-esbuild-plugin.test.js +493 -0
- package/dist/swc-esbuild-plugin.test.js.map +1 -0
- package/dist/transform-utils.d.ts +68 -0
- package/dist/transform-utils.d.ts.map +1 -0
- package/dist/transform-utils.js +102 -0
- package/dist/transform-utils.js.map +1 -0
- package/dist/transform-utils.test.d.ts +2 -0
- package/dist/transform-utils.test.d.ts.map +1 -0
- package/dist/transform-utils.test.js +302 -0
- package/dist/transform-utils.test.js.map +1 -0
- package/dist/types.d.ts +31 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/dist/vercel-build-output-api.d.ts.map +1 -1
- package/dist/vercel-build-output-api.js +38 -14
- package/dist/vercel-build-output-api.js.map +1 -1
- package/dist/workflow-alias.d.ts +3 -0
- package/dist/workflow-alias.d.ts.map +1 -0
- package/dist/workflow-alias.js +65 -0
- package/dist/workflow-alias.js.map +1 -0
- package/dist/workflow-alias.test.d.ts +2 -0
- package/dist/workflow-alias.test.d.ts.map +1 -0
- package/dist/workflow-alias.test.js +53 -0
- package/dist/workflow-alias.test.js.map +1 -0
- package/dist/workflows-extractor.d.ts +92 -0
- package/dist/workflows-extractor.d.ts.map +1 -0
- package/dist/workflows-extractor.js +1476 -0
- package/dist/workflows-extractor.js.map +1 -0
- package/package.json +14 -13
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serde compliance checker for workflow custom class serialization.
|
|
3
|
+
*
|
|
4
|
+
* Analyzes source code to determine if classes with WORKFLOW_SERIALIZE /
|
|
5
|
+
* WORKFLOW_DESERIALIZE are correctly set up for the workflow sandbox.
|
|
6
|
+
*
|
|
7
|
+
* Used by:
|
|
8
|
+
* - CLI `validate` command
|
|
9
|
+
* - CLI `transform` command (--check-serde)
|
|
10
|
+
* - SWC playground serde analysis panel
|
|
11
|
+
* - Build-time warnings in BaseBuilder
|
|
12
|
+
*/
|
|
13
|
+
import builtinModules from 'builtin-modules';
|
|
14
|
+
// Build a regex that matches Node.js built-in module imports in transformed code.
|
|
15
|
+
// Handles both ESM (`from 'fs'`, `from 'node:fs'`) and CJS (`require('fs')`)
|
|
16
|
+
const nodeBuiltins = builtinModules.join('|');
|
|
17
|
+
// Regex to extract specific module names from import/require statements
|
|
18
|
+
const nodeImportExtractRegex = new RegExp(`(?:from\\s+['"](?:node:)?((?:${nodeBuiltins})(?:/[^'"]*)?)['"]` +
|
|
19
|
+
`|require\\s*\\(\\s*['"](?:node:)?((?:${nodeBuiltins})(?:/[^'"]*)?)['"]\\s*\\))`, 'g');
|
|
20
|
+
// Regex to detect class registration IIFEs generated by the SWC plugin
|
|
21
|
+
const registrationIifeRegex = /Symbol\.for\s*\(\s*["']workflow-class-registry["']\s*\)/;
|
|
22
|
+
/**
|
|
23
|
+
* Lightweight serde compliance checker that works with pre-computed
|
|
24
|
+
* SWC transform results. This avoids re-running the SWC transform
|
|
25
|
+
* when the caller already has the outputs (e.g., the playground or builder).
|
|
26
|
+
*/
|
|
27
|
+
export function analyzeSerdeCompliance(options) {
|
|
28
|
+
const { sourceCode, workflowCode, manifest } = options;
|
|
29
|
+
// 1. Extract all Node.js built-in imports from the workflow output
|
|
30
|
+
const globalNodeImports = extractNodeImports(workflowCode);
|
|
31
|
+
// 2. Check if the manifest contains any serde-registered classes
|
|
32
|
+
const classEntries = extractClassEntries(manifest);
|
|
33
|
+
const hasSerdeClasses = classEntries.length > 0;
|
|
34
|
+
// 3. Check if the workflow output contains registration IIFEs
|
|
35
|
+
const hasRegistration = registrationIifeRegex.test(workflowCode);
|
|
36
|
+
// 4. Analyze each class
|
|
37
|
+
const classes = classEntries.map((entry) => {
|
|
38
|
+
const issues = [];
|
|
39
|
+
// Check for Node.js imports (these will fail in the workflow sandbox)
|
|
40
|
+
if (globalNodeImports.length > 0) {
|
|
41
|
+
issues.push(`Workflow bundle contains Node.js built-in imports: ${globalNodeImports.join(', ')}. ` +
|
|
42
|
+
`These will fail at runtime in the workflow sandbox. ` +
|
|
43
|
+
`Add "use step" to methods that depend on Node.js APIs so they are stripped from the workflow bundle.`);
|
|
44
|
+
}
|
|
45
|
+
// Check for registration
|
|
46
|
+
if (!hasRegistration) {
|
|
47
|
+
issues.push(`No class registration IIFE was generated. ` +
|
|
48
|
+
`Ensure WORKFLOW_SERIALIZE and WORKFLOW_DESERIALIZE are defined as static methods ` +
|
|
49
|
+
`inside the class body using computed property syntax: static [WORKFLOW_SERIALIZE](...) { ... }`);
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
className: entry.className,
|
|
53
|
+
classId: entry.classId,
|
|
54
|
+
detected: true,
|
|
55
|
+
registered: hasRegistration,
|
|
56
|
+
nodeImports: globalNodeImports,
|
|
57
|
+
compliant: globalNodeImports.length === 0 && hasRegistration,
|
|
58
|
+
issues,
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
// 5. Check for classes that have serde patterns in source but weren't detected by SWC
|
|
62
|
+
const sourceHasSerdePatterns = /\[\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\s*\]/.test(sourceCode) ||
|
|
63
|
+
/Symbol\.for\s*\(\s*['"]workflow-(?:serialize|deserialize)['"]\s*\)/.test(sourceCode);
|
|
64
|
+
if (sourceHasSerdePatterns && classEntries.length === 0) {
|
|
65
|
+
classes.push({
|
|
66
|
+
className: '<unknown>',
|
|
67
|
+
classId: '',
|
|
68
|
+
detected: false,
|
|
69
|
+
registered: false,
|
|
70
|
+
nodeImports: globalNodeImports,
|
|
71
|
+
compliant: false,
|
|
72
|
+
issues: [
|
|
73
|
+
`Source code contains WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE patterns but ` +
|
|
74
|
+
`the SWC plugin did not detect any serde-enabled classes. ` +
|
|
75
|
+
`Ensure the symbols are defined as static methods INSIDE the class body, ` +
|
|
76
|
+
`not assigned externally (e.g., (MyClass as any)[WORKFLOW_SERIALIZE] = ...).`,
|
|
77
|
+
],
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
classes,
|
|
82
|
+
globalNodeImports,
|
|
83
|
+
hasSerdeClasses,
|
|
84
|
+
manifest,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Extract Node.js built-in module names from transformed code.
|
|
89
|
+
*/
|
|
90
|
+
function extractNodeImports(code) {
|
|
91
|
+
const imports = new Set();
|
|
92
|
+
// Reset regex state
|
|
93
|
+
nodeImportExtractRegex.lastIndex = 0;
|
|
94
|
+
for (let match = nodeImportExtractRegex.exec(code); match !== null; match = nodeImportExtractRegex.exec(code)) {
|
|
95
|
+
// match[1] is from the ESM pattern, match[2] is from the CJS pattern
|
|
96
|
+
const moduleName = match[1] || match[2];
|
|
97
|
+
if (moduleName) {
|
|
98
|
+
// Normalize to base module name (e.g., 'fs/promises' -> 'fs')
|
|
99
|
+
imports.add(moduleName.split('/')[0]);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return [...imports].sort();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Extract class entries from a WorkflowManifest.
|
|
106
|
+
*/
|
|
107
|
+
export function extractClassEntries(manifest) {
|
|
108
|
+
const entries = [];
|
|
109
|
+
if (!manifest.classes)
|
|
110
|
+
return entries;
|
|
111
|
+
for (const [fileName, classes] of Object.entries(manifest.classes)) {
|
|
112
|
+
for (const [className, { classId }] of Object.entries(classes)) {
|
|
113
|
+
entries.push({ className, classId, fileName });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return entries;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=serde-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serde-checker.js","sourceRoot":"","sources":["../src/serde-checker.ts"],"names":[],"mappings":"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"}
|
package/dist/standalone.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { BaseBuilder } from './base-builder.js';
|
|
2
|
+
import type { WorkflowConfig } from './types.js';
|
|
2
3
|
export declare class StandaloneBuilder extends BaseBuilder {
|
|
4
|
+
constructor(config: WorkflowConfig);
|
|
3
5
|
build(): Promise<void>;
|
|
6
|
+
private mergeManifests;
|
|
4
7
|
private buildStepsBundle;
|
|
5
8
|
private buildWorkflowsBundle;
|
|
6
9
|
private buildWebhookFunction;
|
package/dist/standalone.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,MAAM,EAAE,cAAc;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B5B,OAAO,CAAC,cAAc;YAuBR,gBAAgB;YAqBhB,oBAAoB;YA0BpB,oBAAoB;CAUnC"}
|
package/dist/standalone.js
CHANGED
|
@@ -1,39 +1,63 @@
|
|
|
1
1
|
import { BaseBuilder } from './base-builder.js';
|
|
2
2
|
export class StandaloneBuilder extends BaseBuilder {
|
|
3
|
+
constructor(config) {
|
|
4
|
+
super({
|
|
5
|
+
...config,
|
|
6
|
+
dirs: ['.'],
|
|
7
|
+
});
|
|
8
|
+
}
|
|
3
9
|
async build() {
|
|
4
10
|
const inputFiles = await this.getInputFiles();
|
|
5
|
-
const
|
|
11
|
+
const tsconfigPath = await this.findTsConfigPath();
|
|
6
12
|
const options = {
|
|
7
13
|
inputFiles,
|
|
8
|
-
|
|
9
|
-
tsPaths: tsConfig.paths,
|
|
14
|
+
tsconfigPath,
|
|
10
15
|
};
|
|
11
|
-
await this.buildStepsBundle(options);
|
|
12
|
-
await this.buildWorkflowsBundle(options);
|
|
16
|
+
const stepsManifest = await this.buildStepsBundle(options);
|
|
17
|
+
const workflowsManifest = await this.buildWorkflowsBundle(options);
|
|
13
18
|
await this.buildWebhookFunction();
|
|
19
|
+
// Merge manifests from both bundles
|
|
20
|
+
// Steps bundle discovers classes from default export conditions
|
|
21
|
+
// Workflow bundle discovers classes from 'workflow' export conditions
|
|
22
|
+
const manifest = this.mergeManifests(stepsManifest, workflowsManifest);
|
|
23
|
+
// Build unified manifest from workflow bundle
|
|
24
|
+
const workflowBundlePath = this.resolvePath(this.config.workflowsBundlePath);
|
|
25
|
+
const manifestDir = this.resolvePath('.well-known/workflow/v1');
|
|
26
|
+
await this.createManifest({
|
|
27
|
+
workflowBundlePath,
|
|
28
|
+
manifestDir,
|
|
29
|
+
manifest,
|
|
30
|
+
});
|
|
14
31
|
await this.createClientLibrary();
|
|
15
32
|
}
|
|
16
|
-
|
|
33
|
+
mergeManifests(stepsManifest, workflowsManifest) {
|
|
34
|
+
return {
|
|
35
|
+
steps: { ...stepsManifest.steps, ...workflowsManifest.steps },
|
|
36
|
+
workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },
|
|
37
|
+
classes: { ...stepsManifest.classes, ...workflowsManifest.classes },
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async buildStepsBundle({ inputFiles, tsconfigPath, }) {
|
|
17
41
|
console.log('Creating steps bundle at', this.config.stepsBundlePath);
|
|
18
42
|
const stepsBundlePath = this.resolvePath(this.config.stepsBundlePath);
|
|
19
43
|
await this.ensureDirectory(stepsBundlePath);
|
|
20
|
-
await this.createStepsBundle({
|
|
44
|
+
const { manifest } = await this.createStepsBundle({
|
|
21
45
|
outfile: stepsBundlePath,
|
|
22
46
|
inputFiles,
|
|
23
|
-
|
|
24
|
-
tsPaths,
|
|
47
|
+
tsconfigPath,
|
|
25
48
|
});
|
|
49
|
+
return manifest;
|
|
26
50
|
}
|
|
27
|
-
async buildWorkflowsBundle({ inputFiles,
|
|
51
|
+
async buildWorkflowsBundle({ inputFiles, tsconfigPath, }) {
|
|
28
52
|
console.log('Creating workflows bundle at', this.config.workflowsBundlePath);
|
|
29
53
|
const workflowBundlePath = this.resolvePath(this.config.workflowsBundlePath);
|
|
30
54
|
await this.ensureDirectory(workflowBundlePath);
|
|
31
|
-
await this.createWorkflowsBundle({
|
|
55
|
+
const { manifest } = await this.createWorkflowsBundle({
|
|
32
56
|
outfile: workflowBundlePath,
|
|
33
57
|
inputFiles,
|
|
34
|
-
|
|
35
|
-
tsPaths,
|
|
58
|
+
tsconfigPath,
|
|
36
59
|
});
|
|
60
|
+
return manifest;
|
|
37
61
|
}
|
|
38
62
|
async buildWebhookFunction() {
|
|
39
63
|
console.log('Creating webhook bundle at', this.config.webhookBundlePath);
|
package/dist/standalone.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,30 @@ export interface SwcPluginOptions {
|
|
|
4
4
|
mode: 'step' | 'workflow' | 'client';
|
|
5
5
|
entriesToBundle?: string[];
|
|
6
6
|
outdir?: string;
|
|
7
|
-
|
|
8
|
-
tsBaseUrl?: string;
|
|
7
|
+
projectRoot?: string;
|
|
9
8
|
workflowManifest?: WorkflowManifest;
|
|
9
|
+
/**
|
|
10
|
+
* Rewrite TypeScript extensions (.ts, .tsx, .mts, .cts) to their JS
|
|
11
|
+
* equivalents (.js, .mjs, .cjs) in externalized import paths.
|
|
12
|
+
*
|
|
13
|
+
* Enable this when the output bundle is consumed directly by Node's native
|
|
14
|
+
* ESM loader (e.g. vitest), which cannot resolve .ts extensions.
|
|
15
|
+
*
|
|
16
|
+
* Leave disabled (default) when a downstream bundler (webpack, Vite, etc.)
|
|
17
|
+
* handles resolution — those tools resolve .ts natively and rewriting
|
|
18
|
+
* breaks them because the .js file doesn't exist on disk.
|
|
19
|
+
*/
|
|
20
|
+
rewriteTsExtensions?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Absolute file paths of discovered workflow/step/serde entries whose
|
|
23
|
+
* imports must be treated as side-effectful.
|
|
24
|
+
*
|
|
25
|
+
* The SWC compiler transform injects registration calls (workflow IDs,
|
|
26
|
+
* step IDs, class serialization, etc.) into these files. Without this
|
|
27
|
+
* override, esbuild honours `"sideEffects": false` from the package's
|
|
28
|
+
* `package.json` and silently drops bare imports of these modules.
|
|
29
|
+
*/
|
|
30
|
+
sideEffectEntries?: string[];
|
|
10
31
|
}
|
|
11
32
|
export declare function createSwcPlugin(options: SwcPluginOptions): Plugin;
|
|
12
33
|
//# sourceMappingURL=swc-esbuild-plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAOlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAsCD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAsSjE"}
|
|
@@ -4,6 +4,7 @@ import { promisify } from 'node:util';
|
|
|
4
4
|
import enhancedResolveOrig from 'enhanced-resolve';
|
|
5
5
|
import { applySwcTransform, } from './apply-swc-transform.js';
|
|
6
6
|
import { jsTsRegex, parentHasChild, } from './discover-entries-esbuild-plugin.js';
|
|
7
|
+
import { resolveWorkflowAliasRelativePath } from './workflow-alias.js';
|
|
7
8
|
const NODE_RESOLVE_OPTIONS = {
|
|
8
9
|
dependencyType: 'commonjs',
|
|
9
10
|
modules: ['node_modules'],
|
|
@@ -11,7 +12,18 @@ const NODE_RESOLVE_OPTIONS = {
|
|
|
11
12
|
importsFields: ['imports'],
|
|
12
13
|
conditionNames: ['node', 'require'],
|
|
13
14
|
descriptionFiles: ['package.json'],
|
|
14
|
-
extensions: [
|
|
15
|
+
extensions: [
|
|
16
|
+
'.ts',
|
|
17
|
+
'.tsx',
|
|
18
|
+
'.mts',
|
|
19
|
+
'.cts',
|
|
20
|
+
'.cjs',
|
|
21
|
+
'.mjs',
|
|
22
|
+
'.js',
|
|
23
|
+
'.jsx',
|
|
24
|
+
'.json',
|
|
25
|
+
'.node',
|
|
26
|
+
],
|
|
15
27
|
enforceExtensions: false,
|
|
16
28
|
symlinks: true,
|
|
17
29
|
mainFields: ['main'],
|
|
@@ -43,48 +55,119 @@ export function createSwcPlugin(options) {
|
|
|
43
55
|
return cjsResolver(context, path);
|
|
44
56
|
}
|
|
45
57
|
};
|
|
58
|
+
// Pre-compute the normalized side-effect entries set for O(1) lookups.
|
|
59
|
+
const normalizedSideEffectEntries = new Set(options.sideEffectEntries?.map((e) => e.replace(/\\/g, '/')));
|
|
46
60
|
build.onResolve({ filter: /.*/ }, async (args) => {
|
|
47
|
-
if (
|
|
61
|
+
if (args.pluginData?.skipSwcPlugin)
|
|
62
|
+
return null;
|
|
63
|
+
if (!options.entriesToBundle &&
|
|
64
|
+
normalizedSideEffectEntries.size === 0) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
// When only sideEffectEntries is set (no entriesToBundle), we only
|
|
68
|
+
// need to override sideEffects for top-level bare imports — typically
|
|
69
|
+
// from the virtual entry. Skip resolution for transitive imports
|
|
70
|
+
// (dynamic imports, requires, etc.) to avoid unnecessary overhead.
|
|
71
|
+
if (!options.entriesToBundle && args.kind !== 'import-statement') {
|
|
48
72
|
return null;
|
|
49
73
|
}
|
|
50
74
|
try {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
75
|
+
const specifier = args.path;
|
|
76
|
+
const specifierIsPath = specifier.startsWith('.') || specifier.startsWith('/');
|
|
77
|
+
let resolvedPath;
|
|
78
|
+
// Determines whether the external path should be relativized
|
|
79
|
+
// (project-local file) or kept as a bare specifier (npm package).
|
|
80
|
+
let shouldMakeRelative = specifierIsPath;
|
|
81
|
+
if (specifierIsPath) {
|
|
82
|
+
resolvedPath = await enhancedResolve(args.resolveDir, specifier);
|
|
55
83
|
}
|
|
56
84
|
else {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
85
|
+
// Resolve from project root so nested deps aren't externalized
|
|
86
|
+
resolvedPath = await enhancedResolve(build.initialOptions.absWorkingDir || process.cwd(), specifier).catch(() => undefined); // swallow so esbuild fallback below can try
|
|
87
|
+
// Fall back to esbuild for aliases/tsconfig paths,
|
|
88
|
+
// but only accept project-local results
|
|
89
|
+
if (!resolvedPath) {
|
|
90
|
+
const esbuildResult = await build.resolve(specifier, {
|
|
91
|
+
resolveDir: args.resolveDir,
|
|
92
|
+
kind: args.kind,
|
|
93
|
+
pluginData: { skipSwcPlugin: true },
|
|
94
|
+
});
|
|
95
|
+
const didResolve = !!esbuildResult.path && !esbuildResult.errors.length;
|
|
96
|
+
const isProjectLocalFile = didResolve &&
|
|
97
|
+
!esbuildResult.external &&
|
|
98
|
+
!esbuildResult.path
|
|
99
|
+
.replace(/\\/g, '/')
|
|
100
|
+
.includes('/node_modules/');
|
|
101
|
+
if (isProjectLocalFile) {
|
|
102
|
+
resolvedPath = esbuildResult.path;
|
|
103
|
+
shouldMakeRelative = true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
64
106
|
}
|
|
65
107
|
if (!resolvedPath)
|
|
66
108
|
return null;
|
|
67
109
|
// Normalize to forward slashes for cross-platform comparison
|
|
68
110
|
const normalizedResolvedPath = resolvedPath.replace(/\\/g, '/');
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
111
|
+
// Check if this module is a discovered entry whose SWC-transformed
|
|
112
|
+
// code contains side effects (workflow/step/class registration).
|
|
113
|
+
// Override the package.json "sideEffects": false so esbuild does not
|
|
114
|
+
// drop bare imports of these modules.
|
|
115
|
+
const hasSideEffects = normalizedSideEffectEntries.has(normalizedResolvedPath);
|
|
116
|
+
if (options.entriesToBundle) {
|
|
117
|
+
let shouldBundle = false;
|
|
118
|
+
for (const entryToBundle of options.entriesToBundle) {
|
|
119
|
+
const normalizedEntry = entryToBundle.replace(/\\/g, '/');
|
|
120
|
+
if (normalizedResolvedPath === normalizedEntry) {
|
|
121
|
+
shouldBundle = true;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
// if the current entry imports a child that needs
|
|
125
|
+
// to be bundled then it needs to also be bundled so
|
|
126
|
+
// that the child can have our transform applied
|
|
127
|
+
if (parentHasChild(normalizedResolvedPath, normalizedEntry)) {
|
|
128
|
+
shouldBundle = true;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (shouldBundle) {
|
|
133
|
+
// Let esbuild bundle this entry, but override sideEffects if needed.
|
|
134
|
+
// We must return the resolved `path` alongside `sideEffects` because
|
|
135
|
+
// returning only `{ sideEffects: true }` without a path causes esbuild
|
|
136
|
+
// to fall through to its own resolver, which re-reads the package.json
|
|
137
|
+
// and applies `"sideEffects": false` from there.
|
|
138
|
+
return hasSideEffects
|
|
139
|
+
? { path: resolvedPath, sideEffects: true }
|
|
140
|
+
: null;
|
|
73
141
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
142
|
+
let externalPath;
|
|
143
|
+
if (shouldMakeRelative) {
|
|
144
|
+
externalPath = relative(options.outdir || process.cwd(), resolvedPath).replace(/\\/g, '/');
|
|
145
|
+
if (options.rewriteTsExtensions) {
|
|
146
|
+
// Rewrite TypeScript extensions to their JS equivalents so the
|
|
147
|
+
// externalized import is loadable by Node's native ESM loader.
|
|
148
|
+
externalPath = externalPath
|
|
149
|
+
.replace(/\.tsx?$/, '.js')
|
|
150
|
+
.replace(/\.mts$/, '.mjs')
|
|
151
|
+
.replace(/\.cts$/, '.cjs');
|
|
152
|
+
}
|
|
79
153
|
}
|
|
154
|
+
else {
|
|
155
|
+
externalPath = specifier;
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
external: true,
|
|
159
|
+
path: externalPath,
|
|
160
|
+
sideEffects: hasSideEffects || undefined,
|
|
161
|
+
};
|
|
80
162
|
}
|
|
81
|
-
|
|
82
|
-
return
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
163
|
+
// No entriesToBundle — only override sideEffects when needed.
|
|
164
|
+
// We must return the resolved `path` alongside `sideEffects` because
|
|
165
|
+
// returning only `{ sideEffects: true }` without a path causes esbuild
|
|
166
|
+
// to fall through to its own resolver, which re-reads the package.json
|
|
167
|
+
// and applies `"sideEffects": false` from there.
|
|
168
|
+
return hasSideEffects
|
|
169
|
+
? { path: resolvedPath, sideEffects: true }
|
|
170
|
+
: null;
|
|
88
171
|
}
|
|
89
172
|
catch (_) { }
|
|
90
173
|
return null;
|
|
@@ -92,17 +175,23 @@ export function createSwcPlugin(options) {
|
|
|
92
175
|
// Handle TypeScript and JavaScript files
|
|
93
176
|
build.onLoad({ filter: jsTsRegex }, async (args) => {
|
|
94
177
|
// Determine if this is a TypeScript file
|
|
95
|
-
const isTypeScript = args.path.endsWith('.ts') || args.path.endsWith('.tsx');
|
|
96
178
|
try {
|
|
97
179
|
// Determine the loader based on the output
|
|
98
180
|
let loader = 'js';
|
|
99
|
-
if (
|
|
181
|
+
if (args.path.endsWith('.jsx')) {
|
|
100
182
|
loader = 'jsx';
|
|
101
183
|
}
|
|
184
|
+
else if (args.path.endsWith('.tsx')) {
|
|
185
|
+
loader = 'tsx';
|
|
186
|
+
}
|
|
102
187
|
const source = await readFile(args.path, 'utf8');
|
|
188
|
+
const normalizedSource = source
|
|
189
|
+
.replace(/require\(\s*(['"])server-only\1\s*\)/g, 'void 0')
|
|
190
|
+
.replace(/require\(\s*(['"])client-only\1\s*\)/g, 'void 0');
|
|
103
191
|
// Calculate relative path for SWC plugin
|
|
104
192
|
// The filename parameter is used to generate workflowId/stepId, so it must be relative
|
|
105
193
|
const workingDir = build.initialOptions.absWorkingDir || process.cwd();
|
|
194
|
+
const projectRoot = options.projectRoot || workingDir;
|
|
106
195
|
// Normalize paths: convert backslashes to forward slashes and remove trailing slashes
|
|
107
196
|
const normalizedWorkingDir = workingDir
|
|
108
197
|
.replace(/\\/g, '/')
|
|
@@ -129,10 +218,16 @@ export function createSwcPlugin(options) {
|
|
|
129
218
|
// Handle files discovered outside the working directory
|
|
130
219
|
// These come back as ../path/to/file, but we want just path/to/file
|
|
131
220
|
if (relativeFilepath.startsWith('../')) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
221
|
+
const aliasedRelativePath = await resolveWorkflowAliasRelativePath(args.path, workingDir);
|
|
222
|
+
if (aliasedRelativePath) {
|
|
223
|
+
relativeFilepath = aliasedRelativePath;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
relativeFilepath = relativeFilepath
|
|
227
|
+
.split('/')
|
|
228
|
+
.filter((part) => part !== '..')
|
|
229
|
+
.join('/');
|
|
230
|
+
}
|
|
136
231
|
}
|
|
137
232
|
}
|
|
138
233
|
// Final safety check - ensure we never pass an absolute path to SWC
|
|
@@ -142,19 +237,14 @@ export function createSwcPlugin(options) {
|
|
|
142
237
|
console.error(`[ERROR] relativeFilepath is still absolute: ${relativeFilepath}`);
|
|
143
238
|
relativeFilepath = normalizedPath.split('/').pop() || 'unknown.ts';
|
|
144
239
|
}
|
|
145
|
-
const { code: transformedCode, workflowManifest } = await applySwcTransform(relativeFilepath,
|
|
146
|
-
|
|
147
|
-
// alias via swc so that we can resolve them
|
|
148
|
-
// with our custom resolve logic
|
|
149
|
-
{
|
|
150
|
-
paths: options.tsPaths,
|
|
151
|
-
baseUrl: options.tsBaseUrl,
|
|
152
|
-
});
|
|
240
|
+
const { code: transformedCode, workflowManifest } = await applySwcTransform(relativeFilepath, normalizedSource, options.mode, args.path, // Pass absolute path for module specifier resolution
|
|
241
|
+
projectRoot);
|
|
153
242
|
if (!options.workflowManifest) {
|
|
154
243
|
options.workflowManifest = {};
|
|
155
244
|
}
|
|
156
245
|
options.workflowManifest.workflows = Object.assign(options.workflowManifest.workflows || {}, workflowManifest.workflows);
|
|
157
246
|
options.workflowManifest.steps = Object.assign(options.workflowManifest.steps || {}, workflowManifest.steps);
|
|
247
|
+
options.workflowManifest.classes = Object.assign(options.workflowManifest.classes || {}, workflowManifest.classes);
|
|
158
248
|
return {
|
|
159
249
|
contents: transformedCode,
|
|
160
250
|
loader,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swc-esbuild-plugin.js","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EACL,iBAAiB,GAElB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,SAAS,EACT,cAAc,GACf,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"swc-esbuild-plugin.js","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swc-esbuild-plugin.test.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.test.ts"],"names":[],"mappings":""}
|