qiwi/buildstamp

View on GitHub
packages/core/src/main/ts/cli.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
#!/usr/bin/env node

import {createRequire} from 'node:module'
import minimist from 'minimist'
import {buildstamp} from './buildstamp'

const camelize = (s: string) => s.replace(/-./g, x => x[1].toUpperCase())
const normalizeFlags = (flags = {}): Record<string, any> => Object.fromEntries(Object.entries(flags).map(([k, v]) =>
  [camelize(k), v === 'false' ? false : v]))

const { cwd, git, date, output, version, help, extra } = normalizeFlags(minimist(process.argv.slice(2), {
  alias: {
    help: ['h'],
    version: ['v'],
    output: ['o']
  },
}));

(async () => {

  if (help) {
    console.log(`
  Usage:
    $ buildstamp [opts]
  
  Options:
    --output        Specify the output file. Defaults to 'buildstamp.json'
    --git           Inject git info. True by default
    --date          Inject date. True by default
    --extra         JSON to mixin
    --help, -h      Print help digest
    --version, -v   Print version
  
  Examples:
    $ buildstamp --output=stamp.json
    $ buildstamp --extra='{"foo": "bar"}'
`)
    return
  }

  if (version) {
    console.log((import.meta.url ? createRequire(import.meta.url) : require)('../../package.json').version)
    return
  }

  await buildstamp({
    cwd,
    date,
    git,
    output,
    extra: extra ? JSON.parse(extra) : {}
  })
})()