@mastra/deployer 1.82.0 → 1.83.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/{analyze-DNnGuzqf.cjs → analyze-DJ-g40iE.cjs} +2 -2
  2. package/dist/{analyze-DNnGuzqf.cjs.map → analyze-DJ-g40iE.cjs.map} +1 -1
  3. package/dist/{analyze-CW9fEusV.js → analyze-fYsu753O.js} +3 -24
  4. package/dist/{analyze-CW9fEusV.js.map → analyze-fYsu753O.js.map} +1 -1
  5. package/dist/build/analyze.cjs +1 -1
  6. package/dist/build/analyze.js +1 -1
  7. package/dist/build/index.cjs +4 -4
  8. package/dist/build/index.js +4 -4
  9. package/dist/build/shared/extract-mastra-option.d.ts.map +1 -1
  10. package/dist/{build-Cc9X11g7.cjs → build-DJrBURvF.cjs} +5 -5
  11. package/dist/{build-Cc9X11g7.cjs.map → build-DJrBURvF.cjs.map} +1 -1
  12. package/dist/{build-PqRB5M-E.js → build-dIfHk6xF.js} +5 -5
  13. package/dist/{build-PqRB5M-E.js.map → build-dIfHk6xF.js.map} +1 -1
  14. package/dist/bundler/index.cjs +1 -1
  15. package/dist/bundler/index.d.ts.map +1 -1
  16. package/dist/bundler/index.js +1 -1
  17. package/dist/{bundler-DRlNM9-F.js → bundler-DBj7Xv0j.js} +7 -6
  18. package/dist/bundler-DBj7Xv0j.js.map +1 -0
  19. package/dist/{bundler-8GO8sXwa.cjs → bundler-gVxl78M9.cjs} +7 -6
  20. package/dist/bundler-gVxl78M9.cjs.map +1 -0
  21. package/dist/{bundlerOptions-ScfCrul-.js → bundlerOptions-CklrCRoZ.js} +4 -3
  22. package/dist/{bundlerOptions-ScfCrul-.js.map → bundlerOptions-CklrCRoZ.js.map} +1 -1
  23. package/dist/{bundlerOptions-CPMQkWfY.cjs → bundlerOptions-DxMLiEfQ.cjs} +4 -3
  24. package/dist/{bundlerOptions-CPMQkWfY.cjs.map → bundlerOptions-DxMLiEfQ.cjs.map} +1 -1
  25. package/dist/docs/SKILL.md +1 -1
  26. package/dist/docs/assets/SOURCE_MAP.json +33 -2
  27. package/dist/index.cjs +4 -4
  28. package/dist/index.js +4 -4
  29. package/dist/rolldown-runtime-CO0Nlsmt.js +23 -0
  30. package/dist/server/index.cjs +37 -12
  31. package/dist/server/index.cjs.map +1 -1
  32. package/dist/server/index.d.ts +2 -2
  33. package/dist/server/index.js +37 -12
  34. package/dist/server/index.js.map +1 -1
  35. package/dist/services/deps.d.ts.map +1 -1
  36. package/dist/services/index.cjs +1 -1
  37. package/dist/services/index.js +1 -1
  38. package/dist/{services-DbgqQ_yI.cjs → services-B8neClCI.cjs} +52 -5
  39. package/dist/services-B8neClCI.cjs.map +1 -0
  40. package/dist/{services-PA2YqqQJ.js → services-BKh9M2E5.js} +51 -5
  41. package/dist/services-BKh9M2E5.js.map +1 -0
  42. package/package.json +9 -6
  43. package/dist/bundler-8GO8sXwa.cjs.map +0 -1
  44. package/dist/bundler-DRlNM9-F.js.map +0 -1
  45. package/dist/services-DbgqQ_yI.cjs.map +0 -1
  46. package/dist/services-PA2YqqQJ.js.map +0 -1
  47. /package/dist/_types/{@hono_node-server@2.1.5 → @hono_node-server@2.1.6}/dist/index.d.mts +0 -0
  48. /package/dist/_types/{@hono_node-server@2.1.5 → @hono_node-server@2.1.6}/package.json +0 -0
  49. /package/dist/_types/{@mastra_hono@1.7.24 → @mastra_hono@1.7.25-alpha.0}/dist/auth-middleware.d.ts +0 -0
  50. /package/dist/_types/{@mastra_hono@1.7.24 → @mastra_hono@1.7.25-alpha.0}/dist/browser-stream/index.d.ts +0 -0
  51. /package/dist/_types/{@mastra_hono@1.7.24 → @mastra_hono@1.7.25-alpha.0}/dist/index.d.ts +0 -0
  52. /package/dist/_types/{@mastra_hono@1.7.24 → @mastra_hono@1.7.25-alpha.0}/package.json +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundler-DBj7Xv0j.js","names":["createBundlerUtil"],"sources":["../../_internals/deployer/dist/index.js","../src/bundler/index.ts"],"sourcesContent":["import { readFile } from \"fs/promises\";\nimport { parse } from \"dotenv\";\n// src/bundler.ts\n/**\n* Reads dotenv files in order into one map; values from later files override earlier ones.\n*/\nasync function loadEnvVars(files) {\n\tconst envVars = /* @__PURE__ */ new Map();\n\tfor (const file of files) {\n\t\tconst content = await readFile(file, \"utf-8\");\n\t\tconst config = parse(content);\n\t\tObject.entries(config).forEach(([key, value]) => {\n\t\t\tenvVars.set(key, value);\n\t\t});\n\t}\n\treturn envVars;\n}\nexport { loadEnvVars };\n\n//# sourceMappingURL=index.js.map","import { existsSync } from 'node:fs';\nimport { readFile, stat, writeFile } from 'node:fs/promises';\nimport { dirname, join, posix, relative, resolve } from 'node:path';\nimport { MastraBase } from '@internal/core/base';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@internal/core/error';\nimport { loadEnvVars } from '@internal/deployer';\nimport type { BundlerConfig, IBundler } from '@internal/deployer';\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, getUnresolvedWorkspaceImport } from '../build/bundler';\nimport { getBundlerOptions } from '../build/bundlerOptions';\nimport type { ExternalDependencyInfo, InternalBundlerOptions } 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\nasync function toolIdForEntry(relativeEntryFile: string): Promise<string> {\n const digest = Buffer.from(\n await globalThis.crypto.subtle.digest('SHA-256', new TextEncoder().encode(relativeEntryFile)),\n ).toString('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 MastraBase implements IBundler {\n protected analyzeOutputDir = '.build';\n protected outputDir = 'output';\n protected platform: BundlerPlatform = 'node';\n protected defaultExternalsPreset = false;\n private configEntryFile?: string;\n\n constructor(name: string, component: 'BUNDLER' | 'DEPLOYER' = 'BUNDLER') {\n super({ name, component });\n }\n\n /**\n * The CLI bundles a generated wrapper when the project has file-based agents. The\n * wrapper only re-exports `mastra`, so option extraction can't find the\n * `new Mastra({...})` call there and must read the user's entry instead.\n */\n setConfigEntryFile(entryFile: string | undefined): void {\n this.configEntryFile = entryFile;\n }\n\n async loadEnvVars(): Promise<Map<string, string>> {\n return loadEnvVars(await this.getEnvFiles());\n }\n\n abstract getEnvFiles(): Promise<string[]>;\n abstract bundle(\n entryFile: string,\n outputDirectory: string,\n { toolsPaths, projectRoot }: { toolsPaths: (string | string[])[]; projectRoot: string },\n ): Promise<void>;\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(mastraEntryFile: string, outputDirectory: string): Promise<BundlerConfig> {\n const defaultBundlerOptions: BundlerConfig = {\n externals: [],\n sourcemap: false,\n transpilePackages: [],\n [IS_DEFAULT]: true,\n } as const;\n\n try {\n const bundlerOptions = await getBundlerOptions(this.configEntryFile ?? mastraEntryFile, outputDirectory);\n\n return bundlerOptions ?? defaultBundlerOptions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.warn(`Failed to load the bundler options, using the defaults instead: ${message}`, { 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 pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'],\n ) {\n const deps = new DepsService(rootDir);\n deps.__setLogger(this.logger);\n const installOptions = {\n dir: join(outputDirectory, this.outputDir),\n pnpmOverrides,\n pnpmNodeLinker: this.pnpmNodeLinker,\n pnpmWorkspaceSettings,\n };\n\n this.logger.info('Updating dependency lockfile and installing dependencies');\n await deps.install(installOptions);\n this.logger.info('Done updating dependency lockfile and installing dependencies');\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 }\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, externalsPreset, alias }: InternalBundlerOptions,\n additionalEntries: Record<string, string>,\n projectRoot: string,\n ) {\n const { workspaceRoot } = await getWorkspaceInformation({ mastraEntryFile });\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 || !!externalsPreset,\n explicitExternals: Array.isArray(externals) ? externals : [],\n alias,\n },\n );\n const toolsInputOptions = await this.listToolsInputOptions(toolsPaths, projectRoot);\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 await Promise.all(\n [...entries.entries()]\n .sort(([first], [second]) => (first < second ? -1 : first > second ? 1 : 0))\n .map(\n async ([relativeEntryFile, entryFile]): Promise<[string, string]> => [\n `tools/${await toolIdForEntry(relativeEntryFile)}`,\n entryFile,\n ],\n ),\n ),\n );\n }\n\n protected async _bundle(\n serverFile: string,\n mastraEntryFile: string,\n {\n projectRoot,\n outputDirectory,\n enableEsmShim = true,\n alias = {},\n }: {\n projectRoot: string;\n outputDirectory: string;\n enableEsmShim?: boolean;\n alias?: Record<string, string>;\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 const closestPkgJson = pkg.up({ cwd: dirname(mastraEntryFile) });\n const entryProjectRoot = closestPkgJson ? dirname(closestPkgJson) : projectRoot;\n\n const bundlerOptions = await this.getUserBundlerOptions(mastraEntryFile, outputDirectory);\n const resolvedAlias = Object.fromEntries(\n Object.entries(alias).map(([specifier, target]) => [\n specifier,\n target.startsWith('.') ? resolve(projectRoot, target) : target,\n ]),\n );\n const internalBundlerOptions: InternalBundlerOptions = {\n enableSourcemap: !!bundlerOptions.sourcemap,\n enableMinify: !!bundlerOptions.minify,\n externals: bundlerOptions.externals ?? [],\n externalsPreset: this.defaultExternalsPreset && bundlerOptions.externals !== false,\n enableEsmShim,\n alias: resolvedAlias,\n dynamicPackages: bundlerOptions.dynamicPackages,\n };\n\n let analyzedBundleInfo;\n try {\n const resolvedToolsPaths = await this.listToolsInputOptions(toolsPaths, entryProjectRoot);\n analyzedBundleInfo = await analyzeBundle(\n [serverFile, ...Object.values(additionalEntries), ...Object.values(resolvedToolsPaths)],\n mastraEntryFile,\n {\n outputDir: analyzeDir,\n projectRoot: entryProjectRoot,\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: entryProjectRoot,\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 // Workspace packages in `analyzedBundleInfo.dependencies` are compiled into the bundle, so only\n // the ones still imported at runtime need a tarball and an install (#28303).\n const initialWorkspaceDependencies = new Set<string>();\n for (const dep of analyzedBundleInfo.externalDependencies.keys()) {\n const pkgName = getPackageName(dep);\n if (pkgName && analyzedBundleInfo.workspaceMap.has(pkgName)) {\n initialWorkspaceDependencies.add(pkgName);\n }\n }\n\n const transitiveWorkspaceDependencies = await 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 entryProjectRoot,\n );\n\n const unresolvedWorkspaceImports: Array<{ source: string }> = [];\n\n const bundler = await this.createBundler(\n {\n ...inputOptions,\n logLevel: inputOptions.logLevel === 'silent' ? 'warn' : inputOptions.logLevel,\n onwarn: warning => {\n const unresolvedWorkspaceDep = getUnresolvedWorkspaceImport(\n warning as { code: string; source?: string; id?: string },\n analyzedBundleInfo.workspaceMap,\n );\n if (unresolvedWorkspaceDep) {\n unresolvedWorkspaceImports.push({ source: unresolvedWorkspaceDep });\n }\n\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\n if (unresolvedWorkspaceImports.length > 0) {\n const importList = unresolvedWorkspaceImports.map(i => ` - ${i.source}`).join('\\n');\n throw new MastraError({\n id: 'DEPLOYER_BUNDLER_UNRESOLVED_WORKSPACE_IMPORT',\n text: `Workspace imports could not be resolved during bundling:\\n${importList}\\n\\nThis means the analyzer did not capture these workspace subpath imports during the analysis phase. Try adding the package as a direct dependency of the app, or check the workspace configuration.`,\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.SYSTEM,\n });\n }\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 await this.installDependencies(\n outputDirectory,\n projectRoot,\n transitiveWorkspaceDependencies.resolutions,\n bundlerOptions.pnpmWorkspaceSettings,\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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"}
