@mastra/deployer 0.10.13 → 0.10.15-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/_tsup-dts-rollup.d.cts +844 -0
  2. package/dist/_tsup-dts-rollup.d.ts +844 -0
  3. package/dist/build/analyze.cjs +10 -0
  4. package/dist/build/analyze.d.cts +1 -0
  5. package/dist/build/analyze.d.ts +1 -0
  6. package/dist/build/analyze.js +1 -0
  7. package/dist/build/bundler.cjs +14 -0
  8. package/dist/build/bundler.d.cts +2 -0
  9. package/dist/build/bundler.d.ts +2 -0
  10. package/dist/build/bundler.js +1 -0
  11. package/dist/build/index.cjs +50 -0
  12. package/dist/build/index.d.cts +10 -0
  13. package/dist/build/index.d.ts +10 -0
  14. package/dist/build/index.js +5 -0
  15. package/dist/bundler/index.cjs +10 -0
  16. package/dist/bundler/index.d.cts +1 -0
  17. package/dist/bundler/index.d.ts +1 -0
  18. package/dist/bundler/index.js +1 -0
  19. package/dist/chunk-54KOF3NB.cjs +137 -0
  20. package/dist/chunk-6QMONK4A.cjs +2 -0
  21. package/dist/chunk-C4JT7CIH.js +1 -0
  22. package/dist/chunk-D2DCFCLH.cjs +157 -0
  23. package/dist/chunk-D6736SJL.js +209 -0
  24. package/dist/chunk-ENT5RDOI.js +99 -0
  25. package/dist/chunk-FK2WUSEN.cjs +238 -0
  26. package/dist/chunk-GPD54HBC.js +380 -0
  27. package/dist/chunk-HJGC75ZR.js +490 -0
  28. package/dist/chunk-KCP5ITLV.cjs +412 -0
  29. package/dist/chunk-M2VZQFTW.cjs +125 -0
  30. package/dist/chunk-TIC2KT3M.js +146 -0
  31. package/dist/chunk-UYQZMNZL.js +572 -0
  32. package/dist/chunk-XKH6F4NE.cjs +604 -0
  33. package/dist/chunk-YFMAWUII.cjs +502 -0
  34. package/dist/chunk-Z544XXXK.js +111 -0
  35. package/dist/index.cjs +194 -0
  36. package/dist/index.d.cts +8 -0
  37. package/dist/index.d.ts +8 -0
  38. package/dist/index.js +153 -0
  39. package/dist/server/index.cjs +8446 -0
  40. package/dist/server/index.d.cts +2 -0
  41. package/dist/server/index.d.ts +2 -0
  42. package/dist/server/index.js +8438 -0
  43. package/dist/services/index.cjs +18 -0
  44. package/dist/services/index.d.cts +3 -0
  45. package/dist/services/index.d.ts +3 -0
  46. package/dist/services/index.js +1 -0
  47. package/dist/templates/instrumentation-template.js +137 -0
  48. package/dist/validator/custom-resolver.cjs +52 -0
  49. package/dist/validator/custom-resolver.d.cts +1 -0
  50. package/dist/validator/custom-resolver.d.ts +1 -0
  51. package/dist/validator/custom-resolver.js +50 -0
  52. package/dist/validator/loader.cjs +7 -0
  53. package/dist/validator/loader.d.cts +1 -0
  54. package/dist/validator/loader.d.ts +1 -0
  55. package/dist/validator/loader.js +4 -0
  56. package/package.json +5 -5
