Skip to content

MaxSukhanov/module2json

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

module2json

module2json is a lightweight static parser for Bazel MODULE.bazel files.

⚠️ Important limitations

  • Does not evaluate Starlark
  • Does not execute macros
  • Only extracts:
    • top-level module(...)
    • top-level bazel_dep(...)
  • Only supports literal values:
    • strings
    • numbers
    • True / False
    • None
  • If load() statements or unknown top-level calls are found, the result is marked:
"complete": false

Usage

Read manifest from standard input

  module2json --stdin

Reading manifest from a file

  module2json <FILE_PATH>

Flags

--stdin
--pretty=false/true

Output format

{
  "module": {
    "name": "...",
    "version": "..."
  },
  "bazel_deps": [],
  "overrides": [],
  "complete": true,
  "warnings": []
}

Examples

cat MODULE.bazel | ./module2json --stdin
{
  "module": {
    "name": "elemental2",
    "version": "1.3.0"
  },
  "bazel_deps": [
    {
      "name": "j2cl",
      "version": "20250630",
      "dev_dependency": false
    },
    {
      "name": "jsinterop_generator",
      "version": "20250812",
      "dev_dependency": false
    },
    {
      "name": "jsinterop_base",
      "version": "1.1.0",
      "dev_dependency": false
    },
    {
      "name": "bazel_skylib",
      "version": "1.7.1",
      "dev_dependency": false
    },
    {
      "name": "google_bazel_common",
      "version": "0.0.1",
      "dev_dependency": false
    },
    {
      "name": "rules_java",
      "version": "8.13.0",
      "dev_dependency": false
    },
    {
      "name": "rules_license",
      "version": "1.0.0",
      "dev_dependency": false
    },
    {
      "name": "rules_jvm_external",
      "version": "6.6",
      "dev_dependency": false
    }
  ],
  "overrides": [
    {
      "kind": "archive_override",
      "module_name": "j2cl",
      "strip_prefix": "j2cl-master"
    },
    {
      "kind": "archive_override",
      "module_name": "jsinterop_generator",
      "strip_prefix": "jsinterop-generator-master"
    },
    {
      "kind": "archive_override",
      "module_name": "jsinterop_base",
      "strip_prefix": "jsinterop-base-master"
    }
  ],
  "complete": false,
  "warnings": [
    "archive_override(urls=...) is not a literal; override info may be incomplete.",
    "Found non-identifier top-level call (e.g. obj.method(...)); cannot determine whether it declares bazel_dep.",
    "Found top-level call to \"http_archive\"; may declare bazel_dep via macro expansion which is not evaluated."
  ]
}
./module2json MODULE2.bazel
{
  "module": {
    "name": "abseil-cpp",
    "version": "20260107.0"
  },
  "bazel_deps": [
    {
      "name": "rules_cc",
      "version": "0.2.9",
      "dev_dependency": false
    },
    {
      "name": "bazel_skylib",
      "version": "1.8.1",
      "dev_dependency": false
    },
    {
      "name": "platforms",
      "version": "1.0.0",
      "dev_dependency": false
    },
    {
      "name": "google_benchmark",
      "version": "1.9.4",
      "dev_dependency": true
    },
    {
      "name": "googletest",
      "version": "1.17.0",
      "dev_dependency": false
    }
  ],
  "complete": true
}

About

A tiny parser for MODULE.bazel manifests

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published