@@ -1,10 +1,10 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-Bc0pwXKd.cjs");
2
- const require_services = require("./services-DbgqQ_yI.cjs");
2
+ const require_services = require("./services-B8neClCI.cjs");
3
3
  const require_error = require("./error-CR4whExy.cjs");
4
- const require_analyze = require("./analyze-DNnGuzqf.cjs");
5
- const require_utils = require("./utils-CDNA_ewa.cjs");
4
+ const require_analyze = require("./analyze-DJ-g40iE.cjs");
6
5
  const require_bundler = require("./bundler-UKxJsU8E.cjs");
7
- const require_bundlerOptions = require("./bundlerOptions-CPMQkWfY.cjs");
6
+ const require_bundlerOptions = require("./bundlerOptions-DxMLiEfQ.cjs");
7
+ const require_utils = require("./utils-CDNA_ewa.cjs");
8
8
  let fs = require("fs");
9
9
  let fs_promises = require("fs/promises");
10
10
  let path = require("path");
@@ -251,7 +251,8 @@ var Bundler = class extends require_services.MastraBase {
251
251
  try {
252
252
  return await require_bundlerOptions.getBundlerOptions(this.configEntryFile ?? mastraEntryFile, outputDirectory) ?? defaultBundlerOptions;
253
253
  } catch (error) {
254
- this.logger.debug("Failed to get bundler options, sourcemap will be disabled", { error });
254
+ const message = error instanceof Error ? error.message : String(error);
255
+ this.logger.warn(`Failed to load the bundler options, using the defaults instead: ${message}`, { error });
255
256
  }
256
257
  return defaultBundlerOptions;
257
258
  }
@@ -555,4 +556,4 @@ Object.defineProperty(exports, "isRegistryVersionSpec", {
555
556
  }
556
557
  });
557
558
 
