Fix dev dependency compatibility with 'bazel mod tidy' (#70)

Re:
https://github.com/theoremlp/rules_multitool/pull/64#issuecomment-2614143025

Co-authored-by: Mark Elliot <markelliot@users.noreply.github.com>
diff --git a/multitool/extension.bzl b/multitool/extension.bzl
index 0154207..8cd1c54 100644
--- a/multitool/extension.bzl
+++ b/multitool/extension.bzl
@@ -15,6 +15,10 @@
     lockfiles = {
         _DEFAULT_HUB_NAME: [],
     }
+
+    root_module_direct_deps = {}
+    root_module_direct_dev_deps = {}
+
     for mod in reversed(module_ctx.modules):
         for h in mod.tags.hub:
             if h.hub_name in lockfiles:
@@ -22,6 +26,18 @@
             else:
                 lockfiles[h.hub_name] = [h.lockfile]
 
+            if not module_ctx.is_dev_dependency(h):
+                root_module_direct_deps[h.hub_name] = 1
+            else:
+                root_module_direct_dev_deps[h.hub_name] = 1
+
+    # ensure _DEFAULT_HUB_NAME is present in non-dev and dev deps
+    # when non-dev and dev deps are non-empty.
+    if len(root_module_direct_deps) > 0:
+        root_module_direct_deps[_DEFAULT_HUB_NAME] = 1
+    if len(root_module_direct_dev_deps) > 0:
+        root_module_direct_dev_deps[_DEFAULT_HUB_NAME] = 1
+
     for lockfile_name, lockfile_list in lockfiles.items():
         _hub(
             name = lockfile_name,
@@ -30,8 +46,8 @@
         )
 
     return module_ctx.extension_metadata(
-        root_module_direct_deps = lockfiles.keys(),
-        root_module_direct_dev_deps = [],
+        root_module_direct_deps = root_module_direct_deps.keys(),
+        root_module_direct_dev_deps = root_module_direct_dev_deps.keys(),
         reproducible = True,  # repo state is only a function of the lockfile
     )