Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(binding): fix type error of binding.d.ts; add test for binding.d.ts #6274

Merged
merged 3 commits into from
Apr 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions crates/node_binding/binding.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
/* auto-generated by NAPI-RS */
/* eslint-disable */

/* -- banner.d.ts -- */
export type JsFilename =
h-a-n-a marked this conversation as resolved.
Show resolved Hide resolved
| string
| ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string);

export type LocalJsFilename = JsFilename;
/* -- banner.d.ts end -- */

/* -- napi-rs generated below -- */

export class ExternalObject<T> {
readonly '': {
Expand Down Expand Up @@ -33,10 +42,10 @@ export class JsCompilation {
pushDiagnostic(severity: "error" | "warning", title: string, message: string): void
pushNativeDiagnostics(diagnostics: ExternalObject<'Diagnostic[]'>): void
getStats(): JsStats
getAssetPath(filename: string | ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string), data: JsPathData): string
getAssetPathWithInfo(filename: string | ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string), data: JsPathData): PathWithInfo
getPath(filename: string | ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string), data: JsPathData): string
getPathWithInfo(filename: string | ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string), data: JsPathData): PathWithInfo
getAssetPath(filename: LocalJsFilename, data: JsPathData): string
getAssetPathWithInfo(filename: LocalJsFilename, data: JsPathData): PathWithInfo
getPath(filename: LocalJsFilename, data: JsPathData): string
getPathWithInfo(filename: LocalJsFilename, data: JsPathData): PathWithInfo
addFileDependencies(deps: Array<string>): void
addContextDependencies(deps: Array<string>): void
addMissingDependencies(deps: Array<string>): void
Expand Down Expand Up @@ -1075,11 +1084,11 @@ export interface RawOutputOptions {
wasmLoading: string
enabledWasmLoadingTypes: Array<string>
webassemblyModuleFilename: string
filename: string | ((pathData: PathData, assetInfo?: JsAssetInfo) => string)
chunkFilename: string | ((pathData: PathData, assetInfo?: JsAssetInfo) => string)
filename: JsFilename
chunkFilename: JsFilename
crossOriginLoading: RawCrossOriginLoading
cssFilename: string | ((pathData: PathData, assetInfo?: JsAssetInfo) => string)
cssChunkFilename: string | ((pathData: PathData, assetInfo?: JsAssetInfo) => string)
cssFilename: JsFilename
cssChunkFilename: JsFilename
hotUpdateMainFilename: string
hotUpdateChunkFilename: string
hotUpdateGlobal: string
Expand Down
3 changes: 2 additions & 1 deletion crates/node_binding/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
"build:release:x64": "cross-env RUST_TARGET=x86_64-apple-darwin node scripts/build.js --release",
"build:release:linux": "cross-env RUST_TARGET=x86_64-unknown-linux-gnu node scripts/build.js --release",
"build:release:win": "cross-env RUST_TARGET=x86_64-pc-windows-msvc node scripts/build.js --release",
"move-binding": "node scripts/move-binding"
"move-binding": "node scripts/move-binding",
"test": "tsc -p tsconfig.type-test.json"
},
"homepage": "https://rspack.dev",
"bugs": "https://github.com/web-infra-dev/rspack/issues",
Expand Down
12 changes: 12 additions & 0 deletions crates/node_binding/scripts/banner.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/* auto-generated by NAPI-RS */
/* eslint-disable */

/* -- banner.d.ts -- */
export type JsFilename =
| string
| ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string);

export type LocalJsFilename = JsFilename;
/* -- banner.d.ts end -- */

/* -- napi-rs generated below -- */
5 changes: 4 additions & 1 deletion crates/node_binding/scripts/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ async function build() {
"--dts",
"binding.d.ts",
"--no-js",
"--no-const-enum"
"--no-const-enum",
"--no-dts-header",
"--pipe",
`"node ./scripts/dts-header.js"`
];
if (release) {
args.push("--release");
Expand Down
30 changes: 30 additions & 0 deletions crates/node_binding/scripts/dts-header.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const NodeFS = require("node:fs");
const NodePath = require("node:path");
const [_1, _2, file] = process.argv;

if (file && NodePath.basename(file) === "binding.d.ts") {
const raw = getContent(NodeFS.readFileSync(file));
const banner = getContent(
NodeFS.readFileSync(NodePath.resolve(__dirname, "banner.d.ts"))
);
const hasBOM = raw.hasBOM || banner.hasBOM;
const content = Buffer.concat([
hasBOM ? Buffer.from([0xfeff]) : Buffer.from([]),
banner.buf.subarray(banner.offset),
raw.buf.subarray(raw.offset)
]);
NodeFS.writeFileSync(file, content);
}

/**
*
* @param {Buffer} buf
*/
function getContent(buf) {
const hasBOM = buf[0] === 0xfeff;
return {
hasBOM,
offset: hasBOM ? 1 : 0,
buf
};
}
7 changes: 7 additions & 0 deletions crates/node_binding/tsconfig.type-test.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"compilerOptions": {
"strict": true,
"noEmit": true
},
"include": ["binding.d.ts"]
}
4 changes: 0 additions & 4 deletions crates/rspack_binding_options/src/options/raw_output.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,14 +157,10 @@ pub struct RawOutputOptions {
pub wasm_loading: String,
pub enabled_wasm_loading_types: Vec<String>,
pub webassembly_module_filename: String,
#[napi(ts_type = "string | ((pathData: PathData, assetInfo?: JsAssetInfo) => string)")]
pub filename: JsFilename,
#[napi(ts_type = "string | ((pathData: PathData, assetInfo?: JsAssetInfo) => string)")]
pub chunk_filename: JsFilename,
pub cross_origin_loading: RawCrossOriginLoading,
#[napi(ts_type = "string | ((pathData: PathData, assetInfo?: JsAssetInfo) => string)")]
pub css_filename: JsFilename,
#[napi(ts_type = "string | ((pathData: PathData, assetInfo?: JsAssetInfo) => string)")]
pub css_chunk_filename: JsFilename,
pub hot_update_main_filename: String,
pub hot_update_chunk_filename: String,
Expand Down
10 changes: 1 addition & 9 deletions crates/rspack_binding_values/src/compilation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,6 @@ impl JsCompilation {
#[napi]
pub fn get_asset_path(
&self,
#[napi(ts_arg_type = "string | ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string)")]
filename: LocalJsFilename,
data: JsPathData,
) -> napi::Result<String> {
Expand All @@ -345,7 +344,6 @@ impl JsCompilation {
#[napi]
pub fn get_asset_path_with_info(
&self,
#[napi(ts_arg_type = "string | ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string)")]
filename: LocalJsFilename,
data: JsPathData,
) -> napi::Result<PathWithInfo> {
Expand All @@ -356,19 +354,13 @@ impl JsCompilation {
}

#[napi]
pub fn get_path(
&self,
#[napi(ts_arg_type = "string | ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string)")]
filename: LocalJsFilename,
data: JsPathData,
) -> napi::Result<String> {
pub fn get_path(&self, filename: LocalJsFilename, data: JsPathData) -> napi::Result<String> {
self.0.get_path(&filename.into(), data.as_core_path_data())
}

#[napi]
pub fn get_path_with_info(
&self,
#[napi(ts_arg_type = "string | ((pathData: JsPathData, assetInfo?: JsAssetInfo) => string)")]
filename: LocalJsFilename,
data: JsPathData,
) -> napi::Result<PathWithInfo> {
Expand Down
Loading