mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 02:48:24 +00:00
feat: emit files on demand and fix racy emit (#15220)
This commit is contained in:
parent
e99d64aced
commit
0ab262b901
17 changed files with 591 additions and 547 deletions
78
cli/cache/disk_cache.rs
vendored
78
cli/cache/disk_cache.rs
vendored
|
@ -3,13 +3,6 @@
|
|||
use crate::fs_util;
|
||||
use crate::http_cache::url_to_filename;
|
||||
|
||||
use super::CacheType;
|
||||
use super::Cacher;
|
||||
use super::EmitMetadata;
|
||||
|
||||
use deno_ast::ModuleSpecifier;
|
||||
use deno_core::error::AnyError;
|
||||
use deno_core::serde_json;
|
||||
use deno_core::url::Host;
|
||||
use deno_core::url::Url;
|
||||
use std::ffi::OsStr;
|
||||
|
@ -154,77 +147,6 @@ impl DiskCache {
|
|||
fs_util::atomic_write_file(&path, data, crate::http_cache::CACHE_PERM)
|
||||
.map_err(|e| with_io_context(&e, format!("{:#?}", &path)))
|
||||
}
|
||||
|
||||
fn get_emit_metadata(
|
||||
&self,
|
||||
specifier: &ModuleSpecifier,
|
||||
) -> Option<EmitMetadata> {
|
||||
let filename = self.get_cache_filename_with_extension(specifier, "meta")?;
|
||||
let bytes = self.get(&filename).ok()?;
|
||||
serde_json::from_slice(&bytes).ok()
|
||||
}
|
||||
|
||||
fn set_emit_metadata(
|
||||
&self,
|
||||
specifier: &ModuleSpecifier,
|
||||
data: EmitMetadata,
|
||||
) -> Result<(), AnyError> {
|
||||
let filename = self
|
||||
.get_cache_filename_with_extension(specifier, "meta")
|
||||
.unwrap();
|
||||
let bytes = serde_json::to_vec(&data)?;
|
||||
self.set(&filename, &bytes).map_err(|e| e.into())
|
||||
}
|
||||
}
|
||||
|
||||
// todo(13302): remove and replace with sqlite database
|
||||
impl Cacher for DiskCache {
|
||||
fn get(
|
||||
&self,
|
||||
cache_type: CacheType,
|
||||
specifier: &ModuleSpecifier,
|
||||
) -> Option<String> {
|
||||
let extension = match cache_type {
|
||||
CacheType::Emit => "js",
|
||||
CacheType::SourceMap => "js.map",
|
||||
CacheType::Version => {
|
||||
return self.get_emit_metadata(specifier).map(|d| d.version_hash)
|
||||
}
|
||||
};
|
||||
let filename =
|
||||
self.get_cache_filename_with_extension(specifier, extension)?;
|
||||
self
|
||||
.get(&filename)
|
||||
.ok()
|
||||
.and_then(|b| String::from_utf8(b).ok())
|
||||
}
|
||||
|
||||
fn set(
|
||||
&self,
|
||||
cache_type: CacheType,
|
||||
specifier: &ModuleSpecifier,
|
||||
value: String,
|
||||
) -> Result<(), AnyError> {
|
||||
let extension = match cache_type {
|
||||
CacheType::Emit => "js",
|
||||
CacheType::SourceMap => "js.map",
|
||||
CacheType::Version => {
|
||||
let data = if let Some(mut data) = self.get_emit_metadata(specifier) {
|
||||
data.version_hash = value;
|
||||
data
|
||||
} else {
|
||||
EmitMetadata {
|
||||
version_hash: value,
|
||||
}
|
||||
};
|
||||
return self.set_emit_metadata(specifier, data);
|
||||
}
|
||||
};
|
||||
let filename = self
|
||||
.get_cache_filename_with_extension(specifier, extension)
|
||||
.unwrap();
|
||||
self.set(&filename, value.as_bytes()).map_err(|e| e.into())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue