@windrun-huaiin/dev-scripts 6.6.1 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -4,7 +4,7 @@ import { program } from 'commander';
4
4
  import { existsSync, unlinkSync, rmSync, readFileSync, writeFileSync, mkdirSync, statSync, readdirSync } from 'fs';
5
5
  import path, { resolve, join } from 'path';
6
6
  import { execSync } from 'child_process';
7
- import { ensureDir, copy, pathExists, rename, readJson, writeJson, remove } from 'fs-extra';
7
+ import { pathExists, ensureDir, copy, rename, remove, readJson, writeJson } from 'fs-extra';
8
8
  import os from 'os';
9
9
 
10
10
  var MONOREPO_CLEAN_TARGETS = [
@@ -218,7 +218,36 @@ async function createDiaomaoApp(targetDir) {
218
218
  console.error("Usage: create-diaomao-app <project-name>");
219
219
  process.exit(1);
220
220
  }
221
- const destDir = path.resolve(process.cwd(), targetDir);
221
+ const cwd2 = process.cwd();
222
+ const cwdPackageJson = path.join(cwd2, "package.json");
223
+ const cwdWorkspaceYaml = path.join(cwd2, "pnpm-workspace.yaml");
224
+ const hasPkgJson = await pathExists(cwdPackageJson);
225
+ const hasWorkspace = await pathExists(cwdWorkspaceYaml);
226
+ let destDir;
227
+ let isMonorepo = false;
228
+ let skipInstallAndGit = false;
229
+ if (hasPkgJson && hasWorkspace) {
230
+ console.log("Detected monorepo environment, creating project under apps/");
231
+ destDir = path.resolve(cwd2, "apps", targetDir);
232
+ isMonorepo = true;
233
+ skipInstallAndGit = true;
234
+ if (await pathExists(destDir)) {
235
+ console.error(`Error: Project 'apps/${targetDir}' already exists in this monorepo!`);
236
+ console.error(`Please choose a different name or remove the existing project first.`);
237
+ process.exit(1);
238
+ }
239
+ } else if (hasPkgJson && !hasWorkspace) {
240
+ console.error("Warning: You are in a directory that already contains package.json");
241
+ console.error("This might create a nested project structure which is usually not intended.");
242
+ console.error("");
243
+ console.error("Recommendations:");
244
+ console.error("- If you want to create a standalone project, run this command in an empty directory");
245
+ console.error("- If you want to add to a monorepo, run this command in the monorepo root");
246
+ console.error("");
247
+ process.exit(1);
248
+ } else {
249
+ destDir = path.resolve(cwd2, targetDir);
250
+ }
222
251
  const tempDir = path.join(os.tmpdir(), `diaomao-template-${Date.now()}`);
223
252
  console.log(`Creating project: ${targetDir}...`);
224
253
  try {
@@ -236,77 +265,106 @@ async function createDiaomaoApp(targetDir) {
236
265
  await rename(envTxtPath, envPath);
237
266
  console.log("Renamed .env.local.txt to .env.local");
238
267
  }
268
+ if (isMonorepo) {
269
+ const changesetDir = path.join(destDir, ".changeset");
270
+ if (await pathExists(changesetDir)) {
271
+ await remove(changesetDir);
272
+ console.log("Removed .changeset folder (managed by monorepo root)");
273
+ }
274
+ }
239
275
  const pkgPath = path.join(destDir, "package.json");
240
276
  const pkg = await readJson(pkgPath);
241
277
  pkg.name = path.basename(targetDir);
242
278
  pkg.version = "1.0.0";
243
279
  pkg.private = true;
244
- pkg.pnpm = {
245
- "onlyBuiltDependencies": [
246
- "@clerk/shared",
247
- "@parcel/watcher",
248
- "@tailwindcss/oxide",
249
- "core-js",
250
- "esbuild",
251
- "sharp",
252
- "unrs-resolver"
253
- ],
254
- "overrides": {
255
- "@types/react": "19.1.2",
256
- "@types/react-dom": "19.1.3"
257
- },
258
- "patchedDependencies": {
259
- "fumadocs-ui@15.3.3": "patches/fumadocs-ui@15.3.3.patch"
280
+ if (isMonorepo) {
281
+ if (pkg.dependencies) {
282
+ Object.keys(pkg.dependencies).forEach((key) => {
283
+ if (key.startsWith("@windrun-huaiin/")) {
284
+ pkg.dependencies[key] = "workspace:^";
285
+ }
286
+ });
260
287
  }
261
- };
262
- pkg.scripts = {
263
- "postinstall": "fumadocs-mdx",
264
- "predev": "pnpm run lint",
265
- "dev": "next dev --turbopack",
266
- "build": "pnpm generate-blog-index && next build",
267
- "build:dev": "pnpm generate-blog-index && next build",
268
- "build:prod": "next build",
269
- "start": "next start",
270
- "lint": "next lint",
271
- "deep-clean": "dev-scripts deep-clean",
272
- "d8": "pnpm run deep-clean",
273
- "easy-changeset": "dev-scripts easy-changeset",
274
- "dj": "pnpm run easy-changeset && pnpm changeset status",
275
- "djv": "pnpm changeset version",
276
- "generate-blog-index": "dev-scripts generate-blog-index -v",
277
- "check-translations": "dev-scripts check-translations -v",
278
- "clean-translations": "dev-scripts clean-translations -v",
279
- "remove-translations": "dev-scripts clean-translations --remove -v",
280
- "whoareyou": "dev-scripts generate-nextjs-architecture -v"
281
- };
288
+ if (pkg.devDependencies) {
289
+ Object.keys(pkg.devDependencies).forEach((key) => {
290
+ if (key.startsWith("@windrun-huaiin/")) {
291
+ pkg.devDependencies[key] = "workspace:^";
292
+ }
293
+ });
294
+ }
295
+ delete pkg.pnpm;
296
+ if (pkg.scripts) {
297
+ delete pkg.scripts["deep-clean"];
298
+ delete pkg.scripts["d8"];
299
+ delete pkg.scripts["easy-changeset"];
300
+ delete pkg.scripts["dj"];
301
+ delete pkg.scripts["djv"];
302
+ delete pkg.scripts["djvp"];
303
+ }
304
+ } else {
305
+ pkg.pnpm = {
306
+ "onlyBuiltDependencies": [
307
+ "@clerk/shared",
308
+ "@parcel/watcher",
309
+ "@tailwindcss/oxide",
310
+ "core-js",
311
+ "esbuild",
312
+ "sharp",
313
+ "unrs-resolver"
314
+ ],
315
+ "overrides": {
316
+ "@types/react": "19.1.2",
317
+ "@types/react-dom": "19.1.3"
318
+ },
319
+ "patchedDependencies": {
320
+ "fumadocs-ui@15.3.3": "patches/fumadocs-ui@15.3.3.patch"
321
+ }
322
+ };
323
+ if (pkg.scripts) {
324
+ delete pkg.scripts["djvp"];
325
+ }
326
+ }
282
327
  delete pkg.publishConfig;
283
328
  delete pkg.files;
284
329
  await writeJson(pkgPath, pkg, { spaces: 2 });
285
- console.log("Installing dependencies...");
286
- try {
287
- execSync("pnpm install", { cwd: destDir, stdio: "inherit" });
288
- } catch (error) {
289
- console.warn("pnpm failed, trying npm...");
330
+ if (!skipInstallAndGit) {
331
+ console.log("Installing dependencies...");
290
332
  try {
291
- execSync("npm install", { cwd: destDir, stdio: "inherit" });
292
- } catch (npmError) {
293
- console.error("Failed to install dependencies. Please run npm install or pnpm install manually.");
333
+ execSync("pnpm install", { cwd: destDir, stdio: "inherit" });
334
+ } catch (error) {
335
+ console.warn("pnpm failed, trying npm...");
336
+ try {
337
+ execSync("npm install", { cwd: destDir, stdio: "inherit" });
338
+ } catch (npmError) {
339
+ console.error("Failed to install dependencies. Please run npm install or pnpm install manually.");
340
+ }
294
341
  }
295
- }
296
- console.log("Initializing Git repository...");
297
- try {
298
- execSync("git init", { cwd: destDir, stdio: "inherit" });
299
- execSync("git add .", { cwd: destDir, stdio: "inherit" });
300
- execSync('git commit -m "feat: initial commit from diaomao template"', { cwd: destDir, stdio: "inherit" });
301
- } catch (error) {
302
- console.warn("Failed to initialize Git repository. Please initialize manually.");
342
+ console.log("Initializing Git repository...");
343
+ try {
344
+ execSync("git init", { cwd: destDir, stdio: "inherit" });
345
+ execSync("git add .", { cwd: destDir, stdio: "inherit" });
346
+ execSync('git commit -m "feat: initial commit from diaomao template"', { cwd: destDir, stdio: "inherit" });
347
+ } catch (error) {
348
+ console.warn("Failed to initialize Git repository. Please initialize manually.");
349
+ }
350
+ } else {
351
+ console.log("Skipping dependency installation and Git initialization (managed by monorepo)");
303
352
  }
304
353
  console.log(`
305
354
  \u2705 Project created: ${destDir}`);
306
355
  console.log(`
307
356
  Next steps:`);
308
- console.log(` cd ${targetDir}`);
309
- console.log(` pnpm dev`);
357
+ if (isMonorepo) {
358
+ console.log(` Config pnpm-workspace.yaml, add your packages: -apps/${targetDir} for your monorepo`);
359
+ console.log(` Config .changeset/d8-template.mdx for CHANGELOG`);
360
+ console.log(` # Run 'pnpm install' from monorepo root if needed`);
361
+ console.log(` pnpm build`);
362
+ console.log(` pnpm dev`);
363
+ } else {
364
+ console.log(` cd ${targetDir}`);
365
+ console.log(` pnpm build`);
366
+ console.log(` pnpm dev`);
367
+ }
310
368
  console.log(` NOTE: please check .env.local file and set your own env!`);
311
369
  } catch (error) {
312
370
  console.error("Failed to create project:", error);
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/deep-clean.ts","../src/commands/easy-changeset.ts","../src/commands/generate-nextjs-architecture.ts","../src/commands/create-diaomao-app.ts","../src/cli.ts"],"names":["cwd","join","existsSync","renderTree","mdx","writeFileSync","execSync"],"mappings":"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","file":"cli.mjs","sourcesContent":["import { existsSync, statSync, rmSync, readdirSync, unlinkSync } from 'fs'\nimport { join, resolve } from 'path'\nimport { DevScriptsConfig } from '@dev-scripts/config/schema'\nimport { Logger } from '@dev-scripts/utils/logger'\n\ninterface CleanTarget {\n pattern: string\n description: string\n isFile?: boolean\n}\n\nconst MONOREPO_CLEAN_TARGETS: CleanTarget[] = [\n { pattern: 'node_modules', description: 'Root directory dependencies' },\n { pattern: 'packages/*/node_modules', description: 'Package dependencies' },\n { pattern: 'apps/*/node_modules', description: 'Application dependencies' },\n { pattern: 'apps/*/.next', description: 'Next.js cache' },\n { pattern: 'packages/*/dist', description: 'Package build artifacts' },\n { pattern: 'apps/*/dist', description: 'Application build artifacts' },\n { pattern: '.turbo', description: 'Root directory Turbo cache' },\n { pattern: 'packages/*/.turbo', description: 'Package Turbo cache' },\n { pattern: 'apps/*/.turbo', description: 'Application Turbo cache' },\n { pattern: 'pnpm-lock.yaml', description: 'pnpm lock file', isFile: true }\n]\n\nconst SINGLE_CLEAN_TARGETS: CleanTarget[] = [\n { pattern: 'node_modules', description: 'Root directory dependencies' },\n { pattern: '.next', description: 'Next.js cache' },\n { pattern: 'pnpm-lock.yaml', description: 'pnpm lock file', isFile: true }\n]\n\nfunction globDirsOrFiles(pattern: string, cwd: string, isFile?: boolean): string[] {\n if (!pattern.includes('*')) {\n const abs = resolve(cwd, pattern)\n if (isFile) {\n return existsSync(abs) ? [abs] : []\n }\n return existsSync(abs) && statSync(abs).isDirectory() ? [abs] : []\n }\n const [base, rest] = pattern.split('/*')\n const absBase = resolve(cwd, base)\n if (!existsSync(absBase) || !statSync(absBase).isDirectory()) return []\n const subdirs = readdirSync(absBase)\n return subdirs.map(d => join(absBase, d, rest.replace(/^[\\/]/, '')))\n .filter(p => existsSync(p) && (isFile ? true : statSync(p).isDirectory()))\n}\n\nexport async function deepClean(\n config: DevScriptsConfig,\n yes: boolean = false,\n cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'\n): Promise<number> {\n const logger = new Logger(config)\n // Environment check, DO NOT EXECUTE IN PRODUCTION ENVIRONMENT\n if (process.env.NODE_ENV === 'production') {\n logger.error('❌ Production environment prohibits deep clean operations')\n logger.log(' If you need to clean, please set: NODE_ENV=development')\n logger.saveToFile('deep-clean.log', cwd)\n return 1\n }\n\n logger.warn('==============================')\n logger.warn(`‼️ Current working directory: ⭕ ${cwd} ⭕`)\n logger.warn('==============================')\n\n // Auto detect project type\n const isMonorepo = existsSync(resolve(cwd, 'pnpm-workspace.yaml'))\n const cleanTargets: CleanTarget[] = isMonorepo ? MONOREPO_CLEAN_TARGETS : SINGLE_CLEAN_TARGETS\n\n let totalToDelete: string[] = []\n let groupDeleteMap: Record<string, string[]> = {}\n\n for (const target of cleanTargets) {\n const found = globDirsOrFiles(target.pattern, cwd, target.isFile)\n groupDeleteMap[target.description] = found\n if (found.length === 0) {\n logger.info(`💯 ${target.description}: No need to clean`)\n } else {\n logger.log(`\\n[${target.description}]`)\n found.forEach(p => logger.warn(`👙 [Preview] ${p}`))\n totalToDelete.push(...found)\n }\n }\n\n if (totalToDelete.length === 0) {\n logger.success('No directories or files to clean.')\n logger.saveToFile('deep-clean.log', cwd)\n return 0\n }\n\n if (!yes) {\n logger.log('\\nIf you need to actually delete, please add --yes parameter.')\n logger.saveToFile('deep-clean.log', cwd)\n return 0\n }\n\n // Execute deletion, grouped print\n let deleted = 0\n for (const target of cleanTargets) {\n const items = groupDeleteMap[target.description] || []\n if (items.length > 0) {\n logger.log(`\\n[${target.description}]`)\n for (const p of items) {\n try {\n if (target.isFile) {\n unlinkSync(p)\n if (!existsSync(p)) {\n logger.success(`🍻 Deleted: ${p}`)\n deleted++\n } else {\n logger.error(`❌ Delete failed: ${p} (file still exists)`)\n }\n } else {\n rmSync(p, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 })\n if (!existsSync(p)) {\n logger.success(`🍻 Deleted: ${p}`)\n deleted++\n } else {\n logger.error(`❌ Delete failed: ${p} (directory still exists)`)\n }\n }\n } catch (e: any) {\n logger.error(`❌ Delete failed: ${p} (${e.message})`)\n }\n }\n }\n }\n logger.log(`\\n🍺 Total cleaned: ${deleted} directories or files.`)\n logger.saveToFile('deep-clean.log', cwd)\n return 0\n} ","import { existsSync, readFileSync, writeFileSync } from 'fs'\nimport { join } from 'path'\n\nexport async function easyChangeset(cwd: string = typeof process !== 'undefined' ? process.cwd() : '.') {\n // Environment check, DO NOT EXECUTE IN PRODUCTION ENVIRONMENT\n if (process.env.NODE_ENV === 'production') {\n console.log('❌ Production environment prohibits deep clean operations')\n console.log(' If you need to clean, please set: NODE_ENV=development')\n return 1\n }\n\n console.log('==============================')\n console.log(`‼️ Current working directory: ⭕ ${cwd} ⭕`)\n console.log('==============================')\n \n const changesetDir = join(cwd, '.changeset')\n const mdxFile = join(changesetDir, 'd8-template.mdx')\n const mdFile = join(changesetDir, 'd8-template.md')\n\n if (!existsSync(changesetDir)) {\n console.log('❌ No .changeset directory found, skipping.')\n return 1\n }\n if (!existsSync(mdxFile)) {\n console.log('❌ No .changeset/d8-template.mdx file found, skipping.')\n return 1\n }\n try {\n const content = readFileSync(mdxFile, 'utf-8')\n writeFileSync(mdFile, content, 'utf-8')\n console.log('✅ Copied d8-template.mdx content to d8-template.md')\n return 0\n } catch (e: any) {\n console.log('❌ Copy failed:', e.message)\n return 1\n }\n} ","import { DevScriptsConfig, DEFAULT_CONFIG } from '@dev-scripts/config/schema'\nimport { readJsonFile } from '@dev-scripts/utils/file-scanner'\nimport { Logger } from '@dev-scripts/utils/logger'\nimport { execSync } from 'child_process'\nimport { existsSync, mkdirSync, writeFileSync } from 'fs'\nimport { join } from 'path'\n\nfunction getCurrentDateString(): string {\n const now = new Date()\n const year = now.getFullYear()\n const month = String(now.getMonth() + 1).padStart(2, '0')\n const day = String(now.getDate()).padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport async function generateNextjsArchitecture(\n config: DevScriptsConfig,\n cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'\n): Promise<number> {\n const logger = new Logger(config)\n try {\n // get logs directory and blog directory\n const logsDir = join(cwd, config.output?.logDir || 'logs')\n const blogDir = join(cwd, config.blog?.mdxDir || 'src/mdx/blog')\n if (!existsSync(logsDir)) mkdirSync(logsDir, { recursive: true })\n if (!existsSync(blogDir)) mkdirSync(blogDir, { recursive: true })\n\n // generate tree result to logs directory\n const treeJsonPath = join(logsDir, 'project_tree.json')\n logger.log(`Running tree command to generate ${treeJsonPath}`)\n execSync(`tree -a -J -I '.next|node_modules|logs|dist|pnpm-lock.yaml|turbo|.turbo|public|.cursor|.DS_Store|.git' > ${treeJsonPath}`)\n\n // read tree result\n const tree = readJsonFile<any[]>(treeJsonPath)\n if (!tree) {\n logger.error('Failed to read tree JSON result!')\n return 1\n }\n // Merge config and user first\n const userConfig = config.architectureConfig || {}\n const architectureConfig = { ...(DEFAULT_CONFIG.architectureConfig || {}), ...userConfig }\n\n function renderTree(nodes: any[], depth = 0, parentPath: string = ''): string {\n let mdx = ''\n for (const node of nodes) {\n const nodePath = parentPath ? `${parentPath}/${node.name}` : node.name\n const anotion = architectureConfig[node.name] || ''\n // scan root directory name='ROOT'\n const displayName = (depth === 0 && node.name === '.') ? 'ROOT' : node.name\n if (node.type === 'directory') {\n if (!node.contents || node.contents.length === 0) {\n // handle empty folder\n mdx += `${' '.repeat(depth)}<ZiaFolder name=\"${displayName}\" anotion=\"${anotion}\" className=\"opacity-50\" disabled/>\\n`\n } else {\n // handle non-empty folder\n mdx += `${' '.repeat(depth)}<ZiaFolder name=\"${displayName}\" anotion=\"${anotion}\" defaultOpen>\\n`\n mdx += renderTree(node.contents, depth + 1, nodePath)\n mdx += `${' '.repeat(depth)}</ZiaFolder>\\n`\n }\n } else if (node.type === 'file') {\n mdx += `${' '.repeat(depth)}<ZiaFile name=\"${node.name}\" anotion=\"${anotion}\" href=\"\" />\\n`\n }\n }\n return mdx\n }\n\n // generate frontmatter\n const frontmatter = `---\\ntitle: About Project Structure\\ndescription: Show all source code directories and files\\nicon: Gift\\ndate: ${getCurrentDateString()}\\n---\\n\\n## Quick Started\\n\\n`\n // generate mdx content\n const filesContent = renderTree(tree)\n const indentedFilesContent = filesContent.split('\\n').map(line => line ? ' ' + line : '').join('\\n')\n const mdx = frontmatter + '<Files>\\n' + indentedFilesContent + '</Files>\\n'\n // output to blog directory\n const outputMdxPath = join(blogDir, 'nextjs-architecture.mdx')\n writeFileSync(outputMdxPath, mdx)\n logger.success(`Successfully generated ${outputMdxPath}`)\n logger.saveToFile('generate-nextjs-architecture.log', cwd)\n return 0\n } catch (error) {\n logger.error(`Error generating nextjs architecture mdx: ${error}`)\n return 1\n }\n} ","import { copy, readJson, writeJson, remove, ensureDir, pathExists, rename } from 'fs-extra';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport os from 'os';\n\nexport async function createDiaomaoApp(targetDir: string) {\n if (!targetDir) {\n console.error('Usage: create-diaomao-app <project-name>');\n process.exit(1);\n }\n \n const destDir = path.resolve(process.cwd(), targetDir);\n const tempDir = path.join(os.tmpdir(), `diaomao-template-${Date.now()}`);\n\n console.log(`Creating project: ${targetDir}...`);\n \n try {\n // create temp dir\n await ensureDir(tempDir);\n \n // download diaomao package from npm\n console.log('Downloading diaomao template from npm...');\n execSync(`npm pack @windrun-huaiin/diaomao`, { cwd: tempDir, stdio: 'inherit' });\n \n // unzip npm package\n const packageFiles = execSync('ls *.tgz', { cwd: tempDir, encoding: 'utf8' }).trim().split('\\n');\n const packageFile = packageFiles[0];\n execSync(`tar -xzf ${packageFile}`, { cwd: tempDir });\n \n // copy template content (npm package unzip in package/ directory)\n const templateDir = path.join(tempDir, 'package');\n await copy(templateDir, destDir, { overwrite: true });\n \n // rename .env.local.txt to .env.local\n const envTxtPath = path.join(destDir, '.env.local.txt');\n const envPath = path.join(destDir, '.env.local');\n if (await pathExists(envTxtPath)) {\n await rename(envTxtPath, envPath);\n console.log('Renamed .env.local.txt to .env.local');\n }\n \n // read and modify package.json\n const pkgPath = path.join(destDir, 'package.json');\n const pkg = await readJson(pkgPath);\n pkg.name = path.basename(targetDir);\n pkg.version = \"1.0.0\";\n pkg.private = true;\n \n // add pnpm configuration\n pkg.pnpm = {\n \"onlyBuiltDependencies\": [\n \"@clerk/shared\",\n \"@parcel/watcher\",\n \"@tailwindcss/oxide\",\n \"core-js\",\n \"esbuild\",\n \"sharp\",\n \"unrs-resolver\"\n ],\n \"overrides\": {\n \"@types/react\": \"19.1.2\",\n \"@types/react-dom\": \"19.1.3\"\n },\n \"patchedDependencies\": {\n \"fumadocs-ui@15.3.3\": \"patches/fumadocs-ui@15.3.3.patch\"\n }\n };\n\n pkg.scripts = {\n \"postinstall\": \"fumadocs-mdx\",\n \"predev\": \"pnpm run lint\",\n \"dev\": \"next dev --turbopack\",\n \"build\": \"pnpm generate-blog-index && next build\",\n \"build:dev\": \"pnpm generate-blog-index && next build\",\n \"build:prod\": \"next build\",\n \"start\": \"next start\",\n \"lint\": \"next lint\",\n \"deep-clean\": \"dev-scripts deep-clean\",\n \"d8\": \"pnpm run deep-clean\",\n \"easy-changeset\": \"dev-scripts easy-changeset\",\n \"dj\": \"pnpm run easy-changeset && pnpm changeset status\",\n \"djv\": \"pnpm changeset version\",\n \"generate-blog-index\": \"dev-scripts generate-blog-index -v\",\n \"check-translations\": \"dev-scripts check-translations -v\",\n \"clean-translations\": \"dev-scripts clean-translations -v\",\n \"remove-translations\": \"dev-scripts clean-translations --remove -v\",\n \"whoareyou\": \"dev-scripts generate-nextjs-architecture -v\"\n }\n \n // remove publish related config\n delete pkg.publishConfig;\n delete pkg.files;\n await writeJson(pkgPath, pkg, { spaces: 2 });\n\n console.log('Installing dependencies...');\n \n // auto install dependencies\n try {\n execSync('pnpm install', { cwd: destDir, stdio: 'inherit' });\n } catch (error) {\n console.warn('pnpm failed, trying npm...');\n try {\n execSync('npm install', { cwd: destDir, stdio: 'inherit' });\n } catch (npmError) {\n console.error('Failed to install dependencies. Please run npm install or pnpm install manually.');\n }\n }\n\n console.log('Initializing Git repository...');\n \n // initialize git\n try {\n execSync('git init', { cwd: destDir, stdio: 'inherit' });\n execSync('git add .', { cwd: destDir, stdio: 'inherit' });\n execSync('git commit -m \"feat: initial commit from diaomao template\"', { cwd: destDir, stdio: 'inherit' });\n } catch (error) {\n console.warn('Failed to initialize Git repository. Please initialize manually.');\n }\n\n console.log(`\\n✅ Project created: ${destDir}`);\n console.log(`\\nNext steps:`);\n console.log(` cd ${targetDir}`);\n console.log(` pnpm dev`);\n console.log(` NOTE: please check .env.local file and set your own env!`);\n \n } catch (error) {\n console.error('Failed to create project:', error);\n process.exit(1);\n } finally {\n // clean up temp dir\n try {\n await remove(tempDir);\n } catch (cleanupError) {\n console.warn('Failed to cleanup temporary directory:', tempDir);\n }\n }\n} ","#!/usr/bin/env node\n\nimport { program } from 'commander'\nimport { loadConfig, validateConfig } from '@dev-scripts/config'\nimport { checkTranslations } from '@dev-scripts/commands/check-translations'\nimport { cleanTranslations } from '@dev-scripts/commands/clean-translations'\nimport { generateBlogIndex } from '@dev-scripts/commands/generate-blog-index'\nimport { deepClean } from '@dev-scripts/commands/deep-clean'\nimport { easyChangeset } from '@dev-scripts/commands/easy-changeset'\nimport { generateNextjsArchitecture } from '@dev-scripts/commands/generate-nextjs-architecture'\nimport { createDiaomaoApp } from '@dev-scripts/commands/create-diaomao-app';\n\n// get current working directory, ensure it works in Node.js environment\nconst cwd = typeof process !== 'undefined' ? process.cwd() : '.'\n\nprogram\n .name('dev-scripts')\n .description('development scripts for multi-language projects')\n .version('5.0.0')\n\nprogram\n .command('check-translations')\n .description('check the completeness and consistency of translation files')\n .option('-v, --verbose', 'show detailed logs', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n \n // apply verbose option after loading\n if (options.verbose) {\n config.output.verbose = true\n }\n \n validateConfig(config)\n \n const exitCode = await checkTranslations(config, cwd)\n \n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('clean-translations')\n .description('clean unused translation keys')\n .option('-v, --verbose', 'show detailed logs', false)\n .option('--remove', 'actually delete unused keys (default only show)', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n \n // apply verbose option after loading\n if (options.verbose) {\n config.output.verbose = true\n }\n \n validateConfig(config)\n \n const exitCode = await cleanTranslations(config, options.remove, cwd)\n \n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('generate-blog-index')\n .description('generate blog index file')\n .option('-v, --verbose', 'show detailed logs', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n \n // apply verbose option after loading\n if (options.verbose) {\n config.output.verbose = true\n }\n \n validateConfig(config)\n \n const exitCode = await generateBlogIndex(config, cwd)\n \n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('deep-clean')\n .description('clean all node_modules, dist, .next, .turbo and related caches in monorepo')\n .option('--yes', 'actually delete matched directories (default only preview)', false)\n .option('-v, --verbose', 'show detailed logs', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n if (options.verbose) {\n config.output.verbose = true\n }\n validateConfig(config)\n const exitCode = await deepClean(config, options.yes, cwd)\n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('easy-changeset')\n .description('copy .changeset/d8-template.mdx to .changeset/d8-template.md if both exist')\n .action(async () => {\n try {\n const exitCode = await easyChangeset(cwd)\n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('generate-nextjs-architecture')\n .description('generate nextjs-architecture.mdx for project structure')\n .option('-v, --verbose', 'show detailed logs', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n if (options.verbose) {\n config.output.verbose = true\n }\n validateConfig(config)\n const exitCode = await generateNextjsArchitecture(config, cwd)\n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('create-diaomao-app <project-name>')\n .description('create a new diaomao app from template')\n .action(async (projectName) => {\n try {\n await createDiaomaoApp(projectName)\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\n// parse command line arguments\nif (typeof process !== 'undefined') {\n program.parse(process.argv)\n} "]}
1
+ {"version":3,"sources":["../src/commands/deep-clean.ts","../src/commands/easy-changeset.ts","../src/commands/generate-nextjs-architecture.ts","../src/commands/create-diaomao-app.ts","../src/cli.ts"],"names":["cwd","join","existsSync","renderTree","mdx","writeFileSync","execSync"],"mappings":"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","file":"cli.mjs","sourcesContent":["import { existsSync, statSync, rmSync, readdirSync, unlinkSync } from 'fs'\nimport { join, resolve } from 'path'\nimport { DevScriptsConfig } from '@dev-scripts/config/schema'\nimport { Logger } from '@dev-scripts/utils/logger'\n\ninterface CleanTarget {\n pattern: string\n description: string\n isFile?: boolean\n}\n\nconst MONOREPO_CLEAN_TARGETS: CleanTarget[] = [\n { pattern: 'node_modules', description: 'Root directory dependencies' },\n { pattern: 'packages/*/node_modules', description: 'Package dependencies' },\n { pattern: 'apps/*/node_modules', description: 'Application dependencies' },\n { pattern: 'apps/*/.next', description: 'Next.js cache' },\n { pattern: 'packages/*/dist', description: 'Package build artifacts' },\n { pattern: 'apps/*/dist', description: 'Application build artifacts' },\n { pattern: '.turbo', description: 'Root directory Turbo cache' },\n { pattern: 'packages/*/.turbo', description: 'Package Turbo cache' },\n { pattern: 'apps/*/.turbo', description: 'Application Turbo cache' },\n { pattern: 'pnpm-lock.yaml', description: 'pnpm lock file', isFile: true }\n]\n\nconst SINGLE_CLEAN_TARGETS: CleanTarget[] = [\n { pattern: 'node_modules', description: 'Root directory dependencies' },\n { pattern: '.next', description: 'Next.js cache' },\n { pattern: 'pnpm-lock.yaml', description: 'pnpm lock file', isFile: true }\n]\n\nfunction globDirsOrFiles(pattern: string, cwd: string, isFile?: boolean): string[] {\n if (!pattern.includes('*')) {\n const abs = resolve(cwd, pattern)\n if (isFile) {\n return existsSync(abs) ? [abs] : []\n }\n return existsSync(abs) && statSync(abs).isDirectory() ? [abs] : []\n }\n const [base, rest] = pattern.split('/*')\n const absBase = resolve(cwd, base)\n if (!existsSync(absBase) || !statSync(absBase).isDirectory()) return []\n const subdirs = readdirSync(absBase)\n return subdirs.map(d => join(absBase, d, rest.replace(/^[\\/]/, '')))\n .filter(p => existsSync(p) && (isFile ? true : statSync(p).isDirectory()))\n}\n\nexport async function deepClean(\n config: DevScriptsConfig,\n yes: boolean = false,\n cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'\n): Promise<number> {\n const logger = new Logger(config)\n // Environment check, DO NOT EXECUTE IN PRODUCTION ENVIRONMENT\n if (process.env.NODE_ENV === 'production') {\n logger.error('❌ Production environment prohibits deep clean operations')\n logger.log(' If you need to clean, please set: NODE_ENV=development')\n logger.saveToFile('deep-clean.log', cwd)\n return 1\n }\n\n logger.warn('==============================')\n logger.warn(`‼️ Current working directory: ⭕ ${cwd} ⭕`)\n logger.warn('==============================')\n\n // Auto detect project type\n const isMonorepo = existsSync(resolve(cwd, 'pnpm-workspace.yaml'))\n const cleanTargets: CleanTarget[] = isMonorepo ? MONOREPO_CLEAN_TARGETS : SINGLE_CLEAN_TARGETS\n\n let totalToDelete: string[] = []\n let groupDeleteMap: Record<string, string[]> = {}\n\n for (const target of cleanTargets) {\n const found = globDirsOrFiles(target.pattern, cwd, target.isFile)\n groupDeleteMap[target.description] = found\n if (found.length === 0) {\n logger.info(`💯 ${target.description}: No need to clean`)\n } else {\n logger.log(`\\n[${target.description}]`)\n found.forEach(p => logger.warn(`👙 [Preview] ${p}`))\n totalToDelete.push(...found)\n }\n }\n\n if (totalToDelete.length === 0) {\n logger.success('No directories or files to clean.')\n logger.saveToFile('deep-clean.log', cwd)\n return 0\n }\n\n if (!yes) {\n logger.log('\\nIf you need to actually delete, please add --yes parameter.')\n logger.saveToFile('deep-clean.log', cwd)\n return 0\n }\n\n // Execute deletion, grouped print\n let deleted = 0\n for (const target of cleanTargets) {\n const items = groupDeleteMap[target.description] || []\n if (items.length > 0) {\n logger.log(`\\n[${target.description}]`)\n for (const p of items) {\n try {\n if (target.isFile) {\n unlinkSync(p)\n if (!existsSync(p)) {\n logger.success(`🍻 Deleted: ${p}`)\n deleted++\n } else {\n logger.error(`❌ Delete failed: ${p} (file still exists)`)\n }\n } else {\n rmSync(p, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 })\n if (!existsSync(p)) {\n logger.success(`🍻 Deleted: ${p}`)\n deleted++\n } else {\n logger.error(`❌ Delete failed: ${p} (directory still exists)`)\n }\n }\n } catch (e: any) {\n logger.error(`❌ Delete failed: ${p} (${e.message})`)\n }\n }\n }\n }\n logger.log(`\\n🍺 Total cleaned: ${deleted} directories or files.`)\n logger.saveToFile('deep-clean.log', cwd)\n return 0\n} ","import { existsSync, readFileSync, writeFileSync } from 'fs'\nimport { join } from 'path'\n\nexport async function easyChangeset(cwd: string = typeof process !== 'undefined' ? process.cwd() : '.') {\n // Environment check, DO NOT EXECUTE IN PRODUCTION ENVIRONMENT\n if (process.env.NODE_ENV === 'production') {\n console.log('❌ Production environment prohibits deep clean operations')\n console.log(' If you need to clean, please set: NODE_ENV=development')\n return 1\n }\n\n console.log('==============================')\n console.log(`‼️ Current working directory: ⭕ ${cwd} ⭕`)\n console.log('==============================')\n \n const changesetDir = join(cwd, '.changeset')\n const mdxFile = join(changesetDir, 'd8-template.mdx')\n const mdFile = join(changesetDir, 'd8-template.md')\n\n if (!existsSync(changesetDir)) {\n console.log('❌ No .changeset directory found, skipping.')\n return 1\n }\n if (!existsSync(mdxFile)) {\n console.log('❌ No .changeset/d8-template.mdx file found, skipping.')\n return 1\n }\n try {\n const content = readFileSync(mdxFile, 'utf-8')\n writeFileSync(mdFile, content, 'utf-8')\n console.log('✅ Copied d8-template.mdx content to d8-template.md')\n return 0\n } catch (e: any) {\n console.log('❌ Copy failed:', e.message)\n return 1\n }\n} ","import { DevScriptsConfig, DEFAULT_CONFIG } from '@dev-scripts/config/schema'\nimport { readJsonFile } from '@dev-scripts/utils/file-scanner'\nimport { Logger } from '@dev-scripts/utils/logger'\nimport { execSync } from 'child_process'\nimport { existsSync, mkdirSync, writeFileSync } from 'fs'\nimport { join } from 'path'\n\nfunction getCurrentDateString(): string {\n const now = new Date()\n const year = now.getFullYear()\n const month = String(now.getMonth() + 1).padStart(2, '0')\n const day = String(now.getDate()).padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport async function generateNextjsArchitecture(\n config: DevScriptsConfig,\n cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'\n): Promise<number> {\n const logger = new Logger(config)\n try {\n // get logs directory and blog directory\n const logsDir = join(cwd, config.output?.logDir || 'logs')\n const blogDir = join(cwd, config.blog?.mdxDir || 'src/mdx/blog')\n if (!existsSync(logsDir)) mkdirSync(logsDir, { recursive: true })\n if (!existsSync(blogDir)) mkdirSync(blogDir, { recursive: true })\n\n // generate tree result to logs directory\n const treeJsonPath = join(logsDir, 'project_tree.json')\n logger.log(`Running tree command to generate ${treeJsonPath}`)\n execSync(`tree -a -J -I '.next|node_modules|logs|dist|pnpm-lock.yaml|turbo|.turbo|public|.cursor|.DS_Store|.git' > ${treeJsonPath}`)\n\n // read tree result\n const tree = readJsonFile<any[]>(treeJsonPath)\n if (!tree) {\n logger.error('Failed to read tree JSON result!')\n return 1\n }\n // Merge config and user first\n const userConfig = config.architectureConfig || {}\n const architectureConfig = { ...(DEFAULT_CONFIG.architectureConfig || {}), ...userConfig }\n\n function renderTree(nodes: any[], depth = 0, parentPath: string = ''): string {\n let mdx = ''\n for (const node of nodes) {\n const nodePath = parentPath ? `${parentPath}/${node.name}` : node.name\n const anotion = architectureConfig[node.name] || ''\n // scan root directory name='ROOT'\n const displayName = (depth === 0 && node.name === '.') ? 'ROOT' : node.name\n if (node.type === 'directory') {\n if (!node.contents || node.contents.length === 0) {\n // handle empty folder\n mdx += `${' '.repeat(depth)}<ZiaFolder name=\"${displayName}\" anotion=\"${anotion}\" className=\"opacity-50\" disabled/>\\n`\n } else {\n // handle non-empty folder\n mdx += `${' '.repeat(depth)}<ZiaFolder name=\"${displayName}\" anotion=\"${anotion}\" defaultOpen>\\n`\n mdx += renderTree(node.contents, depth + 1, nodePath)\n mdx += `${' '.repeat(depth)}</ZiaFolder>\\n`\n }\n } else if (node.type === 'file') {\n mdx += `${' '.repeat(depth)}<ZiaFile name=\"${node.name}\" anotion=\"${anotion}\" href=\"\" />\\n`\n }\n }\n return mdx\n }\n\n // generate frontmatter\n const frontmatter = `---\\ntitle: About Project Structure\\ndescription: Show all source code directories and files\\nicon: Gift\\ndate: ${getCurrentDateString()}\\n---\\n\\n## Quick Started\\n\\n`\n // generate mdx content\n const filesContent = renderTree(tree)\n const indentedFilesContent = filesContent.split('\\n').map(line => line ? ' ' + line : '').join('\\n')\n const mdx = frontmatter + '<Files>\\n' + indentedFilesContent + '</Files>\\n'\n // output to blog directory\n const outputMdxPath = join(blogDir, 'nextjs-architecture.mdx')\n writeFileSync(outputMdxPath, mdx)\n logger.success(`Successfully generated ${outputMdxPath}`)\n logger.saveToFile('generate-nextjs-architecture.log', cwd)\n return 0\n } catch (error) {\n logger.error(`Error generating nextjs architecture mdx: ${error}`)\n return 1\n }\n} ","import { copy, readJson, writeJson, remove, ensureDir, pathExists, rename } from 'fs-extra';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport os from 'os';\n\nexport async function createDiaomaoApp(targetDir: string) {\n if (!targetDir) {\n console.error('Usage: create-diaomao-app <project-name>');\n process.exit(1);\n }\n \n const cwd = process.cwd();\n const cwdPackageJson = path.join(cwd, 'package.json');\n const cwdWorkspaceYaml = path.join(cwd, 'pnpm-workspace.yaml');\n \n // detect current directory type\n const hasPkgJson = await pathExists(cwdPackageJson);\n const hasWorkspace = await pathExists(cwdWorkspaceYaml);\n \n let destDir: string;\n let isMonorepo = false;\n let skipInstallAndGit = false;\n \n if (hasPkgJson && hasWorkspace) {\n // monorepo scenario - create under apps/\n console.log('Detected monorepo environment, creating project under apps/');\n destDir = path.resolve(cwd, 'apps', targetDir);\n isMonorepo = true;\n skipInstallAndGit = true;\n \n // check if project already exists\n if (await pathExists(destDir)) {\n console.error(`Error: Project 'apps/${targetDir}' already exists in this monorepo!`);\n console.error(`Please choose a different name or remove the existing project first.`);\n process.exit(1);\n }\n } else if (hasPkgJson && !hasWorkspace) {\n // wrong directory - user might be inside an existing project\n console.error('Warning: You are in a directory that already contains package.json');\n console.error('This might create a nested project structure which is usually not intended.');\n console.error('');\n console.error('Recommendations:');\n console.error('- If you want to create a standalone project, run this command in an empty directory');\n console.error('- If you want to add to a monorepo, run this command in the monorepo root');\n console.error('');\n \n // for now, let's exit with error - can be enhanced to ask for user confirmation\n process.exit(1);\n } else {\n // normal scenario - create in current directory\n destDir = path.resolve(cwd, targetDir);\n }\n\n const tempDir = path.join(os.tmpdir(), `diaomao-template-${Date.now()}`);\n\n console.log(`Creating project: ${targetDir}...`);\n \n try {\n // create temp dir\n await ensureDir(tempDir);\n \n // download diaomao package from npm\n console.log('Downloading diaomao template from npm...');\n execSync(`npm pack @windrun-huaiin/diaomao`, { cwd: tempDir, stdio: 'inherit' });\n \n // unzip npm package\n const packageFiles = execSync('ls *.tgz', { cwd: tempDir, encoding: 'utf8' }).trim().split('\\n');\n const packageFile = packageFiles[0];\n execSync(`tar -xzf ${packageFile}`, { cwd: tempDir });\n \n // copy template content (npm package unzip in package/ directory)\n const templateDir = path.join(tempDir, 'package');\n await copy(templateDir, destDir, { overwrite: true });\n \n // rename .env.local.txt to .env.local\n const envTxtPath = path.join(destDir, '.env.local.txt');\n const envPath = path.join(destDir, '.env.local');\n if (await pathExists(envTxtPath)) {\n await rename(envTxtPath, envPath);\n console.log('Renamed .env.local.txt to .env.local');\n }\n \n // remove .changeset folder in monorepo scenario\n if (isMonorepo) {\n const changesetDir = path.join(destDir, '.changeset');\n if (await pathExists(changesetDir)) {\n await remove(changesetDir);\n console.log('Removed .changeset folder (managed by monorepo root)');\n }\n }\n \n // read and modify package.json\n const pkgPath = path.join(destDir, 'package.json');\n const pkg = await readJson(pkgPath);\n pkg.name = path.basename(targetDir);\n pkg.version = \"1.0.0\";\n pkg.private = true;\n \n if (isMonorepo) {\n // for monorepo, replace @windrun-huaiin/* dependencies with workspace:^\n if (pkg.dependencies) {\n Object.keys(pkg.dependencies).forEach(key => {\n if (key.startsWith('@windrun-huaiin/')) {\n pkg.dependencies[key] = 'workspace:^';\n }\n });\n }\n \n if (pkg.devDependencies) {\n Object.keys(pkg.devDependencies).forEach(key => {\n if (key.startsWith('@windrun-huaiin/')) {\n pkg.devDependencies[key] = 'workspace:^';\n }\n });\n }\n \n // remove pnpm config for monorepo (managed by root)\n delete pkg.pnpm;\n \n // remove monorepo-specific scripts for monorepo scenario\n if (pkg.scripts) {\n delete pkg.scripts['deep-clean'];\n delete pkg.scripts['d8'];\n delete pkg.scripts['easy-changeset'];\n delete pkg.scripts['dj'];\n delete pkg.scripts['djv'];\n delete pkg.scripts['djvp'];\n }\n } else {\n // add pnpm configuration for standalone project\n pkg.pnpm = {\n \"onlyBuiltDependencies\": [\n \"@clerk/shared\",\n \"@parcel/watcher\",\n \"@tailwindcss/oxide\",\n \"core-js\",\n \"esbuild\",\n \"sharp\",\n \"unrs-resolver\"\n ],\n \"overrides\": {\n \"@types/react\": \"19.1.2\",\n \"@types/react-dom\": \"19.1.3\"\n },\n \"patchedDependencies\": {\n \"fumadocs-ui@15.3.3\": \"patches/fumadocs-ui@15.3.3.patch\"\n }\n };\n\n // remove standalone-specific scripts for non-monorepo scenario\n if (pkg.scripts) {\n delete pkg.scripts['djvp'];\n }\n }\n \n \n // remove publish related config\n delete pkg.publishConfig;\n delete pkg.files;\n await writeJson(pkgPath, pkg, { spaces: 2 });\n\n if (!skipInstallAndGit) {\n console.log('Installing dependencies...');\n \n // auto install dependencies\n try {\n execSync('pnpm install', { cwd: destDir, stdio: 'inherit' });\n } catch (error) {\n console.warn('pnpm failed, trying npm...');\n try {\n execSync('npm install', { cwd: destDir, stdio: 'inherit' });\n } catch (npmError) {\n console.error('Failed to install dependencies. Please run npm install or pnpm install manually.');\n }\n }\n\n console.log('Initializing Git repository...');\n \n // initialize git\n try {\n execSync('git init', { cwd: destDir, stdio: 'inherit' });\n execSync('git add .', { cwd: destDir, stdio: 'inherit' });\n execSync('git commit -m \"feat: initial commit from diaomao template\"', { cwd: destDir, stdio: 'inherit' });\n } catch (error) {\n console.warn('Failed to initialize Git repository. Please initialize manually.');\n }\n } else {\n console.log('Skipping dependency installation and Git initialization (managed by monorepo)');\n }\n\n console.log(`\\n✅ Project created: ${destDir}`);\n console.log(`\\nNext steps:`);\n \n if (isMonorepo) {\n console.log(` Config pnpm-workspace.yaml, add your packages: -apps/${targetDir} for your monorepo`);\n console.log(` Config .changeset/d8-template.mdx for CHANGELOG`);\n console.log(` # Run 'pnpm install' from monorepo root if needed`);\n console.log(` pnpm build`);\n console.log(` pnpm dev`);\n } else {\n console.log(` cd ${targetDir}`);\n console.log(` pnpm build`);\n console.log(` pnpm dev`);\n }\n console.log(` NOTE: please check .env.local file and set your own env!`);\n } catch (error) {\n console.error('Failed to create project:', error);\n process.exit(1);\n } finally {\n // cleanup temp dir\n try {\n await remove(tempDir);\n } catch (cleanupError) {\n console.warn('Failed to cleanup temporary directory:', tempDir);\n }\n }\n} ","#!/usr/bin/env node\n\nimport { program } from 'commander'\nimport { loadConfig, validateConfig } from '@dev-scripts/config'\nimport { checkTranslations } from '@dev-scripts/commands/check-translations'\nimport { cleanTranslations } from '@dev-scripts/commands/clean-translations'\nimport { generateBlogIndex } from '@dev-scripts/commands/generate-blog-index'\nimport { deepClean } from '@dev-scripts/commands/deep-clean'\nimport { easyChangeset } from '@dev-scripts/commands/easy-changeset'\nimport { generateNextjsArchitecture } from '@dev-scripts/commands/generate-nextjs-architecture'\nimport { createDiaomaoApp } from '@dev-scripts/commands/create-diaomao-app';\n\n// get current working directory, ensure it works in Node.js environment\nconst cwd = typeof process !== 'undefined' ? process.cwd() : '.'\n\nprogram\n .name('dev-scripts')\n .description('development scripts for multi-language projects')\n .version('5.0.0')\n\nprogram\n .command('check-translations')\n .description('check the completeness and consistency of translation files')\n .option('-v, --verbose', 'show detailed logs', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n \n // apply verbose option after loading\n if (options.verbose) {\n config.output.verbose = true\n }\n \n validateConfig(config)\n \n const exitCode = await checkTranslations(config, cwd)\n \n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('clean-translations')\n .description('clean unused translation keys')\n .option('-v, --verbose', 'show detailed logs', false)\n .option('--remove', 'actually delete unused keys (default only show)', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n \n // apply verbose option after loading\n if (options.verbose) {\n config.output.verbose = true\n }\n \n validateConfig(config)\n \n const exitCode = await cleanTranslations(config, options.remove, cwd)\n \n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('generate-blog-index')\n .description('generate blog index file')\n .option('-v, --verbose', 'show detailed logs', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n \n // apply verbose option after loading\n if (options.verbose) {\n config.output.verbose = true\n }\n \n validateConfig(config)\n \n const exitCode = await generateBlogIndex(config, cwd)\n \n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('deep-clean')\n .description('clean all node_modules, dist, .next, .turbo and related caches in monorepo')\n .option('--yes', 'actually delete matched directories (default only preview)', false)\n .option('-v, --verbose', 'show detailed logs', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n if (options.verbose) {\n config.output.verbose = true\n }\n validateConfig(config)\n const exitCode = await deepClean(config, options.yes, cwd)\n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('easy-changeset')\n .description('copy .changeset/d8-template.mdx to .changeset/d8-template.md if both exist')\n .action(async () => {\n try {\n const exitCode = await easyChangeset(cwd)\n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('generate-nextjs-architecture')\n .description('generate nextjs-architecture.mdx for project structure')\n .option('-v, --verbose', 'show detailed logs', false)\n .action(async (options) => {\n try {\n const config = loadConfig(cwd, {}, options.verbose)\n if (options.verbose) {\n config.output.verbose = true\n }\n validateConfig(config)\n const exitCode = await generateNextjsArchitecture(config, cwd)\n if (typeof process !== 'undefined') {\n process.exit(exitCode)\n }\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\nprogram\n .command('create-diaomao-app <project-name>')\n .description('create a new diaomao app from template')\n .action(async (projectName) => {\n try {\n await createDiaomaoApp(projectName)\n } catch (error) {\n console.error('Error:', error)\n if (typeof process !== 'undefined') {\n process.exit(1)\n }\n }\n })\n\n// parse command line arguments\nif (typeof process !== 'undefined') {\n program.parse(process.argv)\n} "]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windrun-huaiin/dev-scripts",
3
- "version": "6.6.1",
3
+ "version": "6.7.0",
4
4
  "description": "Development scripts for multilingual projects",
5
5
  "main": "dist/index.js",
6
6
  "bin": {