@zmotivat0r/mrepo
Version:
Awesome Typescript Monorepo Generator
211 lines • 8.61 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const child_process_1 = require("child_process");
const fs_1 = require("fs");
const path_1 = require("path");
const color = require("chalk");
const emoji = require("node-emoji");
const constants_1 = require("../constants");
const helpers_1 = require("../helpers");
const utils_1 = require("../utils");
const LERNA_PACKAGES_VERSIONING_CHOICES = [
{
name: constants_1.LERNA_PACKAGES_VERSIONING.common,
checked: true,
},
{
name: constants_1.LERNA_PACKAGES_VERSIONING.independent,
},
];
const PACKAGE_REGISTRY_CHOICES = [
{
name: constants_1.PACKAGE_REGISTRY.github,
checked: true,
},
{
name: constants_1.PACKAGE_REGISTRY.npm,
},
];
const cwd = process.cwd();
const parentOptions = helpers_1.getParentProcessPassedOptions(process);
const monorepoPath = path_1.join(cwd, `./${parentOptions.name}`);
const templateDir = path_1.join(__dirname, '../templates/monorepo-generator');
const defaultAnswers = {
monorepoName: parentOptions.name,
workspaceName: 'packages',
scope: '',
pgDefaultsAccess: 'restricted',
pgDefaultsLicense: 'MIT',
pgDefaultsAuthorName: '',
pgDefaultsAuthorEmail: '',
currentYear: new Date().getFullYear(),
packageRegistry: constants_1.PACKAGE_REGISTRY.github,
lernaPackagesVersioning: constants_1.LERNA_PACKAGES_VERSIONING.common,
shouldGeneratePackage: false,
firstPackageName: '',
registryUrl: constants_1.PACKAGE_REGISTRY_URL.github,
githubNodeAuthTokenName: constants_1.GITHUB_NODE_AUTH_TOKEN_NAME.github,
};
const folderExists = fs_1.existsSync(monorepoPath);
if (folderExists) {
const msg = `${emoji.get(':flushed:')} Folder ${color.bold.magentaBright(parentOptions.name)} already exists`;
utils_1.logger.error('cli', msg);
throw new Error(msg);
}
const result = {
prompts() {
const prompts = [];
prompts.push({
name: 'scope',
message: 'Packages scope:',
default: defaultAnswers.monorepoName,
validate: validateNotEmpty,
});
if (parentOptions.useDefaults) {
return prompts;
}
prompts.push({
name: 'workspaceName',
message: 'Packages folder:',
default: defaultAnswers.workspaceName,
validate: validateNotEmpty,
});
prompts.push({
name: 'pgDefaultsAccess',
message: 'Packages access:',
default: defaultAnswers.pgDefaultsAccess,
validate: validateNotEmpty,
});
prompts.push({
name: 'pgDefaultsLicense',
message: 'Packages license:',
default: defaultAnswers.pgDefaultsLicense,
validate: validateNotEmpty,
});
prompts.push({
name: 'pgDefaultsAuthorName',
message: 'Author`s name:',
validate: validateNotEmpty,
});
prompts.push({
name: 'pgDefaultsAuthorEmail',
message: 'Author`s email:',
validate: validateNotEmpty,
});
prompts.push({
name: 'packageRegistry',
type: 'list',
message: 'Packages registry:',
choices: PACKAGE_REGISTRY_CHOICES,
});
prompts.push({
name: 'lernaPackagesVersioning',
type: 'list',
message: 'Packages versioning:',
choices: LERNA_PACKAGES_VERSIONING_CHOICES,
});
if (!parentOptions.dryRun) {
prompts.push({
name: 'shouldGeneratePackage',
message: 'Generate first package?',
type: 'confirm',
default: defaultAnswers.shouldGeneratePackage,
});
prompts.push({
name: 'firstPackageName',
message: 'First package name:',
validate: validateNotEmpty,
when: (answers) => answers.shouldGeneratePackage,
});
}
return prompts;
},
actions() {
this.answers.monorepoName = defaultAnswers.monorepoName;
this.answers.currentYear = defaultAnswers.currentYear;
this.sao.opts.outDir = monorepoPath;
if (parentOptions.useDefaults) {
this.answers.workspaceName = defaultAnswers.workspaceName;
this.answers.pgDefaultsAccess = defaultAnswers.pgDefaultsAccess;
this.answers.pgDefaultsLicense = defaultAnswers.pgDefaultsLicense;
this.answers.pgDefaultsAuthorName = defaultAnswers.pgDefaultsAuthorName;
this.answers.pgDefaultsAuthorEmail = defaultAnswers.pgDefaultsAuthorEmail;
this.answers.packageRegistry = defaultAnswers.packageRegistry;
this.answers.lernaPackagesVersioning = defaultAnswers.lernaPackagesVersioning;
this.answers.shouldGeneratePackage = defaultAnswers.shouldGeneratePackage;
this.answers.registryUrl = defaultAnswers.registryUrl;
this.answers.githubNodeAuthTokenName = defaultAnswers.githubNodeAuthTokenName;
}
this.answers.registryUrl =
this.answers.packageRegistry === constants_1.PACKAGE_REGISTRY.github ? constants_1.PACKAGE_REGISTRY_URL.github : constants_1.PACKAGE_REGISTRY_URL.npm;
this.answers.githubNodeAuthTokenName =
this.answers.packageRegistry === constants_1.PACKAGE_REGISTRY.github
? constants_1.GITHUB_NODE_AUTH_TOKEN_NAME.github
: constants_1.GITHUB_NODE_AUTH_TOKEN_NAME.npm;
this.answers.lernaPackagesVersioning =
this.answers.lernaPackagesVersioning === constants_1.LERNA_PACKAGES_VERSIONING.independent
? constants_1.LERNA_PACKAGES_VERSIONING.independent
: '0.0.0';
if (parentOptions.dryRun) {
return [];
}
fs_1.mkdirSync(monorepoPath, '0744');
return [
{
type: 'add',
files: '**',
templateDir,
},
{
type: 'move',
patterns: {
packagesGitKeep: `${this.answers.workspaceName}/.gitkeep`,
e2eGitKeep: 'e2e/.gitkeep',
gitignore: '.gitignore',
prettierrc: '.prettierrc',
yarnrc: '.yarnrc',
eslintignore: '.eslintignore',
npmrc: '.npmrc',
'pre-commit': '.husky/pre-commit',
'eslintrc.js': '.eslintrc.js',
'githubWorkflowsTest.yml': '.github/workflows/test.yml',
'githubWorkflowsRelease.yml': '.github/workflows/release.yml',
'githubPrTemplate.md': '.github/PULL_REQUEST_TEMPLATE.md',
'githubIssueTemplateBugReport.md': '.github/ISSUE_TEMPLATE/Bug_report.md',
'githubIssueTemplateFeatureRequest.md': '.github/ISSUE_TEMPLATE/Feature_request.md',
'githubIssueTemplateRegression.md': '.github/ISSUE_TEMPLATE/Regression.md',
},
},
];
},
completed() {
if (!parentOptions.dryRun) {
if (!parentOptions.skipScripts) {
if (!parentOptions.skipInstall) {
utils_1.logger.info('cli', 'installing dependencies');
child_process_1.execSync(`cd ${monorepoPath} && npm i lerna@3.22.1 && npm run boot && npx rimraf ./package-lock.json`, {
stdio: 'inherit',
});
child_process_1.execSync(`cd ${monorepoPath} && chmod +x .husky/pre-commit`);
}
if (!parentOptions.skipGit) {
utils_1.logger.info('cli', 'git init');
child_process_1.execSync(`cd ${monorepoPath} && git init && git checkout -b main`);
if (!parentOptions.skipGitCommit) {
child_process_1.execSync(`cd ${monorepoPath} && git add . && git commit -m "chore: initial commit" --no-verify && git tag v0.0.0`);
}
}
}
if (this.answers.firstPackageName) {
child_process_1.execSync(`cd ${monorepoPath} && mrepo g ${this.answers.firstPackageName} -y`, {
stdio: 'inherit',
});
}
}
},
};
function validateNotEmpty(v) {
return !!v;
}
module.exports = result;
//# sourceMappingURL=saofile.js.map