Skip to content

Commit 083f823

Browse files
Merge branch 'main' into f_cache_env_file
2 parents b16821f + d372c0d commit 083f823

File tree

17 files changed

+274
-153
lines changed

17 files changed

+274
-153
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ license = "MIT"
5353
repository = "https://github.com/denoland/deno"
5454

5555
[workspace.dependencies]
56-
deno_ast = { version = "=0.46.6", features = ["transpiling"] }
56+
deno_ast = { version = "=0.46.7", features = ["transpiling"] }
5757
deno_core = { version = "0.346.0" }
5858

5959
deno_cache_dir = "=0.20.0"

cli/factory.rs

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ use deno_resolver::factory::DenoDirPathProviderOptions;
3838
use deno_resolver::factory::NpmProcessStateOptions;
3939
use deno_resolver::factory::ResolverFactoryOptions;
4040
use deno_resolver::factory::SpecifiedImportMapProvider;
41-
use deno_resolver::graph::FoundPackageJsonDepFlag;
4241
use deno_resolver::npm::managed::NpmResolutionCell;
4342
use deno_resolver::npm::DenoInNpmPackageChecker;
4443
use deno_resolver::workspace::WorkspaceResolver;
@@ -103,7 +102,6 @@ use crate::npm::NpmResolutionInitializer;
103102
use crate::npm::WorkspaceNpmPatchPackages;
104103
use crate::resolver::on_resolve_diagnostic;
105104
use crate::resolver::CliCjsTracker;
106-
use crate::resolver::CliDenoResolver;
107105
use crate::resolver::CliNpmGraphResolver;
108106
use crate::resolver::CliNpmReqResolver;
109107
use crate::resolver::CliResolver;
@@ -315,7 +313,6 @@ struct CliFactoryServices {
315313
eszip_module_loader_provider: Deferred<Arc<EszipModuleLoaderProvider>>,
316314
feature_checker: Deferred<Arc<FeatureChecker>>,
317315
file_fetcher: Deferred<Arc<CliFileFetcher>>,
318-
found_pkg_json_dep_flag: Arc<FoundPackageJsonDepFlag>,
319316
fs: Deferred<Arc<dyn deno_fs::FileSystem>>,
320317
http_client_provider: Deferred<Arc<HttpClientProvider>>,
321318
main_graph_container: Deferred<Arc<MainModuleGraphContainer>>,
@@ -337,7 +334,6 @@ struct CliFactoryServices {
337334
parsed_source_cache: Deferred<Arc<ParsedSourceCache>>,
338335
permission_desc_parser:
339336
Deferred<Arc<RuntimePermissionDescriptorParser<CliSys>>>,
340-
resolver: Deferred<Arc<CliResolver>>,
341337
resolver_factory: Deferred<Arc<CliResolverFactory>>,
342338
root_cert_store_provider: Deferred<Arc<dyn RootCertStoreProvider>>,
343339
root_permissions_container: Deferred<PermissionsContainer>,
@@ -615,7 +611,10 @@ impl CliFactory {
615611
let cli_options = self.cli_options()?;
616612
Ok(Arc::new(CliNpmGraphResolver::new(
617613
self.npm_installer_if_managed().await?.cloned(),
618-
self.services.found_pkg_json_dep_flag.clone(),
614+
self
615+
.resolver_factory()?
616+
.found_package_json_dep_flag()
617+
.clone(),
619618
cli_options.default_npm_caching_strategy(),
620619
)))
621620
}
@@ -811,28 +810,11 @@ impl CliFactory {
811810
self.resolver_factory()?.workspace_resolver().await
812811
}
813812

814-
pub async fn deno_resolver(&self) -> Result<&Arc<CliDenoResolver>, AnyError> {
813+
pub async fn resolver(&self) -> Result<&Arc<CliResolver>, AnyError> {
815814
self.initialize_npm_resolution_if_managed().await?;
816815
self.resolver_factory()?.deno_resolver().await
817816
}
818817

819-
pub async fn resolver(&self) -> Result<&Arc<CliResolver>, AnyError> {
820-
self
821-
.services
822-
.resolver
823-
.get_or_try_init_async(
824-
async {
825-
Ok(Arc::new(CliResolver::new(
826-
self.deno_resolver().await?.clone(),
827-
self.services.found_pkg_json_dep_flag.clone(),
828-
Box::new(on_resolve_diagnostic),
829-
)))
830-
}
831-
.boxed_local(),
832-
)
833-
.await
834-
}
835-
836818
pub fn maybe_file_watcher_reporter(&self) -> &Option<FileWatcherReporter> {
837819
let maybe_file_watcher_reporter = self
838820
.watcher_communicator
@@ -1418,6 +1400,9 @@ impl CliFactory {
14181400
})),
14191401
bare_node_builtins: self.flags.unstable_config.bare_node_builtins,
14201402
unstable_sloppy_imports: self.flags.unstable_config.sloppy_imports,
1403+
on_mapped_resolution_diagnostic: Some(Arc::new(
1404+
on_resolve_diagnostic,
1405+
)),
14211406
package_json_cache: Some(Arc::new(
14221407
node_resolver::PackageJsonThreadLocalCache,
14231408
)),

cli/lsp/resolver.rs

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ use crate::npm::CliNpmResolverManagedSnapshotOption;
7777
use crate::npm::NpmResolutionInitializer;
7878
use crate::npm::WorkspaceNpmPatchPackages;
7979
use crate::resolver::on_resolve_diagnostic;
80-
use crate::resolver::CliDenoResolver;
8180
use crate::resolver::CliIsCjsResolver;
8281
use crate::resolver::CliNpmReqResolver;
8382
use crate::resolver::CliResolver;
@@ -913,45 +912,49 @@ impl<'a> ResolverFactory<'a> {
913912
pub fn cli_resolver(&self) -> &Arc<CliResolver> {
914913
self.services.cli_resolver.get_or_init(|| {
915914
let npm_req_resolver = self.npm_pkg_req_resolver().cloned();
916-
let deno_resolver = Arc::new(CliDenoResolver::new(DenoResolverOptions {
917-
in_npm_pkg_checker: self.in_npm_pkg_checker().clone(),
918-
node_and_req_resolver: match (self.node_resolver(), npm_req_resolver) {
919-
(Some(node_resolver), Some(npm_req_resolver)) => {
920-
Some(NodeAndNpmReqResolver {
921-
node_resolver: node_resolver.clone(),
922-
npm_req_resolver,
923-
})
924-
}
925-
_ => None,
926-
},
927-
workspace_resolver: self
928-
.config_data
929-
.map(|d| d.resolver.clone())
930-
.unwrap_or_else(|| {
931-
Arc::new(WorkspaceResolver::new_raw(
932-
// this is fine because this is only used before initialization
933-
Arc::new(ModuleSpecifier::parse("file:///").unwrap()),
934-
None,
935-
Vec::new(),
936-
Vec::new(),
937-
PackageJsonDepResolution::Disabled,
938-
Default::default(),
939-
Default::default(),
940-
Default::default(),
941-
Default::default(),
942-
self.sys.clone(),
943-
))
944-
}),
945-
bare_node_builtins: self
946-
.config_data
947-
.is_some_and(|d| d.unstable.contains("bare-node-builtins")),
948-
is_byonm: self.config_data.map(|d| d.byonm).unwrap_or(false),
949-
maybe_vendor_dir: self.config_data.and_then(|d| d.vendor_dir.as_ref()),
950-
}));
915+
let deno_resolver =
916+
Arc::new(deno_resolver::RawDenoResolver::new(DenoResolverOptions {
917+
in_npm_pkg_checker: self.in_npm_pkg_checker().clone(),
918+
node_and_req_resolver: match (self.node_resolver(), npm_req_resolver)
919+
{
920+
(Some(node_resolver), Some(npm_req_resolver)) => {
921+
Some(NodeAndNpmReqResolver {
922+
node_resolver: node_resolver.clone(),
923+
npm_req_resolver,
924+
})
925+
}
926+
_ => None,
927+
},
928+
workspace_resolver: self
929+
.config_data
930+
.map(|d| d.resolver.clone())
931+
.unwrap_or_else(|| {
932+
Arc::new(WorkspaceResolver::new_raw(
933+
// this is fine because this is only used before initialization
934+
Arc::new(ModuleSpecifier::parse("file:///").unwrap()),
935+
None,
936+
Vec::new(),
937+
Vec::new(),
938+
PackageJsonDepResolution::Disabled,
939+
Default::default(),
940+
Default::default(),
941+
Default::default(),
942+
Default::default(),
943+
self.sys.clone(),
944+
))
945+
}),
946+
bare_node_builtins: self
947+
.config_data
948+
.is_some_and(|d| d.unstable.contains("bare-node-builtins")),
949+
is_byonm: self.config_data.map(|d| d.byonm).unwrap_or(false),
950+
maybe_vendor_dir: self
951+
.config_data
952+
.and_then(|d| d.vendor_dir.as_ref()),
953+
}));
951954
Arc::new(CliResolver::new(
952955
deno_resolver,
953956
self.services.found_pkg_json_dep_flag.clone(),
954-
Box::new(on_resolve_diagnostic),
957+
Some(Arc::new(on_resolve_diagnostic)),
955958
))
956959
})
957960
}

cli/lsp/text.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ pub fn get_edits(a: &str, b: &str, line_index: &LineIndex) -> Vec<TextEdit> {
7373
if a == b {
7474
return vec![];
7575
}
76-
// Heuristic to detect things like minified files. `diff()` is expensive.
77-
if b.chars().filter(|c| *c == '\n').count()
78-
> line_index.inner.utf8_offsets_len() * 3
79-
{
76+
// Heuristic to detect things like large JSON or minified files. `diff()` is
77+
// expensive.
78+
let b_lines = b.chars().filter(|c| *c == '\n').count();
79+
if b_lines > 10000 || b_lines > line_index.inner.utf8_offsets_len() * 3 {
8080
return vec![TextEdit {
8181
range: lsp::Range {
8282
start: lsp::Position::new(0, 0),

cli/lsp/tsc.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4554,12 +4554,20 @@ fn op_load<'s>(
45544554
} else {
45554555
state.get_module(&specifier)
45564556
};
4557-
let maybe_load_response = module.as_ref().map(|m| LoadResponse {
4558-
data: m.text.clone(),
4559-
script_kind: crate::tsc::as_ts_script_kind(m.media_type),
4560-
version: state.script_version(&specifier),
4561-
is_cjs: m.resolution_mode == ResolutionMode::Require,
4562-
is_classic_script: m.notebook_uri.is_some(),
4557+
let maybe_load_response = module.as_ref().map(|m| {
4558+
let data = if m.media_type == MediaType::Json && m.text.len() > 10_000_000 {
4559+
// VSCode's TS server types large JSON files this way.
4560+
DocumentText::Static("{}\n")
4561+
} else {
4562+
m.text.clone()
4563+
};
4564+
LoadResponse {
4565+
data,
4566+
script_kind: crate::tsc::as_ts_script_kind(m.media_type),
4567+
version: state.script_version(&specifier),
4568+
is_cjs: m.resolution_mode == ResolutionMode::Require,
4569+
is_classic_script: m.notebook_uri.is_some(),
4570+
}
45634571
});
45644572
let serialized = serde_v8::to_v8(scope, maybe_load_response)?;
45654573
state.performance.measure(mark);

cli/resolver.rs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
use std::sync::Arc;
44

55
use async_trait::async_trait;
6-
use deno_ast::ModuleSpecifier;
76
use deno_error::JsErrorBox;
87
use deno_graph::NpmLoadError;
98
use deno_graph::NpmResolvePkgReqsResult;
@@ -23,36 +22,28 @@ pub type CliCjsTracker =
2322
deno_resolver::cjs::CjsTracker<DenoInNpmPackageChecker, CliSys>;
2423
pub type CliIsCjsResolver =
2524
deno_resolver::cjs::IsCjsResolver<DenoInNpmPackageChecker, CliSys>;
26-
pub type CliDenoResolver = deno_resolver::DenoResolver<
27-
DenoInNpmPackageChecker,
28-
DenoIsBuiltInNodeModuleChecker,
29-
CliNpmResolver,
30-
CliSys,
31-
>;
3225
pub type CliNpmReqResolver = deno_resolver::npm::NpmReqResolver<
3326
DenoInNpmPackageChecker,
3427
DenoIsBuiltInNodeModuleChecker,
3528
CliNpmResolver,
3629
CliSys,
3730
>;
38-
pub type CliResolver = deno_resolver::graph::DenoGraphResolver<
31+
pub type CliResolver = deno_resolver::graph::DenoResolver<
3932
DenoInNpmPackageChecker,
4033
DenoIsBuiltInNodeModuleChecker,
4134
CliNpmResolver,
4235
CliSys,
4336
>;
4437

4538
pub fn on_resolve_diagnostic(
46-
diagnostic: &deno_resolver::workspace::MappedResolutionDiagnostic,
47-
referrer: &ModuleSpecifier,
48-
position: deno_graph::Position,
39+
diagnostic: deno_resolver::graph::MappedResolutionDiagnosticWithPosition,
4940
) {
5041
log::warn!(
5142
"{} {}\n at {}:{}",
5243
deno_runtime::colors::yellow("Warning"),
53-
diagnostic,
54-
referrer,
55-
position,
44+
diagnostic.diagnostic,
45+
diagnostic.referrer,
46+
diagnostic.start
5647
);
5748
}
5849

cli/tsc/dts/lib.deno.ns.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5671,7 +5671,7 @@ declare namespace Deno {
56715671
* @category FFI
56725672
*/
56735673
export type FromNativeType<T extends NativeType = NativeType> = T extends
5674-
NativeStructType ? Uint8Array
5674+
NativeStructType ? Uint8Array<ArrayBuffer>
56755675
: T extends NativeNumberType ? T extends NativeU8Enum<infer U> ? U
56765676
: T extends NativeI8Enum<infer U> ? U
56775677
: T extends NativeU16Enum<infer U> ? U
@@ -5696,7 +5696,7 @@ declare namespace Deno {
56965696
*/
56975697
export type FromNativeResultType<
56985698
T extends NativeResultType = NativeResultType,
5699-
> = T extends NativeStructType ? Uint8Array
5699+
> = T extends NativeStructType ? Uint8Array<ArrayBuffer>
57005700
: T extends NativeNumberType ? T extends NativeU8Enum<infer U> ? U
57015701
: T extends NativeI8Enum<infer U> ? U
57025702
: T extends NativeU16Enum<infer U> ? U

ext/node/polyfills/_fs/_fs_mkdtemp.ts

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
// Copyright 2018-2025 the Deno authors. MIT license.
22
// Copyright Node.js contributors. All rights reserved. MIT License.
33

4-
// TODO(petamoriken): enable prefer-primordials for node polyfills
5-
// deno-lint-ignore-file prefer-primordials
6-
74
import { TextDecoder, TextEncoder } from "ext:deno_web/08_text_encoding.js";
85
import { existsSync } from "ext:deno_node/_fs/_fs_exists.ts";
96
import { mkdir, mkdirSync } from "ext:deno_node/_fs/_fs_mkdir.ts";
@@ -12,6 +9,18 @@ import {
129
ERR_INVALID_OPT_VALUE_ENCODING,
1310
} from "ext:deno_node/internal/errors.ts";
1411
import { promisify } from "ext:deno_node/internal/util.mjs";
12+
import { primordials } from "ext:core/mod.js";
13+
14+
const {
15+
ObjectPrototypeIsPrototypeOf,
16+
Array,
17+
SafeArrayIterator,
18+
MathRandom,
19+
MathFloor,
20+
ArrayPrototypeJoin,
21+
ArrayPrototypeMap,
22+
ObjectPrototype,
23+
} = primordials;
1524

1625
export type mkdtempCallback = (
1726
err: Error | null,
@@ -70,10 +79,13 @@ function parseEncoding(
7079
optionsOrCallback?: { encoding: string } | string | mkdtempCallback,
7180
): string | undefined {
7281
let encoding: string | undefined;
73-
if (typeof optionsOrCallback == "function") encoding = undefined;
74-
else if (optionsOrCallback instanceof Object) {
75-
encoding = optionsOrCallback?.encoding;
76-
} else encoding = optionsOrCallback;
82+
if (typeof optionsOrCallback === "function") {
83+
encoding = undefined;
84+
} else if (isOptionsObject(optionsOrCallback)) {
85+
encoding = optionsOrCallback.encoding;
86+
} else {
87+
encoding = optionsOrCallback;
88+
}
7789

7890
if (encoding) {
7991
try {
@@ -97,9 +109,13 @@ function decode(str: string, encoding?: string): string {
97109

98110
const CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
99111
function randomName(): string {
100-
return [...Array(6)].map(() =>
101-
CHARS[Math.floor(Math.random() * CHARS.length)]
102-
).join("");
112+
return ArrayPrototypeJoin(
113+
ArrayPrototypeMap(
114+
[...new SafeArrayIterator(Array(6))],
115+
() => CHARS[MathFloor(MathRandom() * CHARS.length)],
116+
),
117+
"",
118+
);
103119
}
104120

105121
function tempDirPath(prefix: string): string {
@@ -110,3 +126,11 @@ function tempDirPath(prefix: string): string {
110126

111127
return path;
112128
}
129+
130+
function isOptionsObject(value: unknown): value is { encoding: string } {
131+
return (
132+
value !== null &&
133+
typeof value === "object" &&
134+
ObjectPrototypeIsPrototypeOf(ObjectPrototype, value)
135+
);
136+
}

0 commit comments

Comments
 (0)