@workflow/next 4.0.1-beta.5 → 4.0.1-beta.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4,15 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.withWorkflow = withWorkflow;
7
- const next_build_1 = require("@workflow/cli/dist/lib/builders/next-build");
7
+ const path_1 = __importDefault(require("path"));
8
8
  const semver_1 = __importDefault(require("semver"));
9
+ const builder_js_1 = require("./builder.js");
10
+ const swc_cache_js_1 = require("./swc-cache.js");
9
11
  function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
10
12
  if (!process.env.VERCEL_DEPLOYMENT_ID) {
11
13
  if (!process.env.WORKFLOW_TARGET_WORLD) {
12
- process.env.WORKFLOW_TARGET_WORLD = 'embedded';
13
- process.env.WORKFLOW_EMBEDDED_DATA_DIR = '.next/workflow-data';
14
+ process.env.WORKFLOW_TARGET_WORLD = 'local';
15
+ process.env.WORKFLOW_LOCAL_DATA_DIR = '.next/workflow-data';
14
16
  }
15
- const maybePort = workflows?.embedded?.port;
17
+ const maybePort = workflows?.local?.port;
16
18
  if (maybePort) {
17
19
  process.env.PORT = maybePort.toString();
18
20
  }
@@ -24,6 +26,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
24
26
  }
