UNPKG

ghinfo

Version:

CLI util for generating a GitHub project information file

107 lines (106 loc) 5.03 kB
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Builder_dir, _Builder_frame, _Builder_message, _Builder_timer, _Builder_type; import figures from 'figures'; import { promises as fs } from 'fs'; import { glob } from 'glob'; import { Package } from 'package-json-helper'; import gh from 'parse-github-url'; import path from 'path'; import UpdateManager from 'stdout-update'; import { AvailableMediaFile } from './types.js'; const TIMEOUT = 80; const INDENT = 2; const manager = UpdateManager.getInstance(); const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']; const GLOB_OPTIONS = { dot: true, strict: true, nodir: true }; export class Builder { constructor(dir, type) { _Builder_dir.set(this, void 0); _Builder_frame.set(this, 0); _Builder_message.set(this, ''); _Builder_timer.set(this, null); _Builder_type.set(this, void 0); __classPrivateFieldSet(this, _Builder_dir, dir, "f"); __classPrivateFieldSet(this, _Builder_type, type, "f"); } async generate() { this.start(); try { const paths = glob.sync(`${__classPrivateFieldGet(this, _Builder_dir, "f")}/**/*.*`, GLOB_OPTIONS); const pkg = new Package(); await pkg.read(); if (pkg.repository?.url) { const git = gh(pkg.repository?.url); if (git && git.repo) { await fs.writeFile('.ghinfo', JSON.stringify(this.build(paths, pkg, git.repo), null, INDENT)); this.end(); } else { throw new Error('Invalid package repository url!'); } } else { throw new Error('Package repository is undefined!'); } } catch (error) { if (error instanceof Error) { this.end([`${figures.cross} Error!`]); throw error; } } } build(paths, pkg, repo) { const { name, version, description, homepage } = pkg; const availableFiles = Object.values(AvailableMediaFile); if (!name) throw new Error('Package name is undefined!'); if (!version) throw new Error('Package name is undefined!'); if (!description) throw new Error('Package name is undefined!'); return { name, version, description, keywords: [...pkg.keywords.values()], repo, type: __classPrivateFieldGet(this, _Builder_type, "f"), links: { homepage, git: `https://github.com/${repo}`, ...(pkg.private ? {} : { npm: `https://www.npmjs.com/package/${name}` }), }, files: paths.reduce((acc, filePath) => { const { name: fileName } = path.parse(filePath); return ~availableFiles.indexOf(fileName) ? { ...acc, [fileName]: filePath } : acc; }, {}), }; } end(msg = [`${figures.tick} .ghinfo created!`]) { if (__classPrivateFieldGet(this, _Builder_timer, "f")) { clearInterval(__classPrivateFieldGet(this, _Builder_timer, "f")); manager.update(msg, 0); manager.unhook(false); } } start() { manager.hook(); __classPrivateFieldSet(this, _Builder_timer, setInterval(() => { var _a; manager.update([`${frames[(__classPrivateFieldSet(this, _Builder_frame, __classPrivateFieldSet(this, _Builder_frame, (_a = __classPrivateFieldGet(this, _Builder_frame, "f"), ++_a), "f") % frames.length, "f"))]} process: ${__classPrivateFieldGet(this, _Builder_message, "f")}`]); }, TIMEOUT), "f"); } } _Builder_dir = new WeakMap(), _Builder_frame = new WeakMap(), _Builder_message = new WeakMap(), _Builder_timer = new WeakMap(), _Builder_type = new WeakMap(); export default Builder;