aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_hir/src/code_model_impl/function/scope.rs2
-rw-r--r--crates/ra_hir/src/expr.rs9
-rw-r--r--crates/ra_hir/src/ty.rs109
-rw-r--r--editors/code/package-lock.json90
4 files changed, 90 insertions, 120 deletions
diff --git a/crates/ra_hir/src/code_model_impl/function/scope.rs b/crates/ra_hir/src/code_model_impl/function/scope.rs
index 220c71f74..3a7d53a93 100644
--- a/crates/ra_hir/src/code_model_impl/function/scope.rs
+++ b/crates/ra_hir/src/code_model_impl/function/scope.rs
@@ -97,8 +97,6 @@ impl FnScopes {
97 }; 97 };
98 self.scopes[scope].entries.push(entry) 98 self.scopes[scope].entries.push(entry)
99 } 99 }
100 // FIXME: isn't every call to add_binding starting an entirely new
101 // tree walk!?
102 p => p.walk_child_pats(|pat| self.add_bindings(body, scope, pat)), 100 p => p.walk_child_pats(|pat| self.add_bindings(body, scope, pat)),
103 } 101 }
104 } 102 }
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs
index c05bbc442..1d0beb148 100644
--- a/crates/ra_hir/src/expr.rs
+++ b/crates/ra_hir/src/expr.rs
@@ -329,8 +329,6 @@ impl Expr {
329pub struct PatId(RawId); 329pub struct PatId(RawId);
330impl_arena_id!(PatId); 330impl_arena_id!(PatId);
331 331
332// copied verbatim from librustc::hir
333
334/// Explicit binding annotations given in the HIR for a binding. Note 332/// Explicit binding annotations given in the HIR for a binding. Note
335/// that this is not the final binding *mode* that we infer after type 333/// that this is not the final binding *mode* that we infer after type
336/// inference. 334/// inference.
@@ -341,8 +339,6 @@ pub enum BindingAnnotation {
341 /// when matching. For example, the `x` in `Some(x)` will have binding 339 /// when matching. For example, the `x` in `Some(x)` will have binding
342 /// mode `None`; if you do `let Some(x) = &Some(22)`, it will 340 /// mode `None`; if you do `let Some(x) = &Some(22)`, it will
343 /// ultimately be inferred to be by-reference. 341 /// ultimately be inferred to be by-reference.
344 ///
345 /// Note that implicit reference skipping is not implemented yet (#42640).
346 Unannotated, 342 Unannotated,
347 343
348 /// Annotated with `mut x` -- could be either ref or not, similar to `None`. 344 /// Annotated with `mut x` -- could be either ref or not, similar to `None`.
@@ -375,7 +371,7 @@ pub struct FieldPat {
375/// Close relative to rustc's hir::PatKind 371/// Close relative to rustc's hir::PatKind
376#[derive(Debug, Clone, Eq, PartialEq)] 372#[derive(Debug, Clone, Eq, PartialEq)]
377pub enum Pat { 373pub enum Pat {
378 Missing, // do we need this? 374 Missing,
379 Wild, 375 Wild,
380 Tuple(Vec<PatId>), 376 Tuple(Vec<PatId>),
381 Struct { 377 Struct {
@@ -387,7 +383,6 @@ pub enum Pat {
387 start: ExprId, 383 start: ExprId,
388 end: ExprId, 384 end: ExprId,
389 }, 385 },
390 Box(PatId),
391 Slice { 386 Slice {
392 prefix: Vec<PatId>, 387 prefix: Vec<PatId>,
393 rest: Option<PatId>, 388 rest: Option<PatId>,
@@ -420,7 +415,7 @@ impl Pat {
420 Pat::Tuple(args) | Pat::TupleStruct { args, .. } => { 415 Pat::Tuple(args) | Pat::TupleStruct { args, .. } => {
421 args.iter().map(|pat| *pat).for_each(f); 416 args.iter().map(|pat| *pat).for_each(f);
422 } 417 }
423 Pat::Ref { pat, .. } | Pat::Box(pat) => f(*pat), 418 Pat::Ref { pat, .. } => f(*pat),
424 Pat::Slice { 419 Pat::Slice {
425 prefix, 420 prefix,
426 rest, 421 rest,
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs
index 53b7b5836..09b816cc7 100644
--- a/crates/ra_hir/src/ty.rs
+++ b/crates/ra_hir/src/ty.rs
@@ -37,7 +37,7 @@ use crate::{
37 db::HirDatabase, 37 db::HirDatabase,
38 type_ref::{TypeRef, Mutability}, 38 type_ref::{TypeRef, Mutability},
39 name::KnownName, 39 name::KnownName,
40 expr::{Body, Expr, BindingAnnotation, MatchArm, Literal, ExprId, Pat, PatId, UnaryOp, BinaryOp, Statement, FieldPat}, 40 expr::{Body, Expr, BindingAnnotation, Literal, ExprId, Pat, PatId, UnaryOp, BinaryOp, Statement, FieldPat},
41}; 41};
42 42
43/// The ID of a type variable. 43/// The ID of a type variable.
@@ -874,15 +874,8 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
874 } 874 }
875 875
876 fn resolve_fields(&self, path: Option<&Path>) -> Option<(Ty, Vec<StructField>)> { 876 fn resolve_fields(&self, path: Option<&Path>) -> Option<(Ty, Vec<StructField>)> {
877 let def = path 877 let def_id = self.module.resolve_path(self.db, path?).take_types()?;
878 .and_then(|path| self.module.resolve_path(self.db, &path).take_types()) 878 let def = def_id.resolve(self.db);
879 .map(|def_id| def_id.resolve(self.db));
880
881 let def = if let Some(def) = def {
882 def
883 } else {
884 return None;
885 };
886 879
887 match def { 880 match def {
888 Def::Struct(s) => { 881 Def::Struct(s) => {
@@ -891,60 +884,47 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
891 .struct_data(s.def_id()) 884 .struct_data(s.def_id())
892 .variant_data 885 .variant_data
893 .fields() 886 .fields()
894 .iter() 887 .to_owned();
895 .cloned()
896 .collect();
897 Some((type_for_struct(self.db, s), fields)) 888 Some((type_for_struct(self.db, s), fields))
898 } 889 }
899 Def::EnumVariant(ev) => { 890 Def::EnumVariant(ev) => {
900 let fields: Vec<_> = ev.variant_data(self.db).fields().iter().cloned().collect(); 891 let fields: Vec<_> = ev.variant_data(self.db).fields().to_owned();
901 Some((type_for_enum_variant(self.db, ev), fields)) 892 Some((type_for_enum_variant(self.db, ev), fields))
902 } 893 }
903 _ => None, 894 _ => None,
904 } 895 }
905 } 896 }
906 897
907 fn infer_tuple_struct(&mut self, path: Option<&Path>, subpats: &[PatId]) -> Ty { 898 fn infer_tuple_struct_pat(&mut self, path: Option<&Path>, subpats: &[PatId]) -> Ty {
908 let (ty, fields) = if let Some(x) = self.resolve_fields(path) { 899 let (ty, fields) = self
909 x 900 .resolve_fields(path)
910 } else { 901 .unwrap_or((Ty::Unknown, Vec::new()));
911 return Ty::Unknown;
912 };
913
914 if fields.len() != subpats.len() {
915 return Ty::Unknown;
916 }
917 902
918 for (&subpat, field) in subpats.iter().zip(fields.iter()) { 903 for (i, &subpat) in subpats.iter().enumerate() {
919 let sub_ty = self.make_ty(&field.type_ref); 904 let expected_ty = fields
920 self.infer_pat(subpat, &Expectation::has_type(sub_ty)); 905 .get(i)
906 .map_or(Ty::Unknown, |field| self.make_ty(&field.type_ref));
907 self.infer_pat(subpat, &Expectation::has_type(expected_ty));
921 } 908 }
922 909
923 ty 910 ty
924 } 911 }
925 912
926 fn infer_struct(&mut self, path: Option<&Path>, subpats: &[FieldPat]) -> Ty { 913 fn infer_struct_pat(&mut self, path: Option<&Path>, subpats: &[FieldPat]) -> Ty {
927 let (ty, fields) = if let Some(x) = self.resolve_fields(path) { 914 let (ty, fields) = self
928 x 915 .resolve_fields(path)
929 } else { 916 .unwrap_or((Ty::Unknown, Vec::new()));
930 return Ty::Unknown;
931 };
932 917
933 for subpat in subpats { 918 for subpat in subpats {
934 let matching_field = fields.iter().find(|field| field.name == subpat.name); 919 let matching_field = fields.iter().find(|field| field.name == subpat.name);
935 920 let expected_ty =
936 if let Some(field) = matching_field { 921 matching_field.map_or(Ty::Unknown, |field| self.make_ty(&field.type_ref));
937 let typeref = &field.type_ref; 922 self.infer_pat(subpat.pat, &Expectation::has_type(expected_ty));
938 let sub_ty = self.make_ty(typeref);
939 self.infer_pat(subpat.pat, &Expectation::has_type(sub_ty));
940 }
941 } 923 }
942 924
943 ty 925 ty
944 } 926 }
945 927
946 // TODO: Expectation should probably contain a Cow pointer to Ty?
947 // so that we can make new expectations of subtypes cheaply
948 fn infer_pat(&mut self, pat: PatId, expected: &Expectation) -> Ty { 928 fn infer_pat(&mut self, pat: PatId, expected: &Expectation) -> Ty {
949 let body = Arc::clone(&self.body); // avoid borrow checker problem 929 let body = Arc::clone(&self.body); // avoid borrow checker problem
950 930
@@ -969,7 +949,10 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
969 } 949 }
970 Pat::Ref { pat, mutability } => { 950 Pat::Ref { pat, mutability } => {
971 let expectation = match expected.ty { 951 let expectation = match expected.ty {
972 Ty::Ref(ref sub_ty, exp_mut) if *mutability == exp_mut => { 952 Ty::Ref(ref sub_ty, exp_mut) => {
953 if *mutability != exp_mut {
954 // TODO: emit type error?
955 }
973 Expectation::has_type((&**sub_ty).clone()) 956 Expectation::has_type((&**sub_ty).clone())
974 } 957 }
975 _ => Expectation::none(), 958 _ => Expectation::none(),
@@ -980,18 +963,16 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
980 Pat::TupleStruct { 963 Pat::TupleStruct {
981 path: ref p, 964 path: ref p,
982 args: ref subpats, 965 args: ref subpats,
983 } => self.infer_tuple_struct(p.as_ref(), subpats), 966 } => self.infer_tuple_struct_pat(p.as_ref(), subpats),
984 Pat::Struct { 967 Pat::Struct {
985 path: ref p, 968 path: ref p,
986 args: ref fields, 969 args: ref fields,
987 } => self.infer_struct(p.as_ref(), fields), 970 } => self.infer_struct_pat(p.as_ref(), fields),
988 Pat::Path(path) => { 971 Pat::Path(path) => self
989 // is this right? 972 .module
990 self.module 973 .resolve_path(self.db, &path)
991 .resolve_path(self.db, &path) 974 .take_values()
992 .take_values() 975 .map_or(Ty::Unknown, |resolved| self.db.type_for_def(resolved)),
993 .map_or(Ty::Unknown, |resolved| self.db.type_for_def(resolved))
994 }
995 Pat::Bind { 976 Pat::Bind {
996 mode, 977 mode,
997 name: _name, 978 name: _name,
@@ -1000,10 +981,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
1000 let subty = if let Some(subpat) = subpat { 981 let subty = if let Some(subpat) = subpat {
1001 self.infer_pat(*subpat, expected) 982 self.infer_pat(*subpat, expected)
1002 } else { 983 } else {
1003 let ty = self.new_type_var(); 984 expected.ty.clone()
1004 self.unify(&ty, &expected.ty);
1005 let ty = self.resolve_ty_as_possible(ty);
1006 ty
1007 }; 985 };
1008 986
1009 match mode { 987 match mode {
@@ -1075,8 +1053,8 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
1075 assert_eq!(args.len(), arg_types.len()); 1053 assert_eq!(args.len(), arg_types.len());
1076 1054
1077 for (arg_pat, arg_type) in args.iter().zip(arg_types.iter()) { 1055 for (arg_pat, arg_type) in args.iter().zip(arg_types.iter()) {
1078 let expected = if let Some(tyref) = arg_type { 1056 let expected = if let Some(type_ref) = arg_type {
1079 let ty = self.make_ty(tyref); 1057 let ty = self.make_ty(type_ref);
1080 Expectation::has_type(ty) 1058 Expectation::has_type(ty)
1081 } else { 1059 } else {
1082 Expectation::none() 1060 Expectation::none()
@@ -1143,21 +1121,20 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
1143 ret_ty 1121 ret_ty
1144 } 1122 }
1145 Expr::Match { expr, arms } => { 1123 Expr::Match { expr, arms } => {
1146 let mut expected = expected.clone(); 1124 let expected = if expected.ty == Ty::Unknown {
1125 Expectation::has_type(self.new_type_var())
1126 } else {
1127 expected.clone()
1128 };
1147 let input_ty = self.infer_expr(*expr, &Expectation::none()); 1129 let input_ty = self.infer_expr(*expr, &Expectation::none());
1148 let pat_expectation = Expectation::has_type(input_ty); 1130 let pat_expectation = Expectation::has_type(input_ty);
1149 1131
1150 for MatchArm { 1132 for arm in arms {
1151 pats, 1133 for &pat in &arm.pats {
1152 expr: arm_expr,
1153 } in arms
1154 {
1155 for &pat in pats {
1156 let _pat_ty = self.infer_pat(pat, &pat_expectation); 1134 let _pat_ty = self.infer_pat(pat, &pat_expectation);
1157 } 1135 }
1158 // TODO type the guard 1136 // TODO type the guard
1159 let ty = self.infer_expr(*arm_expr, &expected); 1137 self.infer_expr(arm.expr, &expected);
1160 expected = Expectation::has_type(ty);
1161 } 1138 }
1162 1139
1163 expected.ty 1140 expected.ty
diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json
index a36fb2f1c..86313d4cc 100644
--- a/editors/code/package-lock.json
+++ b/editors/code/package-lock.json
@@ -183,7 +183,7 @@
183 "dependencies": { 183 "dependencies": {
184 "chalk": { 184 "chalk": {
185 "version": "1.1.3", 185 "version": "1.1.3",
186 "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 186 "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
187 "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 187 "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
188 "dev": true, 188 "dev": true,
189 "requires": { 189 "requires": {
@@ -348,7 +348,7 @@
348 "dependencies": { 348 "dependencies": {
349 "readable-stream": { 349 "readable-stream": {
350 "version": "2.3.6", 350 "version": "2.3.6",
351 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 351 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
352 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 352 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
353 "dev": true, 353 "dev": true,
354 "requires": { 354 "requires": {
@@ -363,7 +363,7 @@
363 }, 363 },
364 "string_decoder": { 364 "string_decoder": {
365 "version": "1.1.1", 365 "version": "1.1.1",
366 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 366 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
367 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 367 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
368 "dev": true, 368 "dev": true,
369 "requires": { 369 "requires": {
@@ -425,7 +425,7 @@
425 }, 425 },
426 "css-select": { 426 "css-select": {
427 "version": "1.2.0", 427 "version": "1.2.0",
428 "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 428 "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
429 "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 429 "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
430 "dev": true, 430 "dev": true,
431 "requires": { 431 "requires": {
@@ -461,7 +461,7 @@
461 }, 461 },
462 "deep-assign": { 462 "deep-assign": {
463 "version": "1.0.0", 463 "version": "1.0.0",
464 "resolved": "http://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", 464 "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz",
465 "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", 465 "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=",
466 "dev": true, 466 "dev": true,
467 "requires": { 467 "requires": {
@@ -507,7 +507,7 @@
507 "dependencies": { 507 "dependencies": {
508 "domelementtype": { 508 "domelementtype": {
509 "version": "1.1.3", 509 "version": "1.1.3",
510 "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", 510 "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
511 "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", 511 "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
512 "dev": true 512 "dev": true
513 } 513 }
@@ -540,7 +540,7 @@
540 }, 540 },
541 "duplexer": { 541 "duplexer": {
542 "version": "0.1.1", 542 "version": "0.1.1",
543 "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 543 "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
544 "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 544 "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
545 "dev": true 545 "dev": true
546 }, 546 },
@@ -558,7 +558,7 @@
558 "dependencies": { 558 "dependencies": {
559 "readable-stream": { 559 "readable-stream": {
560 "version": "2.3.6", 560 "version": "2.3.6",
561 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 561 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
562 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 562 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
563 "dev": true, 563 "dev": true,
564 "requires": { 564 "requires": {
@@ -573,7 +573,7 @@
573 }, 573 },
574 "string_decoder": { 574 "string_decoder": {
575 "version": "1.1.1", 575 "version": "1.1.1",
576 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 576 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
577 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 577 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
578 "dev": true, 578 "dev": true,
579 "requires": { 579 "requires": {
@@ -627,7 +627,7 @@
627 }, 627 },
628 "event-stream": { 628 "event-stream": {
629 "version": "3.3.4", 629 "version": "3.3.4",
630 "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 630 "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
631 "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", 631 "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
632 "dev": true, 632 "dev": true,
633 "requires": { 633 "requires": {
@@ -694,7 +694,7 @@
694 "dependencies": { 694 "dependencies": {
695 "readable-stream": { 695 "readable-stream": {
696 "version": "2.3.6", 696 "version": "2.3.6",
697 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 697 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
698 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 698 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
699 "dev": true, 699 "dev": true,
700 "requires": { 700 "requires": {
@@ -709,7 +709,7 @@
709 }, 709 },
710 "string_decoder": { 710 "string_decoder": {
711 "version": "1.1.1", 711 "version": "1.1.1",
712 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 712 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
713 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 713 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
714 "dev": true, 714 "dev": true,
715 "requires": { 715 "requires": {
@@ -828,7 +828,7 @@
828 "dependencies": { 828 "dependencies": {
829 "readable-stream": { 829 "readable-stream": {
830 "version": "2.3.6", 830 "version": "2.3.6",
831 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 831 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
832 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 832 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
833 "dev": true, 833 "dev": true,
834 "requires": { 834 "requires": {
@@ -843,7 +843,7 @@
843 }, 843 },
844 "string_decoder": { 844 "string_decoder": {
845 "version": "1.1.1", 845 "version": "1.1.1",
846 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 846 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
847 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 847 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
848 "dev": true, 848 "dev": true,
849 "requires": { 849 "requires": {
@@ -904,7 +904,7 @@
904 }, 904 },
905 "readable-stream": { 905 "readable-stream": {
906 "version": "1.0.34", 906 "version": "1.0.34",
907 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 907 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
908 "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 908 "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
909 "dev": true, 909 "dev": true,
910 "requires": { 910 "requires": {
@@ -916,13 +916,13 @@
916 }, 916 },
917 "string_decoder": { 917 "string_decoder": {
918 "version": "0.10.31", 918 "version": "0.10.31",
919 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 919 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
920 "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 920 "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
921 "dev": true 921 "dev": true
922 }, 922 },
923 "through2": { 923 "through2": {
924 "version": "0.6.5", 924 "version": "0.6.5",
925 "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 925 "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
926 "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 926 "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
927 "dev": true, 927 "dev": true,
928 "requires": { 928 "requires": {
@@ -1192,7 +1192,7 @@
1192 }, 1192 },
1193 "is-obj": { 1193 "is-obj": {
1194 "version": "1.0.1", 1194 "version": "1.0.1",
1195 "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1195 "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
1196 "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 1196 "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
1197 "dev": true 1197 "dev": true
1198 }, 1198 },
@@ -1319,7 +1319,7 @@
1319 }, 1319 },
1320 "kind-of": { 1320 "kind-of": {
1321 "version": "1.1.0", 1321 "version": "1.1.0",
1322 "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", 1322 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
1323 "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", 1323 "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
1324 "dev": true 1324 "dev": true
1325 }, 1325 },
@@ -1334,7 +1334,7 @@
1334 "dependencies": { 1334 "dependencies": {
1335 "readable-stream": { 1335 "readable-stream": {
1336 "version": "2.3.6", 1336 "version": "2.3.6",
1337 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1337 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
1338 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1338 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
1339 "dev": true, 1339 "dev": true,
1340 "requires": { 1340 "requires": {
@@ -1349,7 +1349,7 @@
1349 }, 1349 },
1350 "string_decoder": { 1350 "string_decoder": {
1351 "version": "1.1.1", 1351 "version": "1.1.1",
1352 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1352 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1353 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1353 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1354 "dev": true, 1354 "dev": true,
1355 "requires": { 1355 "requires": {
@@ -1384,7 +1384,7 @@
1384 }, 1384 },
1385 "map-stream": { 1385 "map-stream": {
1386 "version": "0.1.0", 1386 "version": "0.1.0",
1387 "resolved": "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 1387 "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
1388 "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", 1388 "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
1389 "dev": true 1389 "dev": true
1390 }, 1390 },
@@ -1439,13 +1439,13 @@
1439 }, 1439 },
1440 "minimist": { 1440 "minimist": {
1441 "version": "0.0.8", 1441 "version": "0.0.8",
1442 "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1442 "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1443 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1443 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1444 "dev": true 1444 "dev": true
1445 }, 1445 },
1446 "mkdirp": { 1446 "mkdirp": {
1447 "version": "0.5.1", 1447 "version": "0.5.1",
1448 "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1448 "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1449 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1449 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1450 "dev": true, 1450 "dev": true,
1451 "requires": { 1451 "requires": {
@@ -1618,7 +1618,7 @@
1618 "dependencies": { 1618 "dependencies": {
1619 "readable-stream": { 1619 "readable-stream": {
1620 "version": "2.3.6", 1620 "version": "2.3.6",
1621 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1621 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
1622 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1622 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
1623 "dev": true, 1623 "dev": true,
1624 "requires": { 1624 "requires": {
@@ -1633,7 +1633,7 @@
1633 }, 1633 },
1634 "string_decoder": { 1634 "string_decoder": {
1635 "version": "1.1.1", 1635 "version": "1.1.1",
1636 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1636 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1637 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1637 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1638 "dev": true, 1638 "dev": true,
1639 "requires": { 1639 "requires": {
@@ -1644,13 +1644,13 @@
1644 }, 1644 },
1645 "os-homedir": { 1645 "os-homedir": {
1646 "version": "1.0.2", 1646 "version": "1.0.2",
1647 "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1647 "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1648 "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 1648 "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1649 "dev": true 1649 "dev": true
1650 }, 1650 },
1651 "os-tmpdir": { 1651 "os-tmpdir": {
1652 "version": "1.0.2", 1652 "version": "1.0.2",
1653 "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1653 "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1654 "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1654 "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1655 "dev": true 1655 "dev": true
1656 }, 1656 },
@@ -1666,7 +1666,7 @@
1666 }, 1666 },
1667 "parse-semver": { 1667 "parse-semver": {
1668 "version": "1.1.1", 1668 "version": "1.1.1",
1669 "resolved": "http://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", 1669 "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
1670 "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", 1670 "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=",
1671 "dev": true, 1671 "dev": true,
1672 "requires": { 1672 "requires": {
@@ -1690,7 +1690,7 @@
1690 }, 1690 },
1691 "path-is-absolute": { 1691 "path-is-absolute": {
1692 "version": "1.0.1", 1692 "version": "1.0.1",
1693 "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1693 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1694 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1694 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1695 "dev": true 1695 "dev": true
1696 }, 1696 },
@@ -1702,7 +1702,7 @@
1702 }, 1702 },
1703 "pause-stream": { 1703 "pause-stream": {
1704 "version": "0.0.11", 1704 "version": "0.0.11",
1705 "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 1705 "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
1706 "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 1706 "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
1707 "dev": true, 1707 "dev": true,
1708 "requires": { 1708 "requires": {
@@ -1955,7 +1955,7 @@
1955 }, 1955 },
1956 "split": { 1956 "split": {
1957 "version": "0.3.3", 1957 "version": "0.3.3",
1958 "resolved": "http://registry.npmjs.org/split/-/split-0.3.3.tgz", 1958 "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
1959 "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 1959 "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
1960 "dev": true, 1960 "dev": true,
1961 "requires": { 1961 "requires": {
@@ -1964,7 +1964,7 @@
1964 }, 1964 },
1965 "sprintf-js": { 1965 "sprintf-js": {
1966 "version": "1.0.3", 1966 "version": "1.0.3",
1967 "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1967 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1968 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1968 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1969 "dev": true 1969 "dev": true
1970 }, 1970 },
@@ -1993,7 +1993,7 @@
1993 }, 1993 },
1994 "stream-combiner": { 1994 "stream-combiner": {
1995 "version": "0.0.4", 1995 "version": "0.0.4",
1996 "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 1996 "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
1997 "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 1997 "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
1998 "dev": true, 1998 "dev": true,
1999 "requires": { 1999 "requires": {
@@ -2017,7 +2017,7 @@
2017 "dependencies": { 2017 "dependencies": {
2018 "readable-stream": { 2018 "readable-stream": {
2019 "version": "2.3.6", 2019 "version": "2.3.6",
2020 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2020 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
2021 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2021 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
2022 "dev": true, 2022 "dev": true,
2023 "requires": { 2023 "requires": {
@@ -2032,7 +2032,7 @@
2032 }, 2032 },
2033 "string_decoder": { 2033 "string_decoder": {
2034 "version": "1.1.1", 2034 "version": "1.1.1",
2035 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2035 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2036 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2036 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2037 "dev": true, 2037 "dev": true,
2038 "requires": { 2038 "requires": {
@@ -2058,7 +2058,7 @@
2058 }, 2058 },
2059 "strip-ansi": { 2059 "strip-ansi": {
2060 "version": "3.0.1", 2060 "version": "3.0.1",
2061 "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2061 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
2062 "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2062 "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
2063 "dev": true, 2063 "dev": true,
2064 "requires": { 2064 "requires": {
@@ -2073,7 +2073,7 @@
2073 }, 2073 },
2074 "tar": { 2074 "tar": {
2075 "version": "2.2.1", 2075 "version": "2.2.1",
2076 "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", 2076 "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
2077 "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", 2077 "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
2078 "dev": true, 2078 "dev": true,
2079 "requires": { 2079 "requires": {
@@ -2084,7 +2084,7 @@
2084 }, 2084 },
2085 "through": { 2085 "through": {
2086 "version": "2.3.8", 2086 "version": "2.3.8",
2087 "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", 2087 "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2088 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2088 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2089 "dev": true 2089 "dev": true
2090 }, 2090 },
@@ -2100,7 +2100,7 @@
2100 "dependencies": { 2100 "dependencies": {
2101 "readable-stream": { 2101 "readable-stream": {
2102 "version": "2.3.6", 2102 "version": "2.3.6",
2103 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2103 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
2104 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2104 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
2105 "dev": true, 2105 "dev": true,
2106 "requires": { 2106 "requires": {
@@ -2115,7 +2115,7 @@
2115 }, 2115 },
2116 "string_decoder": { 2116 "string_decoder": {
2117 "version": "1.1.1", 2117 "version": "1.1.1",
2118 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2118 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2119 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2119 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2120 "dev": true, 2120 "dev": true,
2121 "requires": { 2121 "requires": {
@@ -2223,7 +2223,7 @@
2223 }, 2223 },
2224 "tunnel": { 2224 "tunnel": {
2225 "version": "0.0.4", 2225 "version": "0.0.4",
2226 "resolved": "http://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", 2226 "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
2227 "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", 2227 "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=",
2228 "dev": true 2228 "dev": true
2229 }, 2229 },
@@ -2254,7 +2254,7 @@
2254 "dependencies": { 2254 "dependencies": {
2255 "underscore": { 2255 "underscore": {
2256 "version": "1.8.3", 2256 "version": "1.8.3",
2257 "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", 2257 "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
2258 "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", 2258 "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
2259 "dev": true 2259 "dev": true
2260 } 2260 }
@@ -2397,7 +2397,7 @@
2397 }, 2397 },
2398 "readable-stream": { 2398 "readable-stream": {
2399 "version": "2.3.6", 2399 "version": "2.3.6",
2400 "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2400 "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
2401 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2401 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
2402 "dev": true, 2402 "dev": true,
2403 "requires": { 2403 "requires": {
@@ -2412,7 +2412,7 @@
2412 }, 2412 },
2413 "string_decoder": { 2413 "string_decoder": {
2414 "version": "1.1.1", 2414 "version": "1.1.1",
2415 "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2415 "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2416 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2416 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2417 "dev": true, 2417 "dev": true,
2418 "requires": { 2418 "requires": {