{"version":3,"file":"index.cjs","names":["pkg","getPackageName","MastraBundler","createBundlerUtil","getBundlerOptions","analyzeBundle","DepsService","fsExtra","MastraError","ErrorDomain","ErrorCategory","getWorkspaceInformation","getInputOptions","slash","posix","path","FileService","isBareModuleSpecifier","collectTransitiveWorkspaceDependencies","packWorkspaceDependencies","shouldSkipInstall"],"sources":["../../src/bundler/index.ts"],"sourcesContent":["import { execSync } from 'node:child_process';\nimport { createHash } from 'node:crypto';\nimport { existsSync } from 'node:fs';\nimport { readFile, rm, stat, writeFile } from 'node:fs/promises';\nimport { dirname, join, posix, relative } from 'node:path';\nimport { MastraBundler } from '@mastra/core/bundler';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport type { Config } from '@mastra/core/mastra';\nimport virtual from '@rollup/plugin-virtual';\nimport * as pkg from 'empathic/package';\nimport fsExtra, { copy, ensureDir, emptyDir, readJSON } from 'fs-extra/esm';\nimport type { InputOptions, OutputOptions } from 'rollup';\nimport { glob } from 'tinyglobby';\nimport { analyzeBundle } from '../build/analyze';\nimport { createBundler as createBundlerUtil, getInputOptions } from '../build/bundler';\nimport { getBundlerOptions } from '../build/bundlerOptions';\nimport type { BundlerOptions, ExternalDependencyInfo } from '../build/types';\nimport type { BundlerPlatform } from '../build/utils';\nimport { getPackageName, isBareModuleSpecifier, shouldSkipInstall, slash } from '../build/utils';\nimport { DepsService } from '../services/deps';\nimport { FileService } from '../services/fs';\nimport {\n  collectTransitiveWorkspaceDependencies,\n  getWorkspaceInformation,\n  packWorkspaceDependencies,\n} from './workspaceDependencies';\n\nexport type { BundlerOptions, ExternalDependencyInfo } from '../build/types';\nexport type { BundlerPlatform } from '../build/utils';\n\nexport const IS_DEFAULT = Symbol('IS_DEFAULT');\n\nconst NPM_ALIAS_PREFIX = 'npm:';\n/** Characters a registry range or dist tag can contain. Protocols need `:`, git shorthand needs `/` or `#`. */\nconst REGISTRY_SPEC_PATTERN = /^[A-Za-z0-9.+_^~><=*|!\\s-]+$/;\nconst PACKAGE_NAME_PATTERN = /^(?:@[A-Za-z0-9._-]+\\/)?[A-Za-z0-9._-]+$/;\nconst TARBALL_SUFFIX_PATTERN = /\\.(?:tgz|tar\\.gz|tar)$/i;\n/** npm reads a value starting like this as a path, whatever follows. A bare `~` is a semver range. */\nconst FILE_SPEC_PREFIX_PATTERN = /^(?:\\.|~[/\\\\]|[/\\\\]|[A-Za-z]:[/\\\\])/;\n/** A range admitting any published version: `*`, `x`, `>=0`, and any union containing one. */\nconst UNBOUNDED_RANGE_PATTERN = /(?:^|\\|\\||\\s)\\s*(?:[*xX]|>=?\\s*0(?:\\.0)*(?:\\.0)*)\\s*(?:$|\\|\\|)/;\n\n/**\n * Constraints declared by the source app, plus the packages some resolution field pins.\n *\n * Only `dependencies` values are read. Override fields contribute names, never values: which of\n * `overrides`, `resolutions`, `pnpm.overrides` or `pnpm-workspace.yaml` a given install honoured\n * depends on the package manager and its version, so reproducing that precedence would mean\n * emulating three package managers. A name appearing in any of them is enough to know the resolved\n * version was chosen deliberately, which is all this needs.\n */\nexport type SourceDependencyConstraints = {\n  dependencies: Record<string, string>;\n  pinnedByResolutionField: Set<string>;\n};\n\nconst toStringRecord = (value: unknown): Record<string, string> => {\n  if (!value || typeof value !== 'object' || Array.isArray(value)) {\n    return {};\n  }\n\n  return Object.fromEntries(\n    Object.entries(value).filter((entry): entry is [string, string] => typeof entry[1] === 'string'),\n  );\n};\n\n/**\n * True when a specifier is something the isolated install in `.mastra/output` can resolve from the\n * registry: a semver range, a dist tag, a wildcard, or an npm alias whose target is a registry\n * package and range.\n *\n * This is an allowlist rather than a denylist of known protocols, so an unfamiliar protocol is\n * rejected without this code having to know it exists. The output directory is not a workspace, has\n * no catalog definitions and has a different relative-path base, so `catalog:`, `workspace:`,\n * `file:`, `link:` and git specifiers are all either uninstallable there or point somewhere else.\n */\nexport const isRegistryVersionSpec = (spec: string): boolean => {\n  if (FILE_SPEC_PREFIX_PATTERN.test(spec) || TARBALL_SUFFIX_PATTERN.test(spec)) {\n    return false;\n  }\n\n  if (spec.startsWith(NPM_ALIAS_PREFIX)) {\n    const alias = spec.slice(NPM_ALIAS_PREFIX.length);\n    // Skip index 0 so `npm:@scope/pkg` reads as an alias with no range rather than an empty name.\n    const rangeSeparator = alias.lastIndexOf('@');\n    const name = rangeSeparator > 0 ? alias.slice(0, rangeSeparator) : alias;\n    const range = rangeSeparator > 0 ? alias.slice(rangeSeparator + 1) : '*';\n\n    return PACKAGE_NAME_PATTERN.test(name) && isRegistryVersionSpec(range);\n  }\n\n  return REGISTRY_SPEC_PATTERN.test(spec);\n};\n\n/**\n * True when a specifier names a version the output install can be held to.\n *\n * A range admitting anything (`*`, `latest`, `>=0`, an alias with no range) is looser than the\n * version already resolved, so writing it would let a later install pull something the bundle was\n * never analyzed against.\n */\nconst isBoundedVersionSpec = (spec: string): boolean => {\n  const range = spec.startsWith(NPM_ALIAS_PREFIX)\n    ? (() => {\n        const alias = spec.slice(NPM_ALIAS_PREFIX.length);\n        const rangeSeparator = alias.lastIndexOf('@');\n        return rangeSeparator > 0 ? alias.slice(rangeSeparator + 1) : '';\n      })()\n    : spec;\n\n  return /\\d/.test(range) && !UNBOUNDED_RANGE_PATTERN.test(range);\n};\n\nconst readManifest = async (manifestPath: string | undefined): Promise<Record<string, unknown> | undefined> => {\n  if (!manifestPath) {\n    return undefined;\n  }\n\n  try {\n    const manifest = await readJSON(manifestPath);\n    return manifest && typeof manifest === 'object' ? manifest : undefined;\n  } catch {\n    // A manifest that cannot be read tells us nothing about intent.\n    return undefined;\n  }\n};\n\n/** Collect the package names a manifest's resolution fields pin, ignoring their values. */\nconst collectManifestPinnedNames = (manifest: Record<string, unknown> | undefined, pinned: Set<string>) => {\n  const pnpmSection = manifest?.pnpm;\n  const records = [\n    manifest?.overrides,\n    manifest?.resolutions,\n    pnpmSection && typeof pnpmSection === 'object' ? (pnpmSection as { overrides?: unknown }).overrides : undefined,\n  ];\n\n  for (const record of records) {\n    if (record && typeof record === 'object' && !Array.isArray(record)) {\n      for (const key of Object.keys(record)) {\n        pinned.add(key);\n      }\n    }\n  }\n};\n\n/**\n * Collect the names under a top-level `overrides:` block in `pnpm-workspace.yaml`.\n *\n * pnpm moved overrides out of `package.json` into this file, so a workspace on a current pnpm keeps\n * them only here. Reading names off the indented block avoids a YAML dependency, the same tradeoff\n * `copyPnpmWorkspaceSettings` already makes for the top-level keys it copies.\n */\nconst collectPnpmWorkspacePinnedNames = (source: string, pinned: Set<string>) => {\n  const lines = source.split(/\\r?\\n/);\n  let insideOverrides = false;\n\n  for (const line of lines) {\n    if (/^\\S/.test(line)) {\n      insideOverrides = /^overrides:\\s*$/.test(line);\n      continue;\n    }\n\n    if (!insideOverrides) {\n      continue;\n    }\n\n    const key = /^\\s+(?:'([^']+)'|\"([^\"]+)\"|([^'\"\\s:][^:]*?))\\s*:/.exec(line);\n    if (key) {\n      pinned.add((key[1] ?? key[2] ?? key[3] ?? '').trim());\n    }\n  }\n};\n\n/**\n * Read the constraints the source app declared.\n *\n * `dependencies` come from the manifest at `projectRoot`, the package the build was invoked for and\n * whose directory receives the output, falling back to the manifest above the entry file. Anchoring\n * on `projectRoot` rather than the entry file keeps the answer deterministic when the entry handed\n * to the bundler is a generated wrapper rather than the app's own source file.\n *\n * Resolution-field names are collected from both that manifest and the workspace root, including the\n * root `pnpm-workspace.yaml`, because a name pinned anywhere means the resolved version may have been\n * chosen deliberately rather than hoisted by accident.\n */\nexport const getSourceDependencyConstraints = async ({\n  projectRoot,\n  mastraEntryFile,\n  workspaceRoot,\n}: {\n  projectRoot: string;\n  mastraEntryFile: string;\n  workspaceRoot?: string;\n}): Promise<SourceDependencyConstraints> => {\n  const manifestPaths = [pkg.up({ cwd: projectRoot }), pkg.up({ cwd: dirname(mastraEntryFile) })].filter(\n    (entry, index, entries): entry is string => !!entry && entries.indexOf(entry) === index,\n  );\n\n  if (workspaceRoot) {\n    manifestPaths.push(join(workspaceRoot, 'package.json'));\n  }\n\n  const pinnedByResolutionField = new Set<string>();\n  let dependencies: Record<string, string> | undefined;\n\n  for (const manifestPath of manifestPaths) {\n    const manifest = await readManifest(manifestPath);\n    if (!manifest) {\n      continue;\n    }\n\n    // Nearest manifest wins, and an empty `dependencies` record is still that package's answer.\n    dependencies ??= toStringRecord(manifest.dependencies);\n    collectManifestPinnedNames(manifest, pinnedByResolutionField);\n  }\n\n  if (workspaceRoot) {\n    try {\n      collectPnpmWorkspacePinnedNames(\n        await readFile(join(workspaceRoot, 'pnpm-workspace.yaml'), 'utf-8'),\n        pinnedByResolutionField,\n      );\n    } catch {\n      // No pnpm workspace config, or unreadable: nothing to learn from it.\n    }\n  }\n\n  return { dependencies: dependencies ?? {}, pinnedByResolutionField };\n};\n\nconst findDeclaredConstraint = (\n  constraints: SourceDependencyConstraints,\n  dependencyName: string,\n): string | undefined => {\n  const names = [dependencyName, getPackageName(dependencyName)].filter(\n    (name, index, all): name is string => !!name && all.indexOf(name) === index,\n  );\n\n  for (const name of names) {\n    // A pinned package's resolved version is the deliberate answer, so leave it as `main` wrote it.\n    if (constraints.pinnedByResolutionField.has(name)) {\n      return undefined;\n    }\n  }\n\n  for (const name of names) {\n    const declared = (constraints.dependencies[name] ?? '').trim();\n    if (declared && isBoundedVersionSpec(declared) && isRegistryVersionSpec(declared)) {\n      return declared;\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Prefer the constraint the app declared over the version resolved from `node_modules`.\n *\n * The resolved version is whatever the install happened to hoist, so an app declaring `zod: ^4.3.6`\n * next to a hoisted `zod@3.25.76` gets the hoisted version written into the output manifest and the\n * isolated install then locks it in.\n */\nexport const applySourceDependencyRange = (\n  dependencyName: string,\n  dependencyInfo: ExternalDependencyInfo,\n  constraints: SourceDependencyConstraints,\n): ExternalDependencyInfo => {\n  const declared = findDeclaredConstraint(constraints, dependencyName);\n  if (!declared) {\n    return dependencyInfo;\n  }\n\n  if (declared.startsWith(NPM_ALIAS_PREFIX)) {\n    return { ...dependencyInfo, packageSpec: declared };\n  }\n\n  // `packageSpec` is set only when the resolved package's own name differs from the requested one, so\n  // a bare range under this key describes a different package and the resolved alias is the answer.\n  if (dependencyInfo.packageSpec) {\n    return dependencyInfo;\n  }\n\n  return { ...dependencyInfo, version: declared };\n};\n\nfunction toolIdForEntry(relativeEntryFile: string): string {\n  const digest = createHash('sha256').update(relativeEntryFile).digest('hex');\n  return `${digest.slice(0, 8)}-${digest.slice(8, 12)}-${digest.slice(12, 16)}-${digest.slice(16, 20)}-${digest.slice(20, 32)}`;\n}\n\nexport abstract class Bundler extends MastraBundler {\n  protected analyzeOutputDir = '.build';\n  protected outputDir = 'output';\n  protected platform: BundlerPlatform = 'node';\n\n  constructor(name: string, component: 'BUNDLER' | 'DEPLOYER' = 'BUNDLER') {\n    super({ name, component });\n  }\n\n  async prepare(outputDirectory: string): Promise<void> {\n    // Clean up the output directory first\n    await emptyDir(outputDirectory);\n\n    await ensureDir(join(outputDirectory, this.analyzeOutputDir));\n    await ensureDir(join(outputDirectory, this.outputDir));\n  }\n\n  async writePackageJson(\n    outputDirectory: string,\n    dependencies: Map<string, string | ExternalDependencyInfo>,\n    resolutions?: Record<string, string>,\n  ) {\n    this.logger.debug(\"Writing project's package.json\");\n\n    await ensureDir(outputDirectory);\n    const pkgPath = join(outputDirectory, 'package.json');\n\n    const dependenciesMap = new Map();\n    for (const [key, value] of dependencies.entries()) {\n      const dependencyValue = typeof value === 'string' ? value : (value.packageSpec ?? value.version ?? 'latest');\n      if (key.startsWith('@')) {\n        // Handle scoped packages (e.g. @org/package)\n        const pkgChunks = key.split('/');\n        dependenciesMap.set(`${pkgChunks[0]}/${pkgChunks[1]}`, dependencyValue);\n      } else {\n        // For non-scoped packages, take only the first part before any slash\n        const pkgName = key.split('/')[0] || key;\n        dependenciesMap.set(pkgName, dependencyValue);\n      }\n    }\n\n    await writeFile(\n      pkgPath,\n      JSON.stringify(\n        {\n          name: 'server',\n          version: '1.0.0',\n          private: true,\n          type: 'module',\n          main: 'index.mjs',\n          scripts: {\n            start: 'node ./index.mjs',\n          },\n          dependencies: Object.fromEntries(dependenciesMap.entries()),\n          ...(Object.keys(resolutions ?? {}).length > 0 && { resolutions }),\n        },\n        null,\n        2,\n      ),\n    );\n  }\n\n  protected createBundler(inputOptions: InputOptions, outputOptions: Partial<OutputOptions> & { dir: string }) {\n    return createBundlerUtil(inputOptions, outputOptions);\n  }\n\n  protected async getUserBundlerOptions(\n    mastraEntryFile: string,\n    outputDirectory: string,\n  ): Promise<NonNullable<Config['bundler']>> {\n    const defaultBundlerOptions: Config['bundler'] = {\n      externals: [],\n      sourcemap: false,\n      transpilePackages: [],\n      [IS_DEFAULT]: true,\n    } as const;\n\n    try {\n      const bundlerOptions = await getBundlerOptions(mastraEntryFile, outputDirectory);\n\n      return bundlerOptions ?? defaultBundlerOptions;\n    } catch (error) {\n      this.logger.debug('Failed to get bundler options, sourcemap will be disabled', { error });\n    }\n\n    return defaultBundlerOptions;\n  }\n\n  protected async analyze(entry: string | string[], mastraFile: string, outputDirectory: string) {\n    return await analyzeBundle(\n      ([] as string[]).concat(entry),\n      mastraFile,\n      {\n        outputDir: join(outputDirectory, this.analyzeOutputDir),\n        projectRoot: outputDirectory,\n        platform: this.platform,\n      },\n      this.logger,\n    );\n  }\n\n  protected pnpmNodeLinker?: 'hoisted';\n\n  protected getAdditionalEntries(): Record<string, string> {\n    return {};\n  }\n\n  protected async installDependencies(\n    outputDirectory: string,\n    rootDir = process.cwd(),\n    pnpmOverrides?: Record<string, string>,\n  ) {\n    const deps = new DepsService(rootDir);\n    deps.__setLogger(this.logger);\n\n    await deps.install({\n      dir: join(outputDirectory, this.outputDir),\n      pnpmOverrides,\n      pnpmNodeLinker: this.pnpmNodeLinker,\n    });\n  }\n\n  /**\n   * Generate a package-lock.json for the output directory so that deploy targets\n   * can use `npm ci` instead of `npm install`, skipping version resolution entirely.\n   * This is a lockfile-only operation — no packages are downloaded.\n   *\n   * Temporarily moves node_modules out of the way because pnpm's symlink-based\n   * layout confuses npm's arborist, then restores it afterwards so that\n   * `mastra start` (or wrangler) can still resolve dependencies at runtime.\n   */\n  private async generateNpmLockfile(outputDir: string): Promise<void> {\n    const nodeModules = join(outputDir, 'node_modules');\n    const nodeModulesTmp = join(outputDir, 'node_modules.__tmp');\n    let movedNodeModules = false;\n    try {\n      // Move node_modules aside — pnpm's symlink layout confuses npm's arborist\n      if (await fsExtra.pathExists(nodeModules)) {\n        await fsExtra.move(nodeModules, nodeModulesTmp, { overwrite: true });\n        movedNodeModules = true;\n      }\n      execSync('npm install --package-lock-only --force', {\n        cwd: outputDir,\n        stdio: 'pipe',\n        timeout: 60_000,\n      });\n    } catch {\n      this.logger.warn('Failed to generate package-lock.json — deploy will fall back to npm install');\n    } finally {\n      // Restore node_modules so runtime resolution works\n      if (movedNodeModules) {\n        await rm(nodeModules, { recursive: true, force: true });\n        await fsExtra.move(nodeModulesTmp, nodeModules, { overwrite: true });\n      }\n    }\n  }\n\n  protected async copyPublic(mastraDir: string, outputDirectory: string) {\n    const publicDir = join(mastraDir, 'public');\n\n    try {\n      await stat(publicDir);\n    } catch {\n      return;\n    }\n\n    await copy(publicDir, join(outputDirectory, this.outputDir));\n  }\n\n  protected async copyDOTNPMRC({\n    rootDir = process.cwd(),\n    outputDirectory,\n  }: {\n    rootDir?: string;\n    outputDirectory: string;\n  }) {\n    const sourceDotNpmRcPath = join(rootDir, '.npmrc');\n    const targetDotNpmRcPath = join(outputDirectory, this.outputDir, '.npmrc');\n\n    try {\n      await stat(sourceDotNpmRcPath);\n      await copy(sourceDotNpmRcPath, targetDotNpmRcPath);\n    } catch {\n      return;\n    }\n  }\n\n  /**\n   * Writes the `mastra-project.json` deployment marker for Software Factory\n   * projects after public assets have been copied. Verifies that the Factory\n   * SPA (`factory/index.html`) exists in the output before emitting the marker.\n   */\n  protected async writeFactoryMarker(outputDirectory: string): Promise<void> {\n    const outputDir = join(outputDirectory, this.outputDir);\n    const factoryIndex = join(outputDir, 'factory', 'index.html');\n    if (!existsSync(factoryIndex)) {\n      throw new MastraError({\n        id: 'DEPLOYER_BUNDLER_FACTORY_UI_MISSING',\n        text: 'Software Factory project detected but factory/index.html was not found after copying the prebuilt Factory UI.',\n        domain: ErrorDomain.DEPLOYER,\n        category: ErrorCategory.SYSTEM,\n      });\n    }\n    await writeFile(\n      join(outputDir, 'mastra-project.json'),\n      JSON.stringify({ schemaVersion: 1, projectType: 'factory', assets: { ui: 'factory' } }, null, 2),\n    );\n    this.logger.info('Wrote mastra-project.json for Software Factory project');\n  }\n\n  protected async getBundlerOptions(\n    serverFile: string,\n    mastraEntryFile: string,\n    analyzedBundleInfo: Awaited<ReturnType<typeof analyzeBundle>>,\n    toolsPaths: (string | string[])[],\n    { enableSourcemap, enableMinify, enableEsmShim, externals }: BundlerOptions,\n    additionalEntries: Record<string, string>,\n    toolProjectRoot: string,\n  ) {\n    const { workspaceRoot } = await getWorkspaceInformation({ mastraEntryFile });\n    const closestPkgJson = pkg.up({ cwd: dirname(mastraEntryFile) });\n    const projectRoot = closestPkgJson ? dirname(closestPkgJson) : process.cwd();\n\n    const inputOptions: InputOptions = await getInputOptions(\n      mastraEntryFile,\n      analyzedBundleInfo,\n      this.platform,\n      {\n        'process.env.NODE_ENV': JSON.stringify('production'),\n      },\n      {\n        sourcemap: enableSourcemap,\n        minify: enableMinify,\n        workspaceRoot,\n        projectRoot,\n        enableEsmShim,\n        externalsPreset: externals === true,\n      },\n    );\n    const toolsInputOptions = await this.listToolsInputOptions(toolsPaths, toolProjectRoot);\n    const entryInputs: Record<string, string> = {};\n    const virtualEntries: Record<string, string> = {};\n    const entries = { index: serverFile, ...additionalEntries };\n\n    for (const [name, entry] of Object.entries(entries)) {\n      if (entry.includes('\\n') || !existsSync(entry)) {\n        const virtualId = name === 'index' ? '#entry' : `#entry-${name}`;\n        entryInputs[name] = virtualId;\n        virtualEntries[virtualId] = entry;\n      } else {\n        entryInputs[name] = entry;\n      }\n    }\n\n    inputOptions.input = { ...entryInputs, ...toolsInputOptions };\n\n    if (Object.keys(virtualEntries).length > 0) {\n      if (Array.isArray(inputOptions.plugins)) {\n        inputOptions.plugins.unshift(virtual(virtualEntries));\n      } else {\n        inputOptions.plugins = [virtual(virtualEntries)];\n      }\n    }\n\n    return inputOptions;\n  }\n\n  getAllToolPaths(mastraDir: string, toolsPaths: (string | string[])[] = []): (string | string[])[] {\n    // Normalize Windows paths to forward slashes for consistent handling\n    const normalizedMastraDir = slash(mastraDir);\n\n    // Prepare default tools paths with glob patterns\n    const defaultToolsPath = posix.join(normalizedMastraDir, 'tools/**/*.{js,ts}');\n    const defaultToolsIgnorePaths = [\n      `!${posix.join(normalizedMastraDir, 'tools/**/*.{test,spec}.{js,ts}')}`,\n      `!${posix.join(normalizedMastraDir, 'tools/**/__tests__/**')}`,\n    ];\n\n    // Combine default path with ignore patterns\n    const defaultPaths = [defaultToolsPath, ...defaultToolsIgnorePaths];\n\n    // If no tools paths provided, use only the default paths\n    if (toolsPaths.length === 0) {\n      return [defaultPaths];\n    }\n\n    // If tools paths are provided, add the default paths to ensure standard tools are always included\n    return [...toolsPaths, defaultPaths];\n  }\n\n  async listToolsInputOptions(toolsPaths: (string | string[])[], projectRoot: string = process.cwd()) {\n    const entries = new Map<string, string>();\n\n    for (const toolPath of toolsPaths) {\n      const expandedPaths = await glob(toolPath, {\n        absolute: true,\n        expandDirectories: false,\n      });\n\n      for (const path of expandedPaths) {\n        if (await fsExtra.pathExists(path)) {\n          const fileService = new FileService();\n          const entryFile = fileService.getFirstExistingFile([\n            join(path, 'index.ts'),\n            join(path, 'index.js'),\n            path, // if path itself is a file\n          ]);\n\n          // if it doesn't exist or is a dir skip it. using a dir as a tool will crash the process\n          if (!entryFile || (await stat(entryFile)).isDirectory()) {\n            this.logger.warn('No entry file found, skipping', { path });\n            continue;\n          }\n\n          const normalizedEntryFile = entryFile.replaceAll('\\\\', '/');\n          const relativeEntryFile = relative(projectRoot, entryFile).replaceAll('\\\\', '/');\n          entries.set(relativeEntryFile, normalizedEntryFile);\n        } else {\n          this.logger.warn('Tool path does not exist, skipping', { path });\n        }\n      }\n    }\n\n    return Object.fromEntries(\n      [...entries.entries()]\n        .sort(([first], [second]) => (first < second ? -1 : first > second ? 1 : 0))\n        .map(([relativeEntryFile, entryFile]) => [`tools/${toolIdForEntry(relativeEntryFile)}`, entryFile]),\n    );\n  }\n\n  protected async _bundle(\n    serverFile: string,\n    mastraEntryFile: string,\n    {\n      projectRoot,\n      outputDirectory,\n      enableEsmShim = true,\n    }: {\n      projectRoot: string;\n      outputDirectory: string;\n      enableEsmShim?: boolean;\n    },\n    toolsPaths: (string | string[])[] = [],\n    bundleLocation: string = join(outputDirectory, this.outputDir),\n  ): Promise<void> {\n    const analyzeDir = join(outputDirectory, this.analyzeOutputDir);\n    const additionalEntries = this.getAdditionalEntries();\n\n    const bundlerOptions = await this.getUserBundlerOptions(mastraEntryFile, outputDirectory);\n    const internalBundlerOptions: BundlerOptions = {\n      enableSourcemap: !!bundlerOptions.sourcemap,\n      enableMinify: !!bundlerOptions.minify,\n      externals: bundlerOptions.externals ?? [],\n      enableEsmShim,\n      dynamicPackages: bundlerOptions.dynamicPackages,\n    };\n\n    let analyzedBundleInfo;\n    try {\n      const resolvedToolsPaths = await this.listToolsInputOptions(toolsPaths, projectRoot);\n      analyzedBundleInfo = await analyzeBundle(\n        [serverFile, ...Object.values(additionalEntries), ...Object.values(resolvedToolsPaths)],\n        mastraEntryFile,\n        {\n          outputDir: analyzeDir,\n          projectRoot,\n          platform: this.platform,\n          bundlerOptions: internalBundlerOptions,\n        },\n        this.logger,\n      );\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n\n      if (error instanceof MastraError) {\n        throw error;\n      }\n\n      throw new MastraError(\n        {\n          id: 'DEPLOYER_BUNDLER_ANALYZE_FAILED',\n          text: `Failed to analyze Mastra application: ${message}`,\n          domain: ErrorDomain.DEPLOYER,\n          category: ErrorCategory.SYSTEM,\n        },\n        error,\n      );\n    }\n\n    const { workspaceRoot } = await getWorkspaceInformation({ dir: projectRoot, mastraEntryFile });\n    const sourceDependencyConstraints = await getSourceDependencyConstraints({\n      projectRoot,\n      mastraEntryFile,\n      workspaceRoot,\n    });\n    const dependenciesToInstall = new Map<string, ExternalDependencyInfo>();\n    for (const [dep, depInfo] of analyzedBundleInfo.externalDependencies) {\n      if (analyzedBundleInfo.workspaceMap.has(dep) || !isBareModuleSpecifier(dep)) {\n        continue;\n      }\n\n      dependenciesToInstall.set(dep, applySourceDependencyRange(dep, depInfo, sourceDependencyConstraints));\n    }\n\n    const initialWorkspaceDependencies = new Set<string>();\n    for (const dep of analyzedBundleInfo.dependencies.keys()) {\n      const pkgName = getPackageName(dep);\n      if (pkgName && analyzedBundleInfo.workspaceMap.has(pkgName)) {\n        initialWorkspaceDependencies.add(pkgName);\n      }\n    }\n\n    const transitiveWorkspaceDependencies = collectTransitiveWorkspaceDependencies({\n      workspaceMap: analyzedBundleInfo.workspaceMap,\n      initialDependencies: initialWorkspaceDependencies,\n      logger: this.logger,\n    });\n\n    for (const [dep, packageSpec] of Object.entries(transitiveWorkspaceDependencies.resolutions)) {\n      dependenciesToInstall.set(dep, {\n        version: analyzedBundleInfo.workspaceMap.get(dep)?.version,\n        packageSpec,\n      });\n    }\n\n    try {\n      await this.writePackageJson(\n        join(outputDirectory, this.outputDir),\n        dependenciesToInstall,\n        transitiveWorkspaceDependencies.resolutions,\n      );\n      if (transitiveWorkspaceDependencies.usedWorkspacePackages.size > 0) {\n        await packWorkspaceDependencies({\n          workspaceMap: analyzedBundleInfo.workspaceMap,\n          usedWorkspacePackages: transitiveWorkspaceDependencies.usedWorkspacePackages,\n          bundleOutputDir: join(outputDirectory, this.outputDir),\n          logger: this.logger,\n        });\n      }\n\n      this.logger.info('Bundling Mastra application');\n\n      const inputOptions: InputOptions = await this.getBundlerOptions(\n        serverFile,\n        mastraEntryFile,\n        analyzedBundleInfo,\n        toolsPaths,\n        internalBundlerOptions,\n        additionalEntries,\n        projectRoot,\n      );\n\n      const bundler = await this.createBundler(\n        {\n          ...inputOptions,\n          logLevel: inputOptions.logLevel === 'silent' ? 'warn' : inputOptions.logLevel,\n          onwarn: warning => {\n            if (warning.code === 'CIRCULAR_DEPENDENCY') {\n              if (warning.ids?.[0]?.includes('node_modules')) {\n                return;\n              }\n\n              this.logger.warn('Circular dependency found', {\n                dependency: warning.message.replace('Circular dependency: ', ''),\n              });\n            }\n          },\n        },\n        {\n          dir: bundleLocation,\n          manualChunks: {\n            mastra: ['#mastra'],\n          },\n          sourcemap: internalBundlerOptions.enableSourcemap,\n        },\n      );\n\n      await bundler.write();\n      const toolImports: string[] = [];\n      const toolsExports: string[] = [];\n      Array.from(Object.keys(inputOptions.input || {}))\n        .filter(key => key.startsWith('tools/'))\n        .forEach((key, index) => {\n          const toolExport = `tool${index}`;\n          toolImports.push(`import * as ${toolExport} from './${key}.mjs';`);\n          toolsExports.push(toolExport);\n        });\n\n      await writeFile(\n        join(bundleLocation, 'tools.mjs'),\n        `${toolImports.join('\\n')}\n\nexport const tools = [${toolsExports.join(', ')}]`,\n      );\n      this.logger.info('Bundling Mastra done');\n\n      this.logger.info('Copying public files');\n      await this.copyPublic(dirname(mastraEntryFile), outputDirectory);\n      this.logger.info('Done copying public files');\n\n      // For Software Factory projects, write a deterministic deployment marker\n      // after public assets (including the SPA) have been copied.\n      if (analyzedBundleInfo.projectType === 'factory') {\n        await this.writeFactoryMarker(outputDirectory);\n      }\n\n      this.logger.info('Copying .npmrc file');\n      await this.copyDOTNPMRC({ outputDirectory, rootDir: projectRoot });\n\n      this.logger.info('Done copying .npmrc file');\n\n      if (shouldSkipInstall()) {\n        this.logger.info('Skipping dependency installation (MASTRA_BUILD_SKIP_INSTALL set)');\n      } else {\n        this.logger.info('Installing dependencies');\n        await this.installDependencies(outputDirectory, projectRoot, transitiveWorkspaceDependencies.resolutions);\n        this.logger.info('Done installing dependencies');\n\n        if (Object.keys(transitiveWorkspaceDependencies.resolutions).length === 0) {\n          this.logger.info('Generating package-lock.json for deploy');\n          await this.generateNpmLockfile(join(outputDirectory, this.outputDir));\n          this.logger.info('Done generating package-lock.json');\n        } else {\n          this.logger.warn(\n            'Skipping package-lock.json generation because the output contains packed workspace dependencies',\n          );\n        }\n      }\n    } catch (error) {\n      if (\n        error instanceof MastraError &&\n        (error.id === 'DEPLOYER_BUNDLER_FACTORY_UI_MISSING' || error.id === 'DEPLOYER_PNPM_IGNORED_BUILDS')\n      ) {\n        throw error;\n      }\n\n      const message = error instanceof Error ? error.message : String(error);\n      throw new MastraError(\n        {\n          id: 'DEPLOYER_BUNDLER_BUNDLE_STAGE_FAILED',\n          text: `Failed during bundler bundle stage: ${message}`,\n          domain: ErrorDomain.DEPLOYER,\n          category: ErrorCategory.SYSTEM,\n        },\n        error,\n      );\n    }\n  }\n\n  async lint(_entryFile: string, outputDirectory: string, toolsPaths: (string | string[])[]): Promise<void> {\n    const toolsInputOptions = await this.listToolsInputOptions(toolsPaths, dirname(outputDirectory));\n    const toolsLength = Object.keys(toolsInputOptions).length;\n    if (toolsLength > 0) {\n      this.logger.info('Found tools', { count: toolsLength });\n    }\n  }\n}\n"],"mappings":"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"}