chronver

The chronologic versioner

Usage no npm install needed!

<script type="module">
  import chronver from 'https://cdn.skypack.dev/chronver';
</script>

README

chronver

The chronological versioner.

Install

$ npm i chronver

Requirements

@chronver/regex is an evergreen module. 🌲 This module requires an Active LTS Node version (v12.0.0+).

Usage

Node.js

import chronver from "chronver";

new chronver({ increment: "change", version: "2030.04.03" }).version;
// ^ Returns 2030.04.03.1

new chronver({ increment: "year", version: "2030.04.03" }).version;
// ^ Returns 2031.04.03

new chronver({ increment: "month", version: "2030.04.03" }).version;
// ^ Returns 2030.05.03

new chronver({ increment: "day", version: "2030.04.03" }).version;
// ^ Returns 2030.04.04

new chronver({ coerce: "2030.4.3" }).version;
// ^ Returns 2030.04.03

new chronver().version;
// ^ Returns the current date in ChronVer format
// Here is how a full response looks
ChronVer {
  change: 0,
  day: 3,
  month: 4,
  raw: "2030.04.03",
  version: "2030.04.03",
  year: 2030
}

package.json:

{
  "scripts": {
    "increment": "chronver --increment package"
  }
}

This allows you to run npm run increment and have your package.json version incremented to ChronVer's spec. However if you want to have this happen automatically when committing to a repo, employ husky like so:

{
  "husky": {
    "hooks": {
      "pre-commit": "npm run increment && git add -A :/"
    }
  }
}

API

new chronver({ coerce?, increment?, parse?, version? })

ChronVer must be instantiated with the new keyword.

coerce

Type: string (optional)

  • Given a string that represents a date, coerce will attempt to format it into a ChronVer object.
  • If supplied value is blank (""), a ChronVer object representing today's date will be returned.

increment

Type: string (optional)

  • Intended for use with the version parameter.
  • Available options:
    • change: increments supplied version...version by one.
    • day: increments supplied version year by one.
    • month: increments supplied version year by one.
    • year: increments supplied version year by one.
  • If supplied value is blank (""):
  • If version parameter is not supplied along with an increment option:
  • If supplied value is in the past:
    • A ChronVer object representing today's date will be returned.

parse

Type: string | CVType (optional)

  • Given a string that represents a date (or a ChronVer object), parse will test the validity of it and return a formatted ChronVer object.
  • If supplied value is blank (""), a ChronVer object representing today's date will be returned.

version

  • When used alone, behaves like parse.

CLI

       __
      / /
 ____/ /  _______  _____  __________
/ __/ _ \/ __/ _ \/ _ | |/ / -_/ __/
\__/_//_/_/  \___/_//_|___/\__/_/

A JavaScript implementation of the https://chronver.org specification
Copyright © netop://ウエハ (Paul Anthony Webb)

Usage: chronver [options] <version>
Prints valid ChronVer versions

Options:
-c --coerce
        Coerce a string into ChronVer if possible, silently fail otherwise.

-? -h --help
        Show this help message.

-i --inc --increment [<level>]
        Increment a version by the specified level. Level can be one of: year,
        month, day, or change. Default level is "change".

        Only one version may be specified.

        The version returned will always default to the present. However,
        supplied versions with a future date will remain in the future.

        ex. Passing "1970.04.03 -i month" to ChronVer will return the present
        date but passing "3027.04.03 -i month" will return "3027.05.03".

--init --initialize
        Creates a ChronVer string, defaulting to the present.

ChronVer exits upon failure.



Examples:
$ chronver --initialize
$ chronver --increment month 2030.03.03
$ chronver --increment package

Tests

You will need to first download this repo, cd into it, and npm i before proceeding further.

# Run all tests, sequentially
$ npm test

# Test dependencies for latest versions
$ npm run test:dependencies

# Lint "bin" and "lib" directories
$ npm run test:typescript

# Run this module through its paces
# PLEASE run this so I can feel my time writing and troubleshooting these tests were worth it
$ npm run test:assert

License

MIT © netop://ウエハ