From 4ed64771f148fd5f081192fecc1a6ce3e6faa473 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Tue, 22 Aug 2023 09:53:43 -0400 Subject: [PATCH 01/30] Start --- Cargo.lock | 3 +- Cargo.toml | 3 ++ cli/cache/mod.rs | 43 ++++++++++++++++++++++++ cli/cache/parsed_source.rs | 12 +++++++ cli/errors.rs | 7 ++-- cli/graph_util.rs | 1 + cli/lsp/documents.rs | 67 ++++++++++++++++++++++++++++++++------ cli/resolver.rs | 12 +++---- cli/tools/info.rs | 6 ++++ 9 files changed, 133 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9f7febad24976a..8f579f91172f47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1152,10 +1152,9 @@ dependencies = [ [[package]] name = "deno_graph" version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6acc743895f5e83c985d632998e58af1395c862b28acabd3d290540ef4d57354" dependencies = [ "anyhow", + "async-trait", "data-url", "deno_ast", "deno_semver", diff --git a/Cargo.toml b/Cargo.toml index 3e19274662e435..56cc75a86ecf80 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -323,3 +323,6 @@ opt-level = 3 opt-level = 3 [profile.release.package.base64-simd] opt-level = 3 + +[patch.crates-io] +deno_graph = { path = "../deno_graph" } diff --git a/cli/cache/mod.rs b/cli/cache/mod.rs index f75761521adf19..81881ca30e2a65 100644 --- a/cli/cache/mod.rs +++ b/cli/cache/mod.rs @@ -4,6 +4,7 @@ use crate::errors::get_error_class_name; use crate::file_fetcher::FileFetcher; use crate::util::fs::atomic_write_file; +use deno_ast::MediaType; use deno_core::futures; use deno_core::futures::FutureExt; use deno_core::ModuleSpecifier; @@ -96,6 +97,7 @@ pub struct FetchCacher { file_fetcher: Arc, file_header_overrides: HashMap>, global_http_cache: Arc, + parsed_source_cache: Arc, permissions: PermissionsContainer, cache_info_enabled: bool, maybe_local_node_modules_url: Option, @@ -107,6 +109,7 @@ impl FetchCacher { file_fetcher: Arc, file_header_overrides: HashMap>, global_http_cache: Arc, + parsed_source_cache: Arc, permissions: PermissionsContainer, maybe_local_node_modules_url: Option, ) -> Self { @@ -115,6 +118,7 @@ impl FetchCacher { file_fetcher, file_header_overrides, global_http_cache, + parsed_source_cache, permissions, cache_info_enabled: false, maybe_local_node_modules_url, @@ -236,4 +240,43 @@ impl Loader for FetchCacher { } .boxed() } + + fn load_no_cache( + &mut self, + specifier: &deno_ast::ModuleSpecifier, + is_dynamic: bool, + ) -> deno_emit::LoadFuture { + // todo: actually implement this + self.load(specifier, is_dynamic) + } + + fn load_from_cache( + &mut self, + specifier: &deno_ast::ModuleSpecifier, + is_dynamic: bool, + ) -> deno_emit::LoadFuture { + // todo: actually implement this + self.load(specifier, is_dynamic) + } + + fn cache_module_info( + &mut self, + specifier: &ModuleSpecifier, + source: &str, + module_info: &deno_graph::ModuleInfo, + ) { + let result = self.parsed_source_cache.cache_module_info( + specifier, + MediaType::from_specifier(specifier), + source, + module_info, + ); + if let Err(err) = result { + log::debug!( + "Error saving module cache info for {}. {:#}", + specifier, + err + ); + } + } } diff --git a/cli/cache/parsed_source.rs b/cli/cache/parsed_source.rs index e231753d5a11cb..68503e6aac7f0a 100644 --- a/cli/cache/parsed_source.rs +++ b/cli/cache/parsed_source.rs @@ -135,6 +135,18 @@ impl ParsedSourceCache { pub fn as_capturing_parser(&self) -> CapturingModuleParser { CapturingModuleParser::new(None, &self.sources) } + + pub fn cache_module_info( + &self, + specifier: &ModuleSpecifier, + media_type: MediaType, + source: &str, + module_info: &ModuleInfo, + ) -> Result<(), AnyError> { + let source_hash = compute_source_hash(source.as_bytes()); + ParsedSourceCacheModuleAnalyzer::new(self.db.clone(), self.sources.clone()) + .set_module_info(specifier, media_type, &source_hash, module_info) + } } struct ParsedSourceCacheModuleAnalyzer { diff --git a/cli/errors.rs b/cli/errors.rs index 2ffad73b3fafd8..762a94906b3a01 100644 --- a/cli/errors.rs +++ b/cli/errors.rs @@ -32,9 +32,10 @@ fn get_module_graph_error_class(err: &ModuleGraphError) -> &'static str { ModuleError::ParseErr(_, diagnostic) => get_diagnostic_class(diagnostic), ModuleError::UnsupportedMediaType { .. } | ModuleError::UnsupportedImportAssertionType { .. } => "TypeError", - ModuleError::Missing(_, _) | ModuleError::MissingDynamic(_, _) => { - "NotFound" - } + ModuleError::Missing(_, _) + | ModuleError::MissingDynamic(_, _) + | ModuleError::UnknownPackage { .. } + | ModuleError::UnknownPackageReq { .. } => "NotFound", }, ModuleGraphError::ResolutionError(err) => get_resolution_error_class(err), } diff --git a/cli/graph_util.rs b/cli/graph_util.rs index 3623f49d020d67..cfa37c98e25a94 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -350,6 +350,7 @@ impl ModuleGraphBuilder { self.file_fetcher.clone(), self.options.resolve_file_header_overrides(), self.global_http_cache.clone(), + self.parsed_source_cache.clone(), permissions, self.options.node_modules_dir_specifier(), ) diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 11fba693f9666a..f8fd1f592266f7 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -32,6 +32,7 @@ use deno_ast::SourceTextInfo; use deno_core::error::custom_error; use deno_core::error::AnyError; use deno_core::futures::future; +use deno_core::futures::FutureExt; use deno_core::parking_lot::Mutex; use deno_core::url; use deno_core::ModuleSpecifier; @@ -1554,24 +1555,70 @@ pub struct OpenDocumentsGraphLoader<'a> { pub open_docs: &'a HashMap, } -impl<'a> deno_graph::source::Loader for OpenDocumentsGraphLoader<'a> { - fn load( - &mut self, +impl<'a> OpenDocumentsGraphLoader<'a> { + fn load_from_docs( + &self, specifier: &ModuleSpecifier, - is_dynamic: bool, - ) -> deno_graph::source::LoadFuture { + ) -> Option { if specifier.scheme() == "file" { if let Some(doc) = self.open_docs.get(specifier) { - return Box::pin(future::ready(Ok(Some( - deno_graph::source::LoadResponse::Module { + return Some( + future::ready(Ok(Some(deno_graph::source::LoadResponse::Module { content: doc.content(), specifier: doc.specifier().clone(), maybe_headers: None, - }, - )))); + }))) + .boxed_local(), + ); } } - self.inner_loader.load(specifier, is_dynamic) + None + } +} + +impl<'a> deno_graph::source::Loader for OpenDocumentsGraphLoader<'a> { + fn load( + &mut self, + specifier: &ModuleSpecifier, + is_dynamic: bool, + ) -> deno_graph::source::LoadFuture { + match self.load_from_docs(specifier) { + Some(fut) => fut, + None => self.inner_loader.load(specifier, is_dynamic), + } + } + + fn load_no_cache( + &mut self, + specifier: &deno_ast::ModuleSpecifier, + is_dynamic: bool, + ) -> deno_emit::LoadFuture { + match self.load_from_docs(specifier) { + Some(fut) => fut, + None => self.inner_loader.load_no_cache(specifier, is_dynamic), + } + } + + fn load_from_cache( + &mut self, + specifier: &deno_ast::ModuleSpecifier, + is_dynamic: bool, + ) -> deno_emit::LoadFuture { + match self.load_from_docs(specifier) { + Some(fut) => fut, + None => self.inner_loader.load_from_cache(specifier, is_dynamic), + } + } + + fn cache_module_info( + &mut self, + specifier: &deno_ast::ModuleSpecifier, + source: &str, + module_info: &deno_graph::ModuleInfo, + ) { + self + .inner_loader + .cache_module_info(specifier, source, module_info) } } diff --git a/cli/resolver.rs b/cli/resolver.rs index dfa709bcb8b815..4fb91273139aa8 100644 --- a/cli/resolver.rs +++ b/cli/resolver.rs @@ -8,8 +8,8 @@ use deno_core::futures::future::LocalBoxFuture; use deno_core::futures::FutureExt; use deno_core::ModuleSpecifier; use deno_core::TaskQueue; +use deno_graph::source::NpmPackageReqResolution; use deno_graph::source::NpmResolver; -use deno_graph::source::PackageReqResolution; use deno_graph::source::Resolver; use deno_graph::source::UnknownBuiltInNodeModuleError; use deno_graph::source::DEFAULT_JSX_IMPORT_SOURCE_MODULE; @@ -333,9 +333,9 @@ impl NpmResolver for CliGraphResolver { .boxed() } - fn resolve_npm(&self, package_req: &PackageReq) -> PackageReqResolution { + fn resolve_npm(&self, package_req: &PackageReq) -> NpmPackageReqResolution { if self.no_npm { - return PackageReqResolution::Err(anyhow!( + return NpmPackageReqResolution::Err(anyhow!( "npm specifiers were requested; but --no-npm is specified" )); } @@ -344,13 +344,13 @@ impl NpmResolver for CliGraphResolver { .npm_resolution .resolve_package_req_as_pending(package_req); match result { - Ok(nv) => PackageReqResolution::Ok(nv), + Ok(nv) => NpmPackageReqResolution::Ok(nv), Err(err) => { if self.npm_registry_api.mark_force_reload() { log::debug!("Restarting npm specifier resolution to check for new registry information. Error: {:#}", err); - PackageReqResolution::ReloadRegistryInfo(err.into()) + NpmPackageReqResolution::ReloadRegistryInfo(err.into()) } else { - PackageReqResolution::Err(err.into()) + NpmPackageReqResolution::Err(err.into()) } } } diff --git a/cli/tools/info.rs b/cli/tools/info.rs index c0dd686f8f485d..ed0ccb76d0a63e 100644 --- a/cli/tools/info.rs +++ b/cli/tools/info.rs @@ -662,6 +662,12 @@ impl<'a> GraphDisplayContext<'a> { ModuleError::Missing(_, _) | ModuleError::MissingDynamic(_, _) => { self.build_error_msg(specifier, "(missing)") } + ModuleError::UnknownPackage { .. } => { + self.build_error_msg(specifier, "(unknown package)") + } + ModuleError::UnknownPackageReq { .. } => { + self.build_error_msg(specifier, "(unknown package constraint)") + } }, ModuleGraphError::ResolutionError(_) => { self.build_error_msg(specifier, "(resolution error)") From 76ea68faea0ba52c370cc37acff664f8f9f7d24a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 09:52:28 +0200 Subject: [PATCH 02/30] initial import map with scopes for members --- cli/args/config_file.rs | 99 +++++++++++++++++++++++++++++++++++++ cli/args/mod.rs | 18 +++++++ try_workspace/bar/deno.json | 8 +++ try_workspace/deno.json | 7 +++ try_workspace/foo/deno.json | 8 +++ try_workspace/test.js | 0 6 files changed, 140 insertions(+) create mode 100644 try_workspace/bar/deno.json create mode 100644 try_workspace/deno.json create mode 100644 try_workspace/foo/deno.json create mode 100644 try_workspace/test.js diff --git a/cli/args/config_file.rs b/cli/args/config_file.rs index 6b3f96cd3dd728..8045bdacc945aa 100644 --- a/cli/args/config_file.rs +++ b/cli/args/config_file.rs @@ -639,6 +639,71 @@ impl SerializedBenchConfig { } } +#[derive(Clone, Debug, Default, PartialEq)] +pub struct WorkspaceConfig { + enabled: bool, + members: Vec<(String, PathBuf)>, +} + +impl WorkspaceConfig { + pub fn to_import_map(&self) -> Result, AnyError> { + let mut import_map_imports = json!({}); + let mut import_map_scopes = json!({}); + let synthetic_import_map_imports = + import_map_imports.as_object_mut().unwrap(); + let synthetic_import_map_scopes = + import_map_scopes.as_object_mut().unwrap(); + + for (member_name, member_path) in self.members.iter() { + let member_config_file_path = member_path.join("deno.json"); + let member_config_file = ConfigFile::from_specifier_and_path( + ModuleSpecifier::from_file_path(&member_config_file_path).unwrap(), + &member_config_file_path, + )?; + let import_map_value = member_config_file.to_import_map_value(); + + let mut member_scope = json!({}); + + if let Some(imports) = import_map_value.get("imports") { + let member_scope_obj = member_scope.as_object_mut().unwrap(); + for (key, value) in imports.as_object().unwrap() { + member_scope_obj.insert(key.to_string(), value.to_owned()); + } + synthetic_import_map_scopes + .insert(format!("/{}/", member_name), member_scope); + } + + if let Some(scopes) = import_map_value.get("scopes") { + for (key, value) in scopes.as_object().unwrap() { + // Keys for scopes need to be processed - they might look like + // "/foo/" and coming from "bar" workspace member. So we need to + // prepend the member name to the scope. + let new_key = format!("/{}{}", member_name, key); + synthetic_import_map_scopes.insert(new_key, value.to_owned()); + } + } + } + + let mut import_map = json!({}); + let mut has_import_map = false; + + if !synthetic_import_map_imports.is_empty() { + import_map["imports"] = import_map_imports; + has_import_map = true; + } + if !synthetic_import_map_scopes.is_empty() { + import_map["scopes"] = import_map_scopes; + has_import_map = true; + } + + if has_import_map { + Ok(Some(import_map)) + } else { + Ok(None) + } + } +} + #[derive(Clone, Debug, Default, PartialEq)] pub struct BenchConfig { pub files: FilesConfig, @@ -674,6 +739,11 @@ pub struct ConfigFileJson { pub exclude: Option, pub node_modules_dir: Option, pub vendor: Option, + + #[serde(default)] + pub workspace: bool, + #[serde(default)] + pub members: Vec, } #[derive(Clone, Debug)] @@ -977,6 +1047,35 @@ impl ConfigFile { Ok(Some(test_config.with_files(files_config))) } + pub fn to_workspace_config( + &self, + ) -> Result, AnyError> { + let Ok(config_file_path) = self.specifier.to_file_path() else { + return Ok(None); + }; + + let config_file_directory = config_file_path.parent().unwrap(); + let mut members = Vec::with_capacity(self.json.members.len()); + + for member in self.json.members.iter() { + let member_path = config_file_directory.join(member); + let member_deno_json = member_path.as_path().join("deno.json"); + if !member_deno_json.exists() { + bail!( + "Workspace member '{}' has no deno.json file ('{}')", + member, + member_deno_json.display() + ); + } + members.push((member.to_string(), member_path)); + } + + Ok(Some(WorkspaceConfig { + enabled: self.json.workspace, + members, + })) + } + pub fn to_bench_config(&self) -> Result, AnyError> { let files_config = self.to_files_config()?; let bench_config = match self.json.bench.clone() { diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 65c6e730848140..ff450d21e21f26 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -31,6 +31,7 @@ pub use config_file::TsConfig; pub use config_file::TsConfigForEmit; pub use config_file::TsConfigType; pub use config_file::TsTypeLib; +pub use config_file::WorkspaceConfig; pub use flags::*; pub use lockfile::Lockfile; pub use lockfile::LockfileError; @@ -546,6 +547,7 @@ pub struct CliOptions { maybe_package_json: Option, maybe_lockfile: Option>>, overrides: CliOptionOverrides, + maybe_workspace_config: Option, } impl CliOptions { @@ -579,6 +581,21 @@ impl CliOptions { .with_context(|| "Resolving node_modules folder.")?; let maybe_vendor_folder = resolve_vendor_folder(&initial_cwd, &flags, maybe_config_file.as_ref()); + let maybe_workspace_config = + if let Some(config_file) = maybe_config_file.as_ref() { + config_file.to_workspace_config()? + } else { + None + }; + + eprintln!("maybe workspace config {:#?}", maybe_workspace_config); + + if let Some(workspace_config) = maybe_workspace_config.as_ref() { + eprintln!( + "import map from workspace config {:#?}", + workspace_config.to_import_map() + ); + } Ok(Self { flags, @@ -589,6 +606,7 @@ impl CliOptions { maybe_node_modules_folder, maybe_vendor_folder, overrides: Default::default(), + maybe_workspace_config, }) } diff --git a/try_workspace/bar/deno.json b/try_workspace/bar/deno.json new file mode 100644 index 00000000000000..ad63a497bfbf2d --- /dev/null +++ b/try_workspace/bar/deno.json @@ -0,0 +1,8 @@ +{ + "name": "@foo/bar", + "version": "0.0.1", + "imports": { + "@std/": "deno:@std/", + "puppeteer": "deno:puppeteer" + } +} diff --git a/try_workspace/deno.json b/try_workspace/deno.json new file mode 100644 index 00000000000000..90c4e570872100 --- /dev/null +++ b/try_workspace/deno.json @@ -0,0 +1,7 @@ +{ + "workspace": true, + "members": [ + "foo", + "bar" + ] +} diff --git a/try_workspace/foo/deno.json b/try_workspace/foo/deno.json new file mode 100644 index 00000000000000..95b6cad66c5e3c --- /dev/null +++ b/try_workspace/foo/deno.json @@ -0,0 +1,8 @@ +{ + "name": "@foo/foo", + "version": "0.0.1", + "imports": { + "@std/": "deno:@std/", + "dax": "deno:@dsherret/dax" + } +} diff --git a/try_workspace/test.js b/try_workspace/test.js new file mode 100644 index 00000000000000..e69de29bb2d1d6 From 9aa9196d605cf8b76048e92b7cdd0454ac911226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 10:18:30 +0200 Subject: [PATCH 03/30] generate synthetic import map --- cli/args/config_file.rs | 18 +++++++++++++++++- cli/args/mod.rs | 6 +++++- try_workspace/bar/bar.js | 6 ++++++ try_workspace/bar/deno.json | 8 +++++++- try_workspace/bar/nested/nested.js | 6 ++++++ try_workspace/deno.json | 10 +++++++++- try_workspace/foo/deno.json | 5 +++++ try_workspace/foo/foo.js | 5 +++++ try_workspace/foo/nested/nested.js | 6 ++++++ try_workspace/test.js | 5 +++++ 10 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 try_workspace/bar/bar.js create mode 100644 try_workspace/bar/nested/nested.js create mode 100644 try_workspace/foo/foo.js create mode 100644 try_workspace/foo/nested/nested.js diff --git a/cli/args/config_file.rs b/cli/args/config_file.rs index 8045bdacc945aa..cba0300aab351e 100644 --- a/cli/args/config_file.rs +++ b/cli/args/config_file.rs @@ -646,7 +646,10 @@ pub struct WorkspaceConfig { } impl WorkspaceConfig { - pub fn to_import_map(&self) -> Result, AnyError> { + pub fn to_import_map( + &self, + base_import_map: Value, + ) -> Result, AnyError> { let mut import_map_imports = json!({}); let mut import_map_scopes = json!({}); let synthetic_import_map_imports = @@ -684,6 +687,19 @@ impl WorkspaceConfig { } } + if let Some(base_imports) = base_import_map.get("imports") { + let base_imports_obj = base_imports.as_object().unwrap(); + for (key, value) in base_imports_obj.iter() { + synthetic_import_map_imports.insert(key.to_owned(), value.to_owned()); + } + } + if let Some(base_scopes) = base_import_map.get("scopes") { + let base_scopes_obj = base_scopes.as_object().unwrap(); + for (key, value) in base_scopes_obj.iter() { + synthetic_import_map_scopes.insert(key.to_owned(), value.to_owned()); + } + } + let mut import_map = json!({}); let mut has_import_map = false; diff --git a/cli/args/mod.rs b/cli/args/mod.rs index ff450d21e21f26..6786d2674bde79 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -591,9 +591,13 @@ impl CliOptions { eprintln!("maybe workspace config {:#?}", maybe_workspace_config); if let Some(workspace_config) = maybe_workspace_config.as_ref() { + let base_import_map = maybe_config_file + .as_ref() + .map(|cf| cf.to_import_map_value()) + .unwrap_or_else(|| serde_json::json!({})); eprintln!( "import map from workspace config {:#?}", - workspace_config.to_import_map() + workspace_config.to_import_map(base_import_map) ); } diff --git a/try_workspace/bar/bar.js b/try_workspace/bar/bar.js new file mode 100644 index 00000000000000..914072095160ef --- /dev/null +++ b/try_workspace/bar/bar.js @@ -0,0 +1,6 @@ +import path from "@std/path/mod.ts"; +import puppeteer from "puppeteer"; +import { foo } from "deno:@foo/foo@1"; + +export function bar() { +} diff --git a/try_workspace/bar/deno.json b/try_workspace/bar/deno.json index ad63a497bfbf2d..41a48c35c05581 100644 --- a/try_workspace/bar/deno.json +++ b/try_workspace/bar/deno.json @@ -3,6 +3,12 @@ "version": "0.0.1", "imports": { "@std/": "deno:@std/", - "puppeteer": "deno:puppeteer" + "puppeteer": "deno:puppeteer", + "foo/": "deno:@foo/foo/" + }, + "scopes": { + "/nested/": { + "fizzbuzz": "deno:fizzbuzz@1" + } } } diff --git a/try_workspace/bar/nested/nested.js b/try_workspace/bar/nested/nested.js new file mode 100644 index 00000000000000..914072095160ef --- /dev/null +++ b/try_workspace/bar/nested/nested.js @@ -0,0 +1,6 @@ +import path from "@std/path/mod.ts"; +import puppeteer from "puppeteer"; +import { foo } from "deno:@foo/foo@1"; + +export function bar() { +} diff --git a/try_workspace/deno.json b/try_workspace/deno.json index 90c4e570872100..eec338ab592b89 100644 --- a/try_workspace/deno.json +++ b/try_workspace/deno.json @@ -3,5 +3,13 @@ "members": [ "foo", "bar" - ] + ], + "imports": { + "dax": "deno:dax" + }, + "scopes": { + "/not_member/": { + "@std/": "deno:@std@0.199.0/" + } + } } diff --git a/try_workspace/foo/deno.json b/try_workspace/foo/deno.json index 95b6cad66c5e3c..bf464796b3ac38 100644 --- a/try_workspace/foo/deno.json +++ b/try_workspace/foo/deno.json @@ -4,5 +4,10 @@ "imports": { "@std/": "deno:@std/", "dax": "deno:@dsherret/dax" + }, + "scopes": { + "/nested/": { + "fizzbuzz": "deno:fizzbuzz@1" + } } } diff --git a/try_workspace/foo/foo.js b/try_workspace/foo/foo.js new file mode 100644 index 00000000000000..0d1c6077b26ba8 --- /dev/null +++ b/try_workspace/foo/foo.js @@ -0,0 +1,5 @@ +import path from "@std/path/mod.ts"; +import dax from "dax"; + +export function foo() { +} diff --git a/try_workspace/foo/nested/nested.js b/try_workspace/foo/nested/nested.js new file mode 100644 index 00000000000000..914072095160ef --- /dev/null +++ b/try_workspace/foo/nested/nested.js @@ -0,0 +1,6 @@ +import path from "@std/path/mod.ts"; +import puppeteer from "puppeteer"; +import { foo } from "deno:@foo/foo@1"; + +export function bar() { +} diff --git a/try_workspace/test.js b/try_workspace/test.js index e69de29bb2d1d6..3c6c2f4b5d1516 100644 --- a/try_workspace/test.js +++ b/try_workspace/test.js @@ -0,0 +1,5 @@ +import { foo } from "deno:@foo/foo/foo.js"; +import { bar } from "deno:@foo/bar/bar.js"; + +console.log("foo", foo); +console.log("bar", bar); From ec9bc1c96ca0ba41c762be29de03026f21d98cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 11:28:10 +0200 Subject: [PATCH 04/30] runs from the registry using synthetic import map --- Cargo.lock | 2 - Cargo.toml | 1 + cli/args/config_file.rs | 4 +- cli/args/import_map.rs | 2 +- cli/args/mod.rs | 38 ++++++++--- try_workspace/bar/bar.js | 10 ++- try_workspace/bar/deno.json | 6 +- try_workspace/deno.lock | 130 ++++++++++++++++++++++++++++++++++++ try_workspace/foo/deno.json | 4 +- try_workspace/foo/foo.js | 7 +- try_workspace/test.js | 4 +- 11 files changed, 181 insertions(+), 27 deletions(-) create mode 100644 try_workspace/deno.lock diff --git a/Cargo.lock b/Cargo.lock index 74717a6a644a59..66843ae340d24c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2662,8 +2662,6 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "import_map" version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632089ec08bd62e807311104122fb26d5c911ab172e2b9864be154a575979e29" dependencies = [ "cfg-if", "indexmap 1.9.3", diff --git a/Cargo.toml b/Cargo.toml index e07c57b0ec5138..3beeff8a526b14 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -329,3 +329,4 @@ opt-level = 3 [patch.crates-io] deno_graph = { path = "../deno_graph" } +import_map = { path = "../import_map" } diff --git a/cli/args/config_file.rs b/cli/args/config_file.rs index cba0300aab351e..7d3bc39c16b375 100644 --- a/cli/args/config_file.rs +++ b/cli/args/config_file.rs @@ -673,7 +673,7 @@ impl WorkspaceConfig { member_scope_obj.insert(key.to_string(), value.to_owned()); } synthetic_import_map_scopes - .insert(format!("/{}/", member_name), member_scope); + .insert(format!("./{}/", member_name), member_scope); } if let Some(scopes) = import_map_value.get("scopes") { @@ -681,7 +681,7 @@ impl WorkspaceConfig { // Keys for scopes need to be processed - they might look like // "/foo/" and coming from "bar" workspace member. So we need to // prepend the member name to the scope. - let new_key = format!("/{}{}", member_name, key); + let new_key = format!("./{}{}", member_name, key); synthetic_import_map_scopes.insert(new_key, value.to_owned()); } } diff --git a/cli/args/import_map.rs b/cli/args/import_map.rs index 9d1b2bbda0943b..5ebb425ebc7c20 100644 --- a/cli/args/import_map.rs +++ b/cli/args/import_map.rs @@ -36,7 +36,7 @@ pub async fn resolve_import_map_from_specifier( import_map_from_value(specifier, value) } -fn import_map_from_value( +pub fn import_map_from_value( specifier: &Url, json_value: serde_json::Value, ) -> Result { diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 6786d2674bde79..355677262b3a4e 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -590,16 +590,16 @@ impl CliOptions { eprintln!("maybe workspace config {:#?}", maybe_workspace_config); - if let Some(workspace_config) = maybe_workspace_config.as_ref() { - let base_import_map = maybe_config_file - .as_ref() - .map(|cf| cf.to_import_map_value()) - .unwrap_or_else(|| serde_json::json!({})); - eprintln!( - "import map from workspace config {:#?}", - workspace_config.to_import_map(base_import_map) - ); - } + // if let Some(workspace_config) = maybe_workspace_config.as_ref() { + // let base_import_map = maybe_config_file + // .as_ref() + // .map(|cf| cf.to_import_map_value()) + // .unwrap_or_else(|| serde_json::json!({})); + // eprintln!( + // "import map from workspace config {:#?}", + // workspace_config.to_import_map(base_import_map) + // ); + // } Ok(Self { flags, @@ -745,6 +745,24 @@ impl CliOptions { &self, file_fetcher: &FileFetcher, ) -> Result, AnyError> { + if let Some(workspace_config) = self.maybe_workspace_config.as_ref() { + let base_import_map = self + .maybe_config_file + .as_ref() + .map(|cf| cf.to_import_map_value()) + .unwrap_or_else(|| serde_json::json!({})); + + let maybe_import_map = workspace_config.to_import_map(base_import_map)?; + if let Some(import_map) = maybe_import_map { + eprintln!("import map from workspace config {:#?}", import_map); + return import_map::import_map_from_value( + &self.maybe_config_file.as_ref().unwrap().specifier, + import_map, + ) + .map(Some); + } + } + let import_map_specifier = match self.resolve_import_map_specifier()? { Some(specifier) => specifier, None => return Ok(None), diff --git a/try_workspace/bar/bar.js b/try_workspace/bar/bar.js index 914072095160ef..76e94c9fa42be9 100644 --- a/try_workspace/bar/bar.js +++ b/try_workspace/bar/bar.js @@ -1,6 +1,10 @@ -import path from "@std/path/mod.ts"; -import puppeteer from "puppeteer"; -import { foo } from "deno:@foo/foo@1"; +import codeBlockWriter from "codeBlockWriter"; +import * as chain from "chain/file1.ts"; +// import { foo } from "foo/foo.js"; + +console.log(" > BAR > codeBlockWriter > ", codeBlockWriter); +console.log(" > BAR > chain > ", chain); +// console.log(" > BAR > foo > ", foo); export function bar() { } diff --git a/try_workspace/bar/deno.json b/try_workspace/bar/deno.json index 41a48c35c05581..2d44906b17b217 100644 --- a/try_workspace/bar/deno.json +++ b/try_workspace/bar/deno.json @@ -2,9 +2,9 @@ "name": "@foo/bar", "version": "0.0.1", "imports": { - "@std/": "deno:@std/", - "puppeteer": "deno:puppeteer", - "foo/": "deno:@foo/foo/" + "codeBlockWriter": "deno:@foo/code_block_writer", + "chain/": "deno:/@foo/chain/", + "foo/": "deno:/@foo/foo/" }, "scopes": { "/nested/": { diff --git a/try_workspace/deno.lock b/try_workspace/deno.lock new file mode 100644 index 00000000000000..93798c7c25e400 --- /dev/null +++ b/try_workspace/deno.lock @@ -0,0 +1,130 @@ +{ + "version": "2", + "remote": { + "https://deno-registry-staging.net/@foo/chain/0.0.2/file1.ts": "54cb0f4ba997ea9629e0029193df96e84d79b30cb94a6d30eb763b1da37f6993", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file10.ts": "cda843eec23c45d8f5858950841dfb174b7ce9181a6bcae9eb95e233f58d2e19", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file100.ts": "7ac2e11b3cb9bbd16f61ee8f7f33a7ead47286e0e20fbf604f5cdb9dc9fbd89f", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file11.ts": "f8a12980c6d98ef726c36fee6395c2ab629395074c102f12f640d38e398abc47", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file12.ts": "9cde1938e6adae59b8a0ecb34a71be155aef49b51c44709024475e50d4c948b1", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file13.ts": "a572c1ef9fd4aa1e4e640bd400858b6deefa854ea90d6ba2f071c03b26d533ea", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file14.ts": "0734ded0afd2304ac4cfd30515ac03ff7868dc8c7a93c19753b3431b3e82acaa", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file15.ts": "9bc37b228423d4614c5fbb8773f4865cae49751e297d11288f7a0e8a9a97ffea", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file16.ts": "1b82548452d40deacdde9cb9cdda98ce5579ec4fc6da1ef84b0fa9ed3d7c8282", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file17.ts": "e931034de06f1aa05180a5793a0b5d5bec786c457115fbef859c5b063ed585e7", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file18.ts": "14c85d1d1d287c31ab4554bf93c0b83854df7c977111279c6be826838dcc9622", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file19.ts": "6f2cdac7b21d21fb969a6203c63a8831fd9cecb65a5f2d6521efce142c756ab8", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file2.ts": "80cfc98b50ba285b02b265d8cdf81857d9fb79c042b4074173163ba757faf8a4", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file20.ts": "8ace72f13dd984fdb6f2bb58247b5538c8b6d0e7a8454b85af19246b321dcb8c", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file21.ts": "b253fa31f08b04f0608fb4083fb1c0b115d0d935c6d23f5e8b6655976356f2b3", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file22.ts": "fa34b6b3685d27490232dd1a99dd30f7784de77e770259f67688fc152b1f60a6", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file23.ts": "94b9e4cc5918d4427689fdbe48a4953affe89734a0d727b17b30436174e12f09", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file24.ts": "aa0fa552c292b3029cd01dfa53f907c1872ae34945f2e26450ce8fbca89d82e9", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file25.ts": "9dd1433a4804fde6c7d66c764e824172cee21bb61f6674d9d3299541f89bfb30", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file26.ts": "915f1ef99fb264059ac6cb115252d12b7f86e83e604af1192370aaf8f7952957", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file27.ts": "13bff7aad1e65a94a8164617d583df781e25a9d997e465188e67ad6c3f874d78", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file28.ts": "09d2ca74bf69fa6e8ddca14019bfe793c04de6088522014b861683bf6879c1ff", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file29.ts": "805dc1a2406305210c8c7a33d0d74c7a27a6f6a5654185392bb5935fad5be059", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file3.ts": "acae5e000e521e0c1eedf55fe64c8b322b391d949bd3d7d8a3e86d871d4495a6", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file30.ts": "88887c7e43029bef1476ede06174be0241fbb5f58c0eb94b3ffce1a26f3cff8f", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file31.ts": "a1a532598515988cc4402bd3bcfe1d31f5b14db288ec5e58e32e10128e0ff307", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file32.ts": "5988e5c0340332ac3118ca75b74d163943dadb54671196a7005d6446e4cd3bb8", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file33.ts": "44f60316228018c9c4e9b047af625493c36a381eea67e5ef6a0a4bb72146c0cf", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file34.ts": "eb455224beab6bbdce016281b22f582fb098c6e4530b4c3c551da5ddd05a1bae", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file35.ts": "efde2829619193589f29553196a965c23f25e740d63fb366877ebcb800b95ac3", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file36.ts": "84f4da26e74c5eb38627de5b214ce4464c4979116e69240222db81bf309dc967", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file37.ts": "310c05e7cdb707dde3ee551dfcdb6fd3376679960d3292fcff5fc6e917ca7260", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file38.ts": "947771a7414376fef66e49be7b56f49b92e52e063d74475d85ed70d142255c35", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file39.ts": "c9fc5d8166e424d961d619e850c45c1510ca54baa08a953c9e4feffe093314fa", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file4.ts": "a3e74e92076cda47f2602d16483e9fb48f8135fe3f81b06a672d7f072482677b", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file40.ts": "b25d2787370751d1e1e55f01a44d50b458d167dd0b37c3f1953fe9359595881e", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file41.ts": "e3aeec38651ce67adbe2cc7bf346a14e7030122582acd1a5bc270e37b8cb145b", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file42.ts": "ba3ca9fe0e859c96f4692a4620a3afbf897ac650ee76f453ecb769838cbf3426", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file43.ts": "8a9ddb55c32f7207f3224b1b836cecfff7665adf24f64f854cfc549f1a077c30", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file44.ts": "d2b487e85737b392899f75576517977140999fdcfaea5bf86b29f68db451f7dc", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file45.ts": "f3d6e8370343fed91dbc307f89a2ec1dadf4823f4b492aba39e66f855fece242", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file46.ts": "ded9dc24efc24e4c39cb7ddd94f5fe4ece381d85d8e4f7b5361b5284119de59e", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file47.ts": "7ca1eb3ce2cd8d4a8cb683be1b398b2f80725c7ab8e0a13ae2241511c902651f", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file48.ts": "ed80d5ff50140167b7df71f9725f76b92e97e8548d8a233c76698b3a65535ce9", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file49.ts": "cc6bb02b56eebe74ba902a73d3171d5c5dfc0914c58ebe9c8de57d77f47be63a", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file5.ts": "871024a0bd2c05f718d35db2a7c22186ff3f71c1a6492843065e54c52ffb53aa", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file50.ts": "e30deacdf8ea125425229a3866325bf2fb4d0999fee46164a76182b7bcf68ab1", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file51.ts": "318364010e4996a29733ca7c5515d787a917973f902d8f498ce40090082c9df9", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file52.ts": "1108f9af7f936de581e2d8ebcdd7092706700e434a2de615e17bfda0d74c9280", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file53.ts": "260573b30cf7a405802ac6cb58edc911b547651c409a57c7068238eaca73bd2c", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file54.ts": "2d71616986251c82449be2a777ad290f0a1c8142682ed447ed7b2fd4b00eb472", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file55.ts": "54e86fe24b13b02d915cd1b38713b8d777483f6e33b7a797ed5be6cb78eec424", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file56.ts": "f5135c7348784dd6f99e018b2cdf60446effda8b171a376ad9128446d5312107", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file57.ts": "4baad296ddf1f7fedda5e5370cc02ef590f0a9056ae0d7bc32fcfd2958b6bb39", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file58.ts": "3695dff06aa0615ab691ae5f4ab9928d05f453aaf06202b213fbea3c602575c6", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file59.ts": "b1aab40fdf18f7769b3027143b3913aa961049861f5e3ca6f2f65a9bcc72b62b", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file6.ts": "90140d603155a0793bd47e79b94112a671b9d45fabf990c01d18c07a97bed34d", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file60.ts": "3fbe1fb2fc5d18bcde81887fbe79b9dcb42df26307da19a0d54236f07b42e694", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file61.ts": "f99897b0328d0788b3f359eb7b8b8b74c16baf3c981754f7b1487a909baa6492", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file62.ts": "58080901e9198716b9e14901ebd889b1f96d8309bc47ac99fa0041ab78a214a0", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file63.ts": "d3c431406071fb60569b9db415ca585abea0b031c45ea17b6e4571653aca6895", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file64.ts": "1f13713ac8456fc7441e59edd2ed4d2ddd3d49daaf9c537d4dee11651b37a215", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file65.ts": "2efbcfc45a8ab040ccb8e869d7fba3cbd252d6ea9fdef715b6586c0c884a334d", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file66.ts": "766658df67ce4aef9fb2965a23cbc21206392065a30e361588020f291b570b4d", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file67.ts": "7ea407cc92627b29b79ec1038e08ae15daa6d2a88ffe796610c79b3c777b2b61", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file68.ts": "71e8448f62cb27618be9e5a9e9aaf006300c1915a440376ec9b2699897fb13d0", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file69.ts": "bfb09e0b0c71bf21fc8dba52d18939b8679ee2a74955f64e30d600eab1310da9", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file7.ts": "d9af1373a8e7cc0c5f48db616a4a3bd2fbcf28ba6fc451a4b7424e9af5fb2edf", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file70.ts": "9328dec4859e8ced7da4dba70271ebc1a2bc7f8c7173cdf19e7604779d056896", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file71.ts": "ea1da4417496652881209b78eff08d59c8f9d1ca978500a62fdfc12e6e476863", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file72.ts": "26b15fab623b078c0193f238afe4e10179df5130db580c3fbfd558cae959832d", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file73.ts": "40102255a09103788d5955a4cc7141ecef3adada0e339c1010fcf28c79a578cf", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file74.ts": "a340542c679b8ac340d95d3408010aa9a97af1693939fa08f792d7e7fac35cca", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file75.ts": "7002ec908335d84d42b2906d6090695d7b334d607320a5107329121972fde0c5", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file76.ts": "df851d519fe349423ab519e3bea4667618970f86a12111ee8cc24ed983218ad2", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file77.ts": "0fc02040599c7fbbfc5b51a4773bfa992a9807d6daefdf326f63356a6baee983", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file78.ts": "a1e593342b6e465a6d9e7e0f3cb18f3a721a7e19b0a27faa6e2d1a4ebe79298a", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file79.ts": "6cfe8cbf23457474eaf0faedf76bab9db56db4b99d782d3bb5d0a4dc24d9d5a4", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file8.ts": "c1d225203e70a3a50f7ba9cd31df0e44efcbf4e94b06914b21a270e6424e1202", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file80.ts": "80d1db88593c98d37a1207c0e57a76edb87db1a36d63ab2b24fcf6b19e2d4694", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file81.ts": "c5da2566889e826b75b161454abb10ac849fecf944553e97082f5b44f6eef4f0", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file82.ts": "8293a58578c79e01ed6a8a6304ea6b3570e945dd65b2db2d5ab27ac20f199ee2", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file83.ts": "6ad47693f1ad50b6f9811c147aa693e6820f70267703eb0957c534652cbd956e", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file84.ts": "05b8fd7fa31dace43db4f98a82ad57b607ab5abc01bc3e33f9c4e8c700f4e0cb", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file85.ts": "c2e1f40ba913a06ea0cea667191a2c5ea03bde598266839eab97ec2ed667af04", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file86.ts": "988af740b0ead3dbe45f081f791c3177436e34b95dcf9be87a483c50f7f14337", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file87.ts": "9f7c1f971287f143ed2c622ee16ebbee2723e1335bcdde52ff3520fa31b9db82", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file88.ts": "a3af0ec2c2ac8a57471a6a748c833b1ee4cec4be54d0b47823f4741f56614569", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file89.ts": "4e2a6420908ebd6ae3c266fa5895fd6483d2647363e8dbf9d1d342aea7fbcfce", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file9.ts": "5c1e7796b3b0b24e48b041c3913f4112a2795e22557c69652a771c3c1ef3f96e", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file90.ts": "6ce27dfe20c6198608844ac369cc88a6d3e047440c1e07476bffe3a95d36a382", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file91.ts": "42fa9d08352f15b5acfe4e6d7bc5ff9b938f369f544cceb6e2cc21b5f22ef9f2", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file92.ts": "db71fa91e22d618c1d40abe6ff0d653cef60acdaf1f32075fefdc9bdb25c27e5", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file93.ts": "9a268d9626a133f5348d688a6f3251984e11b0a5515a6ab61ad874ada27ba3f0", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file94.ts": "c480f7785ae17ef2d3a5636d0048b71cb5f27b4134963f4c5f655ba753416717", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file95.ts": "a77afc9fd317cff57fb2f4dd570b660586a73cdda5e7d4d22988e67126216cac", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file96.ts": "4a5bd724fe26b78a2f63d2f87b216a5e5777cb949272a7843c368ac5b63f3522", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file97.ts": "62cc0f0407ccc026d945c2a6c390db6e703a6a1583ee10f5e9585ad6b5be8fcd", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file98.ts": "df1692a30c84f59011096aef6f62b20ad8abb489c998d14dfd9e8aeaac6dd0d7", + "https://deno-registry-staging.net/@foo/chain/0.0.2/file99.ts": "9d7870fde9db8aa6764647705767667bc0a9be551e6d86958e1739c5f4db248f", + "https://deno-registry-staging.net/@foo/code_block_writer/0.0.1/mod.ts": "2c3448060e47c9d08604c8f40dee34343f553f33edcdfebbf648442be33205e5", + "https://deno-registry-staging.net/@foo/code_block_writer/0.0.1/utils/string_utils.ts": "60cb4ec8bd335bf241ef785ccec51e809d576ff8e8d29da43d2273b69ce2a6ff", + "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/DenoRuntime.ts": "6a7180f0c6e90dcf23ccffc86aa8271c20b1c4f34c570588d08a45880b7e172d", + "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/mod.ts": "01985d2ee7da8d1caee318a9d07664774fbee4e31602bc2bb6bb62c3489555ed", + "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/ts_morph_common.js": "f6ecb9993f9e7a8374921f43a670b369ca9bf337d3e2da979f495b6e29ea75e8", + "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/typescript.js": "97e18f192446db6ea3ed8ddc4723ac4a85fd50a85cfee45437b3581d0f2af12c", + "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/mod.ts": "adba9b82f24865d15d2c78ef6074b9a7457011719056c9928c800f130a617c93", + "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/ts_morph.js": "7e11715fbad5d4a7ba8210f93789984ce83de5d5a2e15798af07e8d1d07f8117", + "https://deno.land/std@0.181.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462", + "https://deno.land/std@0.181.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", + "https://deno.land/std@0.181.0/fs/_util.ts": "65381f341af1ff7f40198cee15c20f59951ac26e51ddc651c5293e24f9ce6f32", + "https://deno.land/std@0.181.0/fs/ensure_dir.ts": "dc64c4c75c64721d4e3fb681f1382f803ff3d2868f08563ff923fdd20d071c40", + "https://deno.land/std@0.181.0/fs/expand_glob.ts": "e4f56259a0a70fe23f05215b00de3ac5e6ba46646ab2a06ebbe9b010f81c972a", + "https://deno.land/std@0.181.0/fs/walk.ts": "ea95ffa6500c1eda6b365be488c056edc7c883a1db41ef46ec3bf057b1c0fe32", + "https://deno.land/std@0.181.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", + "https://deno.land/std@0.181.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", + "https://deno.land/std@0.181.0/path/_util.ts": "d7abb1e0dea065f427b89156e28cdeb32b045870acdf865833ba808a73b576d0", + "https://deno.land/std@0.181.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", + "https://deno.land/std@0.181.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1", + "https://deno.land/std@0.181.0/path/mod.ts": "bf718f19a4fdd545aee1b06409ca0805bd1b68ecf876605ce632e932fe54510c", + "https://deno.land/std@0.181.0/path/posix.ts": "8b7c67ac338714b30c816079303d0285dd24af6b284f7ad63da5b27372a2c94d", + "https://deno.land/std@0.181.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1", + "https://deno.land/std@0.181.0/path/win32.ts": "d186344e5583bcbf8b18af416d13d82b35a317116e6460a5a3953508c3de5bba", + "https://deno.land/x/code_block_writer@12.0.0/mod.ts": "2c3448060e47c9d08604c8f40dee34343f553f33edcdfebbf648442be33205e5", + "https://deno.land/x/code_block_writer@12.0.0/utils/string_utils.ts": "60cb4ec8bd335bf241ef785ccec51e809d576ff8e8d29da43d2273b69ce2a6ff" + } +} diff --git a/try_workspace/foo/deno.json b/try_workspace/foo/deno.json index bf464796b3ac38..36d2eaa0d140e9 100644 --- a/try_workspace/foo/deno.json +++ b/try_workspace/foo/deno.json @@ -2,8 +2,8 @@ "name": "@foo/foo", "version": "0.0.1", "imports": { - "@std/": "deno:@std/", - "dax": "deno:@dsherret/dax" + "codeBlockWriter": "deno:@foo/code_block_writer", + "tsMorph": "deno:@foo/ts_morph" }, "scopes": { "/nested/": { diff --git a/try_workspace/foo/foo.js b/try_workspace/foo/foo.js index 0d1c6077b26ba8..405de24a72fba1 100644 --- a/try_workspace/foo/foo.js +++ b/try_workspace/foo/foo.js @@ -1,5 +1,8 @@ -import path from "@std/path/mod.ts"; -import dax from "dax"; +import codeBlockWriter from "codeBlockWriter"; +import * as tsMorph from "tsMorph"; + +console.log(" > FOO > codeBlockWriter > ", codeBlockWriter); +console.log(" > FOO > tsMorph > ", tsMorph); export function foo() { } diff --git a/try_workspace/test.js b/try_workspace/test.js index 3c6c2f4b5d1516..7df17599fb8a65 100644 --- a/try_workspace/test.js +++ b/try_workspace/test.js @@ -1,5 +1,5 @@ -import { foo } from "deno:@foo/foo/foo.js"; -import { bar } from "deno:@foo/bar/bar.js"; +import { foo } from "./foo/foo.js"; +import { bar } from "./bar/bar.js"; console.log("foo", foo); console.log("bar", bar); From 16ad20a203e5ee204083ccb7b463974f6772482f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 12:02:43 +0200 Subject: [PATCH 05/30] use published std modules --- try_workspace/bar/bar.js | 4 +++- try_workspace/bar/deno.json | 3 ++- try_workspace/deno.lock | 28 ++++++++++++++++++++++++++++ try_workspace/foo/deno.json | 3 ++- try_workspace/foo/foo.js | 2 ++ 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/try_workspace/bar/bar.js b/try_workspace/bar/bar.js index 76e94c9fa42be9..23cfd72e19bb19 100644 --- a/try_workspace/bar/bar.js +++ b/try_workspace/bar/bar.js @@ -1,9 +1,11 @@ import codeBlockWriter from "codeBlockWriter"; import * as chain from "chain/file1.ts"; -// import { foo } from "foo/foo.js"; +import * as colors from "@std/fmt/colors.ts"; +// import { foo } from "deno:@foo/foo@1"; console.log(" > BAR > codeBlockWriter > ", codeBlockWriter); console.log(" > BAR > chain > ", chain); +console.log(" > BAR > @std/fmt/colors > ", colors.red("Hello!")); // console.log(" > BAR > foo > ", foo); export function bar() { diff --git a/try_workspace/bar/deno.json b/try_workspace/bar/deno.json index 2d44906b17b217..8918f76dcb5eb1 100644 --- a/try_workspace/bar/deno.json +++ b/try_workspace/bar/deno.json @@ -4,7 +4,8 @@ "imports": { "codeBlockWriter": "deno:@foo/code_block_writer", "chain/": "deno:/@foo/chain/", - "foo/": "deno:/@foo/foo/" + "foo/": "deno:/@foo/foo/", + "@std/fmt/": "deno:/@std/fmt/" }, "scopes": { "/nested/": { diff --git a/try_workspace/deno.lock b/try_workspace/deno.lock index 93798c7c25e400..c72c32456dd3e2 100644 --- a/try_workspace/deno.lock +++ b/try_workspace/deno.lock @@ -109,6 +109,34 @@ "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/typescript.js": "97e18f192446db6ea3ed8ddc4723ac4a85fd50a85cfee45437b3581d0f2af12c", "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/mod.ts": "adba9b82f24865d15d2c78ef6074b9a7457011719056c9928c800f130a617c93", "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/ts_morph.js": "7e11715fbad5d4a7ba8210f93789984ce83de5d5a2e15798af07e8d1d07f8117", + "https://deno-registry-staging.net/@std/assert/0.2.0/_constants.ts": "8a9da298c26750b28b326b297316cdde860bc237533b07e1337c021379e6b2a9", + "https://deno-registry-staging.net/@std/assert/0.2.0/_diff.ts": "76bd3614a0d01cdc601e418974f8135d4f8de5ae754b9b9872c3191f75ceb994", + "https://deno-registry-staging.net/@std/assert/0.2.0/_format.ts": "a69126e8a469009adf4cf2a50af889aca364c349797e63174884a52ff75cf4c7", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_almost_equals.ts": "e15ca1f34d0d5e0afae63b3f5d975cbd18335a132e42b0c747d282f62ad2cd6c", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_array_includes.ts": "6856d7f2c3544bc6e62fb4646dfefa3d1df5ff14744d1bca19f0cbaf3b0d66c9", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_equals.ts": "a55ecd35000d121747abcc2e16d2057e0e650b839aa17c22b21324ba9fdf33f7", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_exists.ts": "407cb6b9fb23a835cd8d5ad804e2e2edbbbf3870e322d53f79e1c7a512e2efd7", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_false.ts": "a9962749f4bf5844e3fa494257f1de73d69e4fe0e82c34d0099287552163a2dc", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_instance_of.ts": "09fd297352a5b5bbb16da2b5e1a0d8c6c44da5447772648622dcc7df7af1ddb8", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_is_error.ts": "cd556cb2e74ddd62a4c72dfc2e317361e9b0844694241faf12e2412b74292133", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_match.ts": "c4083f80600bc190309903c95e397a7c9257ff8b5ae5c7ef91e834704e672e9b", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_not_equals.ts": "9f1acab95bd1f5fc9a1b17b8027d894509a745d91bac1718fdab51dc76831754", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_not_instance_of.ts": "0c14d3dfd9ab7a5276ed8ed0b18c703d79a3d106102077ec437bfe7ed912bd22", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_not_match.ts": "3796a5b0c57a1ce6c1c57883dd4286be13a26f715ea662318ab43a8491a13ab0", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_not_strict_equals.ts": "ca6c6d645e95fbc873d25320efeb8c4c6089a9a5e09f92d7c1c4b6e935c2a6ad", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_object_match.ts": "d8fc2867cfd92eeacf9cea621e10336b666de1874a6767b5ec48988838370b54", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_rejects.ts": "45c59724de2701e3b1f67c391d6c71c392363635aad3f68a1b3408f9efca0057", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_strict_equals.ts": "9b4db65010215734418ae2483865ec133e9b230d978fe00d44d9a4d04a509cec", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_string_includes.ts": "b821d39ebf5cb0200a348863c86d8c4c4b398e02012ce74ad15666fc4b631b0c", + "https://deno-registry-staging.net/@std/assert/0.2.0/assert_throws.ts": "63784e951475cb7bdfd59878cd25a0931e18f6dc32a6077c454b2cd94f4f4bcd", + "https://deno-registry-staging.net/@std/assert/0.2.0/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", + "https://deno-registry-staging.net/@std/assert/0.2.0/equal.ts": "9f1a46d5993966d2596c44e5858eec821859b45f783a5ee2f7a695dfc12d8ece", + "https://deno-registry-staging.net/@std/assert/0.2.0/fail.ts": "c36353d7ae6e1f7933d45f8ea51e358c8c4b67d7e7502028598fe1fea062e278", + "https://deno-registry-staging.net/@std/assert/0.2.0/mod.ts": "08d55a652c22c5da0215054b21085cec25a5da47ce4a6f9de7d9ad36df35bdee", + "https://deno-registry-staging.net/@std/assert/0.2.0/unimplemented.ts": "d56fbeecb1f108331a380f72e3e010a1f161baa6956fd0f7cf3e095ae1a4c75a", + "https://deno-registry-staging.net/@std/assert/0.2.0/unreachable.ts": "4600dc0baf7d9c15a7f7d234f00c23bca8f3eba8b140286aaca7aa998cf9a536", + "https://deno-registry-staging.net/@std/fmt/0.1.0/colors.ts": "a7eecffdf3d1d54db890723b303847b6e0a1ab4b528ba6958b8f2e754cf1b3bc", "https://deno.land/std@0.181.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462", "https://deno.land/std@0.181.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", "https://deno.land/std@0.181.0/fs/_util.ts": "65381f341af1ff7f40198cee15c20f59951ac26e51ddc651c5293e24f9ce6f32", diff --git a/try_workspace/foo/deno.json b/try_workspace/foo/deno.json index 36d2eaa0d140e9..a7d031c4df4c80 100644 --- a/try_workspace/foo/deno.json +++ b/try_workspace/foo/deno.json @@ -3,7 +3,8 @@ "version": "0.0.1", "imports": { "codeBlockWriter": "deno:@foo/code_block_writer", - "tsMorph": "deno:@foo/ts_morph" + "tsMorph": "deno:@foo/ts_morph", + "@std/assert/": "deno:/@std/assert/" }, "scopes": { "/nested/": { diff --git a/try_workspace/foo/foo.js b/try_workspace/foo/foo.js index 405de24a72fba1..6faa490d60b14d 100644 --- a/try_workspace/foo/foo.js +++ b/try_workspace/foo/foo.js @@ -1,8 +1,10 @@ import codeBlockWriter from "codeBlockWriter"; import * as tsMorph from "tsMorph"; +import * as assert from "@std/assert/mod.ts"; console.log(" > FOO > codeBlockWriter > ", codeBlockWriter); console.log(" > FOO > tsMorph > ", tsMorph); +console.log(" > FOO > @std/assert > ", assert.assertEquals(1, 1)); export function foo() { } From 4067dab6c1b6ca8202440f5de426cda8670149a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 13:50:05 +0200 Subject: [PATCH 06/30] don't depend on local import map --- Cargo.lock | 2 ++ Cargo.toml | 1 - try_workspace/bar/bar.js | 8 ++++---- try_workspace/foo/foo.js | 6 +++--- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 66843ae340d24c..74717a6a644a59 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2662,6 +2662,8 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "import_map" version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632089ec08bd62e807311104122fb26d5c911ab172e2b9864be154a575979e29" dependencies = [ "cfg-if", "indexmap 1.9.3", diff --git a/Cargo.toml b/Cargo.toml index 3beeff8a526b14..e07c57b0ec5138 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -329,4 +329,3 @@ opt-level = 3 [patch.crates-io] deno_graph = { path = "../deno_graph" } -import_map = { path = "../import_map" } diff --git a/try_workspace/bar/bar.js b/try_workspace/bar/bar.js index 23cfd72e19bb19..43934e853f4c37 100644 --- a/try_workspace/bar/bar.js +++ b/try_workspace/bar/bar.js @@ -3,10 +3,10 @@ import * as chain from "chain/file1.ts"; import * as colors from "@std/fmt/colors.ts"; // import { foo } from "deno:@foo/foo@1"; -console.log(" > BAR > codeBlockWriter > ", codeBlockWriter); -console.log(" > BAR > chain > ", chain); -console.log(" > BAR > @std/fmt/colors > ", colors.red("Hello!")); -// console.log(" > BAR > foo > ", foo); +console.log(">> BAR > codeBlockWriter > ", codeBlockWriter); +console.log(">> BAR > chain > ", chain); +console.log(">> BAR > @std/fmt/colors > ", colors.red("Hello!")); +// console.log(">> BAR > foo > ", foo); export function bar() { } diff --git a/try_workspace/foo/foo.js b/try_workspace/foo/foo.js index 6faa490d60b14d..5a59fd712d5dd3 100644 --- a/try_workspace/foo/foo.js +++ b/try_workspace/foo/foo.js @@ -2,9 +2,9 @@ import codeBlockWriter from "codeBlockWriter"; import * as tsMorph from "tsMorph"; import * as assert from "@std/assert/mod.ts"; -console.log(" > FOO > codeBlockWriter > ", codeBlockWriter); -console.log(" > FOO > tsMorph > ", tsMorph); -console.log(" > FOO > @std/assert > ", assert.assertEquals(1, 1)); +console.log(">> FOO > codeBlockWriter > ", codeBlockWriter); +console.log(">> FOO > tsMorph > ", tsMorph.SetAccessorDeclaration); +console.log(">> FOO > @std/assert > ", assert.assertEquals); export function foo() { } From d2bf5b243e3f8b75e8c900a08eff1b90e9c79cd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 14:21:01 +0200 Subject: [PATCH 07/30] simplify import map generation --- cli/args/config_file.rs | 22 ++++++++++++---------- cli/args/mod.rs | 20 ++------------------ 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/cli/args/config_file.rs b/cli/args/config_file.rs index 7d3bc39c16b375..15c46d140b1f27 100644 --- a/cli/args/config_file.rs +++ b/cli/args/config_file.rs @@ -643,13 +643,11 @@ impl SerializedBenchConfig { pub struct WorkspaceConfig { enabled: bool, members: Vec<(String, PathBuf)>, + base_import_map_value: Value, } impl WorkspaceConfig { - pub fn to_import_map( - &self, - base_import_map: Value, - ) -> Result, AnyError> { + pub fn to_import_map_value(&self) -> Result, AnyError> { let mut import_map_imports = json!({}); let mut import_map_scopes = json!({}); let synthetic_import_map_imports = @@ -672,6 +670,8 @@ impl WorkspaceConfig { for (key, value) in imports.as_object().unwrap() { member_scope_obj.insert(key.to_string(), value.to_owned()); } + // TODO(bartlomieju): this need to resolve values in member_scope based + // on the "base URL" of the member import map filepath synthetic_import_map_scopes .insert(format!("./{}/", member_name), member_scope); } @@ -682,18 +682,20 @@ impl WorkspaceConfig { // "/foo/" and coming from "bar" workspace member. So we need to // prepend the member name to the scope. let new_key = format!("./{}{}", member_name, key); + // TODO(bartlomieju): this need to resolve value based on the "base URL" + // of the member import map filepath synthetic_import_map_scopes.insert(new_key, value.to_owned()); } } } - if let Some(base_imports) = base_import_map.get("imports") { + if let Some(base_imports) = self.base_import_map_value.get("imports") { let base_imports_obj = base_imports.as_object().unwrap(); for (key, value) in base_imports_obj.iter() { synthetic_import_map_imports.insert(key.to_owned(), value.to_owned()); } } - if let Some(base_scopes) = base_import_map.get("scopes") { + if let Some(base_scopes) = self.base_import_map_value.get("scopes") { let base_scopes_obj = base_scopes.as_object().unwrap(); for (key, value) in base_scopes_obj.iter() { synthetic_import_map_scopes.insert(key.to_owned(), value.to_owned()); @@ -701,18 +703,15 @@ impl WorkspaceConfig { } let mut import_map = json!({}); - let mut has_import_map = false; if !synthetic_import_map_imports.is_empty() { import_map["imports"] = import_map_imports; - has_import_map = true; } if !synthetic_import_map_scopes.is_empty() { import_map["scopes"] = import_map_scopes; - has_import_map = true; } - if has_import_map { + if !import_map.as_object().unwrap().is_empty() { Ok(Some(import_map)) } else { Ok(None) @@ -1086,9 +1085,12 @@ impl ConfigFile { members.push((member.to_string(), member_path)); } + let base_import_map_value = self.to_import_map_value(); + Ok(Some(WorkspaceConfig { enabled: self.json.workspace, members, + base_import_map_value, })) } diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 355677262b3a4e..2c0a1093f03157 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -590,17 +590,6 @@ impl CliOptions { eprintln!("maybe workspace config {:#?}", maybe_workspace_config); - // if let Some(workspace_config) = maybe_workspace_config.as_ref() { - // let base_import_map = maybe_config_file - // .as_ref() - // .map(|cf| cf.to_import_map_value()) - // .unwrap_or_else(|| serde_json::json!({})); - // eprintln!( - // "import map from workspace config {:#?}", - // workspace_config.to_import_map(base_import_map) - // ); - // } - Ok(Self { flags, initial_cwd, @@ -746,16 +735,11 @@ impl CliOptions { file_fetcher: &FileFetcher, ) -> Result, AnyError> { if let Some(workspace_config) = self.maybe_workspace_config.as_ref() { - let base_import_map = self - .maybe_config_file - .as_ref() - .map(|cf| cf.to_import_map_value()) - .unwrap_or_else(|| serde_json::json!({})); - - let maybe_import_map = workspace_config.to_import_map(base_import_map)?; + let maybe_import_map = workspace_config.to_import_map_value()?; if let Some(import_map) = maybe_import_map { eprintln!("import map from workspace config {:#?}", import_map); return import_map::import_map_from_value( + // TODO(bartlomieju): maybe should be stored on the workspace config? &self.maybe_config_file.as_ref().unwrap().specifier, import_map, ) From ff75528a0dc58ebfc3e1472353a862337ed3c689 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 23 Aug 2023 08:26:48 -0400 Subject: [PATCH 08/30] Workspace members --- cli/graph_util.rs | 4 ++++ cli/module_loader.rs | 2 ++ 2 files changed, 6 insertions(+) diff --git a/cli/graph_util.rs b/cli/graph_util.rs index cfa37c98e25a94..37b9f76c719c76 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -237,6 +237,8 @@ impl ModuleGraphBuilder { npm_resolver: Some(graph_npm_resolver), module_analyzer: Some(&*analyzer), reporter: maybe_file_watcher_reporter, + // todo: workspace members + workspace_members: vec![], }, ) .await?; @@ -280,6 +282,8 @@ impl ModuleGraphBuilder { npm_resolver: Some(graph_npm_resolver), module_analyzer: Some(&*analyzer), reporter: maybe_file_watcher_reporter, + // todo: workspace members + workspace_members: vec![], }, ) .await?; diff --git a/cli/module_loader.rs b/cli/module_loader.rs index 608ee855b0ba52..102418ca9d7393 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -145,6 +145,8 @@ impl ModuleLoadPreparer { npm_resolver: Some(graph_npm_resolver), module_analyzer: Some(&*analyzer), reporter: maybe_file_watcher_reporter, + // todo: workspace members + workspace_members: vec![], }, ) .await?; From 8bdbb72d59605c4a1d6d384e000efbda9bfa2651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 14:29:59 +0200 Subject: [PATCH 09/30] remove chain, pretty print --- cli/args/mod.rs | 7 +-- try_workspace/bar/bar.js | 2 - try_workspace/bar/deno.json | 1 - try_workspace/deno.lock | 100 ------------------------------------ 4 files changed, 4 insertions(+), 106 deletions(-) diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 2c0a1093f03157..727feef92655d3 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -588,8 +588,6 @@ impl CliOptions { None }; - eprintln!("maybe workspace config {:#?}", maybe_workspace_config); - Ok(Self { flags, initial_cwd, @@ -737,7 +735,10 @@ impl CliOptions { if let Some(workspace_config) = self.maybe_workspace_config.as_ref() { let maybe_import_map = workspace_config.to_import_map_value()?; if let Some(import_map) = maybe_import_map { - eprintln!("import map from workspace config {:#?}", import_map); + eprintln!( + "import map from workspace config {}", + serde_json::to_string_pretty(&import_map).unwrap() + ); return import_map::import_map_from_value( // TODO(bartlomieju): maybe should be stored on the workspace config? &self.maybe_config_file.as_ref().unwrap().specifier, diff --git a/try_workspace/bar/bar.js b/try_workspace/bar/bar.js index 43934e853f4c37..94b0a3fda6142a 100644 --- a/try_workspace/bar/bar.js +++ b/try_workspace/bar/bar.js @@ -1,10 +1,8 @@ import codeBlockWriter from "codeBlockWriter"; -import * as chain from "chain/file1.ts"; import * as colors from "@std/fmt/colors.ts"; // import { foo } from "deno:@foo/foo@1"; console.log(">> BAR > codeBlockWriter > ", codeBlockWriter); -console.log(">> BAR > chain > ", chain); console.log(">> BAR > @std/fmt/colors > ", colors.red("Hello!")); // console.log(">> BAR > foo > ", foo); diff --git a/try_workspace/bar/deno.json b/try_workspace/bar/deno.json index 8918f76dcb5eb1..1d624414ceac71 100644 --- a/try_workspace/bar/deno.json +++ b/try_workspace/bar/deno.json @@ -3,7 +3,6 @@ "version": "0.0.1", "imports": { "codeBlockWriter": "deno:@foo/code_block_writer", - "chain/": "deno:/@foo/chain/", "foo/": "deno:/@foo/foo/", "@std/fmt/": "deno:/@std/fmt/" }, diff --git a/try_workspace/deno.lock b/try_workspace/deno.lock index c72c32456dd3e2..b06859d844726b 100644 --- a/try_workspace/deno.lock +++ b/try_workspace/deno.lock @@ -1,106 +1,6 @@ { "version": "2", "remote": { - "https://deno-registry-staging.net/@foo/chain/0.0.2/file1.ts": "54cb0f4ba997ea9629e0029193df96e84d79b30cb94a6d30eb763b1da37f6993", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file10.ts": "cda843eec23c45d8f5858950841dfb174b7ce9181a6bcae9eb95e233f58d2e19", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file100.ts": "7ac2e11b3cb9bbd16f61ee8f7f33a7ead47286e0e20fbf604f5cdb9dc9fbd89f", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file11.ts": "f8a12980c6d98ef726c36fee6395c2ab629395074c102f12f640d38e398abc47", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file12.ts": "9cde1938e6adae59b8a0ecb34a71be155aef49b51c44709024475e50d4c948b1", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file13.ts": "a572c1ef9fd4aa1e4e640bd400858b6deefa854ea90d6ba2f071c03b26d533ea", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file14.ts": "0734ded0afd2304ac4cfd30515ac03ff7868dc8c7a93c19753b3431b3e82acaa", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file15.ts": "9bc37b228423d4614c5fbb8773f4865cae49751e297d11288f7a0e8a9a97ffea", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file16.ts": "1b82548452d40deacdde9cb9cdda98ce5579ec4fc6da1ef84b0fa9ed3d7c8282", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file17.ts": "e931034de06f1aa05180a5793a0b5d5bec786c457115fbef859c5b063ed585e7", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file18.ts": "14c85d1d1d287c31ab4554bf93c0b83854df7c977111279c6be826838dcc9622", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file19.ts": "6f2cdac7b21d21fb969a6203c63a8831fd9cecb65a5f2d6521efce142c756ab8", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file2.ts": "80cfc98b50ba285b02b265d8cdf81857d9fb79c042b4074173163ba757faf8a4", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file20.ts": "8ace72f13dd984fdb6f2bb58247b5538c8b6d0e7a8454b85af19246b321dcb8c", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file21.ts": "b253fa31f08b04f0608fb4083fb1c0b115d0d935c6d23f5e8b6655976356f2b3", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file22.ts": "fa34b6b3685d27490232dd1a99dd30f7784de77e770259f67688fc152b1f60a6", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file23.ts": "94b9e4cc5918d4427689fdbe48a4953affe89734a0d727b17b30436174e12f09", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file24.ts": "aa0fa552c292b3029cd01dfa53f907c1872ae34945f2e26450ce8fbca89d82e9", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file25.ts": "9dd1433a4804fde6c7d66c764e824172cee21bb61f6674d9d3299541f89bfb30", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file26.ts": "915f1ef99fb264059ac6cb115252d12b7f86e83e604af1192370aaf8f7952957", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file27.ts": "13bff7aad1e65a94a8164617d583df781e25a9d997e465188e67ad6c3f874d78", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file28.ts": "09d2ca74bf69fa6e8ddca14019bfe793c04de6088522014b861683bf6879c1ff", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file29.ts": "805dc1a2406305210c8c7a33d0d74c7a27a6f6a5654185392bb5935fad5be059", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file3.ts": "acae5e000e521e0c1eedf55fe64c8b322b391d949bd3d7d8a3e86d871d4495a6", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file30.ts": "88887c7e43029bef1476ede06174be0241fbb5f58c0eb94b3ffce1a26f3cff8f", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file31.ts": "a1a532598515988cc4402bd3bcfe1d31f5b14db288ec5e58e32e10128e0ff307", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file32.ts": "5988e5c0340332ac3118ca75b74d163943dadb54671196a7005d6446e4cd3bb8", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file33.ts": "44f60316228018c9c4e9b047af625493c36a381eea67e5ef6a0a4bb72146c0cf", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file34.ts": "eb455224beab6bbdce016281b22f582fb098c6e4530b4c3c551da5ddd05a1bae", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file35.ts": "efde2829619193589f29553196a965c23f25e740d63fb366877ebcb800b95ac3", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file36.ts": "84f4da26e74c5eb38627de5b214ce4464c4979116e69240222db81bf309dc967", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file37.ts": "310c05e7cdb707dde3ee551dfcdb6fd3376679960d3292fcff5fc6e917ca7260", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file38.ts": "947771a7414376fef66e49be7b56f49b92e52e063d74475d85ed70d142255c35", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file39.ts": "c9fc5d8166e424d961d619e850c45c1510ca54baa08a953c9e4feffe093314fa", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file4.ts": "a3e74e92076cda47f2602d16483e9fb48f8135fe3f81b06a672d7f072482677b", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file40.ts": "b25d2787370751d1e1e55f01a44d50b458d167dd0b37c3f1953fe9359595881e", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file41.ts": "e3aeec38651ce67adbe2cc7bf346a14e7030122582acd1a5bc270e37b8cb145b", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file42.ts": "ba3ca9fe0e859c96f4692a4620a3afbf897ac650ee76f453ecb769838cbf3426", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file43.ts": "8a9ddb55c32f7207f3224b1b836cecfff7665adf24f64f854cfc549f1a077c30", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file44.ts": "d2b487e85737b392899f75576517977140999fdcfaea5bf86b29f68db451f7dc", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file45.ts": "f3d6e8370343fed91dbc307f89a2ec1dadf4823f4b492aba39e66f855fece242", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file46.ts": "ded9dc24efc24e4c39cb7ddd94f5fe4ece381d85d8e4f7b5361b5284119de59e", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file47.ts": "7ca1eb3ce2cd8d4a8cb683be1b398b2f80725c7ab8e0a13ae2241511c902651f", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file48.ts": "ed80d5ff50140167b7df71f9725f76b92e97e8548d8a233c76698b3a65535ce9", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file49.ts": "cc6bb02b56eebe74ba902a73d3171d5c5dfc0914c58ebe9c8de57d77f47be63a", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file5.ts": "871024a0bd2c05f718d35db2a7c22186ff3f71c1a6492843065e54c52ffb53aa", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file50.ts": "e30deacdf8ea125425229a3866325bf2fb4d0999fee46164a76182b7bcf68ab1", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file51.ts": "318364010e4996a29733ca7c5515d787a917973f902d8f498ce40090082c9df9", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file52.ts": "1108f9af7f936de581e2d8ebcdd7092706700e434a2de615e17bfda0d74c9280", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file53.ts": "260573b30cf7a405802ac6cb58edc911b547651c409a57c7068238eaca73bd2c", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file54.ts": "2d71616986251c82449be2a777ad290f0a1c8142682ed447ed7b2fd4b00eb472", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file55.ts": "54e86fe24b13b02d915cd1b38713b8d777483f6e33b7a797ed5be6cb78eec424", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file56.ts": "f5135c7348784dd6f99e018b2cdf60446effda8b171a376ad9128446d5312107", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file57.ts": "4baad296ddf1f7fedda5e5370cc02ef590f0a9056ae0d7bc32fcfd2958b6bb39", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file58.ts": "3695dff06aa0615ab691ae5f4ab9928d05f453aaf06202b213fbea3c602575c6", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file59.ts": "b1aab40fdf18f7769b3027143b3913aa961049861f5e3ca6f2f65a9bcc72b62b", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file6.ts": "90140d603155a0793bd47e79b94112a671b9d45fabf990c01d18c07a97bed34d", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file60.ts": "3fbe1fb2fc5d18bcde81887fbe79b9dcb42df26307da19a0d54236f07b42e694", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file61.ts": "f99897b0328d0788b3f359eb7b8b8b74c16baf3c981754f7b1487a909baa6492", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file62.ts": "58080901e9198716b9e14901ebd889b1f96d8309bc47ac99fa0041ab78a214a0", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file63.ts": "d3c431406071fb60569b9db415ca585abea0b031c45ea17b6e4571653aca6895", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file64.ts": "1f13713ac8456fc7441e59edd2ed4d2ddd3d49daaf9c537d4dee11651b37a215", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file65.ts": "2efbcfc45a8ab040ccb8e869d7fba3cbd252d6ea9fdef715b6586c0c884a334d", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file66.ts": "766658df67ce4aef9fb2965a23cbc21206392065a30e361588020f291b570b4d", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file67.ts": "7ea407cc92627b29b79ec1038e08ae15daa6d2a88ffe796610c79b3c777b2b61", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file68.ts": "71e8448f62cb27618be9e5a9e9aaf006300c1915a440376ec9b2699897fb13d0", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file69.ts": "bfb09e0b0c71bf21fc8dba52d18939b8679ee2a74955f64e30d600eab1310da9", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file7.ts": "d9af1373a8e7cc0c5f48db616a4a3bd2fbcf28ba6fc451a4b7424e9af5fb2edf", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file70.ts": "9328dec4859e8ced7da4dba70271ebc1a2bc7f8c7173cdf19e7604779d056896", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file71.ts": "ea1da4417496652881209b78eff08d59c8f9d1ca978500a62fdfc12e6e476863", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file72.ts": "26b15fab623b078c0193f238afe4e10179df5130db580c3fbfd558cae959832d", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file73.ts": "40102255a09103788d5955a4cc7141ecef3adada0e339c1010fcf28c79a578cf", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file74.ts": "a340542c679b8ac340d95d3408010aa9a97af1693939fa08f792d7e7fac35cca", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file75.ts": "7002ec908335d84d42b2906d6090695d7b334d607320a5107329121972fde0c5", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file76.ts": "df851d519fe349423ab519e3bea4667618970f86a12111ee8cc24ed983218ad2", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file77.ts": "0fc02040599c7fbbfc5b51a4773bfa992a9807d6daefdf326f63356a6baee983", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file78.ts": "a1e593342b6e465a6d9e7e0f3cb18f3a721a7e19b0a27faa6e2d1a4ebe79298a", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file79.ts": "6cfe8cbf23457474eaf0faedf76bab9db56db4b99d782d3bb5d0a4dc24d9d5a4", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file8.ts": "c1d225203e70a3a50f7ba9cd31df0e44efcbf4e94b06914b21a270e6424e1202", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file80.ts": "80d1db88593c98d37a1207c0e57a76edb87db1a36d63ab2b24fcf6b19e2d4694", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file81.ts": "c5da2566889e826b75b161454abb10ac849fecf944553e97082f5b44f6eef4f0", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file82.ts": "8293a58578c79e01ed6a8a6304ea6b3570e945dd65b2db2d5ab27ac20f199ee2", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file83.ts": "6ad47693f1ad50b6f9811c147aa693e6820f70267703eb0957c534652cbd956e", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file84.ts": "05b8fd7fa31dace43db4f98a82ad57b607ab5abc01bc3e33f9c4e8c700f4e0cb", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file85.ts": "c2e1f40ba913a06ea0cea667191a2c5ea03bde598266839eab97ec2ed667af04", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file86.ts": "988af740b0ead3dbe45f081f791c3177436e34b95dcf9be87a483c50f7f14337", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file87.ts": "9f7c1f971287f143ed2c622ee16ebbee2723e1335bcdde52ff3520fa31b9db82", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file88.ts": "a3af0ec2c2ac8a57471a6a748c833b1ee4cec4be54d0b47823f4741f56614569", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file89.ts": "4e2a6420908ebd6ae3c266fa5895fd6483d2647363e8dbf9d1d342aea7fbcfce", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file9.ts": "5c1e7796b3b0b24e48b041c3913f4112a2795e22557c69652a771c3c1ef3f96e", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file90.ts": "6ce27dfe20c6198608844ac369cc88a6d3e047440c1e07476bffe3a95d36a382", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file91.ts": "42fa9d08352f15b5acfe4e6d7bc5ff9b938f369f544cceb6e2cc21b5f22ef9f2", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file92.ts": "db71fa91e22d618c1d40abe6ff0d653cef60acdaf1f32075fefdc9bdb25c27e5", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file93.ts": "9a268d9626a133f5348d688a6f3251984e11b0a5515a6ab61ad874ada27ba3f0", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file94.ts": "c480f7785ae17ef2d3a5636d0048b71cb5f27b4134963f4c5f655ba753416717", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file95.ts": "a77afc9fd317cff57fb2f4dd570b660586a73cdda5e7d4d22988e67126216cac", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file96.ts": "4a5bd724fe26b78a2f63d2f87b216a5e5777cb949272a7843c368ac5b63f3522", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file97.ts": "62cc0f0407ccc026d945c2a6c390db6e703a6a1583ee10f5e9585ad6b5be8fcd", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file98.ts": "df1692a30c84f59011096aef6f62b20ad8abb489c998d14dfd9e8aeaac6dd0d7", - "https://deno-registry-staging.net/@foo/chain/0.0.2/file99.ts": "9d7870fde9db8aa6764647705767667bc0a9be551e6d86958e1739c5f4db248f", "https://deno-registry-staging.net/@foo/code_block_writer/0.0.1/mod.ts": "2c3448060e47c9d08604c8f40dee34343f553f33edcdfebbf648442be33205e5", "https://deno-registry-staging.net/@foo/code_block_writer/0.0.1/utils/string_utils.ts": "60cb4ec8bd335bf241ef785ccec51e809d576ff8e8d29da43d2273b69ce2a6ff", "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/DenoRuntime.ts": "6a7180f0c6e90dcf23ccffc86aa8271c20b1c4f34c570588d08a45880b7e172d", From a786cd115cf9f8e1f366829ee5be4e16b6769928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 14:55:28 +0200 Subject: [PATCH 10/30] loading sibling member --- cli/args/config_file.rs | 73 +++++++++++++++++++++++++++++++------ cli/args/mod.rs | 4 ++ cli/graph_util.rs | 18 +++++++-- cli/module_loader.rs | 9 ++++- try_workspace/bar/bar.js | 4 +- try_workspace/bar/deno.json | 1 - 6 files changed, 88 insertions(+), 21 deletions(-) diff --git a/cli/args/config_file.rs b/cli/args/config_file.rs index 15c46d140b1f27..b049a70bdbb01c 100644 --- a/cli/args/config_file.rs +++ b/cli/args/config_file.rs @@ -639,13 +639,49 @@ impl SerializedBenchConfig { } } -#[derive(Clone, Debug, Default, PartialEq)] +#[derive(Debug, Default)] pub struct WorkspaceConfig { enabled: bool, - members: Vec<(String, PathBuf)>, + members: Vec, base_import_map_value: Value, } +impl WorkspaceConfig { + pub fn get_graph_workspace_members( + &self, + ) -> Result, AnyError> { + self + .members + .iter() + .map(|m| m.try_into_graph_workspace_member()) + .collect() + } +} +#[derive(Debug)] +pub struct WorkspaceMemberConfig { + // As defined in `member` setting of the workspace deno.json. + member_name: String, + path: PathBuf, + package_name: String, + package_version: String, + config_file: ConfigFile, +} + +impl WorkspaceMemberConfig { + pub fn try_into_graph_workspace_member( + &self, + ) -> Result { + let nv = deno_semver::package::PackageNv { + name: self.package_name.clone(), + version: deno_semver::Version::parse_standard(&self.package_version)?, + }; + Ok(deno_graph::WorkspaceMember { + base: ModuleSpecifier::from_directory_path(&self.path).unwrap(), + nv, + }) + } +} + impl WorkspaceConfig { pub fn to_import_map_value(&self) -> Result, AnyError> { let mut import_map_imports = json!({}); @@ -655,13 +691,8 @@ impl WorkspaceConfig { let synthetic_import_map_scopes = import_map_scopes.as_object_mut().unwrap(); - for (member_name, member_path) in self.members.iter() { - let member_config_file_path = member_path.join("deno.json"); - let member_config_file = ConfigFile::from_specifier_and_path( - ModuleSpecifier::from_file_path(&member_config_file_path).unwrap(), - &member_config_file_path, - )?; - let import_map_value = member_config_file.to_import_map_value(); + for member_config in self.members.iter() { + let import_map_value = member_config.config_file.to_import_map_value(); let mut member_scope = json!({}); @@ -673,7 +704,7 @@ impl WorkspaceConfig { // TODO(bartlomieju): this need to resolve values in member_scope based // on the "base URL" of the member import map filepath synthetic_import_map_scopes - .insert(format!("./{}/", member_name), member_scope); + .insert(format!("./{}/", member_config.member_name), member_scope); } if let Some(scopes) = import_map_value.get("scopes") { @@ -681,7 +712,7 @@ impl WorkspaceConfig { // Keys for scopes need to be processed - they might look like // "/foo/" and coming from "bar" workspace member. So we need to // prepend the member name to the scope. - let new_key = format!("./{}{}", member_name, key); + let new_key = format!("./{}{}", member_config.member_name, key); // TODO(bartlomieju): this need to resolve value based on the "base URL" // of the member import map filepath synthetic_import_map_scopes.insert(new_key, value.to_owned()); @@ -755,6 +786,8 @@ pub struct ConfigFileJson { pub node_modules_dir: Option, pub vendor: Option, + pub name: Option, + pub version: Option, #[serde(default)] pub workspace: bool, #[serde(default)] @@ -1082,7 +1115,23 @@ impl ConfigFile { member_deno_json.display() ); } - members.push((member.to_string(), member_path)); + let member_config_file = ConfigFile::from_specifier_and_path( + ModuleSpecifier::from_file_path(&member_deno_json).unwrap(), + &member_deno_json, + )?; + let Some(package_name) = &member_config_file.json.name else { + bail!("Missing 'name' for workspace member {}", member); + }; + let Some(package_version) = &member_config_file.json.version else { + bail!("Missing 'version' for workspace member {}", member); + }; + members.push(WorkspaceMemberConfig { + member_name: member.to_string(), + path: member_path, + package_name: package_name.to_string(), + package_version: package_version.to_string(), + config_file: member_config_file, + }); } let base_import_map_value = self.to_import_map_value(); diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 727feef92655d3..97686695935214 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -971,6 +971,10 @@ impl CliOptions { &self.maybe_config_file } + pub fn maybe_workspace_config(&self) -> &Option { + &self.maybe_workspace_config + } + pub fn maybe_package_json(&self) -> &Option { &self.maybe_package_json } diff --git a/cli/graph_util.rs b/cli/graph_util.rs index 37b9f76c719c76..a58b2488b2e84a 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -214,6 +214,12 @@ impl ModuleGraphBuilder { loader: &mut dyn Loader, ) -> Result { let maybe_imports = self.options.to_maybe_imports()?; + let maybe_workspace_config = self.options.maybe_workspace_config(); + let workspace_members = if let Some(wc) = maybe_workspace_config { + wc.get_graph_workspace_members()? + } else { + vec![] + }; let cli_resolver = self.resolver.clone(); let graph_resolver = cli_resolver.as_graph_resolver(); @@ -237,8 +243,7 @@ impl ModuleGraphBuilder { npm_resolver: Some(graph_npm_resolver), module_analyzer: Some(&*analyzer), reporter: maybe_file_watcher_reporter, - // todo: workspace members - workspace_members: vec![], + workspace_members, }, ) .await?; @@ -259,6 +264,12 @@ impl ModuleGraphBuilder { ) -> Result, AnyError> { let mut cache = self.create_graph_loader(); let maybe_imports = self.options.to_maybe_imports()?; + let maybe_workspace_config = self.options.maybe_workspace_config(); + let workspace_members = if let Some(wc) = maybe_workspace_config { + wc.get_graph_workspace_members()? + } else { + vec![] + }; let cli_resolver = self.resolver.clone(); let graph_resolver = cli_resolver.as_graph_resolver(); let graph_npm_resolver = cli_resolver.as_graph_npm_resolver(); @@ -282,8 +293,7 @@ impl ModuleGraphBuilder { npm_resolver: Some(graph_npm_resolver), module_analyzer: Some(&*analyzer), reporter: maybe_file_watcher_reporter, - // todo: workspace members - workspace_members: vec![], + workspace_members, }, ) .await?; diff --git a/cli/module_loader.rs b/cli/module_loader.rs index 102418ca9d7393..d8513b8289be44 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -113,6 +113,12 @@ impl ModuleLoadPreparer { let mut cache = self.module_graph_builder.create_fetch_cacher(permissions); let maybe_imports = self.options.to_maybe_imports()?; + let maybe_workspace_config = self.options.maybe_workspace_config(); + let workspace_members = if let Some(wc) = maybe_workspace_config { + wc.get_graph_workspace_members()? + } else { + vec![] + }; let graph_resolver = self.resolver.as_graph_resolver(); let graph_npm_resolver = self.resolver.as_graph_npm_resolver(); let maybe_file_watcher_reporter = self @@ -145,8 +151,7 @@ impl ModuleLoadPreparer { npm_resolver: Some(graph_npm_resolver), module_analyzer: Some(&*analyzer), reporter: maybe_file_watcher_reporter, - // todo: workspace members - workspace_members: vec![], + workspace_members, }, ) .await?; diff --git a/try_workspace/bar/bar.js b/try_workspace/bar/bar.js index 94b0a3fda6142a..80a0ef4bf10a2a 100644 --- a/try_workspace/bar/bar.js +++ b/try_workspace/bar/bar.js @@ -1,10 +1,10 @@ import codeBlockWriter from "codeBlockWriter"; import * as colors from "@std/fmt/colors.ts"; -// import { foo } from "deno:@foo/foo@1"; +import { foo } from "deno:@foo/foo/foo.js"; console.log(">> BAR > codeBlockWriter > ", codeBlockWriter); console.log(">> BAR > @std/fmt/colors > ", colors.red("Hello!")); -// console.log(">> BAR > foo > ", foo); +console.log(">> BAR > foo > ", foo); export function bar() { } diff --git a/try_workspace/bar/deno.json b/try_workspace/bar/deno.json index 1d624414ceac71..ea16fbad8541fd 100644 --- a/try_workspace/bar/deno.json +++ b/try_workspace/bar/deno.json @@ -3,7 +3,6 @@ "version": "0.0.1", "imports": { "codeBlockWriter": "deno:@foo/code_block_writer", - "foo/": "deno:/@foo/foo/", "@std/fmt/": "deno:/@std/fmt/" }, "scopes": { From aa0d66ec1134db9dee3fb2073d89b13b05d90d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 23 Aug 2023 22:37:12 +0200 Subject: [PATCH 11/30] demo --- try_workspace/bar/bar.js | 14 ++++++++++---- try_workspace/bar/deno.json | 3 ++- try_workspace/foo/foo.js | 13 ++++++++++--- try_workspace/test.js | 8 ++++++-- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/try_workspace/bar/bar.js b/try_workspace/bar/bar.js index 80a0ef4bf10a2a..0dc955250353d9 100644 --- a/try_workspace/bar/bar.js +++ b/try_workspace/bar/bar.js @@ -1,10 +1,16 @@ import codeBlockWriter from "codeBlockWriter"; import * as colors from "@std/fmt/colors.ts"; -import { foo } from "deno:@foo/foo/foo.js"; +import { foo } from "foo/foo.js"; -console.log(">> BAR > codeBlockWriter > ", codeBlockWriter); -console.log(">> BAR > @std/fmt/colors > ", colors.red("Hello!")); -console.log(">> BAR > foo > ", foo); +console.log(">> BAR > codeBlockWriter >"); +console.log(codeBlockWriter); +console.log(); +console.log(">> BAR > @std/fmt/colors >"); +console.log(colors.red("Hello!")); +console.log(); +console.log(">> BAR > foo >"); +console.log(foo); +console.log(); export function bar() { } diff --git a/try_workspace/bar/deno.json b/try_workspace/bar/deno.json index ea16fbad8541fd..2ec5fc329285c2 100644 --- a/try_workspace/bar/deno.json +++ b/try_workspace/bar/deno.json @@ -3,7 +3,8 @@ "version": "0.0.1", "imports": { "codeBlockWriter": "deno:@foo/code_block_writer", - "@std/fmt/": "deno:/@std/fmt/" + "@std/fmt/": "deno:/@std/fmt/", + "foo/": "deno:/@foo/foo/" }, "scopes": { "/nested/": { diff --git a/try_workspace/foo/foo.js b/try_workspace/foo/foo.js index 5a59fd712d5dd3..136a268bdc3530 100644 --- a/try_workspace/foo/foo.js +++ b/try_workspace/foo/foo.js @@ -2,9 +2,16 @@ import codeBlockWriter from "codeBlockWriter"; import * as tsMorph from "tsMorph"; import * as assert from "@std/assert/mod.ts"; -console.log(">> FOO > codeBlockWriter > ", codeBlockWriter); -console.log(">> FOO > tsMorph > ", tsMorph.SetAccessorDeclaration); -console.log(">> FOO > @std/assert > ", assert.assertEquals); +console.log(">> FOO > codeBlockWriter >"); +console.log(codeBlockWriter); +console.log(); +console.log(">> FOO > tsMorph >"); +console.log(tsMorph.SetAccessorDeclaration); +console.log(); +console.log(">> FOO > @std/assert >"); +console.log(assert.assertEquals); +console.log(); export function foo() { } +foo.name = "fooFn"; diff --git a/try_workspace/test.js b/try_workspace/test.js index 7df17599fb8a65..f6b3d6da7ec57c 100644 --- a/try_workspace/test.js +++ b/try_workspace/test.js @@ -1,5 +1,9 @@ import { foo } from "./foo/foo.js"; import { bar } from "./bar/bar.js"; -console.log("foo", foo); -console.log("bar", bar); +console.log(">> foo"); +console.log(foo); +console.log(); +console.log(">> bar"); +console.log(bar); +console.log(); From e16fea286a806a08df2b96fc771ef71945bf246d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 24 Aug 2023 11:52:56 +0200 Subject: [PATCH 12/30] almost working --- Cargo.lock | 4 ---- Cargo.toml | 2 ++ cli/args/mod.rs | 45 ++++++++++++++++++++++++++++++++++++++++++-- cli/graph_util.rs | 27 ++++++++++++++++++++++++-- cli/module_loader.rs | 3 ++- 5 files changed, 72 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d01bfb2e9ad15..e634fa8476e358 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -992,8 +992,6 @@ dependencies = [ [[package]] name = "deno_config" version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42ff2a01961c72ef883375399677ccf046dba607dc14169b313e4a95bd26da2" dependencies = [ "anyhow", "deno_semver", @@ -2681,8 +2679,6 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "import_map" version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632089ec08bd62e807311104122fb26d5c911ab172e2b9864be154a575979e29" dependencies = [ "cfg-if", "indexmap 1.9.3", diff --git a/Cargo.toml b/Cargo.toml index 9acf138b9811e3..368143ed2690b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -329,3 +329,5 @@ opt-level = 3 [patch.crates-io] deno_graph = { path = "../deno_graph" } +deno_config = { path = "../deno_config" } +import_map = { path = "../import_map" } diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 9fc53515dc52fb..81323e9d1a7ce3 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -769,8 +769,49 @@ impl CliOptions { file_fetcher: &FileFetcher, ) -> Result, AnyError> { if let Some(workspace_config) = self.maybe_workspace_config.as_ref() { - let maybe_import_map = workspace_config.to_import_map_value()?; - if let Some(import_map) = maybe_import_map { + let base_import_map_config = ::import_map::ext::ImportMapConfig { + base_url: self.maybe_config_file.as_ref().unwrap().specifier.clone(), + // Use None here? + scope_prefix: "".to_string(), + imports: workspace_config + .base_import_map_value + .get("imports") + .unwrap_or_else(|| serde_json::json!({})) + .clone(), + scopes: workspace_config + .base_import_map_value + .get("scopes") + .unwrap_or_else(|| serde_json::json!({})) + .clone(), + }; + let children_configs = workspace_config + .members + .iter() + .map(|member| { + let import_map_value = member.config_file.to_import_map_value(); + let imports = import_map_value + .get("imports") + .unwrap_or_else(|| serde_json::json!({})) + .clone(); + let scopes = import_map_value + .get("scopes") + .unwrap_or_else(|| serde_json::json!({})) + .clone(); + + ::import_map::ext::ImportMapConfig { + base_url: Url::from_directory_path(member.path.clone()).unwrap(), + scope_prefix: member.member_name.to_string(), + imports, + scopes, + } + }) + .collect(); + + let maybe_import_map = ::import_map::ext::create_synthetic_import_map( + base_import_map_config, + children_configs, + ); + if let Some((_import_map_url, import_map)) = maybe_import_map { eprintln!( "import map from workspace config {}", serde_json::to_string_pretty(&import_map).unwrap() diff --git a/cli/graph_util.rs b/cli/graph_util.rs index a58b2488b2e84a..8ffaa7e9725ca7 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -216,7 +216,7 @@ impl ModuleGraphBuilder { let maybe_imports = self.options.to_maybe_imports()?; let maybe_workspace_config = self.options.maybe_workspace_config(); let workspace_members = if let Some(wc) = maybe_workspace_config { - wc.get_graph_workspace_members()? + workspace_config_to_workspace_members(wc)? } else { vec![] }; @@ -266,7 +266,7 @@ impl ModuleGraphBuilder { let maybe_imports = self.options.to_maybe_imports()?; let maybe_workspace_config = self.options.maybe_workspace_config(); let workspace_members = if let Some(wc) = maybe_workspace_config { - wc.get_graph_workspace_members()? + workspace_config_to_workspace_members(wc)? } else { vec![] }; @@ -613,6 +613,29 @@ impl deno_graph::source::Reporter for FileWatcherReporter { } } +pub fn workspace_config_to_workspace_members( + workspace_config: &deno_config::WorkspaceConfig, +) -> Result, AnyError> { + workspace_config + .members + .iter() + .map(|m| workspace_member_config_try_into_workspace_member(m)) + .collect() +} + +fn workspace_member_config_try_into_workspace_member( + config: &deno_config::WorkspaceMemberConfig, +) -> Result { + let nv = deno_semver::package::PackageNv { + name: config.package_name.clone(), + version: deno_semver::Version::parse_standard(&config.package_version)?, + }; + Ok(deno_graph::WorkspaceMember { + base: ModuleSpecifier::from_directory_path(&config.path).unwrap(), + nv, + }) +} + #[cfg(test)] mod test { use std::sync::Arc; diff --git a/cli/module_loader.rs b/cli/module_loader.rs index d8513b8289be44..33d404aa58ee8e 100644 --- a/cli/module_loader.rs +++ b/cli/module_loader.rs @@ -7,6 +7,7 @@ use crate::cache::ParsedSourceCache; use crate::emit::Emitter; use crate::graph_util::graph_lock_or_exit; use crate::graph_util::graph_valid_with_cli_options; +use crate::graph_util::workspace_config_to_workspace_members; use crate::graph_util::FileWatcherReporter; use crate::graph_util::ModuleGraphBuilder; use crate::graph_util::ModuleGraphContainer; @@ -115,7 +116,7 @@ impl ModuleLoadPreparer { let maybe_imports = self.options.to_maybe_imports()?; let maybe_workspace_config = self.options.maybe_workspace_config(); let workspace_members = if let Some(wc) = maybe_workspace_config { - wc.get_graph_workspace_members()? + workspace_config_to_workspace_members(wc)? } else { vec![] }; From 4de0910c7fcc7aae3c44b5aedbf50257d8303b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 24 Aug 2023 12:45:33 +0200 Subject: [PATCH 13/30] working now --- cli/args/mod.rs | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 81323e9d1a7ce3..0246b1d5a9d2dd 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -773,36 +773,17 @@ impl CliOptions { base_url: self.maybe_config_file.as_ref().unwrap().specifier.clone(), // Use None here? scope_prefix: "".to_string(), - imports: workspace_config - .base_import_map_value - .get("imports") - .unwrap_or_else(|| serde_json::json!({})) - .clone(), - scopes: workspace_config - .base_import_map_value - .get("scopes") - .unwrap_or_else(|| serde_json::json!({})) - .clone(), + import_map_value: workspace_config.base_import_map_value.clone(), }; let children_configs = workspace_config .members .iter() .map(|member| { let import_map_value = member.config_file.to_import_map_value(); - let imports = import_map_value - .get("imports") - .unwrap_or_else(|| serde_json::json!({})) - .clone(); - let scopes = import_map_value - .get("scopes") - .unwrap_or_else(|| serde_json::json!({})) - .clone(); - ::import_map::ext::ImportMapConfig { base_url: Url::from_directory_path(member.path.clone()).unwrap(), scope_prefix: member.member_name.to_string(), - imports, - scopes, + import_map_value, } }) .collect(); From 4a896ed73aa304f2b44426c38dd2a3af3a9f8b1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 5 Sep 2023 17:18:24 +0200 Subject: [PATCH 14/30] update Cargo.lock --- Cargo.lock | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f5bf9960a10efa..17b23cf27e6e72 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1180,10 +1180,9 @@ dependencies = [ [[package]] name = "deno_graph" version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6acc743895f5e83c985d632998e58af1395c862b28acabd3d290540ef4d57354" dependencies = [ "anyhow", + "async-trait", "data-url 0.2.0", "deno_ast", "deno_semver", @@ -6535,7 +6534,3 @@ dependencies = [ "libc", "pkg-config", ] - -[[patch.unused]] -name = "deno_graph" -version = "0.52.1" From 50b9f26d730f2bf0e5c200d36ed4acf418afb9c4 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Fri, 10 Nov 2023 15:23:48 -0500 Subject: [PATCH 15/30] Update to have exports --- Cargo.lock | 7 +------ Cargo.toml | 1 + cli/Cargo.toml | 2 +- cli/args/mod.rs | 1 + cli/graph_util.rs | 7 +++++++ 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cc4ea436166cfa..0208050758a8f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1060,16 +1060,13 @@ dependencies = [ [[package]] name = "deno_config" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4dd27020827a51857fbb47a21d2359f75db031e177821bff4e95368333a5a0" +version = "0.6.0" dependencies = [ "anyhow", "indexmap 2.0.2", "jsonc-parser", "log", "percent-encoding", - "pretty_assertions", "serde", "serde_json", "url", @@ -2837,8 +2834,6 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "import_map" version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632089ec08bd62e807311104122fb26d5c911ab172e2b9864be154a575979e29" dependencies = [ "cfg-if", "indexmap 1.9.3", diff --git a/Cargo.toml b/Cargo.toml index 0644bb2c2007f3..202823318c0362 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -339,3 +339,4 @@ opt-level = 3 [patch.crates-io] import_map = { path = "../import_map" } +deno_config = { path = "../deno_config" } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index b7aed6b12b14bd..c8c7cd1dc47464 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -47,7 +47,7 @@ winres.workspace = true [dependencies] deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "dep_graph", "module_specifier", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_cache_dir = "=0.6.1" -deno_config = "=0.5.0" +deno_config = "=0.6.0" deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } deno_doc = { version = "=0.73.0", features = ["html"] } deno_emit = "=0.31.2" diff --git a/cli/args/mod.rs b/cli/args/mod.rs index fadb867ccd4acb..d985ff8d2f773f 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -987,6 +987,7 @@ impl CliOptions { maybe_config_file: self.maybe_config_file.clone(), maybe_package_json: self.maybe_package_json.clone(), maybe_lockfile: self.maybe_lockfile.clone(), + maybe_workspace_config: self.maybe_workspace_config.clone(), overrides: self.overrides.clone(), } } diff --git a/cli/graph_util.rs b/cli/graph_util.rs index 03dd7d397b640b..64de236e072eb6 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -749,6 +749,13 @@ fn workspace_member_config_try_into_workspace_member( Ok(deno_graph::WorkspaceMember { base: ModuleSpecifier::from_directory_path(&config.path).unwrap(), nv, + exports: config + .config_file + .to_exports_config()? + .into_map() + // todo(dsherret): deno_graph should use an IndexMap + .into_iter() + .collect(), }) } From 65d7cb1c718a8b5ea40c5a4a9c1ff8afa2d83d33 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Fri, 10 Nov 2023 18:10:15 -0500 Subject: [PATCH 16/30] Remove deno_config to local source --- Cargo.lock | 4 +++- Cargo.toml | 1 - cli/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0208050758a8f3..6d2896ca7e35f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1060,7 +1060,9 @@ dependencies = [ [[package]] name = "deno_config" -version = "0.6.0" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8630ff46b8b1c0fc9ddffcaa179bdf30990bf6e9e119baabc2378acc72f08e3" dependencies = [ "anyhow", "indexmap 2.0.2", diff --git a/Cargo.toml b/Cargo.toml index 202823318c0362..0644bb2c2007f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -339,4 +339,3 @@ opt-level = 3 [patch.crates-io] import_map = { path = "../import_map" } -deno_config = { path = "../deno_config" } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index c8c7cd1dc47464..4133ab830034d8 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -47,7 +47,7 @@ winres.workspace = true [dependencies] deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "dep_graph", "module_specifier", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_cache_dir = "=0.6.1" -deno_config = "=0.6.0" +deno_config = "=0.6.1" deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } deno_doc = { version = "=0.73.0", features = ["html"] } deno_emit = "=0.31.2" From f48094ca109b7c76cdbac364e361106392dabf20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 15 Nov 2023 21:28:44 +0100 Subject: [PATCH 17/30] bump import map --- Cargo.lock | 21 +++++++++++++++++---- Cargo.toml | 2 +- cli/Cargo.toml | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6d2896ca7e35f3..31ceac89bb3fe5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -919,7 +919,7 @@ dependencies = [ "hex", "http", "hyper 0.14.27", - "import_map", + "import_map 0.16.0", "indexmap 2.0.2", "jsonc-parser", "junction", @@ -1165,7 +1165,7 @@ dependencies = [ "deno_graph", "futures", "html-escape", - "import_map", + "import_map 0.15.0", "indexmap 2.0.2", "lazy_static", "regex", @@ -1187,7 +1187,7 @@ dependencies = [ "deno_graph", "escape8259", "futures", - "import_map", + "import_map 0.15.0", "parking_lot 0.11.2", "url", ] @@ -1254,7 +1254,7 @@ dependencies = [ "deno_ast", "deno_semver", "futures", - "import_map", + "import_map 0.15.0", "indexmap 2.0.2", "monch", "once_cell", @@ -2836,6 +2836,8 @@ checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" [[package]] name = "import_map" version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632089ec08bd62e807311104122fb26d5c911ab172e2b9864be154a575979e29" dependencies = [ "cfg-if", "indexmap 1.9.3", @@ -2845,6 +2847,17 @@ dependencies = [ "url", ] +[[package]] +name = "import_map" +version = "0.16.0" +dependencies = [ + "indexmap 1.9.3", + "log", + "serde", + "serde_json", + "url", +] + [[package]] name = "indexmap" version = "1.9.3" diff --git a/Cargo.toml b/Cargo.toml index 0644bb2c2007f3..bc3485ff7c6b31 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -338,4 +338,4 @@ opt-level = 3 opt-level = 3 [patch.crates-io] -import_map = { path = "../import_map" } +import_map = { path = "../import_map/rs-lib" } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 4133ab830034d8..d99d1268d80ffb 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -90,7 +90,7 @@ glob = "0.3.1" hex.workspace = true http.workspace = true hyper.workspace = true -import_map = "=0.15.0" +import_map = "=0.16.0" indexmap.workspace = true jsonc-parser = { version = "=0.21.1", features = ["serde"] } lazy-regex.workspace = true From 81668b7fbfd6962b72bfec3820999be4988112f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 15 Nov 2023 23:20:07 +0100 Subject: [PATCH 18/30] use remote branches --- Cargo.lock | 4 ++-- Cargo.toml | 3 ++- cli/args/mod.rs | 5 +---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 07dbd3455756b0..f504504481c644 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1062,8 +1062,7 @@ dependencies = [ [[package]] name = "deno_config" version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8630ff46b8b1c0fc9ddffcaa179bdf30990bf6e9e119baabc2378acc72f08e3" +source = "git+https://github.com/denoland/deno_config?branch=workspaces#bf55b10f4a655698faf737807f8a807c3b63c5ea" dependencies = [ "anyhow", "indexmap 2.0.2", @@ -2865,6 +2864,7 @@ dependencies = [ [[package]] name = "import_map" version = "0.16.0" +source = "git+https://github.com/denoland/import_map?branch=synthetic_import_map#e49bd976229dc5dc2da6772ddcd3e48a6287ce80" dependencies = [ "indexmap 1.9.3", "log", diff --git a/Cargo.toml b/Cargo.toml index cbe408f0db91f9..d046da109f6224 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -339,4 +339,5 @@ opt-level = 3 opt-level = 3 [patch.crates-io] -import_map = { path = "../import_map/rs-lib" } +import_map = { git = "https://github.com/denoland/import_map", branch = "synthetic_import_map" } +deno_config = { git = "https://github.com/denoland/deno_config", branch = "workspaces" } diff --git a/cli/args/mod.rs b/cli/args/mod.rs index d985ff8d2f773f..cfb164f29548f8 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -825,8 +825,6 @@ impl CliOptions { if let Some(workspace_config) = self.maybe_workspace_config.as_ref() { let base_import_map_config = ::import_map::ext::ImportMapConfig { base_url: self.maybe_config_file.as_ref().unwrap().specifier.clone(), - // Use None here? - scope_prefix: "".to_string(), import_map_value: workspace_config.base_import_map_value.clone(), }; let children_configs = workspace_config @@ -835,8 +833,7 @@ impl CliOptions { .map(|member| { let import_map_value = member.config_file.to_import_map_value(); ::import_map::ext::ImportMapConfig { - base_url: Url::from_directory_path(member.path.clone()).unwrap(), - scope_prefix: member.member_name.to_string(), + base_url: member.config_file.specifier.clone(), import_map_value, } }) From b3c1527641cb5bca40f6157568231f3eb0b9f136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 15 Nov 2023 23:28:13 +0100 Subject: [PATCH 19/30] don't patch deno_config crate --- Cargo.lock | 5 +++-- Cargo.toml | 3 +-- cli/Cargo.toml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f504504481c644..7a280dc753ff60 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1061,8 +1061,9 @@ dependencies = [ [[package]] name = "deno_config" -version = "0.6.1" -source = "git+https://github.com/denoland/deno_config?branch=workspaces#bf55b10f4a655698faf737807f8a807c3b63c5ea" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26bbf5c11a85bd9e7795c5daf7fc26203b64a9ea567c732cdd474d245f267a85" dependencies = [ "anyhow", "indexmap 2.0.2", diff --git a/Cargo.toml b/Cargo.toml index d046da109f6224..3181494433b45c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -339,5 +339,4 @@ opt-level = 3 opt-level = 3 [patch.crates-io] -import_map = { git = "https://github.com/denoland/import_map", branch = "synthetic_import_map" } -deno_config = { git = "https://github.com/denoland/deno_config", branch = "workspaces" } +import_map = { git = "https://github.com/denoland/import_map", branch = "synthetic_import_map", features = ["ext"] } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 67ddc93c53762c..f143bbe8a20b12 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -51,7 +51,7 @@ winres.workspace = true [dependencies] deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "dep_graph", "module_specifier", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_cache_dir = "=0.6.1" -deno_config = "=0.6.1" +deno_config = "=0.6.2" deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } deno_doc = { version = "=0.73.0", features = ["html"] } deno_emit = "=0.31.2" From d2a19093a024d53d3db4e33540e5e16d0809fb29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 16 Nov 2023 00:57:58 +0100 Subject: [PATCH 20/30] unstable check, use published import_map crate --- Cargo.lock | 7 ++++--- Cargo.toml | 3 --- cli/Cargo.toml | 2 +- cli/args/flags.rs | 11 +++++++++++ cli/args/mod.rs | 6 ++++++ 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7a280dc753ff60..5e74e218e7154a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -919,7 +919,7 @@ dependencies = [ "hex", "http", "hyper 0.14.27", - "import_map 0.16.0", + "import_map 0.17.0", "indexmap 2.0.2", "jsonc-parser", "junction", @@ -2864,8 +2864,9 @@ dependencies = [ [[package]] name = "import_map" -version = "0.16.0" -source = "git+https://github.com/denoland/import_map?branch=synthetic_import_map#e49bd976229dc5dc2da6772ddcd3e48a6287ce80" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e5bf51a0adfdc08afcb9e5a1c8f8c804227ec50d493c65e57e6d117d594bd1b" dependencies = [ "indexmap 1.9.3", "log", diff --git a/Cargo.toml b/Cargo.toml index 3181494433b45c..cb2db83e6752bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -337,6 +337,3 @@ opt-level = 3 opt-level = 3 [profile.release.package.base64-simd] opt-level = 3 - -[patch.crates-io] -import_map = { git = "https://github.com/denoland/import_map", branch = "synthetic_import_map", features = ["ext"] } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index f143bbe8a20b12..eed71f1798ae3e 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -95,7 +95,7 @@ glob = "0.3.1" hex.workspace = true http.workspace = true hyper.workspace = true -import_map = "=0.16.0" +import_map = { version = "=0.17.0", features = ["ext"] } indexmap.workspace = true jsonc-parser = { version = "=0.21.1", features = ["serde"] } lazy-regex.workspace = true diff --git a/cli/args/flags.rs b/cli/args/flags.rs index 235743bda25095..6d1e41a19ada20 100644 --- a/cli/args/flags.rs +++ b/cli/args/flags.rs @@ -431,6 +431,7 @@ pub struct Flags { pub unstable: bool, pub unstable_bare_node_builtins: bool, pub unstable_byonm: bool, + pub unstable_workspaces: bool, pub unstable_features: Vec, pub unsafely_ignore_certificate_errors: Option>, pub v8_flags: Vec, @@ -871,6 +872,7 @@ pub fn flags_from_vec(args: Vec) -> clap::error::Result { flags.unstable_bare_node_builtins = matches.get_flag("unstable-bare-node-builtins"); flags.unstable_byonm = matches.get_flag("unstable-byonm"); + flags.unstable_workspaces = matches.get_flag("unstable-workspaces"); if matches.get_flag("quiet") { flags.log_level = Some(Level::Error); @@ -984,6 +986,15 @@ fn clap_root() -> Command { .value_parser(FalseyValueParser::new()) .action(ArgAction::SetTrue) .global(true), + ) + .arg( + Arg::new("unstable-workspaces") + .long("unstable-workspaces") + .help("Enable unstable 'workspaces' feature") + .env("DENO_UNSTABLE_WORKSPACES") + .value_parser(FalseyValueParser::new()) + .action(ArgAction::SetTrue) + .global(true), ); for (flag_name, help, _) in crate::UNSTABLE_GRANULAR_FLAGS { diff --git a/cli/args/mod.rs b/cli/args/mod.rs index cfb164f29548f8..026f5a688d1b02 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -661,6 +661,12 @@ impl CliOptions { None }; + // TODO(bartlomieju): remove in v1.39 or v1.40. + if maybe_workspace_config.is_some() && !flags.unstable_workspaces { + eprintln!("Use of unstable 'workspaces' feature. The --unstable-workspaces flags must be provided."); + std::process::exit(70); + } + if let Some(env_file_name) = &flags.env_file { if (from_filename(env_file_name)).is_err() { bail!("Unable to load '{env_file_name}' environment variable file") From 0f20a1d5133bedaadd0b088a5a3ce197fcfde3a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 16 Nov 2023 02:11:08 +0100 Subject: [PATCH 21/30] add a test --- cli/args/mod.rs | 4 ++-- cli/tests/integration/run_tests.rs | 9 +++++++++ cli/tests/testdata/run/workspaces/basic/bar/deno.json | 8 ++++++++ cli/tests/testdata/run/workspaces/basic/bar/fizz/buzz.ts | 1 + cli/tests/testdata/run/workspaces/basic/bar/mod.ts | 5 +++++ .../testdata/run/workspaces/basic/bar/some_mod/hello.ts | 1 + cli/tests/testdata/run/workspaces/basic/deno.json | 9 +++++++++ cli/tests/testdata/run/workspaces/basic/foo/bar/hello.ts | 1 + cli/tests/testdata/run/workspaces/basic/foo/deno.json | 8 ++++++++ cli/tests/testdata/run/workspaces/basic/foo/fizz/buzz.ts | 1 + cli/tests/testdata/run/workspaces/basic/foo/mod.ts | 5 +++++ cli/tests/testdata/run/workspaces/basic/main.out | 0 cli/tests/testdata/run/workspaces/basic/main.ts | 5 +++++ 13 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 cli/tests/testdata/run/workspaces/basic/bar/deno.json create mode 100644 cli/tests/testdata/run/workspaces/basic/bar/fizz/buzz.ts create mode 100644 cli/tests/testdata/run/workspaces/basic/bar/mod.ts create mode 100644 cli/tests/testdata/run/workspaces/basic/bar/some_mod/hello.ts create mode 100644 cli/tests/testdata/run/workspaces/basic/deno.json create mode 100644 cli/tests/testdata/run/workspaces/basic/foo/bar/hello.ts create mode 100644 cli/tests/testdata/run/workspaces/basic/foo/deno.json create mode 100644 cli/tests/testdata/run/workspaces/basic/foo/fizz/buzz.ts create mode 100644 cli/tests/testdata/run/workspaces/basic/foo/mod.ts create mode 100644 cli/tests/testdata/run/workspaces/basic/main.out create mode 100644 cli/tests/testdata/run/workspaces/basic/main.ts diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 026f5a688d1b02..a065b129ff6afb 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -850,8 +850,8 @@ impl CliOptions { children_configs, ); if let Some((_import_map_url, import_map)) = maybe_import_map { - eprintln!( - "import map from workspace config {}", + log::debug!( + "Workspace config generated thi import map {}", serde_json::to_string_pretty(&import_map).unwrap() ); return import_map::import_map_from_value( diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index c24464eba4f2be..db23cc10b07925 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -4759,3 +4759,12 @@ itest!(explicit_resource_management { args: "run --quiet --check run/explicit_resource_management/main.ts", output: "run/explicit_resource_management/main.out", }); + +itest!(workspaces { + args: "run -L debug -A --unstable-workspaces workspaces/basic/main.ts", + output: "run/workspaces/basic/main.out", + cwd: Some("run/workspaces/basic/"), + copy_temp_dir: Some("run/workspaces/basic/"), + envs: env_vars_for_npm_tests(), + http_server: true, +}); diff --git a/cli/tests/testdata/run/workspaces/basic/bar/deno.json b/cli/tests/testdata/run/workspaces/basic/bar/deno.json new file mode 100644 index 00000000000000..ef3bfc37af7b45 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/bar/deno.json @@ -0,0 +1,8 @@ +{ + "name": "asdfasdfasdf", + "version": "0.0.0", + "imports": { + "@/": "./", + "secret_mod/": "./some_mod/" + } +} diff --git a/cli/tests/testdata/run/workspaces/basic/bar/fizz/buzz.ts b/cli/tests/testdata/run/workspaces/basic/bar/fizz/buzz.ts new file mode 100644 index 00000000000000..f88d62fcc89d71 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/bar/fizz/buzz.ts @@ -0,0 +1 @@ +export const buzz = "buzz from bar"; diff --git a/cli/tests/testdata/run/workspaces/basic/bar/mod.ts b/cli/tests/testdata/run/workspaces/basic/bar/mod.ts new file mode 100644 index 00000000000000..6f898e38983bba --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/bar/mod.ts @@ -0,0 +1,5 @@ +import { hello } from "secret_mod/hello.ts"; +import { buzz } from "@/fizz/buzz.ts"; + +console.log(hello); +console.log(buzz); diff --git a/cli/tests/testdata/run/workspaces/basic/bar/some_mod/hello.ts b/cli/tests/testdata/run/workspaces/basic/bar/some_mod/hello.ts new file mode 100644 index 00000000000000..1013de8d2ea762 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/bar/some_mod/hello.ts @@ -0,0 +1 @@ +export const hello = "hello from bar"; diff --git a/cli/tests/testdata/run/workspaces/basic/deno.json b/cli/tests/testdata/run/workspaces/basic/deno.json new file mode 100644 index 00000000000000..60c6c56bef7b40 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/deno.json @@ -0,0 +1,9 @@ +{ + "workspaces": [ + "foo", + "bar" + ], + "imports": { + "express": "npm:express@4" + } +} diff --git a/cli/tests/testdata/run/workspaces/basic/foo/bar/hello.ts b/cli/tests/testdata/run/workspaces/basic/foo/bar/hello.ts new file mode 100644 index 00000000000000..c8a7e57c4d2927 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/foo/bar/hello.ts @@ -0,0 +1 @@ +export const hello = "hello from foo"; diff --git a/cli/tests/testdata/run/workspaces/basic/foo/deno.json b/cli/tests/testdata/run/workspaces/basic/foo/deno.json new file mode 100644 index 00000000000000..46d84f06fa1ee0 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/foo/deno.json @@ -0,0 +1,8 @@ +{ + "name": "qwerqwer", + "version": "0.0.0", + "imports": { + "~/": "./", + "foo/": "./bar/" + } +} diff --git a/cli/tests/testdata/run/workspaces/basic/foo/fizz/buzz.ts b/cli/tests/testdata/run/workspaces/basic/foo/fizz/buzz.ts new file mode 100644 index 00000000000000..4e03777d1bb045 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/foo/fizz/buzz.ts @@ -0,0 +1 @@ +export const buzz = "buzz from foo"; diff --git a/cli/tests/testdata/run/workspaces/basic/foo/mod.ts b/cli/tests/testdata/run/workspaces/basic/foo/mod.ts new file mode 100644 index 00000000000000..d7b16dcc05ed51 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/foo/mod.ts @@ -0,0 +1,5 @@ +import { hello } from "foo/hello.ts"; +import { buzz } from "~/fizz/buzz.ts"; + +console.log(hello); +console.log(buzz); diff --git a/cli/tests/testdata/run/workspaces/basic/main.out b/cli/tests/testdata/run/workspaces/basic/main.out new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/cli/tests/testdata/run/workspaces/basic/main.ts b/cli/tests/testdata/run/workspaces/basic/main.ts new file mode 100644 index 00000000000000..9fe2b58a503b9e --- /dev/null +++ b/cli/tests/testdata/run/workspaces/basic/main.ts @@ -0,0 +1,5 @@ +import express from "express"; +import "./basic/foo/mod.ts"; +import "./basic/bar/mod.ts"; + +console.log(express); From 3c9828cfa676bd2d0868b15f5c34a2139d0fdea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 16 Nov 2023 02:12:34 +0100 Subject: [PATCH 22/30] remove temp files --- cli/graph_util.rs | 2 +- try_workspace/bar/bar.js | 16 --------- try_workspace/bar/deno.json | 14 -------- try_workspace/bar/nested/nested.js | 6 ---- try_workspace/deno.json | 15 -------- try_workspace/deno.lock | 58 ------------------------------ try_workspace/foo/deno.json | 14 -------- try_workspace/foo/foo.js | 17 --------- try_workspace/foo/nested/nested.js | 6 ---- try_workspace/test.js | 9 ----- 10 files changed, 1 insertion(+), 156 deletions(-) delete mode 100644 try_workspace/bar/bar.js delete mode 100644 try_workspace/bar/deno.json delete mode 100644 try_workspace/bar/nested/nested.js delete mode 100644 try_workspace/deno.json delete mode 100644 try_workspace/deno.lock delete mode 100644 try_workspace/foo/deno.json delete mode 100644 try_workspace/foo/foo.js delete mode 100644 try_workspace/foo/nested/nested.js delete mode 100644 try_workspace/test.js diff --git a/cli/graph_util.rs b/cli/graph_util.rs index 64de236e072eb6..ce331f78a65f01 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -735,7 +735,7 @@ pub fn workspace_config_to_workspace_members( workspace_config .members .iter() - .map(|m| workspace_member_config_try_into_workspace_member(m)) + .map(workspace_member_config_try_into_workspace_member) .collect() } diff --git a/try_workspace/bar/bar.js b/try_workspace/bar/bar.js deleted file mode 100644 index 0dc955250353d9..00000000000000 --- a/try_workspace/bar/bar.js +++ /dev/null @@ -1,16 +0,0 @@ -import codeBlockWriter from "codeBlockWriter"; -import * as colors from "@std/fmt/colors.ts"; -import { foo } from "foo/foo.js"; - -console.log(">> BAR > codeBlockWriter >"); -console.log(codeBlockWriter); -console.log(); -console.log(">> BAR > @std/fmt/colors >"); -console.log(colors.red("Hello!")); -console.log(); -console.log(">> BAR > foo >"); -console.log(foo); -console.log(); - -export function bar() { -} diff --git a/try_workspace/bar/deno.json b/try_workspace/bar/deno.json deleted file mode 100644 index 2ec5fc329285c2..00000000000000 --- a/try_workspace/bar/deno.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "@foo/bar", - "version": "0.0.1", - "imports": { - "codeBlockWriter": "deno:@foo/code_block_writer", - "@std/fmt/": "deno:/@std/fmt/", - "foo/": "deno:/@foo/foo/" - }, - "scopes": { - "/nested/": { - "fizzbuzz": "deno:fizzbuzz@1" - } - } -} diff --git a/try_workspace/bar/nested/nested.js b/try_workspace/bar/nested/nested.js deleted file mode 100644 index 914072095160ef..00000000000000 --- a/try_workspace/bar/nested/nested.js +++ /dev/null @@ -1,6 +0,0 @@ -import path from "@std/path/mod.ts"; -import puppeteer from "puppeteer"; -import { foo } from "deno:@foo/foo@1"; - -export function bar() { -} diff --git a/try_workspace/deno.json b/try_workspace/deno.json deleted file mode 100644 index eec338ab592b89..00000000000000 --- a/try_workspace/deno.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "workspace": true, - "members": [ - "foo", - "bar" - ], - "imports": { - "dax": "deno:dax" - }, - "scopes": { - "/not_member/": { - "@std/": "deno:@std@0.199.0/" - } - } -} diff --git a/try_workspace/deno.lock b/try_workspace/deno.lock deleted file mode 100644 index b06859d844726b..00000000000000 --- a/try_workspace/deno.lock +++ /dev/null @@ -1,58 +0,0 @@ -{ - "version": "2", - "remote": { - "https://deno-registry-staging.net/@foo/code_block_writer/0.0.1/mod.ts": "2c3448060e47c9d08604c8f40dee34343f553f33edcdfebbf648442be33205e5", - "https://deno-registry-staging.net/@foo/code_block_writer/0.0.1/utils/string_utils.ts": "60cb4ec8bd335bf241ef785ccec51e809d576ff8e8d29da43d2273b69ce2a6ff", - "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/DenoRuntime.ts": "6a7180f0c6e90dcf23ccffc86aa8271c20b1c4f34c570588d08a45880b7e172d", - "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/mod.ts": "01985d2ee7da8d1caee318a9d07664774fbee4e31602bc2bb6bb62c3489555ed", - "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/ts_morph_common.js": "f6ecb9993f9e7a8374921f43a670b369ca9bf337d3e2da979f495b6e29ea75e8", - "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/common/typescript.js": "97e18f192446db6ea3ed8ddc4723ac4a85fd50a85cfee45437b3581d0f2af12c", - "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/mod.ts": "adba9b82f24865d15d2c78ef6074b9a7457011719056c9928c800f130a617c93", - "https://deno-registry-staging.net/@foo/ts_morph/0.1.0/ts_morph.js": "7e11715fbad5d4a7ba8210f93789984ce83de5d5a2e15798af07e8d1d07f8117", - "https://deno-registry-staging.net/@std/assert/0.2.0/_constants.ts": "8a9da298c26750b28b326b297316cdde860bc237533b07e1337c021379e6b2a9", - "https://deno-registry-staging.net/@std/assert/0.2.0/_diff.ts": "76bd3614a0d01cdc601e418974f8135d4f8de5ae754b9b9872c3191f75ceb994", - "https://deno-registry-staging.net/@std/assert/0.2.0/_format.ts": "a69126e8a469009adf4cf2a50af889aca364c349797e63174884a52ff75cf4c7", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_almost_equals.ts": "e15ca1f34d0d5e0afae63b3f5d975cbd18335a132e42b0c747d282f62ad2cd6c", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_array_includes.ts": "6856d7f2c3544bc6e62fb4646dfefa3d1df5ff14744d1bca19f0cbaf3b0d66c9", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_equals.ts": "a55ecd35000d121747abcc2e16d2057e0e650b839aa17c22b21324ba9fdf33f7", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_exists.ts": "407cb6b9fb23a835cd8d5ad804e2e2edbbbf3870e322d53f79e1c7a512e2efd7", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_false.ts": "a9962749f4bf5844e3fa494257f1de73d69e4fe0e82c34d0099287552163a2dc", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_instance_of.ts": "09fd297352a5b5bbb16da2b5e1a0d8c6c44da5447772648622dcc7df7af1ddb8", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_is_error.ts": "cd556cb2e74ddd62a4c72dfc2e317361e9b0844694241faf12e2412b74292133", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_match.ts": "c4083f80600bc190309903c95e397a7c9257ff8b5ae5c7ef91e834704e672e9b", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_not_equals.ts": "9f1acab95bd1f5fc9a1b17b8027d894509a745d91bac1718fdab51dc76831754", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_not_instance_of.ts": "0c14d3dfd9ab7a5276ed8ed0b18c703d79a3d106102077ec437bfe7ed912bd22", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_not_match.ts": "3796a5b0c57a1ce6c1c57883dd4286be13a26f715ea662318ab43a8491a13ab0", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_not_strict_equals.ts": "ca6c6d645e95fbc873d25320efeb8c4c6089a9a5e09f92d7c1c4b6e935c2a6ad", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_object_match.ts": "d8fc2867cfd92eeacf9cea621e10336b666de1874a6767b5ec48988838370b54", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_rejects.ts": "45c59724de2701e3b1f67c391d6c71c392363635aad3f68a1b3408f9efca0057", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_strict_equals.ts": "9b4db65010215734418ae2483865ec133e9b230d978fe00d44d9a4d04a509cec", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_string_includes.ts": "b821d39ebf5cb0200a348863c86d8c4c4b398e02012ce74ad15666fc4b631b0c", - "https://deno-registry-staging.net/@std/assert/0.2.0/assert_throws.ts": "63784e951475cb7bdfd59878cd25a0931e18f6dc32a6077c454b2cd94f4f4bcd", - "https://deno-registry-staging.net/@std/assert/0.2.0/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", - "https://deno-registry-staging.net/@std/assert/0.2.0/equal.ts": "9f1a46d5993966d2596c44e5858eec821859b45f783a5ee2f7a695dfc12d8ece", - "https://deno-registry-staging.net/@std/assert/0.2.0/fail.ts": "c36353d7ae6e1f7933d45f8ea51e358c8c4b67d7e7502028598fe1fea062e278", - "https://deno-registry-staging.net/@std/assert/0.2.0/mod.ts": "08d55a652c22c5da0215054b21085cec25a5da47ce4a6f9de7d9ad36df35bdee", - "https://deno-registry-staging.net/@std/assert/0.2.0/unimplemented.ts": "d56fbeecb1f108331a380f72e3e010a1f161baa6956fd0f7cf3e095ae1a4c75a", - "https://deno-registry-staging.net/@std/assert/0.2.0/unreachable.ts": "4600dc0baf7d9c15a7f7d234f00c23bca8f3eba8b140286aaca7aa998cf9a536", - "https://deno-registry-staging.net/@std/fmt/0.1.0/colors.ts": "a7eecffdf3d1d54db890723b303847b6e0a1ab4b528ba6958b8f2e754cf1b3bc", - "https://deno.land/std@0.181.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462", - "https://deno.land/std@0.181.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", - "https://deno.land/std@0.181.0/fs/_util.ts": "65381f341af1ff7f40198cee15c20f59951ac26e51ddc651c5293e24f9ce6f32", - "https://deno.land/std@0.181.0/fs/ensure_dir.ts": "dc64c4c75c64721d4e3fb681f1382f803ff3d2868f08563ff923fdd20d071c40", - "https://deno.land/std@0.181.0/fs/expand_glob.ts": "e4f56259a0a70fe23f05215b00de3ac5e6ba46646ab2a06ebbe9b010f81c972a", - "https://deno.land/std@0.181.0/fs/walk.ts": "ea95ffa6500c1eda6b365be488c056edc7c883a1db41ef46ec3bf057b1c0fe32", - "https://deno.land/std@0.181.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", - "https://deno.land/std@0.181.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", - "https://deno.land/std@0.181.0/path/_util.ts": "d7abb1e0dea065f427b89156e28cdeb32b045870acdf865833ba808a73b576d0", - "https://deno.land/std@0.181.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", - "https://deno.land/std@0.181.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1", - "https://deno.land/std@0.181.0/path/mod.ts": "bf718f19a4fdd545aee1b06409ca0805bd1b68ecf876605ce632e932fe54510c", - "https://deno.land/std@0.181.0/path/posix.ts": "8b7c67ac338714b30c816079303d0285dd24af6b284f7ad63da5b27372a2c94d", - "https://deno.land/std@0.181.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1", - "https://deno.land/std@0.181.0/path/win32.ts": "d186344e5583bcbf8b18af416d13d82b35a317116e6460a5a3953508c3de5bba", - "https://deno.land/x/code_block_writer@12.0.0/mod.ts": "2c3448060e47c9d08604c8f40dee34343f553f33edcdfebbf648442be33205e5", - "https://deno.land/x/code_block_writer@12.0.0/utils/string_utils.ts": "60cb4ec8bd335bf241ef785ccec51e809d576ff8e8d29da43d2273b69ce2a6ff" - } -} diff --git a/try_workspace/foo/deno.json b/try_workspace/foo/deno.json deleted file mode 100644 index a7d031c4df4c80..00000000000000 --- a/try_workspace/foo/deno.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "@foo/foo", - "version": "0.0.1", - "imports": { - "codeBlockWriter": "deno:@foo/code_block_writer", - "tsMorph": "deno:@foo/ts_morph", - "@std/assert/": "deno:/@std/assert/" - }, - "scopes": { - "/nested/": { - "fizzbuzz": "deno:fizzbuzz@1" - } - } -} diff --git a/try_workspace/foo/foo.js b/try_workspace/foo/foo.js deleted file mode 100644 index 136a268bdc3530..00000000000000 --- a/try_workspace/foo/foo.js +++ /dev/null @@ -1,17 +0,0 @@ -import codeBlockWriter from "codeBlockWriter"; -import * as tsMorph from "tsMorph"; -import * as assert from "@std/assert/mod.ts"; - -console.log(">> FOO > codeBlockWriter >"); -console.log(codeBlockWriter); -console.log(); -console.log(">> FOO > tsMorph >"); -console.log(tsMorph.SetAccessorDeclaration); -console.log(); -console.log(">> FOO > @std/assert >"); -console.log(assert.assertEquals); -console.log(); - -export function foo() { -} -foo.name = "fooFn"; diff --git a/try_workspace/foo/nested/nested.js b/try_workspace/foo/nested/nested.js deleted file mode 100644 index 914072095160ef..00000000000000 --- a/try_workspace/foo/nested/nested.js +++ /dev/null @@ -1,6 +0,0 @@ -import path from "@std/path/mod.ts"; -import puppeteer from "puppeteer"; -import { foo } from "deno:@foo/foo@1"; - -export function bar() { -} diff --git a/try_workspace/test.js b/try_workspace/test.js deleted file mode 100644 index f6b3d6da7ec57c..00000000000000 --- a/try_workspace/test.js +++ /dev/null @@ -1,9 +0,0 @@ -import { foo } from "./foo/foo.js"; -import { bar } from "./bar/bar.js"; - -console.log(">> foo"); -console.log(foo); -console.log(); -console.log(">> bar"); -console.log(bar); -console.log(); From 3d7a082b507791acf07c0df78c44d1cf6980dfbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 16 Nov 2023 13:09:42 +0100 Subject: [PATCH 23/30] fix unstable check --- cli/args/mod.rs | 8 +++++--- cli/tests/integration/run_tests.rs | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cli/args/mod.rs b/cli/args/mod.rs index a065b129ff6afb..51f60ebd365c1d 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -662,9 +662,11 @@ impl CliOptions { }; // TODO(bartlomieju): remove in v1.39 or v1.40. - if maybe_workspace_config.is_some() && !flags.unstable_workspaces { - eprintln!("Use of unstable 'workspaces' feature. The --unstable-workspaces flags must be provided."); - std::process::exit(70); + if let Some(wsconfig) = &maybe_workspace_config { + if !wsconfig.members.is_empty() && !flags.unstable_workspaces { + eprintln!("Use of unstable 'workspaces' feature. The --unstable-workspaces flags must be provided."); + std::process::exit(70); + } } if let Some(env_file_name) = &flags.env_file { diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index db23cc10b07925..c103ffad2437a5 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -4764,7 +4764,6 @@ itest!(workspaces { args: "run -L debug -A --unstable-workspaces workspaces/basic/main.ts", output: "run/workspaces/basic/main.out", cwd: Some("run/workspaces/basic/"), - copy_temp_dir: Some("run/workspaces/basic/"), envs: env_vars_for_npm_tests(), http_server: true, }); From 6b46604d546bf42e0ee14b2f004fc47411a54ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 16 Nov 2023 13:13:05 +0100 Subject: [PATCH 24/30] fix tests --- cli/tests/integration/run_tests.rs | 3 ++- .../testdata/run/workspaces/basic/deno.json | 2 +- .../testdata/run/workspaces/basic/main.out | 21 +++++++++++++++++++ .../testdata/run/workspaces/basic/main.ts | 8 +++---- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index c103ffad2437a5..a2c8a8c3ed7ff9 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -4761,9 +4761,10 @@ itest!(explicit_resource_management { }); itest!(workspaces { - args: "run -L debug -A --unstable-workspaces workspaces/basic/main.ts", + args: "run -L debug -A --unstable-workspaces main.ts", output: "run/workspaces/basic/main.out", cwd: Some("run/workspaces/basic/"), + copy_temp_dir: Some("run/workspaces/basic/"), envs: env_vars_for_npm_tests(), http_server: true, }); diff --git a/cli/tests/testdata/run/workspaces/basic/deno.json b/cli/tests/testdata/run/workspaces/basic/deno.json index 60c6c56bef7b40..b971c4f3d6d7f0 100644 --- a/cli/tests/testdata/run/workspaces/basic/deno.json +++ b/cli/tests/testdata/run/workspaces/basic/deno.json @@ -4,6 +4,6 @@ "bar" ], "imports": { - "express": "npm:express@4" + "chalk": "npm:chalk" } } diff --git a/cli/tests/testdata/run/workspaces/basic/main.out b/cli/tests/testdata/run/workspaces/basic/main.out index e69de29bb2d1d6..821ffe9706027c 100644 --- a/cli/tests/testdata/run/workspaces/basic/main.out +++ b/cli/tests/testdata/run/workspaces/basic/main.out @@ -0,0 +1,21 @@ +[WILDCARD]Workspace config generated thi import map { + "imports": { + "chalk": "npm:chalk" + }, + "scopes": { + "./foo/": { + "~/": "./foo/", + "foo/": "./foo/bar/" + }, + "./bar/": { + "@/": "./bar/", + "secret_mod/": "./bar/some_mod/" + } + } +} +[WILDCARD] +hello from foo +buzz from foo +hello from bar +buzz from bar +[Function: chalk][WILDCARD] \ No newline at end of file diff --git a/cli/tests/testdata/run/workspaces/basic/main.ts b/cli/tests/testdata/run/workspaces/basic/main.ts index 9fe2b58a503b9e..380c976191fb3f 100644 --- a/cli/tests/testdata/run/workspaces/basic/main.ts +++ b/cli/tests/testdata/run/workspaces/basic/main.ts @@ -1,5 +1,5 @@ -import express from "express"; -import "./basic/foo/mod.ts"; -import "./basic/bar/mod.ts"; +import chalk from "chalk"; +import "./foo/mod.ts"; +import "./bar/mod.ts"; -console.log(express); +console.log(chalk); From 67d9ffdb2b148fe7a942defb2e03828373cc0db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Thu, 16 Nov 2023 23:59:50 +0100 Subject: [PATCH 25/30] bump crates --- Cargo.lock | 38 ++++++++++++-------------------------- cli/Cargo.toml | 8 ++++---- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c42659be38bfc8..fea6de6d05c688 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -919,7 +919,7 @@ dependencies = [ "hex", "http", "hyper 0.14.27", - "import_map 0.17.0", + "import_map", "indexmap 2.0.2", "jsonc-parser", "junction", @@ -1061,9 +1061,9 @@ dependencies = [ [[package]] name = "deno_config" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26bbf5c11a85bd9e7795c5daf7fc26203b64a9ea567c732cdd474d245f267a85" +checksum = "2e93c12bd2b01fa7987c45438471c1f1e927d554878446909bad2129bcde9a1a" dependencies = [ "anyhow", "indexmap 2.0.2", @@ -1155,9 +1155,9 @@ dependencies = [ [[package]] name = "deno_doc" -version = "0.73.1" +version = "0.73.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0caa44ce342fb69b449ae750f8bf66dea6730ce7a00cc4449766d47b8626faf9" +checksum = "d2854646e9edfea295844b392ab64b7f4fb7b25b608c82d40a2c2d39655b71db" dependencies = [ "anyhow", "cfg-if", @@ -1166,7 +1166,7 @@ dependencies = [ "deno_graph", "futures", "html-escape", - "import_map 0.15.0", + "import_map", "indexmap 2.0.2", "lazy_static", "regex", @@ -1178,9 +1178,9 @@ dependencies = [ [[package]] name = "deno_emit" -version = "0.31.3" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193d738bbe06f950a7be3f852f0d940839bba6f4c2cb1d2019eb0d6c727f7b03" +checksum = "f8910a6da498d0eb2a28d9ea613c47291a86377a85b3771dd90d624004814aeb" dependencies = [ "anyhow", "base64 0.13.1", @@ -1188,7 +1188,7 @@ dependencies = [ "deno_graph", "escape8259", "futures", - "import_map 0.15.0", + "import_map", "parking_lot 0.11.2", "url", ] @@ -1245,9 +1245,9 @@ dependencies = [ [[package]] name = "deno_graph" -version = "0.61.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd6700dd3cec2a7763760168c952cc632246a1ae0fc52d6f297e2802b994e69" +checksum = "076c0b611c10901456b78c837408b9c40fe0c3602e767307d986f46f0cc56b51" dependencies = [ "anyhow", "async-trait", @@ -1255,7 +1255,7 @@ dependencies = [ "deno_ast", "deno_semver", "futures", - "import_map 0.15.0", + "import_map", "indexmap 2.0.2", "monch", "once_cell", @@ -2862,20 +2862,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" -[[package]] -name = "import_map" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632089ec08bd62e807311104122fb26d5c911ab172e2b9864be154a575979e29" -dependencies = [ - "cfg-if", - "indexmap 1.9.3", - "log", - "serde", - "serde_json", - "url", -] - [[package]] name = "import_map" version = "0.17.0" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 26e2b8935d25cf..f9638c6bbd3418 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -51,11 +51,11 @@ winres.workspace = true [dependencies] deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "dep_graph", "module_specifier", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_cache_dir = "=0.6.1" -deno_config = "=0.6.2" +deno_config = "=0.6.3" deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } -deno_doc = { version = "=0.73.1", features = ["html"] } -deno_emit = "=0.31.3" -deno_graph = "=0.61.0" +deno_doc = { version = "=0.73.2", features = ["html"] } +deno_emit = "=0.31.4" +deno_graph = "=0.61.1" deno_lint = { version = "=0.52.2", features = ["docs"] } deno_lockfile.workspace = true deno_npm = "0.15.2" From f2e455eaab36ac50c87171be225af753c4a3ab43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Fri, 17 Nov 2023 00:00:52 +0100 Subject: [PATCH 26/30] typo --- cli/args/mod.rs | 2 +- cli/tests/testdata/run/workspaces/basic/main.out | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 51f60ebd365c1d..dd8de2a6f1916a 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -853,7 +853,7 @@ impl CliOptions { ); if let Some((_import_map_url, import_map)) = maybe_import_map { log::debug!( - "Workspace config generated thi import map {}", + "Workspace config generated this import map {}", serde_json::to_string_pretty(&import_map).unwrap() ); return import_map::import_map_from_value( diff --git a/cli/tests/testdata/run/workspaces/basic/main.out b/cli/tests/testdata/run/workspaces/basic/main.out index 821ffe9706027c..77e0de4d161cc1 100644 --- a/cli/tests/testdata/run/workspaces/basic/main.out +++ b/cli/tests/testdata/run/workspaces/basic/main.out @@ -1,4 +1,4 @@ -[WILDCARD]Workspace config generated thi import map { +[WILDCARD]Workspace config generated this import map { "imports": { "chalk": "npm:chalk" }, From b61af2384ce37a38b8ef7d0e49712cb08a74048e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Fri, 17 Nov 2023 00:05:34 +0100 Subject: [PATCH 27/30] add context to an error --- cli/graph_util.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cli/graph_util.rs b/cli/graph_util.rs index ce331f78a65f01..727037748e9035 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -19,6 +19,7 @@ use crate::util::sync::TaskQueue; use crate::util::sync::TaskQueuePermit; use deno_core::anyhow::bail; +use deno_core::anyhow::Context; use deno_core::error::custom_error; use deno_core::error::AnyError; use deno_core::parking_lot::Mutex; @@ -735,7 +736,17 @@ pub fn workspace_config_to_workspace_members( workspace_config .members .iter() - .map(workspace_member_config_try_into_workspace_member) + .map(|member| { + workspace_member_config_try_into_workspace_member(member).with_context( + || { + format!( + "Failed to resolve configuration for '{}' workspace member at '{}'", + member.member_name, + member.config_file.specifier.as_str() + ) + }, + ) + }) .collect() } From 44d13dffaddd7e1c8b47e023285cc36dc5ef4c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Fri, 17 Nov 2023 00:14:28 +0100 Subject: [PATCH 28/30] Add more tests --- cli/tests/integration/run_tests.rs | 21 ++++++++++++++++++- .../member_outside_root_dir/deno.json | 9 ++++++++ .../member_outside_root_dir/foo/bar/hello.ts | 1 + .../member_outside_root_dir/foo/deno.json | 8 +++++++ .../member_outside_root_dir/foo/fizz/buzz.ts | 1 + .../member_outside_root_dir/foo/mod.ts | 5 +++++ .../member_outside_root_dir/main.out | 1 + .../member_outside_root_dir/main.ts | 4 ++++ .../workspaces/nested_member/bar/deno.json | 8 +++++++ .../workspaces/nested_member/bar/fizz/buzz.ts | 1 + .../run/workspaces/nested_member/bar/mod.ts | 5 +++++ .../nested_member/bar/some_mod/hello.ts | 1 + .../run/workspaces/nested_member/deno.json | 6 ++++++ .../nested_member/foo/bar/deno.json | 7 +++++++ .../workspaces/nested_member/foo/bar/hello.ts | 3 +++ .../workspaces/nested_member/foo/deno.json | 7 +++++++ .../workspaces/nested_member/foo/fizz/buzz.ts | 1 + .../run/workspaces/nested_member/foo/mod.ts | 3 +++ .../run/workspaces/nested_member/main.out | 14 +++++++++++++ .../run/workspaces/nested_member/main.ts | 4 ++++ 20 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 cli/tests/testdata/run/workspaces/member_outside_root_dir/deno.json create mode 100644 cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/bar/hello.ts create mode 100644 cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/deno.json create mode 100644 cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/fizz/buzz.ts create mode 100644 cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/mod.ts create mode 100644 cli/tests/testdata/run/workspaces/member_outside_root_dir/main.out create mode 100644 cli/tests/testdata/run/workspaces/member_outside_root_dir/main.ts create mode 100644 cli/tests/testdata/run/workspaces/nested_member/bar/deno.json create mode 100644 cli/tests/testdata/run/workspaces/nested_member/bar/fizz/buzz.ts create mode 100644 cli/tests/testdata/run/workspaces/nested_member/bar/mod.ts create mode 100644 cli/tests/testdata/run/workspaces/nested_member/bar/some_mod/hello.ts create mode 100644 cli/tests/testdata/run/workspaces/nested_member/deno.json create mode 100644 cli/tests/testdata/run/workspaces/nested_member/foo/bar/deno.json create mode 100644 cli/tests/testdata/run/workspaces/nested_member/foo/bar/hello.ts create mode 100644 cli/tests/testdata/run/workspaces/nested_member/foo/deno.json create mode 100644 cli/tests/testdata/run/workspaces/nested_member/foo/fizz/buzz.ts create mode 100644 cli/tests/testdata/run/workspaces/nested_member/foo/mod.ts create mode 100644 cli/tests/testdata/run/workspaces/nested_member/main.out create mode 100644 cli/tests/testdata/run/workspaces/nested_member/main.ts diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index a2c8a8c3ed7ff9..abf47861e7b908 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -4760,7 +4760,7 @@ itest!(explicit_resource_management { output: "run/explicit_resource_management/main.out", }); -itest!(workspaces { +itest!(workspaces_basic { args: "run -L debug -A --unstable-workspaces main.ts", output: "run/workspaces/basic/main.out", cwd: Some("run/workspaces/basic/"), @@ -4768,3 +4768,22 @@ itest!(workspaces { envs: env_vars_for_npm_tests(), http_server: true, }); + +itest!(workspaces_member_outside_root_dir { + args: "run -A --unstable-workspaces main.ts", + output: "run/workspaces/member_outside_root_dir/main.out", + cwd: Some("run/workspaces/member_outside_root_dir/"), + copy_temp_dir: Some("run/workspaces/member_outside_root_dir/"), + envs: env_vars_for_npm_tests(), + http_server: true, + exit_code: 1, +}); + +itest!(workspaces_nested_member { + args: "run -L debug -A --unstable-workspaces main.ts", + output: "run/workspaces/nested_member/main.out", + cwd: Some("run/workspaces/nested_member/"), + copy_temp_dir: Some("run/workspaces/nested_member/"), + envs: env_vars_for_npm_tests(), + http_server: true, +}); diff --git a/cli/tests/testdata/run/workspaces/member_outside_root_dir/deno.json b/cli/tests/testdata/run/workspaces/member_outside_root_dir/deno.json new file mode 100644 index 00000000000000..25feefad8b874c --- /dev/null +++ b/cli/tests/testdata/run/workspaces/member_outside_root_dir/deno.json @@ -0,0 +1,9 @@ +{ + "workspaces": [ + "foo", + "../other_folder" + ], + "imports": { + "chalk": "npm:chalk" + } +} diff --git a/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/bar/hello.ts b/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/bar/hello.ts new file mode 100644 index 00000000000000..c8a7e57c4d2927 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/bar/hello.ts @@ -0,0 +1 @@ +export const hello = "hello from foo"; diff --git a/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/deno.json b/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/deno.json new file mode 100644 index 00000000000000..46d84f06fa1ee0 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/deno.json @@ -0,0 +1,8 @@ +{ + "name": "qwerqwer", + "version": "0.0.0", + "imports": { + "~/": "./", + "foo/": "./bar/" + } +} diff --git a/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/fizz/buzz.ts b/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/fizz/buzz.ts new file mode 100644 index 00000000000000..4e03777d1bb045 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/fizz/buzz.ts @@ -0,0 +1 @@ +export const buzz = "buzz from foo"; diff --git a/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/mod.ts b/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/mod.ts new file mode 100644 index 00000000000000..d7b16dcc05ed51 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/member_outside_root_dir/foo/mod.ts @@ -0,0 +1,5 @@ +import { hello } from "foo/hello.ts"; +import { buzz } from "~/fizz/buzz.ts"; + +console.log(hello); +console.log(buzz); diff --git a/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.out b/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.out new file mode 100644 index 00000000000000..3e3f4bf95c4efa --- /dev/null +++ b/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.out @@ -0,0 +1 @@ +error: Workspace member '../other_folder' has no deno.json file[WILDCARD] \ No newline at end of file diff --git a/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.ts b/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.ts new file mode 100644 index 00000000000000..182fd85177a613 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.ts @@ -0,0 +1,4 @@ +import chalk from "chalk"; +import "./foo/mod.ts"; + +console.log(chalk); diff --git a/cli/tests/testdata/run/workspaces/nested_member/bar/deno.json b/cli/tests/testdata/run/workspaces/nested_member/bar/deno.json new file mode 100644 index 00000000000000..ef3bfc37af7b45 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/bar/deno.json @@ -0,0 +1,8 @@ +{ + "name": "asdfasdfasdf", + "version": "0.0.0", + "imports": { + "@/": "./", + "secret_mod/": "./some_mod/" + } +} diff --git a/cli/tests/testdata/run/workspaces/nested_member/bar/fizz/buzz.ts b/cli/tests/testdata/run/workspaces/nested_member/bar/fizz/buzz.ts new file mode 100644 index 00000000000000..f88d62fcc89d71 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/bar/fizz/buzz.ts @@ -0,0 +1 @@ +export const buzz = "buzz from bar"; diff --git a/cli/tests/testdata/run/workspaces/nested_member/bar/mod.ts b/cli/tests/testdata/run/workspaces/nested_member/bar/mod.ts new file mode 100644 index 00000000000000..6f898e38983bba --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/bar/mod.ts @@ -0,0 +1,5 @@ +import { hello } from "secret_mod/hello.ts"; +import { buzz } from "@/fizz/buzz.ts"; + +console.log(hello); +console.log(buzz); diff --git a/cli/tests/testdata/run/workspaces/nested_member/bar/some_mod/hello.ts b/cli/tests/testdata/run/workspaces/nested_member/bar/some_mod/hello.ts new file mode 100644 index 00000000000000..1013de8d2ea762 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/bar/some_mod/hello.ts @@ -0,0 +1 @@ +export const hello = "hello from bar"; diff --git a/cli/tests/testdata/run/workspaces/nested_member/deno.json b/cli/tests/testdata/run/workspaces/nested_member/deno.json new file mode 100644 index 00000000000000..6d9c09d4dde2e8 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/deno.json @@ -0,0 +1,6 @@ +{ + "workspaces": [ + "foo", + "foo/bar" + ] +} diff --git a/cli/tests/testdata/run/workspaces/nested_member/foo/bar/deno.json b/cli/tests/testdata/run/workspaces/nested_member/foo/bar/deno.json new file mode 100644 index 00000000000000..d40328b367b98e --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/foo/bar/deno.json @@ -0,0 +1,7 @@ +{ + "name": "bar", + "version": "0.0.0", + "imports": { + "chalk": "npm:chalk" + } +} diff --git a/cli/tests/testdata/run/workspaces/nested_member/foo/bar/hello.ts b/cli/tests/testdata/run/workspaces/nested_member/foo/bar/hello.ts new file mode 100644 index 00000000000000..9c10231536d47f --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/foo/bar/hello.ts @@ -0,0 +1,3 @@ +import chalk from "chalk"; + +export default chalk; diff --git a/cli/tests/testdata/run/workspaces/nested_member/foo/deno.json b/cli/tests/testdata/run/workspaces/nested_member/foo/deno.json new file mode 100644 index 00000000000000..68e053b020e41c --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/foo/deno.json @@ -0,0 +1,7 @@ +{ + "name": "qwerqwer", + "version": "0.0.0", + "imports": { + "~/": "./" + } +} diff --git a/cli/tests/testdata/run/workspaces/nested_member/foo/fizz/buzz.ts b/cli/tests/testdata/run/workspaces/nested_member/foo/fizz/buzz.ts new file mode 100644 index 00000000000000..4e03777d1bb045 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/foo/fizz/buzz.ts @@ -0,0 +1 @@ +export const buzz = "buzz from foo"; diff --git a/cli/tests/testdata/run/workspaces/nested_member/foo/mod.ts b/cli/tests/testdata/run/workspaces/nested_member/foo/mod.ts new file mode 100644 index 00000000000000..b9d4d3c04b7c6c --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/foo/mod.ts @@ -0,0 +1,3 @@ +import { buzz } from "~/fizz/buzz.ts"; + +console.log(buzz); diff --git a/cli/tests/testdata/run/workspaces/nested_member/main.out b/cli/tests/testdata/run/workspaces/nested_member/main.out new file mode 100644 index 00000000000000..e58af738a3cb66 --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/main.out @@ -0,0 +1,14 @@ +[WILDCARD]Workspace config generated this import map { + "scopes": { + "./foo/": { + "~/": "./foo/" + }, + "./foo/bar/": { + "chalk": "npm:chalk" + } + } +} +[WILDCARD] +buzz from foo +[WILDCARD] +[Function: chalk][WILDCARD] \ No newline at end of file diff --git a/cli/tests/testdata/run/workspaces/nested_member/main.ts b/cli/tests/testdata/run/workspaces/nested_member/main.ts new file mode 100644 index 00000000000000..2bf53f7c2c623b --- /dev/null +++ b/cli/tests/testdata/run/workspaces/nested_member/main.ts @@ -0,0 +1,4 @@ +import "./foo/mod.ts"; +import chalk from "./foo/bar/hello.ts"; + +console.log(chalk); From a571a1616c9153e491255cf84566544a7ba62cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Fri, 17 Nov 2023 00:52:05 +0100 Subject: [PATCH 29/30] update tests --- Cargo.lock | 2 -- Cargo.toml | 3 +++ cli/tests/integration/run_tests.rs | 3 ++- .../workspaces/member_outside_root_dir/main.out | 2 +- .../run/workspaces/nested_member/main.out | 15 +-------------- 5 files changed, 7 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fea6de6d05c688..e685f6697075d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1062,8 +1062,6 @@ dependencies = [ [[package]] name = "deno_config" version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e93c12bd2b01fa7987c45438471c1f1e927d554878446909bad2129bcde9a1a" dependencies = [ "anyhow", "indexmap 2.0.2", diff --git a/Cargo.toml b/Cargo.toml index c9f59745c161e0..649d370c76efc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -337,3 +337,6 @@ opt-level = 3 opt-level = 3 [profile.release.package.base64-simd] opt-level = 3 + +[patch.crates-io] +deno_config = { path = "../deno_config" } diff --git a/cli/tests/integration/run_tests.rs b/cli/tests/integration/run_tests.rs index abf47861e7b908..306d4df67fe62a 100644 --- a/cli/tests/integration/run_tests.rs +++ b/cli/tests/integration/run_tests.rs @@ -4780,10 +4780,11 @@ itest!(workspaces_member_outside_root_dir { }); itest!(workspaces_nested_member { - args: "run -L debug -A --unstable-workspaces main.ts", + args: "run -A --unstable-workspaces main.ts", output: "run/workspaces/nested_member/main.out", cwd: Some("run/workspaces/nested_member/"), copy_temp_dir: Some("run/workspaces/nested_member/"), envs: env_vars_for_npm_tests(), http_server: true, + exit_code: 1, }); diff --git a/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.out b/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.out index 3e3f4bf95c4efa..205d95aead30e9 100644 --- a/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.out +++ b/cli/tests/testdata/run/workspaces/member_outside_root_dir/main.out @@ -1 +1 @@ -error: Workspace member '../other_folder' has no deno.json file[WILDCARD] \ No newline at end of file +error: Workspace member '../other_folder' is outside root configuration directory[WILDCARD] \ No newline at end of file diff --git a/cli/tests/testdata/run/workspaces/nested_member/main.out b/cli/tests/testdata/run/workspaces/nested_member/main.out index e58af738a3cb66..98598a30654095 100644 --- a/cli/tests/testdata/run/workspaces/nested_member/main.out +++ b/cli/tests/testdata/run/workspaces/nested_member/main.out @@ -1,14 +1 @@ -[WILDCARD]Workspace config generated this import map { - "scopes": { - "./foo/": { - "~/": "./foo/" - }, - "./foo/bar/": { - "chalk": "npm:chalk" - } - } -} -[WILDCARD] -buzz from foo -[WILDCARD] -[Function: chalk][WILDCARD] \ No newline at end of file +error: Workspace member 'foo/bar' is nested within other workspace member 'foo' From 766af202ac41808725b9769b1339782f52ff55be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Fri, 17 Nov 2023 01:29:54 +0100 Subject: [PATCH 30/30] bump deno_config --- Cargo.lock | 4 +++- Cargo.toml | 3 --- cli/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e685f6697075d4..11775d27486852 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1061,7 +1061,9 @@ dependencies = [ [[package]] name = "deno_config" -version = "0.6.3" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c6b9137fcc5c6f81d12214fc31cdddf2c64d0667a5458803e081ddd856d5b6" dependencies = [ "anyhow", "indexmap 2.0.2", diff --git a/Cargo.toml b/Cargo.toml index 649d370c76efc6..c9f59745c161e0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -337,6 +337,3 @@ opt-level = 3 opt-level = 3 [profile.release.package.base64-simd] opt-level = 3 - -[patch.crates-io] -deno_config = { path = "../deno_config" } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index f9638c6bbd3418..37250f32874837 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -51,7 +51,7 @@ winres.workspace = true [dependencies] deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "dep_graph", "module_specifier", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_cache_dir = "=0.6.1" -deno_config = "=0.6.3" +deno_config = "=0.6.4" deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } deno_doc = { version = "=0.73.2", features = ["html"] } deno_emit = "=0.31.4"