npmize
Version:
Let's create an npm package without worrying about anything.
105 lines (104 loc) • 4.32 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const cross_spawn_1 = __importDefault(require("cross-spawn"));
const ansi_colors_1 = __importDefault(require("ansi-colors"));
const tsconfig_1 = require("../scripts/tsconfig");
const ghWorkflows_1 = __importDefault(require("../scripts/ghWorkflows"));
const packageJSON_1 = __importDefault(require("../scripts/packageJSON"));
const fs_2 = require("../utils/fs");
const config_1 = __importDefault(require("../config"));
function default_1(basePath, options) {
var _a, _b, _c;
console.log(`\x1b[1m\x1b[35m▓▒░ NPMIZE ░▒▓\x1b[0m\n`);
if (options.writePackageJSON) {
const data = packageJSON_1.default.read(basePath);
(_a = data.name) !== null && _a !== void 0 ? _a : (data.name = path_1.default.basename(basePath));
(_b = data.version) !== null && _b !== void 0 ? _b : (data.version = '0.0.0');
(_c = data.scripts) !== null && _c !== void 0 ? _c : (data.scripts = {});
data.scripts.dev = 'npmize dev';
data.scripts.build = 'npmize build';
data.scripts.start = 'run ./src/index.ts';
delete data.main;
delete data.module;
data.main = './dist/index.cjs';
data.module = './dist/index.mjs';
packageJSON_1.default.write(basePath, data);
}
else {
console.log(ansi_colors_1.default.bgGreen(' INFO: '), 'package.json is disabled');
}
if (options.installPackages) {
cross_spawn_1.default.sync('npm', ['install', '--save-dev', 'npmize', 'typescript'], {
cwd: basePath,
stdio: 'inherit',
});
}
else {
console.log(ansi_colors_1.default.bgGreen(' INFO: '), 'TypeScript is disabled');
}
if (options.writeTSConfig) {
(0, tsconfig_1.updateTSConfig)(path_1.default.join(basePath, './tsconfig.json'), {
compilerOptions: {
baseUrl: './src',
outDir: './dist',
target: 'ES6',
skipLibCheck: true,
declaration: true,
strict: true,
paths: { '@/*': ['./*'] },
},
include: ['./src'],
}, true);
}
if (options.writeGitIgnore) {
updateIgnoreFile('./.gitignore', ['dist', '.npmize', 'node_modules']);
}
else {
console.log(ansi_colors_1.default.bgGreen(' INFO: '), 'Gitignore is disabled');
}
if (options.writeNpmIgnore) {
updateIgnoreFile('./.npmignore', ['*', '!lib/**', '!dist/**', '!README.md', '!package.json']);
}
else {
console.log(ansi_colors_1.default.bgGreen(' INFO: '), 'Npmignore is disabled');
}
if (options.writeSample) {
const srcPath = path_1.default.join(basePath, './src');
const srcExists = fs_1.default.existsSync(srcPath);
if (srcExists) {
console.log(ansi_colors_1.default.bgYellow(' WARN: '), "'./src/index.ts' folder already exists");
}
else {
(0, fs_2.writeFileSync)(path_1.default.join(srcPath, './index.ts'), `console.log('Hello, world!')\nexport default 'Hello, world!'`);
}
}
else {
console.log(ansi_colors_1.default.bgGreen(' INFO: '), 'Sample is disabled');
}
if (options.ghWorkflow) {
(0, ghWorkflows_1.default)(basePath);
}
else {
console.log(ansi_colors_1.default.bgGreen(' INFO: '), 'GitHub workflow is disabled');
}
}
function updateIgnoreFile(path, lines) {
const fileExists = fs_1.default.existsSync(path);
const fileStr = fileExists ? fs_1.default.readFileSync(path, 'utf-8') : '';
const fileData = fileStr
.split('\n')
.filter(Boolean)
.map((str) => str.trim());
const missingLines = lines.filter((line) => !fileData.includes(line));
if (!missingLines.length)
return;
const missingTexts = ['# ' + config_1.default.name, ...missingLines].join('\n');
const text = (fileStr + '\n\n' + missingTexts).trim();
(0, fs_2.writeFileSync)(path, text);
}
;