UNPKG

quick-erd

Version:

quick and easy text-based ERD + code generator for migration, query, typescript types and orm entity

110 lines (109 loc) 3.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.readErdFromStdin = readErdFromStdin; exports.writeSrcFile = writeSrcFile; exports.writeSrcFileIfNeeded = writeSrcFileIfNeeded; exports.addDependencies = addDependencies; exports.addIgnore = addIgnore; exports.readNpmScripts = readNpmScripts; exports.addNpmScripts = addNpmScripts; exports.readPackageJSON = readPackageJSON; const fs_1 = require("fs"); const path_1 = require("path"); function readErdFromStdin(cb) { if (process.stdin.isTTY) { console.error('Reading erd from stdin... (Please pipe erd text to stdin)'); } let text = ''; process.stdin .on('data', chunk => (text += chunk)) .on('end', () => { if (!text) { console.error('missing erd text from stdin'); process.exit(1); } cb(text); }); } const writtenFiles = new Set(); function writeSrcFile(file, code) { if (!writtenFiles.has(file)) { console.error('saving to', file); writtenFiles.add(file); } code = code.trim() + '\n'; (0, fs_1.writeFileSync)(file, code); } function writeSrcFileIfNeeded(file, code) { try { const oldCode = (0, fs_1.readFileSync)(file).toString(); if (oldCode.trim() == code.trim()) return; } catch (error) { // this is new file } writeSrcFile(file, code); } function addDependencies(name, version, mode) { const file = 'package.json'; const pkg = readPackageJSON(file); const field = mode === 'dev' ? 'devDependencies' : 'dependencies'; const deps = pkg[field] || {}; if (name in deps) { return; } deps[name] = version; pkg[field] = Object.fromEntries(Object.keys(deps) .sort() .map(name => [name, deps[name]])); const text = JSON.stringify(pkg, null, 2); writeSrcFile(file, text); } function addIgnore(file, patterns) { let text = ((0, fs_1.existsSync)(file) && (0, fs_1.readFileSync)(file).toString()) || ''; const originalText = text; if (text && !text.endsWith('\n')) { text += '\n'; } const lines = text.split('\n').map(line => line.trim()); for (const pattern of patterns) { const hasPattern = lines.some(line => line == pattern || line == pattern + '/' || line + '/' == pattern || line == pattern + '*' || line == '*' + pattern + '*' || line == '*' + (0, path_1.extname)(pattern) || line == '*' + (0, path_1.extname)(pattern) + '*'); if (!hasPattern) { text += pattern + '\n'; } } if (text != originalText) { writeSrcFile(file, text); } } function readNpmScripts() { const file = 'package.json'; const pkg = readPackageJSON(file); return pkg.scripts || {}; } function addNpmScripts(scripts) { const file = 'package.json'; const pkg = readPackageJSON(file); const originalText = JSON.stringify(pkg, null, 2); pkg.scripts ||= {}; for (const key in scripts) { if (!(key in pkg.scripts)) { pkg.scripts[key] = scripts[key]; } } const newText = JSON.stringify(pkg, null, 2); if (newText != originalText) { writeSrcFile(file, newText); } } function readPackageJSON(file) { const pkg = JSON.parse((0, fs_1.readFileSync)(file).toString()); return pkg; }