25
27
  return async function buildConfig(phase, ctx) {
26
28
  const loaderPath = require.resolve('./loader');
29
+ let runDeferredBuildFromCallback;
27
30
  let nextConfig;
28
31
  if (typeof nextConfigOrFn === 'function') {
29
32
  nextConfig = await nextConfigOrFn(phase, ctx);
@@ -43,16 +46,98 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
43
46
  const existingRules = nextConfig.turbopack.rules;
44
47
  const nextVersion = require('next/package.json').version;
45
48
  const supportsTurboCondition = semver_1.default.gte(nextVersion, 'v16.0.0');
46
- for (const key of ['*.tsx', '*.ts', '*.jsx', '*.js']) {
49
+ const useDeferredBuilder = (0, builder_js_1.shouldUseDeferredBuilder)(nextVersion);
50
+ // Deferred builder discovers files via loader socket notifications, so
51
+ // turbopack content conditions are only needed with the eager builder.
52
+ const shouldApplyTurboCondition = supportsTurboCondition && !useDeferredBuilder;
53
+ const shouldWatch = process.env.NODE_ENV === 'development';
54
+ let workflowBuilderPromise;
55
+ const getWorkflowBuilder = async () => {
56
+ if (!workflowBuilderPromise) {
57
+ workflowBuilderPromise = (async () => {
58
+ const NextBuilder = await (0, builder_js_1.getNextBuilder)(nextVersion);
59
+ return new NextBuilder({
60
+ watch: shouldWatch,
61
+ // discover workflows from pages/app entries
62
+ dirs: ['pages', 'app', 'src/pages', 'src/app'],
63
+ workingDir: process.cwd(),
64
+ distDir: nextConfig.distDir || '.next',
65
+ buildTarget: 'next',
66
+ workflowsBundlePath: '', // not used in base
67
+ stepsBundlePath: '', // not used in base
68
+ webhookBundlePath: '', // node used in base
69
+ externalPackages: [
70
+ // server-only and client-only are pseudo-packages handled by Next.js
71
+ // during its build process. We mark them as external to prevent esbuild
72
+ // from failing when bundling code that imports them.
73
+ // See: https://nextjs.org/docs/app/getting-started/server-and-client-components
74
+ 'server-only',
75
+ 'client-only',
76
+ ...(nextConfig.serverExternalPackages || []),
77
+ ],
78
+ });
79
+ })();
80
+ }
81
+ return workflowBuilderPromise;
82
+ };
83
+ if (useDeferredBuilder) {
84
+ runDeferredBuildFromCallback = async () => {
85
+ const workflowBuilder = await getWorkflowBuilder();
86
+ if (typeof workflowBuilder.onBeforeDeferredEntries === 'function') {
87
+ await workflowBuilder.onBeforeDeferredEntries();
88
+ }
89
+ };
90
+ const existingExperimental = (nextConfig.experimental ?? {});
91
+ const existingDeferredEntries = Array.isArray(existingExperimental.deferredEntries)
92
+ ? existingExperimental.deferredEntries
93
+ : [];
94
+ const existingOnBeforeDeferredEntries = typeof existingExperimental.onBeforeDeferredEntries === 'function'
95
+ ? existingExperimental.onBeforeDeferredEntries
96
+ : undefined;
97
+ nextConfig.experimental = {
98
+ ...existingExperimental,
99
+ // biome-ignore lint/suspicious/noTsIgnore: expect-error is wrong as it will work on valid version
100
+ // @ts-ignore this is only available in canary Next.js
101
+ deferredEntries: [
102
+ ...new Set([
103
+ ...existingDeferredEntries,
104
+ ...builder_js_1.WORKFLOW_DEFERRED_ENTRIES,
105
+ ]),
106
+ ],
107
+ onBeforeDeferredEntries: async (...args) => {
108
+ if (existingOnBeforeDeferredEntries) {
109
+ await existingOnBeforeDeferredEntries(...args);
110
+ }
111
+ if (runDeferredBuildFromCallback) {
112
+ await runDeferredBuildFromCallback();
113
+ }
114
+ },
115
+ };
116
+ }
117
+ for (const key of [
118
+ '*.tsx',
119
+ '*.ts',
120
+ '*.jsx',
121
+ '*.js',
122
+ '*.mjs',
123
+ '*.mts',
124
+ '*.cjs',
125
+ '*.cts',
126
+ ]) {
47
127
  nextConfig.turbopack.rules[key] = {
48
- ...(supportsTurboCondition
128
+ ...(shouldApplyTurboCondition
49
129
  ? {
50
130
  condition: {
51
- ...existingRules[key]?.condition,
52
- any: [
53
- ...(existingRules[key]?.condition.any || []),
131
+ // Use 'all' to combine: must match content AND must NOT be in generated path
132
+ // Merge with any existing 'all' conditions from user config
133
+ all: [
134
+ ...(existingRules[key]?.condition?.all || []),
135
+ // Exclude generated workflow route files from transformation
136
+ { not: { path: /[/\\]\.well-known[/\\]workflow[/\\]/ } },
137
+ // Match files with workflow directives or custom serialization patterns
138
+ // Uses backreferences (\2, \3) to ensure matching quote types
54
139
  {
55
- content: /(use workflow|use step)/,
140
+ content: /(use workflow|use step|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\))/,
56
141
  },
57
142
  ],
58
143
  },
@@ -85,21 +170,10 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
85
170
  // as Next.js uses child processes for different builds
86
171
  if (!process.env.WORKFLOW_NEXT_PRIVATE_BUILT &&
87
172
  phase !== 'phase-production-server') {
88
- const shouldWatch = process.env.NODE_ENV === 'development';
89
- const workflowBuilder = new next_build_1.NextBuilder({
90
- watch: shouldWatch,
91
- // discover workflows from pages/app entries
92
- dirs: ['pages', 'app', 'src/pages', 'src/app'],
93
- workingDir: process.cwd(),
94
- buildTarget: 'next',
95
- workflowsBundlePath: '', // not used in base
96
- stepsBundlePath: '', // not used in base
97
- webhookBundlePath: '', // node used in base
98
- externalPackages: [
99
- ...require('next/dist/lib/server-external-packages.json'),
100
- ...(nextConfig.serverExternalPackages || []),
101
- ],
102
- });
173
+ // Check swc-plugin build hash and invalidate cache if changed
174
+ const distDir = path_1.default.resolve(process.cwd(), nextConfig.distDir || '.next');
175
+ (0, swc_cache_js_1.maybeInvalidateCacheOnSwcChange)(distDir);
176
+ const workflowBuilder = await getWorkflowBuilder();
103
177
  await workflowBuilder.build();
104
178
  process.env.WORKFLOW_NEXT_PRIVATE_BUILT = '1';
105
179
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAUA,oCAyNC;AAlOD,gDAAwB;AACxB,oDAA4B;AAC5B,6CAIsB;AACtB,iDAAiE;AAEjE,SAAgB,YAAY,CAC1B,cAK6B,EAC7B,EACE,SAAS,MAQP,EAAE;IAEN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,qBAAqB,CAAC;QAC9D,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC;QACzC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,QAAQ,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,UAAU,WAAW,CAC/B,KAAa,EACb,GAAkC;QAElC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,4BAA+D,CAAC;QAEpE,IAAI,UAAsB,CAAC;QAE3B,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;YACzC,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,cAAc,CAAC;QAC9B,CAAC;QACD,gDAAgD;QAChD,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAE3C,kDAAkD;QAClD,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YAC1B,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAChC,UAAU,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,KAAY,CAAC;QACxD,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC;QACzD,MAAM,sBAAsB,GAAG,gBAAM,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,kBAAkB,GAAG,IAAA,qCAAwB,EAAC,WAAW,CAAC,CAAC;QACjE,uEAAuE;QACvE,uEAAuE;QACvE,MAAM,yBAAyB,GAC7B,sBAAsB,IAAI,CAAC,kBAAkB,CAAC;QAChD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;QAC3D,IAAI,sBAAgD,CAAC;QAErD,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;YACpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,sBAAsB,GAAG,CAAC,KAAK,IAAI,EAAE;oBACnC,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAc,EAAC,WAAW,CAAC,CAAC;oBACtD,OAAO,IAAI,WAAW,CAAC;wBACrB,KAAK,EAAE,WAAW;wBAClB,4CAA4C;wBAC5C,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC;wBAC9C,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;wBACzB,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,OAAO;wBACtC,WAAW,EAAE,MAAM;wBACnB,mBAAmB,EAAE,EAAE,EAAE,mBAAmB;wBAC5C,eAAe,EAAE,EAAE,EAAE,mBAAmB;wBACxC,iBAAiB,EAAE,EAAE,EAAE,oBAAoB;wBAC3C,gBAAgB,EAAE;4BAChB,qEAAqE;4BACrE,wEAAwE;4BACxE,qDAAqD;4BACrD,gFAAgF;4BAChF,aAAa;4BACb,aAAa;4BACb,GAAG,CAAC,UAAU,CAAC,sBAAsB,IAAI,EAAE,CAAC;yBAC7C;qBACF,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE,CAAC;YACP,CAAC;YAED,OAAO,sBAAsB,CAAC;QAChC,CAAC,CAAC;QAEF,IAAI,kBAAkB,EAAE,CAAC;YACvB,4BAA4B,GAAG,KAAK,IAAI,EAAE;gBACxC,MAAM,eAAe,GAAG,MAAM,kBAAkB,EAAE,CAAC;gBACnD,IAAI,OAAO,eAAe,CAAC,uBAAuB,KAAK,UAAU,EAAE,CAAC;oBAClE,MAAM,eAAe,CAAC,uBAAuB,EAAE,CAAC;gBAClD,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,oBAAoB,GAAG,CAAC,UAAU,CAAC,YAAY,IAAI,EAAE,CAG1D,CAAC;YACF,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAC3C,oBAAoB,CAAC,eAAe,CACrC;gBACC,CAAC,CAAC,oBAAoB,CAAC,eAAe;gBACtC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,+BAA+B,GACnC,OAAO,oBAAoB,CAAC,uBAAuB,KAAK,UAAU;gBAChE,CAAC,CAAC,oBAAoB,CAAC,uBAAuB;gBAC9C,CAAC,CAAC,SAAS,CAAC;YAEhB,UAAU,CAAC,YAAY,GAAG;gBACxB,GAAG,oBAAoB;gBAEvB,kGAAkG;gBAClG,sDAAsD;gBACtD,eAAe,EAAE;oBACf,GAAG,IAAI,GAAG,CAAC;wBACT,GAAG,uBAAuB;wBAC1B,GAAG,sCAAyB;qBAC7B,CAAC;iBACH;gBACD,uBAAuB,EAAE,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;oBACpD,IAAI,+BAA+B,EAAE,CAAC;wBACpC,MAAM,+BAA+B,CAAC,GAAG,IAAI,CAAC,CAAC;oBACjD,CAAC;oBACD,IAAI,4BAA4B,EAAE,CAAC;wBACjC,MAAM,4BAA4B,EAAE,CAAC;oBACvC,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,GAAG,IAAI;YAChB,OAAO;YACP,MAAM;YACN,OAAO;YACP,MAAM;YACN,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;SACR,EAAE,CAAC;YACF,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;gBAChC,GAAG,CAAC,yBAAyB;oBAC3B,CAAC,CAAC;wBACE,SAAS,EAAE;4BACT,6EAA6E;4BAC7E,4DAA4D;4BAC5D,GAAG,EAAE;gCACH,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC;gCAC7C,6DAA6D;gCAC7D,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,qCAAqC,EAAE,EAAE;gCACxD,wEAAwE;gCACxE,8DAA8D;gCAC9D;oCACE,OAAO,EACL,4HAA4H;iCAC/H;6BACF;yBACF;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC;aAC9D,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,CAAC;QACjD,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE;YAC/B,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBAC1B,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;YAC5B,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,aAAa,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;YAClC,CAAC;YACD,gDAAgD;YAChD,8CAA8C;YAC9C,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9B,IAAI,EAAE,kCAAkC;gBACxC,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;YAEH,OAAO,qBAAqB;gBAC1B,CAAC,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;gBAChC,CAAC,CAAC,aAAa,CAAC;QACpB,CAAC,CAAC;QACF,yDAAyD;QACzD,uDAAuD;QACvD,IACE,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;YACxC,KAAK,KAAK,yBAAyB,EACnC,CAAC;YACD,8DAA8D;YAC9D,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAC1B,OAAO,CAAC,GAAG,EAAE,EACb,UAAU,CAAC,OAAO,IAAI,OAAO,CAC9B,CAAC;YACF,IAAA,8CAA+B,EAAC,OAAO,CAAC,CAAC;YACzC,MAAM,eAAe,GAAG,MAAM,kBAAkB,EAAE,CAAC;YAEnD,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,GAAG,CAAC;QAChD,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAIA,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,CAkCjB"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AA2OA,wBAA8B,cAAc,CAC1C,IAAI,EAAE;IACJ,YAAY,EAAE,MAAM,CAAC;CACtB,EACD,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,OAAO,CAAC,MAAM,CAAC,CAoIjB"}
package/dist/loader.js CHANGED
@@ -1,32 +1,280 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = workflowLoader;
4
+ const node_net_1 = require("node:net");
5
+ const node_path_1 = require("node:path");
4
6
  const core_1 = require("@swc/core");
7
+ const socket_server_js_1 = require("./socket-server.js");
8
+ // Cache decorator options per working directory to avoid reading tsconfig for every file
9
+ const decoratorOptionsCache = new Map();
10
+ // Cache for shared utilities from @workflow/builders (ESM module loaded dynamically in CommonJS context)
11
+ let cachedBuildersModule = null;
12
+ // Cache socket connection to avoid reconnecting on every file.
13
+ let socketClientPromise = null;
14
+ let socketClient = null;
15
+ function resetSocketClient(cachedSocket) {
16
+ if (cachedSocket && socketClient && socketClient !== cachedSocket) {
17
+ return;
18
+ }
19
+ socketClientPromise = null;
20
+ socketClient = null;
21
+ }
22
+ async function writeSocketMessage(socket, message) {
23
+ await new Promise((resolve, reject) => {
24
+ socket.write(message, (error) => {
25
+ if (error) {
26
+ reject(error);
27
+ return;
28
+ }
29
+ resolve();
30
+ });
31
+ });
32
+ }
33
+ function shouldUseSocketDiscovery() {
34
+ return Boolean(process.env.WORKFLOW_SOCKET_PORT && process.env.WORKFLOW_SOCKET_AUTH);
35
+ }
36
+ async function getSocketClient() {
37
+ if (!shouldUseSocketDiscovery()) {
38
+ return null;
39
+ }
40
+ if (socketClient?.destroyed) {
41
+ resetSocketClient(socketClient);
42
+ }
43
+ if (!socketClientPromise) {
44
+ socketClientPromise = (async () => {
45
+ try {
46
+ const socketPort = process.env.WORKFLOW_SOCKET_PORT;
47
+ if (!socketPort) {
48
+ throw new Error('Invariant: no socket port provided for workflow loader');
49
+ }
50
+ const port = Number.parseInt(socketPort, 10);
51
+ if (Number.isNaN(port)) {
52
+ throw new Error(`Invariant: invalid socket port provided: ${socketPort}`);
53
+ }
54
+ const socket = (0, node_net_1.connect)({ port, host: '127.0.0.1' });
55
+ // Wait for connection
56
+ await new Promise((resolve, reject) => {
57
+ const onConnect = () => {
58
+ socket.setNoDelay(true);
59
+ cleanup();
60
+ resolve();
61
+ };
62
+ const onError = (error) => {
63
+ cleanup();
64
+ reject(error);
65
+ };
66
+ const timeout = setTimeout(() => {
67
+ cleanup();
68
+ socket.destroy();
69
+ reject(new Error('Socket connection timeout'));
70
+ }, 1000);
71
+ const cleanup = () => {
72
+ clearTimeout(timeout);
73
+ socket.off('connect', onConnect);
74
+ socket.off('error', onError);
75
+ };
76
+ socket.on('connect', onConnect);
77
+ socket.on('error', onError);
78
+ });
79
+ socket.on('close', () => {
80
+ resetSocketClient(socket);
81
+ });
82
+ socket.on('error', () => {
83
+ resetSocketClient(socket);
84
+ });
85
+ socketClient = socket;
86
+ return socket;
87
+ }
88
+ catch (error) {
89
+ resetSocketClient();
90
+ throw error;
91
+ }
92
+ })();
93
+ }
94
+ return socketClientPromise;
95
+ }
96
+ async function notifySocketServer(filename, hasWorkflow, hasStep, hasSerde) {
97
+ if (!shouldUseSocketDiscovery()) {
98
+ return;
99
+ }
100
+ const socket = await getSocketClient();
101
+ if (!socket) {
102
+ throw new Error('Invariant: missing workflow socket connection');
103
+ }
104
+ const authToken = process.env.WORKFLOW_SOCKET_AUTH;
105
+ if (!authToken) {
106
+ throw new Error('Invariant: no socket auth token provided for workflow loader');
107
+ }
108
+ const message = {
109
+ type: 'file-discovered',
110
+ filePath: filename,
111
+ hasWorkflow,
112
+ hasStep,
113
+ hasSerde,
114
+ };
115
+ const serializedMessage = (0, socket_server_js_1.serializeMessage)(message, authToken);
116
+ try {
117
+ await writeSocketMessage(socket, serializedMessage);
118
+ }
119
+ catch (error) {
120
+ resetSocketClient(socket);
121
+ const reconnectedSocket = await getSocketClient();
122
+ if (!reconnectedSocket) {
123
+ throw error;
124
+ }
125
+ await writeSocketMessage(reconnectedSocket, serializedMessage);
126
+ }
127
+ }
128
+ async function getBuildersModule() {
129
+ if (cachedBuildersModule) {
130
+ return cachedBuildersModule;
131
+ }
132
+ // Dynamic import to handle ESM module from CommonJS context
133
+ // biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`
134
+ cachedBuildersModule = (await eval('import("@workflow/builders")'));
135
+ return cachedBuildersModule;
136
+ }
137
+ async function getDecoratorOptions(workingDir) {
138
+ const cached = decoratorOptionsCache.get(workingDir);
139
+ if (cached) {
140
+ return cached;
141
+ }
142
+ const promise = (async () => {
143
+ const { getDecoratorOptionsForDirectory } = await getBuildersModule();
144
+ return getDecoratorOptionsForDirectory(workingDir);
145
+ })();
146
+ decoratorOptionsCache.set(workingDir, promise);
147
+ return promise;
148
+ }
149
+ async function detectPatterns(source) {
150
+ const { detectWorkflowPatterns } = await getBuildersModule();
151
+ return detectWorkflowPatterns(source);
152
+ }
153
+ async function checkGeneratedFile(filePath) {
154
+ const { isGeneratedWorkflowFile } = await getBuildersModule();
155
+ return isGeneratedWorkflowFile(filePath);
156
+ }
157
+ async function checkSdkFile(filePath) {
158
+ const { isWorkflowSdkFile } = await getBuildersModule();
159
+ return isWorkflowSdkFile(filePath);
160
+ }
161
+ async function checkShouldTransform(filePath, patterns) {
162
+ const { shouldTransformFile } = await getBuildersModule();
163
+ return shouldTransformFile(filePath, patterns);
164
+ }
165
+ async function getModuleSpecifier(filePath, projectRoot) {
166
+ const { resolveModuleSpecifier } = await getBuildersModule();
167
+ return resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier;
168
+ }
169
+ async function resolveWorkflowAliasPath(filePath, workingDir) {
170
+ const { resolveWorkflowAliasRelativePath } = await getBuildersModule();
171
+ return resolveWorkflowAliasRelativePath(filePath, workingDir);
172
+ }
5
173
  // This loader applies the "use workflow"/"use step"
6
174
  // client transformation
7
175
  async function workflowLoader(source, sourceMap) {
8
176
  const filename = this.resourcePath;
9
177
  const normalizedSource = source.toString();
10
- // only apply the transform if file needs it
11
- if (!normalizedSource.match(/(use step|use workflow)/)) {
178
+ // Skip generated workflow route files to avoid re-processing them
179
+ if (await checkGeneratedFile(filename)) {
12
180
  return normalizedSource;
13
181
  }
14
- const isTypeScript = filename.endsWith('.ts') || filename.endsWith('.tsx');
15
- const isTsx = filename.endsWith('.tsx');
182
+ // Detect workflow patterns in the source code
183
+ const patterns = await detectPatterns(normalizedSource);
184
+ // Always notify discovery tracking, even for `false/false`, so files that
185
+ // previously had workflow/step usage are removed from the tracked sets.
186
+ await notifySocketServer(filename, patterns.hasUseWorkflow, patterns.hasUseStep, patterns.hasSerde);
187
+ // For @workflow SDK packages, only transform files with actual directives,
188
+ // not files that just match serde patterns (which are internal SDK implementation files)
189
+ const isSdkFile = await checkSdkFile(filename);
190
+ if (isSdkFile && !patterns.hasDirective) {
191
+ return normalizedSource;
192
+ }
193
+ // Check if file needs transformation based on patterns and path
194
+ if (!(await checkShouldTransform(filename, patterns))) {
195
+ return normalizedSource;
196
+ }
197
+ const isTypeScript = filename.endsWith('.ts') ||
198
+ filename.endsWith('.tsx') ||
199
+ filename.endsWith('.mts') ||
200
+ filename.endsWith('.cts');
201
+ // Calculate relative filename for SWC plugin
202
+ // The SWC plugin uses filename to generate workflowId, so it must be relative
203
+ const workingDir = process.cwd();
204
+ const normalizedWorkingDir = workingDir
205
+ .replace(/\\/g, '/')
206
+ .replace(/\/$/, '');
207
+ const normalizedFilepath = filename.replace(/\\/g, '/');
208
+ // Windows fix: Use case-insensitive comparison to work around drive letter casing issues
209
+ const lowerWd = normalizedWorkingDir.toLowerCase();
210
+ const lowerPath = normalizedFilepath.toLowerCase();
211
+ let relativeFilename;
212
+ if (lowerPath.startsWith(lowerWd + '/')) {
213
+ // File is under working directory - manually calculate relative path
214
+ relativeFilename = normalizedFilepath.substring(normalizedWorkingDir.length + 1);
215
+ }
216
+ else if (lowerPath === lowerWd) {
217
+ // File IS the working directory (shouldn't happen)
218
+ relativeFilename = '.';
219
+ }
220
+ else {
221
+ // Use relative() for files outside working directory
222
+ relativeFilename = (0, node_path_1.relative)(workingDir, filename).replace(/\\/g, '/');
223
+ if (relativeFilename.startsWith('../')) {
224
+ const aliasedRelativePath = await resolveWorkflowAliasPath(filename, workingDir);
225
+ if (aliasedRelativePath) {
226
+ relativeFilename = aliasedRelativePath;
227
+ }
228
+ else {
229
+ relativeFilename = relativeFilename
230
+ .split('/')
231
+ .filter((part) => part !== '..')
232
+ .join('/');
233
+ }
234
+ }
235
+ }
236
+ // Final safety check - ensure we never pass an absolute path to SWC
237
+ if (relativeFilename.includes(':') || relativeFilename.startsWith('/')) {
238
+ // This should rarely happen, but use filename split as last resort
239
+ relativeFilename = normalizedFilepath.split('/').pop() || 'unknown.ts';
240
+ }
241
+ // Get decorator options from tsconfig (cached per working directory)
242
+ const decoratorOptions = await getDecoratorOptions(workingDir);
243
+ // Resolve module specifier for packages (node_modules or workspace packages)
244
+ const moduleSpecifier = await getModuleSpecifier(filename, workingDir);
16
245
  // Transform with SWC
17
246
  const result = await (0, core_1.transform)(normalizedSource, {
18
- filename,
247
+ filename: relativeFilename,
19
248
  jsc: {
20
249
  parser: {
21
- syntax: isTypeScript ? 'typescript' : 'ecmascript',
22
- tsx: isTsx,
250
+ ...(isTypeScript
251
+ ? {
252
+ syntax: 'typescript',
253
+ tsx: filename.endsWith('.tsx'),
254
+ decorators: decoratorOptions.decorators,
255
+ }
256
+ : {
257
+ syntax: 'ecmascript',
258
+ jsx: filename.endsWith('.jsx'),
259
+ decorators: decoratorOptions.decorators,
260
+ }),
23
261
  },
24
262
  target: 'es2022',
25
263
  experimental: {
26
264
  plugins: [
27
- [require.resolve('@workflow/swc-plugin'), { mode: 'client' }],
265
+ [
266
+ require.resolve('@workflow/swc-plugin'),
267
+ { mode: 'client', moduleSpecifier },
268
+ ],
28
269
  ],
29
270
  },
271
+ transform: {
272
+ react: {
273
+ runtime: 'preserve',
274
+ },
275
+ legacyDecorator: decoratorOptions.legacyDecorator,
276
+ decoratorMetadata: decoratorOptions.decoratorMetadata,
277
+ },
30
278
  },
31
279
  minify: false,
32
280
  inputSourceMap: sourceMap,
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;AAIA,iCAwCC;AA5CD,oCAAsC;AAEtC,oDAAoD;AACpD,wBAAwB;AACT,KAAK,UAAU,cAAc,CAI1C,MAAuB,EACvB,SAAc;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;IACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAE3C,4CAA4C;IAC5C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACvD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAExC,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,IAAA,gBAAS,EAAC,gBAAgB,EAAE;QAC/C,QAAQ;QACR,GAAG,EAAE;YACH,MAAM,EAAE;gBACN,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;gBAClD,GAAG,EAAE,KAAK;aACX;YACD,MAAM,EAAE,QAAQ;YAChB,YAAY,EAAE;gBACZ,OAAO,EAAE;oBACP,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;iBAC9D;aACF;SACF;QACD,MAAM,EAAE,KAAK;QACb,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,IAAI;QAChB,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from '@workflow/cli/dist/lib/runtime';
1
+ export * from '@workflow/core/dist/runtime';
2
2
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,cAAc,6BAA6B,CAAC"}
package/dist/runtime.js CHANGED
@@ -17,5 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  // re-export runtime as stub for resolving to not
18
18
  // require @workflow/core be a dependency as well as
19
19
  // @workflow/next
20
- __exportStar(require("@workflow/cli/dist/lib/runtime"), exports);
20
+ __exportStar(require("@workflow/core/dist/runtime"), exports);
21
21
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,oDAAoD;AACpD,iBAAiB;AACjB,iEAA+C"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,oDAAoD;AACpD,iBAAiB;AACjB,8DAA4C"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Message types that can be sent between loader and builder
3
+ */
4
+ export type SocketMessage = {
5
+ type: 'file-discovered';
6
+ filePath: string;
7
+ hasWorkflow: boolean;
8
+ hasStep: boolean;
9
+ hasSerde: boolean;
10
+ } | {
11
+ type: 'trigger-build';
12
+ } | {
13
+ type: 'build-complete';
14
+ };
15
+ /**
16
+ * Configuration for the socket server
17
+ */
18
+ export interface SocketServerConfig {
19
+ isDevServer: boolean;
20
+ onFileDiscovered: (filePath: string, hasWorkflow: boolean, hasStep: boolean, hasSerde: boolean) => void;
21
+ onTriggerBuild: () => void;
22
+ }
23
+ /**
24
+ * Interface for the socket IO instance returned by createSocketServer
25
+ */
26
+ export interface SocketIO {
27
+ emit(event: 'build-complete'): void;
28
+ getAuthToken(): string;
29
+ }
30
+ /**
31
+ * Serialize a message with authentication preamble
32
+ */
33
+ export declare function serializeMessage(message: SocketMessage, authToken: string): string;
34
+ /**
35
+ * Parse and authenticate a message from the socket
36
+ * Returns the parsed message if valid, null otherwise
37
+ */
38
+ export declare function parseMessage(line: string, authToken: string): SocketMessage | null;
39
+ /**
40
+ * Create a TCP socket server for loader<->builder communication.
41
+ * Returns a SocketIO interface for broadcasting messages and the auth token.
42
+ *
43
+ * SECURITY: Server listens on 127.0.0.1 (localhost only) and uses
44
+ * message authentication to prevent processing of unauthorized messages.
45
+ */
46
+ export declare function createSocketServer(config: SocketServerConfig): Promise<SocketIO>;
47
+ //# sourceMappingURL=socket-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-server.d.ts","sourceRoot":"","sources":["../src/socket-server.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,CAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,KACd,IAAI,CAAC;IACV,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI,CAoCtB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,CA4EnB"}