{"version":3,"file":"services-BLvNG7v7.cjs","names":["Writable","MastraError","ErrorDomain","ErrorCategory","MastraBase","fsPromises","fsExtra"],"sources":["../src/deploy/log.ts","../src/services/deps.ts","../src/services/env.ts","../src/services/fs.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport { Writable } from 'node:stream';\nimport type { IMastraLogger } from '@mastra/core/logger';\n\nexport const createPinoStream = (logger: IMastraLogger) => {\n  return new Writable({\n    write(chunk, _encoding, callback) {\n      // Convert Buffer/string to string and trim whitespace\n      const line = chunk.toString().trim();\n\n      if (line) {\n        console.info(line);\n        // Log each line through Pino\n        logger.info(line);\n      }\n\n      callback();\n    },\n  });\n};\n\n/**\n * Args are joined into a shell command (`shell: true` is required for package\n * manager shims on Windows), so only allow characters that appear in package\n * specifiers and CLI flags — never shell metacharacters (CodeQL\n * js/shell-command-constructed-from-input).\n */\nconst SAFE_SHELL_ARG = /^[\\w@%+=:,./^~-]*$/;\n\nexport function createChildProcessLogger({ logger, root }: { logger: IMastraLogger; root: string }) {\n  const pinoStream = createPinoStream(logger);\n  return async ({ cmd, args, env }: { cmd: string; args: string[]; env: Record<string, string> }) => {\n    try {\n      for (const arg of args) {\n        if (!SAFE_SHELL_ARG.test(arg)) {\n          throw new Error(`Refusing to pass unsafe argument to shell command: ${JSON.stringify(arg)}`);\n        }\n      }\n      const subprocess = spawn(cmd, args, {\n        cwd: root,\n        shell: true,\n        env,\n        // No stdin for the child process — it doesn't need interactive input\n        stdio: ['ignore', 'pipe', 'pipe'],\n      });\n\n      let stdout = '';\n      let stderr = '';\n      subprocess.stdout?.on('data', chunk => {\n        stdout += chunk.toString();\n      });\n      subprocess.stderr?.on('data', chunk => {\n        stderr += chunk.toString();\n      });\n\n      // Pipe stdout and stderr through the logging stream.\n      // { end: false } prevents the first stream to close from ending pinoStream\n      // while the other may still be writing.\n      subprocess.stdout?.pipe(pinoStream, { end: false });\n      subprocess.stderr?.pipe(pinoStream, { end: false });\n\n      // Wait for the process to complete\n      return new Promise((resolve, reject) => {\n        subprocess.on('close', code => {\n          pinoStream.end();\n          if (code === 0) {\n            resolve({ success: true, stdout, stderr });\n          } else {\n            reject(Object.assign(new Error(`Process exited with code ${code}`), { stdout, stderr }));\n          }\n        });\n\n        subprocess.on('error', error => {\n          pinoStream.end();\n          logger.error('Process failed', { error });\n          reject(error);\n        });\n      });\n    } catch (error) {\n      console.error(error);\n      logger.error('Process failed', { error });\n      pinoStream.end();\n      return { success: false, error };\n    }\n  };\n}\n","import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path, { dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { MastraBase } from '@mastra/core/base';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { readJSON, writeJSON, ensureFile } from 'fs-extra/esm';\nimport type { PackageJson } from 'type-fest';\nimport { parse } from 'yaml';\n\nimport { createChildProcessLogger } from '../deploy/log.js';\n\ntype PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\ninterface ArchitectureOptions {\n  os?: string[];\n  cpu?: string[];\n  libc?: string[];\n}\n\ninterface InstallOptions extends ArchitectureOptions {\n  pnpmOverrides?: Record<string, string>;\n  pnpmNodeLinker?: 'hoisted';\n}\n\nconst PNPM_CONFIG_KEYS_TO_COPY = new Set([\n  'allowBuilds',\n  'onlyBuiltDependencies',\n  'ignoredBuiltDependencies',\n  'neverBuiltDependencies',\n  'minimumReleaseAge',\n  'minimumReleaseAgeExclude',\n  'trustPolicy',\n  'trustPolicyExclude',\n  'trustPolicyIgnoreAfter',\n  'supportedArchitectures',\n]);\n\nfunction getTopLevelYamlKey(line: string) {\n  const match = /^(?!\\s)([\\w-]+):/.exec(line);\n  return match?.[1];\n}\n\nconst PNPM_IGNORED_BUILDS_ERROR = 'ERR_PNPM_IGNORED_BUILDS';\n\nexport function getPnpmIgnoredBuildPackages(output: string): string[] {\n  const match = new RegExp(`\\\\[?${PNPM_IGNORED_BUILDS_ERROR}\\\\]?[^\\\\n]*Ignored build scripts:\\\\s*([^\\\\n]+)`).exec(\n    output,\n  );\n  if (!match?.[1]) return [];\n\n  return match[1]\n    .split(',')\n    .map(specifier => specifier.trim())\n    .filter(Boolean)\n    .map(specifier => {\n      if (specifier.startsWith('@')) {\n        const versionSeparator = specifier.indexOf('@', 1);\n        return versionSeparator === -1 ? specifier : specifier.slice(0, versionSeparator);\n      }\n      return specifier.split('@', 1)[0]!;\n    });\n}\n\nfunction validatePnpmBuildApprovals(key: string, block: string): void {\n  if (key !== 'allowBuilds' && key !== 'onlyBuiltDependencies') return;\n\n  let value: unknown;\n  try {\n    value = (parse(block) as Record<string, unknown>)[key];\n  } catch (error) {\n    throw new MastraError(\n      {\n        id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n        domain: ErrorDomain.DEPLOYER,\n        category: ErrorCategory.USER,\n        details: { key },\n        text: `Invalid pnpm ${key} configuration`,\n      },\n      error,\n    );\n  }\n\n  const invalidEntries =\n    key === 'allowBuilds'\n      ? value && typeof value === 'object' && !Array.isArray(value)\n        ? Object.entries(value).filter(\n            ([dependency, approval]) => dependency.trim().length === 0 || typeof approval !== 'boolean',\n          )\n        : [[key, value]]\n      : Array.isArray(value) &&\n          value.every(dependency => typeof dependency === 'string' && dependency.trim().length > 0)\n        ? []\n        : [[key, value]];\n\n  if (invalidEntries.length === 0) return;\n  const invalidEntryNames = invalidEntries.map(([entry]) => entry).join(', ');\n\n  throw new MastraError({\n    id: 'DEPLOYER_INVALID_PNPM_BUILD_APPROVAL_CONFIG',\n    domain: ErrorDomain.DEPLOYER,\n    category: ErrorCategory.USER,\n    details: { key, invalidEntries: invalidEntryNames },\n    text: `Invalid pnpm ${key} entries: ${invalidEntryNames}`,\n  });\n}\n\nexport function copyPnpmWorkspaceSettings(source: string, options: InstallOptions = {}) {\n  const hasArchitecture = Boolean(options.os?.length || options.cpu?.length || options.libc?.length);\n  const lines = source.split(/\\r?\\n/);\n  const blocks: string[] = [];\n\n  for (let index = 0; index < lines.length;) {\n    const key = getTopLevelYamlKey(lines[index] ?? '');\n    if (!key) {\n      index += 1;\n      continue;\n    }\n\n    const start = index;\n    index += 1;\n    while (index < lines.length && !getTopLevelYamlKey(lines[index] ?? '')) {\n      index += 1;\n    }\n\n    if (!PNPM_CONFIG_KEYS_TO_COPY.has(key) || (key === 'supportedArchitectures' && hasArchitecture)) {\n      continue;\n    }\n\n    const block = lines.slice(start, index).join('\\n').trimEnd();\n    if (block) {\n      validatePnpmBuildApprovals(key, block);\n      blocks.push(block);\n    }\n  }\n\n  if (hasArchitecture) {\n    const architectureBlock = ['supportedArchitectures:'];\n    if (options.os?.length) {\n      architectureBlock.push(`  os: ${JSON.stringify(options.os)}`);\n    }\n    if (options.cpu?.length) {\n      architectureBlock.push(`  cpu: ${JSON.stringify(options.cpu)}`);\n    }\n    if (options.libc?.length) {\n      architectureBlock.push(`  libc: ${JSON.stringify(options.libc)}`);\n    }\n    blocks.push(architectureBlock.join('\\n'));\n  }\n\n  if (options.pnpmOverrides && Object.keys(options.pnpmOverrides).length > 0) {\n    blocks.push(\n      [\n        'overrides:',\n        ...Object.entries(options.pnpmOverrides).map(\n          ([key, value]) => `  ${JSON.stringify(key)}: ${JSON.stringify(value)}`,\n        ),\n      ].join('\\n'),\n    );\n  }\n\n  if (options.pnpmNodeLinker) {\n    blocks.push(`nodeLinker: ${options.pnpmNodeLinker}`);\n  }\n\n  return [\"packages:\\n  - '.'\", ...blocks].join('\\n\\n') + '\\n';\n}\n\nexport class Deps extends MastraBase {\n  private packageManager: PackageManager;\n  private rootDir: string;\n\n  constructor(rootDir = process.cwd()) {\n    super({ component: 'DEPLOYER', name: 'DEPS' });\n\n    this.rootDir = rootDir;\n    this.packageManager = this.getPackageManager();\n  }\n\n  private findLockFile(dir: string): string | null {\n    const lockFiles = ['pnpm-lock.yaml', 'package-lock.json', 'yarn.lock', 'bun.lock'];\n    for (const file of lockFiles) {\n      if (fs.existsSync(path.join(dir, file))) {\n        return file;\n      }\n    }\n    const parentDir = path.resolve(dir, '..');\n    if (parentDir !== dir) {\n      return this.findLockFile(parentDir);\n    }\n    return null;\n  }\n\n  private getPackageManager(): PackageManager {\n    const lockFile = this.findLockFile(this.rootDir);\n    switch (lockFile) {\n      case 'pnpm-lock.yaml':\n        return 'pnpm';\n      case 'package-lock.json':\n        return 'npm';\n      case 'yarn.lock':\n        return 'yarn';\n      case 'bun.lock':\n        return 'bun';\n      default:\n        return 'npm';\n    }\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({ dir, destination, sanitizedName }: { dir: string; destination: string; sanitizedName: string }) {\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      // %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    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    await fsPromises.writeFile(\n      path.join(dir, 'pnpm-workspace.yaml'),\n      copyPnpmWorkspaceSettings(sourceWorkspaceYaml, options),\n      'utf-8',\n    );\n  }\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  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(pm: PackageManager, type: 'install' | 'add'): 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 `${cmd}`;\n      case 'pnpm':\n        return cmd === 'install' ? `${cmd} --loglevel=error` : `${cmd} --loglevel=error`;\n      case 'bun':\n        return cmd;\n      default:\n        return cmd;\n    }\n  }\n\n  public async install({\n    dir = this.rootDir,\n    architecture,\n    pnpmOverrides,\n    pnpmNodeLinker,\n  }: {\n    dir?: string;\n    architecture?: ArchitectureOptions;\n    pnpmOverrides?: Record<string, string>;\n    pnpmNodeLinker?: 'hoisted';\n  } = {}) {\n    const pm = this.packageManager;\n    const installCommand = this.getPackageManagerCommand(pm, 'install');\n    let args: string[] = [];\n\n    switch (pm) {\n      case 'pnpm':\n        await this.writePnpmConfig(dir, { ...architecture, pnpmOverrides, pnpmNodeLinker });\n        break;\n      case 'yarn':\n        // similar to --ignore-workspace but for yarn\n        await ensureFile(path.join(dir, 'yarn.lock'));\n        if (architecture) {\n          await this.writeYarnConfig(dir, architecture);\n        }\n        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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"}