summaryrefslogtreecommitdiff
path: root/cli/standalone/serialization.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-11-01 12:27:00 -0400
committerGitHub <noreply@github.com>2024-11-01 12:27:00 -0400
commit826e42a5b5880c974ae019a7a21aade6a718062c (patch)
treea46502ecc3c73e4f7fc3a4517d83c7b2f3d0c0d3 /cli/standalone/serialization.rs
parent4774eab64d5176e997b6431f03f075782321b3d9 (diff)
fix: improved support for cjs and cts modules (#26558)
* cts support * better cjs/cts type checking * deno compile cjs/cts support * More efficient detect cjs (going towards stabilization) * Determination of whether .js, .ts, .jsx, or .tsx is cjs or esm is only done after loading * Support `import x = require(...);` Co-authored-by: Bartek IwaƄczuk <biwanczuk@gmail.com>
Diffstat (limited to 'cli/standalone/serialization.rs')
-rw-r--r--cli/standalone/serialization.rs49
1 files changed, 33 insertions, 16 deletions
diff --git a/cli/standalone/serialization.rs b/cli/standalone/serialization.rs
index 7b63c584e..a5eb649bf 100644
--- a/cli/standalone/serialization.rs
+++ b/cli/standalone/serialization.rs
@@ -214,14 +214,13 @@ impl RemoteModulesStoreBuilder {
}
}
-pub struct DenoCompileModuleData<'a> {
- pub specifier: &'a Url,
- pub media_type: MediaType,
- pub data: Cow<'static, [u8]>,
+pub enum DenoCompileModuleSource {
+ String(&'static str),
+ Bytes(Cow<'static, [u8]>),
}
-impl<'a> DenoCompileModuleData<'a> {
- pub fn into_for_v8(self) -> (&'a Url, ModuleType, ModuleSourceCode) {
+impl DenoCompileModuleSource {
+ pub fn into_for_v8(self) -> ModuleSourceCode {
fn into_bytes(data: Cow<'static, [u8]>) -> ModuleSourceCode {
ModuleSourceCode::Bytes(match data {
Cow::Borrowed(d) => d.into(),
@@ -229,16 +228,31 @@ impl<'a> DenoCompileModuleData<'a> {
})
}
- fn into_string_unsafe(data: Cow<'static, [u8]>) -> ModuleSourceCode {
+ match self {
// todo(https://github.com/denoland/deno_core/pull/943): store whether
// the string is ascii or not ahead of time so we can avoid the is_ascii()
// check in FastString::from_static
+ Self::String(s) => ModuleSourceCode::String(FastString::from_static(s)),
+ Self::Bytes(b) => into_bytes(b),
+ }
+ }
+}
+
+pub struct DenoCompileModuleData<'a> {
+ pub specifier: &'a Url,
+ pub media_type: MediaType,
+ pub data: Cow<'static, [u8]>,
+}
+
+impl<'a> DenoCompileModuleData<'a> {
+ pub fn into_parts(self) -> (&'a Url, ModuleType, DenoCompileModuleSource) {
+ fn into_string_unsafe(data: Cow<'static, [u8]>) -> DenoCompileModuleSource {
match data {
- Cow::Borrowed(d) => ModuleSourceCode::String(
+ Cow::Borrowed(d) => DenoCompileModuleSource::String(
// SAFETY: we know this is a valid utf8 string
- unsafe { FastString::from_static(std::str::from_utf8_unchecked(d)) },
+ unsafe { std::str::from_utf8_unchecked(d) },
),
- Cow::Owned(d) => ModuleSourceCode::Bytes(d.into_boxed_slice().into()),
+ Cow::Owned(d) => DenoCompileModuleSource::Bytes(Cow::Owned(d)),
}
}
@@ -257,11 +271,14 @@ impl<'a> DenoCompileModuleData<'a> {
(ModuleType::JavaScript, into_string_unsafe(self.data))
}
MediaType::Json => (ModuleType::Json, into_string_unsafe(self.data)),
- MediaType::Wasm => (ModuleType::Wasm, into_bytes(self.data)),
- // just assume javascript if we made it here
- MediaType::TsBuildInfo | MediaType::SourceMap | MediaType::Unknown => {
- (ModuleType::JavaScript, into_bytes(self.data))
+ MediaType::Wasm => {
+ (ModuleType::Wasm, DenoCompileModuleSource::Bytes(self.data))
}
+ // just assume javascript if we made it here
+ MediaType::Css | MediaType::SourceMap | MediaType::Unknown => (
+ ModuleType::JavaScript,
+ DenoCompileModuleSource::Bytes(self.data),
+ ),
};
(self.specifier, media_type, source)
}
@@ -551,7 +568,7 @@ fn serialize_media_type(media_type: MediaType) -> u8 {
MediaType::Tsx => 10,
MediaType::Json => 11,
MediaType::Wasm => 12,
- MediaType::TsBuildInfo => 13,
+ MediaType::Css => 13,
MediaType::SourceMap => 14,
MediaType::Unknown => 15,
}
@@ -572,7 +589,7 @@ fn deserialize_media_type(value: u8) -> Result<MediaType, AnyError> {
10 => Ok(MediaType::Tsx),
11 => Ok(MediaType::Json),
12 => Ok(MediaType::Wasm),
- 13 => Ok(MediaType::TsBuildInfo),
+ 13 => Ok(MediaType::Css),
14 => Ok(MediaType::SourceMap),
15 => Ok(MediaType::Unknown),
_ => bail!("Unknown media type value: {}", value),