π¦ Molt
Warning
Molt is still being developed actively. The API is not stable yet and may
change frequently.
Molt is a Deno module to bump semvers in import specifiers, like udd, but with a few different goals:
Consistent - Molt uses deno_graph for dependency resolution, and utilizes fetch redirects for unversioned dependencies to get latest semvers. This should make it support as many module registries as Deno runtime does, with a minimum maintenance cost.
Module-first - The core logic is provided as versatile functions in a Deno module, which enables you to write the best scripts for your use cases.
Git-friendly - The operations can be easily divided into logical groups for subsequent git commits. A submodule and CLI for git operations are also provided.
Usage
Deno Module
API Reference (WIP)
- mod.ts - Main module
- git.ts - Sub-module for Git operations
- lib/uri.ts - Library for handling URIs
Examples
Update all dependencies in a module and write the changes to local files
import {
DependencyUpdate,
writeAll,
} from "https://deno.land/x/molt@{VERSION}/mod.ts";
const updates = await DependencyUpdate.collect("./mod.ts", {
importMap: "./deno.json",
});
await writeAll(updates, {
onWrite: (file) => console.log(`πΎ ${file.specifier}`),
});
Update all dependencies in a module and commit the changes to local git repository
import { DependencyUpdate } from "https://deno.land/x/molt@{VERSION}/mod.ts";
import { commitAll } from "https://deno.land/x/molt@{VERSION}/git.ts";
const updates = await DependencyUpdate.collect("./mod.ts");
await commitAll(updates, {
groupBy: (dependency) => dependency.name,
composeCommitMessage: ({ group, version }) =>
`build(deps): bump ${group} to ${version!.to}`,
postCommit: (commit) => console.log(commit.message),
});
CLI
Although it is encouraged to write your own scripts, a pre-built CLI tool is
also provided as cli.ts
for convenience or a reference implementation, which
is supposed to cover most of the use cases.
Installation (optional)
The molt CLI can be installed globally with the following command, for example:
deno install --allow-env --allow-read --allow-write --allow-net --allow-run=git,deno\
--name molt https://deno.land/x/molt@{VERSION}/cli.ts
Alternatively, you may prefer to run the remote script directly through
deno task
for better security or reproducibility:
{
"tasks": {
"update": "deno run --allow-env --allow-read --allow-write=. --allow-run=git,deno --allow-net=deno.land https://deno.land/x/molt@{VERSION}/cli.ts ./**/*.ts",
"update:commit": "deno task -q update --commit --pre-commit=fmt,lint,test"
}
}
Usage
> molt --help
Usage: molt <modules...>
Description:
Check updates to dependencies in Deno modules
Options:
-h, --help - Show this help.
-v, --version - Print version info.
--import-map <file> - Specify import map file
-w, --write - Write changes to local files
-c, --commit - Commit changes to local git repository
--pre-commit <tasks> - Run tasks before each commit (Depends: --commit)
--post-commit <tasks> - Run tasks after each commit (Depends: --commit)
--prefix <prefix> - Prefix for commit messages (Depends: --commit)
--summary <file> - Write a summary of changes to file
--report <file> - Write a report of changes to file
[!Note]
Molt CLI automatically uses import maps defined indeno.json
ordeno.jsonc
if available.
You canβt, however, use import maps as entrypoints.
Examples
Check for updates
> molt mod.ts
π‘ Found updates:
π¦ deno.land/std 0.200.0 => 123.456.789
lib.ts 0.200.0
mod.ts 0.200.0
π¦ deno.land/x/deno_graph 0.50.0 => 123.456.789
mod.ts 0.50.0
π¦ node-emoji 2.0.0 => 123.456.789
mod.ts 2.0.0
Write changes to files
> molt mod.ts --write
π‘ Found updates:
...
πΎ lib.ts
πΎ mod.ts
Commit changes to git
> molt mod.ts --commit --pre-commit=test --prefix :package: --summary title.txt --report report.md
π‘ Found updates:
...
π :package: bump deno.land/std from 0.200.0 to 123.456.789
π :package: bump deno.land/x/deno_graph from 0.50.0 to 123.456.789
π :package: bump node-emoji from 2.0.0 to 123.456.789
Limitations
The following limitations are (currently) imposed by the design of Molt:
- Dependencies are always updated to the latest version. No version constraints are supported.
- Dependencies in import specifiers are only targeted.
See issues for other known limitations.
References
Molt is inspired by prior works such as
and of full respect to the authors.