@mastra/deployer 1.79.0-alpha.2 → 1.79.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_types/@mastra_hono/dist/browser-stream/index.d.ts +54 -2
- package/dist/_types/@mastra_hono/dist/index.d.ts +1 -0
- package/dist/{analyze-DXnC6_5v.cjs → analyze-CPVTLGuy.cjs} +23 -18
- package/dist/analyze-CPVTLGuy.cjs.map +1 -0
- package/dist/{analyze-CXLS0uRA.js → analyze-Dvzg7NFK.js} +23 -18
- package/dist/analyze-Dvzg7NFK.js.map +1 -0
- package/dist/build/analyze.cjs +1 -1
- package/dist/build/analyze.js +1 -1
- package/dist/build/index.cjs +3 -3
- package/dist/build/index.js +3 -3
- package/dist/{build-B2uMDZtq.cjs → build-Bdncb817.cjs} +3 -3
- package/dist/{build-B2uMDZtq.cjs.map → build-Bdncb817.cjs.map} +1 -1
- package/dist/{build-PlWkkLKn.js → build-C8gia-n5.js} +3 -3
- package/dist/{build-PlWkkLKn.js.map → build-C8gia-n5.js.map} +1 -1
- package/dist/bundler/index.cjs +2 -2
- package/dist/bundler/index.js +2 -2
- package/dist/bundler/workspaceDependencies.d.ts.map +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +2 -2
- package/dist/server/index.cjs +243 -4
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +244 -5
- package/dist/server/index.js.map +1 -1
- package/dist/services/deps.d.ts +9 -0
- package/dist/services/deps.d.ts.map +1 -1
- package/dist/services/index.cjs +1 -1
- package/dist/services/index.js +1 -1
- package/dist/{services-D_V7afWX.cjs → services-BQNEW5XJ.cjs} +126 -1
- package/dist/services-BQNEW5XJ.cjs.map +1 -0
- package/dist/{services-DXqmEy8F.js → services-PUoAjxMD.js} +115 -2
- package/dist/services-PUoAjxMD.js.map +1 -0
- package/package.json +6 -6
- package/dist/analyze-CXLS0uRA.js.map +0 -1
- package/dist/analyze-DXnC6_5v.cjs.map +0 -1
- package/dist/services-DXqmEy8F.js.map +0 -1
- package/dist/services-D_V7afWX.cjs.map +0 -1
package/dist/services/deps.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { MastraBase } from '@mastra/core/base';
|
|
2
|
+
/** Version used to pack private workspace packages whose package.json has no `version`. */
|
|
3
|
+
export declare const WORKSPACE_PLACEHOLDER_VERSION = "0.0.0";
|
|
4
|
+
/**
|
|
5
|
+
* Package managers refuse to pack a manifest without a version, and pnpm/bun also
|
|
6
|
+
* resolve `workspace:` ranges from the dependency's manifest. So every versionless
|
|
7
|
+
* package in `dirs` gets the placeholder version for the whole of `operation`, and
|
|
8
|
+
* the original manifests are restored afterwards — also on SIGINT/SIGTERM.
|
|
9
|
+
*/
|
|
10
|
+
export declare function withPlaceholderVersions<T>(dirs: string[], operation: () => Promise<T>): Promise<T>;
|
|
2
11
|
interface ArchitectureOptions {
|
|
3
12
|
os?: string[];
|
|
4
13
|
cpu?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU/C,2FAA2F;AAC3F,eAAO,MAAM,6BAA6B,UAAU,CAAC;AAmBrD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAkCxG;AAyFD,UAAU,mBAAmB;IAC3B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,cAAe,SAAQ,mBAAmB;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAyBD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBpE;AA6CD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBnF;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,UAyErF;AAoBD,qBAAa,IAAK,SAAQ,UAAU;IAClC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAsB;gBAE1B,OAAO,SAAgB;IAQnC,OAAO,CAAC,YAAY;IAoBb,0BAA0B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAI/E,IAAI,CAAC,EAChB,GAAG,EACH,WAAW,EACX,aAAa,EACb,OAAO,GACR,EAAE;QACD,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;KACjB;IA2CD,OAAO,CAAC,qBAAqB;YAcf,eAAe;IAiB7B;;;;OAIG;YACW,kBAAkB;IAmChC;;;OAGG;YACW,eAAe;IA+B7B;;;OAGG;YACW,eAAe;IAkB7B;;;;OAIG;YACW,eAAe;IAQ7B;;;;OAIG;YACW,cAAc;IA8B5B;;;;OAIG;YACW,sBAAsB;IAsBpC,OAAO,CAAC,UAAU;IAQlB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAmBnB,OAAO,CAAC,EACnB,GAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,GACf,GAAE;QACD,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,mBAAmB,CAAC;QACnC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc,CAAC,EAAE,SAAS,CAAC;KACvB;IAyFO,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE;IAwBlC,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB1D,cAAc;IAUd,iBAAiB;IASjB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQrE;AAED,qBAAa,WAAY,SAAQ,IAAI;CAAG"}
|
package/dist/services/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_services = require("../services-
|
|
2
|
+
const require_services = require("../services-BQNEW5XJ.cjs");
|
|
3
3
|
exports.DepsService = require_services.DepsService;
|
|
4
4
|
exports.EnvService = require_services.EnvService;
|
|
5
5
|
exports.FileService = require_services.FileService;
|
package/dist/services/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as DepsService, n as EnvService, t as FileService } from "../services-
|
|
1
|
+
import { i as DepsService, n as EnvService, t as FileService } from "../services-PUoAjxMD.js";
|
|
2
2
|
export { DepsService, EnvService, FileService };
|
|
@@ -88,6 +88,119 @@ function createChildProcessLogger({ logger, root }) {
|
|
|
88
88
|
}
|
|
89
89
|
//#endregion
|
|
90
90
|
//#region src/services/deps.ts
|
|
91
|
+
/** Version used to pack private workspace packages whose package.json has no `version`. */
|
|
92
|
+
const WORKSPACE_PLACEHOLDER_VERSION = "0.0.0";
|
|
93
|
+
async function writeManifestAtomically(manifestPath, contents, inFlight) {
|
|
94
|
+
const tmpPath = `${manifestPath}.${process.pid}.${Date.now()}.tmp`;
|
|
95
|
+
inFlight?.add(tmpPath);
|
|
96
|
+
try {
|
|
97
|
+
const { mode } = await fs_promises.default.stat(manifestPath);
|
|
98
|
+
await fs_promises.default.writeFile(tmpPath, contents, { mode });
|
|
99
|
+
await fs_promises.default.chmod(tmpPath, mode);
|
|
100
|
+
await fs_promises.default.rename(tmpPath, manifestPath);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
await fs_promises.default.rm(tmpPath, { force: true });
|
|
103
|
+
throw error;
|
|
104
|
+
} finally {
|
|
105
|
+
inFlight?.delete(tmpPath);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Package managers refuse to pack a manifest without a version, and pnpm/bun also
|
|
110
|
+
* resolve `workspace:` ranges from the dependency's manifest. So every versionless
|
|
111
|
+
* package in `dirs` gets the placeholder version for the whole of `operation`, and
|
|
112
|
+
* the original manifests are restored afterwards — also on SIGINT/SIGTERM.
|
|
113
|
+
*/
|
|
114
|
+
async function withPlaceholderVersions(dirs, operation) {
|
|
115
|
+
const acquired = [];
|
|
116
|
+
try {
|
|
117
|
+
for (const dir of new Set(dirs.map((dir) => path.default.resolve(dir)))) {
|
|
118
|
+
const manifestPath = path.default.join(dir, "package.json");
|
|
119
|
+
let lease = placeholderLeases.get(manifestPath);
|
|
120
|
+
while (lease?.releasing) {
|
|
121
|
+
await lease.releasing.catch(() => {});
|
|
122
|
+
lease = placeholderLeases.get(manifestPath);
|
|
123
|
+
}
|
|
124
|
+
if (lease) lease.refs++;
|
|
125
|
+
else {
|
|
126
|
+
lease = {
|
|
127
|
+
refs: 1,
|
|
128
|
+
injected: false,
|
|
129
|
+
ready: Promise.resolve()
|
|
130
|
+
};
|
|
131
|
+
lease.ready = injectPlaceholderVersion(manifestPath, lease);
|
|
132
|
+
placeholderLeases.set(manifestPath, lease);
|
|
133
|
+
installSignalHandlers();
|
|
134
|
+
}
|
|
135
|
+
acquired.push(manifestPath);
|
|
136
|
+
await lease.ready;
|
|
137
|
+
}
|
|
138
|
+
return await operation();
|
|
139
|
+
} finally {
|
|
140
|
+
try {
|
|
141
|
+
for (const manifestPath of acquired) await releasePlaceholderVersion(manifestPath);
|
|
142
|
+
} finally {
|
|
143
|
+
if (placeholderLeases.size === 0) removeSignalHandlers();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const placeholderLeases = /* @__PURE__ */ new Map();
|
|
148
|
+
const inFlightTmpPaths = /* @__PURE__ */ new Set();
|
|
149
|
+
async function injectPlaceholderVersion(manifestPath, lease) {
|
|
150
|
+
const original = await fs_promises.default.readFile(manifestPath, "utf-8").catch(() => void 0);
|
|
151
|
+
if (original === void 0) return;
|
|
152
|
+
let manifest;
|
|
153
|
+
try {
|
|
154
|
+
manifest = JSON.parse(original);
|
|
155
|
+
} catch (error) {
|
|
156
|
+
throw new Error(`Failed to parse ${manifestPath}: ${error.message}`, { cause: error });
|
|
157
|
+
}
|
|
158
|
+
if (manifest.version) return;
|
|
159
|
+
lease.original = original;
|
|
160
|
+
lease.injected = true;
|
|
161
|
+
await writeManifestAtomically(manifestPath, JSON.stringify({
|
|
162
|
+
...manifest,
|
|
163
|
+
version: WORKSPACE_PLACEHOLDER_VERSION
|
|
164
|
+
}, null, 2) + "\n", inFlightTmpPaths);
|
|
165
|
+
}
|
|
166
|
+
async function releasePlaceholderVersion(manifestPath) {
|
|
167
|
+
const lease = placeholderLeases.get(manifestPath);
|
|
168
|
+
if (--lease.refs > 0) return;
|
|
169
|
+
lease.releasing = (async () => {
|
|
170
|
+
await lease.ready.catch(() => {});
|
|
171
|
+
try {
|
|
172
|
+
if (lease.injected) {
|
|
173
|
+
await writeManifestAtomically(manifestPath, lease.original, inFlightTmpPaths);
|
|
174
|
+
lease.injected = false;
|
|
175
|
+
}
|
|
176
|
+
} finally {
|
|
177
|
+
placeholderLeases.delete(manifestPath);
|
|
178
|
+
}
|
|
179
|
+
})();
|
|
180
|
+
await lease.releasing;
|
|
181
|
+
}
|
|
182
|
+
function restorePlaceholderVersionsSync() {
|
|
183
|
+
for (const tmpPath of inFlightTmpPaths) fs.default.rmSync(tmpPath, { force: true });
|
|
184
|
+
inFlightTmpPaths.clear();
|
|
185
|
+
for (const [manifestPath, lease] of placeholderLeases) if (lease.injected) {
|
|
186
|
+
fs.default.writeFileSync(manifestPath, lease.original);
|
|
187
|
+
lease.injected = false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function onPlaceholderSignal(signal) {
|
|
191
|
+
restorePlaceholderVersionsSync();
|
|
192
|
+
removeSignalHandlers();
|
|
193
|
+
process.kill(process.pid, signal);
|
|
194
|
+
}
|
|
195
|
+
function installSignalHandlers() {
|
|
196
|
+
if (process.listeners("SIGINT").includes(onPlaceholderSignal)) return;
|
|
197
|
+
process.once("SIGINT", onPlaceholderSignal);
|
|
198
|
+
process.once("SIGTERM", onPlaceholderSignal);
|
|
199
|
+
}
|
|
200
|
+
function removeSignalHandlers() {
|
|
201
|
+
process.off("SIGINT", onPlaceholderSignal);
|
|
202
|
+
process.off("SIGTERM", onPlaceholderSignal);
|
|
203
|
+
}
|
|
91
204
|
const PNPM_PATCHES_DIR = "pnpm-patches";
|
|
92
205
|
const BUN_PATCHES_DIR = "bun-patches";
|
|
93
206
|
const PNPM_CONFIG_KEYS_TO_COPY = /* @__PURE__ */ new Set([
|
|
@@ -690,6 +803,12 @@ Object.defineProperty(exports, "FileService", {
|
|
|
690
803
|
return FileService;
|
|
691
804
|
}
|
|
692
805
|
});
|
|
806
|
+
Object.defineProperty(exports, "WORKSPACE_PLACEHOLDER_VERSION", {
|
|
807
|
+
enumerable: true,
|
|
808
|
+
get: function() {
|
|
809
|
+
return WORKSPACE_PLACEHOLDER_VERSION;
|
|
810
|
+
}
|
|
811
|
+
});
|
|
693
812
|
Object.defineProperty(exports, "createChildProcessLogger", {
|
|
694
813
|
enumerable: true,
|
|
695
814
|
get: function() {
|
|
@@ -702,5 +821,11 @@ Object.defineProperty(exports, "createPinoStream", {
|
|
|
702
821
|
return createPinoStream;
|
|
703
822
|
}
|
|
704
823
|
});
|
|
824
|
+
Object.defineProperty(exports, "withPlaceholderVersions", {
|
|
825
|
+
enumerable: true,
|
|
826
|
+
get: function() {
|
|
827
|
+
return withPlaceholderVersions;
|
|
828
|
+
}
|
|
829
|
+
});
|
|
705
830
|
|
|
706
|
-
//# sourceMappingURL=services-
|
|
831
|
+
//# sourceMappingURL=services-BQNEW5XJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services-BQNEW5XJ.cjs","names":["Writable","fsPromises","MastraError","ErrorDomain","ErrorCategory","MastraBase","fsExtra"],"sources":["../src/deploy/log.ts","../src/services/deps.ts","../src/services/env.ts","../src/services/fs.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { Writable } from 'node:stream';\nimport type { IMastraLogger } from '@mastra/core/logger';\n\nexport const createPinoStream = (logger: IMastraLogger) => {\n return new Writable({\n write(chunk, _encoding, callback) {\n // Convert Buffer/string to string and trim whitespace\n const line = chunk.toString().trim();\n\n if (line) {\n console.info(line);\n // Log each line through Pino\n logger.info(line);\n }\n\n callback();\n },\n });\n};\n\n/**\n * Args are joined into a shell command (`shell: true` is required for package\n * manager shims on Windows), so only allow characters that appear in package\n * specifiers and CLI flags — never shell metacharacters (CodeQL\n * js/shell-command-constructed-from-input).\n */\nconst SAFE_SHELL_ARG = /^[\\w@%+=:,./^~-]*$/;\n\nexport function createChildProcessLogger({ logger, root }: { logger: IMastraLogger; root: string }) {\n const pinoStream = createPinoStream(logger);\n return async ({ cmd, args, env }: { cmd: string; args: string[]; env: Record<string, string> }) => {\n try {\n for (const arg of args) {\n if (!SAFE_SHELL_ARG.test(arg)) {\n throw new Error(`Refusing to pass unsafe argument to shell command: ${JSON.stringify(arg)}`);\n }\n }\n const subprocess = spawn(cmd, args, {\n cwd: root,\n shell: true,\n env,\n // No stdin for the child process — it doesn't need interactive input\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n subprocess.stdout?.on('data', chunk => {\n stdout += chunk.toString();\n });\n subprocess.stderr?.on('data', chunk => {\n stderr += chunk.toString();\n });\n\n // Pipe stdout and stderr through the logging stream.\n // { end: false } prevents the first stream to close from ending pinoStream\n // while the other may still be writing.\n subprocess.stdout?.pipe(pinoStream, { end: false });\n subprocess.stderr?.pipe(pinoStream, { end: false });\n\n // Wait for the process to complete\n return new Promise((resolve, reject) => {\n subprocess.on('close', code => {\n pinoStream.end();\n if (code === 0) {\n resolve({ success: true, stdout, stderr });\n } else {\n reject(Object.assign(new Error(`Process exited with code ${code}`), { stdout, stderr }));\n }\n });\n\n subprocess.on('error', error => {\n pinoStream.end();\n logger.error('Process failed', { error });\n reject(error);\n });\n });\n } catch (error) {\n console.error(error);\n logger.error('Process failed', { error });\n pinoStream.end();\n return { success: false, error };\n }\n };\n}\n","import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path, { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { MastraBase } from '@mastra/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { readJSON, writeJSON, ensureFile } from 'fs-extra/esm';\nimport type { PackageJson } from 'type-fest';\nimport { parse } from 'yaml';\n\nimport { createChildProcessLogger } from '../deploy/log.js';\n\ntype PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\n/** Version used to pack private workspace packages whose package.json has no `version`. */\nexport const WORKSPACE_PLACEHOLDER_VERSION = '0.0.0';\n\n// Write via temp file + rename so an interrupted write never leaves a truncated manifest.\nasync function writeManifestAtomically(manifestPath: string, contents: string, inFlight?: Set<string>) {\n const tmpPath = `${manifestPath}.${process.pid}.${Date.now()}.tmp`;\n inFlight?.add(tmpPath);\n try {\n const { mode } = await fsPromises.stat(manifestPath);\n await fsPromises.writeFile(tmpPath, contents, { mode });\n await fsPromises.chmod(tmpPath, mode);\n await fsPromises.rename(tmpPath, manifestPath);\n } catch (error) {\n await fsPromises.rm(tmpPath, { force: true });\n throw error;\n } finally {\n inFlight?.delete(tmpPath);\n }\n}\n\n/**\n * Package managers refuse to pack a manifest without a version, and pnpm/bun also\n * resolve `workspace:` ranges from the dependency's manifest. So every versionless\n * package in `dirs` gets the placeholder version for the whole of `operation`, and\n * the original manifests are restored afterwards — also on SIGINT/SIGTERM.\n */\nexport async function withPlaceholderVersions<T>(dirs: string[], operation: () => Promise<T>): Promise<T> {\n const acquired: string[] = [];\n try {\n for (const dir of new Set(dirs.map(dir => path.resolve(dir)))) {\n const manifestPath = path.join(dir, 'package.json');\n let lease = placeholderLeases.get(manifestPath);\n // A lease whose last owner is restoring it can't be joined; wait and start a fresh one.\n while (lease?.releasing) {\n await lease.releasing.catch(() => {});\n lease = placeholderLeases.get(manifestPath);\n }\n if (lease) {\n lease.refs++;\n } else {\n lease = { refs: 1, injected: false, ready: Promise.resolve() };\n lease.ready = injectPlaceholderVersion(manifestPath, lease);\n placeholderLeases.set(manifestPath, lease);\n installSignalHandlers();\n }\n acquired.push(manifestPath);\n await lease.ready;\n }\n return await operation();\n } finally {\n try {\n for (const manifestPath of acquired) {\n await releasePlaceholderVersion(manifestPath);\n }\n } finally {\n if (placeholderLeases.size === 0) {\n removeSignalHandlers();\n }\n }\n }\n}\n\ninterface PlaceholderLease {\n refs: number;\n original?: string;\n injected: boolean;\n ready: Promise<void>;\n releasing?: Promise<void>;\n}\n\n// Shared across calls so one bundle can't restore a manifest another is still packing.\nconst placeholderLeases = new Map<string, PlaceholderLease>();\nconst inFlightTmpPaths = new Set<string>();\n\nasync function injectPlaceholderVersion(manifestPath: string, lease: PlaceholderLease) {\n const original = await fsPromises.readFile(manifestPath, 'utf-8').catch(() => undefined);\n if (original === undefined) return;\n let manifest: PackageJson;\n try {\n manifest = JSON.parse(original) as PackageJson;\n } catch (error) {\n throw new Error(`Failed to parse ${manifestPath}: ${(error as Error).message}`, { cause: error });\n }\n if (manifest.version) return;\n lease.original = original;\n // Mark before writing so a signal mid-write still restores this manifest.\n lease.injected = true;\n await writeManifestAtomically(\n manifestPath,\n JSON.stringify({ ...manifest, version: WORKSPACE_PLACEHOLDER_VERSION }, null, 2) + '\\n',\n inFlightTmpPaths,\n );\n}\n\nasync function releasePlaceholderVersion(manifestPath: string) {\n const lease = placeholderLeases.get(manifestPath)!;\n if (--lease.refs > 0) return;\n lease.releasing = (async () => {\n await lease.ready.catch(() => {});\n try {\n if (lease.injected) {\n await writeManifestAtomically(manifestPath, lease.original!, inFlightTmpPaths);\n lease.injected = false;\n }\n } finally {\n placeholderLeases.delete(manifestPath);\n }\n })();\n await lease.releasing;\n}\n\nfunction restorePlaceholderVersionsSync() {\n // Removing in-flight temp files keeps them out of later tarballs and makes any\n // pending rename fail instead of overwriting the restored manifest.\n for (const tmpPath of inFlightTmpPaths) {\n fs.rmSync(tmpPath, { force: true });\n }\n inFlightTmpPaths.clear();\n for (const [manifestPath, lease] of placeholderLeases) {\n if (lease.injected) {\n fs.writeFileSync(manifestPath, lease.original!);\n lease.injected = false;\n }\n }\n}\n\nfunction onPlaceholderSignal(signal: NodeJS.Signals) {\n restorePlaceholderVersionsSync();\n removeSignalHandlers();\n process.kill(process.pid, signal);\n}\n\nfunction installSignalHandlers() {\n if (process.listeners('SIGINT').includes(onPlaceholderSignal)) return;\n process.once('SIGINT', onPlaceholderSignal);\n process.once('SIGTERM', onPlaceholderSignal);\n}\n\nfunction removeSignalHandlers() {\n process.off('SIGINT', onPlaceholderSignal);\n process.off('SIGTERM', onPlaceholderSignal);\n}\n\ninterface LockFileInfo {\n path: string;\n filename: string;\n packageManager: PackageManager;\n}\n\ninterface ArchitectureOptions {\n os?: string[];\n cpu?: string[];\n libc?: string[];\n}\n\ninterface InstallOptions extends ArchitectureOptions {\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n /** Patch key -> path relative to the output directory. */\n patchedDependencies?: Record<string, string>;\n}\n\nconst PNPM_PATCHES_DIR = 'pnpm-patches';\nconst BUN_PATCHES_DIR = 'bun-patches';\n\nconst PNPM_CONFIG_KEYS_TO_COPY = new Set([\n 'allowBuilds',\n 'onlyBuiltDependencies',\n 'ignoredBuiltDependencies',\n 'neverBuiltDependencies',\n 'minimumReleaseAge',\n 'minimumReleaseAgeExclude',\n 'trustPolicy',\n 'trustPolicyExclude',\n 'trustPolicyIgnoreAfter',\n 'supportedArchitectures',\n]);\n\nfunction getTopLevelYamlKey(line: string) {\n const match = /^(?!\\s)([\\w-]+):/.exec(line);\n return match?.[1];\n}\n\nconst PNPM_IGNORED_BUILDS_ERROR = 'ERR_PNPM_IGNORED_BUILDS';\n\nexport function getPnpmIgnoredBuildPackages(output: string): string[] {\n const match = new RegExp(`\\\\[?${PNPM_IGNORED_BUILDS_ERROR}\\\\]?[^\\\\n]*Ignored build scripts:\\\\s*([^\\\\n]+)`).exec(\n output,\n );\n if (!match?.[1]) return [];\n\n return match[1]\n .split(',')\n .map(specifier => specifier.trim())\n .filter(Boolean)\n .map(specifier => {\n if (specifier.startsWith('@')) {\n const versionSeparator = specifier.indexOf('@', 1);\n return versionSeparator === -1 ? specifier : specifier.slice(0, versionSeparator);\n }\n return specifier.split('@', 1)[0]!;\n });\n}\n\nfunction validatePnpmBuildApprovals(key: string, block: string): void {\n if (key !== 'allowBuilds' && key !== 'onlyBuiltDependencies') return;\n\n let value: unknown;\n try {\n value = (parse(block) as Record<string, unknown>)[key];\n } catch (error) {\n throw new MastraError(\n {\n id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { key },\n text: `Invalid pnpm ${key} configuration`,\n },\n error,\n );\n }\n\n const invalidEntries =\n key === 'allowBuilds'\n ? value && typeof value === 'object' && !Array.isArray(value)\n ? Object.entries(value).filter(\n ([dependency, approval]) => dependency.trim().length === 0 || typeof approval !== 'boolean',\n )\n : [[key, value]]\n : Array.isArray(value) &&\n value.every(dependency => typeof dependency === 'string' && dependency.trim().length > 0)\n ? []\n : [[key, value]];\n\n if (invalidEntries.length === 0) return;\n const invalidEntryNames = invalidEntries.map(([entry]) => entry).join(', ');\n\n throw new MastraError({\n id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { key, invalidEntries: invalidEntryNames },\n text: `Invalid pnpm ${key} entries: ${invalidEntryNames}`,\n });\n}\n\n/**\n * Reads the `patchedDependencies` map from a pnpm workspace file. Paths are returned as declared,\n * i.e. relative to the workspace root. Returns an empty map for absent or unusable declarations.\n */\nexport function parsePnpmPatchedDependencies(source: string): Record<string, string> {\n let parsed: unknown;\n try {\n parsed = parse(source);\n } catch {\n return {};\n }\n\n const patched = (parsed as { patchedDependencies?: unknown } | null)?.patchedDependencies;\n if (!patched || typeof patched !== 'object' || Array.isArray(patched)) {\n return {};\n }\n\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(patched as Record<string, unknown>)) {\n if (typeof value === 'string' && value.trim() && key.trim()) {\n result[key] = value.trim();\n }\n }\n\n return result;\n}\n\nexport function copyPnpmWorkspaceSettings(source: string, options: InstallOptions = {}) {\n const hasArchitecture = Boolean(options.os?.length || options.cpu?.length || options.libc?.length);\n const lines = source.split(/\\r?\\n/);\n const blocks: string[] = [];\n\n for (let index = 0; index < lines.length;) {\n const key = getTopLevelYamlKey(lines[index] ?? '');\n if (!key) {\n index += 1;\n continue;\n }\n\n const start = index;\n index += 1;\n while (index < lines.length && !getTopLevelYamlKey(lines[index] ?? '')) {\n index += 1;\n }\n\n if (!PNPM_CONFIG_KEYS_TO_COPY.has(key) || (key === 'supportedArchitectures' && hasArchitecture)) {\n continue;\n }\n\n const block = lines.slice(start, index).join('\\n').trimEnd();\n if (block) {\n validatePnpmBuildApprovals(key, block);\n blocks.push(block);\n }\n }\n\n if (hasArchitecture) {\n const architectureBlock = ['supportedArchitectures:'];\n if (options.os?.length) {\n architectureBlock.push(` os: ${JSON.stringify(options.os)}`);\n }\n if (options.cpu?.length) {\n architectureBlock.push(` cpu: ${JSON.stringify(options.cpu)}`);\n }\n if (options.libc?.length) {\n architectureBlock.push(` libc: ${JSON.stringify(options.libc)}`);\n }\n blocks.push(architectureBlock.join('\\n'));\n }\n\n if (options.pnpmOverrides && Object.keys(options.pnpmOverrides).length > 0) {\n blocks.push(\n [\n 'overrides:',\n ...Object.entries(options.pnpmOverrides).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n ),\n ].join('\\n'),\n );\n }\n\n if (options.patchedDependencies && Object.keys(options.patchedDependencies).length > 0) {\n blocks.push(\n [\n 'patchedDependencies:',\n ...Object.entries(options.patchedDependencies).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n ),\n ].join('\\n'),\n );\n // The bundled output only installs runtime dependencies, so patches declared for\n // dev-only or bundled-away packages are legitimately unused here.\n blocks.push('allowUnusedPatches: true');\n }\n\n if (options.pnpmNodeLinker) {\n blocks.push(`nodeLinker: ${options.pnpmNodeLinker}`);\n }\n\n return [\"packages:\\n - '.'\", ...blocks].join('\\n\\n') + '\\n';\n}\n\n// Semver characters only; versions are interpolated into a shell command.\nconst SAFE_PACKAGE_VERSION = /^[0-9A-Za-z.+-]+$/;\n\n/**\n * Yarn classic writes `# yarn lockfile v1` within the first two lines; Berry lockfiles never contain it.\n * Only the head of the file is read so large monorepo lockfiles are never loaded into memory.\n */\nasync function isYarnClassicLockfile(lockfilePath: string): Promise<boolean> {\n const handle = await fsPromises.open(lockfilePath, 'r');\n try {\n const buffer = Buffer.alloc(512);\n const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);\n return /^# yarn lockfile v1\\r?$/m.test(buffer.toString('utf-8', 0, bytesRead));\n } finally {\n await handle.close();\n }\n}\n\nexport class Deps extends MastraBase {\n private packageManager: PackageManager;\n private rootDir: string;\n private lockFile: LockFileInfo | null;\n\n constructor(rootDir = process.cwd()) {\n super({ component: 'DEPLOYER', name: 'DEPS' });\n\n this.rootDir = rootDir;\n this.lockFile = this.findLockFile(rootDir);\n this.packageManager = this.lockFile?.packageManager ?? 'npm';\n }\n\n private findLockFile(dir: string): LockFileInfo | null {\n const lockFiles: Array<{ filename: string; packageManager: PackageManager }> = [\n { filename: 'pnpm-lock.yaml', packageManager: 'pnpm' },\n { filename: 'package-lock.json', packageManager: 'npm' },\n { filename: 'yarn.lock', packageManager: 'yarn' },\n { filename: 'bun.lock', packageManager: 'bun' },\n ];\n for (const lockFile of lockFiles) {\n const lockFilePath = path.join(dir, lockFile.filename);\n if (fs.existsSync(lockFilePath)) {\n return { ...lockFile, path: lockFilePath };\n }\n }\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findLockFile(parentDir);\n }\n return null;\n }\n\n public getWorkspaceDependencyPath({ pkgName, version }: { pkgName: string; version: string }) {\n return `file:./workspace-module/${pkgName}-${version}.tgz`;\n }\n\n public async pack({\n dir,\n destination,\n sanitizedName,\n version,\n }: {\n dir: string;\n destination: string;\n sanitizedName: string;\n version: string;\n }) {\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: dir,\n });\n\n let packCmd = 'pack';\n let destinationFlag = `--pack-destination ${destination}`;\n if (this.packageManager === 'yarn') {\n if (this.lockFile && (await isYarnClassicLockfile(this.lockFile.path))) {\n if (!SAFE_PACKAGE_VERSION.test(version)) {\n throw new MastraError({\n id: 'DEPLOYER_INVALID_WORKSPACE_PACKAGE_VERSION',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { dir, version: String(version) },\n text: `Invalid version ${JSON.stringify(version)} in workspace package at ${dir}`,\n });\n }\n // Yarn classic has no --out/%v; --filename takes the full output path.\n destinationFlag = `--filename ${destination}/${sanitizedName}-${version}.tgz`;\n } else {\n // %s includes an '@' at the start of packages names with an '@'\n // so we need to use our sanitizedName instead.\n destinationFlag = `--out ${destination}/${sanitizedName}-%v.tgz`;\n }\n }\n if (this.packageManager === 'bun') {\n // bun uses `pm pack` instead of `pack`\n packCmd = 'pm pack';\n // bun uses --destination instead of --pack-destination\n destinationFlag = `--destination ${destination}`;\n }\n\n return cpLogger({\n cmd: `${this.packageManager} ${packCmd} ${destinationFlag}`,\n args: [],\n env: {\n PATH: process.env.PATH!,\n },\n });\n }\n\n private findPnpmWorkspaceFile(dir: string): string | null {\n const workspaceYamlPath = path.join(dir, 'pnpm-workspace.yaml');\n if (fs.existsSync(workspaceYamlPath)) {\n return workspaceYamlPath;\n }\n\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findPnpmWorkspaceFile(parentDir);\n }\n\n return null;\n }\n\n private async writePnpmConfig(dir: string, options: InstallOptions = {}) {\n const sourceWorkspaceYamlPath = this.findPnpmWorkspaceFile(this.rootDir);\n const sourceWorkspaceYaml = sourceWorkspaceYamlPath\n ? await fsPromises.readFile(sourceWorkspaceYamlPath, 'utf-8')\n : '';\n\n const patchedDependencies = sourceWorkspaceYamlPath\n ? await this.copyPnpmPatches(sourceWorkspaceYaml, path.dirname(sourceWorkspaceYamlPath), dir)\n : undefined;\n\n await fsPromises.writeFile(\n path.join(dir, 'pnpm-workspace.yaml'),\n copyPnpmWorkspaceSettings(sourceWorkspaceYaml, { ...options, patchedDependencies }),\n 'utf-8',\n );\n }\n\n /**\n * Resolves a declared patch path against the source workspace and verifies that, once symlinks\n * are followed, it still resolves inside the workspace. Returns the real path to copy from, or\n * `undefined` when the patch escapes the workspace or its file cannot be resolved.\n */\n private async resolvePatchSource(\n resolvedWorkspaceRoot: string,\n declaredPath: string,\n { key, label }: { key: string; label: string },\n ): Promise<string | undefined> {\n const sourcePath = path.resolve(resolvedWorkspaceRoot, declaredPath);\n if (!sourcePath.startsWith(`${resolvedWorkspaceRoot}${path.sep}`)) {\n this.logger.warn(`Skipping ${label} patch for \"${key}\": patch file is outside the workspace at ${sourcePath}`);\n return undefined;\n }\n\n // A patch path can stay lexically under the workspace while traversing a symlink whose target\n // lives outside it. copyFile follows symlinks, so compare the resolved real paths before copying.\n let realWorkspaceRoot: string;\n let realSourcePath: string;\n try {\n [realWorkspaceRoot, realSourcePath] = await Promise.all([\n fsPromises.realpath(resolvedWorkspaceRoot),\n fsPromises.realpath(sourcePath),\n ]);\n } catch {\n this.logger.warn(`Skipping ${label} patch for \"${key}\": patch file not found at ${sourcePath}`);\n return undefined;\n }\n\n if (!realSourcePath.startsWith(`${realWorkspaceRoot}${path.sep}`)) {\n this.logger.warn(\n `Skipping ${label} patch for \"${key}\": patch file is outside the workspace at ${realSourcePath}`,\n );\n return undefined;\n }\n\n return realSourcePath;\n }\n\n /**\n * Copies the patch files declared by the source workspace into the output directory and returns\n * the patch map rewritten to output-relative paths, so the patches survive the output install.\n */\n private async copyPnpmPatches(\n sourceWorkspaceYaml: string,\n sourceWorkspaceRoot: string,\n dir: string,\n ): Promise<Record<string, string>> {\n const declared = parsePnpmPatchedDependencies(sourceWorkspaceYaml);\n const rewritten: Record<string, string> = {};\n const usedFileNames = new Set<string>();\n const resolvedWorkspaceRoot = path.resolve(sourceWorkspaceRoot);\n\n for (const [key, declaredPath] of Object.entries(declared)) {\n const sourcePath = await this.resolvePatchSource(resolvedWorkspaceRoot, declaredPath, {\n key,\n label: 'pnpm',\n });\n if (!sourcePath) continue;\n\n let fileName = path.basename(sourcePath);\n if (usedFileNames.has(fileName)) {\n fileName = `${key.replace(/[^a-zA-Z0-9._-]/g, '_')}-${fileName}`;\n }\n usedFileNames.add(fileName);\n\n await fsPromises.mkdir(path.join(dir, PNPM_PATCHES_DIR), { recursive: true });\n await fsPromises.copyFile(sourcePath, path.join(dir, PNPM_PATCHES_DIR, fileName));\n rewritten[key] = `${PNPM_PATCHES_DIR}/${fileName}`;\n }\n\n return rewritten;\n }\n\n /**\n * Writes the `.yarnrc.yml` for the bundled output, recording the supported architectures so the\n * output install only resolves optional native binaries that match the deployment target.\n */\n private async writeYarnConfig(dir: string, options: ArchitectureOptions) {\n const yarnrcPath = path.join(dir, '.yarnrc.yml');\n const config = {\n supportedArchitectures: {\n cpu: options.cpu || [],\n os: options.os || [],\n libc: options.libc || [],\n },\n };\n\n await fsPromises.writeFile(\n yarnrcPath,\n `supportedArchitectures:\\n${Object.entries(config.supportedArchitectures)\n .map(([key, value]) => ` ${key}: ${JSON.stringify(value)}`)\n .join('\\n')}`,\n );\n }\n\n /**\n * Copies the source workspace's `.yarn/patches/` directory (Yarn Berry) into the output\n * directory so patches survive the output install. Yarn auto-discovers patches from this\n * directory and applies them per the lockfile references.\n */\n private async copyYarnPatches(dir: string): Promise<void> {\n const sourcePatchesDir = path.join(this.rootDir, '.yarn', 'patches');\n if (!fs.existsSync(sourcePatchesDir)) return;\n\n const outputPatchesDir = path.join(dir, '.yarn', 'patches');\n await fsPromises.cp(sourcePatchesDir, outputPatchesDir, { recursive: true, errorOnExist: false });\n }\n\n /**\n * Copies the patch files referenced by the source workspace's `patchedDependencies` in\n * package.json into the output directory and returns the map rewritten to output-relative\n * paths, so bun patches survive the output install.\n */\n private async copyBunPatches(\n declared: Record<string, string>,\n sourceRoot: string,\n dir: string,\n ): Promise<Record<string, string>> {\n const rewritten: Record<string, string> = {};\n const usedFileNames = new Set<string>();\n const resolvedRoot = path.resolve(sourceRoot);\n\n for (const [key, declaredPath] of Object.entries(declared)) {\n const sourcePath = await this.resolvePatchSource(resolvedRoot, declaredPath, {\n key,\n label: 'bun',\n });\n if (!sourcePath) continue;\n\n let fileName = path.basename(sourcePath);\n if (usedFileNames.has(fileName)) {\n fileName = `${key.replace(/[^a-zA-Z0-9._-]/g, '_')}-${fileName}`;\n }\n usedFileNames.add(fileName);\n\n await fsPromises.mkdir(path.join(dir, BUN_PATCHES_DIR), { recursive: true });\n await fsPromises.copyFile(sourcePath, path.join(dir, BUN_PATCHES_DIR, fileName));\n rewritten[key] = `${BUN_PATCHES_DIR}/${fileName}`;\n }\n\n return rewritten;\n }\n\n /**\n * Reads `patchedDependencies` from the source package.json, copies the referenced patch\n * files into the output directory, and writes the output-relative patch map into the\n * output's package.json so `bun install` preserves patches in the bundled output.\n */\n private async copyBunPatchesToOutput(dir: string): Promise<void> {\n const sourcePackageJsonPath = path.join(this.rootDir, 'package.json');\n if (!fs.existsSync(sourcePackageJsonPath)) return;\n\n const sourcePkg = await readJSON(sourcePackageJsonPath);\n const patchedDeps = sourcePkg.patchedDependencies as Record<string, string> | undefined;\n if (!patchedDeps || Object.keys(patchedDeps).length === 0) return;\n\n const rewritten = await this.copyBunPatches(patchedDeps, this.rootDir, dir);\n if (Object.keys(rewritten).length === 0) return;\n\n const outputPackageJsonPath = path.join(dir, 'package.json');\n let outputPkg: Record<string, unknown>;\n try {\n outputPkg = (await readJSON(outputPackageJsonPath)) as Record<string, unknown>;\n } catch {\n outputPkg = {};\n }\n outputPkg.patchedDependencies = rewritten;\n await writeJSON(outputPackageJsonPath, outputPkg, { spaces: 2 });\n }\n\n private getNpmArgs(options: ArchitectureOptions): string[] {\n const args: string[] = [];\n if (options.cpu) args.push(`--cpu=${options.cpu.join(',')}`);\n if (options.os) args.push(`--os=${options.os.join(',')}`);\n if (options.libc) args.push(`--libc=${options.libc.join(',')}`);\n return args;\n }\n\n /**\n * Depending on whether we want to install or add a package, this function returns the appropriate commands.\n * All package managers support both commands (e.g. npm install has an alias on \"add\")\n */\n private getPackageManagerCommand(\n pm: PackageManager,\n type: 'install' | 'add',\n { yarnClassic = false }: { yarnClassic?: boolean } = {},\n ): string {\n const cmd = type === 'install' ? 'install' : 'add';\n\n switch (pm) {\n case 'npm':\n return `${cmd} --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false`;\n case 'yarn':\n return type === 'install' && !yarnClassic ? `${cmd} --no-immutable` : cmd;\n case 'pnpm':\n return type === 'install' ? `${cmd} --no-frozen-lockfile --loglevel=error` : `${cmd} --loglevel=error`;\n default:\n return cmd;\n }\n }\n\n public async install({\n dir = this.rootDir,\n architecture,\n pnpmOverrides,\n pnpmNodeLinker,\n }: {\n dir?: string;\n architecture?: ArchitectureOptions;\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n } = {}) {\n const pm = this.packageManager;\n let yarnClassic = false;\n if (this.lockFile) {\n const destination = path.join(dir, this.lockFile.filename);\n if (path.resolve(this.lockFile.path) !== path.resolve(destination)) {\n const packedBunWorkspaces =\n pm === 'bun' &&\n fs.existsSync(path.join(dir, 'package.json')) &&\n Object.values(\n ((await readJSON(path.join(dir, 'package.json'))) as { resolutions?: Record<string, string> })\n .resolutions ?? {},\n ).some(spec => spec.startsWith('file:./workspace-module/'));\n\n if (packedBunWorkspaces) {\n // Bun cannot reuse the source workspace lockfile with packed tarballs; removing its workspace entries\n // makes Bun ignore it and regenerate the lockfile anyway. Start with a clean lockfile instead.\n await fsPromises.rm(destination, { force: true });\n } else {\n await fsPromises.copyFile(this.lockFile.path, destination);\n }\n }\n\n if (pm === 'yarn') {\n yarnClassic = await isYarnClassicLockfile(destination);\n }\n }\n\n const installCommand = this.getPackageManagerCommand(pm, 'install', { yarnClassic });\n let args: string[] = [];\n\n switch (pm) {\n case 'pnpm':\n await this.writePnpmConfig(dir, { ...architecture, pnpmOverrides, pnpmNodeLinker });\n break;\n case 'yarn':\n // similar to --ignore-workspace but for yarn\n await ensureFile(path.join(dir, 'yarn.lock'));\n if (architecture) {\n await this.writeYarnConfig(dir, architecture);\n }\n await this.copyYarnPatches(dir);\n break;\n case 'bun':\n await this.copyBunPatchesToOutput(dir);\n break;\n case 'npm':\n if (architecture) {\n args = this.getNpmArgs(architecture);\n }\n break;\n default:\n // Do nothing\n }\n\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: dir,\n });\n\n try {\n return await cpLogger({\n cmd: `${pm} ${installCommand}`,\n args,\n env: process.env as Record<string, string>,\n });\n } catch (error) {\n if (pm !== 'pnpm') throw error;\n\n const processOutput =\n error && typeof error === 'object'\n ? `${'stdout' in error ? String(error.stdout) : ''}\\n${'stderr' in error ? String(error.stderr) : ''}`\n : '';\n const ignoredPackages = getPnpmIgnoredBuildPackages(processOutput);\n if (ignoredPackages.length === 0) throw error;\n\n throw new MastraError(\n {\n id: 'DEPLOYER_PNPM_IGNORED_BUILDS',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { packageNames: ignoredPackages.join(', ') },\n text: `pnpm blocked build scripts for: ${ignoredPackages.join(', ')}. Add these packages to allowBuilds in pnpm-workspace.yaml and retry the build.`,\n },\n error,\n );\n }\n }\n\n public async installPackages(packages: string[]) {\n const pm = this.packageManager;\n const installCommand = this.getPackageManagerCommand(pm, 'add');\n\n const env: Record<string, string> = {\n PATH: process.env.PATH!,\n };\n\n if (process.env.npm_config_registry) {\n env.npm_config_registry = process.env.npm_config_registry;\n }\n\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: '',\n });\n\n return cpLogger({\n cmd: `${pm} ${installCommand}`,\n args: packages,\n env,\n });\n }\n\n public async checkDependencies(dependencies: string[]): Promise<string> {\n try {\n const packageJsonPath = path.join(this.rootDir, 'package.json');\n\n try {\n await fsPromises.access(packageJsonPath);\n } catch {\n return 'No package.json file found in the current directory';\n }\n\n const packageJson = await readJSON(packageJsonPath);\n for (const dependency of dependencies) {\n if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {\n return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;\n }\n }\n\n return 'ok';\n } catch (err) {\n console.error(err);\n return 'Could not check dependencies';\n }\n }\n\n public async getProjectName() {\n try {\n const packageJsonPath = path.join(this.rootDir, 'package.json');\n const pkg = await readJSON(packageJsonPath);\n return pkg.name;\n } catch (err) {\n throw err;\n }\n }\n\n public async getPackageVersion() {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const pkgJsonPath = path.join(__dirname, '..', '..', 'package.json');\n\n const content = (await readJSON(pkgJsonPath)) as PackageJson;\n return content.version;\n }\n\n public async addScriptsToPackageJson(scripts: Record<string, string>) {\n const packageJson = await readJSON('package.json');\n packageJson.scripts = {\n ...packageJson.scripts,\n ...scripts,\n };\n await writeJSON('package.json', packageJson, { spaces: 2 });\n }\n}\n\nexport class DepsService extends Deps {}\n","import * as fs from 'node:fs';\n\nexport abstract class EnvService {\n abstract getEnvValue(key: string): Promise<string | null>;\n abstract setEnvValue(key: string, value: string): Promise<void>;\n}\n\nexport class FileEnvService extends EnvService {\n private filePath: string;\n\n constructor(filePath: string) {\n super();\n this.filePath = filePath;\n }\n\n private readFile(filePath: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(filePath, 'utf8', (err: NodeJS.ErrnoException | null, data: string) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n private writeFile({ filePath, data }: { filePath: string; data: string }): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.writeFile(filePath, data, 'utf8', (err: NodeJS.ErrnoException | null) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n private async updateEnvData({\n key,\n value,\n filePath = this.filePath,\n data,\n }: {\n key: string;\n value: string;\n filePath?: string;\n data: string;\n }): Promise<string> {\n const regex = new RegExp(`^${key}=.*$`, 'm');\n if (data.match(regex)) {\n // Use a replacement function so `$` sequences in the value (e.g. `$&`,\n // `$$`) are written literally instead of being interpreted as\n // String.prototype.replace special patterns.\n data = data.replace(regex, () => `${key}=${value}`);\n } else {\n data += `\\n${key}=${value}`;\n }\n await this.writeFile({ filePath, data });\n console.info(`${key} set to ${value} in ENV file.`);\n return data;\n }\n\n async getEnvValue(key: string): Promise<string | null> {\n try {\n const data = await this.readFile(this.filePath);\n const regex = new RegExp(`^${key}=(.*)$`, 'm');\n const match = data.match(regex);\n return match?.[1] || null;\n } catch (err) {\n console.error(`Error reading ENV value: ${err}`);\n return null;\n }\n }\n\n async setEnvValue(key: string, value: string): Promise<void> {\n try {\n const data = await this.readFile(this.filePath);\n await this.updateEnvData({ key, value, data });\n } catch (err) {\n console.error(`Error writing ENV value: ${err}`);\n }\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport fsExtra from 'fs-extra/esm';\n\nimport { FileEnvService } from './env.js';\n\nexport class FileService {\n /**\n *\n * @param inputFile the file in the starter files directory to copy\n * @param outputFilePath the destination path\n * @param replaceIfExists flag to replace if it exists\n * @returns\n */\n public async copyStarterFile(inputFile: string, outputFilePath: string, replaceIfExists?: boolean) {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const filePath = path.resolve(__dirname, '..', 'starter-files', inputFile);\n const fileString = fs.readFileSync(filePath, 'utf8');\n\n if (fs.existsSync(outputFilePath) && !replaceIfExists) {\n console.info(`${outputFilePath} already exists`);\n return false;\n }\n\n await fsExtra.outputFile(outputFilePath, fileString);\n\n return true;\n }\n\n public async setupEnvFile({ dbUrl }: { dbUrl: string }) {\n const envPath = path.join(process.cwd(), '.env.development');\n\n await fsExtra.ensureFile(envPath);\n\n const fileEnvService = new FileEnvService(envPath);\n await fileEnvService.setEnvValue('DB_URL', dbUrl);\n }\n\n public getFirstExistingFile(files: string[]): string {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n throw new Error('Missing required file, checked the following paths: ' + files.join(', '));\n }\n\n /**\n * Returns every existing file from the provided array in the same order.\n * Callers supply files from the lowest to highest precedence so later dotenv\n * files override earlier values when the bundler loads them.\n */\n public getExistingFiles(files: string[]): string[] {\n return files.filter(file => fs.existsSync(file));\n }\n\n /**\n * Returns the first existing file from the provided array, or undefined if none exist\n * @param files array of file paths to check\n * @returns the first existing file path or undefined\n */\n public getFirstExistingFileOrUndefined(files: string[]): string | undefined {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n return undefined;\n }\n\n public replaceValuesInFile({\n filePath,\n replacements,\n }: {\n filePath: string;\n replacements: { search: string; replace: string }[];\n }) {\n let fileContent = fs.readFileSync(filePath, 'utf8');\n replacements.forEach(({ search, replace }) => {\n fileContent = fileContent.replaceAll(search, replace);\n });\n\n fs.writeFileSync(filePath, fileContent);\n }\n}\n"],"mappings":"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"}
|
|
@@ -84,6 +84,119 @@ function createChildProcessLogger({ logger, root }) {
|
|
|
84
84
|
}
|
|
85
85
|
//#endregion
|
|
86
86
|
//#region src/services/deps.ts
|
|
87
|
+
/** Version used to pack private workspace packages whose package.json has no `version`. */
|
|
88
|
+
const WORKSPACE_PLACEHOLDER_VERSION = "0.0.0";
|
|
89
|
+
async function writeManifestAtomically(manifestPath, contents, inFlight) {
|
|
90
|
+
const tmpPath = `${manifestPath}.${process.pid}.${Date.now()}.tmp`;
|
|
91
|
+
inFlight?.add(tmpPath);
|
|
92
|
+
try {
|
|
93
|
+
const { mode } = await fsPromises.stat(manifestPath);
|
|
94
|
+
await fsPromises.writeFile(tmpPath, contents, { mode });
|
|
95
|
+
await fsPromises.chmod(tmpPath, mode);
|
|
96
|
+
await fsPromises.rename(tmpPath, manifestPath);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
await fsPromises.rm(tmpPath, { force: true });
|
|
99
|
+
throw error;
|
|
100
|
+
} finally {
|
|
101
|
+
inFlight?.delete(tmpPath);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Package managers refuse to pack a manifest without a version, and pnpm/bun also
|
|
106
|
+
* resolve `workspace:` ranges from the dependency's manifest. So every versionless
|
|
107
|
+
* package in `dirs` gets the placeholder version for the whole of `operation`, and
|
|
108
|
+
* the original manifests are restored afterwards — also on SIGINT/SIGTERM.
|
|
109
|
+
*/
|
|
110
|
+
async function withPlaceholderVersions(dirs, operation) {
|
|
111
|
+
const acquired = [];
|
|
112
|
+
try {
|
|
113
|
+
for (const dir of new Set(dirs.map((dir) => path.resolve(dir)))) {
|
|
114
|
+
const manifestPath = path.join(dir, "package.json");
|
|
115
|
+
let lease = placeholderLeases.get(manifestPath);
|
|
116
|
+
while (lease?.releasing) {
|
|
117
|
+
await lease.releasing.catch(() => {});
|
|
118
|
+
lease = placeholderLeases.get(manifestPath);
|
|
119
|
+
}
|
|
120
|
+
if (lease) lease.refs++;
|
|
121
|
+
else {
|
|
122
|
+
lease = {
|
|
123
|
+
refs: 1,
|
|
124
|
+
injected: false,
|
|
125
|
+
ready: Promise.resolve()
|
|
126
|
+
};
|
|
127
|
+
lease.ready = injectPlaceholderVersion(manifestPath, lease);
|
|
128
|
+
placeholderLeases.set(manifestPath, lease);
|
|
129
|
+
installSignalHandlers();
|
|
130
|
+
}
|
|
131
|
+
acquired.push(manifestPath);
|
|
132
|
+
await lease.ready;
|
|
133
|
+
}
|
|
134
|
+
return await operation();
|
|
135
|
+
} finally {
|
|
136
|
+
try {
|
|
137
|
+
for (const manifestPath of acquired) await releasePlaceholderVersion(manifestPath);
|
|
138
|
+
} finally {
|
|
139
|
+
if (placeholderLeases.size === 0) removeSignalHandlers();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const placeholderLeases = /* @__PURE__ */ new Map();
|
|
144
|
+
const inFlightTmpPaths = /* @__PURE__ */ new Set();
|
|
145
|
+
async function injectPlaceholderVersion(manifestPath, lease) {
|
|
146
|
+
const original = await fsPromises.readFile(manifestPath, "utf-8").catch(() => void 0);
|
|
147
|
+
if (original === void 0) return;
|
|
148
|
+
let manifest;
|
|
149
|
+
try {
|
|
150
|
+
manifest = JSON.parse(original);
|
|
151
|
+
} catch (error) {
|
|
152
|
+
throw new Error(`Failed to parse ${manifestPath}: ${error.message}`, { cause: error });
|
|
153
|
+
}
|
|
154
|
+
if (manifest.version) return;
|
|
155
|
+
lease.original = original;
|
|
156
|
+
lease.injected = true;
|
|
157
|
+
await writeManifestAtomically(manifestPath, JSON.stringify({
|
|
158
|
+
...manifest,
|
|
159
|
+
version: WORKSPACE_PLACEHOLDER_VERSION
|
|
160
|
+
}, null, 2) + "\n", inFlightTmpPaths);
|
|
161
|
+
}
|
|
162
|
+
async function releasePlaceholderVersion(manifestPath) {
|
|
163
|
+
const lease = placeholderLeases.get(manifestPath);
|
|
164
|
+
if (--lease.refs > 0) return;
|
|
165
|
+
lease.releasing = (async () => {
|
|
166
|
+
await lease.ready.catch(() => {});
|
|
167
|
+
try {
|
|
168
|
+
if (lease.injected) {
|
|
169
|
+
await writeManifestAtomically(manifestPath, lease.original, inFlightTmpPaths);
|
|
170
|
+
lease.injected = false;
|
|
171
|
+
}
|
|
172
|
+
} finally {
|
|
173
|
+
placeholderLeases.delete(manifestPath);
|
|
174
|
+
}
|
|
175
|
+
})();
|
|
176
|
+
await lease.releasing;
|
|
177
|
+
}
|
|
178
|
+
function restorePlaceholderVersionsSync() {
|
|
179
|
+
for (const tmpPath of inFlightTmpPaths) fs.rmSync(tmpPath, { force: true });
|
|
180
|
+
inFlightTmpPaths.clear();
|
|
181
|
+
for (const [manifestPath, lease] of placeholderLeases) if (lease.injected) {
|
|
182
|
+
fs.writeFileSync(manifestPath, lease.original);
|
|
183
|
+
lease.injected = false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function onPlaceholderSignal(signal) {
|
|
187
|
+
restorePlaceholderVersionsSync();
|
|
188
|
+
removeSignalHandlers();
|
|
189
|
+
process.kill(process.pid, signal);
|
|
190
|
+
}
|
|
191
|
+
function installSignalHandlers() {
|
|
192
|
+
if (process.listeners("SIGINT").includes(onPlaceholderSignal)) return;
|
|
193
|
+
process.once("SIGINT", onPlaceholderSignal);
|
|
194
|
+
process.once("SIGTERM", onPlaceholderSignal);
|
|
195
|
+
}
|
|
196
|
+
function removeSignalHandlers() {
|
|
197
|
+
process.off("SIGINT", onPlaceholderSignal);
|
|
198
|
+
process.off("SIGTERM", onPlaceholderSignal);
|
|
199
|
+
}
|
|
87
200
|
const PNPM_PATCHES_DIR = "pnpm-patches";
|
|
88
201
|
const BUN_PATCHES_DIR = "bun-patches";
|
|
89
202
|
const PNPM_CONFIG_KEYS_TO_COPY = /* @__PURE__ */ new Set([
|
|
@@ -662,6 +775,6 @@ var FileService = class {
|
|
|
662
775
|
}
|
|
663
776
|
};
|
|
664
777
|
//#endregion
|
|
665
|
-
export {
|
|
778
|
+
export { WORKSPACE_PLACEHOLDER_VERSION as a, createPinoStream as c, DepsService as i, EnvService as n, withPlaceholderVersions as o, Deps as r, createChildProcessLogger as s, FileService as t };
|
|
666
779
|
|
|
667
|
-
//# sourceMappingURL=services-
|
|
780
|
+
//# sourceMappingURL=services-PUoAjxMD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services-PUoAjxMD.js","names":[],"sources":["../src/deploy/log.ts","../src/services/deps.ts","../src/services/env.ts","../src/services/fs.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { Writable } from 'node:stream';\nimport type { IMastraLogger } from '@mastra/core/logger';\n\nexport const createPinoStream = (logger: IMastraLogger) => {\n return new Writable({\n write(chunk, _encoding, callback) {\n // Convert Buffer/string to string and trim whitespace\n const line = chunk.toString().trim();\n\n if (line) {\n console.info(line);\n // Log each line through Pino\n logger.info(line);\n }\n\n callback();\n },\n });\n};\n\n/**\n * Args are joined into a shell command (`shell: true` is required for package\n * manager shims on Windows), so only allow characters that appear in package\n * specifiers and CLI flags — never shell metacharacters (CodeQL\n * js/shell-command-constructed-from-input).\n */\nconst SAFE_SHELL_ARG = /^[\\w@%+=:,./^~-]*$/;\n\nexport function createChildProcessLogger({ logger, root }: { logger: IMastraLogger; root: string }) {\n const pinoStream = createPinoStream(logger);\n return async ({ cmd, args, env }: { cmd: string; args: string[]; env: Record<string, string> }) => {\n try {\n for (const arg of args) {\n if (!SAFE_SHELL_ARG.test(arg)) {\n throw new Error(`Refusing to pass unsafe argument to shell command: ${JSON.stringify(arg)}`);\n }\n }\n const subprocess = spawn(cmd, args, {\n cwd: root,\n shell: true,\n env,\n // No stdin for the child process — it doesn't need interactive input\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n subprocess.stdout?.on('data', chunk => {\n stdout += chunk.toString();\n });\n subprocess.stderr?.on('data', chunk => {\n stderr += chunk.toString();\n });\n\n // Pipe stdout and stderr through the logging stream.\n // { end: false } prevents the first stream to close from ending pinoStream\n // while the other may still be writing.\n subprocess.stdout?.pipe(pinoStream, { end: false });\n subprocess.stderr?.pipe(pinoStream, { end: false });\n\n // Wait for the process to complete\n return new Promise((resolve, reject) => {\n subprocess.on('close', code => {\n pinoStream.end();\n if (code === 0) {\n resolve({ success: true, stdout, stderr });\n } else {\n reject(Object.assign(new Error(`Process exited with code ${code}`), { stdout, stderr }));\n }\n });\n\n subprocess.on('error', error => {\n pinoStream.end();\n logger.error('Process failed', { error });\n reject(error);\n });\n });\n } catch (error) {\n console.error(error);\n logger.error('Process failed', { error });\n pinoStream.end();\n return { success: false, error };\n }\n };\n}\n","import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path, { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { MastraBase } from '@mastra/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { readJSON, writeJSON, ensureFile } from 'fs-extra/esm';\nimport type { PackageJson } from 'type-fest';\nimport { parse } from 'yaml';\n\nimport { createChildProcessLogger } from '../deploy/log.js';\n\ntype PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\n/** Version used to pack private workspace packages whose package.json has no `version`. */\nexport const WORKSPACE_PLACEHOLDER_VERSION = '0.0.0';\n\n// Write via temp file + rename so an interrupted write never leaves a truncated manifest.\nasync function writeManifestAtomically(manifestPath: string, contents: string, inFlight?: Set<string>) {\n const tmpPath = `${manifestPath}.${process.pid}.${Date.now()}.tmp`;\n inFlight?.add(tmpPath);\n try {\n const { mode } = await fsPromises.stat(manifestPath);\n await fsPromises.writeFile(tmpPath, contents, { mode });\n await fsPromises.chmod(tmpPath, mode);\n await fsPromises.rename(tmpPath, manifestPath);\n } catch (error) {\n await fsPromises.rm(tmpPath, { force: true });\n throw error;\n } finally {\n inFlight?.delete(tmpPath);\n }\n}\n\n/**\n * Package managers refuse to pack a manifest without a version, and pnpm/bun also\n * resolve `workspace:` ranges from the dependency's manifest. So every versionless\n * package in `dirs` gets the placeholder version for the whole of `operation`, and\n * the original manifests are restored afterwards — also on SIGINT/SIGTERM.\n */\nexport async function withPlaceholderVersions<T>(dirs: string[], operation: () => Promise<T>): Promise<T> {\n const acquired: string[] = [];\n try {\n for (const dir of new Set(dirs.map(dir => path.resolve(dir)))) {\n const manifestPath = path.join(dir, 'package.json');\n let lease = placeholderLeases.get(manifestPath);\n // A lease whose last owner is restoring it can't be joined; wait and start a fresh one.\n while (lease?.releasing) {\n await lease.releasing.catch(() => {});\n lease = placeholderLeases.get(manifestPath);\n }\n if (lease) {\n lease.refs++;\n } else {\n lease = { refs: 1, injected: false, ready: Promise.resolve() };\n lease.ready = injectPlaceholderVersion(manifestPath, lease);\n placeholderLeases.set(manifestPath, lease);\n installSignalHandlers();\n }\n acquired.push(manifestPath);\n await lease.ready;\n }\n return await operation();\n } finally {\n try {\n for (const manifestPath of acquired) {\n await releasePlaceholderVersion(manifestPath);\n }\n } finally {\n if (placeholderLeases.size === 0) {\n removeSignalHandlers();\n }\n }\n }\n}\n\ninterface PlaceholderLease {\n refs: number;\n original?: string;\n injected: boolean;\n ready: Promise<void>;\n releasing?: Promise<void>;\n}\n\n// Shared across calls so one bundle can't restore a manifest another is still packing.\nconst placeholderLeases = new Map<string, PlaceholderLease>();\nconst inFlightTmpPaths = new Set<string>();\n\nasync function injectPlaceholderVersion(manifestPath: string, lease: PlaceholderLease) {\n const original = await fsPromises.readFile(manifestPath, 'utf-8').catch(() => undefined);\n if (original === undefined) return;\n let manifest: PackageJson;\n try {\n manifest = JSON.parse(original) as PackageJson;\n } catch (error) {\n throw new Error(`Failed to parse ${manifestPath}: ${(error as Error).message}`, { cause: error });\n }\n if (manifest.version) return;\n lease.original = original;\n // Mark before writing so a signal mid-write still restores this manifest.\n lease.injected = true;\n await writeManifestAtomically(\n manifestPath,\n JSON.stringify({ ...manifest, version: WORKSPACE_PLACEHOLDER_VERSION }, null, 2) + '\\n',\n inFlightTmpPaths,\n );\n}\n\nasync function releasePlaceholderVersion(manifestPath: string) {\n const lease = placeholderLeases.get(manifestPath)!;\n if (--lease.refs > 0) return;\n lease.releasing = (async () => {\n await lease.ready.catch(() => {});\n try {\n if (lease.injected) {\n await writeManifestAtomically(manifestPath, lease.original!, inFlightTmpPaths);\n lease.injected = false;\n }\n } finally {\n placeholderLeases.delete(manifestPath);\n }\n })();\n await lease.releasing;\n}\n\nfunction restorePlaceholderVersionsSync() {\n // Removing in-flight temp files keeps them out of later tarballs and makes any\n // pending rename fail instead of overwriting the restored manifest.\n for (const tmpPath of inFlightTmpPaths) {\n fs.rmSync(tmpPath, { force: true });\n }\n inFlightTmpPaths.clear();\n for (const [manifestPath, lease] of placeholderLeases) {\n if (lease.injected) {\n fs.writeFileSync(manifestPath, lease.original!);\n lease.injected = false;\n }\n }\n}\n\nfunction onPlaceholderSignal(signal: NodeJS.Signals) {\n restorePlaceholderVersionsSync();\n removeSignalHandlers();\n process.kill(process.pid, signal);\n}\n\nfunction installSignalHandlers() {\n if (process.listeners('SIGINT').includes(onPlaceholderSignal)) return;\n process.once('SIGINT', onPlaceholderSignal);\n process.once('SIGTERM', onPlaceholderSignal);\n}\n\nfunction removeSignalHandlers() {\n process.off('SIGINT', onPlaceholderSignal);\n process.off('SIGTERM', onPlaceholderSignal);\n}\n\ninterface LockFileInfo {\n path: string;\n filename: string;\n packageManager: PackageManager;\n}\n\ninterface ArchitectureOptions {\n os?: string[];\n cpu?: string[];\n libc?: string[];\n}\n\ninterface InstallOptions extends ArchitectureOptions {\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n /** Patch key -> path relative to the output directory. */\n patchedDependencies?: Record<string, string>;\n}\n\nconst PNPM_PATCHES_DIR = 'pnpm-patches';\nconst BUN_PATCHES_DIR = 'bun-patches';\n\nconst PNPM_CONFIG_KEYS_TO_COPY = new Set([\n 'allowBuilds',\n 'onlyBuiltDependencies',\n 'ignoredBuiltDependencies',\n 'neverBuiltDependencies',\n 'minimumReleaseAge',\n 'minimumReleaseAgeExclude',\n 'trustPolicy',\n 'trustPolicyExclude',\n 'trustPolicyIgnoreAfter',\n 'supportedArchitectures',\n]);\n\nfunction getTopLevelYamlKey(line: string) {\n const match = /^(?!\\s)([\\w-]+):/.exec(line);\n return match?.[1];\n}\n\nconst PNPM_IGNORED_BUILDS_ERROR = 'ERR_PNPM_IGNORED_BUILDS';\n\nexport function getPnpmIgnoredBuildPackages(output: string): string[] {\n const match = new RegExp(`\\\\[?${PNPM_IGNORED_BUILDS_ERROR}\\\\]?[^\\\\n]*Ignored build scripts:\\\\s*([^\\\\n]+)`).exec(\n output,\n );\n if (!match?.[1]) return [];\n\n return match[1]\n .split(',')\n .map(specifier => specifier.trim())\n .filter(Boolean)\n .map(specifier => {\n if (specifier.startsWith('@')) {\n const versionSeparator = specifier.indexOf('@', 1);\n return versionSeparator === -1 ? specifier : specifier.slice(0, versionSeparator);\n }\n return specifier.split('@', 1)[0]!;\n });\n}\n\nfunction validatePnpmBuildApprovals(key: string, block: string): void {\n if (key !== 'allowBuilds' && key !== 'onlyBuiltDependencies') return;\n\n let value: unknown;\n try {\n value = (parse(block) as Record<string, unknown>)[key];\n } catch (error) {\n throw new MastraError(\n {\n id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { key },\n text: `Invalid pnpm ${key} configuration`,\n },\n error,\n );\n }\n\n const invalidEntries =\n key === 'allowBuilds'\n ? value && typeof value === 'object' && !Array.isArray(value)\n ? Object.entries(value).filter(\n ([dependency, approval]) => dependency.trim().length === 0 || typeof approval !== 'boolean',\n )\n : [[key, value]]\n : Array.isArray(value) &&\n value.every(dependency => typeof dependency === 'string' && dependency.trim().length > 0)\n ? []\n : [[key, value]];\n\n if (invalidEntries.length === 0) return;\n const invalidEntryNames = invalidEntries.map(([entry]) => entry).join(', ');\n\n throw new MastraError({\n id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { key, invalidEntries: invalidEntryNames },\n text: `Invalid pnpm ${key} entries: ${invalidEntryNames}`,\n });\n}\n\n/**\n * Reads the `patchedDependencies` map from a pnpm workspace file. Paths are returned as declared,\n * i.e. relative to the workspace root. Returns an empty map for absent or unusable declarations.\n */\nexport function parsePnpmPatchedDependencies(source: string): Record<string, string> {\n let parsed: unknown;\n try {\n parsed = parse(source);\n } catch {\n return {};\n }\n\n const patched = (parsed as { patchedDependencies?: unknown } | null)?.patchedDependencies;\n if (!patched || typeof patched !== 'object' || Array.isArray(patched)) {\n return {};\n }\n\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(patched as Record<string, unknown>)) {\n if (typeof value === 'string' && value.trim() && key.trim()) {\n result[key] = value.trim();\n }\n }\n\n return result;\n}\n\nexport function copyPnpmWorkspaceSettings(source: string, options: InstallOptions = {}) {\n const hasArchitecture = Boolean(options.os?.length || options.cpu?.length || options.libc?.length);\n const lines = source.split(/\\r?\\n/);\n const blocks: string[] = [];\n\n for (let index = 0; index < lines.length;) {\n const key = getTopLevelYamlKey(lines[index] ?? '');\n if (!key) {\n index += 1;\n continue;\n }\n\n const start = index;\n index += 1;\n while (index < lines.length && !getTopLevelYamlKey(lines[index] ?? '')) {\n index += 1;\n }\n\n if (!PNPM_CONFIG_KEYS_TO_COPY.has(key) || (key === 'supportedArchitectures' && hasArchitecture)) {\n continue;\n }\n\n const block = lines.slice(start, index).join('\\n').trimEnd();\n if (block) {\n validatePnpmBuildApprovals(key, block);\n blocks.push(block);\n }\n }\n\n if (hasArchitecture) {\n const architectureBlock = ['supportedArchitectures:'];\n if (options.os?.length) {\n architectureBlock.push(` os: ${JSON.stringify(options.os)}`);\n }\n if (options.cpu?.length) {\n architectureBlock.push(` cpu: ${JSON.stringify(options.cpu)}`);\n }\n if (options.libc?.length) {\n architectureBlock.push(` libc: ${JSON.stringify(options.libc)}`);\n }\n blocks.push(architectureBlock.join('\\n'));\n }\n\n if (options.pnpmOverrides && Object.keys(options.pnpmOverrides).length > 0) {\n blocks.push(\n [\n 'overrides:',\n ...Object.entries(options.pnpmOverrides).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n ),\n ].join('\\n'),\n );\n }\n\n if (options.patchedDependencies && Object.keys(options.patchedDependencies).length > 0) {\n blocks.push(\n [\n 'patchedDependencies:',\n ...Object.entries(options.patchedDependencies).map(\n ([key, value]) => ` ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n ),\n ].join('\\n'),\n );\n // The bundled output only installs runtime dependencies, so patches declared for\n // dev-only or bundled-away packages are legitimately unused here.\n blocks.push('allowUnusedPatches: true');\n }\n\n if (options.pnpmNodeLinker) {\n blocks.push(`nodeLinker: ${options.pnpmNodeLinker}`);\n }\n\n return [\"packages:\\n - '.'\", ...blocks].join('\\n\\n') + '\\n';\n}\n\n// Semver characters only; versions are interpolated into a shell command.\nconst SAFE_PACKAGE_VERSION = /^[0-9A-Za-z.+-]+$/;\n\n/**\n * Yarn classic writes `# yarn lockfile v1` within the first two lines; Berry lockfiles never contain it.\n * Only the head of the file is read so large monorepo lockfiles are never loaded into memory.\n */\nasync function isYarnClassicLockfile(lockfilePath: string): Promise<boolean> {\n const handle = await fsPromises.open(lockfilePath, 'r');\n try {\n const buffer = Buffer.alloc(512);\n const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);\n return /^# yarn lockfile v1\\r?$/m.test(buffer.toString('utf-8', 0, bytesRead));\n } finally {\n await handle.close();\n }\n}\n\nexport class Deps extends MastraBase {\n private packageManager: PackageManager;\n private rootDir: string;\n private lockFile: LockFileInfo | null;\n\n constructor(rootDir = process.cwd()) {\n super({ component: 'DEPLOYER', name: 'DEPS' });\n\n this.rootDir = rootDir;\n this.lockFile = this.findLockFile(rootDir);\n this.packageManager = this.lockFile?.packageManager ?? 'npm';\n }\n\n private findLockFile(dir: string): LockFileInfo | null {\n const lockFiles: Array<{ filename: string; packageManager: PackageManager }> = [\n { filename: 'pnpm-lock.yaml', packageManager: 'pnpm' },\n { filename: 'package-lock.json', packageManager: 'npm' },\n { filename: 'yarn.lock', packageManager: 'yarn' },\n { filename: 'bun.lock', packageManager: 'bun' },\n ];\n for (const lockFile of lockFiles) {\n const lockFilePath = path.join(dir, lockFile.filename);\n if (fs.existsSync(lockFilePath)) {\n return { ...lockFile, path: lockFilePath };\n }\n }\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findLockFile(parentDir);\n }\n return null;\n }\n\n public getWorkspaceDependencyPath({ pkgName, version }: { pkgName: string; version: string }) {\n return `file:./workspace-module/${pkgName}-${version}.tgz`;\n }\n\n public async pack({\n dir,\n destination,\n sanitizedName,\n version,\n }: {\n dir: string;\n destination: string;\n sanitizedName: string;\n version: string;\n }) {\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: dir,\n });\n\n let packCmd = 'pack';\n let destinationFlag = `--pack-destination ${destination}`;\n if (this.packageManager === 'yarn') {\n if (this.lockFile && (await isYarnClassicLockfile(this.lockFile.path))) {\n if (!SAFE_PACKAGE_VERSION.test(version)) {\n throw new MastraError({\n id: 'DEPLOYER_INVALID_WORKSPACE_PACKAGE_VERSION',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { dir, version: String(version) },\n text: `Invalid version ${JSON.stringify(version)} in workspace package at ${dir}`,\n });\n }\n // Yarn classic has no --out/%v; --filename takes the full output path.\n destinationFlag = `--filename ${destination}/${sanitizedName}-${version}.tgz`;\n } else {\n // %s includes an '@' at the start of packages names with an '@'\n // so we need to use our sanitizedName instead.\n destinationFlag = `--out ${destination}/${sanitizedName}-%v.tgz`;\n }\n }\n if (this.packageManager === 'bun') {\n // bun uses `pm pack` instead of `pack`\n packCmd = 'pm pack';\n // bun uses --destination instead of --pack-destination\n destinationFlag = `--destination ${destination}`;\n }\n\n return cpLogger({\n cmd: `${this.packageManager} ${packCmd} ${destinationFlag}`,\n args: [],\n env: {\n PATH: process.env.PATH!,\n },\n });\n }\n\n private findPnpmWorkspaceFile(dir: string): string | null {\n const workspaceYamlPath = path.join(dir, 'pnpm-workspace.yaml');\n if (fs.existsSync(workspaceYamlPath)) {\n return workspaceYamlPath;\n }\n\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findPnpmWorkspaceFile(parentDir);\n }\n\n return null;\n }\n\n private async writePnpmConfig(dir: string, options: InstallOptions = {}) {\n const sourceWorkspaceYamlPath = this.findPnpmWorkspaceFile(this.rootDir);\n const sourceWorkspaceYaml = sourceWorkspaceYamlPath\n ? await fsPromises.readFile(sourceWorkspaceYamlPath, 'utf-8')\n : '';\n\n const patchedDependencies = sourceWorkspaceYamlPath\n ? await this.copyPnpmPatches(sourceWorkspaceYaml, path.dirname(sourceWorkspaceYamlPath), dir)\n : undefined;\n\n await fsPromises.writeFile(\n path.join(dir, 'pnpm-workspace.yaml'),\n copyPnpmWorkspaceSettings(sourceWorkspaceYaml, { ...options, patchedDependencies }),\n 'utf-8',\n );\n }\n\n /**\n * Resolves a declared patch path against the source workspace and verifies that, once symlinks\n * are followed, it still resolves inside the workspace. Returns the real path to copy from, or\n * `undefined` when the patch escapes the workspace or its file cannot be resolved.\n */\n private async resolvePatchSource(\n resolvedWorkspaceRoot: string,\n declaredPath: string,\n { key, label }: { key: string; label: string },\n ): Promise<string | undefined> {\n const sourcePath = path.resolve(resolvedWorkspaceRoot, declaredPath);\n if (!sourcePath.startsWith(`${resolvedWorkspaceRoot}${path.sep}`)) {\n this.logger.warn(`Skipping ${label} patch for \"${key}\": patch file is outside the workspace at ${sourcePath}`);\n return undefined;\n }\n\n // A patch path can stay lexically under the workspace while traversing a symlink whose target\n // lives outside it. copyFile follows symlinks, so compare the resolved real paths before copying.\n let realWorkspaceRoot: string;\n let realSourcePath: string;\n try {\n [realWorkspaceRoot, realSourcePath] = await Promise.all([\n fsPromises.realpath(resolvedWorkspaceRoot),\n fsPromises.realpath(sourcePath),\n ]);\n } catch {\n this.logger.warn(`Skipping ${label} patch for \"${key}\": patch file not found at ${sourcePath}`);\n return undefined;\n }\n\n if (!realSourcePath.startsWith(`${realWorkspaceRoot}${path.sep}`)) {\n this.logger.warn(\n `Skipping ${label} patch for \"${key}\": patch file is outside the workspace at ${realSourcePath}`,\n );\n return undefined;\n }\n\n return realSourcePath;\n }\n\n /**\n * Copies the patch files declared by the source workspace into the output directory and returns\n * the patch map rewritten to output-relative paths, so the patches survive the output install.\n */\n private async copyPnpmPatches(\n sourceWorkspaceYaml: string,\n sourceWorkspaceRoot: string,\n dir: string,\n ): Promise<Record<string, string>> {\n const declared = parsePnpmPatchedDependencies(sourceWorkspaceYaml);\n const rewritten: Record<string, string> = {};\n const usedFileNames = new Set<string>();\n const resolvedWorkspaceRoot = path.resolve(sourceWorkspaceRoot);\n\n for (const [key, declaredPath] of Object.entries(declared)) {\n const sourcePath = await this.resolvePatchSource(resolvedWorkspaceRoot, declaredPath, {\n key,\n label: 'pnpm',\n });\n if (!sourcePath) continue;\n\n let fileName = path.basename(sourcePath);\n if (usedFileNames.has(fileName)) {\n fileName = `${key.replace(/[^a-zA-Z0-9._-]/g, '_')}-${fileName}`;\n }\n usedFileNames.add(fileName);\n\n await fsPromises.mkdir(path.join(dir, PNPM_PATCHES_DIR), { recursive: true });\n await fsPromises.copyFile(sourcePath, path.join(dir, PNPM_PATCHES_DIR, fileName));\n rewritten[key] = `${PNPM_PATCHES_DIR}/${fileName}`;\n }\n\n return rewritten;\n }\n\n /**\n * Writes the `.yarnrc.yml` for the bundled output, recording the supported architectures so the\n * output install only resolves optional native binaries that match the deployment target.\n */\n private async writeYarnConfig(dir: string, options: ArchitectureOptions) {\n const yarnrcPath = path.join(dir, '.yarnrc.yml');\n const config = {\n supportedArchitectures: {\n cpu: options.cpu || [],\n os: options.os || [],\n libc: options.libc || [],\n },\n };\n\n await fsPromises.writeFile(\n yarnrcPath,\n `supportedArchitectures:\\n${Object.entries(config.supportedArchitectures)\n .map(([key, value]) => ` ${key}: ${JSON.stringify(value)}`)\n .join('\\n')}`,\n );\n }\n\n /**\n * Copies the source workspace's `.yarn/patches/` directory (Yarn Berry) into the output\n * directory so patches survive the output install. Yarn auto-discovers patches from this\n * directory and applies them per the lockfile references.\n */\n private async copyYarnPatches(dir: string): Promise<void> {\n const sourcePatchesDir = path.join(this.rootDir, '.yarn', 'patches');\n if (!fs.existsSync(sourcePatchesDir)) return;\n\n const outputPatchesDir = path.join(dir, '.yarn', 'patches');\n await fsPromises.cp(sourcePatchesDir, outputPatchesDir, { recursive: true, errorOnExist: false });\n }\n\n /**\n * Copies the patch files referenced by the source workspace's `patchedDependencies` in\n * package.json into the output directory and returns the map rewritten to output-relative\n * paths, so bun patches survive the output install.\n */\n private async copyBunPatches(\n declared: Record<string, string>,\n sourceRoot: string,\n dir: string,\n ): Promise<Record<string, string>> {\n const rewritten: Record<string, string> = {};\n const usedFileNames = new Set<string>();\n const resolvedRoot = path.resolve(sourceRoot);\n\n for (const [key, declaredPath] of Object.entries(declared)) {\n const sourcePath = await this.resolvePatchSource(resolvedRoot, declaredPath, {\n key,\n label: 'bun',\n });\n if (!sourcePath) continue;\n\n let fileName = path.basename(sourcePath);\n if (usedFileNames.has(fileName)) {\n fileName = `${key.replace(/[^a-zA-Z0-9._-]/g, '_')}-${fileName}`;\n }\n usedFileNames.add(fileName);\n\n await fsPromises.mkdir(path.join(dir, BUN_PATCHES_DIR), { recursive: true });\n await fsPromises.copyFile(sourcePath, path.join(dir, BUN_PATCHES_DIR, fileName));\n rewritten[key] = `${BUN_PATCHES_DIR}/${fileName}`;\n }\n\n return rewritten;\n }\n\n /**\n * Reads `patchedDependencies` from the source package.json, copies the referenced patch\n * files into the output directory, and writes the output-relative patch map into the\n * output's package.json so `bun install` preserves patches in the bundled output.\n */\n private async copyBunPatchesToOutput(dir: string): Promise<void> {\n const sourcePackageJsonPath = path.join(this.rootDir, 'package.json');\n if (!fs.existsSync(sourcePackageJsonPath)) return;\n\n const sourcePkg = await readJSON(sourcePackageJsonPath);\n const patchedDeps = sourcePkg.patchedDependencies as Record<string, string> | undefined;\n if (!patchedDeps || Object.keys(patchedDeps).length === 0) return;\n\n const rewritten = await this.copyBunPatches(patchedDeps, this.rootDir, dir);\n if (Object.keys(rewritten).length === 0) return;\n\n const outputPackageJsonPath = path.join(dir, 'package.json');\n let outputPkg: Record<string, unknown>;\n try {\n outputPkg = (await readJSON(outputPackageJsonPath)) as Record<string, unknown>;\n } catch {\n outputPkg = {};\n }\n outputPkg.patchedDependencies = rewritten;\n await writeJSON(outputPackageJsonPath, outputPkg, { spaces: 2 });\n }\n\n private getNpmArgs(options: ArchitectureOptions): string[] {\n const args: string[] = [];\n if (options.cpu) args.push(`--cpu=${options.cpu.join(',')}`);\n if (options.os) args.push(`--os=${options.os.join(',')}`);\n if (options.libc) args.push(`--libc=${options.libc.join(',')}`);\n return args;\n }\n\n /**\n * Depending on whether we want to install or add a package, this function returns the appropriate commands.\n * All package managers support both commands (e.g. npm install has an alias on \"add\")\n */\n private getPackageManagerCommand(\n pm: PackageManager,\n type: 'install' | 'add',\n { yarnClassic = false }: { yarnClassic?: boolean } = {},\n ): string {\n const cmd = type === 'install' ? 'install' : 'add';\n\n switch (pm) {\n case 'npm':\n return `${cmd} --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false`;\n case 'yarn':\n return type === 'install' && !yarnClassic ? `${cmd} --no-immutable` : cmd;\n case 'pnpm':\n return type === 'install' ? `${cmd} --no-frozen-lockfile --loglevel=error` : `${cmd} --loglevel=error`;\n default:\n return cmd;\n }\n }\n\n public async install({\n dir = this.rootDir,\n architecture,\n pnpmOverrides,\n pnpmNodeLinker,\n }: {\n dir?: string;\n architecture?: ArchitectureOptions;\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n } = {}) {\n const pm = this.packageManager;\n let yarnClassic = false;\n if (this.lockFile) {\n const destination = path.join(dir, this.lockFile.filename);\n if (path.resolve(this.lockFile.path) !== path.resolve(destination)) {\n const packedBunWorkspaces =\n pm === 'bun' &&\n fs.existsSync(path.join(dir, 'package.json')) &&\n Object.values(\n ((await readJSON(path.join(dir, 'package.json'))) as { resolutions?: Record<string, string> })\n .resolutions ?? {},\n ).some(spec => spec.startsWith('file:./workspace-module/'));\n\n if (packedBunWorkspaces) {\n // Bun cannot reuse the source workspace lockfile with packed tarballs; removing its workspace entries\n // makes Bun ignore it and regenerate the lockfile anyway. Start with a clean lockfile instead.\n await fsPromises.rm(destination, { force: true });\n } else {\n await fsPromises.copyFile(this.lockFile.path, destination);\n }\n }\n\n if (pm === 'yarn') {\n yarnClassic = await isYarnClassicLockfile(destination);\n }\n }\n\n const installCommand = this.getPackageManagerCommand(pm, 'install', { yarnClassic });\n let args: string[] = [];\n\n switch (pm) {\n case 'pnpm':\n await this.writePnpmConfig(dir, { ...architecture, pnpmOverrides, pnpmNodeLinker });\n break;\n case 'yarn':\n // similar to --ignore-workspace but for yarn\n await ensureFile(path.join(dir, 'yarn.lock'));\n if (architecture) {\n await this.writeYarnConfig(dir, architecture);\n }\n await this.copyYarnPatches(dir);\n break;\n case 'bun':\n await this.copyBunPatchesToOutput(dir);\n break;\n case 'npm':\n if (architecture) {\n args = this.getNpmArgs(architecture);\n }\n break;\n default:\n // Do nothing\n }\n\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: dir,\n });\n\n try {\n return await cpLogger({\n cmd: `${pm} ${installCommand}`,\n args,\n env: process.env as Record<string, string>,\n });\n } catch (error) {\n if (pm !== 'pnpm') throw error;\n\n const processOutput =\n error && typeof error === 'object'\n ? `${'stdout' in error ? String(error.stdout) : ''}\\n${'stderr' in error ? String(error.stderr) : ''}`\n : '';\n const ignoredPackages = getPnpmIgnoredBuildPackages(processOutput);\n if (ignoredPackages.length === 0) throw error;\n\n throw new MastraError(\n {\n id: 'DEPLOYER_PNPM_IGNORED_BUILDS',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n details: { packageNames: ignoredPackages.join(', ') },\n text: `pnpm blocked build scripts for: ${ignoredPackages.join(', ')}. Add these packages to allowBuilds in pnpm-workspace.yaml and retry the build.`,\n },\n error,\n );\n }\n }\n\n public async installPackages(packages: string[]) {\n const pm = this.packageManager;\n const installCommand = this.getPackageManagerCommand(pm, 'add');\n\n const env: Record<string, string> = {\n PATH: process.env.PATH!,\n };\n\n if (process.env.npm_config_registry) {\n env.npm_config_registry = process.env.npm_config_registry;\n }\n\n const cpLogger = createChildProcessLogger({\n logger: this.logger,\n root: '',\n });\n\n return cpLogger({\n cmd: `${pm} ${installCommand}`,\n args: packages,\n env,\n });\n }\n\n public async checkDependencies(dependencies: string[]): Promise<string> {\n try {\n const packageJsonPath = path.join(this.rootDir, 'package.json');\n\n try {\n await fsPromises.access(packageJsonPath);\n } catch {\n return 'No package.json file found in the current directory';\n }\n\n const packageJson = await readJSON(packageJsonPath);\n for (const dependency of dependencies) {\n if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {\n return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;\n }\n }\n\n return 'ok';\n } catch (err) {\n console.error(err);\n return 'Could not check dependencies';\n }\n }\n\n public async getProjectName() {\n try {\n const packageJsonPath = path.join(this.rootDir, 'package.json');\n const pkg = await readJSON(packageJsonPath);\n return pkg.name;\n } catch (err) {\n throw err;\n }\n }\n\n public async getPackageVersion() {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const pkgJsonPath = path.join(__dirname, '..', '..', 'package.json');\n\n const content = (await readJSON(pkgJsonPath)) as PackageJson;\n return content.version;\n }\n\n public async addScriptsToPackageJson(scripts: Record<string, string>) {\n const packageJson = await readJSON('package.json');\n packageJson.scripts = {\n ...packageJson.scripts,\n ...scripts,\n };\n await writeJSON('package.json', packageJson, { spaces: 2 });\n }\n}\n\nexport class DepsService extends Deps {}\n","import * as fs from 'node:fs';\n\nexport abstract class EnvService {\n abstract getEnvValue(key: string): Promise<string | null>;\n abstract setEnvValue(key: string, value: string): Promise<void>;\n}\n\nexport class FileEnvService extends EnvService {\n private filePath: string;\n\n constructor(filePath: string) {\n super();\n this.filePath = filePath;\n }\n\n private readFile(filePath: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(filePath, 'utf8', (err: NodeJS.ErrnoException | null, data: string) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n private writeFile({ filePath, data }: { filePath: string; data: string }): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.writeFile(filePath, data, 'utf8', (err: NodeJS.ErrnoException | null) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n private async updateEnvData({\n key,\n value,\n filePath = this.filePath,\n data,\n }: {\n key: string;\n value: string;\n filePath?: string;\n data: string;\n }): Promise<string> {\n const regex = new RegExp(`^${key}=.*$`, 'm');\n if (data.match(regex)) {\n // Use a replacement function so `$` sequences in the value (e.g. `$&`,\n // `$$`) are written literally instead of being interpreted as\n // String.prototype.replace special patterns.\n data = data.replace(regex, () => `${key}=${value}`);\n } else {\n data += `\\n${key}=${value}`;\n }\n await this.writeFile({ filePath, data });\n console.info(`${key} set to ${value} in ENV file.`);\n return data;\n }\n\n async getEnvValue(key: string): Promise<string | null> {\n try {\n const data = await this.readFile(this.filePath);\n const regex = new RegExp(`^${key}=(.*)$`, 'm');\n const match = data.match(regex);\n return match?.[1] || null;\n } catch (err) {\n console.error(`Error reading ENV value: ${err}`);\n return null;\n }\n }\n\n async setEnvValue(key: string, value: string): Promise<void> {\n try {\n const data = await this.readFile(this.filePath);\n await this.updateEnvData({ key, value, data });\n } catch (err) {\n console.error(`Error writing ENV value: ${err}`);\n }\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport fsExtra from 'fs-extra/esm';\n\nimport { FileEnvService } from './env.js';\n\nexport class FileService {\n /**\n *\n * @param inputFile the file in the starter files directory to copy\n * @param outputFilePath the destination path\n * @param replaceIfExists flag to replace if it exists\n * @returns\n */\n public async copyStarterFile(inputFile: string, outputFilePath: string, replaceIfExists?: boolean) {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const filePath = path.resolve(__dirname, '..', 'starter-files', inputFile);\n const fileString = fs.readFileSync(filePath, 'utf8');\n\n if (fs.existsSync(outputFilePath) && !replaceIfExists) {\n console.info(`${outputFilePath} already exists`);\n return false;\n }\n\n await fsExtra.outputFile(outputFilePath, fileString);\n\n return true;\n }\n\n public async setupEnvFile({ dbUrl }: { dbUrl: string }) {\n const envPath = path.join(process.cwd(), '.env.development');\n\n await fsExtra.ensureFile(envPath);\n\n const fileEnvService = new FileEnvService(envPath);\n await fileEnvService.setEnvValue('DB_URL', dbUrl);\n }\n\n public getFirstExistingFile(files: string[]): string {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n throw new Error('Missing required file, checked the following paths: ' + files.join(', '));\n }\n\n /**\n * Returns every existing file from the provided array in the same order.\n * Callers supply files from the lowest to highest precedence so later dotenv\n * files override earlier values when the bundler loads them.\n */\n public getExistingFiles(files: string[]): string[] {\n return files.filter(file => fs.existsSync(file));\n }\n\n /**\n * Returns the first existing file from the provided array, or undefined if none exist\n * @param files array of file paths to check\n * @returns the first existing file path or undefined\n */\n public getFirstExistingFileOrUndefined(files: string[]): string | undefined {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n return undefined;\n }\n\n public replaceValuesInFile({\n filePath,\n replacements,\n }: {\n filePath: string;\n replacements: { search: string; replace: string }[];\n }) {\n let fileContent = fs.readFileSync(filePath, 'utf8');\n replacements.forEach(({ search, replace }) => {\n fileContent = fileContent.replaceAll(search, replace);\n });\n\n fs.writeFileSync(filePath, fileContent);\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/deployer",
|
|
3
|
-
"version": "1.79.0-alpha.
|
|
3
|
+
"version": "1.79.0-alpha.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
"typescript-paths": "^1.5.2",
|
|
112
112
|
"ws": "^8.21.3",
|
|
113
113
|
"yaml": "^2.9.0",
|
|
114
|
-
"@mastra/server": "1.79.0-alpha.
|
|
114
|
+
"@mastra/server": "1.79.0-alpha.3"
|
|
115
115
|
},
|
|
116
116
|
"devDependencies": {
|
|
117
117
|
"@hono/node-server": "^2.0.0",
|
|
@@ -134,11 +134,11 @@
|
|
|
134
134
|
"@internal/core": "0.1.3-alpha.1",
|
|
135
135
|
"@internal/types-builder": "0.0.119",
|
|
136
136
|
"@mastra/agent-browser": "0.5.4-alpha.0",
|
|
137
|
-
"@mastra/
|
|
138
|
-
"@
|
|
139
|
-
"@mastra/
|
|
137
|
+
"@mastra/core": "1.79.0-alpha.3",
|
|
138
|
+
"@internal/lint": "0.0.144",
|
|
139
|
+
"@mastra/hono": "1.7.21-alpha.3",
|
|
140
140
|
"@mastra/mcp": "^2.4.2-alpha.0",
|
|
141
|
-
"@
|
|
141
|
+
"@mastra/server": "1.79.0-alpha.3"
|
|
142
142
|
},
|
|
143
143
|
"peerDependencies": {
|
|
144
144
|
"@mastra/core": ">=1.58.0-0 <2.0.0-0"
|