diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | crates/project_model/src/cargo_workspace.rs | 20 | ||||
-rw-r--r-- | crates/project_model/src/lib.rs | 606 | ||||
-rw-r--r-- | crates/project_model/src/workspace.rs | 590 | ||||
-rw-r--r-- | crates/rust-analyzer/src/cli/load_cargo.rs | 1 | ||||
-rw-r--r-- | crates/rust-analyzer/src/config.rs | 15 | ||||
-rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 22 | ||||
-rw-r--r-- | crates/rust-analyzer/src/lsp_ext.rs | 14 | ||||
-rw-r--r-- | crates/rust-analyzer/src/main_loop.rs | 1 | ||||
-rw-r--r-- | crates/rust-analyzer/src/reload.rs | 7 | ||||
-rw-r--r-- | crates/rust-analyzer/tests/rust-analyzer/support.rs | 8 | ||||
-rw-r--r-- | docs/dev/lsp-extensions.md | 29 | ||||
-rw-r--r-- | editors/code/package-lock.json | 2764 | ||||
-rw-r--r-- | editors/code/package.json | 19 | ||||
-rw-r--r-- | editors/code/src/commands.ts | 21 | ||||
-rw-r--r-- | editors/code/src/lsp_ext.ts | 6 | ||||
-rw-r--r-- | editors/code/src/main.ts | 1 | ||||
-rw-r--r-- | xtask/src/install.rs | 2 |
18 files changed, 734 insertions, 3393 deletions
diff --git a/.gitignore b/.gitignore index b205bf3fb..7e097c015 100644 --- a/.gitignore +++ b/.gitignore | |||
@@ -10,3 +10,4 @@ crates/*/target | |||
10 | generated_assists.adoc | 10 | generated_assists.adoc |
11 | generated_features.adoc | 11 | generated_features.adoc |
12 | generated_diagnostic.adoc | 12 | generated_diagnostic.adoc |
13 | .DS_Store | ||
diff --git a/crates/project_model/src/cargo_workspace.rs b/crates/project_model/src/cargo_workspace.rs index 608a031d4..540b57ae4 100644 --- a/crates/project_model/src/cargo_workspace.rs +++ b/crates/project_model/src/cargo_workspace.rs | |||
@@ -65,6 +65,10 @@ pub struct CargoConfig { | |||
65 | /// rustc target | 65 | /// rustc target |
66 | pub target: Option<String>, | 66 | pub target: Option<String>, |
67 | 67 | ||
68 | /// Don't load sysroot crates (`std`, `core` & friends). Might be useful | ||
69 | /// when debugging isolated issues. | ||
70 | pub no_sysroot: bool, | ||
71 | |||
68 | /// rustc private crate source | 72 | /// rustc private crate source |
69 | pub rustc_source: Option<AbsPathBuf>, | 73 | pub rustc_source: Option<AbsPathBuf>, |
70 | } | 74 | } |
@@ -140,27 +144,27 @@ impl PackageData { | |||
140 | impl CargoWorkspace { | 144 | impl CargoWorkspace { |
141 | pub fn from_cargo_metadata( | 145 | pub fn from_cargo_metadata( |
142 | cargo_toml: &AbsPath, | 146 | cargo_toml: &AbsPath, |
143 | cargo_features: &CargoConfig, | 147 | config: &CargoConfig, |
144 | ) -> Result<CargoWorkspace> { | 148 | ) -> Result<CargoWorkspace> { |
145 | let mut meta = MetadataCommand::new(); | 149 | let mut meta = MetadataCommand::new(); |
146 | meta.cargo_path(toolchain::cargo()); | 150 | meta.cargo_path(toolchain::cargo()); |
147 | meta.manifest_path(cargo_toml.to_path_buf()); | 151 | meta.manifest_path(cargo_toml.to_path_buf()); |
148 | if cargo_features.all_features { | 152 | if config.all_features { |
149 | meta.features(CargoOpt::AllFeatures); | 153 | meta.features(CargoOpt::AllFeatures); |
150 | } else { | 154 | } else { |
151 | if cargo_features.no_default_features { | 155 | if config.no_default_features { |
152 | // FIXME: `NoDefaultFeatures` is mutual exclusive with `SomeFeatures` | 156 | // FIXME: `NoDefaultFeatures` is mutual exclusive with `SomeFeatures` |
153 | // https://github.com/oli-obk/cargo_metadata/issues/79 | 157 | // https://github.com/oli-obk/cargo_metadata/issues/79 |
154 | meta.features(CargoOpt::NoDefaultFeatures); | 158 | meta.features(CargoOpt::NoDefaultFeatures); |
155 | } | 159 | } |
156 | if !cargo_features.features.is_empty() { | 160 | if !config.features.is_empty() { |
157 | meta.features(CargoOpt::SomeFeatures(cargo_features.features.clone())); | 161 | meta.features(CargoOpt::SomeFeatures(config.features.clone())); |
158 | } | 162 | } |
159 | } | 163 | } |
160 | if let Some(parent) = cargo_toml.parent() { | 164 | if let Some(parent) = cargo_toml.parent() { |
161 | meta.current_dir(parent.to_path_buf()); | 165 | meta.current_dir(parent.to_path_buf()); |
162 | } | 166 | } |
163 | if let Some(target) = cargo_features.target.as_ref() { | 167 | if let Some(target) = config.target.as_ref() { |
164 | meta.other_options(vec![String::from("--filter-platform"), target.clone()]); | 168 | meta.other_options(vec![String::from("--filter-platform"), target.clone()]); |
165 | } | 169 | } |
166 | let mut meta = meta.exec().with_context(|| { | 170 | let mut meta = meta.exec().with_context(|| { |
@@ -170,8 +174,8 @@ impl CargoWorkspace { | |||
170 | let mut out_dir_by_id = FxHashMap::default(); | 174 | let mut out_dir_by_id = FxHashMap::default(); |
171 | let mut cfgs = FxHashMap::default(); | 175 | let mut cfgs = FxHashMap::default(); |
172 | let mut proc_macro_dylib_paths = FxHashMap::default(); | 176 | let mut proc_macro_dylib_paths = FxHashMap::default(); |
173 | if cargo_features.load_out_dirs_from_check { | 177 | if config.load_out_dirs_from_check { |
174 | let resources = load_extern_resources(cargo_toml, cargo_features)?; | 178 | let resources = load_extern_resources(cargo_toml, config)?; |
175 | out_dir_by_id = resources.out_dirs; | 179 | out_dir_by_id = resources.out_dirs; |
176 | cfgs = resources.cfgs; | 180 | cfgs = resources.cfgs; |
177 | proc_macro_dylib_paths = resources.proc_dylib_paths; | 181 | proc_macro_dylib_paths = resources.proc_dylib_paths; |
diff --git a/crates/project_model/src/lib.rs b/crates/project_model/src/lib.rs index 4531b1928..24aa9b8fa 100644 --- a/crates/project_model/src/lib.rs +++ b/crates/project_model/src/lib.rs | |||
@@ -4,74 +4,27 @@ mod cargo_workspace; | |||
4 | mod project_json; | 4 | mod project_json; |
5 | mod sysroot; | 5 | mod sysroot; |
6 | mod cfg_flag; | 6 | mod cfg_flag; |
7 | mod workspace; | ||
7 | 8 | ||
8 | use std::{ | 9 | use std::{ |
9 | fmt, | 10 | fs::{read_dir, ReadDir}, |
10 | fs::{self, read_dir, ReadDir}, | ||
11 | io, | 11 | io, |
12 | path::Component, | ||
13 | process::Command, | 12 | process::Command, |
14 | }; | 13 | }; |
15 | 14 | ||
16 | use anyhow::{bail, Context, Result}; | 15 | use anyhow::{bail, Context, Result}; |
17 | use base_db::{CrateDisplayName, CrateGraph, CrateId, CrateName, Edition, Env, FileId}; | ||
18 | use cfg::CfgOptions; | ||
19 | use paths::{AbsPath, AbsPathBuf}; | 16 | use paths::{AbsPath, AbsPathBuf}; |
20 | use rustc_hash::{FxHashMap, FxHashSet}; | 17 | use rustc_hash::FxHashSet; |
21 | |||
22 | use crate::cfg_flag::CfgFlag; | ||
23 | 18 | ||
24 | pub use crate::{ | 19 | pub use crate::{ |
25 | cargo_workspace::{CargoConfig, CargoWorkspace, Package, Target, TargetKind}, | 20 | cargo_workspace::{CargoConfig, CargoWorkspace, Package, Target, TargetKind}, |
26 | project_json::{ProjectJson, ProjectJsonData}, | 21 | project_json::{ProjectJson, ProjectJsonData}, |
27 | sysroot::Sysroot, | 22 | sysroot::Sysroot, |
23 | workspace::{PackageRoot, ProjectWorkspace}, | ||
28 | }; | 24 | }; |
29 | 25 | ||
30 | pub use proc_macro_api::ProcMacroClient; | 26 | pub use proc_macro_api::ProcMacroClient; |
31 | 27 | ||
32 | #[derive(Clone, Eq, PartialEq)] | ||
33 | pub enum ProjectWorkspace { | ||
34 | /// Project workspace was discovered by running `cargo metadata` and `rustc --print sysroot`. | ||
35 | Cargo { cargo: CargoWorkspace, sysroot: Sysroot, rustc: Option<CargoWorkspace> }, | ||
36 | /// Project workspace was manually specified using a `rust-project.json` file. | ||
37 | Json { project: ProjectJson, sysroot: Option<Sysroot> }, | ||
38 | } | ||
39 | |||
40 | impl fmt::Debug for ProjectWorkspace { | ||
41 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | ||
42 | match self { | ||
43 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } => f | ||
44 | .debug_struct("Cargo") | ||
45 | .field("n_packages", &cargo.packages().len()) | ||
46 | .field("n_sysroot_crates", &sysroot.crates().len()) | ||
47 | .field( | ||
48 | "n_rustc_compiler_crates", | ||
49 | &rustc.as_ref().map_or(0, |rc| rc.packages().len()), | ||
50 | ) | ||
51 | .finish(), | ||
52 | ProjectWorkspace::Json { project, sysroot } => { | ||
53 | let mut debug_struct = f.debug_struct("Json"); | ||
54 | debug_struct.field("n_crates", &project.n_crates()); | ||
55 | if let Some(sysroot) = sysroot { | ||
56 | debug_struct.field("n_sysroot_crates", &sysroot.crates().len()); | ||
57 | } | ||
58 | debug_struct.finish() | ||
59 | } | ||
60 | } | ||
61 | } | ||
62 | } | ||
63 | |||
64 | /// `PackageRoot` describes a package root folder. | ||
65 | /// Which may be an external dependency, or a member of | ||
66 | /// the current workspace. | ||
67 | #[derive(Debug, Clone, Eq, PartialEq, Hash)] | ||
68 | pub struct PackageRoot { | ||
69 | /// Is a member of the current workspace | ||
70 | pub is_member: bool, | ||
71 | pub include: Vec<AbsPathBuf>, | ||
72 | pub exclude: Vec<AbsPathBuf>, | ||
73 | } | ||
74 | |||
75 | #[derive(Debug, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)] | 28 | #[derive(Debug, Clone, PartialEq, Eq, Hash, Ord, PartialOrd)] |
76 | pub enum ProjectManifest { | 29 | pub enum ProjectManifest { |
77 | ProjectJson(AbsPathBuf), | 30 | ProjectJson(AbsPathBuf), |
@@ -158,462 +111,6 @@ impl ProjectManifest { | |||
158 | } | 111 | } |
159 | } | 112 | } |
160 | 113 | ||
161 | impl ProjectWorkspace { | ||
162 | pub fn load( | ||
163 | manifest: ProjectManifest, | ||
164 | cargo_config: &CargoConfig, | ||
165 | with_sysroot: bool, | ||
166 | ) -> Result<ProjectWorkspace> { | ||
167 | let res = match manifest { | ||
168 | ProjectManifest::ProjectJson(project_json) => { | ||
169 | let file = fs::read_to_string(&project_json).with_context(|| { | ||
170 | format!("Failed to read json file {}", project_json.display()) | ||
171 | })?; | ||
172 | let data = serde_json::from_str(&file).with_context(|| { | ||
173 | format!("Failed to deserialize json file {}", project_json.display()) | ||
174 | })?; | ||
175 | let project_location = project_json.parent().unwrap().to_path_buf(); | ||
176 | let project = ProjectJson::new(&project_location, data); | ||
177 | let sysroot = match &project.sysroot_src { | ||
178 | Some(path) => Some(Sysroot::load(path)?), | ||
179 | None => None, | ||
180 | }; | ||
181 | ProjectWorkspace::Json { project, sysroot } | ||
182 | } | ||
183 | ProjectManifest::CargoToml(cargo_toml) => { | ||
184 | let cargo_version = utf8_stdout({ | ||
185 | let mut cmd = Command::new(toolchain::cargo()); | ||
186 | cmd.arg("--version"); | ||
187 | cmd | ||
188 | })?; | ||
189 | |||
190 | let cargo = CargoWorkspace::from_cargo_metadata(&cargo_toml, cargo_config) | ||
191 | .with_context(|| { | ||
192 | format!( | ||
193 | "Failed to read Cargo metadata from Cargo.toml file {}, {}", | ||
194 | cargo_toml.display(), | ||
195 | cargo_version | ||
196 | ) | ||
197 | })?; | ||
198 | let sysroot = if with_sysroot { | ||
199 | Sysroot::discover(&cargo_toml).with_context(|| { | ||
200 | format!( | ||
201 | "Failed to find sysroot for Cargo.toml file {}. Is rust-src installed?", | ||
202 | cargo_toml.display() | ||
203 | ) | ||
204 | })? | ||
205 | } else { | ||
206 | Sysroot::default() | ||
207 | }; | ||
208 | |||
209 | let rustc = if let Some(rustc_dir) = &cargo_config.rustc_source { | ||
210 | Some( | ||
211 | CargoWorkspace::from_cargo_metadata(&rustc_dir, cargo_config) | ||
212 | .with_context(|| { | ||
213 | format!("Failed to read Cargo metadata for Rust sources") | ||
214 | })?, | ||
215 | ) | ||
216 | } else { | ||
217 | None | ||
218 | }; | ||
219 | |||
220 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } | ||
221 | } | ||
222 | }; | ||
223 | |||
224 | Ok(res) | ||
225 | } | ||
226 | |||
227 | pub fn load_inline(project_json: ProjectJson) -> Result<ProjectWorkspace> { | ||
228 | let sysroot = match &project_json.sysroot_src { | ||
229 | Some(path) => Some(Sysroot::load(path)?), | ||
230 | None => None, | ||
231 | }; | ||
232 | |||
233 | Ok(ProjectWorkspace::Json { project: project_json, sysroot }) | ||
234 | } | ||
235 | |||
236 | /// Returns the roots for the current `ProjectWorkspace` | ||
237 | /// The return type contains the path and whether or not | ||
238 | /// the root is a member of the current workspace | ||
239 | pub fn to_roots(&self) -> Vec<PackageRoot> { | ||
240 | match self { | ||
241 | ProjectWorkspace::Json { project, sysroot } => project | ||
242 | .crates() | ||
243 | .map(|(_, krate)| PackageRoot { | ||
244 | is_member: krate.is_workspace_member, | ||
245 | include: krate.include.clone(), | ||
246 | exclude: krate.exclude.clone(), | ||
247 | }) | ||
248 | .collect::<FxHashSet<_>>() | ||
249 | .into_iter() | ||
250 | .chain(sysroot.as_ref().into_iter().flat_map(|sysroot| { | ||
251 | sysroot.crates().map(move |krate| PackageRoot { | ||
252 | is_member: false, | ||
253 | include: vec![sysroot[krate].root_dir().to_path_buf()], | ||
254 | exclude: Vec::new(), | ||
255 | }) | ||
256 | })) | ||
257 | .collect::<Vec<_>>(), | ||
258 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } => { | ||
259 | let roots = cargo | ||
260 | .packages() | ||
261 | .map(|pkg| { | ||
262 | let is_member = cargo[pkg].is_member; | ||
263 | let pkg_root = cargo[pkg].root().to_path_buf(); | ||
264 | |||
265 | let mut include = vec![pkg_root.clone()]; | ||
266 | include.extend(cargo[pkg].out_dir.clone()); | ||
267 | |||
268 | let mut exclude = vec![pkg_root.join(".git")]; | ||
269 | if is_member { | ||
270 | exclude.push(pkg_root.join("target")); | ||
271 | } else { | ||
272 | exclude.push(pkg_root.join("tests")); | ||
273 | exclude.push(pkg_root.join("examples")); | ||
274 | exclude.push(pkg_root.join("benches")); | ||
275 | } | ||
276 | PackageRoot { is_member, include, exclude } | ||
277 | }) | ||
278 | .chain(sysroot.crates().map(|krate| PackageRoot { | ||
279 | is_member: false, | ||
280 | include: vec![sysroot[krate].root_dir().to_path_buf()], | ||
281 | exclude: Vec::new(), | ||
282 | })); | ||
283 | if let Some(rustc_packages) = rustc { | ||
284 | roots | ||
285 | .chain(rustc_packages.packages().map(|krate| PackageRoot { | ||
286 | is_member: false, | ||
287 | include: vec![rustc_packages[krate].root().to_path_buf()], | ||
288 | exclude: Vec::new(), | ||
289 | })) | ||
290 | .collect() | ||
291 | } else { | ||
292 | roots.collect() | ||
293 | } | ||
294 | } | ||
295 | } | ||
296 | } | ||
297 | |||
298 | pub fn proc_macro_dylib_paths(&self) -> Vec<AbsPathBuf> { | ||
299 | match self { | ||
300 | ProjectWorkspace::Json { project, sysroot: _ } => project | ||
301 | .crates() | ||
302 | .filter_map(|(_, krate)| krate.proc_macro_dylib_path.as_ref()) | ||
303 | .cloned() | ||
304 | .collect(), | ||
305 | ProjectWorkspace::Cargo { cargo, sysroot: _sysroot, rustc: _rustc_crates } => cargo | ||
306 | .packages() | ||
307 | .filter_map(|pkg| cargo[pkg].proc_macro_dylib_path.as_ref()) | ||
308 | .cloned() | ||
309 | .collect(), | ||
310 | } | ||
311 | } | ||
312 | |||
313 | pub fn n_packages(&self) -> usize { | ||
314 | match self { | ||
315 | ProjectWorkspace::Json { project, .. } => project.n_crates(), | ||
316 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } => { | ||
317 | let rustc_package_len = rustc.as_ref().map_or(0, |rc| rc.packages().len()); | ||
318 | cargo.packages().len() + sysroot.crates().len() + rustc_package_len | ||
319 | } | ||
320 | } | ||
321 | } | ||
322 | |||
323 | pub fn to_crate_graph( | ||
324 | &self, | ||
325 | target: Option<&str>, | ||
326 | proc_macro_client: &ProcMacroClient, | ||
327 | load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, | ||
328 | ) -> CrateGraph { | ||
329 | let mut crate_graph = CrateGraph::default(); | ||
330 | match self { | ||
331 | ProjectWorkspace::Json { project, sysroot } => { | ||
332 | let sysroot_dps = sysroot | ||
333 | .as_ref() | ||
334 | .map(|sysroot| sysroot_to_crate_graph(&mut crate_graph, sysroot, target, load)); | ||
335 | |||
336 | let mut cfg_cache: FxHashMap<Option<&str>, Vec<CfgFlag>> = FxHashMap::default(); | ||
337 | let crates: FxHashMap<_, _> = project | ||
338 | .crates() | ||
339 | .filter_map(|(crate_id, krate)| { | ||
340 | let file_path = &krate.root_module; | ||
341 | let file_id = match load(&file_path) { | ||
342 | Some(id) => id, | ||
343 | None => { | ||
344 | log::error!("failed to load crate root {}", file_path.display()); | ||
345 | return None; | ||
346 | } | ||
347 | }; | ||
348 | |||
349 | let env = krate.env.clone().into_iter().collect(); | ||
350 | let proc_macro = krate | ||
351 | .proc_macro_dylib_path | ||
352 | .clone() | ||
353 | .map(|it| proc_macro_client.by_dylib_path(&it)); | ||
354 | |||
355 | let target = krate.target.as_deref().or(target); | ||
356 | let target_cfgs = cfg_cache | ||
357 | .entry(target) | ||
358 | .or_insert_with(|| get_rustc_cfg_options(target)); | ||
359 | |||
360 | let mut cfg_options = CfgOptions::default(); | ||
361 | cfg_options.extend(target_cfgs.iter().chain(krate.cfg.iter()).cloned()); | ||
362 | |||
363 | Some(( | ||
364 | crate_id, | ||
365 | crate_graph.add_crate_root( | ||
366 | file_id, | ||
367 | krate.edition, | ||
368 | krate.display_name.clone(), | ||
369 | cfg_options, | ||
370 | env, | ||
371 | proc_macro.unwrap_or_default(), | ||
372 | ), | ||
373 | )) | ||
374 | }) | ||
375 | .collect(); | ||
376 | |||
377 | for (from, krate) in project.crates() { | ||
378 | if let Some(&from) = crates.get(&from) { | ||
379 | if let Some((public_deps, _proc_macro)) = &sysroot_dps { | ||
380 | for (name, to) in public_deps.iter() { | ||
381 | if let Err(_) = crate_graph.add_dep(from, name.clone(), *to) { | ||
382 | log::error!("cyclic dependency on {} for {:?}", name, from) | ||
383 | } | ||
384 | } | ||
385 | } | ||
386 | |||
387 | for dep in &krate.deps { | ||
388 | let to_crate_id = dep.crate_id; | ||
389 | if let Some(&to) = crates.get(&to_crate_id) { | ||
390 | if let Err(_) = crate_graph.add_dep(from, dep.name.clone(), to) { | ||
391 | log::error!("cyclic dependency {:?} -> {:?}", from, to); | ||
392 | } | ||
393 | } | ||
394 | } | ||
395 | } | ||
396 | } | ||
397 | } | ||
398 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } => { | ||
399 | let (public_deps, libproc_macro) = | ||
400 | sysroot_to_crate_graph(&mut crate_graph, sysroot, target, load); | ||
401 | |||
402 | let mut cfg_options = CfgOptions::default(); | ||
403 | cfg_options.extend(get_rustc_cfg_options(target)); | ||
404 | |||
405 | let mut pkg_to_lib_crate = FxHashMap::default(); | ||
406 | |||
407 | // Add test cfg for non-sysroot crates | ||
408 | cfg_options.insert_atom("test".into()); | ||
409 | cfg_options.insert_atom("debug_assertions".into()); | ||
410 | |||
411 | let mut pkg_crates = FxHashMap::default(); | ||
412 | |||
413 | // Next, create crates for each package, target pair | ||
414 | for pkg in cargo.packages() { | ||
415 | let mut lib_tgt = None; | ||
416 | for &tgt in cargo[pkg].targets.iter() { | ||
417 | if let Some(crate_id) = add_target_crate_root( | ||
418 | &mut crate_graph, | ||
419 | &cargo[pkg], | ||
420 | &cargo[tgt], | ||
421 | &cfg_options, | ||
422 | proc_macro_client, | ||
423 | load, | ||
424 | ) { | ||
425 | if cargo[tgt].kind == TargetKind::Lib { | ||
426 | lib_tgt = Some((crate_id, cargo[tgt].name.clone())); | ||
427 | pkg_to_lib_crate.insert(pkg, crate_id); | ||
428 | } | ||
429 | if cargo[tgt].is_proc_macro { | ||
430 | if let Some(proc_macro) = libproc_macro { | ||
431 | if let Err(_) = crate_graph.add_dep( | ||
432 | crate_id, | ||
433 | CrateName::new("proc_macro").unwrap(), | ||
434 | proc_macro, | ||
435 | ) { | ||
436 | log::error!( | ||
437 | "cyclic dependency on proc_macro for {}", | ||
438 | &cargo[pkg].name | ||
439 | ) | ||
440 | } | ||
441 | } | ||
442 | } | ||
443 | |||
444 | pkg_crates.entry(pkg).or_insert_with(Vec::new).push(crate_id); | ||
445 | } | ||
446 | } | ||
447 | |||
448 | // Set deps to the core, std and to the lib target of the current package | ||
449 | for &from in pkg_crates.get(&pkg).into_iter().flatten() { | ||
450 | if let Some((to, name)) = lib_tgt.clone() { | ||
451 | // For root projects with dashes in their name, | ||
452 | // cargo metadata does not do any normalization, | ||
453 | // so we do it ourselves currently | ||
454 | let name = CrateName::normalize_dashes(&name); | ||
455 | if to != from && crate_graph.add_dep(from, name, to).is_err() { | ||
456 | log::error!( | ||
457 | "cyclic dependency between targets of {}", | ||
458 | &cargo[pkg].name | ||
459 | ) | ||
460 | } | ||
461 | } | ||
462 | for (name, krate) in public_deps.iter() { | ||
463 | if let Err(_) = crate_graph.add_dep(from, name.clone(), *krate) { | ||
464 | log::error!( | ||
465 | "cyclic dependency on {} for {}", | ||
466 | name, | ||
467 | &cargo[pkg].name | ||
468 | ) | ||
469 | } | ||
470 | } | ||
471 | } | ||
472 | } | ||
473 | |||
474 | // Now add a dep edge from all targets of upstream to the lib | ||
475 | // target of downstream. | ||
476 | for pkg in cargo.packages() { | ||
477 | for dep in cargo[pkg].dependencies.iter() { | ||
478 | let name = CrateName::new(&dep.name).unwrap(); | ||
479 | if let Some(&to) = pkg_to_lib_crate.get(&dep.pkg) { | ||
480 | for &from in pkg_crates.get(&pkg).into_iter().flatten() { | ||
481 | if let Err(_) = crate_graph.add_dep(from, name.clone(), to) { | ||
482 | log::error!( | ||
483 | "cyclic dependency {} -> {}", | ||
484 | &cargo[pkg].name, | ||
485 | &cargo[dep.pkg].name | ||
486 | ) | ||
487 | } | ||
488 | } | ||
489 | } | ||
490 | } | ||
491 | } | ||
492 | |||
493 | let mut rustc_pkg_crates = FxHashMap::default(); | ||
494 | |||
495 | // If the user provided a path to rustc sources, we add all the rustc_private crates | ||
496 | // and create dependencies on them for the crates in the current workspace | ||
497 | if let Some(rustc_workspace) = rustc { | ||
498 | for pkg in rustc_workspace.packages() { | ||
499 | for &tgt in rustc_workspace[pkg].targets.iter() { | ||
500 | if rustc_workspace[tgt].kind != TargetKind::Lib { | ||
501 | continue; | ||
502 | } | ||
503 | // Exclude alloc / core / std | ||
504 | if rustc_workspace[tgt] | ||
505 | .root | ||
506 | .components() | ||
507 | .any(|c| c == Component::Normal("library".as_ref())) | ||
508 | { | ||
509 | continue; | ||
510 | } | ||
511 | |||
512 | if let Some(crate_id) = add_target_crate_root( | ||
513 | &mut crate_graph, | ||
514 | &rustc_workspace[pkg], | ||
515 | &rustc_workspace[tgt], | ||
516 | &cfg_options, | ||
517 | proc_macro_client, | ||
518 | load, | ||
519 | ) { | ||
520 | pkg_to_lib_crate.insert(pkg, crate_id); | ||
521 | // Add dependencies on the core / std / alloc for rustc | ||
522 | for (name, krate) in public_deps.iter() { | ||
523 | if let Err(_) = | ||
524 | crate_graph.add_dep(crate_id, name.clone(), *krate) | ||
525 | { | ||
526 | log::error!( | ||
527 | "cyclic dependency on {} for {}", | ||
528 | name, | ||
529 | &cargo[pkg].name | ||
530 | ) | ||
531 | } | ||
532 | } | ||
533 | rustc_pkg_crates.entry(pkg).or_insert_with(Vec::new).push(crate_id); | ||
534 | } | ||
535 | } | ||
536 | } | ||
537 | // Now add a dep edge from all targets of upstream to the lib | ||
538 | // target of downstream. | ||
539 | for pkg in rustc_workspace.packages() { | ||
540 | for dep in rustc_workspace[pkg].dependencies.iter() { | ||
541 | let name = CrateName::new(&dep.name).unwrap(); | ||
542 | if let Some(&to) = pkg_to_lib_crate.get(&dep.pkg) { | ||
543 | for &from in rustc_pkg_crates.get(&pkg).into_iter().flatten() { | ||
544 | if let Err(_) = crate_graph.add_dep(from, name.clone(), to) { | ||
545 | log::error!( | ||
546 | "cyclic dependency {} -> {}", | ||
547 | &rustc_workspace[pkg].name, | ||
548 | &rustc_workspace[dep.pkg].name | ||
549 | ) | ||
550 | } | ||
551 | } | ||
552 | } | ||
553 | } | ||
554 | } | ||
555 | |||
556 | // Add dependencies for all the crates of the current workspace to rustc_private libraries | ||
557 | for dep in rustc_workspace.packages() { | ||
558 | let name = CrateName::normalize_dashes(&rustc_workspace[dep].name); | ||
559 | |||
560 | if let Some(&to) = pkg_to_lib_crate.get(&dep) { | ||
561 | for pkg in cargo.packages() { | ||
562 | if !cargo[pkg].is_member { | ||
563 | continue; | ||
564 | } | ||
565 | for &from in pkg_crates.get(&pkg).into_iter().flatten() { | ||
566 | if let Err(_) = crate_graph.add_dep(from, name.clone(), to) { | ||
567 | log::error!( | ||
568 | "cyclic dependency {} -> {}", | ||
569 | &cargo[pkg].name, | ||
570 | &rustc_workspace[dep].name | ||
571 | ) | ||
572 | } | ||
573 | } | ||
574 | } | ||
575 | } | ||
576 | } | ||
577 | } | ||
578 | } | ||
579 | } | ||
580 | if crate_graph.patch_cfg_if() { | ||
581 | log::debug!("Patched std to depend on cfg-if") | ||
582 | } else { | ||
583 | log::debug!("Did not patch std to depend on cfg-if") | ||
584 | } | ||
585 | crate_graph | ||
586 | } | ||
587 | } | ||
588 | |||
589 | fn get_rustc_cfg_options(target: Option<&str>) -> Vec<CfgFlag> { | ||
590 | let mut res = Vec::new(); | ||
591 | |||
592 | // Some nightly-only cfgs, which are required for stdlib | ||
593 | res.push(CfgFlag::Atom("target_thread_local".into())); | ||
594 | for &ty in ["8", "16", "32", "64", "cas", "ptr"].iter() { | ||
595 | for &key in ["target_has_atomic", "target_has_atomic_load_store"].iter() { | ||
596 | res.push(CfgFlag::KeyValue { key: key.to_string(), value: ty.into() }); | ||
597 | } | ||
598 | } | ||
599 | |||
600 | let rustc_cfgs = { | ||
601 | let mut cmd = Command::new(toolchain::rustc()); | ||
602 | cmd.args(&["--print", "cfg", "-O"]); | ||
603 | if let Some(target) = target { | ||
604 | cmd.args(&["--target", target]); | ||
605 | } | ||
606 | utf8_stdout(cmd) | ||
607 | }; | ||
608 | |||
609 | match rustc_cfgs { | ||
610 | Ok(rustc_cfgs) => res.extend(rustc_cfgs.lines().map(|it| it.parse().unwrap())), | ||
611 | Err(e) => log::error!("failed to get rustc cfgs: {:#}", e), | ||
612 | } | ||
613 | |||
614 | res | ||
615 | } | ||
616 | |||
617 | fn utf8_stdout(mut cmd: Command) -> Result<String> { | 114 | fn utf8_stdout(mut cmd: Command) -> Result<String> { |
618 | let output = cmd.output().with_context(|| format!("{:?} failed", cmd))?; | 115 | let output = cmd.output().with_context(|| format!("{:?} failed", cmd))?; |
619 | if !output.status.success() { | 116 | if !output.status.success() { |
@@ -627,98 +124,3 @@ fn utf8_stdout(mut cmd: Command) -> Result<String> { | |||
627 | let stdout = String::from_utf8(output.stdout)?; | 124 | let stdout = String::from_utf8(output.stdout)?; |
628 | Ok(stdout.trim().to_string()) | 125 | Ok(stdout.trim().to_string()) |
629 | } | 126 | } |
630 | |||
631 | fn add_target_crate_root( | ||
632 | crate_graph: &mut CrateGraph, | ||
633 | pkg: &cargo_workspace::PackageData, | ||
634 | tgt: &cargo_workspace::TargetData, | ||
635 | cfg_options: &CfgOptions, | ||
636 | proc_macro_client: &ProcMacroClient, | ||
637 | load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, | ||
638 | ) -> Option<CrateId> { | ||
639 | let root = tgt.root.as_path(); | ||
640 | if let Some(file_id) = load(root) { | ||
641 | let edition = pkg.edition; | ||
642 | let cfg_options = { | ||
643 | let mut opts = cfg_options.clone(); | ||
644 | for feature in pkg.features.iter() { | ||
645 | opts.insert_key_value("feature".into(), feature.into()); | ||
646 | } | ||
647 | opts.extend(pkg.cfgs.iter().cloned()); | ||
648 | opts | ||
649 | }; | ||
650 | let mut env = Env::default(); | ||
651 | if let Some(out_dir) = &pkg.out_dir { | ||
652 | // NOTE: cargo and rustc seem to hide non-UTF-8 strings from env! and option_env!() | ||
653 | if let Some(out_dir) = out_dir.to_str().map(|s| s.to_owned()) { | ||
654 | env.set("OUT_DIR", out_dir); | ||
655 | } | ||
656 | } | ||
657 | let proc_macro = pkg | ||
658 | .proc_macro_dylib_path | ||
659 | .as_ref() | ||
660 | .map(|it| proc_macro_client.by_dylib_path(&it)) | ||
661 | .unwrap_or_default(); | ||
662 | |||
663 | let display_name = CrateDisplayName::from_canonical_name(pkg.name.clone()); | ||
664 | let crate_id = crate_graph.add_crate_root( | ||
665 | file_id, | ||
666 | edition, | ||
667 | Some(display_name), | ||
668 | cfg_options, | ||
669 | env, | ||
670 | proc_macro.clone(), | ||
671 | ); | ||
672 | |||
673 | return Some(crate_id); | ||
674 | } | ||
675 | None | ||
676 | } | ||
677 | fn sysroot_to_crate_graph( | ||
678 | crate_graph: &mut CrateGraph, | ||
679 | sysroot: &Sysroot, | ||
680 | target: Option<&str>, | ||
681 | load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, | ||
682 | ) -> (Vec<(CrateName, CrateId)>, Option<CrateId>) { | ||
683 | let mut cfg_options = CfgOptions::default(); | ||
684 | cfg_options.extend(get_rustc_cfg_options(target)); | ||
685 | let sysroot_crates: FxHashMap<_, _> = sysroot | ||
686 | .crates() | ||
687 | .filter_map(|krate| { | ||
688 | let file_id = load(&sysroot[krate].root)?; | ||
689 | |||
690 | let env = Env::default(); | ||
691 | let proc_macro = vec![]; | ||
692 | let name = CrateName::new(&sysroot[krate].name) | ||
693 | .expect("Sysroot crates' names do not contain dashes"); | ||
694 | let crate_id = crate_graph.add_crate_root( | ||
695 | file_id, | ||
696 | Edition::Edition2018, | ||
697 | Some(name.into()), | ||
698 | cfg_options.clone(), | ||
699 | env, | ||
700 | proc_macro, | ||
701 | ); | ||
702 | Some((krate, crate_id)) | ||
703 | }) | ||
704 | .collect(); | ||
705 | |||
706 | for from in sysroot.crates() { | ||
707 | for &to in sysroot[from].deps.iter() { | ||
708 | let name = CrateName::new(&sysroot[to].name).unwrap(); | ||
709 | if let (Some(&from), Some(&to)) = (sysroot_crates.get(&from), sysroot_crates.get(&to)) { | ||
710 | if let Err(_) = crate_graph.add_dep(from, name, to) { | ||
711 | log::error!("cyclic dependency between sysroot crates") | ||
712 | } | ||
713 | } | ||
714 | } | ||
715 | } | ||
716 | |||
717 | let public_deps = sysroot | ||
718 | .public_deps() | ||
719 | .map(|(name, idx)| (CrateName::new(name).unwrap(), sysroot_crates[&idx])) | ||
720 | .collect::<Vec<_>>(); | ||
721 | |||
722 | let libproc_macro = sysroot.proc_macro().and_then(|it| sysroot_crates.get(&it).copied()); | ||
723 | (public_deps, libproc_macro) | ||
724 | } | ||
diff --git a/crates/project_model/src/workspace.rs b/crates/project_model/src/workspace.rs new file mode 100644 index 000000000..9ebb0a811 --- /dev/null +++ b/crates/project_model/src/workspace.rs | |||
@@ -0,0 +1,590 @@ | |||
1 | //! Handles lowering of build-system specific workspace information (`cargo | ||
2 | //! metadata` or `rust-project.json`) into representation stored in the salsa | ||
3 | //! database -- `CrateGraph`. | ||
4 | |||
5 | use std::{fmt, fs, path::Component, process::Command}; | ||
6 | |||
7 | use anyhow::{Context, Result}; | ||
8 | use base_db::{CrateDisplayName, CrateGraph, CrateId, CrateName, Edition, Env, FileId}; | ||
9 | use cfg::CfgOptions; | ||
10 | use paths::{AbsPath, AbsPathBuf}; | ||
11 | use proc_macro_api::ProcMacroClient; | ||
12 | use rustc_hash::{FxHashMap, FxHashSet}; | ||
13 | |||
14 | use crate::{ | ||
15 | cargo_workspace, cfg_flag::CfgFlag, utf8_stdout, CargoConfig, CargoWorkspace, ProjectJson, | ||
16 | ProjectManifest, Sysroot, TargetKind, | ||
17 | }; | ||
18 | |||
19 | /// `PackageRoot` describes a package root folder. | ||
20 | /// Which may be an external dependency, or a member of | ||
21 | /// the current workspace. | ||
22 | #[derive(Debug, Clone, Eq, PartialEq, Hash)] | ||
23 | pub struct PackageRoot { | ||
24 | /// Is a member of the current workspace | ||
25 | pub is_member: bool, | ||
26 | pub include: Vec<AbsPathBuf>, | ||
27 | pub exclude: Vec<AbsPathBuf>, | ||
28 | } | ||
29 | |||
30 | #[derive(Clone, Eq, PartialEq)] | ||
31 | pub enum ProjectWorkspace { | ||
32 | /// Project workspace was discovered by running `cargo metadata` and `rustc --print sysroot`. | ||
33 | Cargo { cargo: CargoWorkspace, sysroot: Sysroot, rustc: Option<CargoWorkspace> }, | ||
34 | /// Project workspace was manually specified using a `rust-project.json` file. | ||
35 | Json { project: ProjectJson, sysroot: Option<Sysroot> }, | ||
36 | } | ||
37 | |||
38 | impl fmt::Debug for ProjectWorkspace { | ||
39 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | ||
40 | match self { | ||
41 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } => f | ||
42 | .debug_struct("Cargo") | ||
43 | .field("n_packages", &cargo.packages().len()) | ||
44 | .field("n_sysroot_crates", &sysroot.crates().len()) | ||
45 | .field( | ||
46 | "n_rustc_compiler_crates", | ||
47 | &rustc.as_ref().map_or(0, |rc| rc.packages().len()), | ||
48 | ) | ||
49 | .finish(), | ||
50 | ProjectWorkspace::Json { project, sysroot } => { | ||
51 | let mut debug_struct = f.debug_struct("Json"); | ||
52 | debug_struct.field("n_crates", &project.n_crates()); | ||
53 | if let Some(sysroot) = sysroot { | ||
54 | debug_struct.field("n_sysroot_crates", &sysroot.crates().len()); | ||
55 | } | ||
56 | debug_struct.finish() | ||
57 | } | ||
58 | } | ||
59 | } | ||
60 | } | ||
61 | |||
62 | impl ProjectWorkspace { | ||
63 | pub fn load(manifest: ProjectManifest, config: &CargoConfig) -> Result<ProjectWorkspace> { | ||
64 | let res = match manifest { | ||
65 | ProjectManifest::ProjectJson(project_json) => { | ||
66 | let file = fs::read_to_string(&project_json).with_context(|| { | ||
67 | format!("Failed to read json file {}", project_json.display()) | ||
68 | })?; | ||
69 | let data = serde_json::from_str(&file).with_context(|| { | ||
70 | format!("Failed to deserialize json file {}", project_json.display()) | ||
71 | })?; | ||
72 | let project_location = project_json.parent().unwrap().to_path_buf(); | ||
73 | let project = ProjectJson::new(&project_location, data); | ||
74 | let sysroot = match &project.sysroot_src { | ||
75 | Some(path) => Some(Sysroot::load(path)?), | ||
76 | None => None, | ||
77 | }; | ||
78 | ProjectWorkspace::Json { project, sysroot } | ||
79 | } | ||
80 | ProjectManifest::CargoToml(cargo_toml) => { | ||
81 | let cargo_version = utf8_stdout({ | ||
82 | let mut cmd = Command::new(toolchain::cargo()); | ||
83 | cmd.arg("--version"); | ||
84 | cmd | ||
85 | })?; | ||
86 | |||
87 | let cargo = CargoWorkspace::from_cargo_metadata(&cargo_toml, config).with_context( | ||
88 | || { | ||
89 | format!( | ||
90 | "Failed to read Cargo metadata from Cargo.toml file {}, {}", | ||
91 | cargo_toml.display(), | ||
92 | cargo_version | ||
93 | ) | ||
94 | }, | ||
95 | )?; | ||
96 | let sysroot = if config.no_sysroot { | ||
97 | Sysroot::default() | ||
98 | } else { | ||
99 | Sysroot::discover(&cargo_toml).with_context(|| { | ||
100 | format!( | ||
101 | "Failed to find sysroot for Cargo.toml file {}. Is rust-src installed?", | ||
102 | cargo_toml.display() | ||
103 | ) | ||
104 | })? | ||
105 | }; | ||
106 | |||
107 | let rustc = if let Some(rustc_dir) = &config.rustc_source { | ||
108 | Some(CargoWorkspace::from_cargo_metadata(&rustc_dir, config).with_context( | ||
109 | || format!("Failed to read Cargo metadata for Rust sources"), | ||
110 | )?) | ||
111 | } else { | ||
112 | None | ||
113 | }; | ||
114 | |||
115 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } | ||
116 | } | ||
117 | }; | ||
118 | |||
119 | Ok(res) | ||
120 | } | ||
121 | |||
122 | pub fn load_inline(project_json: ProjectJson) -> Result<ProjectWorkspace> { | ||
123 | let sysroot = match &project_json.sysroot_src { | ||
124 | Some(path) => Some(Sysroot::load(path)?), | ||
125 | None => None, | ||
126 | }; | ||
127 | |||
128 | Ok(ProjectWorkspace::Json { project: project_json, sysroot }) | ||
129 | } | ||
130 | |||
131 | /// Returns the roots for the current `ProjectWorkspace` | ||
132 | /// The return type contains the path and whether or not | ||
133 | /// the root is a member of the current workspace | ||
134 | pub fn to_roots(&self) -> Vec<PackageRoot> { | ||
135 | match self { | ||
136 | ProjectWorkspace::Json { project, sysroot } => project | ||
137 | .crates() | ||
138 | .map(|(_, krate)| PackageRoot { | ||
139 | is_member: krate.is_workspace_member, | ||
140 | include: krate.include.clone(), | ||
141 | exclude: krate.exclude.clone(), | ||
142 | }) | ||
143 | .collect::<FxHashSet<_>>() | ||
144 | .into_iter() | ||
145 | .chain(sysroot.as_ref().into_iter().flat_map(|sysroot| { | ||
146 | sysroot.crates().map(move |krate| PackageRoot { | ||
147 | is_member: false, | ||
148 | include: vec![sysroot[krate].root_dir().to_path_buf()], | ||
149 | exclude: Vec::new(), | ||
150 | }) | ||
151 | })) | ||
152 | .collect::<Vec<_>>(), | ||
153 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } => { | ||
154 | let roots = cargo | ||
155 | .packages() | ||
156 | .map(|pkg| { | ||
157 | let is_member = cargo[pkg].is_member; | ||
158 | let pkg_root = cargo[pkg].root().to_path_buf(); | ||
159 | |||
160 | let mut include = vec![pkg_root.clone()]; | ||
161 | include.extend(cargo[pkg].out_dir.clone()); | ||
162 | |||
163 | let mut exclude = vec![pkg_root.join(".git")]; | ||
164 | if is_member { | ||
165 | exclude.push(pkg_root.join("target")); | ||
166 | } else { | ||
167 | exclude.push(pkg_root.join("tests")); | ||
168 | exclude.push(pkg_root.join("examples")); | ||
169 | exclude.push(pkg_root.join("benches")); | ||
170 | } | ||
171 | PackageRoot { is_member, include, exclude } | ||
172 | }) | ||
173 | .chain(sysroot.crates().map(|krate| PackageRoot { | ||
174 | is_member: false, | ||
175 | include: vec![sysroot[krate].root_dir().to_path_buf()], | ||
176 | exclude: Vec::new(), | ||
177 | })); | ||
178 | if let Some(rustc_packages) = rustc { | ||
179 | roots | ||
180 | .chain(rustc_packages.packages().map(|krate| PackageRoot { | ||
181 | is_member: false, | ||
182 | include: vec![rustc_packages[krate].root().to_path_buf()], | ||
183 | exclude: Vec::new(), | ||
184 | })) | ||
185 | .collect() | ||
186 | } else { | ||
187 | roots.collect() | ||
188 | } | ||
189 | } | ||
190 | } | ||
191 | } | ||
192 | |||
193 | pub fn n_packages(&self) -> usize { | ||
194 | match self { | ||
195 | ProjectWorkspace::Json { project, .. } => project.n_crates(), | ||
196 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } => { | ||
197 | let rustc_package_len = rustc.as_ref().map_or(0, |rc| rc.packages().len()); | ||
198 | cargo.packages().len() + sysroot.crates().len() + rustc_package_len | ||
199 | } | ||
200 | } | ||
201 | } | ||
202 | |||
203 | pub fn to_crate_graph( | ||
204 | &self, | ||
205 | target: Option<&str>, | ||
206 | proc_macro_client: &ProcMacroClient, | ||
207 | load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, | ||
208 | ) -> CrateGraph { | ||
209 | let mut crate_graph = CrateGraph::default(); | ||
210 | match self { | ||
211 | ProjectWorkspace::Json { project, sysroot } => { | ||
212 | let sysroot_dps = sysroot | ||
213 | .as_ref() | ||
214 | .map(|sysroot| sysroot_to_crate_graph(&mut crate_graph, sysroot, target, load)); | ||
215 | |||
216 | let mut cfg_cache: FxHashMap<Option<&str>, Vec<CfgFlag>> = FxHashMap::default(); | ||
217 | let crates: FxHashMap<_, _> = project | ||
218 | .crates() | ||
219 | .filter_map(|(crate_id, krate)| { | ||
220 | let file_path = &krate.root_module; | ||
221 | let file_id = match load(&file_path) { | ||
222 | Some(id) => id, | ||
223 | None => { | ||
224 | log::error!("failed to load crate root {}", file_path.display()); | ||
225 | return None; | ||
226 | } | ||
227 | }; | ||
228 | |||
229 | let env = krate.env.clone().into_iter().collect(); | ||
230 | let proc_macro = krate | ||
231 | .proc_macro_dylib_path | ||
232 | .clone() | ||
233 | .map(|it| proc_macro_client.by_dylib_path(&it)); | ||
234 | |||
235 | let target = krate.target.as_deref().or(target); | ||
236 | let target_cfgs = cfg_cache | ||
237 | .entry(target) | ||
238 | .or_insert_with(|| get_rustc_cfg_options(target)); | ||
239 | |||
240 | let mut cfg_options = CfgOptions::default(); | ||
241 | cfg_options.extend(target_cfgs.iter().chain(krate.cfg.iter()).cloned()); | ||
242 | |||
243 | Some(( | ||
244 | crate_id, | ||
245 | crate_graph.add_crate_root( | ||
246 | file_id, | ||
247 | krate.edition, | ||
248 | krate.display_name.clone(), | ||
249 | cfg_options, | ||
250 | env, | ||
251 | proc_macro.unwrap_or_default(), | ||
252 | ), | ||
253 | )) | ||
254 | }) | ||
255 | .collect(); | ||
256 | |||
257 | for (from, krate) in project.crates() { | ||
258 | if let Some(&from) = crates.get(&from) { | ||
259 | if let Some((public_deps, _proc_macro)) = &sysroot_dps { | ||
260 | for (name, to) in public_deps.iter() { | ||
261 | if let Err(_) = crate_graph.add_dep(from, name.clone(), *to) { | ||
262 | log::error!("cyclic dependency on {} for {:?}", name, from) | ||
263 | } | ||
264 | } | ||
265 | } | ||
266 | |||
267 | for dep in &krate.deps { | ||
268 | let to_crate_id = dep.crate_id; | ||
269 | if let Some(&to) = crates.get(&to_crate_id) { | ||
270 | if let Err(_) = crate_graph.add_dep(from, dep.name.clone(), to) { | ||
271 | log::error!("cyclic dependency {:?} -> {:?}", from, to); | ||
272 | } | ||
273 | } | ||
274 | } | ||
275 | } | ||
276 | } | ||
277 | } | ||
278 | ProjectWorkspace::Cargo { cargo, sysroot, rustc } => { | ||
279 | let (public_deps, libproc_macro) = | ||
280 | sysroot_to_crate_graph(&mut crate_graph, sysroot, target, load); | ||
281 | |||
282 | let mut cfg_options = CfgOptions::default(); | ||
283 | cfg_options.extend(get_rustc_cfg_options(target)); | ||
284 | |||
285 | let mut pkg_to_lib_crate = FxHashMap::default(); | ||
286 | |||
287 | // Add test cfg for non-sysroot crates | ||
288 | cfg_options.insert_atom("test".into()); | ||
289 | cfg_options.insert_atom("debug_assertions".into()); | ||
290 | |||
291 | let mut pkg_crates = FxHashMap::default(); | ||
292 | |||
293 | // Next, create crates for each package, target pair | ||
294 | for pkg in cargo.packages() { | ||
295 | let mut lib_tgt = None; | ||
296 | for &tgt in cargo[pkg].targets.iter() { | ||
297 | if let Some(crate_id) = add_target_crate_root( | ||
298 | &mut crate_graph, | ||
299 | &cargo[pkg], | ||
300 | &cargo[tgt], | ||
301 | &cfg_options, | ||
302 | proc_macro_client, | ||
303 | load, | ||
304 | ) { | ||
305 | if cargo[tgt].kind == TargetKind::Lib { | ||
306 | lib_tgt = Some((crate_id, cargo[tgt].name.clone())); | ||
307 | pkg_to_lib_crate.insert(pkg, crate_id); | ||
308 | } | ||
309 | if cargo[tgt].is_proc_macro { | ||
310 | if let Some(proc_macro) = libproc_macro { | ||
311 | if let Err(_) = crate_graph.add_dep( | ||
312 | crate_id, | ||
313 | CrateName::new("proc_macro").unwrap(), | ||
314 | proc_macro, | ||
315 | ) { | ||
316 | log::error!( | ||
317 | "cyclic dependency on proc_macro for {}", | ||
318 | &cargo[pkg].name | ||
319 | ) | ||
320 | } | ||
321 | } | ||
322 | } | ||
323 | |||
324 | pkg_crates.entry(pkg).or_insert_with(Vec::new).push(crate_id); | ||
325 | } | ||
326 | } | ||
327 | |||
328 | // Set deps to the core, std and to the lib target of the current package | ||
329 | for &from in pkg_crates.get(&pkg).into_iter().flatten() { | ||
330 | if let Some((to, name)) = lib_tgt.clone() { | ||
331 | // For root projects with dashes in their name, | ||
332 | // cargo metadata does not do any normalization, | ||
333 | // so we do it ourselves currently | ||
334 | let name = CrateName::normalize_dashes(&name); | ||
335 | if to != from && crate_graph.add_dep(from, name, to).is_err() { | ||
336 | log::error!( | ||
337 | "cyclic dependency between targets of {}", | ||
338 | &cargo[pkg].name | ||
339 | ) | ||
340 | } | ||
341 | } | ||
342 | for (name, krate) in public_deps.iter() { | ||
343 | if let Err(_) = crate_graph.add_dep(from, name.clone(), *krate) { | ||
344 | log::error!( | ||
345 | "cyclic dependency on {} for {}", | ||
346 | name, | ||
347 | &cargo[pkg].name | ||
348 | ) | ||
349 | } | ||
350 | } | ||
351 | } | ||
352 | } | ||
353 | |||
354 | // Now add a dep edge from all targets of upstream to the lib | ||
355 | // target of downstream. | ||
356 | for pkg in cargo.packages() { | ||
357 | for dep in cargo[pkg].dependencies.iter() { | ||
358 | let name = CrateName::new(&dep.name).unwrap(); | ||
359 | if let Some(&to) = pkg_to_lib_crate.get(&dep.pkg) { | ||
360 | for &from in pkg_crates.get(&pkg).into_iter().flatten() { | ||
361 | if let Err(_) = crate_graph.add_dep(from, name.clone(), to) { | ||
362 | log::error!( | ||
363 | "cyclic dependency {} -> {}", | ||
364 | &cargo[pkg].name, | ||
365 | &cargo[dep.pkg].name | ||
366 | ) | ||
367 | } | ||
368 | } | ||
369 | } | ||
370 | } | ||
371 | } | ||
372 | |||
373 | let mut rustc_pkg_crates = FxHashMap::default(); | ||
374 | |||
375 | // If the user provided a path to rustc sources, we add all the rustc_private crates | ||
376 | // and create dependencies on them for the crates in the current workspace | ||
377 | if let Some(rustc_workspace) = rustc { | ||
378 | for pkg in rustc_workspace.packages() { | ||
379 | for &tgt in rustc_workspace[pkg].targets.iter() { | ||
380 | if rustc_workspace[tgt].kind != TargetKind::Lib { | ||
381 | continue; | ||
382 | } | ||
383 | // Exclude alloc / core / std | ||
384 | if rustc_workspace[tgt] | ||
385 | .root | ||
386 | .components() | ||
387 | .any(|c| c == Component::Normal("library".as_ref())) | ||
388 | { | ||
389 | continue; | ||
390 | } | ||
391 | |||
392 | if let Some(crate_id) = add_target_crate_root( | ||
393 | &mut crate_graph, | ||
394 | &rustc_workspace[pkg], | ||
395 | &rustc_workspace[tgt], | ||
396 | &cfg_options, | ||
397 | proc_macro_client, | ||
398 | load, | ||
399 | ) { | ||
400 | pkg_to_lib_crate.insert(pkg, crate_id); | ||
401 | // Add dependencies on the core / std / alloc for rustc | ||
402 | for (name, krate) in public_deps.iter() { | ||
403 | if let Err(_) = | ||
404 | crate_graph.add_dep(crate_id, name.clone(), *krate) | ||
405 | { | ||
406 | log::error!( | ||
407 | "cyclic dependency on {} for {}", | ||
408 | name, | ||
409 | &cargo[pkg].name | ||
410 | ) | ||
411 | } | ||
412 | } | ||
413 | rustc_pkg_crates.entry(pkg).or_insert_with(Vec::new).push(crate_id); | ||
414 | } | ||
415 | } | ||
416 | } | ||
417 | // Now add a dep edge from all targets of upstream to the lib | ||
418 | // target of downstream. | ||
419 | for pkg in rustc_workspace.packages() { | ||
420 | for dep in rustc_workspace[pkg].dependencies.iter() { | ||
421 | let name = CrateName::new(&dep.name).unwrap(); | ||
422 | if let Some(&to) = pkg_to_lib_crate.get(&dep.pkg) { | ||
423 | for &from in rustc_pkg_crates.get(&pkg).into_iter().flatten() { | ||
424 | if let Err(_) = crate_graph.add_dep(from, name.clone(), to) { | ||
425 | log::error!( | ||
426 | "cyclic dependency {} -> {}", | ||
427 | &rustc_workspace[pkg].name, | ||
428 | &rustc_workspace[dep.pkg].name | ||
429 | ) | ||
430 | } | ||
431 | } | ||
432 | } | ||
433 | } | ||
434 | } | ||
435 | |||
436 | // Add dependencies for all the crates of the current workspace to rustc_private libraries | ||
437 | for dep in rustc_workspace.packages() { | ||
438 | let name = CrateName::normalize_dashes(&rustc_workspace[dep].name); | ||
439 | |||
440 | if let Some(&to) = pkg_to_lib_crate.get(&dep) { | ||
441 | for pkg in cargo.packages() { | ||
442 | if !cargo[pkg].is_member { | ||
443 | continue; | ||
444 | } | ||
445 | for &from in pkg_crates.get(&pkg).into_iter().flatten() { | ||
446 | if let Err(_) = crate_graph.add_dep(from, name.clone(), to) { | ||
447 | log::error!( | ||
448 | "cyclic dependency {} -> {}", | ||
449 | &cargo[pkg].name, | ||
450 | &rustc_workspace[dep].name | ||
451 | ) | ||
452 | } | ||
453 | } | ||
454 | } | ||
455 | } | ||
456 | } | ||
457 | } | ||
458 | } | ||
459 | } | ||
460 | if crate_graph.patch_cfg_if() { | ||
461 | log::debug!("Patched std to depend on cfg-if") | ||
462 | } else { | ||
463 | log::debug!("Did not patch std to depend on cfg-if") | ||
464 | } | ||
465 | crate_graph | ||
466 | } | ||
467 | } | ||
468 | |||
469 | fn add_target_crate_root( | ||
470 | crate_graph: &mut CrateGraph, | ||
471 | pkg: &cargo_workspace::PackageData, | ||
472 | tgt: &cargo_workspace::TargetData, | ||
473 | cfg_options: &CfgOptions, | ||
474 | proc_macro_client: &ProcMacroClient, | ||
475 | load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, | ||
476 | ) -> Option<CrateId> { | ||
477 | let root = tgt.root.as_path(); | ||
478 | if let Some(file_id) = load(root) { | ||
479 | let edition = pkg.edition; | ||
480 | let cfg_options = { | ||
481 | let mut opts = cfg_options.clone(); | ||
482 | for feature in pkg.features.iter() { | ||
483 | opts.insert_key_value("feature".into(), feature.into()); | ||
484 | } | ||
485 | opts.extend(pkg.cfgs.iter().cloned()); | ||
486 | opts | ||
487 | }; | ||
488 | let mut env = Env::default(); | ||
489 | if let Some(out_dir) = &pkg.out_dir { | ||
490 | // NOTE: cargo and rustc seem to hide non-UTF-8 strings from env! and option_env!() | ||
491 | if let Some(out_dir) = out_dir.to_str().map(|s| s.to_owned()) { | ||
492 | env.set("OUT_DIR", out_dir); | ||
493 | } | ||
494 | } | ||
495 | let proc_macro = pkg | ||
496 | .proc_macro_dylib_path | ||
497 | .as_ref() | ||
498 | .map(|it| proc_macro_client.by_dylib_path(&it)) | ||
499 | .unwrap_or_default(); | ||
500 | |||
501 | let display_name = CrateDisplayName::from_canonical_name(pkg.name.clone()); | ||
502 | let crate_id = crate_graph.add_crate_root( | ||
503 | file_id, | ||
504 | edition, | ||
505 | Some(display_name), | ||
506 | cfg_options, | ||
507 | env, | ||
508 | proc_macro.clone(), | ||
509 | ); | ||
510 | |||
511 | return Some(crate_id); | ||
512 | } | ||
513 | None | ||
514 | } | ||
515 | fn sysroot_to_crate_graph( | ||
516 | crate_graph: &mut CrateGraph, | ||
517 | sysroot: &Sysroot, | ||
518 | target: Option<&str>, | ||
519 | load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, | ||
520 | ) -> (Vec<(CrateName, CrateId)>, Option<CrateId>) { | ||
521 | let mut cfg_options = CfgOptions::default(); | ||
522 | cfg_options.extend(get_rustc_cfg_options(target)); | ||
523 | let sysroot_crates: FxHashMap<_, _> = sysroot | ||
524 | .crates() | ||
525 | .filter_map(|krate| { | ||
526 | let file_id = load(&sysroot[krate].root)?; | ||
527 | |||
528 | let env = Env::default(); | ||
529 | let proc_macro = vec![]; | ||
530 | let name = CrateName::new(&sysroot[krate].name) | ||
531 | .expect("Sysroot crates' names do not contain dashes"); | ||
532 | let crate_id = crate_graph.add_crate_root( | ||
533 | file_id, | ||
534 | Edition::Edition2018, | ||
535 | Some(name.into()), | ||
536 | cfg_options.clone(), | ||
537 | env, | ||
538 | proc_macro, | ||
539 | ); | ||
540 | Some((krate, crate_id)) | ||
541 | }) | ||
542 | .collect(); | ||
543 | |||
544 | for from in sysroot.crates() { | ||
545 | for &to in sysroot[from].deps.iter() { | ||
546 | let name = CrateName::new(&sysroot[to].name).unwrap(); | ||
547 | if let (Some(&from), Some(&to)) = (sysroot_crates.get(&from), sysroot_crates.get(&to)) { | ||
548 | if let Err(_) = crate_graph.add_dep(from, name, to) { | ||
549 | log::error!("cyclic dependency between sysroot crates") | ||
550 | } | ||
551 | } | ||
552 | } | ||
553 | } | ||
554 | |||
555 | let public_deps = sysroot | ||
556 | .public_deps() | ||
557 | .map(|(name, idx)| (CrateName::new(name).unwrap(), sysroot_crates[&idx])) | ||
558 | .collect::<Vec<_>>(); | ||
559 | |||
560 | let libproc_macro = sysroot.proc_macro().and_then(|it| sysroot_crates.get(&it).copied()); | ||
561 | (public_deps, libproc_macro) | ||
562 | } | ||
563 | |||
564 | fn get_rustc_cfg_options(target: Option<&str>) -> Vec<CfgFlag> { | ||
565 | let mut res = Vec::new(); | ||
566 | |||
567 | // Some nightly-only cfgs, which are required for stdlib | ||
568 | res.push(CfgFlag::Atom("target_thread_local".into())); | ||
569 | for &ty in ["8", "16", "32", "64", "cas", "ptr"].iter() { | ||
570 | for &key in ["target_has_atomic", "target_has_atomic_load_store"].iter() { | ||
571 | res.push(CfgFlag::KeyValue { key: key.to_string(), value: ty.into() }); | ||
572 | } | ||
573 | } | ||
574 | |||
575 | let rustc_cfgs = { | ||
576 | let mut cmd = Command::new(toolchain::rustc()); | ||
577 | cmd.args(&["--print", "cfg", "-O"]); | ||
578 | if let Some(target) = target { | ||
579 | cmd.args(&["--target", target]); | ||
580 | } | ||
581 | utf8_stdout(cmd) | ||
582 | }; | ||
583 | |||
584 | match rustc_cfgs { | ||
585 | Ok(rustc_cfgs) => res.extend(rustc_cfgs.lines().map(|it| it.parse().unwrap())), | ||
586 | Err(e) => log::error!("failed to get rustc cfgs: {:#}", e), | ||
587 | } | ||
588 | |||
589 | res | ||
590 | } | ||
diff --git a/crates/rust-analyzer/src/cli/load_cargo.rs b/crates/rust-analyzer/src/cli/load_cargo.rs index ab1e2ab92..76526c66c 100644 --- a/crates/rust-analyzer/src/cli/load_cargo.rs +++ b/crates/rust-analyzer/src/cli/load_cargo.rs | |||
@@ -21,7 +21,6 @@ pub fn load_cargo( | |||
21 | let ws = ProjectWorkspace::load( | 21 | let ws = ProjectWorkspace::load( |
22 | root, | 22 | root, |
23 | &CargoConfig { load_out_dirs_from_check, ..Default::default() }, | 23 | &CargoConfig { load_out_dirs_from_check, ..Default::default() }, |
24 | true, | ||
25 | )?; | 24 | )?; |
26 | 25 | ||
27 | let (sender, receiver) = unbounded(); | 26 | let (sender, receiver) = unbounded(); |
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 74a021dbf..d16796590 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs | |||
@@ -49,7 +49,6 @@ pub struct Config { | |||
49 | pub hover: HoverConfig, | 49 | pub hover: HoverConfig, |
50 | pub semantic_tokens_refresh: bool, | 50 | pub semantic_tokens_refresh: bool, |
51 | 51 | ||
52 | pub with_sysroot: bool, | ||
53 | pub linked_projects: Vec<LinkedProject>, | 52 | pub linked_projects: Vec<LinkedProject>, |
54 | pub root_path: AbsPathBuf, | 53 | pub root_path: AbsPathBuf, |
55 | } | 54 | } |
@@ -155,7 +154,6 @@ impl Config { | |||
155 | Config { | 154 | Config { |
156 | client_caps: ClientCapsConfig::default(), | 155 | client_caps: ClientCapsConfig::default(), |
157 | 156 | ||
158 | with_sysroot: true, | ||
159 | publish_diagnostics: true, | 157 | publish_diagnostics: true, |
160 | diagnostics: DiagnosticsConfig::default(), | 158 | diagnostics: DiagnosticsConfig::default(), |
161 | diagnostics_map: DiagnosticsMapConfig::default(), | 159 | diagnostics_map: DiagnosticsMapConfig::default(), |
@@ -209,7 +207,6 @@ impl Config { | |||
209 | 207 | ||
210 | let data = ConfigData::from_json(json); | 208 | let data = ConfigData::from_json(json); |
211 | 209 | ||
212 | self.with_sysroot = data.withSysroot; | ||
213 | self.publish_diagnostics = data.diagnostics_enable; | 210 | self.publish_diagnostics = data.diagnostics_enable; |
214 | self.diagnostics = DiagnosticsConfig { | 211 | self.diagnostics = DiagnosticsConfig { |
215 | disable_experimental: !data.diagnostics_enableExperimental, | 212 | disable_experimental: !data.diagnostics_enableExperimental, |
@@ -246,6 +243,7 @@ impl Config { | |||
246 | load_out_dirs_from_check: data.cargo_loadOutDirsFromCheck, | 243 | load_out_dirs_from_check: data.cargo_loadOutDirsFromCheck, |
247 | target: data.cargo_target.clone(), | 244 | target: data.cargo_target.clone(), |
248 | rustc_source: rustc_source, | 245 | rustc_source: rustc_source, |
246 | no_sysroot: data.cargo_noSysroot, | ||
249 | }; | 247 | }; |
250 | self.runnables = RunnablesConfig { | 248 | self.runnables = RunnablesConfig { |
251 | override_cargo: data.runnables_overrideCargo, | 249 | override_cargo: data.runnables_overrideCargo, |
@@ -398,13 +396,10 @@ impl Config { | |||
398 | } | 396 | } |
399 | 397 | ||
400 | if let Some(code_action) = &doc_caps.code_action { | 398 | if let Some(code_action) = &doc_caps.code_action { |
401 | match (code_action.data_support, &code_action.resolve_support) { | 399 | if let Some(resolve_support) = &code_action.resolve_support { |
402 | (Some(true), Some(resolve_support)) => { | 400 | if resolve_support.properties.iter().any(|it| it == "edit") { |
403 | if resolve_support.properties.iter().any(|it| it == "edit") { | 401 | self.client_caps.code_action_resolve = true; |
404 | self.client_caps.code_action_resolve = true; | ||
405 | } | ||
406 | } | 402 | } |
407 | _ => (), | ||
408 | } | 403 | } |
409 | } | 404 | } |
410 | } | 405 | } |
@@ -495,6 +490,7 @@ config_data! { | |||
495 | cargo_loadOutDirsFromCheck: bool = false, | 490 | cargo_loadOutDirsFromCheck: bool = false, |
496 | cargo_noDefaultFeatures: bool = false, | 491 | cargo_noDefaultFeatures: bool = false, |
497 | cargo_target: Option<String> = None, | 492 | cargo_target: Option<String> = None, |
493 | cargo_noSysroot: bool = false, | ||
498 | 494 | ||
499 | checkOnSave_enable: bool = true, | 495 | checkOnSave_enable: bool = true, |
500 | checkOnSave_allFeatures: Option<bool> = None, | 496 | checkOnSave_allFeatures: Option<bool> = None, |
@@ -547,7 +543,6 @@ config_data! { | |||
547 | rustfmt_extraArgs: Vec<String> = Vec::new(), | 543 | rustfmt_extraArgs: Vec<String> = Vec::new(), |
548 | rustfmt_overrideCommand: Option<Vec<String>> = None, | 544 | rustfmt_overrideCommand: Option<Vec<String>> = None, |
549 | 545 | ||
550 | withSysroot: bool = true, | ||
551 | rustcSource : Option<String> = None, | 546 | rustcSource : Option<String> = None, |
552 | } | 547 | } |
553 | } | 548 | } |
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 95659b0db..782797e85 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs | |||
@@ -1322,6 +1322,28 @@ pub(crate) fn handle_open_docs( | |||
1322 | Ok(remote.and_then(|remote| Url::parse(&remote).ok())) | 1322 | Ok(remote.and_then(|remote| Url::parse(&remote).ok())) |
1323 | } | 1323 | } |
1324 | 1324 | ||
1325 | pub(crate) fn handle_open_cargo_toml( | ||
1326 | snap: GlobalStateSnapshot, | ||
1327 | params: lsp_ext::OpenCargoTomlParams, | ||
1328 | ) -> Result<Option<lsp_types::GotoDefinitionResponse>> { | ||
1329 | let _p = profile::span("handle_open_cargo_toml"); | ||
1330 | let file_id = from_proto::file_id(&snap, ¶ms.text_document.uri)?; | ||
1331 | let maybe_cargo_spec = CargoTargetSpec::for_file(&snap, file_id)?; | ||
1332 | if maybe_cargo_spec.is_none() { | ||
1333 | return Ok(None); | ||
1334 | } | ||
1335 | |||
1336 | let cargo_spec = maybe_cargo_spec.unwrap(); | ||
1337 | let cargo_toml_path = cargo_spec.workspace_root.join("Cargo.toml"); | ||
1338 | if !cargo_toml_path.exists() { | ||
1339 | return Ok(None); | ||
1340 | } | ||
1341 | let cargo_toml_url = to_proto::url_from_abs_path(&cargo_toml_path); | ||
1342 | let cargo_toml_location = Location::new(cargo_toml_url, Range::default()); | ||
1343 | let res = lsp_types::GotoDefinitionResponse::from(cargo_toml_location); | ||
1344 | Ok(Some(res)) | ||
1345 | } | ||
1346 | |||
1325 | fn implementation_title(count: usize) -> String { | 1347 | fn implementation_title(count: usize) -> String { |
1326 | if count == 1 { | 1348 | if count == 1 { |
1327 | "1 implementation".into() | 1349 | "1 implementation".into() |
diff --git a/crates/rust-analyzer/src/lsp_ext.rs b/crates/rust-analyzer/src/lsp_ext.rs index a7c3028e4..a5c65fa3e 100644 --- a/crates/rust-analyzer/src/lsp_ext.rs +++ b/crates/rust-analyzer/src/lsp_ext.rs | |||
@@ -354,3 +354,17 @@ impl Request for ExternalDocs { | |||
354 | type Result = Option<lsp_types::Url>; | 354 | type Result = Option<lsp_types::Url>; |
355 | const METHOD: &'static str = "experimental/externalDocs"; | 355 | const METHOD: &'static str = "experimental/externalDocs"; |
356 | } | 356 | } |
357 | |||
358 | pub enum OpenCargoToml {} | ||
359 | |||
360 | impl Request for OpenCargoToml { | ||
361 | type Params = OpenCargoTomlParams; | ||
362 | type Result = Option<lsp_types::GotoDefinitionResponse>; | ||
363 | const METHOD: &'static str = "experimental/openCargoToml"; | ||
364 | } | ||
365 | |||
366 | #[derive(Serialize, Deserialize, Debug)] | ||
367 | #[serde(rename_all = "camelCase")] | ||
368 | pub struct OpenCargoTomlParams { | ||
369 | pub text_document: TextDocumentIdentifier, | ||
370 | } | ||
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index 6e6cac42e..68a53bbcb 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs | |||
@@ -438,6 +438,7 @@ impl GlobalState { | |||
438 | .on::<lsp_ext::CodeActionResolveRequest>(handlers::handle_code_action_resolve) | 438 | .on::<lsp_ext::CodeActionResolveRequest>(handlers::handle_code_action_resolve) |
439 | .on::<lsp_ext::HoverRequest>(handlers::handle_hover) | 439 | .on::<lsp_ext::HoverRequest>(handlers::handle_hover) |
440 | .on::<lsp_ext::ExternalDocs>(handlers::handle_open_docs) | 440 | .on::<lsp_ext::ExternalDocs>(handlers::handle_open_docs) |
441 | .on::<lsp_ext::OpenCargoToml>(handlers::handle_open_cargo_toml) | ||
441 | .on::<lsp_types::request::OnTypeFormatting>(handlers::handle_on_type_formatting) | 442 | .on::<lsp_types::request::OnTypeFormatting>(handlers::handle_on_type_formatting) |
442 | .on::<lsp_types::request::DocumentSymbolRequest>(handlers::handle_document_symbol) | 443 | .on::<lsp_types::request::DocumentSymbolRequest>(handlers::handle_document_symbol) |
443 | .on::<lsp_types::request::WorkspaceSymbol>(handlers::handle_workspace_symbol) | 444 | .on::<lsp_types::request::WorkspaceSymbol>(handlers::handle_workspace_symbol) |
diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs index 11c8d0e5f..fa6e09f42 100644 --- a/crates/rust-analyzer/src/reload.rs +++ b/crates/rust-analyzer/src/reload.rs | |||
@@ -96,17 +96,12 @@ impl GlobalState { | |||
96 | self.task_pool.handle.spawn({ | 96 | self.task_pool.handle.spawn({ |
97 | let linked_projects = self.config.linked_projects.clone(); | 97 | let linked_projects = self.config.linked_projects.clone(); |
98 | let cargo_config = self.config.cargo.clone(); | 98 | let cargo_config = self.config.cargo.clone(); |
99 | let with_sysroot = self.config.with_sysroot.clone(); | ||
100 | move || { | 99 | move || { |
101 | let workspaces = linked_projects | 100 | let workspaces = linked_projects |
102 | .iter() | 101 | .iter() |
103 | .map(|project| match project { | 102 | .map(|project| match project { |
104 | LinkedProject::ProjectManifest(manifest) => { | 103 | LinkedProject::ProjectManifest(manifest) => { |
105 | project_model::ProjectWorkspace::load( | 104 | project_model::ProjectWorkspace::load(manifest.clone(), &cargo_config) |
106 | manifest.clone(), | ||
107 | &cargo_config, | ||
108 | with_sysroot, | ||
109 | ) | ||
110 | } | 105 | } |
111 | LinkedProject::InlineJsonProject(it) => { | 106 | LinkedProject::InlineJsonProject(it) => { |
112 | project_model::ProjectWorkspace::load_inline(it.clone()) | 107 | project_model::ProjectWorkspace::load_inline(it.clone()) |
diff --git a/crates/rust-analyzer/tests/rust-analyzer/support.rs b/crates/rust-analyzer/tests/rust-analyzer/support.rs index fe9362bc0..b210b98f0 100644 --- a/crates/rust-analyzer/tests/rust-analyzer/support.rs +++ b/crates/rust-analyzer/tests/rust-analyzer/support.rs | |||
@@ -12,7 +12,7 @@ use lsp_types::{ | |||
12 | notification::Exit, request::Shutdown, TextDocumentIdentifier, Url, WorkDoneProgress, | 12 | notification::Exit, request::Shutdown, TextDocumentIdentifier, Url, WorkDoneProgress, |
13 | }; | 13 | }; |
14 | use lsp_types::{ProgressParams, ProgressParamsValue}; | 14 | use lsp_types::{ProgressParams, ProgressParamsValue}; |
15 | use project_model::ProjectManifest; | 15 | use project_model::{CargoConfig, ProjectManifest}; |
16 | use rust_analyzer::{ | 16 | use rust_analyzer::{ |
17 | config::{ClientCapsConfig, Config, FilesConfig, FilesWatcher, LinkedProject}, | 17 | config::{ClientCapsConfig, Config, FilesConfig, FilesWatcher, LinkedProject}, |
18 | main_loop, | 18 | main_loop, |
@@ -47,8 +47,8 @@ impl<'a> Project<'a> { | |||
47 | self | 47 | self |
48 | } | 48 | } |
49 | 49 | ||
50 | pub(crate) fn with_sysroot(mut self, sysroot: bool) -> Project<'a> { | 50 | pub(crate) fn with_sysroot(mut self, yes: bool) -> Project<'a> { |
51 | self.with_sysroot = sysroot; | 51 | self.with_sysroot = yes; |
52 | self | 52 | self |
53 | } | 53 | } |
54 | 54 | ||
@@ -90,7 +90,7 @@ impl<'a> Project<'a> { | |||
90 | work_done_progress: true, | 90 | work_done_progress: true, |
91 | ..Default::default() | 91 | ..Default::default() |
92 | }, | 92 | }, |
93 | with_sysroot: self.with_sysroot, | 93 | cargo: CargoConfig { no_sysroot: !self.with_sysroot, ..Default::default() }, |
94 | linked_projects, | 94 | linked_projects, |
95 | files: FilesConfig { watcher: FilesWatcher::Client, exclude: Vec::new() }, | 95 | files: FilesConfig { watcher: FilesWatcher::Client, exclude: Vec::new() }, |
96 | ..Config::new(tmp_dir_path) | 96 | ..Config::new(tmp_dir_path) |
diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md index 77d4e0ec9..db9727bee 100644 --- a/docs/dev/lsp-extensions.md +++ b/docs/dev/lsp-extensions.md | |||
@@ -1,8 +1,8 @@ | |||
1 | <!--- | 1 | <!--- |
2 | lsp_ext.rs hash: 4f86fb54e4b2870e | 2 | lsp_ext.rs hash: 9d5daed5b25dc4f6 |
3 | 3 | ||
4 | If you need to change the above hash to make the test pass, please check if you | 4 | If you need to change the above hash to make the test pass, please check if you |
5 | need to adjust this doc as well and ping this issue: | 5 | need to adjust this doc as well and ping this issue: |
6 | 6 | ||
7 | https://github.com/rust-analyzer/rust-analyzer/issues/4604 | 7 | https://github.com/rust-analyzer/rust-analyzer/issues/4604 |
8 | 8 | ||
@@ -537,3 +537,28 @@ Such actions on the client side are appended to a hover bottom as command links: | |||
537 | +-----------------------------+ | 537 | +-----------------------------+ |
538 | ... | 538 | ... |
539 | ``` | 539 | ``` |
540 | |||
541 | ## Open Cargo.toml | ||
542 | |||
543 | **Issue:** https://github.com/rust-analyzer/rust-analyzer/issues/6462 | ||
544 | |||
545 | This request is sent from client to server to open the current project's Cargo.toml | ||
546 | |||
547 | **Method:** `experimental/openCargoToml` | ||
548 | |||
549 | **Request:** `OpenCargoTomlParams` | ||
550 | |||
551 | **Response:** `Location | null` | ||
552 | |||
553 | |||
554 | ### Example | ||
555 | |||
556 | ```rust | ||
557 | // Cargo.toml | ||
558 | [package] | ||
559 | // src/main.rs | ||
560 | |||
561 | /* cursor here*/ | ||
562 | ``` | ||
563 | |||
564 | `experimental/openCargoToml` returns a single `Link` to the start of the `[package]` keyword. | ||
diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json index 2b6493eef..83ef00058 100644 --- a/editors/code/package-lock.json +++ b/editors/code/package-lock.json | |||
@@ -1,2752 +1,8 @@ | |||
1 | { | 1 | { |
2 | "name": "rust-analyzer", | 2 | "name": "rust-analyzer", |
3 | "version": "0.4.0-dev", | 3 | "version": "0.4.0-dev", |
4 | "lockfileVersion": 2, | 4 | "lockfileVersion": 1, |
5 | "requires": true, | 5 | "requires": true, |
6 | "packages": { | ||
7 | "": { | ||
8 | "name": "rust-analyzer", | ||
9 | "version": "0.4.0-dev", | ||
10 | "license": "MIT OR Apache-2.0", | ||
11 | "dependencies": { | ||
12 | "node-fetch": "^2.6.1", | ||
13 | "vscode-languageclient": "7.0.0-next.12" | ||
14 | }, | ||
15 | "devDependencies": { | ||
16 | "@rollup/plugin-commonjs": "^13.0.2", | ||
17 | "@rollup/plugin-node-resolve": "^8.4.0", | ||
18 | "@types/glob": "^7.1.3", | ||
19 | "@types/mocha": "^7.0.2", | ||
20 | "@types/node": "~12.7.0", | ||
21 | "@types/node-fetch": "^2.5.7", | ||
22 | "@types/vscode": "^1.47.1", | ||
23 | "@typescript-eslint/eslint-plugin": "^3.10.1", | ||
24 | "@typescript-eslint/parser": "^3.10.1", | ||
25 | "eslint": "^7.8.0", | ||
26 | "glob": "^7.1.6", | ||
27 | "mocha": "^8.1.3", | ||
28 | "rollup": "^2.26.9", | ||
29 | "tslib": "^2.0.1", | ||
30 | "typescript": "^3.9.7", | ||
31 | "typescript-formatter": "^7.2.2", | ||
32 | "vsce": "^1.79.5", | ||
33 | "vscode-test": "^1.4.0" | ||
34 | }, | ||
35 | "engines": { | ||
36 | "vscode": "^1.47.1" | ||
37 | } | ||
38 | }, | ||
39 | "node_modules/@babel/code-frame": { | ||
40 | "version": "7.10.4", | ||
41 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", | ||
42 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", | ||
43 | "dev": true, | ||
44 | "dependencies": { | ||
45 | "@babel/highlight": "^7.10.4" | ||
46 | } | ||
47 | }, | ||
48 | "node_modules/@babel/helper-validator-identifier": { | ||
49 | "version": "7.10.4", | ||
50 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", | ||
51 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", | ||
52 | "dev": true | ||
53 | }, | ||
54 | "node_modules/@babel/highlight": { | ||
55 | "version": "7.10.4", | ||
56 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", | ||
57 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", | ||
58 | "dev": true, | ||
59 | "dependencies": { | ||
60 | "@babel/helper-validator-identifier": "^7.10.4", | ||
61 | "chalk": "^2.0.0", | ||
62 | "js-tokens": "^4.0.0" | ||
63 | } | ||
64 | }, | ||
65 | "node_modules/@eslint/eslintrc": { | ||
66 | "version": "0.1.0", | ||
67 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.0.tgz", | ||
68 | "integrity": "sha512-bfL5365QSCmH6cPeFT7Ywclj8C7LiF7sO6mUGzZhtAMV7iID1Euq6740u/SRi4C80NOnVz/CEfK8/HO+nCAPJg==", | ||
69 | "dev": true, | ||
70 | "dependencies": { | ||
71 | "ajv": "^6.12.4", | ||
72 | "debug": "^4.1.1", | ||
73 | "import-fresh": "^3.2.1", | ||
74 | "strip-json-comments": "^3.1.1" | ||
75 | } | ||
76 | }, | ||
77 | "node_modules/@rollup/plugin-commonjs": { | ||
78 | "version": "13.0.2", | ||
79 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-13.0.2.tgz", | ||
80 | "integrity": "sha512-9JXf2k8xqvMYfqmhgtB6eCgMN9fbxwF1XDF3mGKJc6pkAmt0jnsqurxQ0tC1akQKNSXCm7c3unQxa3zuxtZ7mQ==", | ||
81 | "dev": true, | ||
82 | "dependencies": { | ||
83 | "@rollup/pluginutils": "^3.0.8", | ||
84 | "commondir": "^1.0.1", | ||
85 | "estree-walker": "^1.0.1", | ||
86 | "glob": "^7.1.2", | ||
87 | "is-reference": "^1.1.2", | ||
88 | "magic-string": "^0.25.2", | ||
89 | "resolve": "^1.11.0" | ||
90 | } | ||
91 | }, | ||
92 | "node_modules/@rollup/plugin-node-resolve": { | ||
93 | "version": "8.4.0", | ||
94 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz", | ||
95 | "integrity": "sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ==", | ||
96 | "dev": true, | ||
97 | "dependencies": { | ||
98 | "@rollup/pluginutils": "^3.1.0", | ||
99 | "@types/resolve": "1.17.1", | ||
100 | "builtin-modules": "^3.1.0", | ||
101 | "deep-freeze": "^0.0.1", | ||
102 | "deepmerge": "^4.2.2", | ||
103 | "is-module": "^1.0.0", | ||
104 | "resolve": "^1.17.0" | ||
105 | } | ||
106 | }, | ||
107 | "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { | ||
108 | "version": "3.1.0", | ||
109 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", | ||
110 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", | ||
111 | "dev": true, | ||
112 | "dependencies": { | ||
113 | "@types/estree": "0.0.39", | ||
114 | "estree-walker": "^1.0.1", | ||
115 | "picomatch": "^2.2.2" | ||
116 | } | ||
117 | }, | ||
118 | "node_modules/@rollup/pluginutils": { | ||
119 | "version": "3.0.10", | ||
120 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.10.tgz", | ||
121 | "integrity": "sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==", | ||
122 | "dev": true, | ||
123 | "dependencies": { | ||
124 | "@types/estree": "0.0.39", | ||
125 | "estree-walker": "^1.0.1", | ||
126 | "picomatch": "^2.2.2" | ||
127 | } | ||
128 | }, | ||
129 | "node_modules/@types/color-name": { | ||
130 | "version": "1.1.1", | ||
131 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", | ||
132 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", | ||
133 | "dev": true | ||
134 | }, | ||
135 | "node_modules/@types/eslint-visitor-keys": { | ||
136 | "version": "1.0.0", | ||
137 | "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", | ||
138 | "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", | ||
139 | "dev": true | ||
140 | }, | ||
141 | "node_modules/@types/estree": { | ||
142 | "version": "0.0.39", | ||
143 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", | ||
144 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", | ||
145 | "dev": true | ||
146 | }, | ||
147 | "node_modules/@types/glob": { | ||
148 | "version": "7.1.3", | ||
149 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", | ||
150 | "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", | ||
151 | "dev": true, | ||
152 | "dependencies": { | ||
153 | "@types/minimatch": "*", | ||
154 | "@types/node": "*" | ||
155 | } | ||
156 | }, | ||
157 | "node_modules/@types/json-schema": { | ||
158 | "version": "7.0.6", | ||
159 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", | ||
160 | "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", | ||
161 | "dev": true | ||
162 | }, | ||
163 | "node_modules/@types/minimatch": { | ||
164 | "version": "3.0.3", | ||
165 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", | ||
166 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", | ||
167 | "dev": true | ||
168 | }, | ||
169 | "node_modules/@types/mocha": { | ||
170 | "version": "7.0.2", | ||
171 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", | ||
172 | "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", | ||
173 | "dev": true | ||
174 | }, | ||
175 | "node_modules/@types/node": { | ||
176 | "version": "12.7.12", | ||
177 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.12.tgz", | ||
178 | "integrity": "sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ==", | ||
179 | "dev": true | ||
180 | }, | ||
181 | "node_modules/@types/node-fetch": { | ||
182 | "version": "2.5.7", | ||
183 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", | ||
184 | "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", | ||
185 | "dev": true, | ||
186 | "dependencies": { | ||
187 | "@types/node": "*", | ||
188 | "form-data": "^3.0.0" | ||
189 | } | ||
190 | }, | ||
191 | "node_modules/@types/resolve": { | ||
192 | "version": "1.17.1", | ||
193 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", | ||
194 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", | ||
195 | "dev": true, | ||
196 | "dependencies": { | ||
197 | "@types/node": "*" | ||
198 | } | ||
199 | }, | ||
200 | "node_modules/@types/vscode": { | ||
201 | "version": "1.48.0", | ||
202 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.48.0.tgz", | ||
203 | "integrity": "sha512-sZJKzsJz1gSoFXcOJWw3fnKl2sseUgZmvB4AJZS+Fea+bC/jfGPVhmFL/FfQHld/TKtukVONsmoD3Pkyx9iadg==", | ||
204 | "dev": true | ||
205 | }, | ||
206 | "node_modules/@typescript-eslint/eslint-plugin": { | ||
207 | "version": "3.10.1", | ||
208 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", | ||
209 | "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", | ||
210 | "dev": true, | ||
211 | "dependencies": { | ||
212 | "@typescript-eslint/experimental-utils": "3.10.1", | ||
213 | "debug": "^4.1.1", | ||
214 | "functional-red-black-tree": "^1.0.1", | ||
215 | "regexpp": "^3.0.0", | ||
216 | "semver": "^7.3.2", | ||
217 | "tsutils": "^3.17.1" | ||
218 | } | ||
219 | }, | ||
220 | "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { | ||
221 | "version": "7.3.2", | ||
222 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", | ||
223 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", | ||
224 | "dev": true | ||
225 | }, | ||
226 | "node_modules/@typescript-eslint/experimental-utils": { | ||
227 | "version": "3.10.1", | ||
228 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", | ||
229 | "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", | ||
230 | "dev": true, | ||
231 | "dependencies": { | ||
232 | "@types/json-schema": "^7.0.3", | ||
233 | "@typescript-eslint/types": "3.10.1", | ||
234 | "@typescript-eslint/typescript-estree": "3.10.1", | ||
235 | "eslint-scope": "^5.0.0", | ||
236 | "eslint-utils": "^2.0.0" | ||
237 | } | ||
238 | }, | ||
239 | "node_modules/@typescript-eslint/parser": { | ||
240 | "version": "3.10.1", | ||
241 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", | ||
242 | "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", | ||
243 | "dev": true, | ||
244 | "dependencies": { | ||
245 | "@types/eslint-visitor-keys": "^1.0.0", | ||
246 | "@typescript-eslint/experimental-utils": "3.10.1", | ||
247 | "@typescript-eslint/types": "3.10.1", | ||
248 | "@typescript-eslint/typescript-estree": "3.10.1", | ||
249 | "eslint-visitor-keys": "^1.1.0" | ||
250 | } | ||
251 | }, | ||
252 | "node_modules/@typescript-eslint/types": { | ||
253 | "version": "3.10.1", | ||
254 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", | ||
255 | "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", | ||
256 | "dev": true | ||
257 | }, | ||
258 | "node_modules/@typescript-eslint/typescript-estree": { | ||
259 | "version": "3.10.1", | ||
260 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", | ||
261 | "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", | ||
262 | "dev": true, | ||
263 | "dependencies": { | ||
264 | "@typescript-eslint/types": "3.10.1", | ||
265 | "@typescript-eslint/visitor-keys": "3.10.1", | ||
266 | "debug": "^4.1.1", | ||
267 | "glob": "^7.1.6", | ||
268 | "is-glob": "^4.0.1", | ||
269 | "lodash": "^4.17.15", | ||
270 | "semver": "^7.3.2", | ||
271 | "tsutils": "^3.17.1" | ||
272 | } | ||
273 | }, | ||
274 | "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { | ||
275 | "version": "7.3.2", | ||
276 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", | ||
277 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", | ||
278 | "dev": true | ||
279 | }, | ||
280 | "node_modules/@typescript-eslint/visitor-keys": { | ||
281 | "version": "3.10.1", | ||
282 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", | ||
283 | "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", | ||
284 | "dev": true, | ||
285 | "dependencies": { | ||
286 | "eslint-visitor-keys": "^1.1.0" | ||
287 | } | ||
288 | }, | ||
289 | "node_modules/acorn": { | ||
290 | "version": "7.4.0", | ||
291 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", | ||
292 | "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", | ||
293 | "dev": true | ||
294 | }, | ||
295 | "node_modules/acorn-jsx": { | ||
296 | "version": "5.2.0", | ||
297 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", | ||
298 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", | ||
299 | "dev": true | ||
300 | }, | ||
301 | "node_modules/agent-base": { | ||
302 | "version": "4.3.0", | ||
303 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", | ||
304 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", | ||
305 | "dev": true, | ||
306 | "dependencies": { | ||
307 | "es6-promisify": "^5.0.0" | ||
308 | } | ||
309 | }, | ||
310 | "node_modules/ajv": { | ||
311 | "version": "6.12.4", | ||
312 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", | ||
313 | "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", | ||
314 | "dev": true, | ||
315 | "dependencies": { | ||
316 | "fast-deep-equal": "^3.1.1", | ||
317 | "fast-json-stable-stringify": "^2.0.0", | ||
318 | "json-schema-traverse": "^0.4.1", | ||
319 | "uri-js": "^4.2.2" | ||
320 | } | ||
321 | }, | ||
322 | "node_modules/ansi-colors": { | ||
323 | "version": "4.1.1", | ||
324 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", | ||
325 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", | ||
326 | "dev": true | ||
327 | }, | ||
328 | "node_modules/ansi-regex": { | ||
329 | "version": "5.0.0", | ||
330 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", | ||
331 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", | ||
332 | "dev": true | ||
333 | }, | ||
334 | "node_modules/ansi-styles": { | ||
335 | "version": "3.2.1", | ||
336 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", | ||
337 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", | ||
338 | "dev": true, | ||
339 | "dependencies": { | ||
340 | "color-convert": "^1.9.0" | ||
341 | } | ||
342 | }, | ||
343 | "node_modules/anymatch": { | ||
344 | "version": "3.1.1", | ||
345 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", | ||
346 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", | ||
347 | "dev": true, | ||
348 | "dependencies": { | ||
349 | "normalize-path": "^3.0.0", | ||
350 | "picomatch": "^2.0.4" | ||
351 | } | ||
352 | }, | ||
353 | "node_modules/argparse": { | ||
354 | "version": "1.0.10", | ||
355 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", | ||
356 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", | ||
357 | "dev": true, | ||
358 | "dependencies": { | ||
359 | "sprintf-js": "~1.0.2" | ||
360 | } | ||
361 | }, | ||
362 | "node_modules/array.prototype.map": { | ||
363 | "version": "1.0.2", | ||
364 | "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", | ||
365 | "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", | ||
366 | "dev": true, | ||
367 | "dependencies": { | ||
368 | "define-properties": "^1.1.3", | ||
369 | "es-abstract": "^1.17.0-next.1", | ||
370 | "es-array-method-boxes-properly": "^1.0.0", | ||
371 | "is-string": "^1.0.4" | ||
372 | } | ||
373 | }, | ||
374 | "node_modules/astral-regex": { | ||
375 | "version": "1.0.0", | ||
376 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", | ||
377 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", | ||
378 | "dev": true | ||
379 | }, | ||
380 | "node_modules/asynckit": { | ||
381 | "version": "0.4.0", | ||
382 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | ||
383 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", | ||
384 | "dev": true | ||
385 | }, | ||
386 | "node_modules/azure-devops-node-api": { | ||
387 | "version": "7.2.0", | ||
388 | "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz", | ||
389 | "integrity": "sha512-pMfGJ6gAQ7LRKTHgiRF+8iaUUeGAI0c8puLaqHLc7B8AR7W6GJLozK9RFeUHFjEGybC9/EB3r67WPd7e46zQ8w==", | ||
390 | "dev": true, | ||
391 | "dependencies": { | ||
392 | "os": "0.1.1", | ||
393 | "tunnel": "0.0.4", | ||
394 | "typed-rest-client": "1.2.0", | ||
395 | "underscore": "1.8.3" | ||
396 | } | ||
397 | }, | ||
398 | "node_modules/balanced-match": { | ||
399 | "version": "1.0.0", | ||
400 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", | ||
401 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", | ||
402 | "dev": true | ||
403 | }, | ||
404 | "node_modules/binary-extensions": { | ||
405 | "version": "2.1.0", | ||
406 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", | ||
407 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", | ||
408 | "dev": true | ||
409 | }, | ||
410 | "node_modules/boolbase": { | ||
411 | "version": "1.0.0", | ||
412 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", | ||
413 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", | ||
414 | "dev": true | ||
415 | }, | ||
416 | "node_modules/brace-expansion": { | ||
417 | "version": "1.1.11", | ||
418 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | ||
419 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | ||
420 | "dev": true, | ||
421 | "dependencies": { | ||
422 | "balanced-match": "^1.0.0", | ||
423 | "concat-map": "0.0.1" | ||
424 | } | ||
425 | }, | ||
426 | "node_modules/braces": { | ||
427 | "version": "3.0.2", | ||
428 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", | ||
429 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", | ||
430 | "dev": true, | ||
431 | "dependencies": { | ||
432 | "fill-range": "^7.0.1" | ||
433 | } | ||
434 | }, | ||
435 | "node_modules/browser-stdout": { | ||
436 | "version": "1.3.1", | ||
437 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", | ||
438 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", | ||
439 | "dev": true | ||
440 | }, | ||
441 | "node_modules/buffer-crc32": { | ||
442 | "version": "0.2.13", | ||
443 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", | ||
444 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", | ||
445 | "dev": true | ||
446 | }, | ||
447 | "node_modules/builtin-modules": { | ||
448 | "version": "3.1.0", | ||
449 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", | ||
450 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", | ||
451 | "dev": true | ||
452 | }, | ||
453 | "node_modules/callsites": { | ||
454 | "version": "3.1.0", | ||
455 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", | ||
456 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", | ||
457 | "dev": true | ||
458 | }, | ||
459 | "node_modules/camelcase": { | ||
460 | "version": "5.3.1", | ||
461 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", | ||
462 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", | ||
463 | "dev": true | ||
464 | }, | ||
465 | "node_modules/chalk": { | ||
466 | "version": "2.4.2", | ||
467 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", | ||
468 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", | ||
469 | "dev": true, | ||
470 | "dependencies": { | ||
471 | "ansi-styles": "^3.2.1", | ||
472 | "escape-string-regexp": "^1.0.5", | ||
473 | "supports-color": "^5.3.0" | ||
474 | } | ||
475 | }, | ||
476 | "node_modules/cheerio": { | ||
477 | "version": "1.0.0-rc.3", | ||
478 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", | ||
479 | "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", | ||
480 | "dev": true, | ||
481 | "dependencies": { | ||
482 | "css-select": "~1.2.0", | ||
483 | "dom-serializer": "~0.1.1", | ||
484 | "entities": "~1.1.1", | ||
485 | "htmlparser2": "^3.9.1", | ||
486 | "lodash": "^4.15.0", | ||
487 | "parse5": "^3.0.1" | ||
488 | } | ||
489 | }, | ||
490 | "node_modules/chokidar": { | ||
491 | "version": "3.4.2", | ||
492 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", | ||
493 | "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", | ||
494 | "dev": true, | ||
495 | "dependencies": { | ||
496 | "anymatch": "~3.1.1", | ||
497 | "braces": "~3.0.2", | ||
498 | "fsevents": "~2.1.2", | ||
499 | "glob-parent": "~5.1.0", | ||
500 | "is-binary-path": "~2.1.0", | ||
501 | "is-glob": "~4.0.1", | ||
502 | "normalize-path": "~3.0.0", | ||
503 | "readdirp": "~3.4.0" | ||
504 | }, | ||
505 | "optionalDependencies": { | ||
506 | "fsevents": "~2.1.2" | ||
507 | } | ||
508 | }, | ||
509 | "node_modules/cliui": { | ||
510 | "version": "5.0.0", | ||
511 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", | ||
512 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", | ||
513 | "dev": true, | ||
514 | "dependencies": { | ||
515 | "string-width": "^3.1.0", | ||
516 | "strip-ansi": "^5.2.0", | ||
517 | "wrap-ansi": "^5.1.0" | ||
518 | } | ||
519 | }, | ||
520 | "node_modules/cliui/node_modules/ansi-regex": { | ||
521 | "version": "4.1.0", | ||
522 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", | ||
523 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", | ||
524 | "dev": true | ||
525 | }, | ||
526 | "node_modules/cliui/node_modules/strip-ansi": { | ||
527 | "version": "5.2.0", | ||
528 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||
529 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||
530 | "dev": true, | ||
531 | "dependencies": { | ||
532 | "ansi-regex": "^4.1.0" | ||
533 | } | ||
534 | }, | ||
535 | "node_modules/color-convert": { | ||
536 | "version": "1.9.3", | ||
537 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", | ||
538 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", | ||
539 | "dev": true, | ||
540 | "dependencies": { | ||
541 | "color-name": "1.1.3" | ||
542 | } | ||
543 | }, | ||
544 | "node_modules/color-name": { | ||
545 | "version": "1.1.3", | ||
546 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", | ||
547 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", | ||
548 | "dev": true | ||
549 | }, | ||
550 | "node_modules/combined-stream": { | ||
551 | "version": "1.0.8", | ||
552 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", | ||
553 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", | ||
554 | "dev": true, | ||
555 | "dependencies": { | ||
556 | "delayed-stream": "~1.0.0" | ||
557 | } | ||
558 | }, | ||
559 | "node_modules/commander": { | ||
560 | "version": "2.20.3", | ||
561 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", | ||
562 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", | ||
563 | "dev": true | ||
564 | }, | ||
565 | "node_modules/commandpost": { | ||
566 | "version": "1.4.0", | ||
567 | "resolved": "https://registry.npmjs.org/commandpost/-/commandpost-1.4.0.tgz", | ||
568 | "integrity": "sha512-aE2Y4MTFJ870NuB/+2z1cXBhSBBzRydVVjzhFC4gtenEhpnj15yu0qptWGJsO9YGrcPZ3ezX8AWb1VA391MKpQ==", | ||
569 | "dev": true | ||
570 | }, | ||
571 | "node_modules/commondir": { | ||
572 | "version": "1.0.1", | ||
573 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", | ||
574 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", | ||
575 | "dev": true | ||
576 | }, | ||
577 | "node_modules/concat-map": { | ||
578 | "version": "0.0.1", | ||
579 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", | ||
580 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", | ||
581 | "dev": true | ||
582 | }, | ||
583 | "node_modules/cross-spawn": { | ||
584 | "version": "7.0.3", | ||
585 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", | ||
586 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", | ||
587 | "dev": true, | ||
588 | "dependencies": { | ||
589 | "path-key": "^3.1.0", | ||
590 | "shebang-command": "^2.0.0", | ||
591 | "which": "^2.0.1" | ||
592 | } | ||
593 | }, | ||
594 | "node_modules/css-select": { | ||
595 | "version": "1.2.0", | ||
596 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", | ||
597 | "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", | ||
598 | "dev": true, | ||
599 | "dependencies": { | ||
600 | "boolbase": "~1.0.0", | ||
601 | "css-what": "2.1", | ||
602 | "domutils": "1.5.1", | ||
603 | "nth-check": "~1.0.1" | ||
604 | } | ||
605 | }, | ||
606 | "node_modules/css-what": { | ||
607 | "version": "2.1.3", | ||
608 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", | ||
609 | "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", | ||
610 | "dev": true | ||
611 | }, | ||
612 | "node_modules/debug": { | ||
613 | "version": "4.1.1", | ||
614 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", | ||
615 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", | ||
616 | "dev": true, | ||
617 | "dependencies": { | ||
618 | "ms": "^2.1.1" | ||
619 | } | ||
620 | }, | ||
621 | "node_modules/decamelize": { | ||
622 | "version": "1.2.0", | ||
623 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", | ||
624 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", | ||
625 | "dev": true | ||
626 | }, | ||
627 | "node_modules/deep-freeze": { | ||
628 | "version": "0.0.1", | ||
629 | "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", | ||
630 | "integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=", | ||
631 | "dev": true | ||
632 | }, | ||
633 | "node_modules/deep-is": { | ||
634 | "version": "0.1.3", | ||
635 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", | ||
636 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", | ||
637 | "dev": true | ||
638 | }, | ||
639 | "node_modules/deepmerge": { | ||
640 | "version": "4.2.2", | ||
641 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", | ||
642 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", | ||
643 | "dev": true | ||
644 | }, | ||
645 | "node_modules/define-properties": { | ||
646 | "version": "1.1.3", | ||
647 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", | ||
648 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", | ||
649 | "dev": true, | ||
650 | "dependencies": { | ||
651 | "object-keys": "^1.0.12" | ||
652 | } | ||
653 | }, | ||
654 | "node_modules/delayed-stream": { | ||
655 | "version": "1.0.0", | ||
656 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", | ||
657 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", | ||
658 | "dev": true | ||
659 | }, | ||
660 | "node_modules/denodeify": { | ||
661 | "version": "1.2.1", | ||
662 | "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", | ||
663 | "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", | ||
664 | "dev": true | ||
665 | }, | ||
666 | "node_modules/diff": { | ||
667 | "version": "4.0.2", | ||
668 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", | ||
669 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", | ||
670 | "dev": true | ||
671 | }, | ||
672 | "node_modules/doctrine": { | ||
673 | "version": "3.0.0", | ||
674 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", | ||
675 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", | ||
676 | "dev": true, | ||
677 | "dependencies": { | ||
678 | "esutils": "^2.0.2" | ||
679 | } | ||
680 | }, | ||
681 | "node_modules/dom-serializer": { | ||
682 | "version": "0.1.1", | ||
683 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", | ||
684 | "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", | ||
685 | "dev": true, | ||
686 | "dependencies": { | ||
687 | "domelementtype": "^1.3.0", | ||
688 | "entities": "^1.1.1" | ||
689 | } | ||
690 | }, | ||
691 | "node_modules/domelementtype": { | ||
692 | "version": "1.3.1", | ||
693 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", | ||
694 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", | ||
695 | "dev": true | ||
696 | }, | ||
697 | "node_modules/domhandler": { | ||
698 | "version": "2.4.2", | ||
699 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", | ||
700 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", | ||
701 | "dev": true, | ||
702 | "dependencies": { | ||
703 | "domelementtype": "1" | ||
704 | } | ||
705 | }, | ||
706 | "node_modules/domutils": { | ||
707 | "version": "1.5.1", | ||
708 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", | ||
709 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", | ||
710 | "dev": true, | ||
711 | "dependencies": { | ||
712 | "dom-serializer": "0", | ||
713 | "domelementtype": "1" | ||
714 | } | ||
715 | }, | ||
716 | "node_modules/editorconfig": { | ||
717 | "version": "0.15.3", | ||
718 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", | ||
719 | "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", | ||
720 | "dev": true, | ||
721 | "dependencies": { | ||
722 | "commander": "^2.19.0", | ||
723 | "lru-cache": "^4.1.5", | ||
724 | "semver": "^5.6.0", | ||
725 | "sigmund": "^1.0.1" | ||
726 | } | ||
727 | }, | ||
728 | "node_modules/editorconfig/node_modules/semver": { | ||
729 | "version": "5.7.1", | ||
730 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
731 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | ||
732 | "dev": true | ||
733 | }, | ||
734 | "node_modules/emoji-regex": { | ||
735 | "version": "7.0.3", | ||
736 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", | ||
737 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", | ||
738 | "dev": true | ||
739 | }, | ||
740 | "node_modules/enquirer": { | ||
741 | "version": "2.3.6", | ||
742 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", | ||
743 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", | ||
744 | "dev": true, | ||
745 | "dependencies": { | ||
746 | "ansi-colors": "^4.1.1" | ||
747 | } | ||
748 | }, | ||
749 | "node_modules/entities": { | ||
750 | "version": "1.1.2", | ||
751 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", | ||
752 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", | ||
753 | "dev": true | ||
754 | }, | ||
755 | "node_modules/es-abstract": { | ||
756 | "version": "1.17.6", | ||
757 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", | ||
758 | "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", | ||
759 | "dev": true, | ||
760 | "dependencies": { | ||
761 | "es-to-primitive": "^1.2.1", | ||
762 | "function-bind": "^1.1.1", | ||
763 | "has": "^1.0.3", | ||
764 | "has-symbols": "^1.0.1", | ||
765 | "is-callable": "^1.2.0", | ||
766 | "is-regex": "^1.1.0", | ||
767 | "object-inspect": "^1.7.0", | ||
768 | "object-keys": "^1.1.1", | ||
769 | "object.assign": "^4.1.0", | ||
770 | "string.prototype.trimend": "^1.0.1", | ||
771 | "string.prototype.trimstart": "^1.0.1" | ||
772 | } | ||
773 | }, | ||
774 | "node_modules/es-array-method-boxes-properly": { | ||
775 | "version": "1.0.0", | ||
776 | "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", | ||
777 | "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", | ||
778 | "dev": true | ||
779 | }, | ||
780 | "node_modules/es-get-iterator": { | ||
781 | "version": "1.1.0", | ||
782 | "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", | ||
783 | "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", | ||
784 | "dev": true, | ||
785 | "dependencies": { | ||
786 | "es-abstract": "^1.17.4", | ||
787 | "has-symbols": "^1.0.1", | ||
788 | "is-arguments": "^1.0.4", | ||
789 | "is-map": "^2.0.1", | ||
790 | "is-set": "^2.0.1", | ||
791 | "is-string": "^1.0.5", | ||
792 | "isarray": "^2.0.5" | ||
793 | } | ||
794 | }, | ||
795 | "node_modules/es-to-primitive": { | ||
796 | "version": "1.2.1", | ||
797 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", | ||
798 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", | ||
799 | "dev": true, | ||
800 | "dependencies": { | ||
801 | "is-callable": "^1.1.4", | ||
802 | "is-date-object": "^1.0.1", | ||
803 | "is-symbol": "^1.0.2" | ||
804 | } | ||
805 | }, | ||
806 | "node_modules/es6-promise": { | ||
807 | "version": "4.2.8", | ||
808 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", | ||
809 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", | ||
810 | "dev": true | ||
811 | }, | ||
812 | "node_modules/es6-promisify": { | ||
813 | "version": "5.0.0", | ||
814 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", | ||
815 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", | ||
816 | "dev": true, | ||
817 | "dependencies": { | ||
818 | "es6-promise": "^4.0.3" | ||
819 | } | ||
820 | }, | ||
821 | "node_modules/escape-string-regexp": { | ||
822 | "version": "1.0.5", | ||
823 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", | ||
824 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", | ||
825 | "dev": true | ||
826 | }, | ||
827 | "node_modules/eslint": { | ||
828 | "version": "7.8.0", | ||
829 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.8.0.tgz", | ||
830 | "integrity": "sha512-qgtVyLZqKd2ZXWnLQA4NtVbOyH56zivOAdBFWE54RFkSZjokzNrcP4Z0eVWsZ+84ByXv+jL9k/wE1ENYe8xRFw==", | ||
831 | "dev": true, | ||
832 | "dependencies": { | ||
833 | "@babel/code-frame": "^7.0.0", | ||
834 | "@eslint/eslintrc": "^0.1.0", | ||
835 | "ajv": "^6.10.0", | ||
836 | "chalk": "^4.0.0", | ||
837 | "cross-spawn": "^7.0.2", | ||
838 | "debug": "^4.0.1", | ||
839 | "doctrine": "^3.0.0", | ||
840 | "enquirer": "^2.3.5", | ||
841 | "eslint-scope": "^5.1.0", | ||
842 | "eslint-utils": "^2.1.0", | ||
843 | "eslint-visitor-keys": "^1.3.0", | ||
844 | "espree": "^7.3.0", | ||
845 | "esquery": "^1.2.0", | ||
846 | "esutils": "^2.0.2", | ||
847 | "file-entry-cache": "^5.0.1", | ||
848 | "functional-red-black-tree": "^1.0.1", | ||
849 | "glob-parent": "^5.0.0", | ||
850 | "globals": "^12.1.0", | ||
851 | "ignore": "^4.0.6", | ||
852 | "import-fresh": "^3.0.0", | ||
853 | "imurmurhash": "^0.1.4", | ||
854 | "is-glob": "^4.0.0", | ||
855 | "js-yaml": "^3.13.1", | ||
856 | "json-stable-stringify-without-jsonify": "^1.0.1", | ||
857 | "levn": "^0.4.1", | ||
858 | "lodash": "^4.17.19", | ||
859 | "minimatch": "^3.0.4", | ||
860 | "natural-compare": "^1.4.0", | ||
861 | "optionator": "^0.9.1", | ||
862 | "progress": "^2.0.0", | ||
863 | "regexpp": "^3.1.0", | ||
864 | "semver": "^7.2.1", | ||
865 | "strip-ansi": "^6.0.0", | ||
866 | "strip-json-comments": "^3.1.0", | ||
867 | "table": "^5.2.3", | ||
868 | "text-table": "^0.2.0", | ||
869 | "v8-compile-cache": "^2.0.3" | ||
870 | } | ||
871 | }, | ||
872 | "node_modules/eslint-scope": { | ||
873 | "version": "5.1.0", | ||
874 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", | ||
875 | "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", | ||
876 | "dev": true, | ||
877 | "dependencies": { | ||
878 | "esrecurse": "^4.1.0", | ||
879 | "estraverse": "^4.1.1" | ||
880 | } | ||
881 | }, | ||
882 | "node_modules/eslint-utils": { | ||
883 | "version": "2.1.0", | ||
884 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", | ||
885 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", | ||
886 | "dev": true, | ||
887 | "dependencies": { | ||
888 | "eslint-visitor-keys": "^1.1.0" | ||
889 | } | ||
890 | }, | ||
891 | "node_modules/eslint-visitor-keys": { | ||
892 | "version": "1.3.0", | ||
893 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", | ||
894 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", | ||
895 | "dev": true | ||
896 | }, | ||
897 | "node_modules/eslint/node_modules/ansi-styles": { | ||
898 | "version": "4.2.1", | ||
899 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", | ||
900 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", | ||
901 | "dev": true, | ||
902 | "dependencies": { | ||
903 | "@types/color-name": "^1.1.1", | ||
904 | "color-convert": "^2.0.1" | ||
905 | } | ||
906 | }, | ||
907 | "node_modules/eslint/node_modules/chalk": { | ||
908 | "version": "4.1.0", | ||
909 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", | ||
910 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", | ||
911 | "dev": true, | ||
912 | "dependencies": { | ||
913 | "ansi-styles": "^4.1.0", | ||
914 | "supports-color": "^7.1.0" | ||
915 | } | ||
916 | }, | ||
917 | "node_modules/eslint/node_modules/color-convert": { | ||
918 | "version": "2.0.1", | ||
919 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", | ||
920 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", | ||
921 | "dev": true, | ||
922 | "dependencies": { | ||
923 | "color-name": "~1.1.4" | ||
924 | } | ||
925 | }, | ||
926 | "node_modules/eslint/node_modules/color-name": { | ||
927 | "version": "1.1.4", | ||
928 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | ||
929 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | ||
930 | "dev": true | ||
931 | }, | ||
932 | "node_modules/eslint/node_modules/eslint-scope": { | ||
933 | "version": "5.1.0", | ||
934 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", | ||
935 | "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", | ||
936 | "dev": true, | ||
937 | "dependencies": { | ||
938 | "esrecurse": "^4.1.0", | ||
939 | "estraverse": "^4.1.1" | ||
940 | } | ||
941 | }, | ||
942 | "node_modules/eslint/node_modules/eslint-utils": { | ||
943 | "version": "2.1.0", | ||
944 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", | ||
945 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", | ||
946 | "dev": true, | ||
947 | "dependencies": { | ||
948 | "eslint-visitor-keys": "^1.1.0" | ||
949 | } | ||
950 | }, | ||
951 | "node_modules/eslint/node_modules/eslint-visitor-keys": { | ||
952 | "version": "1.3.0", | ||
953 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", | ||
954 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", | ||
955 | "dev": true | ||
956 | }, | ||
957 | "node_modules/eslint/node_modules/has-flag": { | ||
958 | "version": "4.0.0", | ||
959 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", | ||
960 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", | ||
961 | "dev": true | ||
962 | }, | ||
963 | "node_modules/eslint/node_modules/semver": { | ||
964 | "version": "7.3.2", | ||
965 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", | ||
966 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", | ||
967 | "dev": true | ||
968 | }, | ||
969 | "node_modules/eslint/node_modules/supports-color": { | ||
970 | "version": "7.2.0", | ||
971 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", | ||
972 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", | ||
973 | "dev": true, | ||
974 | "dependencies": { | ||
975 | "has-flag": "^4.0.0" | ||
976 | } | ||
977 | }, | ||
978 | "node_modules/espree": { | ||
979 | "version": "7.3.0", | ||
980 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", | ||
981 | "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", | ||
982 | "dev": true, | ||
983 | "dependencies": { | ||
984 | "acorn": "^7.4.0", | ||
985 | "acorn-jsx": "^5.2.0", | ||
986 | "eslint-visitor-keys": "^1.3.0" | ||
987 | } | ||
988 | }, | ||
989 | "node_modules/espree/node_modules/eslint-visitor-keys": { | ||
990 | "version": "1.3.0", | ||
991 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", | ||
992 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", | ||
993 | "dev": true | ||
994 | }, | ||
995 | "node_modules/esprima": { | ||
996 | "version": "4.0.1", | ||
997 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", | ||
998 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", | ||
999 | "dev": true | ||
1000 | }, | ||
1001 | "node_modules/esquery": { | ||
1002 | "version": "1.3.1", | ||
1003 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", | ||
1004 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", | ||
1005 | "dev": true, | ||
1006 | "dependencies": { | ||
1007 | "estraverse": "^5.1.0" | ||
1008 | } | ||
1009 | }, | ||
1010 | "node_modules/esquery/node_modules/estraverse": { | ||
1011 | "version": "5.2.0", | ||
1012 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", | ||
1013 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", | ||
1014 | "dev": true | ||
1015 | }, | ||
1016 | "node_modules/esrecurse": { | ||
1017 | "version": "4.2.1", | ||
1018 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", | ||
1019 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", | ||
1020 | "dev": true, | ||
1021 | "dependencies": { | ||
1022 | "estraverse": "^4.1.0" | ||
1023 | } | ||
1024 | }, | ||
1025 | "node_modules/estraverse": { | ||
1026 | "version": "4.3.0", | ||
1027 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", | ||
1028 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", | ||
1029 | "dev": true | ||
1030 | }, | ||
1031 | "node_modules/estree-walker": { | ||
1032 | "version": "1.0.1", | ||
1033 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", | ||
1034 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", | ||
1035 | "dev": true | ||
1036 | }, | ||
1037 | "node_modules/esutils": { | ||
1038 | "version": "2.0.3", | ||
1039 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", | ||
1040 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", | ||
1041 | "dev": true | ||
1042 | }, | ||
1043 | "node_modules/fast-deep-equal": { | ||
1044 | "version": "3.1.3", | ||
1045 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", | ||
1046 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", | ||
1047 | "dev": true | ||
1048 | }, | ||
1049 | "node_modules/fast-json-stable-stringify": { | ||
1050 | "version": "2.1.0", | ||
1051 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", | ||
1052 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", | ||
1053 | "dev": true | ||
1054 | }, | ||
1055 | "node_modules/fast-levenshtein": { | ||
1056 | "version": "2.0.6", | ||
1057 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", | ||
1058 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", | ||
1059 | "dev": true | ||
1060 | }, | ||
1061 | "node_modules/fd-slicer": { | ||
1062 | "version": "1.1.0", | ||
1063 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", | ||
1064 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", | ||
1065 | "dev": true, | ||
1066 | "dependencies": { | ||
1067 | "pend": "~1.2.0" | ||
1068 | } | ||
1069 | }, | ||
1070 | "node_modules/file-entry-cache": { | ||
1071 | "version": "5.0.1", | ||
1072 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", | ||
1073 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", | ||
1074 | "dev": true, | ||
1075 | "dependencies": { | ||
1076 | "flat-cache": "^2.0.1" | ||
1077 | } | ||
1078 | }, | ||
1079 | "node_modules/fill-range": { | ||
1080 | "version": "7.0.1", | ||
1081 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", | ||
1082 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", | ||
1083 | "dev": true, | ||
1084 | "dependencies": { | ||
1085 | "to-regex-range": "^5.0.1" | ||
1086 | } | ||
1087 | }, | ||
1088 | "node_modules/find-up": { | ||
1089 | "version": "5.0.0", | ||
1090 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", | ||
1091 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", | ||
1092 | "dev": true, | ||
1093 | "dependencies": { | ||
1094 | "locate-path": "^6.0.0", | ||
1095 | "path-exists": "^4.0.0" | ||
1096 | } | ||
1097 | }, | ||
1098 | "node_modules/flat": { | ||
1099 | "version": "4.1.0", | ||
1100 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", | ||
1101 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", | ||
1102 | "dev": true, | ||
1103 | "dependencies": { | ||
1104 | "is-buffer": "~2.0.3" | ||
1105 | } | ||
1106 | }, | ||
1107 | "node_modules/flat-cache": { | ||
1108 | "version": "2.0.1", | ||
1109 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", | ||
1110 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", | ||
1111 | "dev": true, | ||
1112 | "dependencies": { | ||
1113 | "flatted": "^2.0.0", | ||
1114 | "rimraf": "2.6.3", | ||
1115 | "write": "1.0.3" | ||
1116 | } | ||
1117 | }, | ||
1118 | "node_modules/flatted": { | ||
1119 | "version": "2.0.2", | ||
1120 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", | ||
1121 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", | ||
1122 | "dev": true | ||
1123 | }, | ||
1124 | "node_modules/form-data": { | ||
1125 | "version": "3.0.0", | ||
1126 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", | ||
1127 | "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", | ||
1128 | "dev": true, | ||
1129 | "dependencies": { | ||
1130 | "asynckit": "^0.4.0", | ||
1131 | "combined-stream": "^1.0.8", | ||
1132 | "mime-types": "^2.1.12" | ||
1133 | } | ||
1134 | }, | ||
1135 | "node_modules/fs.realpath": { | ||
1136 | "version": "1.0.0", | ||
1137 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", | ||
1138 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", | ||
1139 | "dev": true | ||
1140 | }, | ||
1141 | "node_modules/fsevents": { | ||
1142 | "version": "2.1.3", | ||
1143 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", | ||
1144 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", | ||
1145 | "dev": true, | ||
1146 | "optional": true, | ||
1147 | "os": [ | ||
1148 | "darwin" | ||
1149 | ], | ||
1150 | "engines": { | ||
1151 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" | ||
1152 | } | ||
1153 | }, | ||
1154 | "node_modules/function-bind": { | ||
1155 | "version": "1.1.1", | ||
1156 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", | ||
1157 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", | ||
1158 | "dev": true | ||
1159 | }, | ||
1160 | "node_modules/functional-red-black-tree": { | ||
1161 | "version": "1.0.1", | ||
1162 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", | ||
1163 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", | ||
1164 | "dev": true | ||
1165 | }, | ||
1166 | "node_modules/get-caller-file": { | ||
1167 | "version": "2.0.5", | ||
1168 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", | ||
1169 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", | ||
1170 | "dev": true | ||
1171 | }, | ||
1172 | "node_modules/glob": { | ||
1173 | "version": "7.1.6", | ||
1174 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", | ||
1175 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", | ||
1176 | "dev": true, | ||
1177 | "dependencies": { | ||
1178 | "fs.realpath": "^1.0.0", | ||
1179 | "inflight": "^1.0.4", | ||
1180 | "inherits": "2", | ||
1181 | "minimatch": "^3.0.4", | ||
1182 | "once": "^1.3.0", | ||
1183 | "path-is-absolute": "^1.0.0" | ||
1184 | } | ||
1185 | }, | ||
1186 | "node_modules/glob-parent": { | ||
1187 | "version": "5.1.1", | ||
1188 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", | ||
1189 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", | ||
1190 | "dev": true, | ||
1191 | "dependencies": { | ||
1192 | "is-glob": "^4.0.1" | ||
1193 | } | ||
1194 | }, | ||
1195 | "node_modules/globals": { | ||
1196 | "version": "12.4.0", | ||
1197 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", | ||
1198 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", | ||
1199 | "dev": true, | ||
1200 | "dependencies": { | ||
1201 | "type-fest": "^0.8.1" | ||
1202 | } | ||
1203 | }, | ||
1204 | "node_modules/growl": { | ||
1205 | "version": "1.10.5", | ||
1206 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", | ||
1207 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", | ||
1208 | "dev": true | ||
1209 | }, | ||
1210 | "node_modules/has": { | ||
1211 | "version": "1.0.3", | ||
1212 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", | ||
1213 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", | ||
1214 | "dev": true, | ||
1215 | "dependencies": { | ||
1216 | "function-bind": "^1.1.1" | ||
1217 | } | ||
1218 | }, | ||
1219 | "node_modules/has-flag": { | ||
1220 | "version": "3.0.0", | ||
1221 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", | ||
1222 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", | ||
1223 | "dev": true | ||
1224 | }, | ||
1225 | "node_modules/has-symbols": { | ||
1226 | "version": "1.0.1", | ||
1227 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", | ||
1228 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", | ||
1229 | "dev": true | ||
1230 | }, | ||
1231 | "node_modules/he": { | ||
1232 | "version": "1.2.0", | ||
1233 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", | ||
1234 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", | ||
1235 | "dev": true | ||
1236 | }, | ||
1237 | "node_modules/htmlparser2": { | ||
1238 | "version": "3.10.1", | ||
1239 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", | ||
1240 | "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", | ||
1241 | "dev": true, | ||
1242 | "dependencies": { | ||
1243 | "domelementtype": "^1.3.1", | ||
1244 | "domhandler": "^2.3.0", | ||
1245 | "domutils": "^1.5.1", | ||
1246 | "entities": "^1.1.1", | ||
1247 | "inherits": "^2.0.1", | ||
1248 | "readable-stream": "^3.1.1" | ||
1249 | } | ||
1250 | }, | ||
1251 | "node_modules/http-proxy-agent": { | ||
1252 | "version": "2.1.0", | ||
1253 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", | ||
1254 | "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", | ||
1255 | "dev": true, | ||
1256 | "dependencies": { | ||
1257 | "agent-base": "4", | ||
1258 | "debug": "3.1.0" | ||
1259 | } | ||
1260 | }, | ||
1261 | "node_modules/http-proxy-agent/node_modules/debug": { | ||
1262 | "version": "3.1.0", | ||
1263 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", | ||
1264 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", | ||
1265 | "dev": true, | ||
1266 | "dependencies": { | ||
1267 | "ms": "2.0.0" | ||
1268 | } | ||
1269 | }, | ||
1270 | "node_modules/http-proxy-agent/node_modules/ms": { | ||
1271 | "version": "2.0.0", | ||
1272 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | ||
1273 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", | ||
1274 | "dev": true | ||
1275 | }, | ||
1276 | "node_modules/https-proxy-agent": { | ||
1277 | "version": "2.2.4", | ||
1278 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", | ||
1279 | "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", | ||
1280 | "dev": true, | ||
1281 | "dependencies": { | ||
1282 | "agent-base": "^4.3.0", | ||
1283 | "debug": "^3.1.0" | ||
1284 | } | ||
1285 | }, | ||
1286 | "node_modules/https-proxy-agent/node_modules/debug": { | ||
1287 | "version": "3.2.6", | ||
1288 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", | ||
1289 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", | ||
1290 | "dev": true, | ||
1291 | "dependencies": { | ||
1292 | "ms": "^2.1.1" | ||
1293 | } | ||
1294 | }, | ||
1295 | "node_modules/ignore": { | ||
1296 | "version": "4.0.6", | ||
1297 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", | ||
1298 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", | ||
1299 | "dev": true | ||
1300 | }, | ||
1301 | "node_modules/import-fresh": { | ||
1302 | "version": "3.2.1", | ||
1303 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", | ||
1304 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", | ||
1305 | "dev": true, | ||
1306 | "dependencies": { | ||
1307 | "parent-module": "^1.0.0", | ||
1308 | "resolve-from": "^4.0.0" | ||
1309 | } | ||
1310 | }, | ||
1311 | "node_modules/imurmurhash": { | ||
1312 | "version": "0.1.4", | ||
1313 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", | ||
1314 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", | ||
1315 | "dev": true | ||
1316 | }, | ||
1317 | "node_modules/inflight": { | ||
1318 | "version": "1.0.6", | ||
1319 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", | ||
1320 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", | ||
1321 | "dev": true, | ||
1322 | "dependencies": { | ||
1323 | "once": "^1.3.0", | ||
1324 | "wrappy": "1" | ||
1325 | } | ||
1326 | }, | ||
1327 | "node_modules/inherits": { | ||
1328 | "version": "2.0.4", | ||
1329 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | ||
1330 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", | ||
1331 | "dev": true | ||
1332 | }, | ||
1333 | "node_modules/is-arguments": { | ||
1334 | "version": "1.0.4", | ||
1335 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", | ||
1336 | "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", | ||
1337 | "dev": true | ||
1338 | }, | ||
1339 | "node_modules/is-binary-path": { | ||
1340 | "version": "2.1.0", | ||
1341 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", | ||
1342 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", | ||
1343 | "dev": true, | ||
1344 | "dependencies": { | ||
1345 | "binary-extensions": "^2.0.0" | ||
1346 | } | ||
1347 | }, | ||
1348 | "node_modules/is-buffer": { | ||
1349 | "version": "2.0.4", | ||
1350 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", | ||
1351 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", | ||
1352 | "dev": true | ||
1353 | }, | ||
1354 | "node_modules/is-callable": { | ||
1355 | "version": "1.2.0", | ||
1356 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", | ||
1357 | "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", | ||
1358 | "dev": true | ||
1359 | }, | ||
1360 | "node_modules/is-date-object": { | ||
1361 | "version": "1.0.2", | ||
1362 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", | ||
1363 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", | ||
1364 | "dev": true | ||
1365 | }, | ||
1366 | "node_modules/is-extglob": { | ||
1367 | "version": "2.1.1", | ||
1368 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", | ||
1369 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", | ||
1370 | "dev": true | ||
1371 | }, | ||
1372 | "node_modules/is-fullwidth-code-point": { | ||
1373 | "version": "2.0.0", | ||
1374 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", | ||
1375 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", | ||
1376 | "dev": true | ||
1377 | }, | ||
1378 | "node_modules/is-glob": { | ||
1379 | "version": "4.0.1", | ||
1380 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", | ||
1381 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", | ||
1382 | "dev": true, | ||
1383 | "dependencies": { | ||
1384 | "is-extglob": "^2.1.1" | ||
1385 | } | ||
1386 | }, | ||
1387 | "node_modules/is-map": { | ||
1388 | "version": "2.0.1", | ||
1389 | "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", | ||
1390 | "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", | ||
1391 | "dev": true | ||
1392 | }, | ||
1393 | "node_modules/is-module": { | ||
1394 | "version": "1.0.0", | ||
1395 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", | ||
1396 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", | ||
1397 | "dev": true | ||
1398 | }, | ||
1399 | "node_modules/is-number": { | ||
1400 | "version": "7.0.0", | ||
1401 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", | ||
1402 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", | ||
1403 | "dev": true | ||
1404 | }, | ||
1405 | "node_modules/is-plain-obj": { | ||
1406 | "version": "1.1.0", | ||
1407 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", | ||
1408 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", | ||
1409 | "dev": true | ||
1410 | }, | ||
1411 | "node_modules/is-reference": { | ||
1412 | "version": "1.2.1", | ||
1413 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", | ||
1414 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", | ||
1415 | "dev": true, | ||
1416 | "dependencies": { | ||
1417 | "@types/estree": "*" | ||
1418 | } | ||
1419 | }, | ||
1420 | "node_modules/is-regex": { | ||
1421 | "version": "1.1.1", | ||
1422 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", | ||
1423 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", | ||
1424 | "dev": true, | ||
1425 | "dependencies": { | ||
1426 | "has-symbols": "^1.0.1" | ||
1427 | } | ||
1428 | }, | ||
1429 | "node_modules/is-set": { | ||
1430 | "version": "2.0.1", | ||
1431 | "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", | ||
1432 | "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", | ||
1433 | "dev": true | ||
1434 | }, | ||
1435 | "node_modules/is-string": { | ||
1436 | "version": "1.0.5", | ||
1437 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", | ||
1438 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", | ||
1439 | "dev": true | ||
1440 | }, | ||
1441 | "node_modules/is-symbol": { | ||
1442 | "version": "1.0.3", | ||
1443 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", | ||
1444 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", | ||
1445 | "dev": true, | ||
1446 | "dependencies": { | ||
1447 | "has-symbols": "^1.0.1" | ||
1448 | } | ||
1449 | }, | ||
1450 | "node_modules/isarray": { | ||
1451 | "version": "2.0.5", | ||
1452 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", | ||
1453 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", | ||
1454 | "dev": true | ||
1455 | }, | ||
1456 | "node_modules/isexe": { | ||
1457 | "version": "2.0.0", | ||
1458 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", | ||
1459 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", | ||
1460 | "dev": true | ||
1461 | }, | ||
1462 | "node_modules/iterate-iterator": { | ||
1463 | "version": "1.0.1", | ||
1464 | "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", | ||
1465 | "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", | ||
1466 | "dev": true | ||
1467 | }, | ||
1468 | "node_modules/iterate-value": { | ||
1469 | "version": "1.0.2", | ||
1470 | "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", | ||
1471 | "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", | ||
1472 | "dev": true, | ||
1473 | "dependencies": { | ||
1474 | "es-get-iterator": "^1.0.2", | ||
1475 | "iterate-iterator": "^1.0.1" | ||
1476 | } | ||
1477 | }, | ||
1478 | "node_modules/js-tokens": { | ||
1479 | "version": "4.0.0", | ||
1480 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", | ||
1481 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", | ||
1482 | "dev": true | ||
1483 | }, | ||
1484 | "node_modules/js-yaml": { | ||
1485 | "version": "3.14.0", | ||
1486 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", | ||
1487 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", | ||
1488 | "dev": true, | ||
1489 | "dependencies": { | ||
1490 | "argparse": "^1.0.7", | ||
1491 | "esprima": "^4.0.0" | ||
1492 | } | ||
1493 | }, | ||
1494 | "node_modules/json-schema-traverse": { | ||
1495 | "version": "0.4.1", | ||
1496 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", | ||
1497 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", | ||
1498 | "dev": true | ||
1499 | }, | ||
1500 | "node_modules/json-stable-stringify-without-jsonify": { | ||
1501 | "version": "1.0.1", | ||
1502 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", | ||
1503 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", | ||
1504 | "dev": true | ||
1505 | }, | ||
1506 | "node_modules/leven": { | ||
1507 | "version": "3.1.0", | ||
1508 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", | ||
1509 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", | ||
1510 | "dev": true | ||
1511 | }, | ||
1512 | "node_modules/levn": { | ||
1513 | "version": "0.4.1", | ||
1514 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", | ||
1515 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", | ||
1516 | "dev": true, | ||
1517 | "dependencies": { | ||
1518 | "prelude-ls": "^1.2.1", | ||
1519 | "type-check": "~0.4.0" | ||
1520 | } | ||
1521 | }, | ||
1522 | "node_modules/linkify-it": { | ||
1523 | "version": "2.2.0", | ||
1524 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", | ||
1525 | "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", | ||
1526 | "dev": true, | ||
1527 | "dependencies": { | ||
1528 | "uc.micro": "^1.0.1" | ||
1529 | } | ||
1530 | }, | ||
1531 | "node_modules/locate-path": { | ||
1532 | "version": "6.0.0", | ||
1533 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", | ||
1534 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", | ||
1535 | "dev": true, | ||
1536 | "dependencies": { | ||
1537 | "p-locate": "^5.0.0" | ||
1538 | } | ||
1539 | }, | ||
1540 | "node_modules/lodash": { | ||
1541 | "version": "4.17.19", | ||
1542 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", | ||
1543 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", | ||
1544 | "dev": true | ||
1545 | }, | ||
1546 | "node_modules/log-symbols": { | ||
1547 | "version": "4.0.0", | ||
1548 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", | ||
1549 | "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", | ||
1550 | "dev": true, | ||
1551 | "dependencies": { | ||
1552 | "chalk": "^4.0.0" | ||
1553 | } | ||
1554 | }, | ||
1555 | "node_modules/log-symbols/node_modules/ansi-styles": { | ||
1556 | "version": "4.2.1", | ||
1557 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", | ||
1558 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", | ||
1559 | "dev": true, | ||
1560 | "dependencies": { | ||
1561 | "@types/color-name": "^1.1.1", | ||
1562 | "color-convert": "^2.0.1" | ||
1563 | } | ||
1564 | }, | ||
1565 | "node_modules/log-symbols/node_modules/chalk": { | ||
1566 | "version": "4.1.0", | ||
1567 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", | ||
1568 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", | ||
1569 | "dev": true, | ||
1570 | "dependencies": { | ||
1571 | "ansi-styles": "^4.1.0", | ||
1572 | "supports-color": "^7.1.0" | ||
1573 | } | ||
1574 | }, | ||
1575 | "node_modules/log-symbols/node_modules/color-convert": { | ||
1576 | "version": "2.0.1", | ||
1577 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", | ||
1578 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", | ||
1579 | "dev": true, | ||
1580 | "dependencies": { | ||
1581 | "color-name": "~1.1.4" | ||
1582 | } | ||
1583 | }, | ||
1584 | "node_modules/log-symbols/node_modules/color-name": { | ||
1585 | "version": "1.1.4", | ||
1586 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | ||
1587 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | ||
1588 | "dev": true | ||
1589 | }, | ||
1590 | "node_modules/log-symbols/node_modules/has-flag": { | ||
1591 | "version": "4.0.0", | ||
1592 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", | ||
1593 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", | ||
1594 | "dev": true | ||
1595 | }, | ||
1596 | "node_modules/log-symbols/node_modules/supports-color": { | ||
1597 | "version": "7.2.0", | ||
1598 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", | ||
1599 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", | ||
1600 | "dev": true, | ||
1601 | "dependencies": { | ||
1602 | "has-flag": "^4.0.0" | ||
1603 | } | ||
1604 | }, | ||
1605 | "node_modules/lru-cache": { | ||
1606 | "version": "4.1.5", | ||
1607 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", | ||
1608 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", | ||
1609 | "dev": true, | ||
1610 | "dependencies": { | ||
1611 | "pseudomap": "^1.0.2", | ||
1612 | "yallist": "^2.1.2" | ||
1613 | } | ||
1614 | }, | ||
1615 | "node_modules/magic-string": { | ||
1616 | "version": "0.25.7", | ||
1617 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", | ||
1618 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", | ||
1619 | "dev": true, | ||
1620 | "dependencies": { | ||
1621 | "sourcemap-codec": "^1.4.4" | ||
1622 | } | ||
1623 | }, | ||
1624 | "node_modules/markdown-it": { | ||
1625 | "version": "10.0.0", | ||
1626 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", | ||
1627 | "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", | ||
1628 | "dev": true, | ||
1629 | "dependencies": { | ||
1630 | "argparse": "^1.0.7", | ||
1631 | "entities": "~2.0.0", | ||
1632 | "linkify-it": "^2.0.0", | ||
1633 | "mdurl": "^1.0.1", | ||
1634 | "uc.micro": "^1.0.5" | ||
1635 | } | ||
1636 | }, | ||
1637 | "node_modules/markdown-it/node_modules/entities": { | ||
1638 | "version": "2.0.3", | ||
1639 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", | ||
1640 | "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", | ||
1641 | "dev": true | ||
1642 | }, | ||
1643 | "node_modules/mdurl": { | ||
1644 | "version": "1.0.1", | ||
1645 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", | ||
1646 | "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", | ||
1647 | "dev": true | ||
1648 | }, | ||
1649 | "node_modules/mime": { | ||
1650 | "version": "1.6.0", | ||
1651 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", | ||
1652 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", | ||
1653 | "dev": true | ||
1654 | }, | ||
1655 | "node_modules/mime-db": { | ||
1656 | "version": "1.44.0", | ||
1657 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", | ||
1658 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", | ||
1659 | "dev": true | ||
1660 | }, | ||
1661 | "node_modules/mime-types": { | ||
1662 | "version": "2.1.27", | ||
1663 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", | ||
1664 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", | ||
1665 | "dev": true, | ||
1666 | "dependencies": { | ||
1667 | "mime-db": "1.44.0" | ||
1668 | } | ||
1669 | }, | ||
1670 | "node_modules/minimatch": { | ||
1671 | "version": "3.0.4", | ||
1672 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", | ||
1673 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", | ||
1674 | "dev": true, | ||
1675 | "dependencies": { | ||
1676 | "brace-expansion": "^1.1.7" | ||
1677 | } | ||
1678 | }, | ||
1679 | "node_modules/minimist": { | ||
1680 | "version": "1.2.5", | ||
1681 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", | ||
1682 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", | ||
1683 | "dev": true | ||
1684 | }, | ||
1685 | "node_modules/mkdirp": { | ||
1686 | "version": "0.5.5", | ||
1687 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", | ||
1688 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", | ||
1689 | "dev": true, | ||
1690 | "dependencies": { | ||
1691 | "minimist": "^1.2.5" | ||
1692 | } | ||
1693 | }, | ||
1694 | "node_modules/mocha": { | ||
1695 | "version": "8.1.3", | ||
1696 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.3.tgz", | ||
1697 | "integrity": "sha512-ZbaYib4hT4PpF4bdSO2DohooKXIn4lDeiYqB+vTmCdr6l2woW0b6H3pf5x4sM5nwQMru9RvjjHYWVGltR50ZBw==", | ||
1698 | "dev": true, | ||
1699 | "dependencies": { | ||
1700 | "ansi-colors": "4.1.1", | ||
1701 | "browser-stdout": "1.3.1", | ||
1702 | "chokidar": "3.4.2", | ||
1703 | "debug": "4.1.1", | ||
1704 | "diff": "4.0.2", | ||
1705 | "escape-string-regexp": "4.0.0", | ||
1706 | "find-up": "5.0.0", | ||
1707 | "glob": "7.1.6", | ||
1708 | "growl": "1.10.5", | ||
1709 | "he": "1.2.0", | ||
1710 | "js-yaml": "3.14.0", | ||
1711 | "log-symbols": "4.0.0", | ||
1712 | "minimatch": "3.0.4", | ||
1713 | "ms": "2.1.2", | ||
1714 | "object.assign": "4.1.0", | ||
1715 | "promise.allsettled": "1.0.2", | ||
1716 | "serialize-javascript": "4.0.0", | ||
1717 | "strip-json-comments": "3.0.1", | ||
1718 | "supports-color": "7.1.0", | ||
1719 | "which": "2.0.2", | ||
1720 | "wide-align": "1.1.3", | ||
1721 | "workerpool": "6.0.0", | ||
1722 | "yargs": "13.3.2", | ||
1723 | "yargs-parser": "13.1.2", | ||
1724 | "yargs-unparser": "1.6.1" | ||
1725 | } | ||
1726 | }, | ||
1727 | "node_modules/mocha/node_modules/ansi-colors": { | ||
1728 | "version": "4.1.1", | ||
1729 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", | ||
1730 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", | ||
1731 | "dev": true | ||
1732 | }, | ||
1733 | "node_modules/mocha/node_modules/escape-string-regexp": { | ||
1734 | "version": "4.0.0", | ||
1735 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", | ||
1736 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", | ||
1737 | "dev": true | ||
1738 | }, | ||
1739 | "node_modules/mocha/node_modules/has-flag": { | ||
1740 | "version": "4.0.0", | ||
1741 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", | ||
1742 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", | ||
1743 | "dev": true | ||
1744 | }, | ||
1745 | "node_modules/mocha/node_modules/strip-json-comments": { | ||
1746 | "version": "3.0.1", | ||
1747 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", | ||
1748 | "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", | ||
1749 | "dev": true | ||
1750 | }, | ||
1751 | "node_modules/mocha/node_modules/supports-color": { | ||
1752 | "version": "7.1.0", | ||
1753 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", | ||
1754 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", | ||
1755 | "dev": true, | ||
1756 | "dependencies": { | ||
1757 | "has-flag": "^4.0.0" | ||
1758 | } | ||
1759 | }, | ||
1760 | "node_modules/ms": { | ||
1761 | "version": "2.1.2", | ||
1762 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||
1763 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", | ||
1764 | "dev": true | ||
1765 | }, | ||
1766 | "node_modules/mute-stream": { | ||
1767 | "version": "0.0.8", | ||
1768 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", | ||
1769 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", | ||
1770 | "dev": true | ||
1771 | }, | ||
1772 | "node_modules/natural-compare": { | ||
1773 | "version": "1.4.0", | ||
1774 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", | ||
1775 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", | ||
1776 | "dev": true | ||
1777 | }, | ||
1778 | "node_modules/node-fetch": { | ||
1779 | "version": "2.6.1", | ||
1780 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", | ||
1781 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" | ||
1782 | }, | ||
1783 | "node_modules/normalize-path": { | ||
1784 | "version": "3.0.0", | ||
1785 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | ||
1786 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", | ||
1787 | "dev": true | ||
1788 | }, | ||
1789 | "node_modules/nth-check": { | ||
1790 | "version": "1.0.2", | ||
1791 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", | ||
1792 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", | ||
1793 | "dev": true, | ||
1794 | "dependencies": { | ||
1795 | "boolbase": "~1.0.0" | ||
1796 | } | ||
1797 | }, | ||
1798 | "node_modules/object-inspect": { | ||
1799 | "version": "1.8.0", | ||
1800 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", | ||
1801 | "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", | ||
1802 | "dev": true | ||
1803 | }, | ||
1804 | "node_modules/object-keys": { | ||
1805 | "version": "1.1.1", | ||
1806 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", | ||
1807 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", | ||
1808 | "dev": true | ||
1809 | }, | ||
1810 | "node_modules/object.assign": { | ||
1811 | "version": "4.1.0", | ||
1812 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", | ||
1813 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", | ||
1814 | "dev": true, | ||
1815 | "dependencies": { | ||
1816 | "define-properties": "^1.1.2", | ||
1817 | "function-bind": "^1.1.1", | ||
1818 | "has-symbols": "^1.0.0", | ||
1819 | "object-keys": "^1.0.11" | ||
1820 | } | ||
1821 | }, | ||
1822 | "node_modules/once": { | ||
1823 | "version": "1.4.0", | ||
1824 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", | ||
1825 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", | ||
1826 | "dev": true, | ||
1827 | "dependencies": { | ||
1828 | "wrappy": "1" | ||
1829 | } | ||
1830 | }, | ||
1831 | "node_modules/optionator": { | ||
1832 | "version": "0.9.1", | ||
1833 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", | ||
1834 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", | ||
1835 | "dev": true, | ||
1836 | "dependencies": { | ||
1837 | "deep-is": "^0.1.3", | ||
1838 | "fast-levenshtein": "^2.0.6", | ||
1839 | "levn": "^0.4.1", | ||
1840 | "prelude-ls": "^1.2.1", | ||
1841 | "type-check": "^0.4.0", | ||
1842 | "word-wrap": "^1.2.3" | ||
1843 | } | ||
1844 | }, | ||
1845 | "node_modules/os": { | ||
1846 | "version": "0.1.1", | ||
1847 | "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz", | ||
1848 | "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M=", | ||
1849 | "dev": true | ||
1850 | }, | ||
1851 | "node_modules/os-homedir": { | ||
1852 | "version": "1.0.2", | ||
1853 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", | ||
1854 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", | ||
1855 | "dev": true | ||
1856 | }, | ||
1857 | "node_modules/os-tmpdir": { | ||
1858 | "version": "1.0.2", | ||
1859 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", | ||
1860 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", | ||
1861 | "dev": true | ||
1862 | }, | ||
1863 | "node_modules/osenv": { | ||
1864 | "version": "0.1.5", | ||
1865 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", | ||
1866 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", | ||
1867 | "dev": true, | ||
1868 | "dependencies": { | ||
1869 | "os-homedir": "^1.0.0", | ||
1870 | "os-tmpdir": "^1.0.0" | ||
1871 | } | ||
1872 | }, | ||
1873 | "node_modules/p-limit": { | ||
1874 | "version": "3.0.2", | ||
1875 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", | ||
1876 | "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", | ||
1877 | "dev": true, | ||
1878 | "dependencies": { | ||
1879 | "p-try": "^2.0.0" | ||
1880 | } | ||
1881 | }, | ||
1882 | "node_modules/p-locate": { | ||
1883 | "version": "5.0.0", | ||
1884 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", | ||
1885 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", | ||
1886 | "dev": true, | ||
1887 | "dependencies": { | ||
1888 | "p-limit": "^3.0.2" | ||
1889 | } | ||
1890 | }, | ||
1891 | "node_modules/p-try": { | ||
1892 | "version": "2.2.0", | ||
1893 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", | ||
1894 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", | ||
1895 | "dev": true | ||
1896 | }, | ||
1897 | "node_modules/parent-module": { | ||
1898 | "version": "1.0.1", | ||
1899 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", | ||
1900 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", | ||
1901 | "dev": true, | ||
1902 | "dependencies": { | ||
1903 | "callsites": "^3.0.0" | ||
1904 | } | ||
1905 | }, | ||
1906 | "node_modules/parse-semver": { | ||
1907 | "version": "1.1.1", | ||
1908 | "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", | ||
1909 | "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", | ||
1910 | "dev": true, | ||
1911 | "dependencies": { | ||
1912 | "semver": "^5.1.0" | ||
1913 | } | ||
1914 | }, | ||
1915 | "node_modules/parse-semver/node_modules/semver": { | ||
1916 | "version": "5.7.1", | ||
1917 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
1918 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | ||
1919 | "dev": true | ||
1920 | }, | ||
1921 | "node_modules/parse5": { | ||
1922 | "version": "3.0.3", | ||
1923 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", | ||
1924 | "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", | ||
1925 | "dev": true, | ||
1926 | "dependencies": { | ||
1927 | "@types/node": "*" | ||
1928 | } | ||
1929 | }, | ||
1930 | "node_modules/path-exists": { | ||
1931 | "version": "4.0.0", | ||
1932 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", | ||
1933 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", | ||
1934 | "dev": true | ||
1935 | }, | ||
1936 | "node_modules/path-is-absolute": { | ||
1937 | "version": "1.0.1", | ||
1938 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", | ||
1939 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", | ||
1940 | "dev": true | ||
1941 | }, | ||
1942 | "node_modules/path-key": { | ||
1943 | "version": "3.1.1", | ||
1944 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", | ||
1945 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", | ||
1946 | "dev": true | ||
1947 | }, | ||
1948 | "node_modules/path-parse": { | ||
1949 | "version": "1.0.6", | ||
1950 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", | ||
1951 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", | ||
1952 | "dev": true | ||
1953 | }, | ||
1954 | "node_modules/pend": { | ||
1955 | "version": "1.2.0", | ||
1956 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", | ||
1957 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", | ||
1958 | "dev": true | ||
1959 | }, | ||
1960 | "node_modules/picomatch": { | ||
1961 | "version": "2.2.2", | ||
1962 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", | ||
1963 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", | ||
1964 | "dev": true | ||
1965 | }, | ||
1966 | "node_modules/prelude-ls": { | ||
1967 | "version": "1.2.1", | ||
1968 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", | ||
1969 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", | ||
1970 | "dev": true | ||
1971 | }, | ||
1972 | "node_modules/progress": { | ||
1973 | "version": "2.0.3", | ||
1974 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", | ||
1975 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", | ||
1976 | "dev": true | ||
1977 | }, | ||
1978 | "node_modules/promise.allsettled": { | ||
1979 | "version": "1.0.2", | ||
1980 | "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", | ||
1981 | "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", | ||
1982 | "dev": true, | ||
1983 | "dependencies": { | ||
1984 | "array.prototype.map": "^1.0.1", | ||
1985 | "define-properties": "^1.1.3", | ||
1986 | "es-abstract": "^1.17.0-next.1", | ||
1987 | "function-bind": "^1.1.1", | ||
1988 | "iterate-value": "^1.0.0" | ||
1989 | } | ||
1990 | }, | ||
1991 | "node_modules/pseudomap": { | ||
1992 | "version": "1.0.2", | ||
1993 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", | ||
1994 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", | ||
1995 | "dev": true | ||
1996 | }, | ||
1997 | "node_modules/punycode": { | ||
1998 | "version": "2.1.1", | ||
1999 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", | ||
2000 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", | ||
2001 | "dev": true | ||
2002 | }, | ||
2003 | "node_modules/randombytes": { | ||
2004 | "version": "2.1.0", | ||
2005 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", | ||
2006 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", | ||
2007 | "dev": true, | ||
2008 | "dependencies": { | ||
2009 | "safe-buffer": "^5.1.0" | ||
2010 | } | ||
2011 | }, | ||
2012 | "node_modules/read": { | ||
2013 | "version": "1.0.7", | ||
2014 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", | ||
2015 | "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", | ||
2016 | "dev": true, | ||
2017 | "dependencies": { | ||
2018 | "mute-stream": "~0.0.4" | ||
2019 | } | ||
2020 | }, | ||
2021 | "node_modules/readable-stream": { | ||
2022 | "version": "3.6.0", | ||
2023 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", | ||
2024 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", | ||
2025 | "dev": true, | ||
2026 | "dependencies": { | ||
2027 | "inherits": "^2.0.3", | ||
2028 | "string_decoder": "^1.1.1", | ||
2029 | "util-deprecate": "^1.0.1" | ||
2030 | } | ||
2031 | }, | ||
2032 | "node_modules/readdirp": { | ||
2033 | "version": "3.4.0", | ||
2034 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", | ||
2035 | "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", | ||
2036 | "dev": true, | ||
2037 | "dependencies": { | ||
2038 | "picomatch": "^2.2.1" | ||
2039 | } | ||
2040 | }, | ||
2041 | "node_modules/regexpp": { | ||
2042 | "version": "3.1.0", | ||
2043 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", | ||
2044 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", | ||
2045 | "dev": true | ||
2046 | }, | ||
2047 | "node_modules/require-directory": { | ||
2048 | "version": "2.1.1", | ||
2049 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", | ||
2050 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", | ||
2051 | "dev": true | ||
2052 | }, | ||
2053 | "node_modules/require-main-filename": { | ||
2054 | "version": "2.0.0", | ||
2055 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", | ||
2056 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", | ||
2057 | "dev": true | ||
2058 | }, | ||
2059 | "node_modules/resolve": { | ||
2060 | "version": "1.17.0", | ||
2061 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", | ||
2062 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", | ||
2063 | "dev": true, | ||
2064 | "dependencies": { | ||
2065 | "path-parse": "^1.0.6" | ||
2066 | } | ||
2067 | }, | ||
2068 | "node_modules/resolve-from": { | ||
2069 | "version": "4.0.0", | ||
2070 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", | ||
2071 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", | ||
2072 | "dev": true | ||
2073 | }, | ||
2074 | "node_modules/rimraf": { | ||
2075 | "version": "2.6.3", | ||
2076 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", | ||
2077 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", | ||
2078 | "dev": true, | ||
2079 | "dependencies": { | ||
2080 | "glob": "^7.1.3" | ||
2081 | } | ||
2082 | }, | ||
2083 | "node_modules/rollup": { | ||
2084 | "version": "2.26.9", | ||
2085 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.9.tgz", | ||
2086 | "integrity": "sha512-XIiWYLayLqV+oY4S2Lub/shJq4uk/QQLwWToYCL4LjZbYHbFK3czea4UDVRUJu+zNmKmxq5Zb/OG7c5HSvH2TQ==", | ||
2087 | "dev": true, | ||
2088 | "dependencies": { | ||
2089 | "fsevents": "~2.1.2" | ||
2090 | }, | ||
2091 | "optionalDependencies": { | ||
2092 | "fsevents": "~2.1.2" | ||
2093 | } | ||
2094 | }, | ||
2095 | "node_modules/safe-buffer": { | ||
2096 | "version": "5.2.0", | ||
2097 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", | ||
2098 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", | ||
2099 | "dev": true | ||
2100 | }, | ||
2101 | "node_modules/semver": { | ||
2102 | "version": "6.3.0", | ||
2103 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", | ||
2104 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" | ||
2105 | }, | ||
2106 | "node_modules/serialize-javascript": { | ||
2107 | "version": "4.0.0", | ||
2108 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", | ||
2109 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", | ||
2110 | "dev": true, | ||
2111 | "dependencies": { | ||
2112 | "randombytes": "^2.1.0" | ||
2113 | } | ||
2114 | }, | ||
2115 | "node_modules/set-blocking": { | ||
2116 | "version": "2.0.0", | ||
2117 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", | ||
2118 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", | ||
2119 | "dev": true | ||
2120 | }, | ||
2121 | "node_modules/shebang-command": { | ||
2122 | "version": "2.0.0", | ||
2123 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", | ||
2124 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", | ||
2125 | "dev": true, | ||
2126 | "dependencies": { | ||
2127 | "shebang-regex": "^3.0.0" | ||
2128 | } | ||
2129 | }, | ||
2130 | "node_modules/shebang-regex": { | ||
2131 | "version": "3.0.0", | ||
2132 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", | ||
2133 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", | ||
2134 | "dev": true | ||
2135 | }, | ||
2136 | "node_modules/sigmund": { | ||
2137 | "version": "1.0.1", | ||
2138 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", | ||
2139 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", | ||
2140 | "dev": true | ||
2141 | }, | ||
2142 | "node_modules/slice-ansi": { | ||
2143 | "version": "2.1.0", | ||
2144 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", | ||
2145 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", | ||
2146 | "dev": true, | ||
2147 | "dependencies": { | ||
2148 | "ansi-styles": "^3.2.0", | ||
2149 | "astral-regex": "^1.0.0", | ||
2150 | "is-fullwidth-code-point": "^2.0.0" | ||
2151 | } | ||
2152 | }, | ||
2153 | "node_modules/sourcemap-codec": { | ||
2154 | "version": "1.4.8", | ||
2155 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", | ||
2156 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", | ||
2157 | "dev": true | ||
2158 | }, | ||
2159 | "node_modules/sprintf-js": { | ||
2160 | "version": "1.0.3", | ||
2161 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", | ||
2162 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", | ||
2163 | "dev": true | ||
2164 | }, | ||
2165 | "node_modules/string_decoder": { | ||
2166 | "version": "1.3.0", | ||
2167 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", | ||
2168 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", | ||
2169 | "dev": true, | ||
2170 | "dependencies": { | ||
2171 | "safe-buffer": "~5.2.0" | ||
2172 | } | ||
2173 | }, | ||
2174 | "node_modules/string-width": { | ||
2175 | "version": "3.1.0", | ||
2176 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | ||
2177 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", | ||
2178 | "dev": true, | ||
2179 | "dependencies": { | ||
2180 | "emoji-regex": "^7.0.1", | ||
2181 | "is-fullwidth-code-point": "^2.0.0", | ||
2182 | "strip-ansi": "^5.1.0" | ||
2183 | } | ||
2184 | }, | ||
2185 | "node_modules/string-width/node_modules/ansi-regex": { | ||
2186 | "version": "4.1.0", | ||
2187 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", | ||
2188 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", | ||
2189 | "dev": true | ||
2190 | }, | ||
2191 | "node_modules/string-width/node_modules/strip-ansi": { | ||
2192 | "version": "5.2.0", | ||
2193 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||
2194 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||
2195 | "dev": true, | ||
2196 | "dependencies": { | ||
2197 | "ansi-regex": "^4.1.0" | ||
2198 | } | ||
2199 | }, | ||
2200 | "node_modules/string.prototype.trimend": { | ||
2201 | "version": "1.0.1", | ||
2202 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", | ||
2203 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", | ||
2204 | "dev": true, | ||
2205 | "dependencies": { | ||
2206 | "define-properties": "^1.1.3", | ||
2207 | "es-abstract": "^1.17.5" | ||
2208 | } | ||
2209 | }, | ||
2210 | "node_modules/string.prototype.trimstart": { | ||
2211 | "version": "1.0.1", | ||
2212 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", | ||
2213 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", | ||
2214 | "dev": true, | ||
2215 | "dependencies": { | ||
2216 | "define-properties": "^1.1.3", | ||
2217 | "es-abstract": "^1.17.5" | ||
2218 | } | ||
2219 | }, | ||
2220 | "node_modules/strip-ansi": { | ||
2221 | "version": "6.0.0", | ||
2222 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", | ||
2223 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", | ||
2224 | "dev": true, | ||
2225 | "dependencies": { | ||
2226 | "ansi-regex": "^5.0.0" | ||
2227 | } | ||
2228 | }, | ||
2229 | "node_modules/strip-json-comments": { | ||
2230 | "version": "3.1.1", | ||
2231 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", | ||
2232 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", | ||
2233 | "dev": true | ||
2234 | }, | ||
2235 | "node_modules/supports-color": { | ||
2236 | "version": "5.5.0", | ||
2237 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", | ||
2238 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", | ||
2239 | "dev": true, | ||
2240 | "dependencies": { | ||
2241 | "has-flag": "^3.0.0" | ||
2242 | } | ||
2243 | }, | ||
2244 | "node_modules/table": { | ||
2245 | "version": "5.4.6", | ||
2246 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", | ||
2247 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", | ||
2248 | "dev": true, | ||
2249 | "dependencies": { | ||
2250 | "ajv": "^6.10.2", | ||
2251 | "lodash": "^4.17.14", | ||
2252 | "slice-ansi": "^2.1.0", | ||
2253 | "string-width": "^3.0.0" | ||
2254 | } | ||
2255 | }, | ||
2256 | "node_modules/text-table": { | ||
2257 | "version": "0.2.0", | ||
2258 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", | ||
2259 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", | ||
2260 | "dev": true | ||
2261 | }, | ||
2262 | "node_modules/tmp": { | ||
2263 | "version": "0.0.29", | ||
2264 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", | ||
2265 | "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", | ||
2266 | "dev": true, | ||
2267 | "dependencies": { | ||
2268 | "os-tmpdir": "~1.0.1" | ||
2269 | } | ||
2270 | }, | ||
2271 | "node_modules/to-regex-range": { | ||
2272 | "version": "5.0.1", | ||
2273 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", | ||
2274 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", | ||
2275 | "dev": true, | ||
2276 | "dependencies": { | ||
2277 | "is-number": "^7.0.0" | ||
2278 | } | ||
2279 | }, | ||
2280 | "node_modules/tslib": { | ||
2281 | "version": "2.0.1", | ||
2282 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", | ||
2283 | "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", | ||
2284 | "dev": true | ||
2285 | }, | ||
2286 | "node_modules/tsutils": { | ||
2287 | "version": "3.17.1", | ||
2288 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", | ||
2289 | "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", | ||
2290 | "dev": true, | ||
2291 | "dependencies": { | ||
2292 | "tslib": "^1.8.1" | ||
2293 | } | ||
2294 | }, | ||
2295 | "node_modules/tsutils/node_modules/tslib": { | ||
2296 | "version": "1.13.0", | ||
2297 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", | ||
2298 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", | ||
2299 | "dev": true | ||
2300 | }, | ||
2301 | "node_modules/tunnel": { | ||
2302 | "version": "0.0.4", | ||
2303 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", | ||
2304 | "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", | ||
2305 | "dev": true | ||
2306 | }, | ||
2307 | "node_modules/type-check": { | ||
2308 | "version": "0.4.0", | ||
2309 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", | ||
2310 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", | ||
2311 | "dev": true, | ||
2312 | "dependencies": { | ||
2313 | "prelude-ls": "^1.2.1" | ||
2314 | } | ||
2315 | }, | ||
2316 | "node_modules/type-fest": { | ||
2317 | "version": "0.8.1", | ||
2318 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", | ||
2319 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", | ||
2320 | "dev": true | ||
2321 | }, | ||
2322 | "node_modules/typed-rest-client": { | ||
2323 | "version": "1.2.0", | ||
2324 | "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.2.0.tgz", | ||
2325 | "integrity": "sha512-FrUshzZ1yxH8YwGR29PWWnfksLEILbWJydU7zfIRkyH7kAEzB62uMAl2WY6EyolWpLpVHeJGgQm45/MaruaHpw==", | ||
2326 | "dev": true, | ||
2327 | "dependencies": { | ||
2328 | "tunnel": "0.0.4", | ||
2329 | "underscore": "1.8.3" | ||
2330 | } | ||
2331 | }, | ||
2332 | "node_modules/typescript": { | ||
2333 | "version": "3.9.7", | ||
2334 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", | ||
2335 | "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", | ||
2336 | "dev": true | ||
2337 | }, | ||
2338 | "node_modules/typescript-formatter": { | ||
2339 | "version": "7.2.2", | ||
2340 | "resolved": "https://registry.npmjs.org/typescript-formatter/-/typescript-formatter-7.2.2.tgz", | ||
2341 | "integrity": "sha512-V7vfI9XArVhriOTYHPzMU2WUnm5IMdu9X/CPxs8mIMGxmTBFpDABlbkBka64PZJ9/xgQeRpK8KzzAG4MPzxBDQ==", | ||
2342 | "dev": true, | ||
2343 | "dependencies": { | ||
2344 | "commandpost": "^1.0.0", | ||
2345 | "editorconfig": "^0.15.0" | ||
2346 | } | ||
2347 | }, | ||
2348 | "node_modules/uc.micro": { | ||
2349 | "version": "1.0.6", | ||
2350 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", | ||
2351 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", | ||
2352 | "dev": true | ||
2353 | }, | ||
2354 | "node_modules/underscore": { | ||
2355 | "version": "1.8.3", | ||
2356 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", | ||
2357 | "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", | ||
2358 | "dev": true | ||
2359 | }, | ||
2360 | "node_modules/uri-js": { | ||
2361 | "version": "4.4.0", | ||
2362 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", | ||
2363 | "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", | ||
2364 | "dev": true, | ||
2365 | "dependencies": { | ||
2366 | "punycode": "^2.1.0" | ||
2367 | } | ||
2368 | }, | ||
2369 | "node_modules/url-join": { | ||
2370 | "version": "1.1.0", | ||
2371 | "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", | ||
2372 | "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", | ||
2373 | "dev": true | ||
2374 | }, | ||
2375 | "node_modules/util-deprecate": { | ||
2376 | "version": "1.0.2", | ||
2377 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||
2378 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", | ||
2379 | "dev": true | ||
2380 | }, | ||
2381 | "node_modules/v8-compile-cache": { | ||
2382 | "version": "2.1.1", | ||
2383 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", | ||
2384 | "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", | ||
2385 | "dev": true | ||
2386 | }, | ||
2387 | "node_modules/vsce": { | ||
2388 | "version": "1.79.5", | ||
2389 | "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.79.5.tgz", | ||
2390 | "integrity": "sha512-KZFOthGwxWFwoGqwrkzfTfyCZGuniTofnJ1a/dCzQ2HP93u1UuCKrTQyGT+SuGHu8sNqdBYNe0hb9GC3qCN7fg==", | ||
2391 | "dev": true, | ||
2392 | "dependencies": { | ||
2393 | "azure-devops-node-api": "^7.2.0", | ||
2394 | "chalk": "^2.4.2", | ||
2395 | "cheerio": "^1.0.0-rc.1", | ||
2396 | "commander": "^2.8.1", | ||
2397 | "denodeify": "^1.2.1", | ||
2398 | "glob": "^7.0.6", | ||
2399 | "leven": "^3.1.0", | ||
2400 | "lodash": "^4.17.15", | ||
2401 | "markdown-it": "^10.0.0", | ||
2402 | "mime": "^1.3.4", | ||
2403 | "minimatch": "^3.0.3", | ||
2404 | "osenv": "^0.1.3", | ||
2405 | "parse-semver": "^1.1.1", | ||
2406 | "read": "^1.0.7", | ||
2407 | "semver": "^5.1.0", | ||
2408 | "tmp": "0.0.29", | ||
2409 | "typed-rest-client": "1.2.0", | ||
2410 | "url-join": "^1.1.0", | ||
2411 | "yauzl": "^2.3.1", | ||
2412 | "yazl": "^2.2.2" | ||
2413 | } | ||
2414 | }, | ||
2415 | "node_modules/vsce/node_modules/semver": { | ||
2416 | "version": "5.7.1", | ||
2417 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
2418 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | ||
2419 | "dev": true | ||
2420 | }, | ||
2421 | "node_modules/vscode-jsonrpc": { | ||
2422 | "version": "6.0.0-next.7", | ||
2423 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0-next.7.tgz", | ||
2424 | "integrity": "sha512-1nG+6cuTtpzmXe7yYfO9GCkYlyV6Ai+jDnwidHiT2T7zhc+bJM+VTtc0T/CdTlDyTNTqIcCj0V1nD4TcVjJ7Ug==" | ||
2425 | }, | ||
2426 | "node_modules/vscode-languageclient": { | ||
2427 | "version": "7.0.0-next.12", | ||
2428 | "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0-next.12.tgz", | ||
2429 | "integrity": "sha512-OrzvOvhS5o26C0KctTJC7hkwh3avCwkVhllzy42AqwpIUZ3p2aVqkSG2uVxaeodq8ThBb3TLgtg50vxyWs6FEg==", | ||
2430 | "dependencies": { | ||
2431 | "semver": "^6.3.0", | ||
2432 | "vscode-languageserver-protocol": "3.16.0-next.10" | ||
2433 | } | ||
2434 | }, | ||
2435 | "node_modules/vscode-languageserver-protocol": { | ||
2436 | "version": "3.16.0-next.10", | ||
2437 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0-next.10.tgz", | ||
2438 | "integrity": "sha512-YRTctHUZvts0Z1xXKNYU0ha0o+Tlgtwr+6O8OmDquM086N8exiSKBMwMC+Ra1QtIE+1mfW43Wxsme2FnMkAS9A==", | ||
2439 | "dependencies": { | ||
2440 | "vscode-jsonrpc": "6.0.0-next.7", | ||
2441 | "vscode-languageserver-types": "3.16.0-next.4" | ||
2442 | } | ||
2443 | }, | ||
2444 | "node_modules/vscode-languageserver-types": { | ||
2445 | "version": "3.16.0-next.4", | ||
2446 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.4.tgz", | ||
2447 | "integrity": "sha512-NlKJyGcET/ZBCCLBYIPaGo2c37R03bPYeWXozUtnjyye7+9dhlbMSODyoG2INcQf8zFmB4qhm2UOJjgYEgPCNA==" | ||
2448 | }, | ||
2449 | "node_modules/vscode-test": { | ||
2450 | "version": "1.4.0", | ||
2451 | "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.4.0.tgz", | ||
2452 | "integrity": "sha512-Jt7HNGvSE0+++Tvtq5wc4hiXLIr2OjDShz/gbAfM/mahQpy4rKBnmOK33D+MR67ATWviQhl+vpmU3p/qwSH/Pg==", | ||
2453 | "dev": true, | ||
2454 | "dependencies": { | ||
2455 | "http-proxy-agent": "^2.1.0", | ||
2456 | "https-proxy-agent": "^2.2.4", | ||
2457 | "rimraf": "^2.6.3" | ||
2458 | } | ||
2459 | }, | ||
2460 | "node_modules/which": { | ||
2461 | "version": "2.0.2", | ||
2462 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", | ||
2463 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", | ||
2464 | "dev": true, | ||
2465 | "dependencies": { | ||
2466 | "isexe": "^2.0.0" | ||
2467 | } | ||
2468 | }, | ||
2469 | "node_modules/which-module": { | ||
2470 | "version": "2.0.0", | ||
2471 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", | ||
2472 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", | ||
2473 | "dev": true | ||
2474 | }, | ||
2475 | "node_modules/wide-align": { | ||
2476 | "version": "1.1.3", | ||
2477 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", | ||
2478 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", | ||
2479 | "dev": true, | ||
2480 | "dependencies": { | ||
2481 | "string-width": "^1.0.2 || 2" | ||
2482 | } | ||
2483 | }, | ||
2484 | "node_modules/wide-align/node_modules/ansi-regex": { | ||
2485 | "version": "3.0.0", | ||
2486 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", | ||
2487 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", | ||
2488 | "dev": true | ||
2489 | }, | ||
2490 | "node_modules/wide-align/node_modules/string-width": { | ||
2491 | "version": "2.1.1", | ||
2492 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", | ||
2493 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", | ||
2494 | "dev": true, | ||
2495 | "dependencies": { | ||
2496 | "is-fullwidth-code-point": "^2.0.0", | ||
2497 | "strip-ansi": "^4.0.0" | ||
2498 | } | ||
2499 | }, | ||
2500 | "node_modules/wide-align/node_modules/strip-ansi": { | ||
2501 | "version": "4.0.0", | ||
2502 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", | ||
2503 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", | ||
2504 | "dev": true, | ||
2505 | "dependencies": { | ||
2506 | "ansi-regex": "^3.0.0" | ||
2507 | } | ||
2508 | }, | ||
2509 | "node_modules/word-wrap": { | ||
2510 | "version": "1.2.3", | ||
2511 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", | ||
2512 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", | ||
2513 | "dev": true | ||
2514 | }, | ||
2515 | "node_modules/workerpool": { | ||
2516 | "version": "6.0.0", | ||
2517 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", | ||
2518 | "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", | ||
2519 | "dev": true | ||
2520 | }, | ||
2521 | "node_modules/wrap-ansi": { | ||
2522 | "version": "5.1.0", | ||
2523 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", | ||
2524 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", | ||
2525 | "dev": true, | ||
2526 | "dependencies": { | ||
2527 | "ansi-styles": "^3.2.0", | ||
2528 | "string-width": "^3.0.0", | ||
2529 | "strip-ansi": "^5.0.0" | ||
2530 | } | ||
2531 | }, | ||
2532 | "node_modules/wrap-ansi/node_modules/ansi-regex": { | ||
2533 | "version": "4.1.0", | ||
2534 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", | ||
2535 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", | ||
2536 | "dev": true | ||
2537 | }, | ||
2538 | "node_modules/wrap-ansi/node_modules/strip-ansi": { | ||
2539 | "version": "5.2.0", | ||
2540 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||
2541 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||
2542 | "dev": true, | ||
2543 | "dependencies": { | ||
2544 | "ansi-regex": "^4.1.0" | ||
2545 | } | ||
2546 | }, | ||
2547 | "node_modules/wrappy": { | ||
2548 | "version": "1.0.2", | ||
2549 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | ||
2550 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", | ||
2551 | "dev": true | ||
2552 | }, | ||
2553 | "node_modules/write": { | ||
2554 | "version": "1.0.3", | ||
2555 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", | ||
2556 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", | ||
2557 | "dev": true, | ||
2558 | "dependencies": { | ||
2559 | "mkdirp": "^0.5.1" | ||
2560 | } | ||
2561 | }, | ||
2562 | "node_modules/y18n": { | ||
2563 | "version": "4.0.0", | ||
2564 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", | ||
2565 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", | ||
2566 | "dev": true | ||
2567 | }, | ||
2568 | "node_modules/yallist": { | ||
2569 | "version": "2.1.2", | ||
2570 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", | ||
2571 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", | ||
2572 | "dev": true | ||
2573 | }, | ||
2574 | "node_modules/yargs": { | ||
2575 | "version": "13.3.2", | ||
2576 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", | ||
2577 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", | ||
2578 | "dev": true, | ||
2579 | "dependencies": { | ||
2580 | "cliui": "^5.0.0", | ||
2581 | "find-up": "^3.0.0", | ||
2582 | "get-caller-file": "^2.0.1", | ||
2583 | "require-directory": "^2.1.1", | ||
2584 | "require-main-filename": "^2.0.0", | ||
2585 | "set-blocking": "^2.0.0", | ||
2586 | "string-width": "^3.0.0", | ||
2587 | "which-module": "^2.0.0", | ||
2588 | "y18n": "^4.0.0", | ||
2589 | "yargs-parser": "^13.1.2" | ||
2590 | } | ||
2591 | }, | ||
2592 | "node_modules/yargs-parser": { | ||
2593 | "version": "13.1.2", | ||
2594 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", | ||
2595 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", | ||
2596 | "dev": true, | ||
2597 | "dependencies": { | ||
2598 | "camelcase": "^5.0.0", | ||
2599 | "decamelize": "^1.2.0" | ||
2600 | } | ||
2601 | }, | ||
2602 | "node_modules/yargs-unparser": { | ||
2603 | "version": "1.6.1", | ||
2604 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", | ||
2605 | "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", | ||
2606 | "dev": true, | ||
2607 | "dependencies": { | ||
2608 | "camelcase": "^5.3.1", | ||
2609 | "decamelize": "^1.2.0", | ||
2610 | "flat": "^4.1.0", | ||
2611 | "is-plain-obj": "^1.1.0", | ||
2612 | "yargs": "^14.2.3" | ||
2613 | } | ||
2614 | }, | ||
2615 | "node_modules/yargs-unparser/node_modules/find-up": { | ||
2616 | "version": "3.0.0", | ||
2617 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", | ||
2618 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", | ||
2619 | "dev": true, | ||
2620 | "dependencies": { | ||
2621 | "locate-path": "^3.0.0" | ||
2622 | } | ||
2623 | }, | ||
2624 | "node_modules/yargs-unparser/node_modules/locate-path": { | ||
2625 | "version": "3.0.0", | ||
2626 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", | ||
2627 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", | ||
2628 | "dev": true, | ||
2629 | "dependencies": { | ||
2630 | "p-locate": "^3.0.0", | ||
2631 | "path-exists": "^3.0.0" | ||
2632 | } | ||
2633 | }, | ||
2634 | "node_modules/yargs-unparser/node_modules/p-limit": { | ||
2635 | "version": "2.3.0", | ||
2636 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", | ||
2637 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", | ||
2638 | "dev": true, | ||
2639 | "dependencies": { | ||
2640 | "p-try": "^2.0.0" | ||
2641 | } | ||
2642 | }, | ||
2643 | "node_modules/yargs-unparser/node_modules/p-locate": { | ||
2644 | "version": "3.0.0", | ||
2645 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", | ||
2646 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", | ||
2647 | "dev": true, | ||
2648 | "dependencies": { | ||
2649 | "p-limit": "^2.0.0" | ||
2650 | } | ||
2651 | }, | ||
2652 | "node_modules/yargs-unparser/node_modules/path-exists": { | ||
2653 | "version": "3.0.0", | ||
2654 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", | ||
2655 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", | ||
2656 | "dev": true | ||
2657 | }, | ||
2658 | "node_modules/yargs-unparser/node_modules/yargs": { | ||
2659 | "version": "14.2.3", | ||
2660 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", | ||
2661 | "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", | ||
2662 | "dev": true, | ||
2663 | "dependencies": { | ||
2664 | "cliui": "^5.0.0", | ||
2665 | "decamelize": "^1.2.0", | ||
2666 | "find-up": "^3.0.0", | ||
2667 | "get-caller-file": "^2.0.1", | ||
2668 | "require-directory": "^2.1.1", | ||
2669 | "require-main-filename": "^2.0.0", | ||
2670 | "set-blocking": "^2.0.0", | ||
2671 | "string-width": "^3.0.0", | ||
2672 | "which-module": "^2.0.0", | ||
2673 | "y18n": "^4.0.0", | ||
2674 | "yargs-parser": "^15.0.1" | ||
2675 | } | ||
2676 | }, | ||
2677 | "node_modules/yargs-unparser/node_modules/yargs-parser": { | ||
2678 | "version": "15.0.1", | ||
2679 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", | ||
2680 | "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", | ||
2681 | "dev": true, | ||
2682 | "dependencies": { | ||
2683 | "camelcase": "^5.0.0", | ||
2684 | "decamelize": "^1.2.0" | ||
2685 | } | ||
2686 | }, | ||
2687 | "node_modules/yargs/node_modules/find-up": { | ||
2688 | "version": "3.0.0", | ||
2689 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", | ||
2690 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", | ||
2691 | "dev": true, | ||
2692 | "dependencies": { | ||
2693 | "locate-path": "^3.0.0" | ||
2694 | } | ||
2695 | }, | ||
2696 | "node_modules/yargs/node_modules/locate-path": { | ||
2697 | "version": "3.0.0", | ||
2698 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", | ||
2699 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", | ||
2700 | "dev": true, | ||
2701 | "dependencies": { | ||
2702 | "p-locate": "^3.0.0", | ||
2703 | "path-exists": "^3.0.0" | ||
2704 | } | ||
2705 | }, | ||
2706 | "node_modules/yargs/node_modules/p-limit": { | ||
2707 | "version": "2.3.0", | ||
2708 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", | ||
2709 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", | ||
2710 | "dev": true, | ||
2711 | "dependencies": { | ||
2712 | "p-try": "^2.0.0" | ||
2713 | } | ||
2714 | }, | ||
2715 | "node_modules/yargs/node_modules/p-locate": { | ||
2716 | "version": "3.0.0", | ||
2717 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", | ||
2718 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", | ||
2719 | "dev": true, | ||
2720 | "dependencies": { | ||
2721 | "p-limit": "^2.0.0" | ||
2722 | } | ||
2723 | }, | ||
2724 | "node_modules/yargs/node_modules/path-exists": { | ||
2725 | "version": "3.0.0", | ||
2726 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", | ||
2727 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", | ||
2728 | "dev": true | ||
2729 | }, | ||
2730 | "node_modules/yauzl": { | ||
2731 | "version": "2.10.0", | ||
2732 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", | ||
2733 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", | ||
2734 | "dev": true, | ||
2735 | "dependencies": { | ||
2736 | "buffer-crc32": "~0.2.3", | ||
2737 | "fd-slicer": "~1.1.0" | ||
2738 | } | ||
2739 | }, | ||
2740 | "node_modules/yazl": { | ||
2741 | "version": "2.5.1", | ||
2742 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", | ||
2743 | "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", | ||
2744 | "dev": true, | ||
2745 | "dependencies": { | ||
2746 | "buffer-crc32": "~0.2.3" | ||
2747 | } | ||
2748 | } | ||
2749 | }, | ||
2750 | "dependencies": { | 6 | "dependencies": { |
2751 | "@babel/code-frame": { | 7 | "@babel/code-frame": { |
2752 | "version": "7.10.4", | 8 | "version": "7.10.4", |
@@ -4890,15 +2146,6 @@ | |||
4890 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", | 2146 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", |
4891 | "dev": true | 2147 | "dev": true |
4892 | }, | 2148 | }, |
4893 | "string_decoder": { | ||
4894 | "version": "1.3.0", | ||
4895 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", | ||
4896 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", | ||
4897 | "dev": true, | ||
4898 | "requires": { | ||
4899 | "safe-buffer": "~5.2.0" | ||
4900 | } | ||
4901 | }, | ||
4902 | "string-width": { | 2149 | "string-width": { |
4903 | "version": "3.1.0", | 2150 | "version": "3.1.0", |
4904 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | 2151 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", |
@@ -4947,6 +2194,15 @@ | |||
4947 | "es-abstract": "^1.17.5" | 2194 | "es-abstract": "^1.17.5" |
4948 | } | 2195 | } |
4949 | }, | 2196 | }, |
2197 | "string_decoder": { | ||
2198 | "version": "1.3.0", | ||
2199 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", | ||
2200 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", | ||
2201 | "dev": true, | ||
2202 | "requires": { | ||
2203 | "safe-buffer": "~5.2.0" | ||
2204 | } | ||
2205 | }, | ||
4950 | "strip-ansi": { | 2206 | "strip-ansi": { |
4951 | "version": "6.0.0", | 2207 | "version": "6.0.0", |
4952 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", | 2208 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", |
diff --git a/editors/code/package.json b/editors/code/package.json index 6db78a99a..220d44abc 100644 --- a/editors/code/package.json +++ b/editors/code/package.json | |||
@@ -187,6 +187,11 @@ | |||
187 | "command": "rust-analyzer.openDocs", | 187 | "command": "rust-analyzer.openDocs", |
188 | "title": "Open docs under cursor", | 188 | "title": "Open docs under cursor", |
189 | "category": "Rust Analyzer" | 189 | "category": "Rust Analyzer" |
190 | }, | ||
191 | { | ||
192 | "command": "rust-analyzer.openCargoToml", | ||
193 | "title": "Open Cargo.toml", | ||
194 | "category": "Rust Analyzer" | ||
190 | } | 195 | } |
191 | ], | 196 | ], |
192 | "keybindings": [ | 197 | "keybindings": [ |
@@ -278,6 +283,11 @@ | |||
278 | "default": null, | 283 | "default": null, |
279 | "description": "Specify the compilation target" | 284 | "description": "Specify the compilation target" |
280 | }, | 285 | }, |
286 | "rust-analyzer.noSysroot": { | ||
287 | "markdownDescription": "Internal config for debugging, disables loading of sysroot crates", | ||
288 | "type": "boolean", | ||
289 | "default": false | ||
290 | }, | ||
281 | "rust-analyzer.rustfmt.extraArgs": { | 291 | "rust-analyzer.rustfmt.extraArgs": { |
282 | "type": "array", | 292 | "type": "array", |
283 | "items": { | 293 | "items": { |
@@ -600,11 +610,6 @@ | |||
600 | }, | 610 | }, |
601 | "default": null | 611 | "default": null |
602 | }, | 612 | }, |
603 | "rust-analyzer.withSysroot": { | ||
604 | "markdownDescription": "Internal config for debugging, disables loading of sysroot crates", | ||
605 | "type": "boolean", | ||
606 | "default": true | ||
607 | }, | ||
608 | "rust-analyzer.diagnostics.enable": { | 613 | "rust-analyzer.diagnostics.enable": { |
609 | "type": "boolean", | 614 | "type": "boolean", |
610 | "default": true, | 615 | "default": true, |
@@ -1065,6 +1070,10 @@ | |||
1065 | { | 1070 | { |
1066 | "command": "rust-analyzer.openDocs", | 1071 | "command": "rust-analyzer.openDocs", |
1067 | "when": "inRustProject" | 1072 | "when": "inRustProject" |
1073 | }, | ||
1074 | { | ||
1075 | "command": "rust-analyzer.openCargoToml", | ||
1076 | "when": "inRustProject" | ||
1068 | } | 1077 | } |
1069 | ] | 1078 | ] |
1070 | } | 1079 | } |
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts index cf34622c3..92bc4d7f7 100644 --- a/editors/code/src/commands.ts +++ b/editors/code/src/commands.ts | |||
@@ -188,6 +188,27 @@ export function parentModule(ctx: Ctx): Cmd { | |||
188 | }; | 188 | }; |
189 | } | 189 | } |
190 | 190 | ||
191 | export function openCargoToml(ctx: Ctx): Cmd { | ||
192 | return async () => { | ||
193 | const editor = ctx.activeRustEditor; | ||
194 | const client = ctx.client; | ||
195 | if (!editor || !client) return; | ||
196 | |||
197 | const response = await client.sendRequest(ra.openCargoToml, { | ||
198 | textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document), | ||
199 | }); | ||
200 | if (!response) return; | ||
201 | |||
202 | const uri = client.protocol2CodeConverter.asUri(response.uri); | ||
203 | const range = client.protocol2CodeConverter.asRange(response.range); | ||
204 | |||
205 | const doc = await vscode.workspace.openTextDocument(uri); | ||
206 | const e = await vscode.window.showTextDocument(doc); | ||
207 | e.selection = new vscode.Selection(range.start, range.start); | ||
208 | e.revealRange(range, vscode.TextEditorRevealType.InCenter); | ||
209 | }; | ||
210 | } | ||
211 | |||
191 | export function ssr(ctx: Ctx): Cmd { | 212 | export function ssr(ctx: Ctx): Cmd { |
192 | return async () => { | 213 | return async () => { |
193 | const editor = vscode.window.activeTextEditor; | 214 | const editor = vscode.window.activeTextEditor; |
diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts index d320c3cd7..5e877ce65 100644 --- a/editors/code/src/lsp_ext.ts +++ b/editors/code/src/lsp_ext.ts | |||
@@ -114,3 +114,9 @@ export interface CommandLinkGroup { | |||
114 | } | 114 | } |
115 | 115 | ||
116 | export const openDocs = new lc.RequestType<lc.TextDocumentPositionParams, string | void, void>('experimental/externalDocs'); | 116 | export const openDocs = new lc.RequestType<lc.TextDocumentPositionParams, string | void, void>('experimental/externalDocs'); |
117 | |||
118 | export const openCargoToml = new lc.RequestType<OpenCargoTomlParams, lc.Location, void>("experimental/openCargoToml"); | ||
119 | |||
120 | export interface OpenCargoTomlParams { | ||
121 | textDocument: lc.TextDocumentIdentifier; | ||
122 | } | ||
diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts index 09543e348..2f3dde8ac 100644 --- a/editors/code/src/main.ts +++ b/editors/code/src/main.ts | |||
@@ -111,6 +111,7 @@ async function tryActivate(context: vscode.ExtensionContext) { | |||
111 | ctx.registerCommand('debug', commands.debug); | 111 | ctx.registerCommand('debug', commands.debug); |
112 | ctx.registerCommand('newDebugConfig', commands.newDebugConfig); | 112 | ctx.registerCommand('newDebugConfig', commands.newDebugConfig); |
113 | ctx.registerCommand('openDocs', commands.openDocs); | 113 | ctx.registerCommand('openDocs', commands.openDocs); |
114 | ctx.registerCommand('openCargoToml', commands.openCargoToml); | ||
114 | 115 | ||
115 | defaultOnEnter.dispose(); | 116 | defaultOnEnter.dispose(); |
116 | ctx.registerCommand('onEnter', commands.onEnter); | 117 | ctx.registerCommand('onEnter', commands.onEnter); |
diff --git a/xtask/src/install.rs b/xtask/src/install.rs index 41f3e3da1..78a8af797 100644 --- a/xtask/src/install.rs +++ b/xtask/src/install.rs | |||
@@ -143,7 +143,7 @@ fn install_client(client_opt: ClientOpt) -> Result<()> { | |||
143 | if !installed_extensions.contains("rust-analyzer") { | 143 | if !installed_extensions.contains("rust-analyzer") { |
144 | bail!( | 144 | bail!( |
145 | "Could not install the Visual Studio Code extension. \ | 145 | "Could not install the Visual Studio Code extension. \ |
146 | Please make sure you have at least NodeJS 15.x together with the latest version of VS Code installed and try again. \ | 146 | Please make sure you have at least NodeJS 12.x together with the latest version of VS Code installed and try again. \ |
147 | Note that installing via xtask install does not work for VS Code Remote, instead you’ll need to install the .vsix manually." | 147 | Note that installing via xtask install does not work for VS Code Remote, instead you’ll need to install the .vsix manually." |
148 | ); | 148 | ); |
149 | } | 149 | } |