@growing-web/codemod
Version:
@growing-web/codemod for Growing Web Guidelines.
108 lines (104 loc) • 2.8 kB
JavaScript
import { cac } from 'cac';
import colors from 'picocolors';
import consola from 'consola';
import fs from 'fs-extra';
import path from 'node:path';
import { getPackages } from '@manypkg/get-packages';
const name = "@growing-web/codemod";
const version = "0.1.0";
const description = "@growing-web/codemod for Growing Web Guidelines.";
const keywords = [
"growing-web",
"codemod"
];
const homepage = "https://github.com/growing-web/web-kit#readme";
const bugs = {
url: "https://github.com/growing-web/web-kit/issues"
};
const repository = {
type: "git",
url: "git+https://github.com/growing-web/web-kit.git",
directory: "packages/codemod"
};
const license = "MIT";
const author = "vben";
const main = "./dist/index.cjs";
const module = "./dist/index.mjs";
const types = "./dist/index.d.ts";
const bin = "./bin/codemod.mjs";
const scripts = {
build: "unbuild",
dev: "unbuild --stub",
prepublishOnly: "pnpm run build",
prestub: "npm run dev"
};
const dependencies = {
"@manypkg/get-packages": "^1.1.3",
cac: "^6.7.12",
consola: "^2.15.3",
"fs-extra": "^10.1.0",
picocolors: "^1.0.0"
};
const pkg = {
name: name,
version: version,
description: description,
keywords: keywords,
homepage: homepage,
bugs: bugs,
repository: repository,
license: license,
author: author,
main: main,
module: module,
types: types,
bin: bin,
scripts: scripts,
dependencies: dependencies
};
const MONOREPO_CODE_WORKSPACE_FILE = "monorepo.code-workspace";
async function generatorVscodeCodeWorksapceFile(cwd = process.cwd()) {
const { packages, root } = await getPackages(cwd);
const folders = packages.map((pkg) => {
return {
name: pkg.packageJson.name,
path: path.relative(root.dir || cwd, pkg.dir)
};
});
folders.filter(Boolean);
folders.push({
name: "root",
path: "."
});
return folders;
}
async function createCodeWorksapceFile(cwd) {
const folders = await generatorVscodeCodeWorksapceFile(cwd);
fs.outputJSONSync(path.join(cwd, MONOREPO_CODE_WORKSPACE_FILE), { folders }, { encoding: "utf-8", spaces: 2 });
}
const NAME = "codemod";
consola.wrapConsole();
async function bootstrap() {
const cli = cac(NAME);
consola.info(`${pkg.name} v${pkg.version}`);
cli.command("[type]").usage("ability to create.").action(async (type) => {
switch (type) {
case "create-code-workspace":
await createCodeWorksapceFile(process.cwd());
consola.success(colors.green(`${MONOREPO_CODE_WORKSPACE_FILE} is created!`));
break;
default:
consola.error(colors.red(`Invalid transform choice, pick one of:
- create-code-workspace
`));
}
});
cli.version(pkg.version);
cli.usage(NAME);
cli.help();
cli.parse();
}
bootstrap().catch((err) => {
consola.error(err);
process.exit(1);
});