@mastra/deployer 1.0.0-beta.11 → 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 (66) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/build/analyze/bundleExternals.d.ts +4 -5
  3. package/dist/build/analyze/bundleExternals.d.ts.map +1 -1
  4. package/dist/build/analyze.cjs +2 -2
  5. package/dist/build/analyze.d.ts +2 -2
  6. package/dist/build/analyze.d.ts.map +1 -1
  7. package/dist/build/analyze.js +1 -1
  8. package/dist/build/bundler.cjs +3 -3
  9. package/dist/build/bundler.d.ts +2 -1
  10. package/dist/build/bundler.d.ts.map +1 -1
  11. package/dist/build/bundler.js +1 -1
  12. package/dist/build/index.cjs +12 -12
  13. package/dist/build/index.js +4 -4
  14. package/dist/build/plugins/node-modules-extension-resolver.d.ts +7 -0
  15. package/dist/build/plugins/node-modules-extension-resolver.d.ts.map +1 -1
  16. package/dist/build/utils.d.ts +6 -0
  17. package/dist/build/utils.d.ts.map +1 -1
  18. package/dist/build/watcher.d.ts.map +1 -1
  19. package/dist/bundler/index.cjs +2 -2
  20. package/dist/bundler/index.d.ts +5 -5
  21. package/dist/bundler/index.d.ts.map +1 -1
  22. package/dist/bundler/index.js +1 -1
  23. package/dist/chunk-24GY667C.cjs +123 -0
  24. package/dist/chunk-24GY667C.cjs.map +1 -0
  25. package/dist/{chunk-PK3AX3KO.cjs → chunk-3GOE3SL2.cjs} +27 -23
  26. package/dist/chunk-3GOE3SL2.cjs.map +1 -0
  27. package/dist/{chunk-NM6R77PX.js → chunk-HHA2Y3AS.js} +7 -3
  28. package/dist/chunk-HHA2Y3AS.js.map +1 -0
  29. package/dist/{chunk-EHZKDGGA.cjs → chunk-KCGBR2X6.cjs} +106 -54
  30. package/dist/chunk-KCGBR2X6.cjs.map +1 -0
  31. package/dist/chunk-LENVOSFH.cjs +261 -0
  32. package/dist/chunk-LENVOSFH.cjs.map +1 -0
  33. package/dist/chunk-R6O3XWXM.js +249 -0
  34. package/dist/chunk-R6O3XWXM.js.map +1 -0
  35. package/dist/{chunk-3KATYU33.js → chunk-RGUNHE4Y.js} +89 -37
  36. package/dist/chunk-RGUNHE4Y.js.map +1 -0
  37. package/dist/{chunk-HFP6WWM5.js → chunk-SRPOHKWH.js} +6 -76
  38. package/dist/chunk-SRPOHKWH.js.map +1 -0
  39. package/dist/{chunk-F2LCS2DV.cjs → chunk-VA2CSOKJ.cjs} +7 -2
  40. package/dist/chunk-VA2CSOKJ.cjs.map +1 -0
  41. package/dist/{chunk-5OGQ7IFB.js → chunk-XTXGU6QF.js} +19 -15
  42. package/dist/chunk-XTXGU6QF.js.map +1 -0
  43. package/dist/index.cjs +5 -5
  44. package/dist/index.js +2 -2
  45. package/dist/server/index.cjs +4 -4
  46. package/dist/server/index.cjs.map +1 -1
  47. package/dist/server/index.js +2 -2
  48. package/dist/server/index.js.map +1 -1
  49. package/dist/validator/custom-resolver.cjs +2 -2
  50. package/dist/validator/custom-resolver.js +1 -1
  51. package/package.json +4 -5
  52. package/dist/chunk-3KATYU33.js.map +0 -1
  53. package/dist/chunk-5OGQ7IFB.js.map +0 -1
  54. package/dist/chunk-EHZKDGGA.cjs.map +0 -1
  55. package/dist/chunk-F2LCS2DV.cjs.map +0 -1
  56. package/dist/chunk-HFP6WWM5.js.map +0 -1
  57. package/dist/chunk-NM6R77PX.js.map +0 -1
  58. package/dist/chunk-PK3AX3KO.cjs.map +0 -1
  59. package/dist/chunk-UG72ONP7.js +0 -147
  60. package/dist/chunk-UG72ONP7.js.map +0 -1
  61. package/dist/chunk-Z33LQHGJ.cjs +0 -196
  62. package/dist/chunk-Z33LQHGJ.cjs.map +0 -1
  63. package/dist/chunk-ZPUTJSEC.cjs +0 -157
  64. package/dist/chunk-ZPUTJSEC.cjs.map +0 -1
  65. package/dist/server/handlers/prompt.d.ts +0 -3
  66. 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, getPackageName, getCompiledDepCachePath, rollupSafeName } from './chunk-NM6R77PX.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';
