Skip to content

Commit 09da311

Browse files
authored
chore(napi): remove tokio (#212)
1 parent 2c98773 commit 09da311

File tree

4 files changed

+28
-101
lines changed

4 files changed

+28
-101
lines changed

Cargo.lock

Lines changed: 0 additions & 95 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

napi/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ doctest = false
1212

1313
[dependencies]
1414
oxc_resolver = { path = ".." }
15-
napi = { version = "2.16.7", default-features = false, features = ["napi3", "serde-json", "async"] }
15+
napi = { version = "2.16.7", default-features = false, features = ["napi3", "serde-json"] }
1616
napi-derive = { version = "2.16.6" }
17-
tokio = "1.38.0"
1817
tracing-subscriber = { version = "0.3.18", features = [] } # Omit the `regex` feature
1918

2019
[build-dependencies]

napi/index.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ export class ResolverFactory {
77
cloneWithOptions(options: NapiResolveOptions): ResolverFactory
88
/** Clear the underlying cache. */
99
clearCache(): void
10-
sync(path: string, request: string): ResolveResult
11-
async(path: string, request: string): Promise<ResolveResult>
10+
/** Synchronously resolve `specifier` at an absolute path to a `directory`. */
11+
sync(directory: string, request: string): ResolveResult
12+
/** Asynchronously resolve `specifier` at an absolute path to a `directory`. */
13+
async(directory: string, request: string): Promise<ResolveResult>
1214
}
1315

1416
export const enum EnforceExtension {

napi/src/lib.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::{
77
sync::Arc,
88
};
99

10+
use napi::{bindgen_prelude::AsyncTask, Task};
1011
use napi_derive::napi;
1112
use oxc_resolver::{ResolveOptions, Resolver};
1213

@@ -42,6 +43,26 @@ pub fn sync(path: String, request: String) -> ResolveResult {
4243
resolve(&resolver, &path, &request)
4344
}
4445

46+
pub struct ResolveTask {
47+
resolver: Arc<Resolver>,
48+
directory: PathBuf,
49+
request: String,
50+
}
51+
52+
#[napi]
53+
impl Task for ResolveTask {
54+
type Output = ResolveResult;
55+
type JsValue = ResolveResult;
56+
57+
fn compute(&mut self) -> napi::Result<Self::Output> {
58+
Ok(resolve(&self.resolver, &self.directory, &self.request))
59+
}
60+
61+
fn resolve(&mut self, _: napi::Env, result: Self::Output) -> napi::Result<Self::JsValue> {
62+
Ok(result)
63+
}
64+
}
65+
4566
#[napi]
4667
pub struct ResolverFactory {
4768
resolver: Arc<Resolver>,
@@ -86,10 +107,10 @@ impl ResolverFactory {
86107
/// Asynchronously resolve `specifier` at an absolute path to a `directory`.
87108
#[allow(clippy::needless_pass_by_value)]
88109
#[napi(js_name = "async")]
89-
pub async fn resolve_async(&self, directory: String, request: String) -> ResolveResult {
110+
pub fn resolve_async(&self, directory: String, request: String) -> AsyncTask<ResolveTask> {
90111
let path = PathBuf::from(directory);
91112
let resolver = self.resolver.clone();
92-
tokio::spawn(async move { resolve(&resolver, &path, &request) }).await.unwrap()
113+
AsyncTask::new(ResolveTask { resolver, directory: path, request })
93114
}
94115

95116
fn normalize_options(op: NapiResolveOptions) -> ResolveOptions {

0 commit comments

Comments
 (0)