UNPKG

madrun

Version:

CLI tool to run multiple npm-scripts in a madly comfortable way

84 lines (59 loc) 1.91 kB
import {createRequire} from 'node:module'; import {join} from 'node:path'; import {writeFile, access} from 'node:fs/promises'; import tryToCatch from 'try-to-catch'; import montag from 'montag'; const require = createRequire(import.meta.url); const supported = require('../supported.json'); const {keys} = Object; const {stringify} = JSON; export const createMadrun = async (cwd, info) => { let name = await findMadrun(cwd); if (!name) { const {scripts = {}} = info; const madrun = montag` 'use strict'; const { run, series, parallel, } = require('madrun'); module.exports = ${stringify(scripts, null, 4)}; `; name = join(cwd, '.madrun.js'); await writeFile(name, madrun); } return name; }; export const patchPackage = async (name, info) => { const {default: content} = await import(name); const updatedScripts = updatePackage(content); const prepared = preparePackage(info, updatedScripts); await writeFile('./package.json', prepared); }; function preparePackage(info, scripts) { const data = { ...info, scripts, }; return stringify(data, null, 2) + '\n'; } function updatePackage(scripts) { const result = {}; for (const key of keys(scripts)) { if (key.startsWith('pre') && key !== 'prepare') continue; result[key] = `madrun ${key}`; } return result; } const joinPartial = (a) => (b) => join(a, b); async function findMadrun(cwd) { const madrunNames = supported.map(joinPartial(cwd)); for (const name of madrunNames) { const [error] = await tryToCatch(access, name); if (!error) return name; } return ''; }