/** * @locuschain/lib/webpack-plugin * * Webpack 5 사용자가 lib 의 wasm 4 개를 자동으로 빌드 그래프에 포함시키도록 돕는 plugin. * * Webpack 5 는 기본적으로 `new URL(, import.meta.url)` 패턴을 인식해서 * asset/resource 모듈로 처리한다 — 따라서 대부분의 경우 lib 만 import 해도 wasm 이 * 자동으로 output 에 emit 된다. * * 다만 다음 환경에서 보장이 약해진다: * - 사용처가 `module: { rules: [{ test: /\.wasm$/, type: 'javascript/auto' }] }` 같은 * override 를 두어 native asset 처리를 비활성화한 경우 * - import.meta.url 처리가 비활성화된 target (`target: 'web'` 외) * - babel 등 다른 loader 가 패턴을 망가뜨리는 경우 * * 이 plugin 은 다음을 보장한다: * 1. lib 의 dist/autogen/wasm/*.wasm 4 개를 output 에 강제로 emit (asset 으로 등록) * 2. lib 코드 안의 `new URL(, import.meta.url)` 패턴을 그대로 보존해서 * Webpack 의 URLDependency 처리가 정상 작동하도록 * * 사용법: * // webpack.config.js * const { LocusWasmPlugin } = require('@locuschain/lib/webpack-plugin'); * module.exports = { * plugins: [new LocusWasmPlugin()], * // ... lib 의 ESM dist 를 Webpack 5 가 처리하도록 * experiments: { asyncWebAssembly: true, topLevelAwait: true } * }; * * 효과: * - output 의 `..wasm` 으로 wasm 4 개가 emit 되고 * - 사용처는 `await loadLocusWasm()` (인자 없이) 호출만 하면 동작. */ import type { Compiler } from 'webpack'; export interface LocusWasmPluginOptions { /** * 출력 디렉토리 prefix. 기본은 `assets/`. */ outputDir?: string; } export declare class LocusWasmPlugin { private readonly outputDir; constructor(opts?: LocusWasmPluginOptions); apply(compiler: Compiler): void; } export default LocusWasmPlugin;