Skip to content

Commit c060a8d

Browse files
committed
feat(rust): pass NormalizedOutputOptions from rust to js
1 parent 9755e1b commit c060a8d

File tree

13 files changed

+108
-66
lines changed

13 files changed

+108
-66
lines changed

crates/rolldown_binding/src/types/binding_normalized_options.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,13 @@ impl BindingNormalizedOptions {
4545
Either::A(self.inner.input.iter().map(|input| input.import.clone()).collect())
4646
}
4747
}
48+
49+
// For `Fn` variant, we can't convert it to JS, so we just return `None`.
50+
#[napi(getter)]
51+
pub fn entry_filenames(&self) -> Option<String> {
52+
match &self.inner.entry_filenames {
53+
rolldown::ChunkFilenamesOutputOption::String(inner) => Some(inner.clone()),
54+
rolldown::ChunkFilenamesOutputOption::Fn(_) => None,
55+
}
56+
}
4857
}

packages/rolldown/src/binding.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export declare class BindingModuleInfo {
3939
export declare class BindingNormalizedOptions {
4040
get shimMissingExports(): boolean
4141
get input(): Array<string> | Record<string, string>
42+
get entryFilenames(): string | null
4243
}
4344

4445
export declare class BindingOutputAsset {
@@ -692,7 +693,7 @@ export interface JsxOptions {
692693
/**
693694
* Enable React Fast Refresh .
694695
*
695-
* Conforms to the implementation in {@link https://github.com/facebook/react/tree/main/packages/react-refresh}
696+
* Conforms to the implementation in {@link https://github.com/facebook/react/tree/v18.3.1/packages/react-refresh}
696697
*
697698
* @default false
698699
*/
Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,26 @@
1+
import { unsupported } from '../utils/misc'
2+
import type { BindingNormalizedOptions } from '../binding'
3+
import { ChunkFileNamesFunction } from './output-options'
4+
15
export type InternalModuleFormat = 'es' | 'cjs' | 'iife' | 'umd'
26

3-
export interface NormalizedOutputOptions {}
7+
export interface NormalizedOutputOptions {
8+
entryFileNames: string | ChunkFileNamesFunction
9+
}
10+
11+
// TODO: I guess we make these getters enumerable so it act more like a plain object
12+
export class NormalizedOutputOptionsImpl implements NormalizedOutputOptions {
13+
inner: BindingNormalizedOptions
14+
constructor(inner: BindingNormalizedOptions) {
15+
this.inner = inner
16+
}
17+
18+
get entryFileNames() {
19+
return (
20+
this.inner.entryFilenames ||
21+
unsupported(
22+
'You should not take `NormalizedOutputOptions#entryFileNames` and call it directly',
23+
)
24+
)
25+
}
26+
}

packages/rolldown/src/parallel-plugin-worker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import { registerPlugins } from './binding'
33
import type { WorkerData } from './utils/initialize-parallel-plugins'
44
import type { defineParallelPluginImplementation } from './parallel-plugin'
55
import { bindingifyPlugin } from './plugin/bindingify-plugin'
6-
import type { NormalizedOutputOptions } from './options/normalized-output-options'
76
import { PluginContextData } from './plugin/plugin-context-data'
87
import type { InputOptions } from './options/input-options'
8+
import type { OutputOptions } from './options/output-options'
99

1010
const { registryId, pluginInfos, threadNumber } = workerData as WorkerData
1111

@@ -26,7 +26,7 @@ const { registryId, pluginInfos, threadNumber } = workerData as WorkerData
2626
plugin: bindingifyPlugin(
2727
plugin,
2828
{} as InputOptions,
29-
{} as NormalizedOutputOptions,
29+
{} as OutputOptions,
3030
// TODO need to find a way to share pluginContextData
3131
new PluginContextData(),
3232
() => {},

packages/rolldown/src/plugin/bindingify-output-hooks.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ import {
1414
import { transformToRenderedModule } from '../utils/transform-rendered-module'
1515
import type { BindingifyPluginArgs } from './bindingify-plugin'
1616
import { NormalizedInputOptions } from '../options/normalized-input-options'
17+
import {
18+
NormalizedOutputOptions,
19+
NormalizedOutputOptionsImpl,
20+
} from '../options/normalized-output-options'
1721

1822
export function bindingifyRenderStart(
1923
args: BindingifyPluginArgs,
@@ -34,7 +38,7 @@ export function bindingifyRenderStart(
3438
args.onLog,
3539
args.logLevel,
3640
),
37-
args.outputOptions,
41+
new NormalizedOutputOptionsImpl(opts),
3842
new NormalizedInputOptions(opts, args.onLog),
3943
)
4044
},
@@ -66,7 +70,8 @@ export function bindingifyRenderChunk(
6670
),
6771
code,
6872
chunk,
69-
args.outputOptions,
73+
// TODO(hyf0): pass `BindingNormalizedOptions` in `renderChunk` hook
74+
{} as NormalizedOutputOptions,
7075
)
7176

7277
if (ret == null) {
@@ -170,7 +175,8 @@ export function bindingifyGenerateBundle(
170175
args.onLog,
171176
args.logLevel,
172177
),
173-
args.outputOptions,
178+
// TODO(hyf0): pass `BindingNormalizedOptions` in `renderChunk` hook
179+
{} as NormalizedOutputOptions,
174180
output,
175181
isWrite,
176182
)
@@ -204,7 +210,8 @@ export function bindingifyWriteBundle(
204210
args.onLog,
205211
args.logLevel,
206212
),
207-
args.outputOptions,
213+
// TODO(hyf0): pass `BindingNormalizedOptions` in `renderChunk` hook
214+
{} as NormalizedOutputOptions,
208215
output,
209216
)
210217
return collectChangedBundle(changed, output)

packages/rolldown/src/plugin/bindingify-plugin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
} from './bindingify-output-hooks'
2525

2626
import type { Plugin } from './index'
27-
import type { NormalizedOutputOptions } from '../options/normalized-output-options'
27+
import type { OutputOptions } from '../options/output-options'
2828
import { PluginContextData } from './plugin-context-data'
2929
import {
3030
bindingifyCloseWatcher,
@@ -37,7 +37,7 @@ import type { InputOptions } from '../options/input-options'
3737
export interface BindingifyPluginArgs {
3838
plugin: Plugin
3939
options: InputOptions
40-
outputOptions: NormalizedOutputOptions
40+
outputOptions: OutputOptions
4141
pluginContextData: PluginContextData
4242
onLog: LogHandler
4343
logLevel: LogLevelOption
@@ -47,7 +47,7 @@ export interface BindingifyPluginArgs {
4747
export function bindingifyPlugin(
4848
plugin: Plugin,
4949
options: InputOptions,
50-
outputOptions: NormalizedOutputOptions,
50+
outputOptions: OutputOptions,
5151
pluginContextData: PluginContextData,
5252
onLog: LogHandler,
5353
logLevel: LogLevelOption,

packages/rolldown/src/rolldown-binding.wasi-browser.js

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -134,30 +134,30 @@ function __napi_rs_initialize_modules(__napiInstance) {
134134
__napiInstance.exports['__napi_register__BindingModuleInfo_struct_81']?.()
135135
__napiInstance.exports['__napi_register__BindingModuleInfo_impl_83']?.()
136136
__napiInstance.exports['__napi_register__BindingNormalizedOptions_struct_84']?.()
137-
__napiInstance.exports['__napi_register__BindingNormalizedOptions_impl_87']?.()
138-
__napiInstance.exports['__napi_register__BindingOutputAsset_struct_88']?.()
139-
__napiInstance.exports['__napi_register__BindingOutputAsset_impl_93']?.()
140-
__napiInstance.exports['__napi_register__JsOutputAsset_struct_94']?.()
141-
__napiInstance.exports['__napi_register__BindingOutputChunk_struct_95']?.()
142-
__napiInstance.exports['__napi_register__BindingOutputChunk_impl_110']?.()
143-
__napiInstance.exports['__napi_register__JsOutputChunk_struct_111']?.()
144-
__napiInstance.exports['__napi_register__BindingOutputs_struct_112']?.()
145-
__napiInstance.exports['__napi_register__BindingOutputs_impl_116']?.()
146-
__napiInstance.exports['__napi_register__JsChangedOutputs_struct_117']?.()
147-
__napiInstance.exports['__napi_register__PreRenderedChunk_struct_118']?.()
148-
__napiInstance.exports['__napi_register__RenderedChunk_struct_119']?.()
149-
__napiInstance.exports['__napi_register__BindingRenderedModule_struct_120']?.()
150-
__napiInstance.exports['__napi_register__BindingRenderedModule_impl_122']?.()
151-
__napiInstance.exports['__napi_register__AliasItem_struct_123']?.()
152-
__napiInstance.exports['__napi_register__ExtensionAliasItem_struct_124']?.()
153-
__napiInstance.exports['__napi_register__BindingSourcemap_struct_125']?.()
154-
__napiInstance.exports['__napi_register__BindingJsonSourcemap_struct_126']?.()
155-
__napiInstance.exports['__napi_register__BindingWatcher_struct_127']?.()
156-
__napiInstance.exports['__napi_register__BindingWatcher_impl_130']?.()
157-
__napiInstance.exports['__napi_register__BindingWatcherEvent_struct_131']?.()
158-
__napiInstance.exports['__napi_register__BindingWatcherEvent_impl_137']?.()
159-
__napiInstance.exports['__napi_register__BindingWatcherChangeData_struct_138']?.()
160-
__napiInstance.exports['__napi_register__BindingBundleEndEventData_struct_139']?.()
137+
__napiInstance.exports['__napi_register__BindingNormalizedOptions_impl_88']?.()
138+
__napiInstance.exports['__napi_register__BindingOutputAsset_struct_89']?.()
139+
__napiInstance.exports['__napi_register__BindingOutputAsset_impl_94']?.()
140+
__napiInstance.exports['__napi_register__JsOutputAsset_struct_95']?.()
141+
__napiInstance.exports['__napi_register__BindingOutputChunk_struct_96']?.()
142+
__napiInstance.exports['__napi_register__BindingOutputChunk_impl_111']?.()
143+
__napiInstance.exports['__napi_register__JsOutputChunk_struct_112']?.()
144+
__napiInstance.exports['__napi_register__BindingOutputs_struct_113']?.()
145+
__napiInstance.exports['__napi_register__BindingOutputs_impl_117']?.()
146+
__napiInstance.exports['__napi_register__JsChangedOutputs_struct_118']?.()
147+
__napiInstance.exports['__napi_register__PreRenderedChunk_struct_119']?.()
148+
__napiInstance.exports['__napi_register__RenderedChunk_struct_120']?.()
149+
__napiInstance.exports['__napi_register__BindingRenderedModule_struct_121']?.()
150+
__napiInstance.exports['__napi_register__BindingRenderedModule_impl_123']?.()
151+
__napiInstance.exports['__napi_register__AliasItem_struct_124']?.()
152+
__napiInstance.exports['__napi_register__ExtensionAliasItem_struct_125']?.()
153+
__napiInstance.exports['__napi_register__BindingSourcemap_struct_126']?.()
154+
__napiInstance.exports['__napi_register__BindingJsonSourcemap_struct_127']?.()
155+
__napiInstance.exports['__napi_register__BindingWatcher_struct_128']?.()
156+
__napiInstance.exports['__napi_register__BindingWatcher_impl_131']?.()
157+
__napiInstance.exports['__napi_register__BindingWatcherEvent_struct_132']?.()
158+
__napiInstance.exports['__napi_register__BindingWatcherEvent_impl_138']?.()
159+
__napiInstance.exports['__napi_register__BindingWatcherChangeData_struct_139']?.()
160+
__napiInstance.exports['__napi_register__BindingBundleEndEventData_struct_140']?.()
161161
}
162162
export const BindingBundleEndEventData = __napiModule.exports.BindingBundleEndEventData
163163
export const BindingCallableBuiltinPlugin = __napiModule.exports.BindingCallableBuiltinPlugin

packages/rolldown/src/rolldown-binding.wasi.cjs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -158,30 +158,30 @@ function __napi_rs_initialize_modules(__napiInstance) {
158158
__napiInstance.exports['__napi_register__BindingModuleInfo_struct_81']?.()
159159
__napiInstance.exports['__napi_register__BindingModuleInfo_impl_83']?.()
160160
__napiInstance.exports['__napi_register__BindingNormalizedOptions_struct_84']?.()
161-
__napiInstance.exports['__napi_register__BindingNormalizedOptions_impl_87']?.()
162-
__napiInstance.exports['__napi_register__BindingOutputAsset_struct_88']?.()
163-
__napiInstance.exports['__napi_register__BindingOutputAsset_impl_93']?.()
164-
__napiInstance.exports['__napi_register__JsOutputAsset_struct_94']?.()
165-
__napiInstance.exports['__napi_register__BindingOutputChunk_struct_95']?.()
166-
__napiInstance.exports['__napi_register__BindingOutputChunk_impl_110']?.()
167-
__napiInstance.exports['__napi_register__JsOutputChunk_struct_111']?.()
168-
__napiInstance.exports['__napi_register__BindingOutputs_struct_112']?.()
169-
__napiInstance.exports['__napi_register__BindingOutputs_impl_116']?.()
170-
__napiInstance.exports['__napi_register__JsChangedOutputs_struct_117']?.()
171-
__napiInstance.exports['__napi_register__PreRenderedChunk_struct_118']?.()
172-
__napiInstance.exports['__napi_register__RenderedChunk_struct_119']?.()
173-
__napiInstance.exports['__napi_register__BindingRenderedModule_struct_120']?.()
174-
__napiInstance.exports['__napi_register__BindingRenderedModule_impl_122']?.()
175-
__napiInstance.exports['__napi_register__AliasItem_struct_123']?.()
176-
__napiInstance.exports['__napi_register__ExtensionAliasItem_struct_124']?.()
177-
__napiInstance.exports['__napi_register__BindingSourcemap_struct_125']?.()
178-
__napiInstance.exports['__napi_register__BindingJsonSourcemap_struct_126']?.()
179-
__napiInstance.exports['__napi_register__BindingWatcher_struct_127']?.()
180-
__napiInstance.exports['__napi_register__BindingWatcher_impl_130']?.()
181-
__napiInstance.exports['__napi_register__BindingWatcherEvent_struct_131']?.()
182-
__napiInstance.exports['__napi_register__BindingWatcherEvent_impl_137']?.()
183-
__napiInstance.exports['__napi_register__BindingWatcherChangeData_struct_138']?.()
184-
__napiInstance.exports['__napi_register__BindingBundleEndEventData_struct_139']?.()
161+
__napiInstance.exports['__napi_register__BindingNormalizedOptions_impl_88']?.()
162+
__napiInstance.exports['__napi_register__BindingOutputAsset_struct_89']?.()
163+
__napiInstance.exports['__napi_register__BindingOutputAsset_impl_94']?.()
164+
__napiInstance.exports['__napi_register__JsOutputAsset_struct_95']?.()
165+
__napiInstance.exports['__napi_register__BindingOutputChunk_struct_96']?.()
166+
__napiInstance.exports['__napi_register__BindingOutputChunk_impl_111']?.()
167+
__napiInstance.exports['__napi_register__JsOutputChunk_struct_112']?.()
168+
__napiInstance.exports['__napi_register__BindingOutputs_struct_113']?.()
169+
__napiInstance.exports['__napi_register__BindingOutputs_impl_117']?.()
170+
__napiInstance.exports['__napi_register__JsChangedOutputs_struct_118']?.()
171+
__napiInstance.exports['__napi_register__PreRenderedChunk_struct_119']?.()
172+
__napiInstance.exports['__napi_register__RenderedChunk_struct_120']?.()
173+
__napiInstance.exports['__napi_register__BindingRenderedModule_struct_121']?.()
174+
__napiInstance.exports['__napi_register__BindingRenderedModule_impl_123']?.()
175+
__napiInstance.exports['__napi_register__AliasItem_struct_124']?.()
176+
__napiInstance.exports['__napi_register__ExtensionAliasItem_struct_125']?.()
177+
__napiInstance.exports['__napi_register__BindingSourcemap_struct_126']?.()
178+
__napiInstance.exports['__napi_register__BindingJsonSourcemap_struct_127']?.()
179+
__napiInstance.exports['__napi_register__BindingWatcher_struct_128']?.()
180+
__napiInstance.exports['__napi_register__BindingWatcher_impl_131']?.()
181+
__napiInstance.exports['__napi_register__BindingWatcherEvent_struct_132']?.()
182+
__napiInstance.exports['__napi_register__BindingWatcherEvent_impl_138']?.()
183+
__napiInstance.exports['__napi_register__BindingWatcherChangeData_struct_139']?.()
184+
__napiInstance.exports['__napi_register__BindingBundleEndEventData_struct_140']?.()
185185
}
186186
module.exports.BindingBundleEndEventData = __napiModule.exports.BindingBundleEndEventData
187187
module.exports.BindingCallableBuiltinPlugin = __napiModule.exports.BindingCallableBuiltinPlugin

packages/rolldown/src/utils/bindingify-input-options.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { arraify, unsupported } from './misc'
1010
import { normalizedStringOrRegex } from './normalize-string-or-regex'
1111
import type { RolldownPlugin } from '..'
1212
import type { InputOptions } from '../options/input-options'
13-
import type { NormalizedOutputOptions } from '../options/normalized-output-options'
13+
import type { OutputOptions } from '../options/output-options'
1414
import type {
1515
BindingWatchOption,
1616
BindingInputOptions,
@@ -21,7 +21,7 @@ import type {
2121
export function bindingifyInputOptions(
2222
rawPlugins: RolldownPlugin[],
2323
inputOptions: InputOptions,
24-
outputOptions: NormalizedOutputOptions,
24+
outputOptions: OutputOptions,
2525
): BindingInputOptions {
2626
const pluginContextData = new PluginContextData()
2727
const logLevel = inputOptions.logLevel || LOG_LEVEL_INFO

packages/rolldown/tests/fixtures/plugin/render-start/_config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ export default defineTest({
1919
renderStart: (outputOptions, inputOptions) => {
2020
renderStartFn()
2121
expect(inputOptions.input).toStrictEqual([entry])
22-
// @ts-expect-error TODO(hyf0): will be fixed in https://github.com/rolldown/rolldown/pull/2899
2322
expect(outputOptions.entryFileNames).toBe(entryFileNames)
2423
},
2524
},

0 commit comments

Comments
 (0)