@@ -1006,7 +1006,7 @@ function createVirtualDependencies(depsToOptimize, {
1006
1006
  outputDir,
1007
1007
  bundlerOptions
1008
1008
  }) {
1009
- const { isDev = false } = bundlerOptions || {};
1009
+ const { isDev = false, externalsPreset = false } = bundlerOptions || {};
1010
1010
  const fileNameToDependencyMap = /* @__PURE__ */ new Map();
1011
1011
  const optimizedDependencyEntries = /* @__PURE__ */ new Map();
1012
1012
  const rootDir = workspaceRoot || projectRoot;
@@ -1038,7 +1038,7 @@ function createVirtualDependencies(depsToOptimize, {
1038
1038
  virtual: virtualFile.join("\n")
1039
1039
  });
1040
1040
  }
1041
- if (isDev) {
1041
+ if (isDev || externalsPreset) {
1042
1042
  for (const [dep, { isWorkspace, rootPath }] of depsToOptimize.entries()) {
1043
1043
  if (!isWorkspace || !rootPath || !workspaceRoot) {
1044
1044
  continue;
@@ -1095,7 +1095,7 @@ async function getInputPlugins2(virtualDependencies, {
1095
1095
  }
1096
1096
  })
1097
1097
  }) : null,
1098
- bundlerOptions.isDev ? {
1098
+ bundlerOptions.noBundling ? {
1099
1099
  name: "alias-optimized-deps",
1100
1100
  async resolveId(id, importer, options) {
1101
1101
  if (!virtualDependencies.has(id)) {
@@ -1125,11 +1125,11 @@ async function getInputPlugins2(virtualDependencies, {
1125
1125
  transformMixedEsModules: true,
1126
1126
  ignoreTryCatch: false
1127
1127
  }),
1128
- bundlerOptions.isDev ? null : nodeResolve({
1128
+ bundlerOptions.noBundling ? null : nodeResolve({
1129
1129
  preferBuiltins: true,
1130
1130
  exportConditions: ["node"]
1131
1131
  }),
1132
- bundlerOptions.isDev ? esmShim() : null,
1132
+ bundlerOptions.noBundling ? esmShim() : null,
1133
1133
  // hono is imported from deployer, so we need to resolve from here instead of the project root
1134
1134
  aliasHono(),
1135
1135
  json(),
@@ -1182,6 +1182,16 @@ async function buildExternalDependencies(virtualDependencies, {
1182
1182
  if (virtualDependencies.size === 0) {
1183
1183
  return [];
1184
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
+ });
1185
1195
  const bundler = await rollup({
1186
1196
  logLevel: process.env.MASTRA_BUNDLER_DEBUG === "true" ? "debug" : "silent",
1187
1197
  input: Array.from(virtualDependencies.entries()).reduce(
@@ -1192,14 +1202,8 @@ async function buildExternalDependencies(virtualDependencies, {
1192
1202
  {}
1193
1203
  ),
1194
1204
  external: externals,
1195
- treeshake: bundlerOptions.isDev ? false : "safest",
1196
- plugins: getInputPlugins2(virtualDependencies, {
1197
- transpilePackages: packagesToTranspile,
1198
- workspaceMap,
1199
- bundlerOptions,
1200
- rootDir,
1201
- externals
1202
- })
1205
+ treeshake: noBundling ? false : "safest",
1206
+ plugins
1203
1207
  });
1204
1208
  const outputDirRelative = prepareEntryFileName(outputDir, rootDir);
1205
1209
  const { output } = await bundler.write({
@@ -1213,7 +1217,7 @@ async function buildExternalDependencies(virtualDependencies, {
1213
1217
  * So we want to write them to the `.mastra/output` folder as well.
1214
1218
  */
1215
1219
  chunkFileNames: (chunkInfo) => {
1216
- if (bundlerOptions.isDev) {
1220
+ if (noBundling) {
1217
1221
  const importedFromPackages = /* @__PURE__ */ new Set();
1218
1222
  for (const moduleId of chunkInfo.moduleIds) {
1219
1223
  const normalized = slash(moduleId);
@@ -1275,19 +1279,31 @@ function findExternalImporter(module, external, allOutputs) {
1275
1279
  }
1276
1280
  async function bundleExternals(depsToOptimize, outputDir, options) {
1277
1281
  const { workspaceRoot = null, workspaceMap = /* @__PURE__ */ new Map(), projectRoot = outputDir, bundlerOptions = {} } = options;
1278
- const {
1279
- externals: customExternals = [],
1280
- transpilePackages = [],
1281
- isDev = false} = bundlerOptions || {};
1282
- 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];
1283
1289
  const workspacePackagesNames = Array.from(workspaceMap.keys());
1284
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
+ }
1285
1300
  const { optimizedDependencyEntries, fileNameToDependencyMap } = createVirtualDependencies(depsToOptimize, {
1286
1301
  workspaceRoot,
1287
1302
  outputDir,
1288
1303
  projectRoot,
1289
1304
  bundlerOptions: {
1290
- isDev
1305
+ isDev,
1306
+ externalsPreset
1291
1307
  }
1292
1308
  });
1293
1309
  const output = await buildExternalDependencies(optimizedDependencyEntries, {
@@ -1297,7 +1313,8 @@ async function bundleExternals(depsToOptimize, outputDir, options) {
1297
1313
  rootDir: workspaceRoot || projectRoot,
1298
1314
  outputDir,
1299
1315
  bundlerOptions: {
1300
- isDev
1316
+ isDev,
1317
+ externalsPreset
1301
1318
  }
1302
1319
  });
1303
1320
  const moduleResolveMap2 = /* @__PURE__ */ new Map();
@@ -1332,6 +1349,14 @@ async function bundleExternals(depsToOptimize, outputDir, options) {
1332
1349
  }
1333
1350
  usedExternals[fullPath] = innerObj;
1334
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
+ }
1335
1360
  return { output, fileNameToDependencyMap, usedExternals };
1336
1361
  }
1337
1362
 
@@ -1607,7 +1632,7 @@ async function analyzeBundle(entries, mastraEntry, {
1607
1632
  outputDir,
1608
1633
  projectRoot,
1609
1634
  isDev = false,
1610
- bundlerOptions: _bundlerOptions
1635
+ bundlerOptions: internalBundlerOptions
1611
1636
  }, logger) {
1612
1637
  const mastraConfig = await readFile(mastraEntry, "utf-8");
1613
1638
  const mastraConfigResult = {
@@ -1626,28 +1651,33 @@ export const mastra = new Mastra({
1626
1651
 
1627
1652
  If you think your configuration is valid, please open an issue.`);
1628
1653
  }
1629
- const { enableEsmShim = true } = _bundlerOptions || {};
1630
- const bundlerOptions = await getBundlerOptions(mastraEntry, outputDir);
1654
+ const { externals: _bundlerExternals = [] } = internalBundlerOptions || {};
1655
+ const userBundlerOptions = await getBundlerOptions(mastraEntry, outputDir);
1631
1656
  const { workspaceMap, workspaceRoot } = await getWorkspaceInformation({ mastraEntryFile: mastraEntry });
1657
+ let externalsPreset = false;
1658
+ if (userBundlerOptions?.externals === true) {
1659
+ externalsPreset = true;
1660
+ }
1632
1661
  let index = 0;
1633
1662
  const depsToOptimize = /* @__PURE__ */ new Map();
1634
- const { externals: customExternals = [] } = bundlerOptions || {};
1635
- 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];
1636
1666
  logger.info("Analyzing dependencies...");
1637
1667
  const allUsedExternals = /* @__PURE__ */ new Set();
1638
1668
  for (const entry of entries) {
1639
1669
  const isVirtualFile = entry.includes("\n") || !existsSync(entry);
1640
1670
  const analyzeResult = await analyzeEntry({ entry, isVirtualFile }, mastraEntry, {
1641
1671
  logger,
1642
- sourcemapEnabled: bundlerOptions?.sourcemap ?? false,
1672
+ sourcemapEnabled: userBundlerOptions?.sourcemap ?? false,
1643
1673
  workspaceMap,
1644
1674
  projectRoot,
1645
- shouldCheckTransitiveDependencies: isDev
1675
+ shouldCheckTransitiveDependencies: isDev || externalsPreset
1646
1676
  });
1647
1677
  await writeFile(join(outputDir, `entry-${index++}.mjs`), analyzeResult.output.code);
1648
1678
  for (const [dep, metadata] of analyzeResult.dependencies.entries()) {
1649
1679
  const isPartOfExternals = allExternals.some((external) => isDependencyPartOfPackage(dep, external));
1650
- if (isPartOfExternals) {
1680
+ if (isPartOfExternals || externalsPreset && !metadata.isWorkspace) {
1651
1681
  allUsedExternals.add(dep);
1652
1682
  continue;
1653
1683
  }
@@ -1662,7 +1692,7 @@ If you think your configuration is valid, please open an issue.`);
1662
1692
  }
1663
1693
  }
1664
1694
  }
1665
- if (isDev) {
1695
+ if (isDev || externalsPreset) {
1666
1696
  for (const [dep, metadata] of depsToOptimize.entries()) {
1667
1697
  if (!metadata.isWorkspace) {
1668
1698
  depsToOptimize.delete(dep);
@@ -1674,15 +1704,37 @@ If you think your configuration is valid, please open an issue.`);
1674
1704
  logger.debug(`${sortedDeps.map((key) => `- ${key}`).join("\n")}`);
1675
1705
  const { output, fileNameToDependencyMap, usedExternals } = await bundleExternals(depsToOptimize, outputDir, {
1676
1706
  bundlerOptions: {
1677
- ...bundlerOptions,
1678
- externals: allExternals,
1679
- enableEsmShim,
1707
+ ...userBundlerOptions,
1708
+ externals: userBundlerOptions?.externals ?? allExternals,
1680
1709
  isDev
1681
1710
  },
1682
1711
  projectRoot,
1683
1712
  workspaceRoot,
1684
1713
  workspaceMap
1685
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
+ }
1686
1738
  const result = await validateOutput(
1687
1739
  {
1688
1740
  output,
@@ -1701,5 +1753,5 @@ If you think your configuration is valid, please open an issue.`);
1701
1753
  }
1702
1754
 
1703
1755
  export { aliasHono, analyzeBundle, esbuild, esmShim, extractMastraOption, getBundlerOptions, getPackageRootPath, getWorkspaceInformation, removeAllOptionsFromMastraExcept, removeDeployer2 as removeDeployer, subpathExternalsResolver, tsConfigPaths };
1704
- //# sourceMappingURL=chunk-3KATYU33.js.map
1705
- //# sourceMappingURL=chunk-3KATYU33.js.map
1756
+ //# sourceMappingURL=chunk-RGUNHE4Y.js.map
1757
+ //# sourceMappingURL=chunk-RGUNHE4Y.js.map