@mastra/deployer 1.80.0-alpha.0 → 1.80.0-alpha.2
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/{analyze-DzJoNBCX.js → analyze-DhTwbIGn.js} +3 -3
- package/dist/{analyze-DzJoNBCX.js.map → analyze-DhTwbIGn.js.map} +1 -1
- package/dist/{analyze-B4cKPVju.cjs → analyze-jJAydlIl.cjs} +3 -3
- package/dist/{analyze-B4cKPVju.cjs.map → analyze-jJAydlIl.cjs.map} +1 -1
- package/dist/build/analyze.cjs +1 -1
- package/dist/build/analyze.js +1 -1
- package/dist/build/bundler.cjs +1 -1
- package/dist/build/bundler.js +1 -1
- package/dist/build/index.cjs +5 -5
- package/dist/build/index.js +5 -5
- package/dist/{build-DZuiBxfv.js → build-Ch38BMkf.js} +5 -5
- package/dist/{build-DZuiBxfv.js.map → build-Ch38BMkf.js.map} +1 -1
- package/dist/{build-D0odKdrs.cjs → build-ClcuWPJW.cjs} +5 -5
- package/dist/{build-D0odKdrs.cjs.map → build-ClcuWPJW.cjs.map} +1 -1
- package/dist/bundler/index.cjs +4 -4
- package/dist/bundler/index.js +4 -4
- package/dist/{bundler-Dpd5nkcu.cjs → bundler-3xwX-u2Y.cjs} +2 -2
- package/dist/bundler-3xwX-u2Y.cjs.map +1 -0
- package/dist/{bundler-BUqyRuGu.js → bundler-Xbu98oe6.js} +2 -2
- package/dist/bundler-Xbu98oe6.js.map +1 -0
- package/dist/{bundlerOptions-DHcbcD1a.cjs → bundlerOptions-DVHKdYsv.cjs} +2 -2
- package/dist/{bundlerOptions-DHcbcD1a.cjs.map → bundlerOptions-DVHKdYsv.cjs.map} +1 -1
- package/dist/{bundlerOptions-DMxva0Sp.js → bundlerOptions-lxkzE0Jg.js} +2 -2
- package/dist/{bundlerOptions-DMxva0Sp.js.map → bundlerOptions-lxkzE0Jg.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.js +3 -3
- 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-CzhmXlRZ.cjs → services-CCa8HFrE.cjs} +3 -7
- package/dist/{services-CzhmXlRZ.cjs.map → services-CCa8HFrE.cjs.map} +1 -1
- package/dist/{services-Imf20x6f.js → services-DahfG_xq.js} +3 -7
- package/dist/{services-Imf20x6f.js.map → services-DahfG_xq.js.map} +1 -1
- package/package.json +12 -12
- package/dist/bundler-BUqyRuGu.js.map +0 -1
- package/dist/bundler-Dpd5nkcu.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundlerOptions-DMxva0Sp.js","names":["t","t"],"sources":["../src/build/babel/remove-all-options-except.ts","../src/build/plugins/remove-all-except.ts","../src/build/babel/remove-non-referenced-nodes.ts","../src/build/plugins/remove-unused-references.ts","../src/build/shared/extract-mastra-option.ts","../src/build/bundlerOptions.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { NodePath, PluginObject, types } from '@babel/core';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config as MastraConfig } from '@mastra/core/mastra';\n\nexport function removeAllOptionsFromMastraExcept(\n result: { hasCustomConfig: boolean },\n option: keyof MastraConfig,\n logger?: IMastraLogger,\n): PluginObject {\n return {\n name: 'remove-all-except-' + option + '-config',\n visitor: {\n ExportNamedDeclaration: {\n // remove all exports, but keep the underlying declarations — the\n // extracted option may reference them (e.g. `export const deployer = ...`\n // used as `new Mastra({ deployer })`). Unreferenced declarations are\n // dropped by the cleanup pass afterwards.\n exit(path) {\n if (path.node.declaration) {\n const [declaration] = path.replaceWith(path.node.declaration);\n // Already traversed — don't requeue, or the NewExpression visitor\n // would append the extracted export a second time.\n declaration.skip();\n } else {\n path.remove();\n }\n },\n },\n\n NewExpression(path, state) {\n // is a variable declaration\n const varDeclaratorPath = path.findParent(path => t.isVariableDeclarator(path.node));\n if (!varDeclaratorPath) {\n return;\n }\n\n const parentNode = path.parentPath.node;\n // check if it's a const of mastra\n if (!t.isVariableDeclarator(parentNode) || !t.isIdentifier(parentNode.id) || parentNode.id.name !== 'mastra') {\n return;\n }\n\n let mastraArgs = t.objectExpression([]);\n if (t.isObjectExpression(path.node.arguments[0])) {\n mastraArgs = path.node.arguments[0];\n }\n\n // Find the config property, skipping SpreadElement nodes\n let configProperty = mastraArgs.properties.find(\n prop => t.isObjectProperty(prop) && t.isIdentifier(prop.key) && prop.key.name === option,\n );\n let configValue: types.Expression = t.objectExpression([]);\n\n const programPath = path.scope.getProgramParent().path as NodePath<types.Program> | undefined;\n if (!programPath) {\n return;\n }\n\n if (configProperty && t.isObjectProperty(configProperty) && t.isExpression(configProperty.value)) {\n result.hasCustomConfig = true;\n configValue = configProperty.value;\n\n if (t.isIdentifier(configProperty.value) && configProperty.value.name === option) {\n const configBinding = state.file.scope.getBinding(option)!;\n\n if (configBinding && t.isVariableDeclarator(configBinding.path.node)) {\n const id = path.scope.generateUidIdentifier(option);\n\n configBinding.path.replaceWith(t.variableDeclarator(id, configBinding.path.node.init!));\n configValue = id;\n }\n }\n }\n\n // add the deployer export\n const exportDeclaration = t.exportNamedDeclaration(\n t.variableDeclaration('const', [t.variableDeclarator(t.identifier(option), configValue)]),\n [],\n );\n\n programPath.node.body.push(exportDeclaration);\n },\n\n Program: {\n exit(path) {\n // Add a fallback export if no mastra configuration was found\n const hasExport = path.node.body.some(\n node => node.type === 'ExportNamedDeclaration' || node.type === 'ExportDefaultDeclaration',\n );\n\n if (!hasExport) {\n if (logger) {\n logger.warn('Mastra config could not be extracted', {\n option,\n details:\n 'Please make sure your entry file looks like this:\\nexport const mastra = new Mastra({\\n <option>: <value>\\n})',\n });\n }\n\n const fallbackExportDeclaration = t.exportNamedDeclaration(\n t.variableDeclaration('const', [t.variableDeclarator(t.identifier(option), t.objectExpression([]))]),\n [],\n );\n path.node.body.push(fallbackExportDeclaration);\n }\n },\n },\n },\n } satisfies PluginObject;\n}\n","import { transformAsync } from '@babel/core';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config as MastraConfig } from '@mastra/core/mastra';\nimport type { Plugin, SourceMapInput } from 'rollup';\nimport { removeAllOptionsFromMastraExcept } from '../babel/remove-all-options-except';\n\nexport function removeAllOptionsFromMastraExceptPlugin(\n mastraEntry: string,\n name: keyof MastraConfig,\n result: { hasCustomConfig: boolean },\n options?: { sourcemap?: boolean; logger?: IMastraLogger },\n): Plugin {\n return {\n name: `remove-${name}`,\n transform(code, id) {\n if (id !== mastraEntry) {\n return;\n }\n\n return transformAsync(code, {\n babelrc: false,\n configFile: false,\n filename: id,\n plugins: [() => removeAllOptionsFromMastraExcept(result, name, options?.logger)],\n sourceMaps: options?.sourcemap,\n }).then(result => ({\n code: result!.code!,\n map: result!.map! as SourceMapInput,\n }));\n },\n } satisfies Plugin;\n}\n","import { types as t } from '@babel/core';\nimport type { PluginObject } from '@babel/core';\n\nexport function removeNonReferencedNodes() {\n return {\n name: 'remove-non-referenced-nodes',\n visitor: {\n Program(path) {\n // Get the scope information\n const scope = path.scope;\n\n // Filter body to keep only referenced nodes\n const currentBody = path.get('body');\n const filteredBody = currentBody.filter(childPath => {\n if (childPath.isExportDeclaration()) {\n return true;\n }\n\n // For variable declarations, check if any declared variables are referenced\n if (childPath.isVariableDeclaration()) {\n return childPath.node.declarations.some(decl => {\n if (!t.isIdentifier(decl.id)) {\n return false;\n }\n\n const name = decl.id.name;\n const binding = scope.getBinding(name);\n // Keep if it has references or is exported\n return binding && (binding.referenced || binding.referencePaths.length > 0);\n });\n }\n\n // For function/class declarations, check if they're referenced\n if (childPath.isFunctionDeclaration() || childPath.isClassDeclaration()) {\n if (!t.isIdentifier(childPath.node.id)) {\n return false;\n }\n\n const name = childPath.node.id.name;\n const binding = scope.getBinding(name);\n return binding && (binding.referenced || binding.referencePaths.length > 0);\n }\n\n // For imports, check if any imported items are referenced\n if (childPath.isImportDeclaration()) {\n return childPath.node.specifiers.some(specifier => {\n const importedName = specifier.local.name;\n const binding = scope.getBinding(importedName);\n return binding && (binding.referenced || binding.referencePaths.length > 0);\n });\n }\n\n // Default to keeping other node types\n return false;\n });\n\n // Replace the program body with filtered nodes\n path.set(\n 'body',\n filteredBody.map(p => p.node),\n );\n },\n },\n } as PluginObject;\n}\n","import { transformAsync } from '@babel/core';\nimport { removeNonReferencedNodes } from '../babel/remove-non-referenced-nodes';\n\nexport async function recursiveRemoveNonReferencedNodes(code: string): Promise<{ code: string; map: any }> {\n const result = await transformAsync(code, {\n babelrc: false,\n configFile: false,\n plugins: [removeNonReferencedNodes],\n });\n\n // keep looping until the code is not changed\n if (result && result.code! !== code) {\n return recursiveRemoveNonReferencedNodes(result!.code!);\n }\n\n return {\n code: result!.code!,\n map: result!.map!,\n };\n}\n","import { realpathSync } from 'node:fs';\nimport { dirname, isAbsolute, sep } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config as MastraConfig } from '@mastra/core/mastra';\nimport { optimizeLodashImports } from '@optimize-lodash/rollup-plugin';\nimport commonjs from '@rollup/plugin-commonjs';\nimport json from '@rollup/plugin-json';\nimport nodeResolve from '@rollup/plugin-node-resolve';\nimport * as pkg from 'empathic/package';\nimport { rollup } from 'rollup';\nimport type { Plugin, RollupOutput } from 'rollup';\nimport { esbuild } from '../plugins/esbuild';\nimport { removeAllOptionsFromMastraExceptPlugin } from '../plugins/remove-all-except';\nimport { recursiveRemoveNonReferencedNodes } from '../plugins/remove-unused-references';\nimport { tsConfigPaths } from '../plugins/tsconfig-paths';\nimport { getNodeResolveOptions, isBareModuleSpecifier } from '../utils';\n\nconst TS_SOURCE = /\\.tsx?$/;\nconst NODE_MODULES = `${sep}node_modules${sep}`;\n\n/**\n * Packages outside node_modules, such as workspace packages, may ship raw TypeScript (e.g. `exports` pointing to\n * `src/index.ts`), which Node cannot load from the extracted config. Inline those so esbuild transpiles them. Bare\n * imports made from inlined sources stay external but are pinned to the file they resolve to from that source: the\n * extracted config lives in `.mastra/output` and can't see the package's own `node_modules` (e.g. pnpm isolated\n * installs). The app's own imports keep resolving by name.\n */\nfunction typescriptSourcesResolver(entryFile: string): Plugin {\n const appPackageJson = pkg.up({ cwd: dirname(entryFile) });\n const appDir = appPackageJson ? dirname(appPackageJson) : dirname(entryFile);\n // App files keep the entry's path, files resolved by node-resolve are real paths\n const appRoots = [appDir + sep, realpathSync(appDir) + sep];\n const isInlinedSource = (file: string) =>\n isAbsolute(file) && !file.includes(NODE_MODULES) && !appRoots.some(root => file.startsWith(root));\n\n const resolver = nodeResolve({\n ...getNodeResolveOptions('node'),\n extensions: ['.mjs', '.js', '.json', '.node', '.ts', '.tsx'],\n });\n const resolveHook = resolver.resolveId!;\n const resolve = typeof resolveHook === 'function' ? resolveHook : resolveHook.handler;\n\n return {\n ...resolver,\n name: 'typescript-sources-resolver',\n async resolveId(id, importer, options) {\n if (!importer || !isBareModuleSpecifier(id)) {\n return null;\n }\n\n const resolved = await resolve.call(this, id, importer, options);\n if (!resolved || typeof resolved !== 'object' || resolved.external) {\n return null;\n }\n\n if (TS_SOURCE.test(resolved.id) && !resolved.id.includes(NODE_MODULES)) {\n return resolved.id;\n }\n\n return isInlinedSource(importer) ? { id: pathToFileURL(resolved.id).href, external: true } : null;\n },\n };\n}\n\nexport function extractMastraOptionBundler(\n name: keyof MastraConfig,\n entryFile: string,\n result: {\n hasCustomConfig: boolean;\n },\n logger?: IMastraLogger,\n) {\n return rollup({\n logLevel: 'silent',\n input: {\n [`${name}-config`]: entryFile,\n },\n treeshake: 'smallest',\n plugins: [\n tsConfigPaths(),\n typescriptSourcesResolver(entryFile),\n // transpile typescript to something we understand\n esbuild(),\n optimizeLodashImports({\n include: '**/*.{js,ts,mjs,cjs}',\n }),\n commonjs({\n extensions: ['.js', '.ts'],\n strictRequires: 'strict',\n transformMixedEsModules: true,\n ignoreTryCatch: false,\n }),\n json(),\n removeAllOptionsFromMastraExceptPlugin(entryFile, name, result, { logger }),\n // let esbuild remove all unused imports\n esbuild(),\n {\n name: 'cleanup',\n transform(code, id) {\n if (id !== entryFile) {\n return;\n }\n\n return recursiveRemoveNonReferencedNodes(code);\n },\n },\n // let esbuild remove it once more\n esbuild(),\n ],\n });\n}\n\nexport async function extractMastraOption<T extends keyof MastraConfig>(\n name: T,\n entryFile: string,\n outputDir: string,\n logger?: IMastraLogger,\n): Promise<{\n bundleOutput: RollupOutput;\n getConfig: () => Promise<MastraConfig[T]>;\n} | null> {\n const result = {\n hasCustomConfig: false,\n };\n\n const bundler = await extractMastraOptionBundler(name, entryFile, result, logger);\n\n const output = await bundler.write({\n dir: outputDir,\n format: 'es',\n entryFileNames: '[name].mjs',\n });\n\n if (result.hasCustomConfig) {\n const configPath = `${outputDir}/${name}-config.mjs`;\n\n return {\n bundleOutput: output,\n getConfig: () => import(pathToFileURL(configPath).href).then(m => m[name] as MastraConfig[T]),\n };\n }\n\n return null;\n}\n","import type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config } from '@mastra/core/mastra';\nimport { extractMastraOption, extractMastraOptionBundler } from './shared/extract-mastra-option';\n\nexport function getBundlerOptionsBundler(\n entryFile: string,\n result: {\n hasCustomConfig: false;\n },\n) {\n return extractMastraOptionBundler('bundler', entryFile, result);\n}\n\nexport async function getBundlerOptions(\n entryFile: string,\n outputDir: string,\n logger?: IMastraLogger,\n): Promise<Config['bundler'] | null> {\n const result = await extractMastraOption('bundler', entryFile, outputDir, logger);\n\n if (!result) {\n return null;\n }\n\n return result.getConfig();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundlerOptions-lxkzE0Jg.js","names":["t","t"],"sources":["../src/build/babel/remove-all-options-except.ts","../src/build/plugins/remove-all-except.ts","../src/build/babel/remove-non-referenced-nodes.ts","../src/build/plugins/remove-unused-references.ts","../src/build/shared/extract-mastra-option.ts","../src/build/bundlerOptions.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport type { NodePath, PluginObject, types } from '@babel/core';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config as MastraConfig } from '@mastra/core/mastra';\n\nexport function removeAllOptionsFromMastraExcept(\n result: { hasCustomConfig: boolean },\n option: keyof MastraConfig,\n logger?: IMastraLogger,\n): PluginObject {\n return {\n name: 'remove-all-except-' + option + '-config',\n visitor: {\n ExportNamedDeclaration: {\n // remove all exports, but keep the underlying declarations — the\n // extracted option may reference them (e.g. `export const deployer = ...`\n // used as `new Mastra({ deployer })`). Unreferenced declarations are\n // dropped by the cleanup pass afterwards.\n exit(path) {\n if (path.node.declaration) {\n const [declaration] = path.replaceWith(path.node.declaration);\n // Already traversed — don't requeue, or the NewExpression visitor\n // would append the extracted export a second time.\n declaration.skip();\n } else {\n path.remove();\n }\n },\n },\n\n NewExpression(path, state) {\n // is a variable declaration\n const varDeclaratorPath = path.findParent(path => t.isVariableDeclarator(path.node));\n if (!varDeclaratorPath) {\n return;\n }\n\n const parentNode = path.parentPath.node;\n // check if it's a const of mastra\n if (!t.isVariableDeclarator(parentNode) || !t.isIdentifier(parentNode.id) || parentNode.id.name !== 'mastra') {\n return;\n }\n\n let mastraArgs = t.objectExpression([]);\n if (t.isObjectExpression(path.node.arguments[0])) {\n mastraArgs = path.node.arguments[0];\n }\n\n // Find the config property, skipping SpreadElement nodes\n let configProperty = mastraArgs.properties.find(\n prop => t.isObjectProperty(prop) && t.isIdentifier(prop.key) && prop.key.name === option,\n );\n let configValue: types.Expression = t.objectExpression([]);\n\n const programPath = path.scope.getProgramParent().path as NodePath<types.Program> | undefined;\n if (!programPath) {\n return;\n }\n\n if (configProperty && t.isObjectProperty(configProperty) && t.isExpression(configProperty.value)) {\n result.hasCustomConfig = true;\n configValue = configProperty.value;\n\n if (t.isIdentifier(configProperty.value) && configProperty.value.name === option) {\n const configBinding = state.file.scope.getBinding(option)!;\n\n if (configBinding && t.isVariableDeclarator(configBinding.path.node)) {\n const id = path.scope.generateUidIdentifier(option);\n\n configBinding.path.replaceWith(t.variableDeclarator(id, configBinding.path.node.init!));\n configValue = id;\n }\n }\n }\n\n // add the deployer export\n const exportDeclaration = t.exportNamedDeclaration(\n t.variableDeclaration('const', [t.variableDeclarator(t.identifier(option), configValue)]),\n [],\n );\n\n programPath.node.body.push(exportDeclaration);\n },\n\n Program: {\n exit(path) {\n // Add a fallback export if no mastra configuration was found\n const hasExport = path.node.body.some(\n node => node.type === 'ExportNamedDeclaration' || node.type === 'ExportDefaultDeclaration',\n );\n\n if (!hasExport) {\n if (logger) {\n logger.warn('Mastra config could not be extracted', {\n option,\n details:\n 'Please make sure your entry file looks like this:\\nexport const mastra = new Mastra({\\n <option>: <value>\\n})',\n });\n }\n\n const fallbackExportDeclaration = t.exportNamedDeclaration(\n t.variableDeclaration('const', [t.variableDeclarator(t.identifier(option), t.objectExpression([]))]),\n [],\n );\n path.node.body.push(fallbackExportDeclaration);\n }\n },\n },\n },\n } satisfies PluginObject;\n}\n","import { transformAsync } from '@babel/core';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config as MastraConfig } from '@mastra/core/mastra';\nimport type { Plugin, SourceMapInput } from 'rollup';\nimport { removeAllOptionsFromMastraExcept } from '../babel/remove-all-options-except';\n\nexport function removeAllOptionsFromMastraExceptPlugin(\n mastraEntry: string,\n name: keyof MastraConfig,\n result: { hasCustomConfig: boolean },\n options?: { sourcemap?: boolean; logger?: IMastraLogger },\n): Plugin {\n return {\n name: `remove-${name}`,\n transform(code, id) {\n if (id !== mastraEntry) {\n return;\n }\n\n return transformAsync(code, {\n babelrc: false,\n configFile: false,\n filename: id,\n plugins: [() => removeAllOptionsFromMastraExcept(result, name, options?.logger)],\n sourceMaps: options?.sourcemap,\n }).then(result => ({\n code: result!.code!,\n map: result!.map! as SourceMapInput,\n }));\n },\n } satisfies Plugin;\n}\n","import { types as t } from '@babel/core';\nimport type { PluginObject } from '@babel/core';\n\nexport function removeNonReferencedNodes() {\n return {\n name: 'remove-non-referenced-nodes',\n visitor: {\n Program(path) {\n // Get the scope information\n const scope = path.scope;\n\n // Filter body to keep only referenced nodes\n const currentBody = path.get('body');\n const filteredBody = currentBody.filter(childPath => {\n if (childPath.isExportDeclaration()) {\n return true;\n }\n\n // For variable declarations, check if any declared variables are referenced\n if (childPath.isVariableDeclaration()) {\n return childPath.node.declarations.some(decl => {\n if (!t.isIdentifier(decl.id)) {\n return false;\n }\n\n const name = decl.id.name;\n const binding = scope.getBinding(name);\n // Keep if it has references or is exported\n return binding && (binding.referenced || binding.referencePaths.length > 0);\n });\n }\n\n // For function/class declarations, check if they're referenced\n if (childPath.isFunctionDeclaration() || childPath.isClassDeclaration()) {\n if (!t.isIdentifier(childPath.node.id)) {\n return false;\n }\n\n const name = childPath.node.id.name;\n const binding = scope.getBinding(name);\n return binding && (binding.referenced || binding.referencePaths.length > 0);\n }\n\n // For imports, check if any imported items are referenced\n if (childPath.isImportDeclaration()) {\n return childPath.node.specifiers.some(specifier => {\n const importedName = specifier.local.name;\n const binding = scope.getBinding(importedName);\n return binding && (binding.referenced || binding.referencePaths.length > 0);\n });\n }\n\n // Default to keeping other node types\n return false;\n });\n\n // Replace the program body with filtered nodes\n path.set(\n 'body',\n filteredBody.map(p => p.node),\n );\n },\n },\n } as PluginObject;\n}\n","import { transformAsync } from '@babel/core';\nimport { removeNonReferencedNodes } from '../babel/remove-non-referenced-nodes';\n\nexport async function recursiveRemoveNonReferencedNodes(code: string): Promise<{ code: string; map: any }> {\n const result = await transformAsync(code, {\n babelrc: false,\n configFile: false,\n plugins: [removeNonReferencedNodes],\n });\n\n // keep looping until the code is not changed\n if (result && result.code! !== code) {\n return recursiveRemoveNonReferencedNodes(result!.code!);\n }\n\n return {\n code: result!.code!,\n map: result!.map!,\n };\n}\n","import { realpathSync } from 'node:fs';\nimport { dirname, isAbsolute, sep } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config as MastraConfig } from '@mastra/core/mastra';\nimport { optimizeLodashImports } from '@optimize-lodash/rollup-plugin';\nimport commonjs from '@rollup/plugin-commonjs';\nimport json from '@rollup/plugin-json';\nimport nodeResolve from '@rollup/plugin-node-resolve';\nimport * as pkg from 'empathic/package';\nimport { rollup } from 'rollup';\nimport type { Plugin, RollupOutput } from 'rollup';\nimport { esbuild } from '../plugins/esbuild';\nimport { removeAllOptionsFromMastraExceptPlugin } from '../plugins/remove-all-except';\nimport { recursiveRemoveNonReferencedNodes } from '../plugins/remove-unused-references';\nimport { tsConfigPaths } from '../plugins/tsconfig-paths';\nimport { getNodeResolveOptions, isBareModuleSpecifier } from '../utils';\n\nconst TS_SOURCE = /\\.tsx?$/;\nconst NODE_MODULES = `${sep}node_modules${sep}`;\n\n/**\n * Packages outside node_modules, such as workspace packages, may ship raw TypeScript (e.g. `exports` pointing to\n * `src/index.ts`), which Node cannot load from the extracted config. Inline those so esbuild transpiles them. Bare\n * imports made from inlined sources stay external but are pinned to the file they resolve to from that source: the\n * extracted config lives in `.mastra/output` and can't see the package's own `node_modules` (e.g. pnpm isolated\n * installs). The app's own imports keep resolving by name.\n */\nfunction typescriptSourcesResolver(entryFile: string): Plugin {\n const appPackageJson = pkg.up({ cwd: dirname(entryFile) });\n const appDir = appPackageJson ? dirname(appPackageJson) : dirname(entryFile);\n // App files keep the entry's path, files resolved by node-resolve are real paths\n const appRoots = [appDir + sep, realpathSync(appDir) + sep];\n const isInlinedSource = (file: string) =>\n isAbsolute(file) && !file.includes(NODE_MODULES) && !appRoots.some(root => file.startsWith(root));\n\n const resolver = nodeResolve({\n ...getNodeResolveOptions('node'),\n extensions: ['.mjs', '.js', '.json', '.node', '.ts', '.tsx'],\n });\n const resolveHook = resolver.resolveId!;\n const resolve = typeof resolveHook === 'function' ? resolveHook : resolveHook.handler;\n\n return {\n ...resolver,\n name: 'typescript-sources-resolver',\n async resolveId(id, importer, options) {\n if (!importer || !isBareModuleSpecifier(id)) {\n return null;\n }\n\n const resolved = await resolve.call(this, id, importer, options);\n if (!resolved || typeof resolved !== 'object' || resolved.external) {\n return null;\n }\n\n if (TS_SOURCE.test(resolved.id) && !resolved.id.includes(NODE_MODULES)) {\n return resolved.id;\n }\n\n return isInlinedSource(importer) ? { id: pathToFileURL(resolved.id).href, external: true } : null;\n },\n };\n}\n\nexport function extractMastraOptionBundler(\n name: keyof MastraConfig,\n entryFile: string,\n result: {\n hasCustomConfig: boolean;\n },\n logger?: IMastraLogger,\n) {\n return rollup({\n logLevel: 'silent',\n input: {\n [`${name}-config`]: entryFile,\n },\n treeshake: 'smallest',\n plugins: [\n tsConfigPaths(),\n typescriptSourcesResolver(entryFile),\n // transpile typescript to something we understand\n esbuild(),\n optimizeLodashImports({\n include: '**/*.{js,ts,mjs,cjs}',\n }),\n commonjs({\n extensions: ['.js', '.ts'],\n strictRequires: 'strict',\n transformMixedEsModules: true,\n ignoreTryCatch: false,\n }),\n json(),\n removeAllOptionsFromMastraExceptPlugin(entryFile, name, result, { logger }),\n // let esbuild remove all unused imports\n esbuild(),\n {\n name: 'cleanup',\n transform(code, id) {\n if (id !== entryFile) {\n return;\n }\n\n return recursiveRemoveNonReferencedNodes(code);\n },\n },\n // let esbuild remove it once more\n esbuild(),\n ],\n });\n}\n\nexport async function extractMastraOption<T extends keyof MastraConfig>(\n name: T,\n entryFile: string,\n outputDir: string,\n logger?: IMastraLogger,\n): Promise<{\n bundleOutput: RollupOutput;\n getConfig: () => Promise<MastraConfig[T]>;\n} | null> {\n const result = {\n hasCustomConfig: false,\n };\n\n const bundler = await extractMastraOptionBundler(name, entryFile, result, logger);\n\n const output = await bundler.write({\n dir: outputDir,\n format: 'es',\n entryFileNames: '[name].mjs',\n });\n\n if (result.hasCustomConfig) {\n const configPath = `${outputDir}/${name}-config.mjs`;\n\n return {\n bundleOutput: output,\n getConfig: () => import(pathToFileURL(configPath).href).then(m => m[name] as MastraConfig[T]),\n };\n }\n\n return null;\n}\n","import type { IMastraLogger } from '@mastra/core/logger';\nimport type { Config } from '@mastra/core/mastra';\nimport { extractMastraOption, extractMastraOptionBundler } from './shared/extract-mastra-option';\n\nexport function getBundlerOptionsBundler(\n entryFile: string,\n result: {\n hasCustomConfig: false;\n },\n) {\n return extractMastraOptionBundler('bundler', entryFile, result);\n}\n\nexport async function getBundlerOptions(\n entryFile: string,\n outputDir: string,\n logger?: IMastraLogger,\n): Promise<Config['bundler'] | null> {\n const result = await extractMastraOption('bundler', entryFile, outputDir, logger);\n\n if (!result) {\n return null;\n }\n\n return result.getConfig();\n}\n"],"mappings":"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"}
|
package/dist/docs/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: mastra-deployer
|
|
|
3
3
|
description: Documentation for @mastra/deployer. Use when working with @mastra/deployer APIs, configuration, or implementation.
|
|
4
4
|
metadata:
|
|
5
5
|
package: "@mastra/deployer"
|
|
6
|
-
version: "1.80.0-alpha.
|
|
6
|
+
version: "1.80.0-alpha.2"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## When to use
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_services = require("./services-
|
|
3
|
-
const require_bundlerOptions = require("./bundlerOptions-
|
|
2
|
+
const require_services = require("./services-CCa8HFrE.cjs");
|
|
3
|
+
const require_bundlerOptions = require("./bundlerOptions-DVHKdYsv.cjs");
|
|
4
4
|
const require_bundler_index = require("./bundler/index.cjs");
|
|
5
|
-
require("./build-
|
|
5
|
+
require("./build-ClcuWPJW.cjs");
|
|
6
6
|
//#region src/deploy/base.ts
|
|
7
7
|
var Deployer = class extends require_bundler_index.Bundler {
|
|
8
8
|
deps = new require_services.DepsService();
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c as createPinoStream, i as DepsService, r as Deps, s as createChildProcessLogger, t as FileService } from "./services-
|
|
2
|
-
import { n as extractMastraOption } from "./bundlerOptions-
|
|
1
|
+
import { c as createPinoStream, i as DepsService, r as Deps, s as createChildProcessLogger, t as FileService } from "./services-DahfG_xq.js";
|
|
2
|
+
import { n as extractMastraOption } from "./bundlerOptions-lxkzE0Jg.js";
|
|
3
3
|
import { Bundler } from "./bundler/index.js";
|
|
4
|
-
import "./build-
|
|
4
|
+
import "./build-Ch38BMkf.js";
|
|
5
5
|
//#region src/deploy/base.ts
|
|
6
6
|
var Deployer = class extends Bundler {
|
|
7
7
|
deps = new DepsService();
|
|
@@ -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;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU1D,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,qBAAqB,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IAC/D,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;AAmDD,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,UA8ErF;AA+CD,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,EACd,qBAAqB,GACtB,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;QAC3B,qBAAqB,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;KAC3D;IA4FO,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE;IAwBlC,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB1D,cAAc;
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"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"}
|
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-CCa8HFrE.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 +1 @@
|
|
|
1
|
-
export { i as DepsService, n as EnvService, t as FileService } from "../services-
|
|
1
|
+
export { i as DepsService, n as EnvService, t as FileService } from "../services-DahfG_xq.js";
|
|
@@ -690,12 +690,8 @@ var Deps = class extends _mastra_core_base.MastraBase {
|
|
|
690
690
|
}
|
|
691
691
|
}
|
|
692
692
|
async getProjectName() {
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
return (await (0, fs_extra_esm.readJSON)(packageJsonPath)).name;
|
|
696
|
-
} catch (err) {
|
|
697
|
-
throw err;
|
|
698
|
-
}
|
|
693
|
+
const packageJsonPath = path.default.join(this.rootDir, "package.json");
|
|
694
|
+
return (await (0, fs_extra_esm.readJSON)(packageJsonPath)).name;
|
|
699
695
|
}
|
|
700
696
|
async getPackageVersion() {
|
|
701
697
|
const __filename$2 = (0, url.fileURLToPath)(require("url").pathToFileURL(__filename).href);
|
|
@@ -877,4 +873,4 @@ Object.defineProperty(exports, "withPlaceholderVersions", {
|
|
|
877
873
|
}
|
|
878
874
|
});
|
|
879
875
|
|
|
880
|
-
//# sourceMappingURL=services-
|
|
876
|
+
//# sourceMappingURL=services-CCa8HFrE.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services-CzhmXlRZ.cjs","names":["Writable","spawn","fsPromises","MastraError","ErrorDomain","ErrorCategory","stringify","parse","MastraBase","readJSON","writeJSON","ensureFile","__filename","fileURLToPath","__dirname","dirname","__filename","fileURLToPath","__dirname","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 type { BundlerConfig } from '@mastra/core/bundler';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { readJSON, writeJSON, ensureFile } from 'fs-extra/esm';\nimport type { PackageJson } from 'type-fest';\nimport { parse, stringify } 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 pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'];\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\n// supportedArchitectures is generated from deployer architecture targets, so it can't be set explicitly.\n// neverBuiltDependencies switches pnpm 10 into deny-list mode, which runs every build script it doesn't name.\nconst PNPM_EXPLICIT_SETTING_KEYS = new Set(\n [...PNPM_CONFIG_KEYS_TO_COPY, 'blockExoticSubdeps'].filter(\n key => key !== 'supportedArchitectures' && key !== 'neverBuiltDependencies',\n ),\n);\n\nfunction serializePnpmWorkspaceSettings(settings: BundlerConfig['pnpmWorkspaceSettings']) {\n // Untyped JS configs can pass undefined; treat it as omitted so the copied source setting survives.\n const definedSettings = Object.entries(settings ?? {}).filter(([, value]) => value !== undefined);\n return definedSettings.map(([key, value]) => {\n if (!PNPM_EXPLICIT_SETTING_KEYS.has(key)) {\n throw new MastraError({\n id: 'DEPLOYER_INVALID_PNPM_WORKSPACE_SETTING',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n text: `pnpm workspace setting ${JSON.stringify(key)} isn't supported in bundler.pnpmWorkspaceSettings. Supported settings: ${[...PNPM_EXPLICIT_SETTING_KEYS].join(', ')}.`,\n });\n }\n const block = stringify({ [key]: value }).trimEnd();\n validatePnpmBuildApprovals(key, block);\n return block;\n });\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 customBlocks = serializePnpmWorkspaceSettings(options.pnpmWorkspaceSettings);\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 (\n !PNPM_CONFIG_KEYS_TO_COPY.has(key) ||\n options.pnpmWorkspaceSettings?.[key] !== undefined ||\n (key === 'supportedArchitectures' && hasArchitecture)\n ) {\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, ...customBlocks].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\n/**\n * Removes overridden packages from every importer of a copied pnpm lockfile. When the Mastra app is the\n * workspace root, the root importer still resolves its workspace dependencies to `link:` versions. pnpm\n * keeps those versions although the output overrides them with packed tarballs, so the tarball is never\n * installed and the dependency symlink dangles. Without the entries, pnpm resolves them from the overrides.\n */\nasync function dropPnpmImporterDependencies(lockfilePath: string, packageNames: string[]): Promise<void> {\n const lockfile = parse(await fsPromises.readFile(lockfilePath, 'utf-8')) as {\n importers?: Record<string, Record<string, Record<string, unknown> | undefined> | undefined>;\n } | null;\n let changed = false;\n for (const importer of Object.values(lockfile?.importers ?? {})) {\n for (const field of ['dependencies', 'devDependencies', 'optionalDependencies']) {\n const dependencies = importer?.[field];\n for (const name of packageNames) {\n if (dependencies && name in dependencies) {\n delete dependencies[name];\n changed = true;\n }\n }\n }\n }\n if (changed) {\n await fsPromises.writeFile(lockfilePath, stringify(lockfile, { lineWidth: 0 }));\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 pnpmWorkspaceSettings,\n }: {\n dir?: string;\n architecture?: ArchitectureOptions;\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'];\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 if (pm === 'pnpm' && pnpmOverrides && Object.keys(pnpmOverrides).length > 0) {\n await dropPnpmImporterDependencies(destination, Object.keys(pnpmOverrides));\n }\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, pnpmWorkspaceSettings });\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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"}
|
|
1
|
+
{"version":3,"file":"services-CCa8HFrE.cjs","names":["Writable","spawn","fsPromises","MastraError","ErrorDomain","ErrorCategory","stringify","parse","MastraBase","readJSON","writeJSON","ensureFile","__filename","fileURLToPath","__dirname","dirname","__filename","fileURLToPath","__dirname","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 type { BundlerConfig } from '@mastra/core/bundler';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { readJSON, writeJSON, ensureFile } from 'fs-extra/esm';\nimport type { PackageJson } from 'type-fest';\nimport { parse, stringify } 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 pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'];\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\n// supportedArchitectures is generated from deployer architecture targets, so it can't be set explicitly.\n// neverBuiltDependencies switches pnpm 10 into deny-list mode, which runs every build script it doesn't name.\nconst PNPM_EXPLICIT_SETTING_KEYS = new Set(\n [...PNPM_CONFIG_KEYS_TO_COPY, 'blockExoticSubdeps'].filter(\n key => key !== 'supportedArchitectures' && key !== 'neverBuiltDependencies',\n ),\n);\n\nfunction serializePnpmWorkspaceSettings(settings: BundlerConfig['pnpmWorkspaceSettings']) {\n // Untyped JS configs can pass undefined; treat it as omitted so the copied source setting survives.\n const definedSettings = Object.entries(settings ?? {}).filter(([, value]) => value !== undefined);\n return definedSettings.map(([key, value]) => {\n if (!PNPM_EXPLICIT_SETTING_KEYS.has(key)) {\n throw new MastraError({\n id: 'DEPLOYER_INVALID_PNPM_WORKSPACE_SETTING',\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.USER,\n text: `pnpm workspace setting ${JSON.stringify(key)} isn't supported in bundler.pnpmWorkspaceSettings. Supported settings: ${[...PNPM_EXPLICIT_SETTING_KEYS].join(', ')}.`,\n });\n }\n const block = stringify({ [key]: value }).trimEnd();\n validatePnpmBuildApprovals(key, block);\n return block;\n });\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 customBlocks = serializePnpmWorkspaceSettings(options.pnpmWorkspaceSettings);\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 (\n !PNPM_CONFIG_KEYS_TO_COPY.has(key) ||\n options.pnpmWorkspaceSettings?.[key] !== undefined ||\n (key === 'supportedArchitectures' && hasArchitecture)\n ) {\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, ...customBlocks].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\n/**\n * Removes overridden packages from every importer of a copied pnpm lockfile. When the Mastra app is the\n * workspace root, the root importer still resolves its workspace dependencies to `link:` versions. pnpm\n * keeps those versions although the output overrides them with packed tarballs, so the tarball is never\n * installed and the dependency symlink dangles. Without the entries, pnpm resolves them from the overrides.\n */\nasync function dropPnpmImporterDependencies(lockfilePath: string, packageNames: string[]): Promise<void> {\n const lockfile = parse(await fsPromises.readFile(lockfilePath, 'utf-8')) as {\n importers?: Record<string, Record<string, Record<string, unknown> | undefined> | undefined>;\n } | null;\n let changed = false;\n for (const importer of Object.values(lockfile?.importers ?? {})) {\n for (const field of ['dependencies', 'devDependencies', 'optionalDependencies']) {\n const dependencies = importer?.[field];\n for (const name of packageNames) {\n if (dependencies && name in dependencies) {\n delete dependencies[name];\n changed = true;\n }\n }\n }\n }\n if (changed) {\n await fsPromises.writeFile(lockfilePath, stringify(lockfile, { lineWidth: 0 }));\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 pnpmWorkspaceSettings,\n }: {\n dir?: string;\n architecture?: ArchitectureOptions;\n pnpmOverrides?: Record<string, string>;\n pnpmNodeLinker?: 'hoisted';\n pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'];\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 if (pm === 'pnpm' && pnpmOverrides && Object.keys(pnpmOverrides).length > 0) {\n await dropPnpmImporterDependencies(destination, Object.keys(pnpmOverrides));\n }\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, pnpmWorkspaceSettings });\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 const packageJsonPath = path.join(this.rootDir, 'package.json');\n const pkg = await readJSON(packageJsonPath);\n return pkg.name;\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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"}
|
|
@@ -685,12 +685,8 @@ var Deps = class extends MastraBase {
|
|
|
685
685
|
}
|
|
686
686
|
}
|
|
687
687
|
async getProjectName() {
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
return (await readJSON(packageJsonPath)).name;
|
|
691
|
-
} catch (err) {
|
|
692
|
-
throw err;
|
|
693
|
-
}
|
|
688
|
+
const packageJsonPath = path.join(this.rootDir, "package.json");
|
|
689
|
+
return (await readJSON(packageJsonPath)).name;
|
|
694
690
|
}
|
|
695
691
|
async getPackageVersion() {
|
|
696
692
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -825,4 +821,4 @@ var FileService = class {
|
|
|
825
821
|
//#endregion
|
|
826
822
|
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 };
|
|
827
823
|
|
|
828
|
-
//# sourceMappingURL=services-
|
|
824
|
+
//# sourceMappingURL=services-DahfG_xq.js.map
|