@esmx/rspack
Version:
A high-performance Rspack integration for Esmx microfrontend framework, providing Module Linking and SSR capabilities.
184 lines (183 loc) • 5.86 kB
TypeScript
import { type App, type Esmx } from '@esmx/core';
import type { RspackOptions } from '@rspack/core';
import type { BuildTarget } from './build-target';
/**
* Rspack application configuration context interface.
*
* This interface provides context information accessible in configuration hook functions, allowing you to:
* - Access the Esmx framework instance
* - Get the current build target (client/server/node)
* - Modify Rspack configuration
* - Access application options
*
* @example
* ```ts
* // entry.node.ts
* export default {
* async devApp(esmx) {
* return import('@esmx/rspack').then((m) =>
* m.createRspackApp(esmx, {
* // Configuration hook function
* config(context) {
* // Access build target
* }
* })
* );
* }
* };
* ```
*/
export interface RspackAppConfigContext {
/**
* Esmx framework instance.
* Can be used to access framework APIs and utility functions.
*/
esmx: Esmx;
/**
* Current build target.
* - 'client': Client build, generates browser-executable code
* - 'server': Server build, generates SSR rendering code
* - 'node': Node.js build, generates server entry code
*/
buildTarget: BuildTarget;
/**
* Rspack compilation configuration object.
* You can modify this object in configuration hooks to customize build behavior.
*/
config: RspackOptions;
/**
* Options object passed when creating the application.
*/
options: RspackAppOptions;
}
/**
* Rspack chain configuration context interface.
*
* This interface provides context information accessible in chain hook functions, allowing you to:
* - Access the Esmx framework instance
* - Get the current build target (client/server/node)
* - Modify configuration using rspack-chain
* - Access application options
*/
export interface RspackAppChainContext {
/**
* Esmx framework instance.
* Can be used to access framework APIs and utility functions.
*/
esmx: Esmx;
/**
* Current build target.
* - 'client': Client build, generates browser-executable code
* - 'server': Server build, generates SSR rendering code
* - 'node': Node.js build, generates server entry code
*/
buildTarget: BuildTarget;
/**
* rspack-chain configuration object.
* You can use the chain API in chain hooks to modify the configuration.
*/
chain: import('rspack-chain').default;
/**
* Options object passed when creating the application.
*/
options: RspackAppOptions;
}
/**
* Rspack application configuration options interface.
*
* This interface provides configuration options available when creating a Rspack application, including:
* - Code compression options
* - Rspack configuration hook functions
*
* @example
* ```ts
* // entry.node.ts
* export default {
* async devApp(esmx) {
* return import('@esmx/rspack').then((m) =>
* m.createRspackApp(esmx, {
* // Disable code compression
* minimize: false,
* // Custom Rspack configuration
* config(context) {
* }
* })
* );
* }
* };
* ```
*/
export interface RspackAppOptions {
/**
* Whether to enable code compression.
*
* - true: Enable code compression
* - false: Disable code compression
* - undefined: Automatically determine based on environment (enabled in production, disabled in development)
*
* @default undefined
*/
minimize?: boolean;
/**
* Called before the build starts, this function allows you to modify the Rspack compilation configuration.
* Supports differentiated configuration for different build targets (client/server/node).
*
* @param context - Configuration context, containing framework instance, build target, and configuration object
*/
config?: (context: RspackAppConfigContext) => void;
/**
* Uses rspack-chain to provide chained configuration method, allowing more flexible modification of Rspack configuration.
* Called after the config hook, if chain hook exists, chained configuration is preferred.
*
* @param context - Configuration context, containing framework instance, build target, and chain configuration object
*/
chain?: (context: RspackAppChainContext) => void;
}
/**
* Create Rspack application instance.
*
* This function creates different application instances based on the runtime environment (development/production):
* - Development environment: Configures hot update middleware and real-time rendering
* - Production environment: Configures build tasks
*
* @param esmx - Esmx framework instance
* @param options - Rspack application configuration options
* @returns Returns application instance
*
* @example
* ```ts
* // entry.node.ts
* export default {
* async devApp(esmx) {
* return import('@esmx/rspack').then((m) =>
* m.createRspackApp(esmx, {
* config(context) {
* // Configure loader to handle different file types
* context.config.module = {
* rules: [
* {
* test: /\.ts$/,
* exclude: [/node_modules/],
* loader: 'builtin:swc-loader',
* options: {
* jsc: {
* parser: {
* syntax: 'typescript'
* }
* }
* }
* },
* {
* test: /\.css$/,
* use: ['style-loader', 'css-loader']
* }
* ]
* };
* }
* })
* );
* }
* };
* ```
*/
export declare function createRspackApp(esmx: Esmx, options?: RspackAppOptions): Promise<App>;