Add dependency kind information to `outdated --json` (#3714)

diff --git a/lib/src/command/outdated.dart b/lib/src/command/outdated.dart
index e35fa9c..5bad745 100644
--- a/lib/src/command/outdated.dart
+++ b/lib/src/command/outdated.dart
@@ -392,6 +392,15 @@
           element.kind == _DependencyKind.devTransitive,
     );
   }
+
+  String kindString(_DependencyKind kind) {
+    return {
+          _DependencyKind.direct: 'direct',
+          _DependencyKind.dev: 'dev',
+        }[kind] ??
+        'transitive';
+  }
+
   log.message(
     JsonEncoder.withIndent('  ').convert(
       {
@@ -399,6 +408,7 @@
           ...(rows..sort((a, b) => a.name.compareTo(b.name)))
               .map((packageDetails) => {
                     'package': packageDetails.name,
+                    'kind': kindString(packageDetails.kind),
                     'isDiscontinued': packageDetails.isDiscontinued,
                     'current': markedRows[packageDetails]![0].toJson(),
                     'upgradable': markedRows[packageDetails]![1].toJson(),
diff --git a/test/testdata/goldens/outdated/outdated_test/Handles SDK dependencies.txt b/test/testdata/goldens/outdated/outdated_test/Handles SDK dependencies.txt
index 5a9578a..f2f0a22 100644
--- a/test/testdata/goldens/outdated/outdated_test/Handles SDK dependencies.txt
+++ b/test/testdata/goldens/outdated/outdated_test/Handles SDK dependencies.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.1.0"
@@ -190,6 +191,7 @@
   "packages": [
     {
       "package": "flutter_test",
+      "kind": "dev",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
@@ -210,6 +212,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.1.0",
@@ -239,6 +242,7 @@
   "packages": [
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.1.0"
diff --git a/test/testdata/goldens/outdated/outdated_test/circular dependency on root.txt b/test/testdata/goldens/outdated/outdated_test/circular dependency on root.txt
index a277dff..af8ad58 100644
--- a/test/testdata/goldens/outdated/outdated_test/circular dependency on root.txt
+++ b/test/testdata/goldens/outdated/outdated_test/circular dependency on root.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.2.3"
@@ -159,6 +160,7 @@
   "packages": [
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.2.3"
diff --git a/test/testdata/goldens/outdated/outdated_test/latest version reported while locked on a prerelease can be a prerelease.txt b/test/testdata/goldens/outdated/outdated_test/latest version reported while locked on a prerelease can be a prerelease.txt
index 0f108cc..657222a 100644
--- a/test/testdata/goldens/outdated/outdated_test/latest version reported while locked on a prerelease can be a prerelease.txt
+++ b/test/testdata/goldens/outdated/outdated_test/latest version reported while locked on a prerelease can be a prerelease.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0-dev.1"
@@ -22,6 +23,7 @@
     },
     {
       "package": "mop",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "0.10.0-dev"
@@ -183,6 +185,7 @@
   "packages": [
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0-dev.1"
@@ -199,6 +202,7 @@
     },
     {
       "package": "mop",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "0.10.0-dev"
diff --git a/test/testdata/goldens/outdated/outdated_test/mutually incompatible newer versions.txt b/test/testdata/goldens/outdated/outdated_test/mutually incompatible newer versions.txt
index cba0e58..4e0b4ad 100644
--- a/test/testdata/goldens/outdated/outdated_test/mutually incompatible newer versions.txt
+++ b/test/testdata/goldens/outdated/outdated_test/mutually incompatible newer versions.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -22,6 +23,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -175,6 +177,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -191,6 +194,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
diff --git a/test/testdata/goldens/outdated/outdated_test/newer versions available.txt b/test/testdata/goldens/outdated/outdated_test/newer versions available.txt
index f3a984f..c5e17c1 100644
--- a/test/testdata/goldens/outdated/outdated_test/newer versions available.txt
+++ b/test/testdata/goldens/outdated/outdated_test/newer versions available.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "builder",
+      "kind": "dev",
       "isDiscontinued": false,
       "current": {
         "version": "1.2.3"
@@ -22,6 +23,7 @@
     },
     {
       "package": "dev_trans",
+      "kind": "transitive",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -36,6 +38,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.2.3"
@@ -52,6 +55,7 @@
     },
     {
       "package": "transitive",
+      "kind": "transitive",
       "isDiscontinued": false,
       "current": {
         "version": "1.2.3"
@@ -68,6 +72,7 @@
     },
     {
       "package": "transitive2",
+      "kind": "transitive",
       "isDiscontinued": false,
       "current": null,
       "upgradable": null,
@@ -80,6 +85,7 @@
     },
     {
       "package": "transitive3",
+      "kind": "transitive",
       "isDiscontinued": false,
       "current": null,
       "upgradable": null,
@@ -312,6 +318,7 @@
   "packages": [
     {
       "package": "transitive2",
+      "kind": "transitive",
       "isDiscontinued": false,
       "current": null,
       "upgradable": null,
@@ -326,6 +333,7 @@
     },
     {
       "package": "transitive3",
+      "kind": "transitive",
       "isDiscontinued": false,
       "current": null,
       "upgradable": null,
@@ -349,6 +357,7 @@
   "packages": [
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.2.3"
@@ -365,6 +374,7 @@
     },
     {
       "package": "transitive",
+      "kind": "transitive",
       "isDiscontinued": false,
       "current": {
         "version": "1.2.3"
diff --git a/test/testdata/goldens/outdated/outdated_test/no lockfile.txt b/test/testdata/goldens/outdated/outdated_test/no lockfile.txt
index defe659..f6b5f62 100644
--- a/test/testdata/goldens/outdated/outdated_test/no lockfile.txt
+++ b/test/testdata/goldens/outdated/outdated_test/no lockfile.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": null,
       "upgradable": {
@@ -20,6 +21,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": null,
       "upgradable": {
@@ -217,6 +219,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": null,
       "upgradable": {
@@ -234,6 +237,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": null,
       "upgradable": {
@@ -260,6 +264,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": null,
       "upgradable": {
@@ -274,6 +279,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": null,
       "upgradable": {
diff --git a/test/testdata/goldens/outdated/outdated_test/null safety compliance.txt b/test/testdata/goldens/outdated/outdated_test/null safety compliance.txt
index 507d194..aadad45 100644
--- a/test/testdata/goldens/outdated/outdated_test/null safety compliance.txt
+++ b/test/testdata/goldens/outdated/outdated_test/null safety compliance.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -22,6 +23,7 @@
     },
     {
       "package": "fails_analysis",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -38,6 +40,7 @@
     },
     {
       "package": "fails_analysis_in_dependency",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -54,6 +57,7 @@
     },
     {
       "package": "file_in_dependency_opts_out",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -70,6 +74,7 @@
     },
     {
       "package": "file_opts_out",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -86,6 +91,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -282,6 +288,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
@@ -302,6 +309,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
@@ -331,6 +339,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -347,6 +356,7 @@
     },
     {
       "package": "fails_analysis",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -363,6 +373,7 @@
     },
     {
       "package": "fails_analysis_in_dependency",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -379,6 +390,7 @@
     },
     {
       "package": "file_in_dependency_opts_out",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -395,6 +407,7 @@
     },
     {
       "package": "file_opts_out",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
@@ -411,6 +424,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0"
diff --git a/test/testdata/goldens/outdated/outdated_test/null-safety already migrated.txt b/test/testdata/goldens/outdated/outdated_test/null-safety already migrated.txt
index 5d3cf9b..f7116b2 100644
--- a/test/testdata/goldens/outdated/outdated_test/null-safety already migrated.txt
+++ b/test/testdata/goldens/outdated/outdated_test/null-safety already migrated.txt
@@ -127,6 +127,7 @@
   "packages": [
     {
       "package": "devTransitive",
+      "kind": "transitive",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
diff --git a/test/testdata/goldens/outdated/outdated_test/null-safety no resolution.txt b/test/testdata/goldens/outdated/outdated_test/null-safety no resolution.txt
index bc19cb6..ccaa3bd 100644
--- a/test/testdata/goldens/outdated/outdated_test/null-safety no resolution.txt
+++ b/test/testdata/goldens/outdated/outdated_test/null-safety no resolution.txt
@@ -125,6 +125,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
@@ -142,6 +143,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
diff --git a/test/testdata/goldens/outdated/outdated_test/overridden dependencies - no resolution.txt b/test/testdata/goldens/outdated/outdated_test/overridden dependencies - no resolution.txt
index c5825d7..78d9b51 100644
--- a/test/testdata/goldens/outdated/outdated_test/overridden dependencies - no resolution.txt
+++ b/test/testdata/goldens/outdated/outdated_test/overridden dependencies - no resolution.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
@@ -25,6 +26,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
@@ -180,6 +182,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
@@ -199,6 +202,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.0",
diff --git a/test/testdata/goldens/outdated/outdated_test/overridden dependencies.txt b/test/testdata/goldens/outdated/outdated_test/overridden dependencies.txt
index 75437a3..f32a4b0 100644
--- a/test/testdata/goldens/outdated/outdated_test/overridden dependencies.txt
+++ b/test/testdata/goldens/outdated/outdated_test/overridden dependencies.txt
@@ -6,6 +6,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.1",
@@ -25,6 +26,7 @@
     },
     {
       "package": "baz",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "2.0.0",
@@ -44,6 +46,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.1",
@@ -210,6 +213,7 @@
   "packages": [
     {
       "package": "bar",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.1",
@@ -229,6 +233,7 @@
     },
     {
       "package": "baz",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "2.0.0",
@@ -248,6 +253,7 @@
     },
     {
       "package": "foo",
+      "kind": "direct",
       "isDiscontinued": false,
       "current": {
         "version": "1.0.1",