1
0
mirror of https://github.com/robonen/tools.git synced 2026-03-20 10:54:44 +00:00

Merge pull request #71 from robonen/refactor/update-cli

feat(cli): auto resolve latest packages for cli
This commit is contained in:
2025-05-18 00:04:23 +07:00
committed by GitHub
3 changed files with 59 additions and 23 deletions

View File

@@ -1,16 +1,55 @@
#!/usr/bin/env node
import { mkdir, writeFile } from 'node:fs/promises'; import { mkdir, writeFile } from 'node:fs/promises';
import { defineCommand, runMain } from 'citty'; import { defineCommand, runMain } from 'citty';
import { resolve } from 'pathe'; import { resolve } from 'node:path';
import { splitByCase } from 'scule'; import { splitByCase } from 'scule';
const PACKAGE_MANAGER = 'pnpm@9.11.0'; async function getLatestPackageVersion(packageName: string) {
const NODE_VERSION = '>=20.17.0'; try {
const VITE_VERSION = '^5.4.8'; const response = await fetch(`https://registry.npmjs.org/${packageName}`);
const VITE_DTS_VERSION = '^4.2.2'; const data = await response.json();
const PATHE_VERSION = '^1.1.2'
if (!response.ok) {
console.warn(`Failed to fetch latest version for ${packageName}, using fallback`);
return null;
}
const latestVersion = data['dist-tags']?.latest as string | undefined;
if (!latestVersion)
return null;
return {
version: latestVersion,
versionRange: `^${latestVersion}`,
};
} catch (error) {
console.warn(`Error fetching version for ${packageName}: ${error.message}`);
return null;
}
}
const PACKAGE_MANAGER_DEFAULT = 'pnpm@10.10.0';
const NODE_VERSION = '>=22.15.0';
const VITE_VERSION_DEFAULT = '^5.4.8';
const VITE_DTS_VERSION_DEFAULT = '^4.2.2';
const PATHE_VERSION_DEFAULT = '^1.1.2';
const DEFAULT_DIR = 'packages'; const DEFAULT_DIR = 'packages';
const generatePackageJson = (name: string, path: string, hasVite: boolean) => { const generatePackageJson = async (name: string, path: string, hasVite: boolean) => {
const [
packageManagerVersion,
viteVersion,
viteDtsVersion,
patheVersion,
] = await Promise.all([
getLatestPackageVersion('pnpm').then(v => v?.version || PACKAGE_MANAGER_DEFAULT),
hasVite ? getLatestPackageVersion('vite').then(v => v?.versionRange || VITE_VERSION_DEFAULT) : VITE_VERSION_DEFAULT,
hasVite ? getLatestPackageVersion('vite-plugin-dts').then(v => v?.versionRange || VITE_DTS_VERSION_DEFAULT) : VITE_DTS_VERSION_DEFAULT,
hasVite ? getLatestPackageVersion('pathe').then(v => v?.versionRange || PATHE_VERSION_DEFAULT) : PATHE_VERSION_DEFAULT,
]);
const data = { const data = {
name, name,
private: true, private: true,
@@ -24,7 +63,7 @@ const generatePackageJson = (name: string, path: string, hasVite: boolean) => {
url: 'git+https://github.com/robonen/tools.git', url: 'git+https://github.com/robonen/tools.git',
directory: path, directory: path,
}, },
packageManager: PACKAGE_MANAGER, packageManager: `pnpm@${packageManagerVersion}`,
engines: { engines: {
node: NODE_VERSION, node: NODE_VERSION,
}, },
@@ -51,9 +90,9 @@ const generatePackageJson = (name: string, path: string, hasVite: boolean) => {
devDependencies: { devDependencies: {
'@robonen/tsconfig': 'workspace:*', '@robonen/tsconfig': 'workspace:*',
...(hasVite && { ...(hasVite && {
vite: VITE_VERSION, vite: viteVersion,
'vite-plugin-dts': VITE_DTS_VERSION, 'vite-plugin-dts': viteDtsVersion,
pathe: PATHE_VERSION, pathe: patheVersion,
}), }),
}, },
}; };
@@ -132,14 +171,15 @@ const createCommand = defineCommand({
await mkdir(resolvedPath, { recursive: true }); await mkdir(resolvedPath, { recursive: true });
writeFile(`${resolvedPath}/package.json`, generatePackageJson(args.name, path, hasVite)); const packageJson = await generatePackageJson(args.name, path, hasVite);
writeFile(`${resolvedPath}/jsr.json`, generateJsrJson(args.name)); await writeFile(`${resolvedPath}/package.json`, packageJson);
writeFile(`${resolvedPath}/tsconfig.json`, generateTsConfig()); await writeFile(`${resolvedPath}/jsr.json`, generateJsrJson(args.name));
writeFile(`${resolvedPath}/README.md`, generateReadme(args.name)); await writeFile(`${resolvedPath}/tsconfig.json`, generateTsConfig());
await writeFile(`${resolvedPath}/README.md`, generateReadme(args.name));
if (hasVite) { if (hasVite) {
mkdir(`${resolvedPath}/src`, { recursive: true }); await mkdir(`${resolvedPath}/src`, { recursive: true });
writeFile(`${resolvedPath}/vite.config.ts`, generateViteConfig()); await writeFile(`${resolvedPath}/vite.config.ts`, generateViteConfig());
} }
console.log(`Project created successfully`); console.log(`Project created successfully`);

View File

@@ -15,7 +15,7 @@
"type": "git", "type": "git",
"url": "git+https://github.com/robonen/tools.git" "url": "git+https://github.com/robonen/tools.git"
}, },
"packageManager": "pnpm@10.10.0", "packageManager": "pnpm@10.11.0",
"engines": { "engines": {
"node": ">=22.15.0" "node": ">=22.15.0"
}, },
@@ -24,14 +24,13 @@
"@types/node": "^22.15.17", "@types/node": "^22.15.17",
"citty": "^0.1.6", "citty": "^0.1.6",
"jiti": "^2.4.2", "jiti": "^2.4.2",
"pathe": "^2.0.3",
"scule": "^1.3.0", "scule": "^1.3.0",
"vitepress": "^1.6.3" "vitepress": "^1.6.3"
}, },
"scripts": { "scripts": {
"all:build": "pnpm -r build", "all:build": "pnpm -r build",
"all:test": "pnpm -r test", "all:test": "pnpm -r test",
"create": "jiti ./cli.ts", "create": "jiti ./bin/cli.ts",
"docs:dev": "vitepress dev .", "docs:dev": "vitepress dev .",
"docs:build": "vitepress build .", "docs:build": "vitepress build .",
"docs:preview": "vitepress preview ." "docs:preview": "vitepress preview ."

3
pnpm-lock.yaml generated
View File

@@ -41,9 +41,6 @@ importers:
jiti: jiti:
specifier: ^2.4.2 specifier: ^2.4.2
version: 2.4.2 version: 2.4.2
pathe:
specifier: ^2.0.3
version: 2.0.3
scule: scule:
specifier: ^1.3.0 specifier: ^1.3.0
version: 1.3.0 version: 1.3.0