rolldown
Version:
Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.
1,479 lines (1,339 loc) • 42.2 kB
TypeScript
type MaybePromise<T> = T | Promise<T>
type Nullable<T> = T | null | undefined
type VoidNullable<T = void> = T | null | undefined | void
export type BindingStringOrRegex = string | RegExp
export declare class BindingBundleEndEventData {
output: string
duration: number
}
export declare class BindingCallableBuiltinPlugin {
constructor(plugin: BindingBuiltinPlugin)
resolveId(id: string, importer?: string | undefined | null, options?: BindingHookJsResolveIdOptions | undefined | null): Promise<BindingHookJsResolveIdOutput | null>
load(id: string): Promise<BindingHookJsLoadOutput | null>
watchChange(path: string, event: BindingJsWatchChangeEvent): Promise<void>
}
export declare class BindingError {
kind: string
message: string
}
export declare class BindingModuleInfo {
id: string
importers: Array<string>
dynamicImporters: Array<string>
importedIds: Array<string>
dynamicallyImportedIds: Array<string>
exports: Array<string>
isEntry: boolean
get code(): string | null
}
export declare class BindingNormalizedOptions {
get input(): Array<string> | Record<string, string>
get cwd(): string | null
get platform(): 'node' | 'browser' | 'neutral'
get shimMissingExports(): boolean
get name(): string | null
get cssEntryFilenames(): string | undefined
get cssChunkFilenames(): string | undefined
get entryFilenames(): string | undefined
get chunkFilenames(): string | undefined
get assetFilenames(): string | undefined
get dir(): string | null
get file(): string | null
get format(): 'es' | 'cjs' | 'app' | 'iife' | 'umd'
get exports(): 'default' | 'named' | 'none' | 'auto'
get esModule(): boolean | 'if-default-prop'
get inlineDynamicImports(): boolean
get sourcemap(): boolean | 'inline' | 'hidden'
get banner(): string | undefined | null | undefined
get footer(): string | undefined | null | undefined
get intro(): string | undefined | null | undefined
get outro(): string | undefined | null | undefined
get externalLiveBindings(): boolean
get extend(): boolean
get globals(): Record<string, string> | undefined
get hashCharacters(): 'base64' | 'base36' | 'hex'
get sourcemapDebugIds(): boolean
get minify(): false | BindingMinifyOptions
get polyfillRequire(): boolean
get comments(): 'none' | 'preserve-legal'
}
export declare class BindingOutputAsset {
get fileName(): string
get originalFileName(): string | null
get originalFileNames(): Array<string>
get source(): BindingAssetSource
get name(): string | null
get names(): Array<string>
}
export declare class BindingOutputChunk {
get isEntry(): boolean
get isDynamicEntry(): boolean
get facadeModuleId(): string | null
get moduleIds(): Array<string>
get exports(): Array<string>
get fileName(): string
get modules(): BindingModules
get imports(): Array<string>
get dynamicImports(): Array<string>
get code(): string
get map(): string | null
get sourcemapFileName(): string | null
get preliminaryFileName(): string
get name(): string
}
export declare class BindingOutputs {
get chunks(): Array<BindingOutputChunk>
get assets(): Array<BindingOutputAsset>
get errors(): Array<Error | BindingError>
}
export declare class BindingPluginContext {
load(specifier: string, sideEffects: BindingHookSideEffects | undefined, fn: () => void): Promise<void>
resolve(specifier: string, importer?: string | undefined | null, extraOptions?: BindingPluginContextResolveOptions | undefined | null): Promise<BindingPluginContextResolvedId | null>
emitFile(file: BindingEmittedAsset, assetFilename?: string | undefined | null, fnSanitizedFileName?: string | undefined | null): string
emitChunk(file: BindingEmittedChunk): string
getFileName(referenceId: string): string
getModuleInfo(moduleId: string): BindingModuleInfo | null
getModuleIds(): Array<string>
addWatchFile(file: string): void
}
export declare class BindingRenderedChunk {
get name(): string
get isEntry(): boolean
get isDynamicEntry(): boolean
get facadeModuleId(): string | null
get moduleIds(): Array<string>
get exports(): Array<string>
get fileName(): string
get modules(): BindingModules
get imports(): Array<string>
get dynamicImports(): Array<string>
}
export declare class BindingRenderedModule {
get code(): string | null
get renderedExports(): Array<string>
}
export declare class BindingTransformPluginContext {
getCombinedSourcemap(): string
inner(): BindingPluginContext
}
export declare class BindingWatcher {
constructor(options: Array<BindingBundlerOptions>, notifyOption?: BindingNotifyOption | undefined | null)
close(): Promise<void>
start(listener: (data: BindingWatcherEvent) => void): Promise<void>
}
export declare class BindingWatcherChangeData {
path: string
kind: string
}
export declare class BindingWatcherEvent {
eventKind(): string
watchChangeData(): BindingWatcherChangeData
bundleEndData(): BindingBundleEndEventData
bundleEventKind(): string
errors(): Array<Error | BindingError>
}
export declare class Bundler {
constructor(option: BindingBundlerOptions)
write(): Promise<BindingOutputs>
generate(): Promise<BindingOutputs>
scan(): Promise<BindingOutputs>
close(): Promise<void>
get closed(): boolean
generateHmrPatch(changedFiles: Array<string>): Promise<string>
}
export declare class ParallelJsPluginRegistry {
id: number
workerCount: number
constructor(workerCount: number)
}
export declare class ParseResult {
get program(): import("@oxc-project/types").Program
get module(): EcmaScriptModule
get comments(): Array<Comment>
get errors(): Array<OxcError>
}
export interface AliasItem {
find: string
replacements: Array<string>
}
export interface ArrowFunctionsOptions {
/**
* This option enables the following:
* * Wrap the generated function in .bind(this) and keeps uses of this inside the function as-is, instead of using a renamed this.
* * Add a runtime check to ensure the functions are not instantiated.
* * Add names to arrow functions.
*
* @default false
*/
spec?: boolean
}
export interface BindingAdvancedChunksOptions {
minSize?: number
minShareCount?: number
groups?: Array<BindingMatchGroup>
maxSize?: number
minModuleSize?: number
maxModuleSize?: number
}
export interface BindingAliasPluginAlias {
find: BindingStringOrRegex
replacement: string
}
export interface BindingAliasPluginConfig {
entries: Array<BindingAliasPluginAlias>
}
export interface BindingAssetSource {
inner: string | Uint8Array
}
export interface BindingBuildImportAnalysisPluginConfig {
preloadCode: string
insertPreload: boolean
optimizeModulePreloadRelativePaths: boolean
renderBuiltUrl: boolean
isRelativeBase: boolean
}
export interface BindingBuiltinPlugin {
__name: BindingBuiltinPluginName
options?: unknown
}
export type BindingBuiltinPluginName = 'builtin:wasm-helper'|
'builtin:import-glob'|
'builtin:dynamic-import-vars'|
'builtin:module-preload-polyfill'|
'builtin:manifest'|
'builtin:load-fallback'|
'builtin:transform'|
'builtin:wasm-fallback'|
'builtin:alias'|
'builtin:json'|
'builtin:build-import-analysis'|
'builtin:replace'|
'builtin:vite-resolve'|
'builtin:module-federation'|
'builtin:isolated-declaration';
export interface BindingBundlerOptions {
inputOptions: BindingInputOptions
outputOptions: BindingOutputOptions
parallelPluginsRegistry?: ParallelJsPluginRegistry
}
export interface BindingChecksOptions {
circularDependency?: boolean
eval?: boolean
missingGlobalName?: boolean
missingNameOptionForIifeExport?: boolean
mixedExport?: boolean
unresolvedEntry?: boolean
unresolvedImport?: boolean
filenameConflict?: boolean
commonJsVariableInEsm?: boolean
importIsUndefined?: boolean
configurationFieldConflict?: boolean
}
export interface BindingDeferSyncScanData {
/** ModuleId */
id: string
sideEffects?: BindingHookSideEffects
}
export interface BindingEmittedAsset {
name?: string
fileName?: string
originalFileName?: string
source: BindingAssetSource
}
export interface BindingEmittedChunk {
name?: string
fileName?: string
id: string
importer?: string
}
export interface BindingExperimentalOptions {
strictExecutionOrder?: boolean
disableLiveBindings?: boolean
viteMode?: boolean
resolveNewUrlToAsset?: boolean
hmr?: boolean
}
export interface BindingGeneralHookFilter {
include?: Array<BindingStringOrRegex>
exclude?: Array<BindingStringOrRegex>
}
export interface BindingGlobImportPluginConfig {
root?: string
restoreQueryExtension?: boolean
}
export interface BindingHookJsLoadOutput {
code: string
map?: string
sideEffects: boolean | 'no-treeshake'
}
export interface BindingHookJsResolveIdOptions {
scan?: boolean
}
export interface BindingHookJsResolveIdOutput {
id: string
external?: BindingResolvedExternal
sideEffects: boolean | 'no-treeshake'
}
export interface BindingHookLoadOutput {
code: string
sideEffects?: BindingHookSideEffects
map?: BindingSourcemap
moduleType?: string
}
export interface BindingHookRenderChunkOutput {
code: string
map?: BindingSourcemap
}
export interface BindingHookResolveIdExtraArgs {
custom?: number
isEntry: boolean
kind: 'import' | 'dynamic-import' | 'require-call'
}
export interface BindingHookResolveIdOutput {
id: string
external?: BindingResolvedExternal
normalizeExternalId?: boolean
sideEffects?: BindingHookSideEffects
}
export declare enum BindingHookSideEffects {
True = 0,
False = 1,
NoTreeshake = 2
}
export interface BindingHookTransformOutput {
code?: string
sideEffects?: BindingHookSideEffects
map?: BindingSourcemap
moduleType?: string
}
export interface BindingInjectImportNamed {
tagNamed: true
imported: string
alias?: string
from: string
}
export interface BindingInjectImportNamespace {
tagNamespace: true
alias: string
from: string
}
export interface BindingInputItem {
name?: string
import: string
}
export interface BindingInputOptions {
external?: undefined | ((source: string, importer: string | undefined, isResolved: boolean) => boolean)
input: Array<BindingInputItem>
plugins: (BindingBuiltinPlugin | BindingPluginOptions | undefined)[]
resolve?: BindingResolveOptions
shimMissingExports?: boolean
platform?: 'node' | 'browser' | 'neutral'
logLevel: BindingLogLevel
onLog: (logLevel: 'debug' | 'warn' | 'info', log: BindingLog) => void
cwd: string
treeshake?: BindingTreeshake
moduleTypes?: Record<string, string>
define?: Array<[string, string]>
dropLabels?: Array<string>
inject?: Array<BindingInjectImportNamed | BindingInjectImportNamespace>
experimental?: BindingExperimentalOptions
profilerNames?: boolean
jsx?: BindingJsx
transform?: TransformOptions
watch?: BindingWatchOption
keepNames?: boolean
checks?: BindingChecksOptions
deferSyncScanData?: undefined | (() => BindingDeferSyncScanData[])
makeAbsoluteExternalsRelative?: BindingMakeAbsoluteExternalsRelative
}
export interface BindingIsolatedDeclarationPluginConfig {
stripInternal?: boolean
}
export interface BindingJsonPluginConfig {
stringify?: BindingJsonPluginStringify
isBuild?: boolean
namedExports?: boolean
}
export type BindingJsonPluginStringify =
boolean | string
export interface BindingJsonSourcemap {
file?: string
mappings?: string
sourceRoot?: string
sources?: Array<string | undefined | null>
sourcesContent?: Array<string | undefined | null>
names?: Array<string>
debugId?: string
x_google_ignoreList?: Array<number>
}
export interface BindingJsWatchChangeEvent {
event: string
}
/** TODO: support `preserve-react` mode */
export type BindingJsx =
| { type: 'Disable' }
| { type: 'Preserve' }
| { type: 'React' }
| { type: 'ReactJsx' }
| { type: 'Enable', field0: JsxOptions }
export interface BindingLog {
code: string
message: string
id?: string
exporter?: string
}
export declare enum BindingLogLevel {
Silent = 0,
Warn = 1,
Info = 2,
Debug = 3
}
export type BindingMakeAbsoluteExternalsRelative =
| { type: 'Bool', field0: boolean }
| { type: 'IfRelativeSource' }
export interface BindingManifestPluginConfig {
root: string
outPath: string
}
export interface BindingMatchGroup {
name: string
test?: BindingStringOrRegex
priority?: number
minSize?: number
minShareCount?: number
minModuleSize?: number
maxModuleSize?: number
maxSize?: number
}
export interface BindingMfManifest {
filePath?: string
disableAssetsAnalyze?: boolean
fileName?: string
}
export interface BindingMinifyOptions {
mangle: boolean
compress: boolean
removeWhitespace: boolean
}
export interface BindingModuleFederationPluginOption {
name: string
filename?: string
exposes?: Record<string, string>
remotes?: Array<BindingRemote>
shared?: Record<string, BindingShared>
runtimePlugins?: Array<string>
manifest?: BindingMfManifest
getPublicPath?: string
}
export interface BindingModulePreloadPolyfillPluginConfig {
skip?: boolean
}
export interface BindingModules {
values: Array<BindingRenderedModule>
keys: Array<string>
}
export interface BindingModuleSideEffectsRule {
test?: RegExp | undefined
sideEffects: boolean
external?: boolean | undefined
}
export interface BindingNotifyOption {
pollInterval?: number
compareContents?: boolean
}
export interface BindingOutputOptions {
name?: string
assetFileNames?: string | ((chunk: BindingPreRenderedAsset) => string)
entryFileNames?: string | ((chunk: PreRenderedChunk) => string)
chunkFileNames?: string | ((chunk: PreRenderedChunk) => string)
cssEntryFileNames?: string | ((chunk: PreRenderedChunk) => string)
cssChunkFileNames?: string | ((chunk: PreRenderedChunk) => string)
sanitizeFileName?: boolean | ((name: string) => string)
banner?: (chunk: BindingRenderedChunk) => MaybePromise<VoidNullable<string>>
dir?: string
file?: string
esModule?: boolean | 'if-default-prop'
exports?: 'default' | 'named' | 'none' | 'auto'
extend?: boolean
externalLiveBindings?: boolean
footer?: (chunk: BindingRenderedChunk) => MaybePromise<VoidNullable<string>>
format?: 'es' | 'cjs' | 'iife' | 'umd' | 'app'
globals?: Record<string, string> | ((name: string) => string)
hashCharacters?: 'base64' | 'base36' | 'hex'
inlineDynamicImports?: boolean
intro?: (chunk: BindingRenderedChunk) => MaybePromise<VoidNullable<string>>
outro?: (chunk: BindingRenderedChunk) => MaybePromise<VoidNullable<string>>
plugins: (BindingBuiltinPlugin | BindingPluginOptions | undefined)[]
sourcemap?: 'file' | 'inline' | 'hidden'
sourcemapIgnoreList?: (source: string, sourcemapPath: string) => boolean
sourcemapDebugIds?: boolean
sourcemapPathTransform?: (source: string, sourcemapPath: string) => string
minify?: boolean | 'dce-only' | BindingMinifyOptions
advancedChunks?: BindingAdvancedChunksOptions
comments?: 'none' | 'preserve-legal'
polyfillRequire?: boolean
target?: string
}
export interface BindingPluginContextResolvedId {
id: string
external: BindingResolvedExternal
}
export interface BindingPluginContextResolveOptions {
importKind?: 'import' | 'dynamic-import' | 'require-call'
skipSelf?: boolean
custom?: number
}
export interface BindingPluginHookMeta {
order?: BindingPluginOrder
}
export interface BindingPluginOptions {
name: string
buildStart?: (ctx: BindingPluginContext, opts: BindingNormalizedOptions) => MaybePromise<VoidNullable>
buildStartMeta?: BindingPluginHookMeta
resolveId?: (ctx: BindingPluginContext, specifier: string, importer: Nullable<string>, options: BindingHookResolveIdExtraArgs) => MaybePromise<VoidNullable<BindingHookResolveIdOutput>>
resolveIdMeta?: BindingPluginHookMeta
resolveIdFilter?: BindingGeneralHookFilter
resolveDynamicImport?: (ctx: BindingPluginContext, specifier: string, importer: Nullable<string>) => MaybePromise<VoidNullable<BindingHookResolveIdOutput>>
resolveDynamicImportMeta?: BindingPluginHookMeta
load?: (ctx: BindingPluginContext, id: string) => MaybePromise<VoidNullable<BindingHookLoadOutput>>
loadMeta?: BindingPluginHookMeta
loadFilter?: BindingGeneralHookFilter
transform?: (ctx: BindingTransformPluginContext, id: string, code: string, module_type: BindingTransformHookExtraArgs) => MaybePromise<VoidNullable<BindingHookTransformOutput>>
transformMeta?: BindingPluginHookMeta
transformFilter?: BindingTransformHookFilter
moduleParsed?: (ctx: BindingPluginContext, module: BindingModuleInfo) => MaybePromise<VoidNullable>
moduleParsedMeta?: BindingPluginHookMeta
buildEnd?: (ctx: BindingPluginContext, error?: (Error | BindingError)[]) => MaybePromise<VoidNullable>
buildEndMeta?: BindingPluginHookMeta
renderChunk?: (ctx: BindingPluginContext, code: string, chunk: BindingRenderedChunk, opts: BindingNormalizedOptions, chunks: Record<string, BindingRenderedChunk>) => MaybePromise<VoidNullable<BindingHookRenderChunkOutput>>
renderChunkMeta?: BindingPluginHookMeta
augmentChunkHash?: (ctx: BindingPluginContext, chunk: BindingRenderedChunk) => MaybePromise<void | string>
augmentChunkHashMeta?: BindingPluginHookMeta
renderStart?: (ctx: BindingPluginContext, opts: BindingNormalizedOptions) => void
renderStartMeta?: BindingPluginHookMeta
renderError?: (ctx: BindingPluginContext, error: (Error | BindingError)[]) => void
renderErrorMeta?: BindingPluginHookMeta
generateBundle?: (ctx: BindingPluginContext, bundle: BindingOutputs, isWrite: boolean, opts: BindingNormalizedOptions) => MaybePromise<VoidNullable<JsChangedOutputs>>
generateBundleMeta?: BindingPluginHookMeta
writeBundle?: (ctx: BindingPluginContext, bundle: BindingOutputs, opts: BindingNormalizedOptions) => MaybePromise<VoidNullable<JsChangedOutputs>>
writeBundleMeta?: BindingPluginHookMeta
closeBundle?: (ctx: BindingPluginContext) => MaybePromise<VoidNullable>
closeBundleMeta?: BindingPluginHookMeta
watchChange?: (ctx: BindingPluginContext, path: string, event: string) => MaybePromise<VoidNullable>
watchChangeMeta?: BindingPluginHookMeta
closeWatcher?: (ctx: BindingPluginContext) => MaybePromise<VoidNullable>
closeWatcherMeta?: BindingPluginHookMeta
banner?: (ctx: BindingPluginContext, chunk: BindingRenderedChunk) => void
bannerMeta?: BindingPluginHookMeta
footer?: (ctx: BindingPluginContext, chunk: BindingRenderedChunk) => void
footerMeta?: BindingPluginHookMeta
intro?: (ctx: BindingPluginContext, chunk: BindingRenderedChunk) => void
introMeta?: BindingPluginHookMeta
outro?: (ctx: BindingPluginContext, chunk: BindingRenderedChunk) => void
outroMeta?: BindingPluginHookMeta
}
export declare enum BindingPluginOrder {
Pre = 0,
Post = 1
}
export interface BindingPluginWithIndex {
index: number
plugin: BindingPluginOptions
}
export interface BindingPreRenderedAsset {
names: Array<string>
originalFileNames: Array<string>
source: BindingAssetSource
}
export interface BindingRemote {
type?: string
entry: string
name: string
entryGlobalName?: string
shareScope?: string
}
export interface BindingReplacePluginConfig {
values: Record<string, string>
delimiters?: [string, string]
preventAssignment?: boolean
objectGuards?: boolean
sourcemap?: boolean
}
export type BindingResolvedExternal =
| { type: 'Bool', field0: boolean }
| { type: 'Absolute' }
| { type: 'Relative' }
export interface BindingResolveOptions {
alias?: Array<AliasItem>
aliasFields?: Array<Array<string>>
conditionNames?: Array<string>
exportsFields?: Array<Array<string>>
extensions?: Array<string>
extensionAlias?: Array<ExtensionAliasItem>
mainFields?: Array<string>
mainFiles?: Array<string>
modules?: Array<string>
symlinks?: boolean
tsconfigFilename?: string
}
export interface BindingShared {
version?: string
shareScope?: string
singleton?: boolean
requiredVersion?: string
strictVersion?: boolean
}
export interface BindingSourcemap {
inner: string | BindingJsonSourcemap
}
export interface BindingTransformHookExtraArgs {
moduleType: string
}
export interface BindingTransformHookFilter {
code?: BindingGeneralHookFilter
moduleType?: Array<string>
id?: BindingGeneralHookFilter
}
export interface BindingTransformPluginConfig {
include?: Array<BindingStringOrRegex>
exclude?: Array<BindingStringOrRegex>
jsxInject?: string
reactRefresh?: boolean
target?: string
browserslist?: string
}
export interface BindingTreeshake {
moduleSideEffects: boolean | BindingModuleSideEffectsRule[] | ((id: string, is_external: boolean) => boolean | undefined)
annotations?: boolean
manualPureFunctions?: Array<string>
unknownGlobalSideEffects?: boolean
}
export interface BindingViteResolvePluginConfig {
resolveOptions: BindingViteResolvePluginResolveOptions
environmentConsumer: string
environmentName: string
external: true | string[]
noExternal: true | Array<string | RegExp>
dedupe: Array<string>
finalizeBareSpecifier?: (resolvedId: string, rawId: string, importer: string | null | undefined) => VoidNullable<string>
finalizeOtherSpecifiers?: (resolvedId: string, rawId: string) => VoidNullable<string>
runtime: string
}
export interface BindingViteResolvePluginResolveOptions {
isBuild: boolean
isProduction: boolean
asSrc: boolean
preferRelative: boolean
isRequire?: boolean
root: string
scan: boolean
mainFields: Array<string>
conditions: Array<string>
externalConditions: Array<string>
extensions: Array<string>
tryIndex: boolean
tryPrefix?: string
preserveSymlinks: boolean
}
export interface BindingWatchOption {
skipWrite?: boolean
include?: Array<BindingStringOrRegex>
exclude?: Array<BindingStringOrRegex>
buildDelay?: number
}
export interface Comment {
type: 'Line' | 'Block'
value: string
start: number
end: number
}
export interface CompilerAssumptions {
ignoreFunctionLength?: boolean
noDocumentAll?: boolean
objectRestNoSymbols?: boolean
pureGetters?: boolean
setPublicClassFields?: boolean
}
export interface DecoratorOptions {
/**
* Enables experimental support for decorators, which is a version of decorators that predates the TC39 standardization process.
*
* Decorators are a language feature which hasn’t yet been fully ratified into the JavaScript specification.
* This means that the implementation version in TypeScript may differ from the implementation in JavaScript when it it decided by TC39.
*
* @see https://www.typescriptlang.org/tsconfig/#experimentalDecorators
* @default false
*/
legacy?: boolean
/**
* Enables emitting decorator metadata.
*
* This option the same as [emitDecoratorMetadata](https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata)
* in TypeScript, and it only works when `legacy` is true.
*
* @see https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata
* @default false
*/
emitDecoratorMetadata?: boolean
}
export interface DynamicImport {
start: number
end: number
moduleRequest: Span
}
export interface EcmaScriptModule {
/**
* Has ESM syntax.
*
* i.e. `import` and `export` statements, and `import.meta`.
*
* Dynamic imports `import('foo')` are ignored since they can be used in non-ESM files.
*/
hasModuleSyntax: boolean
/** Import statements. */
staticImports: Array<StaticImport>
/** Export statements. */
staticExports: Array<StaticExport>
/** Dynamic import expressions. */
dynamicImports: Array<DynamicImport>
/** Span positions` of `import.meta` */
importMetas: Array<Span>
}
export interface ErrorLabel {
message?: string
start: number
end: number
}
export interface Es2015Options {
/** Transform arrow functions into function expressions. */
arrowFunction?: ArrowFunctionsOptions
}
export interface ExportExportName {
kind: ExportExportNameKind
name?: string
start?: number
end?: number
}
export type ExportExportNameKind = /** `export { name } */
'Name'|
/** `export default expression` */
'Default'|
/** `export * from "mod" */
'None';
export interface ExportImportName {
kind: ExportImportNameKind
name?: string
start?: number
end?: number
}
export type ExportImportNameKind = /** `export { name } */
'Name'|
/** `export * as ns from "mod"` */
'All'|
/** `export * from "mod"` */
'AllButDefault'|
/** Does not have a specifier. */
'None';
export interface ExportLocalName {
kind: ExportLocalNameKind
name?: string
start?: number
end?: number
}
export type ExportLocalNameKind = /** `export { name } */
'Name'|
/** `export default expression` */
'Default'|
/**
* If the exported value is not locally accessible from within the module.
* `export default function () {}`
*/
'None';
export interface ExtensionAliasItem {
target: string
replacements: Array<string>
}
/**
* Get offset within a `Uint8Array` which is aligned on 4 GiB.
*
* Does not check that the offset is within bounds of `buffer`.
* To ensure it always is, provide a `Uint8Array` of at least 4 GiB size.
*/
export declare function getBufferOffset(buffer: Uint8Array): number
export type HelperMode = /**
* Runtime mode (default): Helper functions are imported from a runtime package.
*
* Example:
*
* ```js
* import helperName from "@oxc-project/runtime/helpers/helperName";
* helperName(...arguments);
* ```
*/
'Runtime'|
/**
* External mode: Helper functions are accessed from a global `babelHelpers` object.
*
* Example:
*
* ```js
* babelHelpers.helperName(...arguments);
* ```
*/
'External';
export interface Helpers {
mode?: HelperMode
}
export interface ImportName {
kind: ImportNameKind
name?: string
start?: number
end?: number
}
export type ImportNameKind = /** `import { x } from "mod"` */
'Name'|
/** `import * as ns from "mod"` */
'NamespaceObject'|
/** `import defaultExport from "mod"` */
'Default';
/** TypeScript Isolated Declarations for Standalone DTS Emit */
export declare function isolatedDeclaration(filename: string, sourceText: string, options?: IsolatedDeclarationsOptions | undefined | null): IsolatedDeclarationsResult
export interface IsolatedDeclarationsOptions {
/**
* Do not emit declarations for code that has an @internal annotation in its JSDoc comment.
* This is an internal compiler option; use at your own risk, because the compiler does not check that the result is valid.
*
* Default: `false`
*
* See <https://www.typescriptlang.org/tsconfig/#stripInternal>
*/
stripInternal?: boolean
sourcemap?: boolean
}
export interface IsolatedDeclarationsResult {
code: string
map?: SourceMap
errors: Array<OxcError>
}
export interface JsChangedOutputs {
chunks: Array<JsOutputChunk>
assets: Array<JsOutputAsset>
deleted: Array<string>
}
export interface JsOutputAsset {
names: Array<string>
originalFileNames: Array<string>
filename: string
source: BindingAssetSource
}
export interface JsOutputChunk {
name: string
isEntry: boolean
isDynamicEntry: boolean
facadeModuleId?: string
moduleIds: Array<string>
exports: Array<string>
filename: string
modules: Record<string, BindingRenderedModule>
imports: Array<string>
dynamicImports: Array<string>
code: string
map?: BindingSourcemap
sourcemapFilename?: string
preliminaryFilename: string
}
/**
* Configure how TSX and JSX are transformed.
*
* @see {@link https://babeljs.io/docs/babel-plugin-transform-react-jsx#options}
*/
export interface JsxOptions {
/**
* Decides which runtime to use.
*
* - 'automatic' - auto-import the correct JSX factories
* - 'classic' - no auto-import
*
* @default 'automatic'
*/
runtime?: 'classic' | 'automatic'
/**
* Emit development-specific information, such as `__source` and `__self`.
*
* @default false
*
* @see {@link https://babeljs.io/docs/babel-plugin-transform-react-jsx-development}
*/
development?: boolean
/**
* Toggles whether or not to throw an error if an XML namespaced tag name
* is used.
*
* Though the JSX spec allows this, it is disabled by default since React's
* JSX does not currently have support for it.
*
* @default true
*/
throwIfNamespace?: boolean
/**
* Enables `@babel/plugin-transform-react-pure-annotations`.
*
* It will mark top-level React method calls as pure for tree shaking.
*
* @see {@link https://babeljs.io/docs/en/babel-plugin-transform-react-pure-annotations}
*
* @default true
*/
pure?: boolean
/**
* Replaces the import source when importing functions.
*
* @default 'react'
*/
importSource?: string
/**
* Replace the function used when compiling JSX expressions. It should be a
* qualified name (e.g. `React.createElement`) or an identifier (e.g.
* `createElement`).
*
* Only used for `classic` {@link runtime}.
*
* @default 'React.createElement'
*/
pragma?: string
/**
* Replace the component used when compiling JSX fragments. It should be a
* valid JSX tag name.
*
* Only used for `classic` {@link runtime}.
*
* @default 'React.Fragment'
*/
pragmaFrag?: string
/**
* When spreading props, use `Object.assign` directly instead of an extend helper.
*
* Only used for `classic` {@link runtime}.
*
* @default false
*/
useBuiltIns?: boolean
/**
* When spreading props, use inline object with spread elements directly
* instead of an extend helper or Object.assign.
*
* Only used for `classic` {@link runtime}.
*
* @default false
*/
useSpread?: boolean
/**
* Enable React Fast Refresh .
*
* Conforms to the implementation in {@link https://github.com/facebook/react/tree/v18.3.1/packages/react-refresh}
*
* @default false
*/
refresh?: boolean | ReactRefreshOptions
}
/**
* Transform JavaScript code to a Vite Node runnable module.
*
* @param filename The name of the file being transformed.
* @param sourceText the source code itself
* @param options The options for the transformation. See {@link
* ModuleRunnerTransformOptions} for more information.
*
* @returns an object containing the transformed code, source maps, and any
* errors that occurred during parsing or transformation.
*
* @deprecated Only works for Vite.
*/
export declare function moduleRunnerTransform(filename: string, sourceText: string, options?: ModuleRunnerTransformOptions | undefined | null): ModuleRunnerTransformResult
export interface ModuleRunnerTransformOptions {
/**
* Enable source map generation.
*
* When `true`, the `sourceMap` field of transform result objects will be populated.
*
* @default false
*
* @see {@link SourceMap}
*/
sourcemap?: boolean
}
export interface ModuleRunnerTransformResult {
/**
* The transformed code.
*
* If parsing failed, this will be an empty string.
*/
code: string
/**
* The source map for the transformed code.
*
* This will be set if {@link TransformOptions#sourcemap} is `true`.
*/
map?: SourceMap
deps: Array<string>
dynamicDeps: Array<string>
/**
* Parse and transformation errors.
*
* Oxc's parser recovers from common syntax errors, meaning that
* transformed code may still be available even if there are errors in this
* list.
*/
errors: Array<OxcError>
}
export interface OxcError {
severity: Severity
message: string
labels: Array<ErrorLabel>
helpMessage?: string
codeframe?: string
}
/**
* Parse asynchronously.
*
* Note: This function can be slower than `parseSync` due to the overhead of spawning a thread.
*/
export declare function parseAsync(filename: string, sourceText: string, options?: ParserOptions | undefined | null): Promise<ParseResult>
export interface ParserOptions {
sourceType?: 'script' | 'module' | 'unambiguous' | undefined
/** Treat the source text as `js`, `jsx`, `ts`, or `tsx`. */
lang?: 'js' | 'jsx' | 'ts' | 'tsx'
/**
* Return an AST which includes TypeScript-related properties, or excludes them.
*
* `'js'` is default for JS / JSX files.
* `'ts'` is default for TS / TSX files.
* The type of the file is determined from `lang` option, or extension of provided `filename`.
*/
astType?: 'js' | 'ts'
/**
* Emit `ParenthesizedExpression` and `TSParenthesizedType` in AST.
*
* If this option is true, parenthesized expressions are represented by
* (non-standard) `ParenthesizedExpression` and `TSParenthesizedType` nodes that
* have a single `expression` property containing the expression inside parentheses.
*
* @default true
*/
preserveParens?: boolean
/**
* Produce semantic errors with an additional AST pass.
* Semantic errors depend on symbols and scopes, where the parser does not construct.
* This adds a small performance overhead.
*
* @default false
*/
showSemanticErrors?: boolean
}
/** Parse synchronously. */
export declare function parseSync(filename: string, sourceText: string, options?: ParserOptions | undefined | null): ParseResult
/**
* Parses AST into provided `Uint8Array` buffer.
*
* Source text must be written into the start of the buffer, and its length (in UTF-8 bytes)
* provided as `source_len`.
*
* This function will parse the source, and write the AST into the buffer, starting at the end.
*
* It also writes to the very end of the buffer the offset of `Program` within the buffer.
*
* Caller can deserialize data from the buffer on JS side.
*
* # SAFETY
*
* Caller must ensure:
* * Source text is written into start of the buffer.
* * Source text's UTF-8 byte length is `source_len`.
* * The 1st `source_len` bytes of the buffer comprises a valid UTF-8 string.
*
* If source text is originally a JS string on JS side, and converted to a buffer with
* `Buffer.from(str)` or `new TextEncoder().encode(str)`, this guarantees it's valid UTF-8.
*
* # Panics
*
* Panics if source text is too long, or AST takes more memory than is available in the buffer.
*/
export declare function parseSyncRaw(filename: string, buffer: Uint8Array, sourceLen: number, options?: ParserOptions | undefined | null): void
export interface PreRenderedChunk {
name: string
isEntry: boolean
isDynamicEntry: boolean
facadeModuleId?: string
moduleIds: Array<string>
exports: Array<string>
}
/** Returns `true` if raw transfer is supported on this platform. */
export declare function rawTransferSupported(): boolean
export interface ReactRefreshOptions {
/**
* Specify the identifier of the refresh registration variable.
*
* @default `$RefreshReg$`.
*/
refreshReg?: string
/**
* Specify the identifier of the refresh signature variable.
*
* @default `$RefreshSig$`.
*/
refreshSig?: string
emitFullSignatures?: boolean
}
export declare function registerPlugins(id: number, plugins: Array<BindingPluginWithIndex>): void
export type Severity = 'Error'|
'Warning'|
'Advice';
/**
* Shutdown the tokio runtime manually.
*
* This is required for the wasm target with `tokio_unstable` cfg.
* In the wasm runtime, the `park` threads will hang there until the tokio::Runtime is shutdown.
*/
export declare function shutdownAsyncRuntime(): void
export interface SourceMap {
file?: string
mappings: string
names: Array<string>
sourceRoot?: string
sources: Array<string>
sourcesContent?: Array<string>
version: number
x_google_ignoreList?: Array<number>
}
export interface Span {
start: number
end: number
}
/**
* Start the async runtime manually.
*
* This is required when the async runtime is shutdown manually.
* Usually it's used in test.
*/
export declare function startAsyncRuntime(): void
export interface StaticExport {
start: number
end: number
entries: Array<StaticExportEntry>
}
export interface StaticExportEntry {
start: number
end: number
moduleRequest?: ValueSpan
/** The name under which the desired binding is exported by the module`. */
importName: ExportImportName
/** The name used to export this binding by this module. */
exportName: ExportExportName
/** The name that is used to locally access the exported value from within the importing module. */
localName: ExportLocalName
}
export interface StaticImport {
/** Start of import statement. */
start: number
/** End of import statement. */
end: number
/**
* Import source.
*
* ```js
* import { foo } from "mod";
* // ^^^
* ```
*/
moduleRequest: ValueSpan
/**
* Import specifiers.
*
* Empty for `import "mod"`.
*/
entries: Array<StaticImportEntry>
}
export interface StaticImportEntry {
/**
* The name under which the desired binding is exported by the module.
*
* ```js
* import { foo } from "mod";
* // ^^^
* import { foo as bar } from "mod";
* // ^^^
* ```
*/
importName: ImportName
/**
* The name that is used to locally access the imported value from within the importing module.
* ```js
* import { foo } from "mod";
* // ^^^
* import { foo as bar } from "mod";
* // ^^^
* ```
*/
localName: ValueSpan
/**
* Whether this binding is for a TypeScript type-only import.
*
* `true` for the following imports:
* ```ts
* import type { foo } from "mod";
* import { type foo } from "mod";
* ```
*/
isType: boolean
}
/**
* Transpile a JavaScript or TypeScript into a target ECMAScript version.
*
* @param filename The name of the file being transformed. If this is a
* relative path, consider setting the {@link TransformOptions#cwd} option..
* @param sourceText the source code itself
* @param options The options for the transformation. See {@link
* TransformOptions} for more information.
*
* @returns an object containing the transformed code, source maps, and any
* errors that occurred during parsing or transformation.
*/
export declare function transform(filename: string, sourceText: string, options?: TransformOptions | undefined | null): TransformResult
/**
* Options for transforming a JavaScript or TypeScript file.
*
* @see {@link transform}
*/
export interface TransformOptions {
sourceType?: 'script' | 'module' | 'unambiguous' | undefined
/** Treat the source text as `js`, `jsx`, `ts`, or `tsx`. */
lang?: 'js' | 'jsx' | 'ts' | 'tsx'
/**
* The current working directory. Used to resolve relative paths in other
* options.
*/
cwd?: string
/**
* Enable source map generation.
*
* When `true`, the `sourceMap` field of transform result objects will be populated.
*
* @default false
*
* @see {@link SourceMap}
*/
sourcemap?: boolean
/** Set assumptions in order to produce smaller output. */
assumptions?: CompilerAssumptions
/** Configure how TypeScript is transformed. */
typescript?: TypeScriptOptions
/** Configure how TSX and JSX are transformed. */
jsx?: 'preserve' | JsxOptions
/**
* Sets the target environment for the generated JavaScript.
*
* The lowest target is `es2015`.
*
* Example:
*
* * 'es2015'
* * ['es2020', 'chrome58', 'edge16', 'firefox57', 'node12', 'safari11']
*
* @default `esnext` (No transformation)
*
* @see [esbuild#target](https://esbuild.github.io/api/#target)
*/
target?: string | Array<string>
/** Behaviour for runtime helpers. */
helpers?: Helpers
/** Define Plugin */
define?: Record<string, string>
/** Inject Plugin */
inject?: Record<string, string | [string, string]>
/** Decorator plugin */
decorator?: DecoratorOptions
}
export interface TransformResult {
/**
* The transformed code.
*
* If parsing failed, this will be an empty string.
*/
code: string
/**
* The source map for the transformed code.
*
* This will be set if {@link TransformOptions#sourcemap} is `true`.
*/
map?: SourceMap
/**
* The `.d.ts` declaration file for the transformed code. Declarations are
* only generated if `declaration` is set to `true` and a TypeScript file
* is provided.
*
* If parsing failed and `declaration` is set, this will be an empty string.
*
* @see {@link TypeScriptOptions#declaration}
* @see [declaration tsconfig option](https://www.typescriptlang.org/tsconfig/#declaration)
*/
declaration?: string
/**
* Declaration source map. Only generated if both
* {@link TypeScriptOptions#declaration declaration} and
* {@link TransformOptions#sourcemap sourcemap} are set to `true`.
*/
declarationMap?: SourceMap
/**
* Helpers used.
*
* @internal
*
* Example:
*
* ```text
* { "_objectSpread": "@oxc-project/runtime/helpers/objectSpread2" }
* ```
*/
helpersUsed: Record<string, string>
/**
* Parse and transformation errors.
*
* Oxc's parser recovers from common syntax errors, meaning that
* transformed code may still be available even if there are errors in this
* list.
*/
errors: Array<OxcError>
}
export interface TypeScriptOptions {
jsxPragma?: string
jsxPragmaFrag?: string
onlyRemoveTypeImports?: boolean
allowNamespaces?: boolean
allowDeclareFields?: boolean
/**
* Also generate a `.d.ts` declaration file for TypeScript files.
*
* The source file must be compliant with all
* [`isolatedDeclarations`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-5.html#isolated-declarations)
* requirements.
*
* @default false
*/
declaration?: IsolatedDeclarationsOptions
/**
* Rewrite or remove TypeScript import/export declaration extensions.
*
* - When set to `rewrite`, it will change `.ts`, `.mts`, `.cts` extensions to `.js`, `.mjs`, `.cjs` respectively.
* - When set to `remove`, it will remove `.ts`/`.mts`/`.cts`/`.tsx` extension entirely.
* - When set to `true`, it's equivalent to `rewrite`.
* - When set to `false` or omitted, no changes will be made to the extensions.
*
* @default false
*/
rewriteImportExtensions?: 'rewrite' | 'remove' | boolean
}
export interface ValueSpan {
value: string
start: number
end: number
}