@mastra/deployer 1.0.0-beta.10 → 1.0.0-beta.13

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.
Files changed (72) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/build/analyze/analyzeEntry.d.ts.map +1 -1
  3. package/dist/build/analyze/bundleExternals.d.ts +4 -5
  4. package/dist/build/analyze/bundleExternals.d.ts.map +1 -1
  5. package/dist/build/analyze.cjs +2 -2
  6. package/dist/build/analyze.d.ts +2 -2
  7. package/dist/build/analyze.d.ts.map +1 -1
  8. package/dist/build/analyze.js +1 -1
  9. package/dist/build/bundler.cjs +3 -3
  10. package/dist/build/bundler.d.ts +2 -1
  11. package/dist/build/bundler.d.ts.map +1 -1
  12. package/dist/build/bundler.js +1 -1
  13. package/dist/build/index.cjs +15 -10
  14. package/dist/build/index.d.ts +1 -0
  15. package/dist/build/index.d.ts.map +1 -1
  16. package/dist/build/index.js +4 -3
  17. package/dist/build/package-info.d.ts +9 -0
  18. package/dist/build/package-info.d.ts.map +1 -0
  19. package/dist/build/plugins/node-modules-extension-resolver.d.ts +7 -0
  20. package/dist/build/plugins/node-modules-extension-resolver.d.ts.map +1 -1
  21. package/dist/build/utils.d.ts +18 -4
  22. package/dist/build/utils.d.ts.map +1 -1
  23. package/dist/build/watcher.d.ts.map +1 -1
  24. package/dist/bundler/index.cjs +2 -2
  25. package/dist/bundler/index.d.ts +5 -5
  26. package/dist/bundler/index.d.ts.map +1 -1
  27. package/dist/bundler/index.js +1 -1
  28. package/dist/chunk-24GY667C.cjs +123 -0
  29. package/dist/chunk-24GY667C.cjs.map +1 -0
  30. package/dist/{chunk-SS22TD6R.cjs → chunk-3GOE3SL2.cjs} +27 -23
  31. package/dist/chunk-3GOE3SL2.cjs.map +1 -0
  32. package/dist/{chunk-5CWPEG6R.js → chunk-HHA2Y3AS.js} +23 -24
  33. package/dist/chunk-HHA2Y3AS.js.map +1 -0
  34. package/dist/{chunk-MUWNMVNL.cjs → chunk-KCGBR2X6.cjs} +130 -58
  35. package/dist/chunk-KCGBR2X6.cjs.map +1 -0
  36. package/dist/chunk-LENVOSFH.cjs +261 -0
  37. package/dist/chunk-LENVOSFH.cjs.map +1 -0
  38. package/dist/chunk-R6O3XWXM.js +249 -0
  39. package/dist/chunk-R6O3XWXM.js.map +1 -0
  40. package/dist/{chunk-TK2CCU7I.js → chunk-RGUNHE4Y.js} +111 -40
  41. package/dist/chunk-RGUNHE4Y.js.map +1 -0
  42. package/dist/{chunk-X5QU7B2W.js → chunk-SRPOHKWH.js} +6 -76
  43. package/dist/chunk-SRPOHKWH.js.map +1 -0
  44. package/dist/{chunk-2OTEFUER.cjs → chunk-VA2CSOKJ.cjs} +24 -24
  45. package/dist/chunk-VA2CSOKJ.cjs.map +1 -0
  46. package/dist/{chunk-RBPCXFN7.js → chunk-XTXGU6QF.js} +19 -15
  47. package/dist/chunk-XTXGU6QF.js.map +1 -0
  48. package/dist/index.cjs +5 -5
  49. package/dist/index.js +2 -2
  50. package/dist/server/index.cjs +40 -23
  51. package/dist/server/index.cjs.map +1 -1
  52. package/dist/server/index.d.ts.map +1 -1
  53. package/dist/server/index.js +40 -23
  54. package/dist/server/index.js.map +1 -1
  55. package/dist/validator/custom-resolver.cjs +2 -2
  56. package/dist/validator/custom-resolver.js +1 -1
  57. package/package.json +5 -6
  58. package/dist/chunk-2OTEFUER.cjs.map +0 -1
  59. package/dist/chunk-5CWPEG6R.js.map +0 -1
  60. package/dist/chunk-BFQ2S5UD.cjs +0 -157
  61. package/dist/chunk-BFQ2S5UD.cjs.map +0 -1
  62. package/dist/chunk-MUWNMVNL.cjs.map +0 -1
  63. package/dist/chunk-RBPCXFN7.js.map +0 -1
  64. package/dist/chunk-SS22TD6R.cjs.map +0 -1
  65. package/dist/chunk-TK2CCU7I.js.map +0 -1
  66. package/dist/chunk-UQZGTSBF.js +0 -147
  67. package/dist/chunk-UQZGTSBF.js.map +0 -1
  68. package/dist/chunk-X4TNUYQL.cjs +0 -196
  69. package/dist/chunk-X4TNUYQL.cjs.map +0 -1
  70. package/dist/chunk-X5QU7B2W.js.map +0 -1
  71. package/dist/server/handlers/prompt.d.ts +0 -3
  72. package/dist/server/handlers/prompt.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/build/plugins/node-modules-extension-resolver.ts","../src/build/bundler.ts"],"names":["resolveFrom","dirname","readFileSync","nodeResolve","isBuiltinModule","extname","getPackageName","resolved","slash","subpathExternalsResolver","join","pathToFileURL","alias","fileURLToPath","tsConfigPaths","esbuild","optimizeLodashImports","commonjs","esmShim","json","removeDeployer","rollup"],"mappings":"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","file":"chunk-LENVOSFH.cjs","sourcesContent":["import { dirname, extname } from 'node:path';\nimport { readFileSync } from 'node:fs';\nimport resolveFrom from 'resolve-from';\nimport type { Plugin } from 'rollup';\nimport nodeResolve from '@rollup/plugin-node-resolve';\nimport { getPackageName, isBuiltinModule } from '../utils';\n\nconst JS_EXTENSIONS = new Set(['.js', '.mjs', '.cjs']);\n\nconst packageExportsCache = new Map<string, boolean>();\nconst resolveCache = new Map<string, string | null>();\n\nfunction safeResolve(id: string, importer: string): string | null {\n const cacheKey = `${id}\\0${importer}`;\n const cached = resolveCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n let result: string | null;\n try {\n result = resolveFrom(importer, id);\n } catch {\n result = null;\n }\n resolveCache.set(cacheKey, result);\n return result;\n}\n\n/**\n * Check if a package has an exports field in its package.json.\n * Results are cached to avoid repeated filesystem reads.\n */\nfunction packageHasExports(pkgName: string, importer: string): boolean {\n const pkgMainPath = safeResolve(pkgName, importer);\n if (!pkgMainPath) return false;\n // Find package.json and cache by its directory\n let dir = pkgMainPath;\n for (let i = 0; i < 10; i++) {\n dir = dirname(dir);\n const cached = packageExportsCache.get(dir);\n if (cached !== undefined) return cached;\n\n try {\n const pkgJson = JSON.parse(readFileSync(`${dir}/package.json`, 'utf-8'));\n if (pkgJson.name === pkgName) {\n const result = !!pkgJson.exports;\n packageExportsCache.set(dir, result);\n return result;\n }\n } catch {\n // continue up\n }\n }\n return false;\n}\n\n/**\n * Rollup plugin that resolves module extensions for external dependencies.\n *\n * This plugin handles ESM compatibility for external imports when node-resolve is not used:\n * - Packages WITH exports field (e.g., hono, date-fns): Keep imports as-is or strip redundant extensions\n * - Packages WITHOUT exports field (e.g., lodash): Add .js extension for direct file imports\n */\nexport function nodeModulesExtensionResolver(): Plugin {\n // Create a single instance of node-resolve to reuse\n const nodeResolvePlugin = nodeResolve();\n\n return {\n name: 'node-modules-extension-resolver',\n async resolveId(id, importer, options) {\n // Skip relative imports, absolute paths, no importer, or builtin modules\n if (!importer || id.startsWith('.') || id.startsWith('/') || isBuiltinModule(id)) {\n return null;\n }\n\n // Skip direct package imports (e.g., 'lodash', '@mastra/core')\n const parts = id.split('/');\n const isScoped = id.startsWith('@');\n if ((isScoped && parts.length === 2) || (!isScoped && parts.length === 1)) {\n return null;\n }\n\n const foundExt = extname(id);\n const pkgName = getPackageName(id);\n\n // Handle imports that already have a JS extension\n if (foundExt && JS_EXTENSIONS.has(foundExt)) {\n // If package has exports, strip the extension to avoid double-extension issues\n // (e.g., hono/utils/mime.js -> hono/dist/utils/mime.js.js)\n if (pkgName && packageHasExports(pkgName, importer)) {\n return {\n id: id.slice(0, -foundExt.length),\n external: true,\n };\n }\n // For packages without exports, keep the extension as-is\n return { id, external: true };\n }\n\n // Try import.meta.resolve first - if it works, the import is valid as-is\n // This respects ESM exports maps correctly\n try {\n const resolved = import.meta.resolve(id);\n if (resolved && extname(resolved)) {\n return { id, external: true };\n }\n } catch {\n // import.meta.resolve failed, continue with fallback logic\n }\n\n // Fallback: For imports without extension, check if we need to add one\n // @ts-expect-error - resolveId.handler exists but isn't typed\n const nodeResolved = await nodeResolvePlugin.resolveId?.handler?.call(this, id, importer, options);\n\n if (!nodeResolved?.id) {\n return null;\n }\n\n const resolved = safeResolve(id, importer);\n if (!resolved) {\n // Try adding extensions manually\n for (const ext of JS_EXTENSIONS) {\n if (safeResolve(id + ext, importer)) {\n return { id: id + ext, external: true };\n }\n }\n return null;\n }\n\n const resolvedExt = extname(resolved);\n\n // No JS extension in resolved path - keep as-is\n if (!resolvedExt || !JS_EXTENSIONS.has(resolvedExt)) {\n return { id, external: true };\n }\n\n // Package has exports - let Node.js resolve via exports map\n if (pkgName && packageHasExports(pkgName, importer)) {\n return { id, external: true };\n }\n\n // Check if this is a direct file reference that needs the extension\n // e.g., lodash/fp/get resolves to .../lodash/fp/get.js\n const subpath = pkgName ? id.slice(pkgName.length + 1) : '';\n if (subpath && resolved.endsWith(`/${subpath}${resolvedExt}`)) {\n return { id: id + resolvedExt, external: true };\n }\n\n return { id, external: true };\n },\n };\n}\n","import alias from '@rollup/plugin-alias';\nimport commonjs from '@rollup/plugin-commonjs';\nimport json from '@rollup/plugin-json';\nimport nodeResolve from '@rollup/plugin-node-resolve';\nimport { esmShim } from './plugins/esm-shim';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { rollup, type InputOptions, type OutputOptions, type Plugin } from 'rollup';\nimport { esbuild } from './plugins/esbuild';\nimport { optimizeLodashImports } from '@optimize-lodash/rollup-plugin';\nimport { analyzeBundle } from './analyze';\nimport { removeDeployer } from './plugins/remove-deployer';\nimport { tsConfigPaths } from './plugins/tsconfig-paths';\nimport { join } from 'node:path';\nimport { slash } from './utils';\nimport { subpathExternalsResolver } from './plugins/subpath-externals-resolver';\nimport { nodeModulesExtensionResolver } from './plugins/node-modules-extension-resolver';\n\nexport async function getInputOptions(\n entryFile: string,\n analyzedBundleInfo: Awaited<ReturnType<typeof analyzeBundle>>,\n platform: 'node' | 'browser',\n env: Record<string, string> = { 'process.env.NODE_ENV': JSON.stringify('production') },\n {\n sourcemap = false,\n isDev = false,\n projectRoot,\n workspaceRoot = undefined,\n enableEsmShim = true,\n externalsPreset = false,\n }: {\n sourcemap?: boolean;\n isDev?: boolean;\n workspaceRoot?: string;\n projectRoot: string;\n enableEsmShim?: boolean;\n externalsPreset?: boolean;\n },\n): Promise<InputOptions> {\n let nodeResolvePlugin =\n platform === 'node'\n ? nodeResolve({\n preferBuiltins: true,\n exportConditions: ['node'],\n })\n : nodeResolve({\n preferBuiltins: false,\n browser: true,\n });\n\n const externalsCopy = new Set<string>(analyzedBundleInfo.externalDependencies);\n const externals = externalsPreset ? [] : Array.from(externalsCopy);\n\n const normalizedEntryFile = slash(entryFile);\n return {\n logLevel: process.env.MASTRA_BUNDLER_DEBUG === 'true' ? 'debug' : 'silent',\n treeshake: 'smallest',\n preserveSymlinks: true,\n external: externals,\n plugins: [\n subpathExternalsResolver(externals),\n {\n name: 'alias-optimized-deps',\n resolveId(id: string) {\n if (!analyzedBundleInfo.dependencies.has(id)) {\n return null;\n }\n\n const filename = analyzedBundleInfo.dependencies.get(id)!;\n const absolutePath = join(workspaceRoot || projectRoot, filename);\n\n // During `mastra dev` we want to keep deps as external\n if (isDev) {\n return {\n id: process.platform === 'win32' ? pathToFileURL(absolutePath).href : absolutePath,\n external: true,\n };\n }\n\n // For production builds return the absolute path as-is so Rollup can handle itself\n return {\n id: absolutePath,\n external: false,\n };\n },\n } satisfies Plugin,\n alias({\n entries: [\n {\n find: /^\\#server$/,\n replacement: slash(fileURLToPath(import.meta.resolve('@mastra/deployer/server'))),\n },\n {\n find: /^\\@mastra\\/server\\/(.*)/,\n replacement: `@mastra/server/$1`,\n customResolver: id => {\n if (id.startsWith('@mastra/server')) {\n return {\n id: fileURLToPath(import.meta.resolve(id)),\n };\n }\n },\n },\n { find: /^\\#mastra$/, replacement: normalizedEntryFile },\n ],\n }),\n tsConfigPaths(),\n {\n name: 'tools-rewriter',\n resolveId(id: string) {\n if (id === '#tools') {\n return {\n id: './tools.mjs',\n external: true,\n };\n }\n },\n } satisfies Plugin,\n esbuild({\n platform,\n define: env,\n }),\n optimizeLodashImports({\n include: '**/*.{js,ts,mjs,cjs}',\n }),\n commonjs({\n extensions: ['.js', '.ts'],\n transformMixedEsModules: true,\n esmExternals(id) {\n return externals.includes(id);\n },\n }),\n enableEsmShim ? esmShim() : undefined,\n externalsPreset ? nodeModulesExtensionResolver() : nodeResolvePlugin,\n // for debugging\n // {\n // name: 'logger',\n // //@ts-ignore\n // resolveId(id, ...args) {\n // console.log({ id, args });\n // },\n // // @ts-ignore\n // transform(code, id) {\n // if (code.includes('class Duplexify ')) {\n // console.log({ duplex: id });\n // }\n // },\n // },\n json(),\n removeDeployer(entryFile, { sourcemap }),\n // treeshake unused imports\n esbuild({\n include: entryFile,\n platform,\n }),\n ].filter(Boolean),\n } satisfies InputOptions;\n}\n\nexport async function createBundler(\n inputOptions: InputOptions,\n outputOptions: Partial<OutputOptions> & { dir: string },\n) {\n const bundler = await rollup(inputOptions);\n\n return {\n write: () => {\n return bundler.write({\n ...outputOptions,\n format: 'esm',\n entryFileNames: '[name].mjs',\n chunkFileNames: '[name].mjs',\n });\n },\n close: () => {\n return bundler.close();\n },\n };\n}\n"]}
@@ -0,0 +1,249 @@
1
+ import { subpathExternalsResolver, tsConfigPaths, esbuild, esmShim, removeDeployer } from './chunk-RGUNHE4Y.js';
2
+ import { isBuiltinModule, getPackageName, slash } from './chunk-HHA2Y3AS.js';
3
+ import alias from '@rollup/plugin-alias';
4
+ import commonjs from '@rollup/plugin-commonjs';
5
+ import json from '@rollup/plugin-json';
6
+ import nodeResolve2 from '@rollup/plugin-node-resolve';
7
+ import { pathToFileURL, fileURLToPath } from 'url';
8
+ import { rollup } from 'rollup';
9
+ import { optimizeLodashImports } from '@optimize-lodash/rollup-plugin';
10
+ import { extname, join, dirname } from 'path';
11
+ import { readFileSync } from 'fs';
12
+ import resolveFrom from 'resolve-from';
13
+
14
+ var JS_EXTENSIONS = /* @__PURE__ */ new Set([".js", ".mjs", ".cjs"]);
15
+ var packageExportsCache = /* @__PURE__ */ new Map();
16
+ var resolveCache = /* @__PURE__ */ new Map();
17
+ function safeResolve(id, importer) {
18
+ const cacheKey = `${id}\0${importer}`;
19
+ const cached = resolveCache.get(cacheKey);
20
+ if (cached !== void 0) {
21
+ return cached;
22
+ }
23
+ let result;
24
+ try {
25
+ result = resolveFrom(importer, id);
26
+ } catch {
27
+ result = null;
28
+ }
29
+ resolveCache.set(cacheKey, result);
30
+ return result;
31
+ }
32
+ function packageHasExports(pkgName, importer) {
33
+ const pkgMainPath = safeResolve(pkgName, importer);
34
+ if (!pkgMainPath) return false;
35
+ let dir = pkgMainPath;
36
+ for (let i = 0; i < 10; i++) {
37
+ dir = dirname(dir);
38
+ const cached = packageExportsCache.get(dir);
39
+ if (cached !== void 0) return cached;
40
+ try {
41
+ const pkgJson = JSON.parse(readFileSync(`${dir}/package.json`, "utf-8"));
42
+ if (pkgJson.name === pkgName) {
43
+ const result = !!pkgJson.exports;
44
+ packageExportsCache.set(dir, result);
45
+ return result;
46
+ }
47
+ } catch {
48
+ }
49
+ }
50
+ return false;
51
+ }
52
+ function nodeModulesExtensionResolver() {
53
+ const nodeResolvePlugin = nodeResolve2();
54
+ return {
55
+ name: "node-modules-extension-resolver",
56
+ async resolveId(id, importer, options) {
57
+ if (!importer || id.startsWith(".") || id.startsWith("/") || isBuiltinModule(id)) {
58
+ return null;
59
+ }
60
+ const parts = id.split("/");
61
+ const isScoped = id.startsWith("@");
62
+ if (isScoped && parts.length === 2 || !isScoped && parts.length === 1) {
63
+ return null;
64
+ }
65
+ const foundExt = extname(id);
66
+ const pkgName = getPackageName(id);
67
+ if (foundExt && JS_EXTENSIONS.has(foundExt)) {
68
+ if (pkgName && packageHasExports(pkgName, importer)) {
69
+ return {
70
+ id: id.slice(0, -foundExt.length),
71
+ external: true
72
+ };
73
+ }
74
+ return { id, external: true };
75
+ }
76
+ try {
77
+ const resolved2 = import.meta.resolve(id);
78
+ if (resolved2 && extname(resolved2)) {
79
+ return { id, external: true };
80
+ }
81
+ } catch {
82
+ }
83
+ const nodeResolved = await nodeResolvePlugin.resolveId?.handler?.call(this, id, importer, options);
84
+ if (!nodeResolved?.id) {
85
+ return null;
86
+ }
87
+ const resolved = safeResolve(id, importer);
88
+ if (!resolved) {
89
+ for (const ext of JS_EXTENSIONS) {
90
+ if (safeResolve(id + ext, importer)) {
91
+ return { id: id + ext, external: true };
92
+ }
93
+ }
94
+ return null;
95
+ }
96
+ const resolvedExt = extname(resolved);
97
+ if (!resolvedExt || !JS_EXTENSIONS.has(resolvedExt)) {
98
+ return { id, external: true };
99
+ }
100
+ if (pkgName && packageHasExports(pkgName, importer)) {
101
+ return { id, external: true };
102
+ }
103
+ const subpath = pkgName ? id.slice(pkgName.length + 1) : "";
104
+ if (subpath && resolved.endsWith(`/${subpath}${resolvedExt}`)) {
105
+ return { id: id + resolvedExt, external: true };
106
+ }
107
+ return { id, external: true };
108
+ }
109
+ };
110
+ }
111
+
112
+ // src/build/bundler.ts
113
+ async function getInputOptions(entryFile, analyzedBundleInfo, platform, env = { "process.env.NODE_ENV": JSON.stringify("production") }, {
114
+ sourcemap = false,
115
+ isDev = false,
116
+ projectRoot,
117
+ workspaceRoot = void 0,
118
+ enableEsmShim = true,
119
+ externalsPreset = false
120
+ }) {
121
+ let nodeResolvePlugin = platform === "node" ? nodeResolve2({
122
+ preferBuiltins: true,
123
+ exportConditions: ["node"]
124
+ }) : nodeResolve2({
125
+ preferBuiltins: false,
126
+ browser: true
127
+ });
128
+ const externalsCopy = new Set(analyzedBundleInfo.externalDependencies);
129
+ const externals = externalsPreset ? [] : Array.from(externalsCopy);
130
+ const normalizedEntryFile = slash(entryFile);
131
+ return {
132
+ logLevel: process.env.MASTRA_BUNDLER_DEBUG === "true" ? "debug" : "silent",
133
+ treeshake: "smallest",
134
+ preserveSymlinks: true,
135
+ external: externals,
136
+ plugins: [
137
+ subpathExternalsResolver(externals),
138
+ {
139
+ name: "alias-optimized-deps",
140
+ resolveId(id) {
141
+ if (!analyzedBundleInfo.dependencies.has(id)) {
142
+ return null;
143
+ }
144
+ const filename = analyzedBundleInfo.dependencies.get(id);
145
+ const absolutePath = join(workspaceRoot || projectRoot, filename);
146
+ if (isDev) {
147
+ return {
148
+ id: process.platform === "win32" ? pathToFileURL(absolutePath).href : absolutePath,
149
+ external: true
150
+ };
151
+ }
152
+ return {
153
+ id: absolutePath,
154
+ external: false
155
+ };
156
+ }
157
+ },
158
+ alias({
159
+ entries: [
160
+ {
161
+ find: /^\#server$/,
162
+ replacement: slash(fileURLToPath(import.meta.resolve("@mastra/deployer/server")))
163
+ },
164
+ {
165
+ find: /^\@mastra\/server\/(.*)/,
166
+ replacement: `@mastra/server/$1`,
167
+ customResolver: (id) => {
168
+ if (id.startsWith("@mastra/server")) {
169
+ return {
170
+ id: fileURLToPath(import.meta.resolve(id))
171
+ };
172
+ }
173
+ }
174
+ },
175
+ { find: /^\#mastra$/, replacement: normalizedEntryFile }
176
+ ]
177
+ }),
178
+ tsConfigPaths(),
179
+ {
180
+ name: "tools-rewriter",
181
+ resolveId(id) {
182
+ if (id === "#tools") {
183
+ return {
184
+ id: "./tools.mjs",
185
+ external: true
186
+ };
187
+ }
188
+ }
189
+ },
190
+ esbuild({
191
+ platform,
192
+ define: env
193
+ }),
194
+ optimizeLodashImports({
195
+ include: "**/*.{js,ts,mjs,cjs}"
196
+ }),
197
+ commonjs({
198
+ extensions: [".js", ".ts"],
199
+ transformMixedEsModules: true,
200
+ esmExternals(id) {
201
+ return externals.includes(id);
202
+ }
203
+ }),
204
+ enableEsmShim ? esmShim() : void 0,
205
+ externalsPreset ? nodeModulesExtensionResolver() : nodeResolvePlugin,
206
+ // for debugging
207
+ // {
208
+ // name: 'logger',
209
+ // //@ts-ignore
210
+ // resolveId(id, ...args) {
211
+ // console.log({ id, args });
212
+ // },
213
+ // // @ts-ignore
214
+ // transform(code, id) {
215
+ // if (code.includes('class Duplexify ')) {
216
+ // console.log({ duplex: id });
217
+ // }
218
+ // },
219
+ // },
220
+ json(),
221
+ removeDeployer(entryFile, { sourcemap }),
222
+ // treeshake unused imports
223
+ esbuild({
224
+ include: entryFile,
225
+ platform
226
+ })
227
+ ].filter(Boolean)
228
+ };
229
+ }
230
+ async function createBundler(inputOptions, outputOptions) {
231
+ const bundler = await rollup(inputOptions);
232
+ return {
233
+ write: () => {
234
+ return bundler.write({
235
+ ...outputOptions,
236
+ format: "esm",
237
+ entryFileNames: "[name].mjs",
238
+ chunkFileNames: "[name].mjs"
239
+ });
240
+ },
241
+ close: () => {
242
+ return bundler.close();
243
+ }
244
+ };
245
+ }
246
+
247
+ export { createBundler, getInputOptions, nodeModulesExtensionResolver };
248
+ //# sourceMappingURL=chunk-R6O3XWXM.js.map
249
+ //# sourceMappingURL=chunk-R6O3XWXM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/build/plugins/node-modules-extension-resolver.ts","../src/build/bundler.ts"],"names":["nodeResolve","resolved"],"mappings":"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","file":"chunk-R6O3XWXM.js","sourcesContent":["import { dirname, extname } from 'node:path';\nimport { readFileSync } from 'node:fs';\nimport resolveFrom from 'resolve-from';\nimport type { Plugin } from 'rollup';\nimport nodeResolve from '@rollup/plugin-node-resolve';\nimport { getPackageName, isBuiltinModule } from '../utils';\n\nconst JS_EXTENSIONS = new Set(['.js', '.mjs', '.cjs']);\n\nconst packageExportsCache = new Map<string, boolean>();\nconst resolveCache = new Map<string, string | null>();\n\nfunction safeResolve(id: string, importer: string): string | null {\n const cacheKey = `${id}\\0${importer}`;\n const cached = resolveCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n let result: string | null;\n try {\n result = resolveFrom(importer, id);\n } catch {\n result = null;\n }\n resolveCache.set(cacheKey, result);\n return result;\n}\n\n/**\n * Check if a package has an exports field in its package.json.\n * Results are cached to avoid repeated filesystem reads.\n */\nfunction packageHasExports(pkgName: string, importer: string): boolean {\n const pkgMainPath = safeResolve(pkgName, importer);\n if (!pkgMainPath) return false;\n // Find package.json and cache by its directory\n let dir = pkgMainPath;\n for (let i = 0; i < 10; i++) {\n dir = dirname(dir);\n const cached = packageExportsCache.get(dir);\n if (cached !== undefined) return cached;\n\n try {\n const pkgJson = JSON.parse(readFileSync(`${dir}/package.json`, 'utf-8'));\n if (pkgJson.name === pkgName) {\n const result = !!pkgJson.exports;\n packageExportsCache.set(dir, result);\n return result;\n }\n } catch {\n // continue up\n }\n }\n return false;\n}\n\n/**\n * Rollup plugin that resolves module extensions for external dependencies.\n *\n * This plugin handles ESM compatibility for external imports when node-resolve is not used:\n * - Packages WITH exports field (e.g., hono, date-fns): Keep imports as-is or strip redundant extensions\n * - Packages WITHOUT exports field (e.g., lodash): Add .js extension for direct file imports\n */\nexport function nodeModulesExtensionResolver(): Plugin {\n // Create a single instance of node-resolve to reuse\n const nodeResolvePlugin = nodeResolve();\n\n return {\n name: 'node-modules-extension-resolver',\n async resolveId(id, importer, options) {\n // Skip relative imports, absolute paths, no importer, or builtin modules\n if (!importer || id.startsWith('.') || id.startsWith('/') || isBuiltinModule(id)) {\n return null;\n }\n\n // Skip direct package imports (e.g., 'lodash', '@mastra/core')\n const parts = id.split('/');\n const isScoped = id.startsWith('@');\n if ((isScoped && parts.length === 2) || (!isScoped && parts.length === 1)) {\n return null;\n }\n\n const foundExt = extname(id);\n const pkgName = getPackageName(id);\n\n // Handle imports that already have a JS extension\n if (foundExt && JS_EXTENSIONS.has(foundExt)) {\n // If package has exports, strip the extension to avoid double-extension issues\n // (e.g., hono/utils/mime.js -> hono/dist/utils/mime.js.js)\n if (pkgName && packageHasExports(pkgName, importer)) {\n return {\n id: id.slice(0, -foundExt.length),\n external: true,\n };\n }\n // For packages without exports, keep the extension as-is\n return { id, external: true };\n }\n\n // Try import.meta.resolve first - if it works, the import is valid as-is\n // This respects ESM exports maps correctly\n try {\n const resolved = import.meta.resolve(id);\n if (resolved && extname(resolved)) {\n return { id, external: true };\n }\n } catch {\n // import.meta.resolve failed, continue with fallback logic\n }\n\n // Fallback: For imports without extension, check if we need to add one\n // @ts-expect-error - resolveId.handler exists but isn't typed\n const nodeResolved = await nodeResolvePlugin.resolveId?.handler?.call(this, id, importer, options);\n\n if (!nodeResolved?.id) {\n return null;\n }\n\n const resolved = safeResolve(id, importer);\n if (!resolved) {\n // Try adding extensions manually\n for (const ext of JS_EXTENSIONS) {\n if (safeResolve(id + ext, importer)) {\n return { id: id + ext, external: true };\n }\n }\n return null;\n }\n\n const resolvedExt = extname(resolved);\n\n // No JS extension in resolved path - keep as-is\n if (!resolvedExt || !JS_EXTENSIONS.has(resolvedExt)) {\n return { id, external: true };\n }\n\n // Package has exports - let Node.js resolve via exports map\n if (pkgName && packageHasExports(pkgName, importer)) {\n return { id, external: true };\n }\n\n // Check if this is a direct file reference that needs the extension\n // e.g., lodash/fp/get resolves to .../lodash/fp/get.js\n const subpath = pkgName ? id.slice(pkgName.length + 1) : '';\n if (subpath && resolved.endsWith(`/${subpath}${resolvedExt}`)) {\n return { id: id + resolvedExt, external: true };\n }\n\n return { id, external: true };\n },\n };\n}\n","import alias from '@rollup/plugin-alias';\nimport commonjs from '@rollup/plugin-commonjs';\nimport json from '@rollup/plugin-json';\nimport nodeResolve from '@rollup/plugin-node-resolve';\nimport { esmShim } from './plugins/esm-shim';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { rollup, type InputOptions, type OutputOptions, type Plugin } from 'rollup';\nimport { esbuild } from './plugins/esbuild';\nimport { optimizeLodashImports } from '@optimize-lodash/rollup-plugin';\nimport { analyzeBundle } from './analyze';\nimport { removeDeployer } from './plugins/remove-deployer';\nimport { tsConfigPaths } from './plugins/tsconfig-paths';\nimport { join } from 'node:path';\nimport { slash } from './utils';\nimport { subpathExternalsResolver } from './plugins/subpath-externals-resolver';\nimport { nodeModulesExtensionResolver } from './plugins/node-modules-extension-resolver';\n\nexport async function getInputOptions(\n entryFile: string,\n analyzedBundleInfo: Awaited<ReturnType<typeof analyzeBundle>>,\n platform: 'node' | 'browser',\n env: Record<string, string> = { 'process.env.NODE_ENV': JSON.stringify('production') },\n {\n sourcemap = false,\n isDev = false,\n projectRoot,\n workspaceRoot = undefined,\n enableEsmShim = true,\n externalsPreset = false,\n }: {\n sourcemap?: boolean;\n isDev?: boolean;\n workspaceRoot?: string;\n projectRoot: string;\n enableEsmShim?: boolean;\n externalsPreset?: boolean;\n },\n): Promise<InputOptions> {\n let nodeResolvePlugin =\n platform === 'node'\n ? nodeResolve({\n preferBuiltins: true,\n exportConditions: ['node'],\n })\n : nodeResolve({\n preferBuiltins: false,\n browser: true,\n });\n\n const externalsCopy = new Set<string>(analyzedBundleInfo.externalDependencies);\n const externals = externalsPreset ? [] : Array.from(externalsCopy);\n\n const normalizedEntryFile = slash(entryFile);\n return {\n logLevel: process.env.MASTRA_BUNDLER_DEBUG === 'true' ? 'debug' : 'silent',\n treeshake: 'smallest',\n preserveSymlinks: true,\n external: externals,\n plugins: [\n subpathExternalsResolver(externals),\n {\n name: 'alias-optimized-deps',\n resolveId(id: string) {\n if (!analyzedBundleInfo.dependencies.has(id)) {\n return null;\n }\n\n const filename = analyzedBundleInfo.dependencies.get(id)!;\n const absolutePath = join(workspaceRoot || projectRoot, filename);\n\n // During `mastra dev` we want to keep deps as external\n if (isDev) {\n return {\n id: process.platform === 'win32' ? pathToFileURL(absolutePath).href : absolutePath,\n external: true,\n };\n }\n\n // For production builds return the absolute path as-is so Rollup can handle itself\n return {\n id: absolutePath,\n external: false,\n };\n },\n } satisfies Plugin,\n alias({\n entries: [\n {\n find: /^\\#server$/,\n replacement: slash(fileURLToPath(import.meta.resolve('@mastra/deployer/server'))),\n },\n {\n find: /^\\@mastra\\/server\\/(.*)/,\n replacement: `@mastra/server/$1`,\n customResolver: id => {\n if (id.startsWith('@mastra/server')) {\n return {\n id: fileURLToPath(import.meta.resolve(id)),\n };\n }\n },\n },\n { find: /^\\#mastra$/, replacement: normalizedEntryFile },\n ],\n }),\n tsConfigPaths(),\n {\n name: 'tools-rewriter',\n resolveId(id: string) {\n if (id === '#tools') {\n return {\n id: './tools.mjs',\n external: true,\n };\n }\n },\n } satisfies Plugin,\n esbuild({\n platform,\n define: env,\n }),\n optimizeLodashImports({\n include: '**/*.{js,ts,mjs,cjs}',\n }),\n commonjs({\n extensions: ['.js', '.ts'],\n transformMixedEsModules: true,\n esmExternals(id) {\n return externals.includes(id);\n },\n }),\n enableEsmShim ? esmShim() : undefined,\n externalsPreset ? nodeModulesExtensionResolver() : nodeResolvePlugin,\n // for debugging\n // {\n // name: 'logger',\n // //@ts-ignore\n // resolveId(id, ...args) {\n // console.log({ id, args });\n // },\n // // @ts-ignore\n // transform(code, id) {\n // if (code.includes('class Duplexify ')) {\n // console.log({ duplex: id });\n // }\n // },\n // },\n json(),\n removeDeployer(entryFile, { sourcemap }),\n // treeshake unused imports\n esbuild({\n include: entryFile,\n platform,\n }),\n ].filter(Boolean),\n } satisfies InputOptions;\n}\n\nexport async function createBundler(\n inputOptions: InputOptions,\n outputOptions: Partial<OutputOptions> & { dir: string },\n) {\n const bundler = await rollup(inputOptions);\n\n return {\n write: () => {\n return bundler.write({\n ...outputOptions,\n format: 'esm',\n entryFileNames: '[name].mjs',\n chunkFileNames: '[name].mjs',\n });\n },\n close: () => {\n return bundler.close();\n },\n };\n}\n"]}
@@ -1,10 +1,10 @@
1
- import { slash, isDependencyPartOfPackage, getPackageRootPath, getPackageName, getCompiledDepCachePath, rollupSafeName } from './chunk-5CWPEG6R.js';
1
+ import { slash, isDependencyPartOfPackage, isBuiltinModule, getPackageName, getCompiledDepCachePath, rollupSafeName } from './chunk-HHA2Y3AS.js';
2
2
  import * as babel from '@babel/core';
3
3
  import babel__default from '@babel/core';
4
4
  import fs, { existsSync } from 'fs';
5
5
  import { readFile, writeFile } from 'fs/promises';
6
6
  import * as path2 from 'path';
7
- import path2__default, { dirname, join, normalize, basename as basename$1 } from 'path';
7
+ import path2__default, { dirname, join, relative, normalize, basename as basename$1 } from 'path';
8
8
  import { spawn as spawn$1 } from 'child_process';
9
9
  import { rollup } from 'rollup';
10
10
  import originalEsbuild from 'rollup-plugin-esbuild';
@@ -14,17 +14,17 @@ import stripJsonComments from 'strip-json-comments';
14
14
  import { createHandler } from 'typescript-paths';
15
15
  import { optimizeLodashImports } from '@optimize-lodash/rollup-plugin';
16
16
  import json from '@rollup/plugin-json';
17
- import { fileURLToPath, pathToFileURL } from 'url';
17
+ import { pathToFileURL, fileURLToPath } from 'url';
18
18
  import * as pkg from 'empathic/package';
19
19
  import { createWorkspacesCache, findWorkspaces, findWorkspacesRoot } from 'find-workspaces';
20
20
  import { noopLogger } from '@mastra/core/logger';
21
21
  import virtual from '@rollup/plugin-virtual';
22
22
  import { builtinModules } from 'module';
23
+ import { getPackageInfo } from 'local-pkg';
23
24
  import nodeResolve from '@rollup/plugin-node-resolve';
24
25
  import originalEsmShim from '@rollup/plugin-esm-shim';
25
26
  import { basename } from 'path/posix';
26
27
  import * as resolve from 'resolve.exports';
27
- import { getPackageInfo } from 'local-pkg';
28
28
  import { MastraBaseError, ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';
29
29
 
30
30
  var ValidationError = class extends Error {
@@ -642,6 +642,25 @@ function removeDeployer2(mastraEntry, options) {
642
642
  }
643
643
  };
644
644
  }
645
+ async function getPackageRootPath(packageName, parentPath) {
646
+ let rootPath;
647
+ try {
648
+ let options = void 0;
649
+ if (parentPath) {
650
+ if (!parentPath.startsWith("file://")) {
651
+ parentPath = pathToFileURL(parentPath).href;
652
+ }
653
+ options = {
654
+ paths: [parentPath]
655
+ };
656
+ }
657
+ const pkg2 = await getPackageInfo(packageName, options);
658
+ rootPath = pkg2?.rootPath ?? null;
659
+ } catch (e) {
660
+ rootPath = null;
661
+ }
662
+ return rootPath;
663
+ }
645
664
 
646
665
  // src/build/analyze/constants.ts
647
666
  var DEPS_TO_IGNORE = ["#tools"];
@@ -987,7 +1006,7 @@ function createVirtualDependencies(depsToOptimize, {
987
1006
  outputDir,
988
1007
  bundlerOptions
989
1008
  }) {
990
- const { isDev = false } = bundlerOptions || {};
1009
+ const { isDev = false, externalsPreset = false } = bundlerOptions || {};
991
1010
  const fileNameToDependencyMap = /* @__PURE__ */ new Map();
992
1011
  const optimizedDependencyEntries = /* @__PURE__ */ new Map();
993
1012
  const rootDir = workspaceRoot || projectRoot;
@@ -1019,7 +1038,7 @@ function createVirtualDependencies(depsToOptimize, {
1019
1038
  virtual: virtualFile.join("\n")
1020
1039
  });
1021
1040
  }
1022
- if (isDev) {
1041
+ if (isDev || externalsPreset) {
1023
1042
  for (const [dep, { isWorkspace, rootPath }] of depsToOptimize.entries()) {
1024
1043
  if (!isWorkspace || !rootPath || !workspaceRoot) {
1025
1044
  continue;
@@ -1076,7 +1095,7 @@ async function getInputPlugins2(virtualDependencies, {
1076
1095
  }
1077
1096
  })
1078
1097
  }) : null,
1079
- bundlerOptions.isDev ? {
1098
+ bundlerOptions.noBundling ? {
1080
1099
  name: "alias-optimized-deps",
1081
1100
  async resolveId(id, importer, options) {
1082
1101
  if (!virtualDependencies.has(id)) {
@@ -1106,11 +1125,11 @@ async function getInputPlugins2(virtualDependencies, {
1106
1125
  transformMixedEsModules: true,
1107
1126
  ignoreTryCatch: false
1108
1127
  }),
1109
- bundlerOptions.isDev ? null : nodeResolve({
1128
+ bundlerOptions.noBundling ? null : nodeResolve({
1110
1129
  preferBuiltins: true,
1111
1130
  exportConditions: ["node"]
1112
1131
  }),
1113
- bundlerOptions.isDev ? esmShim() : null,
1132
+ bundlerOptions.noBundling ? esmShim() : null,
1114
1133
  // hono is imported from deployer, so we need to resolve from here instead of the project root
1115
1134
  aliasHono(),
1116
1135
  json(),
@@ -1163,6 +1182,16 @@ async function buildExternalDependencies(virtualDependencies, {
1163
1182
  if (virtualDependencies.size === 0) {
1164
1183
  return [];
1165
1184
  }
1185
+ const noBundling = bundlerOptions.isDev || bundlerOptions.externalsPreset;
1186
+ const plugins = await getInputPlugins2(virtualDependencies, {
1187
+ transpilePackages: packagesToTranspile,
1188
+ workspaceMap,
1189
+ bundlerOptions: {
1190
+ noBundling
1191
+ },
1192
+ rootDir,
1193
+ externals
1194
+ });
1166
1195
  const bundler = await rollup({
1167
1196
  logLevel: process.env.MASTRA_BUNDLER_DEBUG === "true" ? "debug" : "silent",
1168
1197
  input: Array.from(virtualDependencies.entries()).reduce(
@@ -1173,14 +1202,8 @@ async function buildExternalDependencies(virtualDependencies, {
1173
1202
  {}
1174
1203
  ),
1175
1204
  external: externals,
1176
- treeshake: bundlerOptions.isDev ? false : "safest",
1177
- plugins: getInputPlugins2(virtualDependencies, {
1178
- transpilePackages: packagesToTranspile,
1179
- workspaceMap,
1180
- bundlerOptions,
1181
- rootDir,
1182
- externals
1183
- })
1205
+ treeshake: noBundling ? false : "safest",
1206
+ plugins
1184
1207
  });
1185
1208
  const outputDirRelative = prepareEntryFileName(outputDir, rootDir);
1186
1209
  const { output } = await bundler.write({
@@ -1194,7 +1217,7 @@ async function buildExternalDependencies(virtualDependencies, {
1194
1217
  * So we want to write them to the `.mastra/output` folder as well.
1195
1218
  */
1196
1219
  chunkFileNames: (chunkInfo) => {
1197
- if (bundlerOptions.isDev) {
1220
+ if (noBundling) {
1198
1221
  const importedFromPackages = /* @__PURE__ */ new Set();
1199
1222
  for (const moduleId of chunkInfo.moduleIds) {
1200
1223
  const normalized = slash(moduleId);
@@ -1256,19 +1279,31 @@ function findExternalImporter(module, external, allOutputs) {
1256
1279
  }
1257
1280
  async function bundleExternals(depsToOptimize, outputDir, options) {
1258
1281
  const { workspaceRoot = null, workspaceMap = /* @__PURE__ */ new Map(), projectRoot = outputDir, bundlerOptions = {} } = options;
1259
- const {
1260
- externals: customExternals = [],
1261
- transpilePackages = [],
1262
- isDev = false} = bundlerOptions || {};
1263
- const allExternals = [...GLOBAL_EXTERNALS, ...DEPRECATED_EXTERNALS, ...customExternals];
1282
+ const { externals: customExternals = [], transpilePackages = [], isDev = false } = bundlerOptions || {};
1283
+ let externalsPreset = false;
1284
+ if (customExternals === true) {
1285
+ externalsPreset = true;
1286
+ }
1287
+ const externalsList = Array.isArray(customExternals) ? customExternals : [];
1288
+ const allExternals = [...GLOBAL_EXTERNALS, ...DEPRECATED_EXTERNALS, ...externalsList];
1264
1289
  const workspacePackagesNames = Array.from(workspaceMap.keys());
1265
1290
  const packagesToTranspile = /* @__PURE__ */ new Set([...transpilePackages, ...workspacePackagesNames]);
1291
+ const extractedExternals = /* @__PURE__ */ new Map();
1292
+ if (externalsPreset) {
1293
+ for (const [dep, metadata] of depsToOptimize.entries()) {
1294
+ if (!metadata.isWorkspace) {
1295
+ extractedExternals.set(dep, metadata.rootPath ?? dep);
1296
+ depsToOptimize.delete(dep);
1297
+ }
1298
+ }
1299
+ }
1266
1300
  const { optimizedDependencyEntries, fileNameToDependencyMap } = createVirtualDependencies(depsToOptimize, {
1267
1301
  workspaceRoot,
1268
1302
  outputDir,
1269
1303
  projectRoot,
1270
1304
  bundlerOptions: {
1271
- isDev
1305
+ isDev,
1306
+ externalsPreset
1272
1307
  }
1273
1308
  });
1274
1309
  const output = await buildExternalDependencies(optimizedDependencyEntries, {
@@ -1278,7 +1313,8 @@ async function bundleExternals(depsToOptimize, outputDir, options) {
1278
1313
  rootDir: workspaceRoot || projectRoot,
1279
1314
  outputDir,
1280
1315
  bundlerOptions: {
1281
- isDev
1316
+ isDev,
1317
+ externalsPreset
1282
1318
  }
1283
1319
  });
1284
1320
  const moduleResolveMap2 = /* @__PURE__ */ new Map();
@@ -1313,6 +1349,14 @@ async function bundleExternals(depsToOptimize, outputDir, options) {
1313
1349
  }
1314
1350
  usedExternals[fullPath] = innerObj;
1315
1351
  }
1352
+ if (extractedExternals.size > 0) {
1353
+ const syntheticPath = path2.join(workspaceRoot || projectRoot, "__externals__");
1354
+ const externalsObj = /* @__PURE__ */ Object.create(null);
1355
+ for (const [dep, rootPath] of extractedExternals) {
1356
+ externalsObj[dep] = rootPath;
1357
+ }
1358
+ usedExternals[syntheticPath] = externalsObj;
1359
+ }
1316
1360
  return { output, fileNameToDependencyMap, usedExternals };
1317
1361
  }
1318
1362
 
@@ -1588,7 +1632,7 @@ async function analyzeBundle(entries, mastraEntry, {
1588
1632
  outputDir,
1589
1633
  projectRoot,
1590
1634
  isDev = false,
1591
- bundlerOptions: _bundlerOptions
1635
+ bundlerOptions: internalBundlerOptions
1592
1636
  }, logger) {
1593
1637
  const mastraConfig = await readFile(mastraEntry, "utf-8");
1594
1638
  const mastraConfigResult = {
@@ -1607,28 +1651,33 @@ export const mastra = new Mastra({
1607
1651
 
1608
1652
  If you think your configuration is valid, please open an issue.`);
1609
1653
  }
1610
- const { enableEsmShim = true } = _bundlerOptions || {};
1611
- const bundlerOptions = await getBundlerOptions(mastraEntry, outputDir);
1654
+ const { externals: _bundlerExternals = [] } = internalBundlerOptions || {};
1655
+ const userBundlerOptions = await getBundlerOptions(mastraEntry, outputDir);
1612
1656
  const { workspaceMap, workspaceRoot } = await getWorkspaceInformation({ mastraEntryFile: mastraEntry });
1657
+ let externalsPreset = false;
1658
+ if (userBundlerOptions?.externals === true) {
1659
+ externalsPreset = true;
1660
+ }
1613
1661
  let index = 0;
1614
1662
  const depsToOptimize = /* @__PURE__ */ new Map();
1615
- const { externals: customExternals = [] } = bundlerOptions || {};
1616
- const allExternals = [...GLOBAL_EXTERNALS, ...customExternals];
1663
+ const bundlerExternals = Array.isArray(_bundlerExternals) ? _bundlerExternals : [];
1664
+ const userExternals = Array.isArray(userBundlerOptions?.externals) ? userBundlerOptions?.externals : [];
1665
+ const allExternals = [...GLOBAL_EXTERNALS, ...bundlerExternals, ...userExternals];
1617
1666
  logger.info("Analyzing dependencies...");
1618
1667
  const allUsedExternals = /* @__PURE__ */ new Set();
1619
1668
  for (const entry of entries) {
1620
1669
  const isVirtualFile = entry.includes("\n") || !existsSync(entry);
1621
1670
  const analyzeResult = await analyzeEntry({ entry, isVirtualFile }, mastraEntry, {
1622
1671
  logger,
1623
- sourcemapEnabled: bundlerOptions?.sourcemap ?? false,
1672
+ sourcemapEnabled: userBundlerOptions?.sourcemap ?? false,
1624
1673
  workspaceMap,
1625
1674
  projectRoot,
1626
- shouldCheckTransitiveDependencies: isDev
1675
+ shouldCheckTransitiveDependencies: isDev || externalsPreset
1627
1676
  });
1628
1677
  await writeFile(join(outputDir, `entry-${index++}.mjs`), analyzeResult.output.code);
1629
1678
  for (const [dep, metadata] of analyzeResult.dependencies.entries()) {
1630
1679
  const isPartOfExternals = allExternals.some((external) => isDependencyPartOfPackage(dep, external));
1631
- if (isPartOfExternals) {
1680
+ if (isPartOfExternals || externalsPreset && !metadata.isWorkspace) {
1632
1681
  allUsedExternals.add(dep);
1633
1682
  continue;
1634
1683
  }
@@ -1643,7 +1692,7 @@ If you think your configuration is valid, please open an issue.`);
1643
1692
  }
1644
1693
  }
1645
1694
  }
1646
- if (isDev) {
1695
+ if (isDev || externalsPreset) {
1647
1696
  for (const [dep, metadata] of depsToOptimize.entries()) {
1648
1697
  if (!metadata.isWorkspace) {
1649
1698
  depsToOptimize.delete(dep);
@@ -1655,15 +1704,37 @@ If you think your configuration is valid, please open an issue.`);
1655
1704
  logger.debug(`${sortedDeps.map((key) => `- ${key}`).join("\n")}`);
1656
1705
  const { output, fileNameToDependencyMap, usedExternals } = await bundleExternals(depsToOptimize, outputDir, {
1657
1706
  bundlerOptions: {
1658
- ...bundlerOptions,
1659
- externals: allExternals,
1660
- enableEsmShim,
1707
+ ...userBundlerOptions,
1708
+ externals: userBundlerOptions?.externals ?? allExternals,
1661
1709
  isDev
1662
1710
  },
1663
1711
  projectRoot,
1664
1712
  workspaceRoot,
1665
1713
  workspaceMap
1666
1714
  });
1715
+ const relativeWorkspaceFolderPaths = Array.from(workspaceMap.values()).map(
1716
+ (pkgInfo) => relative(workspaceRoot || projectRoot, pkgInfo.location)
1717
+ );
1718
+ for (const o of output) {
1719
+ if (o.type === "asset") {
1720
+ continue;
1721
+ }
1722
+ for (const i of o.imports) {
1723
+ if (isBuiltinModule(i)) {
1724
+ continue;
1725
+ }
1726
+ if (i.startsWith(".") || i.startsWith("/")) {
1727
+ continue;
1728
+ }
1729
+ if (relativeWorkspaceFolderPaths.some((workspacePath) => i.startsWith(workspacePath))) {
1730
+ continue;
1731
+ }
1732
+ const pkgName = getPackageName(i);
1733
+ if (pkgName) {
1734
+ allUsedExternals.add(pkgName);
1735
+ }
1736
+ }
1737
+ }
1667
1738
  const result = await validateOutput(
1668
1739
  {
1669
1740
  output,
@@ -1681,6 +1752,6 @@ If you think your configuration is valid, please open an issue.`);
1681
1752
  };
1682
1753
  }
1683
1754
 
1684
- export { aliasHono, analyzeBundle, esbuild, esmShim, extractMastraOption, getBundlerOptions, getWorkspaceInformation, removeAllOptionsFromMastraExcept, removeDeployer2 as removeDeployer, subpathExternalsResolver, tsConfigPaths };
1685
- //# sourceMappingURL=chunk-TK2CCU7I.js.map
1686
- //# sourceMappingURL=chunk-TK2CCU7I.js.map
1755
+ export { aliasHono, analyzeBundle, esbuild, esmShim, extractMastraOption, getBundlerOptions, getPackageRootPath, getWorkspaceInformation, removeAllOptionsFromMastraExcept, removeDeployer2 as removeDeployer, subpathExternalsResolver, tsConfigPaths };
1756
+ //# sourceMappingURL=chunk-RGUNHE4Y.js.map
1757
+ //# sourceMappingURL=chunk-RGUNHE4Y.js.map