import type { RollupNodeResolveOptions } from '@rollup/plugin-node-resolve';
/** The detected JavaScript runtime environment */
export type RuntimePlatform = 'node' | 'bun';
/**
* The esbuild/bundler platform setting.
* - 'node': Assumes Node.js environment, externalizes built-in modules
* - 'browser': Assumes browser environment, polyfills Node APIs
* - 'neutral': Runtime-agnostic, preserves all globals as-is (used for Bun)
*/
export type BundlerPlatform = 'node' | 'browser' | 'neutral';
/**
* Get nodeResolve plugin options based on the target platform.
*
* For 'browser' platform (e.g., Cloudflare Workers), uses browser-compatible
* export conditions so packages like the Cloudflare SDK resolve to their
* web runtime instead of Node.js-specific code.
*
* For 'node' and 'neutral' (Bun) platforms, uses Node.js module resolution.
*/
export declare function getNodeResolveOptions(platform: BundlerPlatform): RollupNodeResolveOptions;
/**
* Detect the current JavaScript runtime environment.
*
* This is used by the bundler to determine the appropriate esbuild platform
* setting. When running under Bun, we need to use 'neutral' platform to
* preserve Bun-specific globals (like Bun.s3).
*/
export declare function detectRuntime(): RuntimePlatform;
/**
* Whether the deployer should skip installing dependencies (and lockfile
* generation) in the build output directory. Enabled by setting
* MASTRA_BUILD_SKIP_INSTALL to "true" or "1". Useful for hermetic build
* systems (e.g. Bazel) that supply node_modules externally and run in a
* network-less sandbox where the output install would be redundant and fatal.
*/
export declare function shouldSkipInstall(): boolean;
export declare function upsertMastraDir({ dir }: {
dir?: string;
}): void;
export declare function isDependencyPartOfPackage(dep: string, packageName: string): boolean;
/**
* Get the package name from a module ID
*/
export declare function getPackageName(id: string): string | undefined;
/**
* Check if an import specifier uses a protocol scheme rather than a package name.
* Examples: `cloudflare:workers`, `data:text/javascript,...`, `node:fs`.
*/
export declare function hasImportProtocol(specifier: string): boolean;
/**
* Check if a specifier uses a non-builtin protocol that should be preserved at
* runtime instead of being treated as an installable dependency.
*/
export declare function isExternalProtocolImport(specifier: string, excludeList?: readonly string[]): boolean;
/**
* During `mastra dev` we are compiling TS files to JS (inside workspaces) so that users can just their workspace packages.
* We store these compiled files inside `node_modules/.cache` for each workspace package.
*/
export declare function getCompiledDepCachePath(rootPath: string, packageName: string): string;
/**
* Convert windows backslashes to posix slashes
*
* @example
* ```ts
* slash('C:\\Users\\user\\code\\mastra') // 'C:/Users/user/code/mastra'
* ```
*/
export declare function slash(path: string): string;
/**
* Make a Rollup-safe name: pathless, POSIX, and without parent/absolute segments
*/
export declare function rollupSafeName(name: string, rootDir: string): string;
/**
* Finds the first real package from node_modules that likely contains native bindings, filtering out virtual modules and native binding loader infrastructure.
*
* @param moduleIds - Array of module IDs from a Rollup chunk
* @returns The module ID of the actual native package, or undefined if not found
*
* @example
* const moduleIds = [
* '\x00/path/node_modules/bcrypt/bcrypt.js?commonjs-module',
* '/path/node_modules/node-gyp-build/index.js',
* '/path/node_modules/bcrypt/bcrypt.js',
* ];
* findNativePackageModule(moduleIds); // Returns '/path/node_modules/bcrypt/bcrypt.js'
*/
export declare function findNativePackageModule(moduleIds: string[]): string | undefined;
/**
* Ensures that server.studioBase is normalized:
* - Adds leading slash if missing (e.g., 'admin' → '/admin')
* - Removes trailing slashes (e.g., '/admin/' → '/admin')
* - Normalizes multiple slashes to single slash (e.g., '//api' → '/api')
* - Returns empty string for root paths ('/' or '')
*
* @param studioBase - The studioBase path to normalize
* @returns Normalized studioBase path string
* @throws Error if path contains invalid characters ('..', '?', '#')
*/
export declare function normalizeStudioBase(studioBase: string): string;
/**
* Configuration values for Studio's index.html placeholder injection.
*
* Each value is the **exact JavaScript expression** that replaces the
* corresponding `'%%PLACEHOLDER%%'` token (including surrounding quotes).
*
* For literal strings pass `"'value'"` (quoted).
* For runtime expressions pass the raw JS, e.g. `"window.location.hostname"`.
*/
export interface StudioInjectionConfig {
host: string;
port: string;
protocol: string;
apiPrefix: string;
basePath: string;
hideCloudCta: string;
cloudApiEndpoint: string;
experimentalFeatures: string;
templates: string;
telemetryDisabled: string;
requestContextPresets: string;
experimentalUI: string;
agentSignals: string;
signalsUI: string;
organizationId: string;
platformProjectId: string;
platformObservabilityEndpoint: string;
autoDetectUrl?: string;
devServerInstanceId?: string;
}
/**
* Replace all `%%MASTRA_*%%` placeholders in the Studio `index.html` with the
* supplied configuration values.
*
* The `` tag and the `window.MASTRA_STUDIO_BASE_PATH` assignment
* use `basePath` as a plain string (no surrounding quotes), while all other
* placeholders replace `'%%TOKEN%%'` (with surrounding single-quotes in the
* source HTML) with the provided expression verbatim.
*/
export declare function injectStudioHtmlConfig(html: string, config: StudioInjectionConfig): string;
/**
* Escape a dynamic value for embedding inside a single-quoted JavaScript
* string literal in the Studio `index.html` (e.g. `window.X = ''`).
* Without it, an env-derived value containing `'` or `` breaks out
* of the literal and corrupts (or injects into) the served page.
*/
export declare function escapeStudioHtmlValue(value: string): string;
/**
* Check if a module is a Node.js builtin module
* @param specifier - Module specifier
* @returns True if it's a builtin module
*/
export declare function isBuiltinModule(specifier: string): boolean;
/**
* Check whether a module specifier is a bare module import rather than a path,
* virtual module, or Node builtin.
*/
export declare function isBareModuleSpecifier(specifier: string): boolean;
//# sourceMappingURL=utils.d.ts.map