558
- //# sourceMappingURL=bundler-8GO8sXwa.cjs.map
559
+ //# sourceMappingURL=bundler-gVxl78M9.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundler-gVxl78M9.cjs","names":["readFile","parse","readJSON","pkg","dirname","join","readFile","getPackageName","MastraBase","emptyDir","ensureDir","writeFile","createBundlerUtil","getBundlerOptions","analyzeBundle","DepsService","stat","copy","existsSync","MastraError","ErrorDomain","ErrorCategory","getWorkspaceInformation","getInputOptions","virtual","slash","posix","glob","path","fsExtra","FileService","relative","resolve","isBareModuleSpecifier","collectTransitiveWorkspaceDependencies","packWorkspaceDependencies","getUnresolvedWorkspaceImport","shouldSkipInstall"],"sources":["../../_internals/deployer/dist/index.js","../src/bundler/index.ts"],"sourcesContent":["import { readFile } from \"fs/promises\";\nimport { parse } from \"dotenv\";\n// src/bundler.ts\n/**\n* Reads dotenv files in order into one map; values from later files override earlier ones.\n*/\nasync function loadEnvVars(files) {\n\tconst envVars = /* @__PURE__ */ new Map();\n\tfor (const file of files) {\n\t\tconst content = await readFile(file, \"utf-8\");\n\t\tconst config = parse(content);\n\t\tObject.entries(config).forEach(([key, value]) => {\n\t\t\tenvVars.set(key, value);\n\t\t});\n\t}\n\treturn envVars;\n}\nexport { loadEnvVars };\n\n//# sourceMappingURL=index.js.map","import { existsSync } from 'node:fs';\nimport { readFile, stat, writeFile } from 'node:fs/promises';\nimport { dirname, join, posix, relative, resolve } from 'node:path';\nimport { MastraBase } from '@internal/core/base';\nimport { MastraError, ErrorDomain, ErrorCategory } from '@internal/core/error';\nimport { loadEnvVars } from '@internal/deployer';\nimport type { BundlerConfig, IBundler } from '@internal/deployer';\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, getUnresolvedWorkspaceImport } from '../build/bundler';\nimport { getBundlerOptions } from '../build/bundlerOptions';\nimport type { ExternalDependencyInfo, InternalBundlerOptions } 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\nasync function toolIdForEntry(relativeEntryFile: string): Promise<string> {\n const digest = Buffer.from(\n await globalThis.crypto.subtle.digest('SHA-256', new TextEncoder().encode(relativeEntryFile)),\n ).toString('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 MastraBase implements IBundler {\n protected analyzeOutputDir = '.build';\n protected outputDir = 'output';\n protected platform: BundlerPlatform = 'node';\n protected defaultExternalsPreset = false;\n private configEntryFile?: string;\n\n constructor(name: string, component: 'BUNDLER' | 'DEPLOYER' = 'BUNDLER') {\n super({ name, component });\n }\n\n /**\n * The CLI bundles a generated wrapper when the project has file-based agents. The\n * wrapper only re-exports `mastra`, so option extraction can't find the\n * `new Mastra({...})` call there and must read the user's entry instead.\n */\n setConfigEntryFile(entryFile: string | undefined): void {\n this.configEntryFile = entryFile;\n }\n\n async loadEnvVars(): Promise<Map<string, string>> {\n return loadEnvVars(await this.getEnvFiles());\n }\n\n abstract getEnvFiles(): Promise<string[]>;\n abstract bundle(\n entryFile: string,\n outputDirectory: string,\n { toolsPaths, projectRoot }: { toolsPaths: (string | string[])[]; projectRoot: string },\n ): Promise<void>;\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(mastraEntryFile: string, outputDirectory: string): Promise<BundlerConfig> {\n const defaultBundlerOptions: BundlerConfig = {\n externals: [],\n sourcemap: false,\n transpilePackages: [],\n [IS_DEFAULT]: true,\n } as const;\n\n try {\n const bundlerOptions = await getBundlerOptions(this.configEntryFile ?? mastraEntryFile, outputDirectory);\n\n return bundlerOptions ?? defaultBundlerOptions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger.warn(`Failed to load the bundler options, using the defaults instead: ${message}`, { 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 pnpmWorkspaceSettings?: BundlerConfig['pnpmWorkspaceSettings'],\n ) {\n const deps = new DepsService(rootDir);\n deps.__setLogger(this.logger);\n const installOptions = {\n dir: join(outputDirectory, this.outputDir),\n pnpmOverrides,\n pnpmNodeLinker: this.pnpmNodeLinker,\n pnpmWorkspaceSettings,\n };\n\n this.logger.info('Updating dependency lockfile and installing dependencies');\n await deps.install(installOptions);\n this.logger.info('Done updating dependency lockfile and installing dependencies');\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 }\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, externalsPreset, alias }: InternalBundlerOptions,\n additionalEntries: Record<string, string>,\n projectRoot: string,\n ) {\n const { workspaceRoot } = await getWorkspaceInformation({ mastraEntryFile });\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 || !!externalsPreset,\n explicitExternals: Array.isArray(externals) ? externals : [],\n alias,\n },\n );\n const toolsInputOptions = await this.listToolsInputOptions(toolsPaths, projectRoot);\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 await Promise.all(\n [...entries.entries()]\n .sort(([first], [second]) => (first < second ? -1 : first > second ? 1 : 0))\n .map(\n async ([relativeEntryFile, entryFile]): Promise<[string, string]> => [\n `tools/${await toolIdForEntry(relativeEntryFile)}`,\n entryFile,\n ],\n ),\n ),\n );\n }\n\n protected async _bundle(\n serverFile: string,\n mastraEntryFile: string,\n {\n projectRoot,\n outputDirectory,\n enableEsmShim = true,\n alias = {},\n }: {\n projectRoot: string;\n outputDirectory: string;\n enableEsmShim?: boolean;\n alias?: Record<string, string>;\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 const closestPkgJson = pkg.up({ cwd: dirname(mastraEntryFile) });\n const entryProjectRoot = closestPkgJson ? dirname(closestPkgJson) : projectRoot;\n\n const bundlerOptions = await this.getUserBundlerOptions(mastraEntryFile, outputDirectory);\n const resolvedAlias = Object.fromEntries(\n Object.entries(alias).map(([specifier, target]) => [\n specifier,\n target.startsWith('.') ? resolve(projectRoot, target) : target,\n ]),\n );\n const internalBundlerOptions: InternalBundlerOptions = {\n enableSourcemap: !!bundlerOptions.sourcemap,\n enableMinify: !!bundlerOptions.minify,\n externals: bundlerOptions.externals ?? [],\n externalsPreset: this.defaultExternalsPreset && bundlerOptions.externals !== false,\n enableEsmShim,\n alias: resolvedAlias,\n dynamicPackages: bundlerOptions.dynamicPackages,\n };\n\n let analyzedBundleInfo;\n try {\n const resolvedToolsPaths = await this.listToolsInputOptions(toolsPaths, entryProjectRoot);\n analyzedBundleInfo = await analyzeBundle(\n [serverFile, ...Object.values(additionalEntries), ...Object.values(resolvedToolsPaths)],\n mastraEntryFile,\n {\n outputDir: analyzeDir,\n projectRoot: entryProjectRoot,\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: entryProjectRoot,\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 // Workspace packages in `analyzedBundleInfo.dependencies` are compiled into the bundle, so only\n // the ones still imported at runtime need a tarball and an install (#28303).\n const initialWorkspaceDependencies = new Set<string>();\n for (const dep of analyzedBundleInfo.externalDependencies.keys()) {\n const pkgName = getPackageName(dep);\n if (pkgName && analyzedBundleInfo.workspaceMap.has(pkgName)) {\n initialWorkspaceDependencies.add(pkgName);\n }\n }\n\n const transitiveWorkspaceDependencies = await 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 entryProjectRoot,\n );\n\n const unresolvedWorkspaceImports: Array<{ source: string }> = [];\n\n const bundler = await this.createBundler(\n {\n ...inputOptions,\n logLevel: inputOptions.logLevel === 'silent' ? 'warn' : inputOptions.logLevel,\n onwarn: warning => {\n const unresolvedWorkspaceDep = getUnresolvedWorkspaceImport(\n warning as { code: string; source?: string; id?: string },\n analyzedBundleInfo.workspaceMap,\n );\n if (unresolvedWorkspaceDep) {\n unresolvedWorkspaceImports.push({ source: unresolvedWorkspaceDep });\n }\n\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\n if (unresolvedWorkspaceImports.length > 0) {\n const importList = unresolvedWorkspaceImports.map(i => ` - ${i.source}`).join('\\n');\n throw new MastraError({\n id: 'DEPLOYER_BUNDLER_UNRESOLVED_WORKSPACE_IMPORT',\n text: `Workspace imports could not be resolved during bundling:\\n${importList}\\n\\nThis means the analyzer did not capture these workspace subpath imports during the analysis phase. Try adding the package as a direct dependency of the app, or check the workspace configuration.`,\n domain: ErrorDomain.DEPLOYER,\n category: ErrorCategory.SYSTEM,\n });\n }\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 await this.installDependencies(\n outputDirectory,\n projectRoot,\n transitiveWorkspaceDependencies.resolutions,\n bundlerOptions.pnpmWorkspaceSettings,\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":";;;;;;;;;;;;;;;;;;;;;;AAMA,eAAe,YAAY,OAAO;CACjC,MAAM,0BAA0B,IAAI,IAAI;CACxC,KAAK,MAAM,QAAQ,OAAO;EACzB,MAAM,UAAU,OAAA,GAAMA,YAAAA,SAAAA,CAAS,MAAM,OAAO;EAC5C,MAAM,UAAA,GAASC,OAAAA,MAAAA,CAAM,OAAO;EAC5B,OAAO,QAAQ,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;GAChD,QAAQ,IAAI,KAAK,KAAK;EACvB,CAAC;CACF;CACA,OAAO;AACR;;ACaA,MAAa,aAAa,OAAO,YAAY;AAE7C,MAAM,mBAAmB;;AAEzB,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,yBAAyB;;AAE/B,MAAM,2BAA2B;;AAEjC,MAAM,0BAA0B;AAgBhC,MAAM,kBAAkB,UAA2C;CACjE,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAC5D,OAAO,CAAC;CAGV,OAAO,OAAO,YACZ,OAAO,QAAQ,KAAK,CAAC,CAAC,QAAQ,UAAqC,OAAO,MAAM,OAAO,QAAQ,CACjG;AACF;;;;;;;;;;;AAYA,MAAa,yBAAyB,SAA0B;CAC9D,IAAI,yBAAyB,KAAK,IAAI,KAAK,uBAAuB,KAAK,IAAI,GACzE,OAAO;CAGT,IAAI,KAAK,WAAW,gBAAgB,GAAG;EACrC,MAAM,QAAQ,KAAK,MAAM,CAAuB;EAEhD,MAAM,iBAAiB,MAAM,YAAY,GAAG;EAC5C,MAAM,OAAO,iBAAiB,IAAI,MAAM,MAAM,GAAG,cAAc,IAAI;EACnE,MAAM,QAAQ,iBAAiB,IAAI,MAAM,MAAM,iBAAiB,CAAC,IAAI;EAErE,OAAO,qBAAqB,KAAK,IAAI,KAAK,sBAAsB,KAAK;CACvE;CAEA,OAAO,sBAAsB,KAAK,IAAI;AACxC;;;;;;;;AASA,MAAM,wBAAwB,SAA0B;CACtD,MAAM,QAAQ,KAAK,WAAW,gBAAgB,WACnC;EACL,MAAM,QAAQ,KAAK,MAAM,CAAuB;EAChD,MAAM,iBAAiB,MAAM,YAAY,GAAG;EAC5C,OAAO,iBAAiB,IAAI,MAAM,MAAM,iBAAiB,CAAC,IAAI;CAChE,EAAA,CAAG,IACH;CAEJ,OAAO,KAAK,KAAK,KAAK,KAAK,CAAC,wBAAwB,KAAK,KAAK;AAChE;AAEA,MAAM,eAAe,OAAO,iBAAmF;CAC7G,IAAI,CAAC,cACH;CAGF,IAAI;EACF,MAAM,WAAW,OAAA,GAAMC,aAAAA,SAAAA,CAAS,YAAY;EAC5C,OAAO,YAAY,OAAO,aAAa,WAAW,WAAW,KAAA;CAC/D,QAAQ;EAEN;CACF;AACF;;AAGA,MAAM,8BAA8B,UAA+C,WAAwB;CACzG,MAAM,cAAc,UAAU;CAC9B,MAAM,UAAU;EACd,UAAU;EACV,UAAU;EACV,eAAe,OAAO,gBAAgB,WAAY,YAAwC,YAAY,KAAA;CACxG;CAEA,KAAK,MAAM,UAAU,SACnB,IAAI,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,GAC/D,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAClC,OAAO,IAAI,GAAG;AAItB;;;;;;;;AASA,MAAM,mCAAmC,QAAgB,WAAwB;CAC/E,MAAM,QAAQ,OAAO,MAAM,OAAO;CAClC,IAAI,kBAAkB;CAEtB,KAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,MAAM,KAAK,IAAI,GAAG;GACpB,kBAAkB,kBAAkB,KAAK,IAAI;GAC7C;EACF;EAEA,IAAI,CAAC,iBACH;EAGF,MAAM,MAAM,mDAAmD,KAAK,IAAI;EACxE,IAAI,KACF,OAAO,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,GAAA,CAAI,KAAK,CAAC;CAExD;AACF;;;;;;;;;;;;;AAcA,MAAa,iCAAiC,OAAO,EACnD,aACA,iBACA,oBAK0C;CAC1C,MAAM,gBAAgB,CAACC,iBAAI,GAAG,EAAE,KAAK,YAAY,CAAC,GAAGA,iBAAI,GAAG,EAAE,MAAA,GAAKC,KAAAA,QAAAA,CAAQ,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,QAC7F,OAAO,OAAO,YAA6B,CAAC,CAAC,SAAS,QAAQ,QAAQ,KAAK,MAAM,KACpF;CAEA,IAAI,eACF,cAAc,MAAA,GAAKC,KAAAA,KAAAA,CAAK,eAAe,cAAc,CAAC;CAGxD,MAAM,0CAA0B,IAAI,IAAY;CAChD,IAAI;CAEJ,KAAK,MAAM,gBAAgB,eAAe;EACxC,MAAM,WAAW,MAAM,aAAa,YAAY;EAChD,IAAI,CAAC,UACH;EAIF,iBAAiB,eAAe,SAAS,YAAY;EACrD,2BAA2B,UAAU,uBAAuB;CAC9D;CAEA,IAAI,eACF,IAAI;EACF,gCACE,OAAA,GAAMC,YAAAA,SAAAA,EAAAA,GAASD,KAAAA,KAAAA,CAAK,eAAe,qBAAqB,GAAG,OAAO,GAClE,uBACF;CACF,QAAQ,CAER;CAGF,OAAO;EAAE,cAAc,gBAAgB,CAAC;EAAG;CAAwB;AACrE;AAEA,MAAM,0BACJ,aACA,mBACuB;CACvB,MAAM,QAAQ,CAAC,gBAAgBE,cAAAA,eAAe,cAAc,CAAC,CAAC,CAAC,QAC5D,MAAM,OAAO,QAAwB,CAAC,CAAC,QAAQ,IAAI,QAAQ,IAAI,MAAM,KACxE;CAEA,KAAK,MAAM,QAAQ,OAEjB,IAAI,YAAY,wBAAwB,IAAI,IAAI,GAC9C;CAIJ,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,YAAY,YAAY,aAAa,SAAS,GAAA,CAAI,KAAK;EAC7D,IAAI,YAAY,qBAAqB,QAAQ,KAAK,sBAAsB,QAAQ,GAC9E,OAAO;CAEX;AAGF;;;;;;;;AASA,MAAa,8BACX,gBACA,gBACA,gBAC2B;CAC3B,MAAM,WAAW,uBAAuB,aAAa,cAAc;CACnE,IAAI,CAAC,UACH,OAAO;CAGT,IAAI,SAAS,WAAW,gBAAgB,GACtC,OAAO;EAAE,GAAG;EAAgB,aAAa;CAAS;CAKpD,IAAI,eAAe,aACjB,OAAO;CAGT,OAAO;EAAE,GAAG;EAAgB,SAAS;CAAS;AAChD;AAEA,eAAe,eAAe,mBAA4C;CACxE,MAAM,SAAS,OAAO,KACpB,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,IAAI,YAAY,CAAC,CAAC,OAAO,iBAAiB,CAAC,CAC9F,CAAC,CAAC,SAAS,KAAK;CAChB,OAAO,GAAG,OAAO,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,MAAM,GAAG,EAAE,EAAE,GAAG,OAAO,MAAM,IAAI,EAAE,EAAE,GAAG,OAAO,MAAM,IAAI,EAAE,EAAE,GAAG,OAAO,MAAM,IAAI,EAAE;AAC5H;AAEA,IAAsB,UAAtB,cAAsCC,iBAAAA,WAA+B;CACnE,mBAA6B;CAC7B,YAAsB;CACtB,WAAsC;CACtC,yBAAmC;CACnC;CAEA,YAAY,MAAc,YAAoC,WAAW;EACvE,MAAM;GAAE;GAAM;EAAU,CAAC;CAC3B;;;;;;CAOA,mBAAmB,WAAqC;EACtD,KAAK,kBAAkB;CACzB;CAEA,MAAM,cAA4C;EAChD,OAAO,YAAY,MAAM,KAAK,YAAY,CAAC;CAC7C;CASA,MAAM,QAAQ,iBAAwC;EAEpD,OAAA,GAAMC,aAAAA,SAAAA,CAAS,eAAe;EAE9B,OAAA,GAAMC,aAAAA,UAAAA,EAAAA,GAAUL,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,gBAAgB,CAAC;EAC5D,OAAA,GAAMK,aAAAA,UAAAA,EAAAA,GAAUL,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,SAAS,CAAC;CACvD;CAEA,MAAM,iBACJ,iBACA,cACA,aACA;EACA,KAAK,OAAO,MAAM,gCAAgC;EAElD,OAAA,GAAMK,aAAAA,UAAAA,CAAU,eAAe;EAC/B,MAAM,WAAA,GAAUL,KAAAA,KAAAA,CAAK,iBAAiB,cAAc;EAEpD,MAAM,kCAAkB,IAAI,IAAI;EAChC,KAAK,MAAM,CAAC,KAAK,UAAU,aAAa,QAAQ,GAAG;GACjD,MAAM,kBAAkB,OAAO,UAAU,WAAW,QAAS,MAAM,eAAe,MAAM,WAAW;GACnG,IAAI,IAAI,WAAW,GAAG,GAAG;IAEvB,MAAM,YAAY,IAAI,MAAM,GAAG;IAC/B,gBAAgB,IAAI,GAAG,UAAU,GAAG,GAAG,UAAU,MAAM,eAAe;GACxE,OAAO;IAEL,MAAM,UAAU,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM;IACrC,gBAAgB,IAAI,SAAS,eAAe;GAC9C;EACF;EAEA,OAAA,GAAMM,YAAAA,UAAAA,CACJ,SACA,KAAK,UACH;GACE,MAAM;GACN,SAAS;GACT,SAAS;GACT,MAAM;GACN,MAAM;GACN,SAAS,EACP,OAAO,mBACT;GACA,cAAc,OAAO,YAAY,gBAAgB,QAAQ,CAAC;GAC1D,GAAI,OAAO,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,YAAY;EACjE,GACA,MACA,CACF,CACF;CACF;CAEA,cAAwB,cAA4B,eAAyD;EAC3G,OAAOC,gBAAAA,cAAkB,cAAc,aAAa;CACtD;CAEA,MAAgB,sBAAsB,iBAAyB,iBAAiD;EAC9G,MAAM,wBAAuC;GAC3C,WAAW,CAAC;GACZ,WAAW;GACX,mBAAmB,CAAC;IACnB,aAAa;EAChB;EAEA,IAAI;GAGF,OAAO,MAFsBC,uBAAAA,kBAAkB,KAAK,mBAAmB,iBAAiB,eAAe,KAE9E;EAC3B,SAAS,OAAO;GACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GACrE,KAAK,OAAO,KAAK,mEAAmE,WAAW,EAAE,MAAM,CAAC;EAC1G;EAEA,OAAO;CACT;CAEA,MAAgB,QAAQ,OAA0B,YAAoB,iBAAyB;EAC7F,OAAO,MAAMC,gBAAAA,cACV,CAAC,CAAC,CAAc,OAAO,KAAK,GAC7B,YACA;GACE,YAAA,GAAWT,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,gBAAgB;GACtD,aAAa;GACb,UAAU,KAAK;EACjB,GACA,KAAK,MACP;CACF;CAEA;CAEA,uBAAyD;EACvD,OAAO,CAAC;CACV;CAEA,MAAgB,oBACd,iBACA,UAAU,QAAQ,IAAI,GACtB,eACA,uBACA;EACA,MAAM,OAAO,IAAIU,iBAAAA,YAAY,OAAO;EACpC,KAAK,YAAY,KAAK,MAAM;EAC5B,MAAM,iBAAiB;GACrB,MAAA,GAAKV,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,SAAS;GACzC;GACA,gBAAgB,KAAK;GACrB;EACF;EAEA,KAAK,OAAO,KAAK,0DAA0D;EAC3E,MAAM,KAAK,QAAQ,cAAc;EACjC,KAAK,OAAO,KAAK,+DAA+D;CAClF;CAEA,MAAgB,WAAW,WAAmB,iBAAyB;EACrE,MAAM,aAAA,GAAYA,KAAAA,KAAAA,CAAK,WAAW,QAAQ;EAE1C,IAAI;GACF,OAAA,GAAMW,YAAAA,KAAAA,CAAK,SAAS;EACtB,QAAQ;GACN;EACF;EAEA,OAAA,GAAMC,aAAAA,KAAAA,CAAK,YAAA,GAAWZ,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,SAAS,CAAC;CAC7D;CAEA,MAAgB,aAAa,EAC3B,UAAU,QAAQ,IAAI,GACtB,mBAIC;EACD,MAAM,sBAAA,GAAqBA,KAAAA,KAAAA,CAAK,SAAS,QAAQ;EACjD,MAAM,sBAAA,GAAqBA,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,WAAW,QAAQ;EAEzE,IAAI;GACF,OAAA,GAAMW,YAAAA,KAAAA,CAAK,kBAAkB;GAC7B,OAAA,GAAMC,aAAAA,KAAAA,CAAK,oBAAoB,kBAAkB;EACnD,QAAQ,CAAC;CACX;;;;;;CAOA,MAAgB,mBAAmB,iBAAwC;EACzE,MAAM,aAAA,GAAYZ,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,SAAS;EACtD,MAAM,gBAAA,GAAeA,KAAAA,KAAAA,CAAK,WAAW,WAAW,YAAY;EAC5D,IAAI,EAAA,GAACa,GAAAA,WAAAA,CAAW,YAAY,GAC1B,MAAM,IAAIC,cAAAA,YAAY;GACpB,IAAI;GACJ,MAAM;GACN,QAAQC,cAAAA,YAAY;GACpB,UAAUC,cAAAA,cAAc;EAC1B,CAAC;EAEH,OAAA,GAAMV,YAAAA,UAAAA,EAAAA,GACJN,KAAAA,KAAAA,CAAK,WAAW,qBAAqB,GACrC,KAAK,UAAU;GAAE,eAAe;GAAG,aAAa;GAAW,QAAQ,EAAE,IAAI,UAAU;EAAE,GAAG,MAAM,CAAC,CACjG;EACA,KAAK,OAAO,KAAK,wDAAwD;CAC3E;CAEA,MAAgB,kBACd,YACA,iBACA,oBACA,YACA,EAAE,iBAAiB,cAAc,eAAe,WAAW,iBAAiB,SAC5E,mBACA,aACA;EACA,MAAM,EAAE,kBAAkB,MAAMiB,gBAAAA,wBAAwB,EAAE,gBAAgB,CAAC;EAE3E,MAAM,eAA6B,MAAMC,gBAAAA,gBACvC,iBACA,oBACA,KAAK,UACL,EACE,wBAAwB,KAAK,UAAU,YAAY,EACrD,GACA;GACE,WAAW;GACX,QAAQ;GACR;GACA;GACA;GACA,iBAAiB,cAAc,QAAQ,CAAC,CAAC;GACzC,mBAAmB,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC;GAC3D;EACF,CACF;EACA,MAAM,oBAAoB,MAAM,KAAK,sBAAsB,YAAY,WAAW;EAClF,MAAM,cAAsC,CAAC;EAC7C,MAAM,iBAAyC,CAAC;EAChD,MAAM,UAAU;GAAE,OAAO;GAAY,GAAG;EAAkB;EAE1D,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,OAAO,GAChD,IAAI,MAAM,SAAS,IAAI,KAAK,EAAA,GAACL,GAAAA,WAAAA,CAAW,KAAK,GAAG;GAC9C,MAAM,YAAY,SAAS,UAAU,WAAW,UAAU;GAC1D,YAAY,QAAQ;GACpB,eAAe,aAAa;EAC9B,OACE,YAAY,QAAQ;EAIxB,aAAa,QAAQ;GAAE,GAAG;GAAa,GAAG;EAAkB;EAE5D,IAAI,OAAO,KAAK,cAAc,CAAC,CAAC,SAAS,GAAG;GAC1C,IAAI,MAAM,QAAQ,aAAa,OAAO,GACpC,aAAa,QAAQ,SAAA,GAAQM,uBAAAA,QAAAA,CAAQ,cAAc,CAAC;QAEpD,aAAa,UAAU,EAAA,GAACA,uBAAAA,QAAAA,CAAQ,cAAc,CAAC;EAEnD;EAEA,OAAO;CACT;CAEA,gBAAgB,WAAmB,aAAoC,CAAC,GAA0B;EAEhG,MAAM,sBAAsBC,cAAAA,MAAM,SAAS;EAU3C,MAAM,eAAe,CAPIC,KAAAA,MAAM,KAAK,qBAAqB,oBAOpB,GAAG,GAAG,CALzC,IAAIA,KAAAA,MAAM,KAAK,qBAAqB,gCAAgC,KACpE,IAAIA,KAAAA,MAAM,KAAK,qBAAqB,uBAAuB,GAII,CAAC;EAGlE,IAAI,WAAW,WAAW,GACxB,OAAO,CAAC,YAAY;EAItB,OAAO,CAAC,GAAG,YAAY,YAAY;CACrC;CAEA,MAAM,sBAAsB,YAAmC,cAAsB,QAAQ,IAAI,GAAG;EAClG,MAAM,0BAAU,IAAI,IAAoB;EAExC,KAAK,MAAM,YAAY,YAAY;GACjC,MAAM,gBAAgB,OAAA,GAAMC,WAAAA,KAAAA,CAAK,UAAU;IACzC,UAAU;IACV,mBAAmB;GACrB,CAAC;GAED,KAAK,MAAMC,UAAQ,eACjB,IAAI,MAAMC,aAAAA,QAAQ,WAAWD,MAAI,GAAG;IAElC,MAAM,YAAY,IADME,iBAAAA,YACI,CAAC,CAAC,qBAAqB;MACjDzB,GAAAA,KAAAA,KAAAA,CAAKuB,QAAM,UAAU;MACrBvB,GAAAA,KAAAA,KAAAA,CAAKuB,QAAM,UAAU;KACrBA;IACF,CAAC;IAGD,IAAI,CAAC,cAAc,OAAA,GAAMZ,YAAAA,KAAAA,CAAK,SAAS,EAAA,CAAG,YAAY,GAAG;KACvD,KAAK,OAAO,KAAK,iCAAiC,EAAE,MAAA,OAAK,CAAC;KAC1D;IACF;IAEA,MAAM,sBAAsB,UAAU,WAAW,MAAM,GAAG;IAC1D,MAAM,qBAAA,GAAoBe,KAAAA,SAAAA,CAAS,aAAa,SAAS,CAAC,CAAC,WAAW,MAAM,GAAG;IAC/E,QAAQ,IAAI,mBAAmB,mBAAmB;GACpD,OACE,KAAK,OAAO,KAAK,sCAAsC,EAAE,MAAA,OAAK,CAAC;EAGrE;EAEA,OAAO,OAAO,YACZ,MAAM,QAAQ,IACZ,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAC,CACnB,MAAM,CAAC,QAAQ,CAAC,YAAa,QAAQ,SAAS,KAAK,QAAQ,SAAS,IAAI,CAAE,CAAC,CAC3E,IACC,OAAO,CAAC,mBAAmB,eAA0C,CACnE,SAAS,MAAM,eAAe,iBAAiB,KAC/C,SACF,CACF,CACJ,CACF;CACF;CAEA,MAAgB,QACd,YACA,iBACA,EACE,aACA,iBACA,gBAAgB,MAChB,QAAQ,CAAC,KAOX,aAAoC,CAAC,GACrC,kBAAA,GAAyB1B,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,SAAS,GAC9C;EACf,MAAM,cAAA,GAAaA,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,gBAAgB;EAC9D,MAAM,oBAAoB,KAAK,qBAAqB;EACpD,MAAM,iBAAiBF,iBAAI,GAAG,EAAE,MAAA,GAAKC,KAAAA,QAAAA,CAAQ,eAAe,EAAE,CAAC;EAC/D,MAAM,mBAAmB,kBAAA,GAAiBA,KAAAA,QAAAA,CAAQ,cAAc,IAAI;EAEpE,MAAM,iBAAiB,MAAM,KAAK,sBAAsB,iBAAiB,eAAe;EACxF,MAAM,gBAAgB,OAAO,YAC3B,OAAO,QAAQ,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,YAAY,CACjD,WACA,OAAO,WAAW,GAAG,KAAA,GAAI4B,KAAAA,QAAAA,CAAQ,aAAa,MAAM,IAAI,MAC1D,CAAC,CACH;EACA,MAAM,yBAAiD;GACrD,iBAAiB,CAAC,CAAC,eAAe;GAClC,cAAc,CAAC,CAAC,eAAe;GAC/B,WAAW,eAAe,aAAa,CAAC;GACxC,iBAAiB,KAAK,0BAA0B,eAAe,cAAc;GAC7E;GACA,OAAO;GACP,iBAAiB,eAAe;EAClC;EAEA,IAAI;EACJ,IAAI;GACF,MAAM,qBAAqB,MAAM,KAAK,sBAAsB,YAAY,gBAAgB;GACxF,qBAAqB,MAAMlB,gBAAAA,cACzB;IAAC;IAAY,GAAG,OAAO,OAAO,iBAAiB;IAAG,GAAG,OAAO,OAAO,kBAAkB;GAAC,GACtF,iBACA;IACE,WAAW;IACX,aAAa;IACb,UAAU,KAAK;IACf,gBAAgB;GAClB,GACA,KAAK,MACP;EACF,SAAS,OAAO;GACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GAErE,IAAI,iBAAiBK,cAAAA,aACnB,MAAM;GAGR,MAAM,IAAIA,cAAAA,YACR;IACE,IAAI;IACJ,MAAM,yCAAyC;IAC/C,QAAQC,cAAAA,YAAY;IACpB,UAAUC,cAAAA,cAAc;GAC1B,GACA,KACF;EACF;EAEA,MAAM,EAAE,kBAAkB,MAAMC,gBAAAA,wBAAwB;GAAE,KAAK;GAAa;EAAgB,CAAC;EAC7F,MAAM,8BAA8B,MAAM,+BAA+B;GACvE,aAAa;GACb;GACA;EACF,CAAC;EACD,MAAM,wCAAwB,IAAI,IAAoC;EACtE,KAAK,MAAM,CAAC,KAAK,YAAY,mBAAmB,sBAAsB;GACpE,IAAI,mBAAmB,aAAa,IAAI,GAAG,KAAK,CAACW,cAAAA,sBAAsB,GAAG,GACxE;GAGF,sBAAsB,IAAI,KAAK,2BAA2B,KAAK,SAAS,2BAA2B,CAAC;EACtG;EAIA,MAAM,+CAA+B,IAAI,IAAY;EACrD,KAAK,MAAM,OAAO,mBAAmB,qBAAqB,KAAK,GAAG;GAChE,MAAM,UAAU1B,cAAAA,eAAe,GAAG;GAClC,IAAI,WAAW,mBAAmB,aAAa,IAAI,OAAO,GACxD,6BAA6B,IAAI,OAAO;EAE5C;EAEA,MAAM,kCAAkC,MAAM2B,gBAAAA,uCAAuC;GACnF,cAAc,mBAAmB;GACjC,qBAAqB;GACrB,QAAQ,KAAK;EACf,CAAC;EAED,KAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,gCAAgC,WAAW,GACzF,sBAAsB,IAAI,KAAK;GAC7B,SAAS,mBAAmB,aAAa,IAAI,GAAG,CAAC,EAAE;GACnD;EACF,CAAC;EAGH,IAAI;GACF,MAAM,KAAK,kBAAA,GACT7B,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,SAAS,GACpC,uBACA,gCAAgC,WAClC;GACA,IAAI,gCAAgC,sBAAsB,OAAO,GAC/D,MAAM8B,gBAAAA,0BAA0B;IAC9B,cAAc,mBAAmB;IACjC,uBAAuB,gCAAgC;IACvD,kBAAA,GAAiB9B,KAAAA,KAAAA,CAAK,iBAAiB,KAAK,SAAS;IACrD,QAAQ,KAAK;GACf,CAAC;GAGH,KAAK,OAAO,KAAK,6BAA6B;GAE9C,MAAM,eAA6B,MAAM,KAAK,kBAC5C,YACA,iBACA,oBACA,YACA,wBACA,mBACA,gBACF;GAEA,MAAM,6BAAwD,CAAC;GAmC/D,OAAM,MAjCgB,KAAK,cACzB;IACE,GAAG;IACH,UAAU,aAAa,aAAa,WAAW,SAAS,aAAa;IACrE,SAAQ,YAAW;KACjB,MAAM,yBAAyB+B,gBAAAA,6BAC7B,SACA,mBAAmB,YACrB;KACA,IAAI,wBACF,2BAA2B,KAAK,EAAE,QAAQ,uBAAuB,CAAC;KAGpE,IAAI,QAAQ,SAAS,uBAAuB;MAC1C,IAAI,QAAQ,MAAM,EAAE,EAAE,SAAS,cAAc,GAC3C;MAGF,KAAK,OAAO,KAAK,6BAA6B,EAC5C,YAAY,QAAQ,QAAQ,QAAQ,yBAAyB,EAAE,EACjE,CAAC;KACH;IACF;GACF,GACA;IACE,KAAK;IACL,cAAc,EACZ,QAAQ,CAAC,SAAS,EACpB;IACA,WAAW,uBAAuB;GACpC,CACF,EAAA,CAEc,MAAM;GAEpB,IAAI,2BAA2B,SAAS,GAAG;IACzC,MAAM,aAAa,2BAA2B,KAAI,MAAK,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI;IACnF,MAAM,IAAIjB,cAAAA,YAAY;KACpB,IAAI;KACJ,MAAM,6DAA6D,WAAW;KAC9E,QAAQC,cAAAA,YAAY;KACpB,UAAUC,cAAAA,cAAc;IAC1B,CAAC;GACH;GACA,MAAM,cAAwB,CAAC;GAC/B,MAAM,eAAyB,CAAC;GAChC,MAAM,KAAK,OAAO,KAAK,aAAa,SAAS,CAAC,CAAC,CAAC,CAAC,CAC9C,QAAO,QAAO,IAAI,WAAW,QAAQ,CAAC,CAAC,CACvC,SAAS,KAAK,UAAU;IACvB,MAAM,aAAa,OAAO;IAC1B,YAAY,KAAK,eAAe,WAAW,WAAW,IAAI,OAAO;IACjE,aAAa,KAAK,UAAU;GAC9B,CAAC;GAEH,OAAA,GAAMV,YAAAA,UAAAA,EAAAA,GACJN,KAAAA,KAAAA,CAAK,gBAAgB,WAAW,GAChC,GAAG,YAAY,KAAK,IAAI,EAAE;;wBAEV,aAAa,KAAK,IAAI,EAAE,EAC1C;GACA,KAAK,OAAO,KAAK,sBAAsB;GAEvC,KAAK,OAAO,KAAK,sBAAsB;GACvC,MAAM,KAAK,YAAA,GAAWD,KAAAA,QAAAA,CAAQ,eAAe,GAAG,eAAe;GAC/D,KAAK,OAAO,KAAK,2BAA2B;GAI5C,IAAI,mBAAmB,gBAAgB,WACrC,MAAM,KAAK,mBAAmB,eAAe;GAG/C,KAAK,OAAO,KAAK,qBAAqB;GACtC,MAAM,KAAK,aAAa;IAAE;IAAiB,SAAS;GAAY,CAAC;GAEjE,KAAK,OAAO,KAAK,0BAA0B;GAE3C,IAAIiC,cAAAA,kBAAkB,GACpB,KAAK,OAAO,KAAK,kEAAkE;QAEnF,MAAM,KAAK,oBACT,iBACA,aACA,gCAAgC,aAChC,eAAe,qBACjB;EAEJ,SAAS,OAAO;GACd,IACE,iBAAiBlB,cAAAA,gBAChB,MAAM,OAAO,yCAAyC,MAAM,OAAO,iCAEpE,MAAM;GAGR,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GACrE,MAAM,IAAIA,cAAAA,YACR;IACE,IAAI;IACJ,MAAM,uCAAuC;IAC7C,QAAQC,cAAAA,YAAY;IACpB,UAAUC,cAAAA,cAAc;GAC1B,GACA,KACF;EACF;CACF;CAEA,MAAM,KAAK,YAAoB,iBAAyB,YAAkD;EACxG,MAAM,oBAAoB,MAAM,KAAK,sBAAsB,aAAA,GAAYjB,KAAAA,QAAAA,CAAQ,eAAe,CAAC;EAC/F,MAAM,cAAc,OAAO,KAAK,iBAAiB,CAAC,CAAC;EACnD,IAAI,cAAc,GAChB,KAAK,OAAO,KAAK,eAAe,EAAE,OAAO,YAAY,CAAC;CAE1D;AACF"}
@@ -1,5 +1,5 @@
1
- import { i as getNodeResolveOptions, s as isBareModuleSpecifier } from "./utils-C8gwr-ur.js";
2
1
  import { g as esbuild, o as tsConfigPaths } from "./bundler-CbiKhVps.js";