@@ -0,0 +1,412 @@
1
+ 'use strict';
2
+
3
+ var child_process = require('child_process');
4
+ var stream = require('stream');
5
+ var fs3 = require('fs');
6
+ var fsPromises = require('fs/promises');
7
+ var path = require('path');
8
+ var url = require('url');
9
+ var base = require('@mastra/core/base');
10
+ var fsExtra = require('fs-extra/esm');
11
+
12
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ function _interopNamespace(e) {
16
+ if (e && e.__esModule) return e;
17
+ var n = Object.create(null);
18
+ if (e) {
19
+ Object.keys(e).forEach(function (k) {
20
+ if (k !== 'default') {
21
+ var d = Object.getOwnPropertyDescriptor(e, k);
22
+ Object.defineProperty(n, k, d.get ? d : {
23
+ enumerable: true,
24
+ get: function () { return e[k]; }
25
+ });
26
+ }
27
+ });
28
+ }
29
+ n.default = e;
30
+ return Object.freeze(n);
31
+ }
32
+
33
+ var fs3__namespace = /*#__PURE__*/_interopNamespace(fs3);
34
+ var fsPromises__default = /*#__PURE__*/_interopDefault(fsPromises);
35
+ var path__default = /*#__PURE__*/_interopDefault(path);
36
+ var fsExtra__default = /*#__PURE__*/_interopDefault(fsExtra);
37
+
38
+ // src/deploy/log.ts
39
+ var createPinoStream = (logger) => {
40
+ return new stream.Transform({
41
+ transform(chunk, _encoding, callback) {
42
+ const line = chunk.toString().trim();
43
+ if (line) {
44
+ console.log(line);
45
+ logger.info(line);
46
+ }
47
+ callback(null, chunk);
48
+ }
49
+ });
50
+ };
51
+ function createChildProcessLogger({ logger, root }) {
52
+ const pinoStream = createPinoStream(logger);
53
+ return async ({ cmd, args, env }) => {
54
+ try {
55
+ const subprocess = child_process.spawn(cmd, args, {
56
+ cwd: root,
57
+ shell: true,
58
+ env
59
+ });
60
+ subprocess.stdout?.pipe(pinoStream);
61
+ subprocess.stderr?.pipe(pinoStream);
62
+ return new Promise((resolve, reject) => {
63
+ subprocess.on("close", (code) => {
64
+ pinoStream.end();
65
+ if (code === 0) {
66
+ resolve({ success: true });
67
+ } else {
68
+ reject(new Error(`Process exited with code ${code}`));
69
+ }
70
+ });
71
+ subprocess.on("error", (error) => {
72
+ pinoStream.end();
73
+ logger.error("Process failed", { error });
74
+ reject(error);
75
+ });
76
+ });
77
+ } catch (error) {
78
+ console.log(error);
79
+ logger.error("Process failed", { error });
80
+ pinoStream.end();
81
+ return { success: false, error };
82
+ }
83
+ };
84
+ }
85
+ var Deps = class extends base.MastraBase {
86
+ packageManager;
87
+ rootDir;
88
+ constructor(rootDir = process.cwd()) {
89
+ super({ component: "DEPLOYER", name: "DEPS" });
90
+ this.rootDir = rootDir;
91
+ this.packageManager = this.getPackageManager();
92
+ }
93
+ findLockFile(dir) {
94
+ const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
95
+ for (const file of lockFiles) {
96
+ if (fs3__namespace.default.existsSync(path__default.default.join(dir, file))) {
97
+ return file;
98
+ }
99
+ }
100
+ const parentDir = path__default.default.resolve(dir, "..");
101
+ if (parentDir !== dir) {
102
+ return this.findLockFile(parentDir);
103
+ }
104
+ return null;
105
+ }
106
+ getPackageManager() {
107
+ const lockFile = this.findLockFile(this.rootDir);
108
+ switch (lockFile) {
109
+ case "pnpm-lock.yaml":
110
+ return "pnpm";
111
+ case "package-lock.json":
112
+ return "npm";
113
+ case "yarn.lock":
114
+ return "yarn";
115
+ case "bun.lock":
116
+ return "bun";
117
+ default:
118
+ return "npm";
119
+ }
120
+ }
121
+ getWorkspaceDependencyPath({ pkgName, version }) {
122
+ return `file:./workspace-module/${pkgName}-${version}.tgz`;
123
+ }
124
+ async pack({ dir, destination }) {
125
+ const cpLogger = createChildProcessLogger({
126
+ logger: this.logger,
127
+ root: dir
128
+ });
129
+ return cpLogger({
130
+ cmd: `${this.packageManager} pack --pack-destination ${destination}`,
131
+ args: [],
132
+ env: {
133
+ PATH: process.env.PATH
134
+ }
135
+ });
136
+ }
137
+ async writePnpmConfig(dir, options) {
138
+ const packageJsonPath = path__default.default.join(dir, "package.json");
139
+ const packageJson = await fsExtra.readJSON(packageJsonPath);
140
+ packageJson.pnpm = {
141
+ ...packageJson.pnpm,
142
+ supportedArchitectures: {
143
+ os: options.os || [],
144
+ cpu: options.cpu || [],
145
+ libc: options.libc || []
146
+ }
147
+ };
148
+ await fsExtra.writeJSON(packageJsonPath, packageJson, { spaces: 2 });
149
+ }
150
+ async writeYarnConfig(dir, options) {
151
+ const yarnrcPath = path__default.default.join(dir, ".yarnrc.yml");
152
+ const config = {
153
+ supportedArchitectures: {
154
+ cpu: options.cpu || [],
155
+ os: options.os || [],
156
+ libc: options.libc || []
157
+ }
158
+ };
159
+ await fsPromises__default.default.writeFile(
160
+ yarnrcPath,
161
+ `supportedArchitectures:
162
+ ${Object.entries(config.supportedArchitectures).map(([key, value]) => ` ${key}: ${JSON.stringify(value)}`).join("\n")}`
163
+ );
164
+ }
165
+ getNpmArgs(options) {
166
+ const args = [];
167
+ if (options.cpu) args.push(`--cpu=${options.cpu.join(",")}`);
168
+ if (options.os) args.push(`--os=${options.os.join(",")}`);
169
+ if (options.libc) args.push(`--libc=${options.libc.join(",")}`);
170
+ return args;
171
+ }
172
+ async install({
173
+ dir = this.rootDir,
174
+ architecture
175
+ } = {}) {
176
+ let runCommand = this.packageManager;
177
+ let args = [];
178
+ switch (this.packageManager) {
179
+ case "pnpm":
180
+ runCommand = `${this.packageManager} --ignore-workspace install`;
181
+ if (architecture) {
182
+ await this.writePnpmConfig(dir, architecture);
183
+ }
184
+ break;
185
+ case "yarn":
186
+ await fsExtra.ensureFile(path__default.default.join(dir, "yarn.lock"));
187
+ if (architecture) {
188
+ await this.writeYarnConfig(dir, architecture);
189
+ }
190
+ runCommand = `${this.packageManager} install`;
191
+ break;
192
+ case "npm":
193
+ runCommand = `${this.packageManager} install`;
194
+ if (architecture) {
195
+ args = this.getNpmArgs(architecture);
196
+ }
197
+ break;
198
+ default:
199
+ runCommand = `${this.packageManager} install`;
200
+ }
201
+ const cpLogger = createChildProcessLogger({
202
+ logger: this.logger,
203
+ root: dir
204
+ });
205
+ const env = {
206
+ PATH: process.env.PATH
207
+ };
208
+ if (process.env.npm_config_registry) {
209
+ env.npm_config_registry = process.env.npm_config_registry;
210
+ }
211
+ return cpLogger({
212
+ cmd: runCommand,
213
+ args,
214
+ env
215
+ });
216
+ }
217
+ async installPackages(packages) {
218
+ let runCommand = this.packageManager;
219
+ if (this.packageManager === "npm") {
220
+ runCommand = `${this.packageManager} i`;
221
+ } else {
222
+ runCommand = `${this.packageManager} add`;
223
+ }
224
+ const env = {
225
+ PATH: process.env.PATH
226
+ };
227
+ if (process.env.npm_config_registry) {
228
+ env.npm_config_registry = process.env.npm_config_registry;
229
+ }
230
+ const cpLogger = createChildProcessLogger({
231
+ logger: this.logger,
232
+ root: ""
233
+ });
234
+ return cpLogger({
235
+ cmd: `${runCommand}`,
236
+ args: packages,
237
+ env
238
+ });
239
+ }
240
+ async checkDependencies(dependencies) {
241
+ try {
242
+ const packageJsonPath = path__default.default.join(this.rootDir, "package.json");
243
+ try {
244
+ await fsPromises__default.default.access(packageJsonPath);
245
+ } catch {
246
+ return "No package.json file found in the current directory";
247
+ }
248
+ const packageJson = await fsExtra.readJSON(packageJsonPath);
249
+ for (const dependency of dependencies) {
250
+ if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
251
+ return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
252
+ }
253
+ }
254
+ return "ok";
255
+ } catch (err) {
256
+ console.error(err);
257
+ return "Could not check dependencies";
258
+ }
259
+ }
260
+ async getProjectName() {
261
+ try {
262
+ const packageJsonPath = path__default.default.join(this.rootDir, "package.json");
263
+ const pkg = await fsExtra.readJSON(packageJsonPath);
264
+ return pkg.name;
265
+ } catch (err) {
266
+ throw err;
267
+ }
268
+ }
269
+ async getPackageVersion() {
270
+ const __filename = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-KCP5ITLV.cjs', document.baseURI).href)));
271
+ const __dirname = path.dirname(__filename);
272
+ const pkgJsonPath = path__default.default.join(__dirname, "..", "..", "package.json");
273
+ const content = await fsExtra.readJSON(pkgJsonPath);
274
+ return content.version;
275
+ }
276
+ async addScriptsToPackageJson(scripts) {
277
+ const packageJson = await fsExtra.readJSON("package.json");
278
+ packageJson.scripts = {
279
+ ...packageJson.scripts,
280
+ ...scripts
281
+ };
282
+ await fsExtra.writeJSON("package.json", packageJson, { spaces: 2 });
283
+ }
284
+ };
285
+ var DepsService = class extends Deps {
286
+ };
287
+ var EnvService = class {
288
+ };
289
+ var FileEnvService = class extends EnvService {
290
+ filePath;
291
+ constructor(filePath) {
292
+ super();
293
+ this.filePath = filePath;
294
+ }
295
+ readFile(filePath) {
296
+ return new Promise((resolve, reject) => {
297
+ fs3__namespace.readFile(filePath, "utf8", (err, data) => {
298
+ if (err) reject(err);
299
+ else resolve(data);
300
+ });
301
+ });
302
+ }
303
+ writeFile({ filePath, data }) {
304
+ return new Promise((resolve, reject) => {
305
+ fs3__namespace.writeFile(filePath, data, "utf8", (err) => {
306
+ if (err) reject(err);
307
+ else resolve();
308
+ });
309
+ });
310
+ }
311
+ async updateEnvData({
312
+ key,
313
+ value,
314
+ filePath = this.filePath,
315
+ data
316
+ }) {
317
+ const regex = new RegExp(`^${key}=.*$`, "m");
318
+ if (data.match(regex)) {
319
+ data = data.replace(regex, `${key}=${value}`);
320
+ } else {
321
+ data += `
322
+ ${key}=${value}`;
323
+ }
324
+ await this.writeFile({ filePath, data });
325
+ console.log(`${key} set to ${value} in ENV file.`);
326
+ return data;
327
+ }
328
+ async getEnvValue(key) {
329
+ try {
330
+ const data = await this.readFile(this.filePath);
331
+ const regex = new RegExp(`^${key}=(.*)$`, "m");
332
+ const match = data.match(regex);
333
+ return match?.[1] || null;
334
+ } catch (err) {
335
+ console.error(`Error reading ENV value: ${err}`);
336
+ return null;
337
+ }
338
+ }
339
+ async setEnvValue(key, value) {
340
+ try {
341
+ const data = await this.readFile(this.filePath);
342
+ await this.updateEnvData({ key, value, data });
343
+ } catch (err) {
344
+ console.error(`Error writing ENV value: ${err}`);
345
+ }
346
+ }
347
+ };
348
+ var FileService = class {
349
+ /**
350
+ *
351
+ * @param inputFile the file in the starter files directory to copy
352
+ * @param outputFilePath the destination path
353
+ * @param replaceIfExists flag to replace if it exists
354
+ * @returns
355
+ */
356
+ async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
357
+ const __filename = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-KCP5ITLV.cjs', document.baseURI).href)));
358
+ const __dirname = path__default.default.dirname(__filename);
359
+ const filePath = path__default.default.resolve(__dirname, "..", "starter-files", inputFile);
360
+ const fileString = fs3__namespace.default.readFileSync(filePath, "utf8");
361
+ if (fs3__namespace.default.existsSync(outputFilePath) && !replaceIfExists) {
362
+ console.log(`${outputFilePath} already exists`);
363
+ return false;
364
+ }
365
+ await fsExtra__default.default.outputFile(outputFilePath, fileString);
366
+ return true;
367
+ }
368
+ async setupEnvFile({ dbUrl }) {
369
+ const envPath = path__default.default.join(process.cwd(), ".env.development");
370
+ await fsExtra__default.default.ensureFile(envPath);
371
+ const fileEnvService = new FileEnvService(envPath);
372
+ await fileEnvService.setEnvValue("DB_URL", dbUrl);
373
+ }
374
+ getFirstExistingFile(files) {
375
+ for (const f of files) {
376
+ if (fs3__namespace.default.existsSync(f)) {
377
+ return f;
378
+ }
379
+ }
380
+ throw new Error("Missing required file, checked the following paths: " + files.join(", "));
381
+ }
382
+ /**
383
+ * Returns the first existing file from the provided array, or undefined if none exist
384
+ * @param files array of file paths to check
385
+ * @returns the first existing file path or undefined
386
+ */
387
+ getFirstExistingFileOrUndefined(files) {
388
+ for (const f of files) {
389
+ if (fs3__namespace.default.existsSync(f)) {
390
+ return f;
391
+ }
392
+ }
393
+ return void 0;
394
+ }
395
+ replaceValuesInFile({
396
+ filePath,
397
+ replacements
398
+ }) {
399
+ let fileContent = fs3__namespace.default.readFileSync(filePath, "utf8");
400
+ replacements.forEach(({ search, replace }) => {
401
+ fileContent = fileContent.replaceAll(search, replace);
402
+ });
403
+ fs3__namespace.default.writeFileSync(filePath, fileContent);
404
+ }
405
+ };
406
+
407
+ exports.Deps = Deps;
408
+ exports.DepsService = DepsService;
409
+ exports.EnvService = EnvService;
410
+ exports.FileService = FileService;
411
+ exports.createChildProcessLogger = createChildProcessLogger;
412
+ exports.createPinoStream = createPinoStream;
@@ -0,0 +1,125 @@
1
+ 'use strict';
2
+
3
+ var chunkXKH6F4NE_cjs = require('./chunk-XKH6F4NE.cjs');
4
+ var babel = require('@babel/core');
5
+ var rollup = require('rollup');
6
+ var esbuild = require('rollup-plugin-esbuild');
7
+ var commonjs = require('@rollup/plugin-commonjs');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var babel__namespace = /*#__PURE__*/_interopNamespace(babel);
30
+ var esbuild__default = /*#__PURE__*/_interopDefault(esbuild);
31
+ var commonjs__default = /*#__PURE__*/_interopDefault(commonjs);
32
+
33
+ // src/build/babel/remove-all-options-telemetry.ts
34
+ function removeAllOptionsExceptTelemetry(result) {
35
+ return chunkXKH6F4NE_cjs.removeAllOptionsFromMastraExcept(result, "telemetry");
36
+ }
37
+
38
+ // src/build/telemetry.ts
39
+ function getTelemetryBundler(entryFile, result) {
40
+ return rollup.rollup({
41
+ logLevel: "silent",
42
+ input: {
43
+ "telemetry-config": entryFile
44
+ },
45
+ treeshake: "smallest",
46
+ plugins: [
47
+ // transpile typescript to something we understand
48
+ esbuild__default.default({
49
+ target: "node20",
50
+ platform: "node",
51
+ minify: false
52
+ }),
53
+ commonjs__default.default({
54
+ extensions: [".js", ".ts"],
55
+ strictRequires: "strict",
56
+ transformMixedEsModules: true,
57
+ ignoreTryCatch: false
58
+ }),
59
+ {
60
+ name: "get-telemetry-config",
61
+ transform(code, id) {
62
+ if (id !== entryFile) {
63
+ return;
64
+ }
65
+ return new Promise((resolve, reject) => {
66
+ babel__namespace.transform(
67
+ code,
68
+ {
69
+ babelrc: false,
70
+ configFile: false,
71
+ filename: id,
72
+ plugins: [removeAllOptionsExceptTelemetry(result)]
73
+ },
74
+ (err, result2) => {
75
+ if (err) {
76
+ return reject(err);
77
+ }
78
+ resolve({
79
+ code: result2.code,
80
+ map: result2.map
81
+ });
82
+ }
83
+ );
84
+ });
85
+ }
86
+ },
87
+ // let esbuild remove all unused imports
88
+ esbuild__default.default({
89
+ target: "node20",
90
+ platform: "node",
91
+ minify: false
92
+ }),
93
+ {
94
+ name: "cleanup",
95
+ transform(code, id) {
96
+ if (id !== entryFile) {
97
+ return;
98
+ }
99
+ return chunkXKH6F4NE_cjs.recursiveRemoveNonReferencedNodes(code);
100
+ }
101
+ },
102
+ // let esbuild remove all unused imports
103
+ esbuild__default.default({
104
+ target: "node20",
105
+ platform: "node",
106
+ minify: false
107
+ })
108
+ ]
109
+ });
110
+ }
111
+ async function writeTelemetryConfig(entryFile, outputDir) {
112
+ const result = {
113
+ hasCustomConfig: false
114
+ };
115
+ const bundle = await getTelemetryBundler(entryFile, result);
116
+ const { output } = await bundle.write({
117
+ dir: outputDir,
118
+ format: "es",
119
+ entryFileNames: "[name].mjs"
120
+ });
121
+ const externals = output[0].imports.filter((x) => !x.startsWith("./"));
122
+ return { ...result, externalDependencies: externals };
123
+ }
124
+
125
+ exports.writeTelemetryConfig = writeTelemetryConfig;
@@ -0,0 +1,146 @@
1
+ import { tsConfigPaths, removeDeployer } from './chunk-Z544XXXK.js';
2
+ import alias from '@rollup/plugin-alias';
3
+ import commonjs from '@rollup/plugin-commonjs';
4
+ import json from '@rollup/plugin-json';
5
+ import nodeResolve from '@rollup/plugin-node-resolve';
6
+ import { fileURLToPath } from 'url';
7
+ import { rollup } from 'rollup';
8
+ import esbuild from 'rollup-plugin-esbuild';
9
+
10
+ async function getInputOptions(entryFile, analyzedBundleInfo, platform, env = { "process.env.NODE_ENV": JSON.stringify("production") }) {
11
+ let nodeResolvePlugin = platform === "node" ? nodeResolve({
12
+ preferBuiltins: true,
13
+ exportConditions: ["node"]
14
+ }) : nodeResolve({
15
+ preferBuiltins: false,
16
+ browser: true
17
+ });
18
+ const externalsCopy = /* @__PURE__ */ new Set();
19
+ for (const external of analyzedBundleInfo.externalDependencies) {
20
+ if (external.startsWith("@")) {
21
+ const [scope, name] = external.split("/", 3);
22
+ externalsCopy.add(`${scope}/${name}`);
23
+ externalsCopy.add(`${scope}/${name}/*`);
24
+ } else {
25
+ externalsCopy.add(external);
26
+ externalsCopy.add(`${external}/*`);
27
+ }
28
+ }
29
+ const externals = Array.from(externalsCopy);
30
+ const normalizedEntryFile = entryFile.replaceAll("\\", "/");
31
+ return {
32
+ logLevel: process.env.MASTRA_BUNDLER_DEBUG === "true" ? "debug" : "silent",
33
+ treeshake: "smallest",
34
+ preserveSymlinks: true,
35
+ external: externals,
36
+ plugins: [
37
+ tsConfigPaths(),
38
+ {
39
+ name: "alias-optimized-deps",
40
+ // @ts-ignore
41
+ resolveId(id) {
42
+ if (!analyzedBundleInfo.dependencies.has(id)) {
43
+ return null;
44
+ }
45
+ const isInvalidChunk = analyzedBundleInfo.invalidChunks.has(analyzedBundleInfo.dependencies.get(id));
46
+ if (isInvalidChunk) {
47
+ return {
48
+ id,
49
+ external: true
50
+ };
51
+ }
52
+ return {
53
+ id: ".mastra/.build/" + analyzedBundleInfo.dependencies.get(id),
54
+ external: false
55
+ };
56
+ }
57
+ },
58
+ alias({
59
+ entries: [
60
+ {
61
+ find: /^\#server$/,
62
+ replacement: fileURLToPath(import.meta.resolve("@mastra/deployer/server")).replaceAll("\\", "/")
63
+ },
64
+ {
65
+ find: /^\@mastra\/server\/(.*)/,
66
+ replacement: `@mastra/server/$1`,
67
+ customResolver: (id) => {
68
+ if (id.startsWith("@mastra/server")) {
69
+ return {
70
+ id: fileURLToPath(import.meta.resolve(id))
71
+ };
72
+ }
73
+ }
74
+ },
75
+ { find: /^\#mastra$/, replacement: normalizedEntryFile }
76
+ ]
77
+ }),
78
+ {
79
+ name: "tools-rewriter",
80
+ resolveId(id) {
81
+ if (id === "#tools") {
82
+ return {
83
+ id: "./tools.mjs",
84
+ external: true
85
+ };
86
+ }
87
+ }
88
+ },
89
+ esbuild({
90
+ target: "node20",
91
+ platform,
92
+ minify: false,
93
+ define: env
94
+ }),
95
+ commonjs({
96
+ extensions: [".js", ".ts"],
97
+ transformMixedEsModules: true,
98
+ esmExternals(id) {
99
+ return externals.includes(id);
100
+ }
101
+ }),
102
+ nodeResolvePlugin,
103
+ // for debugging
104
+ // {
105
+ // name: 'logger',
106
+ // //@ts-ignore
107
+ // resolveId(id, ...args) {
108
+ // console.log({ id, args });
109
+ // },
110
+ // // @ts-ignore
111
+ // transform(code, id) {
112
+ // if (code.includes('class Duplexify ')) {
113
+ // console.log({ duplex: id });
114
+ // }
115
+ // },
116
+ // },
117
+ json(),
118
+ removeDeployer(entryFile),
119
+ // treeshake unused imports
120
+ esbuild({
121
+ include: entryFile,
122
+ target: "node20",
123
+ platform,
124
+ minify: false
125
+ })
126
+ ].filter(Boolean)
127
+ };
128
+ }
129
+ async function createBundler(inputOptions, outputOptions) {
130
+ const bundler = await rollup(inputOptions);
131
+ return {
132
+ write: () => {
133
+ return bundler.write({
134
+ ...outputOptions,
135
+ format: "esm",
136
+ entryFileNames: "[name].mjs",
137
+ chunkFileNames: "[name].mjs"
138
+ });
139
+ },
140
+ close: () => {
141
+ return bundler.close();
142
+ }
143
+ };
144
+ }
145
+
146
+ export { createBundler, getInputOptions };