Giter Club home page Giter Club logo

molt's Introduction

๐Ÿฆ• Molt

CI codecov

Warning

Molt is still being developed actively. The API is not stable yet and may change frequently.

Molt is a Deno module to bump versions in import specifiers, like udd, but with some unique concepts:

The Deno way - Molt finds dependencies and checks their latest versions in the same way as the Deno runtime does.

Module-first - The core logic is provided as 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.

Usage

Deno Module

Examples

Update all dependencies in a module and write the changes to local files
import { collect, writeAll } from "https://deno.land/x/molt@{VERSION}/mod.ts";

const updates = await collect("./mod.ts");
await writeAll(updates);
Update all dependencies in a module and commit the changes to git
import { collect, commitAll } from "https://deno.land/x/molt@{VERSION}/mod.ts";

const updates = await collect("./mod.ts");

await commitAll(updates, {
  groupBy: (dependency) => dependency.name,
  composeCommitMessage: ({ group, version }) =>
    `build(deps): bump ${group} to ${version!.to}`,
});

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"
  }
}

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                                      
  --ignore       <deps>    - Ignore dependencies                                          
  --only         <deps>    - Check specified dependencies                                 
  -w, --write              - Write changes to local files            (Conflicts: --commit)
  -c, --commit             - Commit changes to local git repository  (Conflicts: --write) 
  --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                            

Examples:

  Check updates in a module:     molt deps.ts                               
  Include multiple modules:      molt mod.ts lib.ts                         
  Target all .ts files:          molt ./**/*.ts                             
  Specify an import map:         molt mod.ts --import-map deno.json         
  Ignore specific dependencies:  molt deps.ts --ignore=deno_graph,node_emoji
  Only check deno_std:           molt deps.ts --only deno.land/std

Note

Molt CLI automatically uses import maps defined in deno.json or deno.jsonc if available.
You can't, however, use import maps as entrypoints.

Examples

Check for updates
> molt mod.ts 
๐Ÿ“ฆ 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
    ...
๐Ÿ’พ lib.ts
๐Ÿ’พ mod.ts
Commit changes to git
> molt mod.ts --commit --pre-commit=test --prefix :package: --summary title.txt --report report.md
    ...
๐Ÿ“ :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

๐Ÿ“„ title.txt
๐Ÿ“„ report.md

Compatibility with registries

We check compatibility with various registries in an integration test.

Deno's official registries

Molt offers first-class support for the following registries, which means that we may implement registry-specific routines for them:

Third-party registries

Molt also works with the following third-party registries:

The following registries are not compatible with Molt:

How it works

TBW

Limitations

The following limitations are imposed by the design of Molt:

  • Dependencies are always updated to the latest versions. 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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.