@esmx/core
Version:
A high-performance microfrontend framework supporting Vue, React, Preact, Solid, and Svelte with SSR and Module Federation capabilities.
159 lines (158 loc) • 5.02 kB
TypeScript
import type { BuildSsrTarget } from './core';
/**
* Core configuration interface for the module system.
* Defines module linking, import mapping, and export configurations.
*/
export interface ModuleConfig {
/**
* Module linking configuration.
* Key is remote module name, value is module build output directory path.
*
* @example
* ```typescript
* links: {
* 'shared-lib': '../shared-lib/dist',
* 'api-utils': '/var/www/api-utils/dist'
* }
* ```
*/
links?: Record<string, string>;
/**
* Module import mapping configuration.
* Key is local module identifier, value is remote module path.
* Mainly used for standard imports of third-party libraries.
*
* @example
* ```typescript
* imports: {
* 'axios': 'shared-lib/axios',
* 'lodash': 'shared-lib/lodash'
* }
* ```
*/
imports?: Record<string, string>;
/**
* Module export configuration.
* Supports multiple configuration forms: mixed array and object.
*
* @example
* ```typescript
* // Array form
* exports: ['npm:axios', 'root:src/utils/format.ts']
*
* // Object form
* exports: {
* 'axios': 'axios',
* 'utils': './src/utils/index.ts'
* }
* ```
*/
exports?: ModuleConfigExportExports;
}
/**
* Union type for export configuration.
* Supports mixed array and object forms to provide flexibility
* for different configuration scenarios.
*/
export type ModuleConfigExportExports = Array<string | Record<string, string | ModuleConfigExportObject>> | Record<string, string | ModuleConfigExportObject>;
/**
* Configuration object for individual module exports.
* Provides fine-grained control over module export behavior.
*/
export type ModuleConfigExportObject = {
/**
* Input file path, relative to project root directory.
*
* @example './src/utils/format'
*/
input?: string;
/**
* Environment-specific input file configuration.
* Supports client and server differentiated builds.
* Set to `false` to disable builds for specific environments.
*
* @example
* ```typescript
* inputTarget: {
* client: './src/storage/indexedDB.ts',
* server: './src/storage/filesystem.ts'
* }
* ```
*/
inputTarget?: Record<BuildSsrTarget, string | false>;
/**
* Whether to rewrite import paths within modules.
*
* @default true
* @remarks Only needs to be false when exporting npm packages
*/
rewrite?: boolean;
};
/**
* Parsed and normalized module configuration.
* Contains resolved paths and processed configuration data.
*/
export interface ParsedModuleConfig {
/** Module name */
name: string;
/** Module root directory path */
root: string;
/**
* Resolved link information for connected modules.
* Contains absolute paths to client/server directories and manifest files.
*/
links: Record<string, {
/** Module name */
name: string;
/** Original root path (relative or absolute) */
root: string;
/** Absolute path to client build directory */
client: string;
/** Absolute path to client manifest.json */
clientManifestJson: string;
/** Absolute path to server build directory */
server: string;
/** Absolute path to server manifest.json */
serverManifestJson: string;
}>;
/** Import mapping configuration (passed through as-is) */
imports: Record<string, string>;
/** Processed export configuration */
exports: ParsedModuleConfigExports;
}
/**
* Processed export configuration mapping.
* Maps export names to their resolved configuration objects.
*/
export type ParsedModuleConfigExports = Record<string, ParsedModuleConfigExport>;
/**
* Processed export configuration for a single module.
* Contains resolved input targets and processing flags.
*/
export interface ParsedModuleConfigExport {
/** Export name/identifier */
name: string;
/** Resolved input targets for different build environments */
inputTarget: Record<BuildSsrTarget, string | false>;
/** Whether to rewrite import paths within this module */
rewrite: boolean;
}
/**
* Parse and normalize module configuration.
* Resolves paths, processes exports, and creates a standardized configuration object.
*
* @param name - Module name
* @param root - Module root directory path
* @param config - Raw module configuration (optional)
* @returns Parsed and normalized module configuration
*
* @example
* ```typescript
* const parsed = parseModuleConfig('my-app', '/path/to/app', {
* links: { 'shared-lib': '../shared-lib/dist' },
* imports: { 'axios': 'shared-lib/axios' },
* exports: ['npm:axios', 'root:src/utils/format.ts']
* });
* ```
*/
export declare function parseModuleConfig(name: string, root: string, config?: ModuleConfig): ParsedModuleConfig;