2
+ import { i as getNodeResolveOptions, s as isBareModuleSpecifier } from "./utils-C8gwr-ur.js";
3
3
  import { realpathSync } from "fs";
4
4
  import { dirname, isAbsolute, sep } from "path";
5
5
  import * as pkg from "empathic/package";
@@ -200,7 +200,8 @@ async function extractMastraOption(name, entryFile, outputDir, logger) {
200
200
  const output = await (await extractMastraOptionBundler(name, entryFile, result, logger)).write({
201
201
  dir: outputDir,
202
202
  format: "es",
203
- entryFileNames: "[name].mjs"
203
+ entryFileNames: "[name].mjs",
204
+ chunkFileNames: "[name]-[hash].mjs"
204
205
  });
205
206
  if (result.hasCustomConfig) {
206
207
  const configPath = `${outputDir}/${name}-config.mjs`;
@@ -219,4 +220,4 @@ async function getBundlerOptions(entryFile, outputDir, logger) {
219
220
  }
220
221
  export { extractMastraOption as n, getBundlerOptions as t };
221
222
 
222
- //# sourceMappingURL=bundlerOptions-ScfCrul-.js.map
223
+ //# sourceMappingURL=bundlerOptions-CklrCRoZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bundlerOptions-ScfCrul-.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 '@internal/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 '@internal/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 '@internal/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 '@internal/core/logger';\nimport type { BundlerConfig } from '@internal/deployer';\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<BundlerConfig | undefined | 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-CklrCRoZ.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 '@internal/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 '@internal/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 '@internal/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 // Chunks are written outside any package with \"type\": \"module\", so a `.js` chunk would be loaded as CommonJS\n // (#28491). The hash keeps them distinct from the main bundle's chunks in `.mastra/output`.\n chunkFileNames: '[name]-[hash].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 '@internal/core/logger';\nimport type { BundlerConfig } from '@internal/deployer';\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<BundlerConfig | undefined | 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":";;;;;;;;;;;;;AAKA,SAAgB,iCACd,QACA,QACA,QACc;CACd,OAAO;EACL,MAAM,uBAAuB,SAAS;EACtC,SAAS;GACP,wBAAwB,EAKtB,KAAK,MAAM;IACT,IAAI,KAAK,KAAK,aAAa;KACzB,MAAM,CAAC,eAAe,KAAK,YAAY,KAAK,KAAK,WAAW;KAG5D,YAAY,KAAK;IACnB,OACE,KAAK,OAAO;GAEhB,EACF;GAEA,cAAc,MAAM,OAAO;IAGzB,IAAI,CADsB,KAAK,YAAW,SAAQA,MAAE,qBAAqB,KAAK,IAAI,CAC7D,GACnB;IAGF,MAAM,aAAa,KAAK,WAAW;IAEnC,IAAI,CAACA,MAAE,qBAAqB,UAAU,KAAK,CAACA,MAAE,aAAa,WAAW,EAAE,KAAK,WAAW,GAAG,SAAS,UAClG;IAGF,IAAI,aAAaA,MAAE,iBAAiB,CAAC,CAAC;IACtC,IAAIA,MAAE,mBAAmB,KAAK,KAAK,UAAU,EAAE,GAC7C,aAAa,KAAK,KAAK,UAAU;IAInC,IAAI,iBAAiB,WAAW,WAAW,MACzC,SAAQA,MAAE,iBAAiB,IAAI,KAAKA,MAAE,aAAa,KAAK,GAAG,KAAK,KAAK,IAAI,SAAS,MACpF;IACA,IAAI,cAAgCA,MAAE,iBAAiB,CAAC,CAAC;IAEzD,MAAM,cAAc,KAAK,MAAM,iBAAiB,CAAC,CAAC;IAClD,IAAI,CAAC,aACH;IAGF,IAAI,kBAAkBA,MAAE,iBAAiB,cAAc,KAAKA,MAAE,aAAa,eAAe,KAAK,GAAG;KAChG,OAAO,kBAAkB;KACzB,cAAc,eAAe;KAE7B,IAAIA,MAAE,aAAa,eAAe,KAAK,KAAK,eAAe,MAAM,SAAS,QAAQ;MAChF,MAAM,gBAAgB,MAAM,KAAK,MAAM,WAAW,MAAM;MAExD,IAAI,iBAAiBA,MAAE,qBAAqB,cAAc,KAAK,IAAI,GAAG;OACpE,MAAM,KAAK,KAAK,MAAM,sBAAsB,MAAM;OAElD,cAAc,KAAK,YAAYA,MAAE,mBAAmB,IAAI,cAAc,KAAK,KAAK,IAAK,CAAC;OACtF,cAAc;MAChB;KACF;IACF;IAGA,MAAM,oBAAoBA,MAAE,uBAC1BA,MAAE,oBAAoB,SAAS,CAACA,MAAE,mBAAmBA,MAAE,WAAW,MAAM,GAAG,WAAW,CAAC,CAAC,GACxF,CAAC,CACH;IAEA,YAAY,KAAK,KAAK,KAAK,iBAAiB;GAC9C;GAEA,SAAS,EACP,KAAK,MAAM;IAMT,IAAI,CAJc,KAAK,KAAK,KAAK,MAC/B,SAAQ,KAAK,SAAS,4BAA4B,KAAK,SAAS,0BAGrD,GAAG;KACd,IAAI,QACF,OAAO,KAAK,wCAAwC;MAClD;MACA,SACE;KACJ,CAAC;KAGH,MAAM,4BAA4BA,MAAE,uBAClCA,MAAE,oBAAoB,SAAS,CAACA,MAAE,mBAAmBA,MAAE,WAAW,MAAM,GAAGA,MAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GACnG,CAAC,CACH;KACA,KAAK,KAAK,KAAK,KAAK,yBAAyB;IAC/C;GACF,EACF;EACF;CACF;AACF;;ACxGA,SAAgB,uCACd,aACA,MACA,QACA,SACQ;CACR,OAAO;EACL,MAAM,UAAU;EAChB,UAAU,MAAM,IAAI;GAClB,IAAI,OAAO,aACT;GAGF,OAAO,eAAe,MAAM;IAC1B,SAAS;IACT,YAAY;IACZ,UAAU;IACV,SAAS,OAAO,iCAAiC,QAAQ,MAAM,SAAS,MAAM,CAAC;IAC/E,YAAY,SAAS;GACvB,CAAC,CAAC,CAAC,MAAK,YAAW;IACjB,MAAM,OAAQ;IACd,KAAK,OAAQ;GACf,EAAE;EACJ;CACF;AACF;;AC5BA,SAAgB,2BAA2B;CACzC,OAAO;EACL,MAAM;EACN,SAAS,EACP,QAAQ,MAAM;GAEZ,MAAM,QAAQ,KAAK;GAInB,MAAM,eADc,KAAK,IAAI,MACE,CAAC,CAAC,QAAO,cAAa;IACnD,IAAI,UAAU,oBAAoB,GAChC,OAAO;IAIT,IAAI,UAAU,sBAAsB,GAClC,OAAO,UAAU,KAAK,aAAa,MAAK,SAAQ;KAC9C,IAAI,CAACC,MAAE,aAAa,KAAK,EAAE,GACzB,OAAO;KAGT,MAAM,OAAO,KAAK,GAAG;KACrB,MAAM,UAAU,MAAM,WAAW,IAAI;KAErC,OAAO,YAAY,QAAQ,cAAc,QAAQ,eAAe,SAAS;IAC3E,CAAC;IAIH,IAAI,UAAU,sBAAsB,KAAK,UAAU,mBAAmB,GAAG;KACvE,IAAI,CAACA,MAAE,aAAa,UAAU,KAAK,EAAE,GACnC,OAAO;KAGT,MAAM,OAAO,UAAU,KAAK,GAAG;KAC/B,MAAM,UAAU,MAAM,WAAW,IAAI;KACrC,OAAO,YAAY,QAAQ,cAAc,QAAQ,eAAe,SAAS;IAC3E;IAGA,IAAI,UAAU,oBAAoB,GAChC,OAAO,UAAU,KAAK,WAAW,MAAK,cAAa;KACjD,MAAM,eAAe,UAAU,MAAM;KACrC,MAAM,UAAU,MAAM,WAAW,YAAY;KAC7C,OAAO,YAAY,QAAQ,cAAc,QAAQ,eAAe,SAAS;IAC3E,CAAC;IAIH,OAAO;GACT,CAAC;GAGD,KAAK,IACH,QACA,aAAa,KAAI,MAAK,EAAE,IAAI,CAC9B;EACF,EACF;CACF;AACF;;AC7DA,eAAsB,kCAAkC,MAAmD;CACzG,MAAM,SAAS,MAAM,eAAe,MAAM;EACxC,SAAS;EACT,YAAY;EACZ,SAAS,CAAC,wBAAwB;CACpC,CAAC;CAGD,IAAI,UAAU,OAAO,SAAU,MAC7B,OAAO,kCAAkC,OAAQ,IAAK;CAGxD,OAAO;EACL,MAAM,OAAQ;EACd,KAAK,OAAQ;CACf;AACF;;ACDA,MAAM,YAAY;AAClB,MAAM,eAAe,GAAG,IAAI,cAAc;;;;;;;;AAS1C,SAAS,0BAA0B,WAA2B;CAC5D,MAAM,iBAAiB,IAAI,GAAG,EAAE,KAAK,QAAQ,SAAS,EAAE,CAAC;CACzD,MAAM,SAAS,iBAAiB,QAAQ,cAAc,IAAI,QAAQ,SAAS;CAE3E,MAAM,WAAW,CAAC,SAAS,KAAK,aAAa,MAAM,IAAI,GAAG;CAC1D,MAAM,mBAAmB,SACvB,WAAW,IAAI,KAAK,CAAC,KAAK,SAAS,YAAY,KAAK,CAAC,SAAS,MAAK,SAAQ,KAAK,WAAW,IAAI,CAAC;CAElG,MAAM,WAAW,YAAY;EAC3B,GAAG,sBAAsB,MAAM;EAC/B,YAAY;GAAC;GAAQ;GAAO;GAAS;GAAS;GAAO;EAAM;CAC7D,CAAC;CACD,MAAM,cAAc,SAAS;CAC7B,MAAM,UAAU,OAAO,gBAAgB,aAAa,cAAc,YAAY;CAE9E,OAAO;EACL,GAAG;EACH,MAAM;EACN,MAAM,UAAU,IAAI,UAAU,SAAS;GACrC,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,GACxC,OAAO;GAGT,MAAM,WAAW,MAAM,QAAQ,KAAK,MAAM,IAAI,UAAU,OAAO;GAC/D,IAAI,CAAC,YAAY,OAAO,aAAa,YAAY,SAAS,UACxD,OAAO;GAGT,IAAI,UAAU,KAAK,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,YAAY,GACnE,OAAO,SAAS;GAGlB,OAAO,gBAAgB,QAAQ,IAAI;IAAE,IAAI,cAAc,SAAS,EAAE,CAAC,CAAC;IAAM,UAAU;GAAK,IAAI;EAC/F;CACF;AACF;AAEA,SAAgB,2BACd,MACA,WACA,QAGA,QACA;CACA,OAAO,OAAO;EACZ,UAAU;EACV,OAAO,GACJ,GAAG,KAAK,WAAW,UACtB;EACA,WAAW;EACX,SAAS;GACP,cAAc;GACd,0BAA0B,SAAS;GAEnC,QAAQ;GACR,sBAAsB,EACpB,SAAS,uBACX,CAAC;GACD,SAAS;IACP,YAAY,CAAC,OAAO,KAAK;IACzB,gBAAgB;IAChB,yBAAyB;IACzB,gBAAgB;GAClB,CAAC;GACD,KAAK;GACL,uCAAuC,WAAW,MAAM,QAAQ,EAAE,OAAO,CAAC;GAE1E,QAAQ;GACR;IACE,MAAM;IACN,UAAU,MAAM,IAAI;KAClB,IAAI,OAAO,WACT;KAGF,OAAO,kCAAkC,IAAI;IAC/C;GACF;GAEA,QAAQ;EACV;CACF,CAAC;AACH;AAEA,eAAsB,oBACpB,MACA,WACA,WACA,QAIQ;CACR,MAAM,SAAS,EACb,iBAAiB,MACnB;CAIA,MAAM,SAAS,OAAM,MAFC,2BAA2B,MAAM,WAAW,QAAQ,MAAM,EAAA,CAEnD,MAAM;EACjC,KAAK;EACL,QAAQ;EACR,gBAAgB;EAGhB,gBAAgB;CAClB,CAAC;CAED,IAAI,OAAO,iBAAiB;EAC1B,MAAM,aAAa,GAAG,UAAU,GAAG,KAAK;EAExC,OAAO;GACL,cAAc;GACd,iBAAiB,OAAO,cAAc,UAAU,CAAC,CAAC,KAAK,CAAC,MAAK,MAAK,EAAE,KAAwB;EAC9F;CACF;CAEA,OAAO;AACT;;ACtIA,eAAsB,kBACpB,WACA,WACA,QAC2C;CAC3C,MAAM,SAAS,MAAM,oBAAoB,WAAW,WAAW,WAAW,MAAM;CAEhF,IAAI,CAAC,QACH,OAAO;CAGT,OAAO,OAAO,UAAU;AAC1B"}
@@ -1,6 +1,6 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-Bc0pwXKd.cjs");
2
- const require_utils = require("./utils-CDNA_ewa.cjs");
3
2
  const require_bundler = require("./bundler-UKxJsU8E.cjs");
3
+ const require_utils = require("./utils-CDNA_ewa.cjs");
4
4
  let fs = require("fs");
5
5
  let path = require("path");
6
6
  let empathic_package = require("empathic/package");
@@ -205,7 +205,8 @@ async function extractMastraOption(name, entryFile, outputDir, logger) {
205
205
  const output = await (await extractMastraOptionBundler(name, entryFile, result, logger)).write({
206
206
  dir: outputDir,
207
207
  format: "es",
208
- entryFileNames: "[name].mjs"
208
+ entryFileNames: "[name].mjs",
209
+ chunkFileNames: "[name]-[hash].mjs"
209
210
  });
210
211
  if (result.hasCustomConfig) {
211
212
  const configPath = `${outputDir}/${name}-config.mjs`;
@@ -235,4 +236,4 @@ Object.defineProperty(exports, "getBundlerOptions", {
235
236
  }
236
237
  });
237
238
 
238
- //# sourceMappingURL=bundlerOptions-CPMQkWfY.cjs.map
239
+ //# sourceMappingURL=bundlerOptions-DxMLiEfQ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bundlerOptions-CPMQkWfY.cjs","names":["t","transformAsync","t","transformAsync","sep","pkg","dirname","realpathSync","isAbsolute","nodeResolve","getNodeResolveOptions","isBareModuleSpecifier","pathToFileURL","tsConfigPaths","esbuild","optimizeLodashImports","commonjs","json"],"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 '@internal/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 '@internal/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 '@internal/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 '@internal/core/logger';\nimport type { BundlerConfig } from '@internal/deployer';\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<BundlerConfig | undefined | 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-DxMLiEfQ.cjs","names":["t","transformAsync","t","transformAsync","sep","pkg","dirname","realpathSync","isAbsolute","nodeResolve","getNodeResolveOptions","isBareModuleSpecifier","pathToFileURL","tsConfigPaths","esbuild","optimizeLodashImports","commonjs","json"],"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 '@internal/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 '@internal/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 '@internal/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 // Chunks are written outside any package with \"type\": \"module\", so a `.js` chunk would be loaded as CommonJS\n // (#28491). The hash keeps them distinct from the main bundle's chunks in `.mastra/output`.\n chunkFileNames: '[name]-[hash].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 '@internal/core/logger';\nimport type { BundlerConfig } from '@internal/deployer';\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<BundlerConfig | undefined | 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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"}
@@ -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.82.0"
6
+ version: "1.83.0-alpha.0"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,6 +1,37 @@
1
1
  {
2
- "version": "1.82.0",
2
+ "version": "1.83.0-alpha.0",
3
3
  "package": "@mastra/deployer",
4
- "exports": {},
4
+ "exports": {
5
+ "Deployer": {
6
+ "types": "dist/deploy/base.d.ts",
7
+ "implementation": "dist/index.js",
8
+ "line": 6
9
+ },
10
+ "Deps": {
11
+ "types": "dist/services/deps.d.ts",
12
+ "implementation": "dist/services-BKh9M2E5.js",
13
+ "line": 824
14
+ },
15
+ "FileService": {
16
+ "types": "dist/services/fs.d.ts",
17
+ "implementation": "dist/services-BKh9M2E5.js",
18
+ "line": 1255
19
+ },
20
+ "createChildProcessLogger": {
21
+ "types": "dist/deploy/log.d.ts",
22
+ "implementation": "dist/services-BKh9M2E5.js",
23
+ "line": 320
24
+ },
25
+ "createPinoStream": {
26
+ "types": "dist/deploy/log.d.ts",
27
+ "implementation": "dist/services-BKh9M2E5.js",
28
+ "line": 303
29
+ },
30
+ "getDeployer": {
31
+ "types": "dist/build/deployer.d.ts",
32
+ "implementation": "dist/index.js",
33
+ "line": 21
34
+ }
35
+ },
5
36
  "modules": {}
6
37
  }
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_services = require("./services-DbgqQ_yI.cjs");
3
- const require_bundler = require("./bundler-8GO8sXwa.cjs");
4
- const require_bundlerOptions = require("./bundlerOptions-CPMQkWfY.cjs");
5
- require("./build-Cc9X11g7.cjs");
2
+ const require_bundler = require("./bundler-gVxl78M9.cjs");
3
+ const require_services = require("./services-B8neClCI.cjs");
4
+ require("./build-DJrBURvF.cjs");
5
+ const require_bundlerOptions = require("./bundlerOptions-DxMLiEfQ.cjs");
6
6
  // src/deploy/base.ts
7
7
  var Deployer = class extends require_bundler.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-PA2YqqQJ.js";
2
- import { t as Bundler } from "./bundler-DRlNM9-F.js";
3
- import { n as extractMastraOption } from "./bundlerOptions-ScfCrul-.js";
4
- import "./build-PqRB5M-E.js";
1
+ import { t as Bundler } from "./bundler-DBj7Xv0j.js";
2
+ import { c as createPinoStream, i as DepsService, r as Deps, s as createChildProcessLogger, t as FileService } from "./services-BKh9M2E5.js";
3
+ import "./build-dIfHk6xF.js";
4
+ import { n as extractMastraOption } from "./bundlerOptions-CklrCRoZ.js";
5
5
  // src/deploy/base.ts
6
6
  var Deployer = class extends Bundler {
7
7
  deps = new DepsService();