@windrun-huaiin/dev-scripts 6.6.0 → 6.6.1

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.js CHANGED
@@ -1218,10 +1218,55 @@ async function createDiaomaoApp(targetDir) {
1218
1218
  child_process.execSync(`tar -xzf ${packageFile}`, { cwd: tempDir });
1219
1219
  const templateDir = path2__default.default.join(tempDir, "package");
1220
1220
  await fsExtra.copy(templateDir, destDir, { overwrite: true });
1221
+ const envTxtPath = path2__default.default.join(destDir, ".env.local.txt");
1222
+ const envPath = path2__default.default.join(destDir, ".env.local");
1223
+ if (await fsExtra.pathExists(envTxtPath)) {
1224
+ await fsExtra.rename(envTxtPath, envPath);
1225
+ console.log("Renamed .env.local.txt to .env.local");
1226
+ }
1221
1227
  const pkgPath = path2__default.default.join(destDir, "package.json");
1222
1228
  const pkg = await fsExtra.readJson(pkgPath);
1223
1229
  pkg.name = path2__default.default.basename(targetDir);
1230
+ pkg.version = "1.0.0";
1224
1231
  pkg.private = true;
1232
+ pkg.pnpm = {
1233
+ "onlyBuiltDependencies": [
1234
+ "@clerk/shared",
1235
+ "@parcel/watcher",
1236
+ "@tailwindcss/oxide",
1237
+ "core-js",
1238
+ "esbuild",
1239
+ "sharp",
1240
+ "unrs-resolver"
1241
+ ],
1242
+ "overrides": {
1243
+ "@types/react": "19.1.2",
1244
+ "@types/react-dom": "19.1.3"
1245
+ },
1246
+ "patchedDependencies": {
1247
+ "fumadocs-ui@15.3.3": "patches/fumadocs-ui@15.3.3.patch"
1248
+ }
1249
+ };
1250
+ pkg.scripts = {
1251
+ "postinstall": "fumadocs-mdx",
1252
+ "predev": "pnpm run lint",
1253
+ "dev": "next dev --turbopack",
1254
+ "build": "pnpm generate-blog-index && next build",
1255
+ "build:dev": "pnpm generate-blog-index && next build",
1256
+ "build:prod": "next build",
1257
+ "start": "next start",
1258
+ "lint": "next lint",
1259
+ "deep-clean": "dev-scripts deep-clean",
1260
+ "d8": "pnpm run deep-clean",
1261
+ "easy-changeset": "dev-scripts easy-changeset",
1262
+ "dj": "pnpm run easy-changeset && pnpm changeset status",
1263
+ "djv": "pnpm changeset version",
1264
+ "generate-blog-index": "dev-scripts generate-blog-index -v",
1265
+ "check-translations": "dev-scripts check-translations -v",
1266
+ "clean-translations": "dev-scripts clean-translations -v",
1267
+ "remove-translations": "dev-scripts clean-translations --remove -v",
1268
+ "whoareyou": "dev-scripts generate-nextjs-architecture -v"
1269
+ };
1225
1270
  delete pkg.publishConfig;
1226
1271
  delete pkg.files;
1227
1272
  await fsExtra.writeJson(pkgPath, pkg, { spaces: 2 });
@@ -1250,6 +1295,7 @@ async function createDiaomaoApp(targetDir) {
1250
1295
  Next steps:`);
1251
1296
  console.log(` cd ${targetDir}`);
1252
1297
  console.log(` pnpm dev`);
1298
+ console.log(` NOTE: please check .env.local file and set your own env!`);
1253
1299
  } catch (error) {
1254
1300
  console.error("Failed to create project:", error);
1255
1301
  process.exit(1);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/schema.ts","../src/config/index.ts","../src/utils/logger.ts","../src/utils/file-scanner.ts","../src/utils/translation-parser.ts","../src/commands/check-translations.ts","../src/commands/clean-translations.ts","../src/commands/generate-blog-index.ts","../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","path","fs","join","dirname","mkdirSync","writeFileSync","fg","readFileSync","match","readdirSync","resolve","existsSync","statSync","unlinkSync","rmSync","getCurrentDateString","renderTree","mdx","execSync","os","ensureDir","copy","readJson","writeJson","remove","program"],"mappings":"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","file":"cli.js","sourcesContent":["export interface DevScriptsConfig {\n // i18n config\n i18n: {\n locales: string[]\n defaultLocale: string\n messageRoot: string\n }\n \n // scan config\n scan: {\n include: string[]\n exclude?: string[]\n baseDir?: string\n }\n \n // blog config\n blog?: {\n mdxDir: string\n outputFile?: string\n metaFile?: string\n iocSlug?: string\n prefix?: string\n }\n \n // output config\n output: {\n logDir: string\n verbose?: boolean\n }\n\n // architecture anotion config\n architectureConfig?: Record<string, string>\n}\n\nexport interface PackageJsonDevScripts {\n locales?: string[]\n defaultLocale?: string\n messageRoot?: string\n scanDirs?: string[]\n blogDir?: string\n logDir?: string\n}\n\nexport const DEFAULT_CONFIG: DevScriptsConfig = {\n i18n: {\n locales: ['en', 'zh'],\n defaultLocale: 'en',\n messageRoot: 'messages'\n },\n scan: {\n include: ['src/**/*.{tsx,ts,jsx,js}'],\n exclude: ['src/**/*.d.ts', 'src/**/*.test.ts', 'src/**/*.test.tsx', 'node_modules/**']\n },\n blog: {\n mdxDir: 'src/mdx/blog',\n outputFile: 'index.mdx',\n metaFile: 'meta.json',\n iocSlug: 'ioc',\n prefix: 'blog'\n },\n output: {\n logDir: 'logs',\n verbose: false\n },\n architectureConfig: {\n \".\": \"锹目根目录\",\n \".env.local\": \"ęœ¬åœ°ēŽÆå¢ƒå˜é‡é…ē½®\",\n \".eslintrc.json\": \"ESLint ä»£ē č§„čŒƒé…ē½®\",\n \".gitignore\": \"Gitåæ½ē•„ę–‡ä»¶é…ē½®\",\n \".source\": \"Fumaę•°ę®ęŗBuild产物\",\n \"CHANGELOG.md\": \"å˜ę›“č®°å½•\",\n \"components.json\": \"ē»„ä»¶ä¾čµ–ęø…å•\",\n \"dev-scripts.config.json\": \"dev-scriptsč„šęœ¬å·„å…·é…ē½®\",\n \"LICENSE\": \"å¼€ęŗč®øåÆčÆ\",\n \"messages\": \"翻译目录\",\n \"next-env.d.ts\": \"Next.jsēŽÆå¢ƒē±»åž‹å£°ę˜Ž\",\n \"next.config.ts\": \"Next.jsé”¹ē›®é…ē½®\",\n \"package.json\": \"é”¹ē›®ä¾čµ–äøŽč„šęœ¬\",\n \"postcss.config.mjs\": \"PostCSS é…ē½®\",\n \"source.config.ts\": \"Fumaę•°ę®ęŗę‰«ęé…ē½®\",\n \"src\": \"源码目录\",\n \"tsconfig.json\": \"TypeScripté…ē½®\",\n \"tsconfig.node.json\": \"Node.js相关TypeScript é…ē½®\",\n \"logs\": \"旄志输出目录\",\n \"apps\": \"Monorepoå¤šåŗ”ē”Øē›®å½•\",\n \"packages\": \"子巄程组件库目录\",\n \"README.md\": \"é”¹ē›®čÆ“ę˜Žę–‡ę”£\",\n \"app\": \"Next.js åŗ”ē”Øäø»å…„å£ē›®å½•\",\n \"components\": \"é”µé¢ē»„ä»¶\",\n \"lib\": \"巄具包\",\n \"mdx\": \"FumaMDX文攣\",\n \"middleware.ts\": \"äø­é—“ä»¶å…„å£\",\n \"i18n.ts\": \"å¤ščÆ­čØ€é…ē½®\",\n \"globals.css\": \"å…Øå±€ę ·å¼\",\n \"layout.config.tsx\": \"åøƒå±€é…ē½®\",\n \"layout.tsx\": \"åøƒå±€\",\n \"loading.tsx\": \"å…Øå±€åŠ č½½ē»„ä»¶\",\n \"hero.tsx\": \"首锵大字组件\",\n \"mdx-components.tsx\": \"FumaMDX组件库(č‡Ŗå®šä¹‰)\",\n \"llm-content\": \"FumaMDXå¤åˆ¶ęŽ„å£\",\n \"[locale]\": \"Nextjs i18n路由目录\",\n \"(clerk)\": \"Clerk认证\",\n \"(home)\": \"首锵\",\n \"[...catchAll]\": \"å…Øå±€404锵面\",\n \"blog\": \"博客\",\n \"docs\": \"文攣\",\n \"legal\": \"法律\",\n \"api\": \"APIęŽ„å£\",\n \"robots.ts\": \"robots.txtē”Ÿęˆč„šęœ¬\",\n \"sitemap.ts\": \"ē½‘ē«™åœ°å›¾\",\n \"appConfig.ts\": \"åŗ”ē”Øå…Øå±€é…ē½®\",\n \"site-config.ts\": \"ē½‘ē«™å›¾ę ‡é…ē½®\",\n \"ioc.mdx\": \"月度/统讔\",\n \"meta.json\": \"FumaMDXå…ƒę•°ę®\",\n \"nextjs-architecture.mdx\": \"Next.jsé”¹ē›®ē»“ęž„\",\n \".github\": \"GitHub é…ē½®ē›®å½•\",\n \"workflows\": \"CI/CD å·„ä½œęµé…ē½®\"\n }\n} ","import fs from 'fs'\nimport path from 'path'\nimport { DEFAULT_CONFIG, DevScriptsConfig, PackageJsonDevScripts } from '@dev-scripts/config/schema'\n\n/**\n * load config from package.json\n */\nfunction loadPackageJsonConfig(cwd: string): Partial<DevScriptsConfig> | null {\n try {\n const packageJsonPath = path.join(cwd, 'package.json')\n if (!fs.existsSync(packageJsonPath)) return null\n \n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))\n const devScripts: PackageJsonDevScripts = packageJson.devScripts\n \n // only return config if devScripts field actually exists\n if (!devScripts || Object.keys(devScripts).length === 0) {\n return null\n }\n \n // convert to standard config format\n const config: Partial<DevScriptsConfig> = {}\n \n if (devScripts.locales || devScripts.defaultLocale || devScripts.messageRoot) {\n config.i18n = {\n locales: devScripts.locales || DEFAULT_CONFIG.i18n.locales,\n defaultLocale: devScripts.defaultLocale || DEFAULT_CONFIG.i18n.defaultLocale,\n messageRoot: devScripts.messageRoot || DEFAULT_CONFIG.i18n.messageRoot\n }\n }\n \n if (devScripts.scanDirs) {\n config.scan = {\n include: devScripts.scanDirs,\n exclude: DEFAULT_CONFIG.scan.exclude\n }\n }\n \n if (devScripts.blogDir) {\n config.blog = {\n mdxDir: devScripts.blogDir,\n ...DEFAULT_CONFIG.blog\n }\n }\n \n if (devScripts.logDir) {\n config.output = {\n logDir: devScripts.logDir,\n verbose: DEFAULT_CONFIG.output.verbose\n }\n }\n \n return Object.keys(config).length > 0 ? config : null\n } catch (error) {\n console.warn(`Warning: Failed to load package.json config: ${error}`)\n return null\n }\n}\n\n/**\n * load config from dev-scripts.config.json file\n */\nfunction loadConfigFile(cwd: string): Partial<DevScriptsConfig> | null {\n try {\n const configPath = path.join(cwd, 'dev-scripts.config.json')\n if (!fs.existsSync(configPath)) {\n return null\n }\n \n return JSON.parse(fs.readFileSync(configPath, 'utf8'))\n } catch (error) {\n console.warn(`Warning: Failed to load dev-scripts.config.json: ${error}`)\n return null\n }\n}\n\n/**\n * deep merge config object\n */\nfunction mergeConfig(base: DevScriptsConfig, override: Partial<DevScriptsConfig>): DevScriptsConfig {\n const result = { ...base }\n \n for (const [key, value] of Object.entries(override)) {\n if (value !== undefined && value !== null) {\n if (typeof value === 'object' && !Array.isArray(value) && typeof result[key as keyof DevScriptsConfig] === 'object') {\n ;(result as any)[key] = { ...(result as any)[key], ...value }\n } else {\n ;(result as any)[key] = value\n }\n }\n }\n \n return result\n}\n\n/**\n * load full config\n */\nexport function loadConfig(cwd: string = typeof process !== 'undefined' ? process.cwd() : '.', override: Partial<DevScriptsConfig> = {}, verbose?: boolean): DevScriptsConfig {\n let config = { ...DEFAULT_CONFIG }\n const configSources: string[] = []\n \n // 1. load dev-scripts.config.json\n const fileConfig = loadConfigFile(cwd)\n if (fileConfig) {\n config = mergeConfig(config, fileConfig)\n configSources.push('dev-scripts.config.json')\n }\n \n // 2. load package.json config\n const packageConfig = loadPackageJsonConfig(cwd)\n if (packageConfig) {\n config = mergeConfig(config, packageConfig)\n configSources.push('package.json')\n }\n \n // 3. apply any override config\n config = mergeConfig(config, override)\n if (Object.keys(override).length > 0) {\n configSources.push('runtime override')\n }\n \n // 4. print config info in verbose mode\n const shouldPrintConfig = verbose !== undefined ? verbose : config.output.verbose\n if (shouldPrintConfig) {\n // temporarily set verbose for printing\n const configForPrint = { ...config }\n configForPrint.output = { ...config.output, verbose: true }\n printConfigInfo(configForPrint, configSources, cwd)\n }\n \n return config\n}\n\n/**\n * print config information in verbose mode\n */\nfunction printConfigInfo(config: DevScriptsConfig, sources: string[], cwd: string): void {\n console.log('\\nšŸ“‹ Config Information:')\n console.log(` working directory: ${cwd}`)\n console.log(` config sources: ${sources.length > 0 ? sources.join(' + ') : 'default config'}`)\n \n console.log('\\n🌐 i18n:')\n console.log(` locales: [${config.i18n.locales.join(', ')}]`)\n console.log(` defaultLocale: ${config.i18n.defaultLocale}`)\n console.log(` messageRoot: ${config.i18n.messageRoot}`)\n \n console.log('\\nšŸ” scan:')\n console.log(` include: [${config.scan.include.join(', ')}]`)\n if (config.scan.exclude && config.scan.exclude.length > 0) {\n console.log(` exclude: [${config.scan.exclude.join(', ')}]`)\n }\n if (config.scan.baseDir) {\n console.log(` baseDir: ${config.scan.baseDir}`)\n }\n \n if (config.blog) {\n console.log('\\nšŸ“ blog:')\n console.log(` mdxDir: ${config.blog.mdxDir}`)\n console.log(` outputFile: ${config.blog.outputFile || 'index.mdx (default)'}`)\n console.log(` metaFile: ${config.blog.metaFile || 'meta.json (default)'}`)\n if (config.blog.iocSlug) {\n console.log(` iocSlug: ${config.blog.iocSlug}`)\n }\n if (config.blog.prefix) {\n console.log(` prefix: ${config.blog.prefix}`)\n }\n }\n \n console.log('\\nšŸ“¤ output:')\n console.log(` logDir: ${config.output.logDir}`)\n console.log(` verbose: ${config.output.verbose}`)\n console.log('')\n}\n\n/**\n * validate config\n */\nexport function validateConfig(config: DevScriptsConfig): void {\n if (!config.i18n.locales || config.i18n.locales.length === 0) {\n throw new Error('at least one language is required')\n }\n \n if (!config.i18n.locales.includes(config.i18n.defaultLocale)) {\n throw new Error('default language must be in the supported language list')\n }\n \n if (config.scan.include.length === 0) {\n throw new Error('at least one scan path is required')\n }\n} ","import { writeFileSync, mkdirSync } from 'fs'\nimport { join, dirname } from 'path'\nimport { DevScriptsConfig } from '@dev-scripts/config/schema'\n\nexport class Logger {\n private messages: string[] = []\n private config: DevScriptsConfig\n \n constructor(config: DevScriptsConfig) {\n this.config = config\n }\n \n log(message: string): void {\n if (this.config.output.verbose) {\n console.log(message)\n }\n this.messages.push(message)\n }\n \n error(message: string): void {\n console.error(message)\n this.messages.push('[ERROR] ' + message)\n }\n \n warn(message: string): void {\n console.warn(message)\n this.messages.push('[WARN] ' + message)\n }\n \n info(message: string): void {\n console.info(message)\n this.messages.push('[INFO] ' + message)\n }\n \n success(message: string): void {\n console.log(`āœ… ${message}`)\n this.messages.push(`[SUCCESS] ${message}`)\n }\n \n /**\n * save log to file\n */\n saveToFile(filename: string, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): void {\n try {\n const logFilePath = join(cwd, this.config.output.logDir, filename)\n const logDir = dirname(logFilePath)\n \n // create log directory if it doesn't exist\n mkdirSync(logDir, { recursive: true })\n \n writeFileSync(logFilePath, this.messages.join('\\n'), 'utf8')\n console.log(`log saved to ${logFilePath}`)\n } catch (error) {\n console.error(`failed to save log file: ${error}`)\n }\n }\n \n /**\n * clear log messages\n */\n clear(): void {\n this.messages = []\n }\n \n /**\n * get all log messages\n */\n getMessages(): string[] {\n return [...this.messages]\n }\n} ","import fg from 'fast-glob'\nimport { readFileSync } from 'fs'\nimport { DevScriptsConfig } from '@dev-scripts/config/schema'\n\nexport interface ScanResult {\n filePath: string\n content: string\n}\n\n/**\n * scan matching files\n */\nexport async function scanFiles(config: DevScriptsConfig, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): Promise<ScanResult[]> {\n const files: string[] = await fg(config.scan.include, {\n ignore: config.scan.exclude || [],\n cwd,\n absolute: false\n })\n\n const results: ScanResult[] = []\n \n for (const file of files) {\n try {\n const content = readFileSync(file, 'utf8')\n results.push({\n filePath: file,\n content\n })\n } catch (error) {\n console.warn(`Warning: Failed to read file ${file}: ${error}`)\n }\n }\n\n return results\n}\n\n/**\n * read JSON file from given path\n */\nexport function readJsonFile<T = any>(filePath: string): T | null {\n try {\n const content = readFileSync(filePath, 'utf8')\n return JSON.parse(content)\n } catch (error) {\n return null\n }\n}\n\n/**\n * get translation file path\n */\nexport function getTranslationFilePath(locale: string, config: DevScriptsConfig, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): string {\n return `${cwd}/${config.i18n.messageRoot}/${locale}.json`\n}\n\n/**\n * load all translation files\n */\nexport function loadTranslations(config: DevScriptsConfig, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): Record<string, Record<string, any>> {\n const translations: Record<string, Record<string, any>> = {}\n \n for (const locale of config.i18n.locales) {\n const filePath = getTranslationFilePath(locale, config, cwd)\n const translation = readJsonFile(filePath)\n \n if (translation) {\n translations[locale] = translation\n } else {\n console.warn(`Warning: Failed to load translation file for locale: ${locale}`)\n translations[locale] = {}\n }\n }\n \n return translations\n} ","// translation info interface\nexport interface TranslationInfo {\n namespaces: Map<string, string> // variable name -> namespace\n keys: string[] // full translation key path\n}\n\n/**\n * extract translation keys and namespaces from file content\n */\nexport function extractTranslationsInfo(content: string, filePath: string): TranslationInfo {\n const result: TranslationInfo = {\n namespaces: new Map<string, string>(),\n keys: []\n }\n\n // match getTranslations({ locale, namespace: 'namespace' }) or getTranslations('namespace')\n const getTranslationsPattern = /getTranslations\\(\\s*(?:{[^}]*namespace:\\s*['\"]([^'\"]+)['\"][^}]*}|['\"]([^'\"]+)['\"])\\s*\\)/g\n let match: RegExpExecArray | null\n\n while ((match = getTranslationsPattern.exec(content)) !== null) {\n const namespace = match[1] || match[2]\n if (namespace) {\n // try to find assignment statement, like const t = await getTranslations(...)\n // find the nearest const declaration\n const linesBefore = content.substring(0, match.index).split('\\n');\n for (let i = linesBefore.length - 1; i >= Math.max(0, linesBefore.length - 5); i--) {\n const line = linesBefore[i];\n const constMatch = /const\\s+(\\w+)\\s*=/.exec(line);\n if (constMatch && !line.includes('useTranslations') && !line.includes('getTranslations')) {\n result.namespaces.set(constMatch[1], namespace);\n break;\n }\n }\n }\n }\n\n // match useTranslations('namespace')\n const useTranslationsPattern = /useTranslations\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g\n while ((match = useTranslationsPattern.exec(content)) !== null) {\n const namespace = match[1]\n\n // try to find assignment statement, like const t = useTranslations(...)\n // find the line containing useTranslations\n const currentLine = content.substring(0, match.index).split('\\n').pop() || '';\n const constMatch = /const\\s+(\\w+)\\s*=/.exec(currentLine);\n if (constMatch) {\n result.namespaces.set(constMatch[1], namespace);\n }\n }\n\n // match t('key') or t(\"key\"), and check if t is associated with known namespaces\n // modify the matching pattern of t function call\n const tPatterns = [\n // normal string key: t('key') or t(\"key\")\n /(\\w+)\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n // template string key: t(`tags.${id}`) or t(`section.${key}`)\n /(\\w+)\\(\\s*`([^`]+)`\\s*\\)/g,\n // variable key: t(item.key) or t(item.id)\n /(\\w+)\\(\\s*(\\w+)\\.(\\w+)\\s*\\)/g\n ];\n\n for (const pattern of tPatterns) {\n let match;\n while ((match = pattern.exec(content)) !== null) {\n const funcName = match[1];\n\n // if the function name is associated with known namespaces\n if (result.namespaces.has(funcName)) {\n const namespace = result.namespaces.get(funcName);\n if (!namespace) continue;\n\n if (pattern.source.includes('`')) {\n // handle template string\n const templateStr = match[2];\n // extract static part (the part before the variable)\n const staticPart = templateStr.split(/\\${(?:id|key)}/)[0].trim();\n if (staticPart && !staticPart.includes('/')) {\n // for tags.${id}čæ™ę ·ēš„å½¢å¼ļ¼Œč®°å½•ę•“äøŖ tags å‘½åē©ŗé—“\n const segments = staticPart.split('.');\n if (segments.length > 0) {\n // record the base path\n result.keys.push(`${namespace}.${segments[0]}`);\n // if it is multi-level, also record the full path\n if (segments.length > 1) {\n result.keys.push(`${namespace}.${segments.join('.')}`);\n }\n\n // special handling for tags namespace\n if (segments[0] === 'tags') {\n // add all known tag keys\n ['productUpdates', 'tutorials', 'makeMoney', 'roadOverSea', 'insights'].forEach(tag => {\n result.keys.push(`${namespace}.tags.${tag}`);\n });\n }\n }\n }\n } else if (pattern.source.includes('\\\\w+\\\\.\\\\w+')) {\n // handle variable key t(item.key)\n const varName = match[2];\n const propName = match[3];\n\n // find the possible value of the variable in the file content\n const varPattern = new RegExp(`${varName}\\\\s*=\\\\s*{[^}]*key:\\\\s*['\"]([^'\"]+)['\"]`);\n const varMatch = content.match(varPattern);\n\n if (varMatch) {\n // if the variable definition is found, add the actual key\n result.keys.push(`${namespace}.${varMatch[1]}`);\n } else {\n // if the specific definition is not found, try to infer from the context\n // check if it is used in an array or object of MenuItem type\n if (content.includes('MenuItem[]') || content.includes('MenuItem}')) {\n // add all possible menu keys\n ['journey'].forEach(menuKey => {\n result.keys.push(`${namespace}.${menuKey}`);\n });\n }\n }\n } else {\n // handle normal string key\n const key = match[2];\n if (!key.includes('/') && key !== '') {\n result.keys.push(`${namespace}.${key}`);\n }\n }\n }\n }\n }\n\n // match <FormattedMessage id=\"key\" />\n const formattedMessagePattern = /<FormattedMessage[^>]*id=['\"]([^'\"]+)['\"]/g\n while ((match = formattedMessagePattern.exec(content)) !== null) {\n const key = match[1]\n if (!key.includes('/') && key !== '') {\n // for FormattedMessage, we need to guess the namespace\n // usually we can find useTranslations call in the same file\n if (result.namespaces.size > 0) {\n const namespace = Array.from(result.namespaces.values())[0]\n result.keys.push(`${namespace}.${key}`)\n } else {\n // if the namespace is not found, try to infer from the file path\n const pathMatch = filePath.match(/\\[locale\\]\\/(?:\\([^)]+\\)\\/)?([^/]+)/)\n if (pathMatch && pathMatch[1]) {\n const possibleNamespace = pathMatch[1]\n result.keys.push(`${possibleNamespace}.${key}`)\n }\n }\n }\n }\n\n return result\n}\n\n/**\n * get all keys from an object (including nested keys)\n */\nexport function getAllKeys(obj: Record<string, any>, prefix: string = ''): string[] {\n let keys: string[] = []\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const newKey = prefix ? `${prefix}.${key}` : key\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n keys = [...keys, ...getAllKeys(obj[key], newKey)]\n } else {\n keys.push(newKey)\n }\n }\n }\n return keys\n}\n\n/**\n * check if the key exists in the translation file\n */\nexport function checkKeyExists(key: string, translations: Record<string, any>): boolean {\n const parts = key.split('.')\n let current: any = translations\n\n for (const part of parts) {\n if (current[part] === undefined) {\n return false\n }\n current = current[part]\n }\n\n return true\n}\n\n/**\n * check if the namespace exists in the translation file\n */\nexport function checkNamespaceExists(namespace: string, translations: Record<string, any>): boolean {\n return translations[namespace] !== undefined\n}\n\n/**\n * remove the specified key from the translation object\n */\nexport function removeKeyFromTranslations(key: string, translations: Record<string, any>): boolean {\n const parts = key.split('.')\n const lastPart = parts.pop()\n\n if (!lastPart) return false\n\n let current = translations\n\n // navigate to the parent object of the last level\n for (const part of parts) {\n if (current[part] === undefined || typeof current[part] !== 'object') {\n return false\n }\n current = current[part]\n }\n\n // delete the key\n if (current[lastPart] !== undefined) {\n delete current[lastPart]\n return true\n }\n\n return false\n}\n\n/**\n * clean empty objects (recursively)\n */\nexport function cleanEmptyObjects(obj: Record<string, any>): Record<string, any> {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n obj[key] = cleanEmptyObjects(obj[key])\n // if the object is empty, delete it\n if (Object.keys(obj[key]).length === 0) {\n delete obj[key]\n }\n }\n }\n }\n return obj\n} ","import { DevScriptsConfig } from '@dev-scripts/config/schema'\nimport { Logger } from '@dev-scripts/utils/logger'\nimport { scanFiles, loadTranslations } from '@dev-scripts/utils/file-scanner'\nimport { \n extractTranslationsInfo, \n getAllKeys, \n checkKeyExists, \n checkNamespaceExists \n} from '@dev-scripts/utils/translation-parser'\n\ninterface TranslationReport {\n [key: string]: string[]\n}\n\nexport async function checkTranslations(config: DevScriptsConfig, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): Promise<number> {\n const logger = new Logger(config)\n logger.warn('==============================')\n logger.warn(`ā€¼ļø Current working directory: ā­• ${cwd} ā­•`)\n logger.warn('==============================')\n \n try {\n logger.log('start checking translations...')\n\n // scan all files\n const scanResults = await scanFiles(config, cwd)\n logger.log(`found ${scanResults.length} files to scan`)\n\n // load translation files\n const translations = loadTranslations(config, cwd)\n\n // collect used translation keys and namespaces\n const foundTranslationKeys: Set<string> = new Set()\n const foundNamespaces: Set<string> = new Set()\n\n // scan all files, extract translation information\n for (const { filePath, content } of scanResults) {\n try {\n const { namespaces, keys } = extractTranslationsInfo(content, filePath)\n\n if (keys.length > 0 || namespaces.size > 0) {\n logger.log(`found the following information in the file ${filePath}:`)\n\n if (namespaces.size > 0) {\n logger.log(` translation function mapping:`)\n namespaces.forEach((namespace, varName) => {\n logger.log(` - ${varName} => ${namespace}`)\n foundNamespaces.add(namespace)\n })\n }\n\n if (keys.length > 0) {\n logger.log(` translation keys:`)\n keys.forEach(key => {\n logger.log(` - ${key}`)\n foundTranslationKeys.add(key)\n })\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n logger.error(`error processing file ${filePath}: ${error.message}`)\n } else {\n logger.error(`error processing file ${filePath}: unknown error`)\n }\n }\n }\n\n logger.log(`\\nfound ${foundNamespaces.size} used namespaces in the code: ${Array.from(foundNamespaces).join(', ')}`)\n\n // check results\n const report: TranslationReport = {}\n\n // check if the namespace exists\n foundNamespaces.forEach(namespace => {\n config.i18n.locales.forEach(locale => {\n const missingNamespaceKey = `missingNamespacesIn${locale.toUpperCase()}`\n if (!checkNamespaceExists(namespace, translations[locale])) {\n report[missingNamespaceKey] = report[missingNamespaceKey] || []\n report[missingNamespaceKey].push(namespace)\n }\n })\n })\n\n // check if the translation key exists\n foundTranslationKeys.forEach(key => {\n config.i18n.locales.forEach(locale => {\n const missingKey = `missingIn${locale.toUpperCase()}`\n if (!checkKeyExists(key, translations[locale])) {\n report[missingKey] = report[missingKey] || []\n report[missingKey].push(key)\n }\n })\n })\n\n // check if the translation keys are consistent\n config.i18n.locales.forEach(locale => {\n const allKeys = getAllKeys(translations[locale])\n config.i18n.locales.forEach(otherLocale => {\n if (locale !== otherLocale) {\n const otherKeys = getAllKeys(translations[otherLocale])\n const onlyKeys = `${locale}OnlyKeys`\n report[onlyKeys] = allKeys.filter(key => !otherKeys.includes(key))\n }\n })\n })\n\n // generate report\n logger.log('\\n=== translation check report ===\\n')\n\n // first report missing namespaces, which is usually the most serious problem\n config.i18n.locales.forEach(locale => {\n const missingNamespaceKey = `missingNamespacesIn${locale.toUpperCase()}`\n if (report[missingNamespaceKey]?.length > 0) {\n logger.log(`🚨 missing namespaces in the ${locale} translation file:`)\n report[missingNamespaceKey].forEach(namespace => logger.log(` - ${namespace}`))\n } else {\n logger.success(`${locale} translation file has all used namespaces`)\n }\n })\n\n // then report missing translation keys\n config.i18n.locales.forEach(locale => {\n const missingKey = `missingIn${locale.toUpperCase()}`\n if (report[missingKey]?.length > 0) {\n logger.log(`\\nšŸ”“ missing keys in the ${locale} translation file:`)\n report[missingKey].forEach(key => logger.log(` - ${key}`))\n } else {\n logger.success(`${locale} translation file has all used keys`)\n }\n })\n\n // finally report inconsistent keys\n config.i18n.locales.forEach(locale => {\n const onlyKeys = `${locale}OnlyKeys`\n if (report[onlyKeys]?.length > 0) {\n logger.log(`\\nāš ļø keys only exist in the ${locale} translation file:`)\n report[onlyKeys].forEach(key => logger.log(` - ${key}`))\n }\n })\n\n logger.log('\\n=== report end ===\\n')\n logger.log(\"āš ļøāš ļøāš ļøscript depends on regular matching, for multiple translation namespaces in a single file, use naming to distinguish: t1 | t2 | t3 | ... āš ļøāš ļøāš ļø\")\n\n // save log file\n logger.saveToFile('check.log', cwd)\n\n // if there are any problems, return non-zero status code\n return Object.values(report).some(keys => keys.length > 0) ? 1 : 0\n\n } catch (error) { \n logger.error(`error checking translations: ${error}`)\n return 1\n }\n} ","import { DevScriptsConfig } from '@dev-scripts/config/schema'\nimport { getTranslationFilePath, loadTranslations, scanFiles } from '@dev-scripts/utils/file-scanner'\nimport { Logger } from '@dev-scripts/utils/logger'\nimport {\n cleanEmptyObjects,\n extractTranslationsInfo,\n getAllKeys,\n removeKeyFromTranslations\n} from '@dev-scripts/utils/translation-parser'\nimport { writeFileSync } from 'fs'\n\ninterface CleanReport {\n [key: string]: string[]\n}\n\nexport async function cleanTranslations(\n config: DevScriptsConfig, \n shouldRemove: boolean = false,\n cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'\n): Promise<number> {\n const logger = new Logger(config)\n const logFileName = shouldRemove ? 'remove.log' : 'clean.log'\n \n logger.warn('==============================')\n logger.warn(`ā€¼ļø Current working directory: ā­• ${cwd} ā­•`)\n logger.warn('==============================')\n \n try {\n logger.log('start checking unused translation keys...')\n\n // scan all files\n const scanResults = await scanFiles(config, cwd)\n logger.log(`ę‰¾åˆ° ${scanResults.length} äøŖę–‡ä»¶éœ€č¦ę‰«ę`)\n\n // load translation files\n const translations = loadTranslations(config, cwd)\n\n // collect used translation keys and namespaces\n const foundTranslationKeys: Set<string> = new Set()\n const foundNamespaces: Set<string> = new Set()\n\n // scan all files, collect used translation keys and namespaces\n for (const { filePath, content } of scanResults) {\n try {\n const { namespaces, keys } = extractTranslationsInfo(content, filePath)\n\n if (keys.length > 0 || namespaces.size > 0) {\n logger.log(`found the following information in the file ${filePath}:`)\n\n if (namespaces.size > 0) {\n logger.log(` translation function mapping:`)\n namespaces.forEach((namespace, varName) => {\n logger.log(` - ${varName} => ${namespace}`)\n foundNamespaces.add(namespace)\n })\n }\n\n if (keys.length > 0) {\n logger.log(` translation keys:`)\n keys.forEach(key => {\n logger.log(` - ${key}`)\n foundTranslationKeys.add(key)\n })\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n logger.error(`error processing file ${filePath}: ${error.message}`)\n } else {\n logger.error(`error processing file ${filePath}: unknown error`)\n }\n }\n }\n\n logger.log(`\\nfound ${foundTranslationKeys.size} used translation keys in the code`)\n logger.log(`found ${foundNamespaces.size} used namespaces in the code: ${Array.from(foundNamespaces).join(', ')}`)\n\n // check unused keys in each language file\n const unusedKeys: Record<string, string[]> = {}\n const removedKeys: Record<string, string[]> = {}\n const unusedNamespaces: Record<string, string[]> = {}\n\n config.i18n.locales.forEach(locale => {\n unusedKeys[locale] = []\n removedKeys[locale] = []\n unusedNamespaces[locale] = []\n\n // get all keys in the translation file\n const allTranslationKeys = getAllKeys(translations[locale])\n\n // get all namespaces (top-level keys) in the translation file\n const allNamespaces = Object.keys(translations[locale] || {})\n\n // find unused namespaces\n allNamespaces.forEach(namespace => {\n if (!foundNamespaces.has(namespace)) {\n unusedNamespaces[locale].push(namespace)\n }\n })\n\n // find unused keys\n allTranslationKeys.forEach(key => {\n if (!foundTranslationKeys.has(key)) {\n unusedKeys[locale].push(key)\n }\n })\n\n logger.log(`\\nfound ${unusedKeys[locale].length} unused keys in the ${locale} translation file`)\n logger.log(`found ${unusedNamespaces[locale].length} unused namespaces in the ${locale} translation file`)\n })\n\n if (shouldRemove) {\n logger.log('\\nstart deleting unused translation keys...')\n\n // delete unused keys in each language file\n config.i18n.locales.forEach(locale => {\n const translationsCopy = { ...translations[locale] }\n\n unusedKeys[locale].forEach(key => {\n if (removeKeyFromTranslations(key, translationsCopy)) {\n removedKeys[locale].push(key)\n }\n })\n\n // delete unused namespaces\n unusedNamespaces[locale].forEach(namespace => {\n if (translationsCopy[namespace] !== undefined) {\n delete translationsCopy[namespace]\n logger.log(`deleted unused namespace ${namespace} from the ${locale} translation file`)\n }\n })\n\n // clean empty objects\n const cleanedTranslations = cleanEmptyObjects(translationsCopy)\n\n // save updated translation file\n const filePath = getTranslationFilePath(locale, config, cwd)\n writeFileSync(filePath, JSON.stringify(cleanedTranslations, null, 2), 'utf8')\n\n logger.log(`deleted ${removedKeys[locale].length} unused keys from the ${locale} translation file`)\n })\n } else {\n logger.log('\\nTo delete unused keys, please run the script with the --remove parameter')\n }\n\n // generate report\n logger.log('\\n=== unused translation keys report ===\\n')\n\n config.i18n.locales.forEach(locale => {\n if (unusedNamespaces[locale].length > 0) {\n logger.log(`šŸ” unused namespaces in the ${locale} translation file:`)\n unusedNamespaces[locale].forEach(namespace => logger.log(` - ${namespace}`))\n } else {\n logger.success(`${locale} translation file has no unused namespaces`)\n }\n\n if (unusedKeys[locale].length > 0) {\n logger.log(`\\nšŸ” unused keys in the ${locale} translation file:`)\n unusedKeys[locale].forEach(key => logger.log(` - ${key}`))\n } else {\n logger.success(`${locale} translation file has no unused keys`)\n }\n\n if (shouldRemove && removedKeys[locale].length > 0) {\n logger.log(`\\nšŸ—‘ļø deleted keys from the ${locale} translation file:`)\n removedKeys[locale].forEach(key => logger.log(` - ${key}`))\n }\n })\n\n logger.log('\\n=== report end ===\\n')\n logger.log(\"āš ļøāš ļøāš ļøscript depends on regular matching, for multiple translation namespaces in a single file, use naming to distinguish: t1 | t2 | t3 | ... āš ļøāš ļøāš ļø\")\n\n // save log file\n logger.saveToFile(logFileName, cwd)\n\n // if there are any unused keys or namespaces, return non-zero status code\n return (Object.values(unusedKeys).some(keys => keys.length > 0) ||\n Object.values(unusedNamespaces).some(namespaces => namespaces.length > 0)) ? 1 : 0\n\n } catch (error) {\n logger.error(`error cleaning translations: ${error}`)\n return 1\n }\n} ","import { readFileSync, writeFileSync, readdirSync } from 'fs'\nimport { join } from 'path'\nimport { DevScriptsConfig } from '@dev-scripts/config/schema'\nimport { Logger } from '@dev-scripts/utils/logger'\nimport { readJsonFile } from '@dev-scripts/utils/file-scanner'\n\ninterface Frontmatter {\n title?: string\n description?: string\n icon?: string\n date?: string\n}\n\ninterface ProcessedArticle {\n slug: string\n title: string\n description?: string\n frontmatterIcon?: string\n date?: string\n}\n\ninterface MetaJson {\n pages: string[]\n}\n\nfunction parseFrontmatter(fileContent: string): Frontmatter {\n const frontmatter: Frontmatter = {}\n const match = fileContent.match(/^---([\\s\\S]*?)---/)\n if (match && match[1]) {\n const lines = match[1].trim().split('\\n')\n for (const line of lines) {\n const [key, ...valueParts] = line.split(':')\n if (key && valueParts.length > 0) {\n const value = valueParts.join(':').trim()\n if (key.trim() === 'title') frontmatter.title = value\n if (key.trim() === 'description') frontmatter.description = value\n if (key.trim() === 'icon') frontmatter.icon = value\n if (key.trim() === 'date') frontmatter.date = value\n }\n }\n }\n return frontmatter\n}\n\nfunction getIconComponentString(iconName?: string): string | undefined {\n if (!iconName) return undefined\n return `<${iconName} />`\n}\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\nfunction updateFrontmatterDate(frontmatter: string): string {\n const currentDate = getCurrentDateString()\n \n // Check if date field exists\n if (frontmatter.includes('date:')) {\n // Replace existing date\n return frontmatter.replace(/date:\\s*[^\\n]*/, `date: ${currentDate}`)\n } else {\n // Add date field before the closing ---\n return frontmatter.replace(/---$/, `date: ${currentDate}\\n---`)\n }\n}\n\nfunction getBlogPrefix(config: DevScriptsConfig): string {\n if (config.blog?.prefix === undefined || config.blog?.prefix === null) {\n return 'blog';\n } else if (typeof config.blog?.prefix === 'string' && config.blog?.prefix.trim() === '') {\n return '';\n } else {\n return String(config.blog.prefix).trim();\n }\n}\n\nasync function getAllBlogArticles(blogDir: string, cwd: string, logger: Logger): Promise<ProcessedArticle[]> {\n const articles: ProcessedArticle[] = []\n const blogPath = join(cwd, blogDir)\n \n try {\n const files = readdirSync(blogPath)\n for (const file of files) {\n if (file.endsWith('.mdx') && file !== 'index.mdx') {\n const slug = file.replace(/\\.mdx$/, '')\n const filePath = join(blogPath, file)\n try {\n const content = readFileSync(filePath, 'utf-8')\n const fm = parseFrontmatter(content)\n\n if (!fm.title) {\n logger.warn(`Article \"${file}\" is missing a title in its frontmatter. Skipping.`)\n continue\n }\n\n articles.push({\n slug,\n title: fm.title,\n description: fm.description,\n frontmatterIcon: fm.icon,\n date: fm.date,\n })\n } catch (readError) {\n logger.warn(`Could not read or parse frontmatter for \"${file}\": ${readError}`)\n }\n }\n }\n } catch (dirError) {\n logger.error(`Could not read blog directory: ${dirError}`)\n return []\n }\n return articles\n}\n\nexport async function generateBlogIndex(\n config: DevScriptsConfig,\n cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'\n): Promise<number> {\n const logger = new Logger(config)\n logger.warn('==============================')\n logger.warn(`ā€¼ļø Current working directory: ā­• ${cwd} ā­•`)\n logger.warn('==============================')\n try {\n if (!config.blog) {\n logger.error('Blog configuration is missing. Please configure blog settings.')\n return 1\n }\n\n logger.log('Starting to generate blog index...')\n\n const blogPath = join(cwd, config.blog.mdxDir)\n const indexFile = join(blogPath, config.blog.outputFile || 'index.mdx')\n const metaFile = join(blogPath, config.blog.metaFile || 'meta.json')\n const iocFile = join(blogPath, `${config.blog.iocSlug || 'ioc'}.mdx`)\n const iocSlug = config.blog.iocSlug || 'ioc'\n const blogPrefix = getBlogPrefix(config)\n\n let meta: MetaJson = { pages: [] }\n const metaContent = readJsonFile<MetaJson>(metaFile)\n if (metaContent) {\n meta = metaContent\n } else {\n logger.warn(`Could not read or parse ${metaFile}. No articles will be marked as featured.`)\n }\n \n // ē»Ÿäø€ęå–č¢«éšč—ēš„ slug\n const hiddenSlugs = new Set(\n meta.pages.filter(p => p.startsWith('!')).map(p => p.slice(1))\n )\n // ioc 相关处理\n const featuredSlugs = meta.pages\n .filter(p => !p.startsWith('!'))\n .map(p => p.endsWith('.mdx') ? p.slice(0, -4) : p)\n .filter(slug => slug !== 'index' && slug !== '...')\n logger.log(`Featured slugs (meta-config): ${featuredSlugs.join(', ')}`)\n\n const allArticles = await getAllBlogArticles(config.blog.mdxDir, cwd, logger)\n logger.log(`Found ${allArticles.length} all articles.`)\n\n // čæ‡ę»¤ę‰€ęœ‰č¢«éšč—ēš„ slug\n const visibleArticles = allArticles.filter(a => !hiddenSlugs.has(a.slug))\n\n // ioc article 处理\n const iocArticle = visibleArticles.find(a => a.slug === iocSlug)\n const filteredArticles = visibleArticles.filter(a => a.slug !== iocSlug)\n\n if (filteredArticles.length === 0 && featuredSlugs.length === 0) {\n logger.warn(\"No articles found or featured. The generated index might be empty or minimal.\")\n }\n\n const featuredArticles: ProcessedArticle[] = []\n const pastArticles: ProcessedArticle[] = []\n\n filteredArticles.forEach(article => {\n if (featuredSlugs.includes(article.slug)) {\n featuredArticles.push(article)\n } else {\n pastArticles.push(article)\n }\n })\n\n // Sort articles by date in descending order (newest first)\n const sortByDateDesc = (a: ProcessedArticle, b: ProcessedArticle) => {\n if (a.date && b.date) {\n return b.date.localeCompare(a.date) // Newest first\n }\n if (a.date) return -1 // Articles with date come before those without\n if (b.date) return 1 // Articles with date come before those without\n return 0 // Keep original order if both lack dates\n }\n\n featuredArticles.sort(sortByDateDesc)\n pastArticles.sort(sortByDateDesc)\n\n logger.log(`Found ${featuredArticles.length} featured articles (sorted by date).`)\n logger.log(`Found ${pastArticles.length} past articles (sorted by date).`)\n\n // Preserve existing frontmatter or use a default\n let currentFileFrontmatter = '---\\ntitle: Blog\\ndescription: Articles and thoughts about various topics.\\nicon: Rss\\n---'\n try {\n const currentIndexContent = readFileSync(indexFile, 'utf-8')\n const frontmatterMatch = currentIndexContent.match(/^---([\\s\\S]*?)---/)\n if (frontmatterMatch && frontmatterMatch[0]) {\n currentFileFrontmatter = frontmatterMatch[0]\n logger.log('Preserving existing frontmatter from index.mdx')\n }\n } catch (error) {\n logger.warn('Could not read existing index.mdx or parse its frontmatter. Using default frontmatter.')\n }\n\n // Update date field in frontmatter\n currentFileFrontmatter = updateFrontmatterDate(currentFileFrontmatter)\n\n let mdxContent = `${currentFileFrontmatter}\\n\\n`\n\n const createCard = (article: ProcessedArticle): string => {\n const iconString = getIconComponentString(article.frontmatterIcon)\n const iconProp = iconString ? `icon={${iconString}}` : ''\n \n // Escape only double quotes in title for JSX attribute\n const escapedTitle = (article.title || '').replace(/\"/g, '&quot;')\n\n // Content of the card - should be raw, as it might be MDX\n const cardContent = article.date || article.description || '' \n \n // Ensure there's a space before href if iconProp is present and not empty\n const finalIconProp = iconProp ? `${iconProp} ` : ''\n // refer path is /locale/blog, this is blog root dir, so here is blog/X, then you'll get /locale/blog/X\n const href = blogPrefix ? `${blogPrefix}/${article.slug}` : `${article.slug}`\n return ` <ZiaCard ${finalIconProp} href=\"${href}\" title=\"${escapedTitle}\">\\n ${cardContent}\\n </ZiaCard>\\n`\n }\n\n if (featuredArticles.length > 0) {\n mdxContent += `## Feature List\\n\\n<Cards>\\n`\n featuredArticles.forEach(article => { mdxContent += createCard(article) })\n mdxContent += `</Cards>\\n\\n`\n }\n\n if (pastArticles.length > 0) {\n mdxContent += `## Past List\\n\\n<Cards>\\n`\n pastArticles.forEach(article => { mdxContent += createCard(article) })\n mdxContent += `</Cards>\\n`\n }\n\n // add Monthly Summary block separately\n if (iocArticle) {\n mdxContent += `\\n## Monthly Summary\\n\\n<Cards>\\n`\n const iocHref = blogPrefix ? `${blogPrefix}/${iocSlug}` : `${iocSlug}`\n mdxContent += ` <ZiaCard href=\"${iocHref}\" title=\"Overview\">\\n ${getCurrentDateString()}\\n </ZiaCard>\\n`\n mdxContent += `</Cards>\\n`\n }\n\n if (featuredArticles.length === 0 && pastArticles.length === 0 && !iocArticle) {\n mdxContent += \"No blog posts found yet. Stay tuned!\\n\"\n }\n\n writeFileSync(indexFile, mdxContent)\n logger.success(`Successfully generated ${indexFile}`)\n\n // generate monthly statistics\n await generateMonthlyBlogSummary(config, visibleArticles, iocFile, iocSlug, logger)\n\n logger.log('Blog index generation completed successfully!')\n logger.saveToFile('generate-blog.log', cwd)\n\n return 0\n\n } catch (error) {\n logger.error(`Error generating blog index: ${error}`)\n return 1\n }\n}\n\n/**\n * generate blog monthly statistics details\n */\nasync function generateMonthlyBlogSummary(\n config: DevScriptsConfig,\n articles: ProcessedArticle[],\n iocFile: string,\n iocSlug: string,\n logger: Logger\n): Promise<void> {\n try {\n // filter out articles without date and slug is ioc\n const articlesWithDate = articles.filter(a => a.date && a.slug !== iocSlug)\n\n // group by month\n const monthMap: Record<string, {date: string, title: string, slug: string}[]> = {}\n for (const art of articlesWithDate) {\n // only take the first 7 digits yyyy-mm\n const month = art.date!.slice(0, 7)\n if (!monthMap[month]) monthMap[month] = []\n monthMap[month].push({ date: art.date!, title: art.title, slug: art.slug })\n }\n\n // sort months in descending order\n const sortedMonths = Object.keys(monthMap).sort((a, b) => b.localeCompare(a))\n\n // sort articles by date in descending order\n for (const month of sortedMonths) {\n monthMap[month].sort((a, b) => b.date.localeCompare(a.date))\n }\n\n // read ioc.mdx original frontmatter\n let frontmatter = ''\n try {\n const content = readFileSync(iocFile, 'utf-8')\n const match = content.match(/^---([\\s\\S]*?)---/)\n if (match && match[0]) frontmatter = match[0]\n } catch {\n // File doesn't exist, use default\n }\n\n // if there is no frontmatter, use the default\n if (!frontmatter) {\n frontmatter = '---\\ntitle: Monthly Summary\\ndescription: Index and Summary\\n---'\n }\n\n // update date field in frontmatter\n frontmatter = updateFrontmatterDate(frontmatter)\n\n // generate content\n let mdx = `${frontmatter}\\n\\n\\n## Overview\\n<Files>\\n`\n if (sortedMonths.length === 0) {\n mdx += ' <ZiaFile name=\"Comming Soon\" className=\"opacity-50\" disabled/>\\n'\n } else {\n for (const month of sortedMonths) {\n // Folder name format YYYY-MM(article count)\n const count = monthMap[month].length\n const folderTitle = `${month}(${count})`\n // default open the latest month\n const defaultOpen = month === sortedMonths[0] ? ' defaultOpen' : ''\n mdx += ` <ZiaFolder name=\"${folderTitle}\"${defaultOpen}>\\n`\n for (const art of monthMap[month]) {\n // File name=\"YYYY-MM-DD(Title)\" format\n const day = art.date.slice(0, 10)\n // refer path is /locale/blog/ioc, so here is ./X, then you'll get /locale/blog/X\n const href = art.slug ? `./${art.slug}` : '';\n mdx += ` <ZiaFile name=\"${day}(${art.title})\" href=\"${href}\" />\\n`\n }\n mdx += ` </ZiaFolder>\\n`\n }\n }\n mdx += '</Files>\\n\\n'\n\n writeFileSync(iocFile, mdx)\n logger.success(`Successfully generated Monthly Blog Summary: ${iocFile}`)\n } catch (error) {\n logger.error(`Error generating monthly blog summary: ${error}`)\n }\n} ","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 } 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 // 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.private = true;\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 \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 './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/config/schema.ts","../src/config/index.ts","../src/utils/logger.ts","../src/utils/file-scanner.ts","../src/utils/translation-parser.ts","../src/commands/check-translations.ts","../src/commands/clean-translations.ts","../src/commands/generate-blog-index.ts","../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","path","fs","join","dirname","mkdirSync","writeFileSync","fg","readFileSync","match","readdirSync","resolve","existsSync","statSync","unlinkSync","rmSync","getCurrentDateString","renderTree","mdx","execSync","os","ensureDir","copy","pathExists","rename","readJson","writeJson","remove","program"],"mappings":"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","file":"cli.js","sourcesContent":["export interface DevScriptsConfig {\n // i18n config\n i18n: {\n locales: string[]\n defaultLocale: string\n messageRoot: string\n }\n \n // scan config\n scan: {\n include: string[]\n exclude?: string[]\n baseDir?: string\n }\n \n // blog config\n blog?: {\n mdxDir: string\n outputFile?: string\n metaFile?: string\n iocSlug?: string\n prefix?: string\n }\n \n // output config\n output: {\n logDir: string\n verbose?: boolean\n }\n\n // architecture anotion config\n architectureConfig?: Record<string, string>\n}\n\nexport interface PackageJsonDevScripts {\n locales?: string[]\n defaultLocale?: string\n messageRoot?: string\n scanDirs?: string[]\n blogDir?: string\n logDir?: string\n}\n\nexport const DEFAULT_CONFIG: DevScriptsConfig = {\n i18n: {\n locales: ['en', 'zh'],\n defaultLocale: 'en',\n messageRoot: 'messages'\n },\n scan: {\n include: ['src/**/*.{tsx,ts,jsx,js}'],\n exclude: ['src/**/*.d.ts', 'src/**/*.test.ts', 'src/**/*.test.tsx', 'node_modules/**']\n },\n blog: {\n mdxDir: 'src/mdx/blog',\n outputFile: 'index.mdx',\n metaFile: 'meta.json',\n iocSlug: 'ioc',\n prefix: 'blog'\n },\n output: {\n logDir: 'logs',\n verbose: false\n },\n architectureConfig: {\n \".\": \"锹目根目录\",\n \".env.local\": \"ęœ¬åœ°ēŽÆå¢ƒå˜é‡é…ē½®\",\n \".eslintrc.json\": \"ESLint ä»£ē č§„čŒƒé…ē½®\",\n \".gitignore\": \"Gitåæ½ē•„ę–‡ä»¶é…ē½®\",\n \".source\": \"Fumaę•°ę®ęŗBuild产物\",\n \"CHANGELOG.md\": \"å˜ę›“č®°å½•\",\n \"components.json\": \"ē»„ä»¶ä¾čµ–ęø…å•\",\n \"dev-scripts.config.json\": \"dev-scriptsč„šęœ¬å·„å…·é…ē½®\",\n \"LICENSE\": \"å¼€ęŗč®øåÆčÆ\",\n \"messages\": \"翻译目录\",\n \"next-env.d.ts\": \"Next.jsēŽÆå¢ƒē±»åž‹å£°ę˜Ž\",\n \"next.config.ts\": \"Next.jsé”¹ē›®é…ē½®\",\n \"package.json\": \"é”¹ē›®ä¾čµ–äøŽč„šęœ¬\",\n \"postcss.config.mjs\": \"PostCSS é…ē½®\",\n \"source.config.ts\": \"Fumaę•°ę®ęŗę‰«ęé…ē½®\",\n \"src\": \"源码目录\",\n \"tsconfig.json\": \"TypeScripté…ē½®\",\n \"tsconfig.node.json\": \"Node.js相关TypeScript é…ē½®\",\n \"logs\": \"旄志输出目录\",\n \"apps\": \"Monorepoå¤šåŗ”ē”Øē›®å½•\",\n \"packages\": \"子巄程组件库目录\",\n \"README.md\": \"é”¹ē›®čÆ“ę˜Žę–‡ę”£\",\n \"app\": \"Next.js åŗ”ē”Øäø»å…„å£ē›®å½•\",\n \"components\": \"é”µé¢ē»„ä»¶\",\n \"lib\": \"巄具包\",\n \"mdx\": \"FumaMDX文攣\",\n \"middleware.ts\": \"äø­é—“ä»¶å…„å£\",\n \"i18n.ts\": \"å¤ščÆ­čØ€é…ē½®\",\n \"globals.css\": \"å…Øå±€ę ·å¼\",\n \"layout.config.tsx\": \"åøƒå±€é…ē½®\",\n \"layout.tsx\": \"åøƒå±€\",\n \"loading.tsx\": \"å…Øå±€åŠ č½½ē»„ä»¶\",\n \"hero.tsx\": \"首锵大字组件\",\n \"mdx-components.tsx\": \"FumaMDX组件库(č‡Ŗå®šä¹‰)\",\n \"llm-content\": \"FumaMDXå¤åˆ¶ęŽ„å£\",\n \"[locale]\": \"Nextjs i18n路由目录\",\n \"(clerk)\": \"Clerk认证\",\n \"(home)\": \"首锵\",\n \"[...catchAll]\": \"å…Øå±€404锵面\",\n \"blog\": \"博客\",\n \"docs\": \"文攣\",\n \"legal\": \"法律\",\n \"api\": \"APIęŽ„å£\",\n \"robots.ts\": \"robots.txtē”Ÿęˆč„šęœ¬\",\n \"sitemap.ts\": \"ē½‘ē«™åœ°å›¾\",\n \"appConfig.ts\": \"åŗ”ē”Øå…Øå±€é…ē½®\",\n \"site-config.ts\": \"ē½‘ē«™å›¾ę ‡é…ē½®\",\n \"ioc.mdx\": \"月度/统讔\",\n \"meta.json\": \"FumaMDXå…ƒę•°ę®\",\n \"nextjs-architecture.mdx\": \"Next.jsé”¹ē›®ē»“ęž„\",\n \".github\": \"GitHub é…ē½®ē›®å½•\",\n \"workflows\": \"CI/CD å·„ä½œęµé…ē½®\"\n }\n} ","import fs from 'fs'\nimport path from 'path'\nimport { DEFAULT_CONFIG, DevScriptsConfig, PackageJsonDevScripts } from '@dev-scripts/config/schema'\n\n/**\n * load config from package.json\n */\nfunction loadPackageJsonConfig(cwd: string): Partial<DevScriptsConfig> | null {\n try {\n const packageJsonPath = path.join(cwd, 'package.json')\n if (!fs.existsSync(packageJsonPath)) return null\n \n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))\n const devScripts: PackageJsonDevScripts = packageJson.devScripts\n \n // only return config if devScripts field actually exists\n if (!devScripts || Object.keys(devScripts).length === 0) {\n return null\n }\n \n // convert to standard config format\n const config: Partial<DevScriptsConfig> = {}\n \n if (devScripts.locales || devScripts.defaultLocale || devScripts.messageRoot) {\n config.i18n = {\n locales: devScripts.locales || DEFAULT_CONFIG.i18n.locales,\n defaultLocale: devScripts.defaultLocale || DEFAULT_CONFIG.i18n.defaultLocale,\n messageRoot: devScripts.messageRoot || DEFAULT_CONFIG.i18n.messageRoot\n }\n }\n \n if (devScripts.scanDirs) {\n config.scan = {\n include: devScripts.scanDirs,\n exclude: DEFAULT_CONFIG.scan.exclude\n }\n }\n \n if (devScripts.blogDir) {\n config.blog = {\n mdxDir: devScripts.blogDir,\n ...DEFAULT_CONFIG.blog\n }\n }\n \n if (devScripts.logDir) {\n config.output = {\n logDir: devScripts.logDir,\n verbose: DEFAULT_CONFIG.output.verbose\n }\n }\n \n return Object.keys(config).length > 0 ? config : null\n } catch (error) {\n console.warn(`Warning: Failed to load package.json config: ${error}`)\n return null\n }\n}\n\n/**\n * load config from dev-scripts.config.json file\n */\nfunction loadConfigFile(cwd: string): Partial<DevScriptsConfig> | null {\n try {\n const configPath = path.join(cwd, 'dev-scripts.config.json')\n if (!fs.existsSync(configPath)) {\n return null\n }\n \n return JSON.parse(fs.readFileSync(configPath, 'utf8'))\n } catch (error) {\n console.warn(`Warning: Failed to load dev-scripts.config.json: ${error}`)\n return null\n }\n}\n\n/**\n * deep merge config object\n */\nfunction mergeConfig(base: DevScriptsConfig, override: Partial<DevScriptsConfig>): DevScriptsConfig {\n const result = { ...base }\n \n for (const [key, value] of Object.entries(override)) {\n if (value !== undefined && value !== null) {\n if (typeof value === 'object' && !Array.isArray(value) && typeof result[key as keyof DevScriptsConfig] === 'object') {\n ;(result as any)[key] = { ...(result as any)[key], ...value }\n } else {\n ;(result as any)[key] = value\n }\n }\n }\n \n return result\n}\n\n/**\n * load full config\n */\nexport function loadConfig(cwd: string = typeof process !== 'undefined' ? process.cwd() : '.', override: Partial<DevScriptsConfig> = {}, verbose?: boolean): DevScriptsConfig {\n let config = { ...DEFAULT_CONFIG }\n const configSources: string[] = []\n \n // 1. load dev-scripts.config.json\n const fileConfig = loadConfigFile(cwd)\n if (fileConfig) {\n config = mergeConfig(config, fileConfig)\n configSources.push('dev-scripts.config.json')\n }\n \n // 2. load package.json config\n const packageConfig = loadPackageJsonConfig(cwd)\n if (packageConfig) {\n config = mergeConfig(config, packageConfig)\n configSources.push('package.json')\n }\n \n // 3. apply any override config\n config = mergeConfig(config, override)\n if (Object.keys(override).length > 0) {\n configSources.push('runtime override')\n }\n \n // 4. print config info in verbose mode\n const shouldPrintConfig = verbose !== undefined ? verbose : config.output.verbose\n if (shouldPrintConfig) {\n // temporarily set verbose for printing\n const configForPrint = { ...config }\n configForPrint.output = { ...config.output, verbose: true }\n printConfigInfo(configForPrint, configSources, cwd)\n }\n \n return config\n}\n\n/**\n * print config information in verbose mode\n */\nfunction printConfigInfo(config: DevScriptsConfig, sources: string[], cwd: string): void {\n console.log('\\nšŸ“‹ Config Information:')\n console.log(` working directory: ${cwd}`)\n console.log(` config sources: ${sources.length > 0 ? sources.join(' + ') : 'default config'}`)\n \n console.log('\\n🌐 i18n:')\n console.log(` locales: [${config.i18n.locales.join(', ')}]`)\n console.log(` defaultLocale: ${config.i18n.defaultLocale}`)\n console.log(` messageRoot: ${config.i18n.messageRoot}`)\n \n console.log('\\nšŸ” scan:')\n console.log(` include: [${config.scan.include.join(', ')}]`)\n if (config.scan.exclude && config.scan.exclude.length > 0) {\n console.log(` exclude: [${config.scan.exclude.join(', ')}]`)\n }\n if (config.scan.baseDir) {\n console.log(` baseDir: ${config.scan.baseDir}`)\n }\n \n if (config.blog) {\n console.log('\\nšŸ“ blog:')\n console.log(` mdxDir: ${config.blog.mdxDir}`)\n console.log(` outputFile: ${config.blog.outputFile || 'index.mdx (default)'}`)\n console.log(` metaFile: ${config.blog.metaFile || 'meta.json (default)'}`)\n if (config.blog.iocSlug) {\n console.log(` iocSlug: ${config.blog.iocSlug}`)\n }\n if (config.blog.prefix) {\n console.log(` prefix: ${config.blog.prefix}`)\n }\n }\n \n console.log('\\nšŸ“¤ output:')\n console.log(` logDir: ${config.output.logDir}`)\n console.log(` verbose: ${config.output.verbose}`)\n console.log('')\n}\n\n/**\n * validate config\n */\nexport function validateConfig(config: DevScriptsConfig): void {\n if (!config.i18n.locales || config.i18n.locales.length === 0) {\n throw new Error('at least one language is required')\n }\n \n if (!config.i18n.locales.includes(config.i18n.defaultLocale)) {\n throw new Error('default language must be in the supported language list')\n }\n \n if (config.scan.include.length === 0) {\n throw new Error('at least one scan path is required')\n }\n} ","import { writeFileSync, mkdirSync } from 'fs'\nimport { join, dirname } from 'path'\nimport { DevScriptsConfig } from '@dev-scripts/config/schema'\n\nexport class Logger {\n private messages: string[] = []\n private config: DevScriptsConfig\n \n constructor(config: DevScriptsConfig) {\n this.config = config\n }\n \n log(message: string): void {\n if (this.config.output.verbose) {\n console.log(message)\n }\n this.messages.push(message)\n }\n \n error(message: string): void {\n console.error(message)\n this.messages.push('[ERROR] ' + message)\n }\n \n warn(message: string): void {\n console.warn(message)\n this.messages.push('[WARN] ' + message)\n }\n \n info(message: string): void {\n console.info(message)\n this.messages.push('[INFO] ' + message)\n }\n \n success(message: string): void {\n console.log(`āœ… ${message}`)\n this.messages.push(`[SUCCESS] ${message}`)\n }\n \n /**\n * save log to file\n */\n saveToFile(filename: string, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): void {\n try {\n const logFilePath = join(cwd, this.config.output.logDir, filename)\n const logDir = dirname(logFilePath)\n \n // create log directory if it doesn't exist\n mkdirSync(logDir, { recursive: true })\n \n writeFileSync(logFilePath, this.messages.join('\\n'), 'utf8')\n console.log(`log saved to ${logFilePath}`)\n } catch (error) {\n console.error(`failed to save log file: ${error}`)\n }\n }\n \n /**\n * clear log messages\n */\n clear(): void {\n this.messages = []\n }\n \n /**\n * get all log messages\n */\n getMessages(): string[] {\n return [...this.messages]\n }\n} ","import fg from 'fast-glob'\nimport { readFileSync } from 'fs'\nimport { DevScriptsConfig } from '@dev-scripts/config/schema'\n\nexport interface ScanResult {\n filePath: string\n content: string\n}\n\n/**\n * scan matching files\n */\nexport async function scanFiles(config: DevScriptsConfig, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): Promise<ScanResult[]> {\n const files: string[] = await fg(config.scan.include, {\n ignore: config.scan.exclude || [],\n cwd,\n absolute: false\n })\n\n const results: ScanResult[] = []\n \n for (const file of files) {\n try {\n const content = readFileSync(file, 'utf8')\n results.push({\n filePath: file,\n content\n })\n } catch (error) {\n console.warn(`Warning: Failed to read file ${file}: ${error}`)\n }\n }\n\n return results\n}\n\n/**\n * read JSON file from given path\n */\nexport function readJsonFile<T = any>(filePath: string): T | null {\n try {\n const content = readFileSync(filePath, 'utf8')\n return JSON.parse(content)\n } catch (error) {\n return null\n }\n}\n\n/**\n * get translation file path\n */\nexport function getTranslationFilePath(locale: string, config: DevScriptsConfig, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): string {\n return `${cwd}/${config.i18n.messageRoot}/${locale}.json`\n}\n\n/**\n * load all translation files\n */\nexport function loadTranslations(config: DevScriptsConfig, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): Record<string, Record<string, any>> {\n const translations: Record<string, Record<string, any>> = {}\n \n for (const locale of config.i18n.locales) {\n const filePath = getTranslationFilePath(locale, config, cwd)\n const translation = readJsonFile(filePath)\n \n if (translation) {\n translations[locale] = translation\n } else {\n console.warn(`Warning: Failed to load translation file for locale: ${locale}`)\n translations[locale] = {}\n }\n }\n \n return translations\n} ","// translation info interface\nexport interface TranslationInfo {\n namespaces: Map<string, string> // variable name -> namespace\n keys: string[] // full translation key path\n}\n\n/**\n * extract translation keys and namespaces from file content\n */\nexport function extractTranslationsInfo(content: string, filePath: string): TranslationInfo {\n const result: TranslationInfo = {\n namespaces: new Map<string, string>(),\n keys: []\n }\n\n // match getTranslations({ locale, namespace: 'namespace' }) or getTranslations('namespace')\n const getTranslationsPattern = /getTranslations\\(\\s*(?:{[^}]*namespace:\\s*['\"]([^'\"]+)['\"][^}]*}|['\"]([^'\"]+)['\"])\\s*\\)/g\n let match: RegExpExecArray | null\n\n while ((match = getTranslationsPattern.exec(content)) !== null) {\n const namespace = match[1] || match[2]\n if (namespace) {\n // try to find assignment statement, like const t = await getTranslations(...)\n // find the nearest const declaration\n const linesBefore = content.substring(0, match.index).split('\\n');\n for (let i = linesBefore.length - 1; i >= Math.max(0, linesBefore.length - 5); i--) {\n const line = linesBefore[i];\n const constMatch = /const\\s+(\\w+)\\s*=/.exec(line);\n if (constMatch && !line.includes('useTranslations') && !line.includes('getTranslations')) {\n result.namespaces.set(constMatch[1], namespace);\n break;\n }\n }\n }\n }\n\n // match useTranslations('namespace')\n const useTranslationsPattern = /useTranslations\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g\n while ((match = useTranslationsPattern.exec(content)) !== null) {\n const namespace = match[1]\n\n // try to find assignment statement, like const t = useTranslations(...)\n // find the line containing useTranslations\n const currentLine = content.substring(0, match.index).split('\\n').pop() || '';\n const constMatch = /const\\s+(\\w+)\\s*=/.exec(currentLine);\n if (constMatch) {\n result.namespaces.set(constMatch[1], namespace);\n }\n }\n\n // match t('key') or t(\"key\"), and check if t is associated with known namespaces\n // modify the matching pattern of t function call\n const tPatterns = [\n // normal string key: t('key') or t(\"key\")\n /(\\w+)\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n // template string key: t(`tags.${id}`) or t(`section.${key}`)\n /(\\w+)\\(\\s*`([^`]+)`\\s*\\)/g,\n // variable key: t(item.key) or t(item.id)\n /(\\w+)\\(\\s*(\\w+)\\.(\\w+)\\s*\\)/g\n ];\n\n for (const pattern of tPatterns) {\n let match;\n while ((match = pattern.exec(content)) !== null) {\n const funcName = match[1];\n\n // if the function name is associated with known namespaces\n if (result.namespaces.has(funcName)) {\n const namespace = result.namespaces.get(funcName);\n if (!namespace) continue;\n\n if (pattern.source.includes('`')) {\n // handle template string\n const templateStr = match[2];\n // extract static part (the part before the variable)\n const staticPart = templateStr.split(/\\${(?:id|key)}/)[0].trim();\n if (staticPart && !staticPart.includes('/')) {\n // for tags.${id}čæ™ę ·ēš„å½¢å¼ļ¼Œč®°å½•ę•“äøŖ tags å‘½åē©ŗé—“\n const segments = staticPart.split('.');\n if (segments.length > 0) {\n // record the base path\n result.keys.push(`${namespace}.${segments[0]}`);\n // if it is multi-level, also record the full path\n if (segments.length > 1) {\n result.keys.push(`${namespace}.${segments.join('.')}`);\n }\n\n // special handling for tags namespace\n if (segments[0] === 'tags') {\n // add all known tag keys\n ['productUpdates', 'tutorials', 'makeMoney', 'roadOverSea', 'insights'].forEach(tag => {\n result.keys.push(`${namespace}.tags.${tag}`);\n });\n }\n }\n }\n } else if (pattern.source.includes('\\\\w+\\\\.\\\\w+')) {\n // handle variable key t(item.key)\n const varName = match[2];\n const propName = match[3];\n\n // find the possible value of the variable in the file content\n const varPattern = new RegExp(`${varName}\\\\s*=\\\\s*{[^}]*key:\\\\s*['\"]([^'\"]+)['\"]`);\n const varMatch = content.match(varPattern);\n\n if (varMatch) {\n // if the variable definition is found, add the actual key\n result.keys.push(`${namespace}.${varMatch[1]}`);\n } else {\n // if the specific definition is not found, try to infer from the context\n // check if it is used in an array or object of MenuItem type\n if (content.includes('MenuItem[]') || content.includes('MenuItem}')) {\n // add all possible menu keys\n ['journey'].forEach(menuKey => {\n result.keys.push(`${namespace}.${menuKey}`);\n });\n }\n }\n } else {\n // handle normal string key\n const key = match[2];\n if (!key.includes('/') && key !== '') {\n result.keys.push(`${namespace}.${key}`);\n }\n }\n }\n }\n }\n\n // match <FormattedMessage id=\"key\" />\n const formattedMessagePattern = /<FormattedMessage[^>]*id=['\"]([^'\"]+)['\"]/g\n while ((match = formattedMessagePattern.exec(content)) !== null) {\n const key = match[1]\n if (!key.includes('/') && key !== '') {\n // for FormattedMessage, we need to guess the namespace\n // usually we can find useTranslations call in the same file\n if (result.namespaces.size > 0) {\n const namespace = Array.from(result.namespaces.values())[0]\n result.keys.push(`${namespace}.${key}`)\n } else {\n // if the namespace is not found, try to infer from the file path\n const pathMatch = filePath.match(/\\[locale\\]\\/(?:\\([^)]+\\)\\/)?([^/]+)/)\n if (pathMatch && pathMatch[1]) {\n const possibleNamespace = pathMatch[1]\n result.keys.push(`${possibleNamespace}.${key}`)\n }\n }\n }\n }\n\n return result\n}\n\n/**\n * get all keys from an object (including nested keys)\n */\nexport function getAllKeys(obj: Record<string, any>, prefix: string = ''): string[] {\n let keys: string[] = []\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const newKey = prefix ? `${prefix}.${key}` : key\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n keys = [...keys, ...getAllKeys(obj[key], newKey)]\n } else {\n keys.push(newKey)\n }\n }\n }\n return keys\n}\n\n/**\n * check if the key exists in the translation file\n */\nexport function checkKeyExists(key: string, translations: Record<string, any>): boolean {\n const parts = key.split('.')\n let current: any = translations\n\n for (const part of parts) {\n if (current[part] === undefined) {\n return false\n }\n current = current[part]\n }\n\n return true\n}\n\n/**\n * check if the namespace exists in the translation file\n */\nexport function checkNamespaceExists(namespace: string, translations: Record<string, any>): boolean {\n return translations[namespace] !== undefined\n}\n\n/**\n * remove the specified key from the translation object\n */\nexport function removeKeyFromTranslations(key: string, translations: Record<string, any>): boolean {\n const parts = key.split('.')\n const lastPart = parts.pop()\n\n if (!lastPart) return false\n\n let current = translations\n\n // navigate to the parent object of the last level\n for (const part of parts) {\n if (current[part] === undefined || typeof current[part] !== 'object') {\n return false\n }\n current = current[part]\n }\n\n // delete the key\n if (current[lastPart] !== undefined) {\n delete current[lastPart]\n return true\n }\n\n return false\n}\n\n/**\n * clean empty objects (recursively)\n */\nexport function cleanEmptyObjects(obj: Record<string, any>): Record<string, any> {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n obj[key] = cleanEmptyObjects(obj[key])\n // if the object is empty, delete it\n if (Object.keys(obj[key]).length === 0) {\n delete obj[key]\n }\n }\n }\n }\n return obj\n} ","import { DevScriptsConfig } from '@dev-scripts/config/schema'\nimport { Logger } from '@dev-scripts/utils/logger'\nimport { scanFiles, loadTranslations } from '@dev-scripts/utils/file-scanner'\nimport { \n extractTranslationsInfo, \n getAllKeys, \n checkKeyExists, \n checkNamespaceExists \n} from '@dev-scripts/utils/translation-parser'\n\ninterface TranslationReport {\n [key: string]: string[]\n}\n\nexport async function checkTranslations(config: DevScriptsConfig, cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'): Promise<number> {\n const logger = new Logger(config)\n logger.warn('==============================')\n logger.warn(`ā€¼ļø Current working directory: ā­• ${cwd} ā­•`)\n logger.warn('==============================')\n \n try {\n logger.log('start checking translations...')\n\n // scan all files\n const scanResults = await scanFiles(config, cwd)\n logger.log(`found ${scanResults.length} files to scan`)\n\n // load translation files\n const translations = loadTranslations(config, cwd)\n\n // collect used translation keys and namespaces\n const foundTranslationKeys: Set<string> = new Set()\n const foundNamespaces: Set<string> = new Set()\n\n // scan all files, extract translation information\n for (const { filePath, content } of scanResults) {\n try {\n const { namespaces, keys } = extractTranslationsInfo(content, filePath)\n\n if (keys.length > 0 || namespaces.size > 0) {\n logger.log(`found the following information in the file ${filePath}:`)\n\n if (namespaces.size > 0) {\n logger.log(` translation function mapping:`)\n namespaces.forEach((namespace, varName) => {\n logger.log(` - ${varName} => ${namespace}`)\n foundNamespaces.add(namespace)\n })\n }\n\n if (keys.length > 0) {\n logger.log(` translation keys:`)\n keys.forEach(key => {\n logger.log(` - ${key}`)\n foundTranslationKeys.add(key)\n })\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n logger.error(`error processing file ${filePath}: ${error.message}`)\n } else {\n logger.error(`error processing file ${filePath}: unknown error`)\n }\n }\n }\n\n logger.log(`\\nfound ${foundNamespaces.size} used namespaces in the code: ${Array.from(foundNamespaces).join(', ')}`)\n\n // check results\n const report: TranslationReport = {}\n\n // check if the namespace exists\n foundNamespaces.forEach(namespace => {\n config.i18n.locales.forEach(locale => {\n const missingNamespaceKey = `missingNamespacesIn${locale.toUpperCase()}`\n if (!checkNamespaceExists(namespace, translations[locale])) {\n report[missingNamespaceKey] = report[missingNamespaceKey] || []\n report[missingNamespaceKey].push(namespace)\n }\n })\n })\n\n // check if the translation key exists\n foundTranslationKeys.forEach(key => {\n config.i18n.locales.forEach(locale => {\n const missingKey = `missingIn${locale.toUpperCase()}`\n if (!checkKeyExists(key, translations[locale])) {\n report[missingKey] = report[missingKey] || []\n report[missingKey].push(key)\n }\n })\n })\n\n // check if the translation keys are consistent\n config.i18n.locales.forEach(locale => {\n const allKeys = getAllKeys(translations[locale])\n config.i18n.locales.forEach(otherLocale => {\n if (locale !== otherLocale) {\n const otherKeys = getAllKeys(translations[otherLocale])\n const onlyKeys = `${locale}OnlyKeys`\n report[onlyKeys] = allKeys.filter(key => !otherKeys.includes(key))\n }\n })\n })\n\n // generate report\n logger.log('\\n=== translation check report ===\\n')\n\n // first report missing namespaces, which is usually the most serious problem\n config.i18n.locales.forEach(locale => {\n const missingNamespaceKey = `missingNamespacesIn${locale.toUpperCase()}`\n if (report[missingNamespaceKey]?.length > 0) {\n logger.log(`🚨 missing namespaces in the ${locale} translation file:`)\n report[missingNamespaceKey].forEach(namespace => logger.log(` - ${namespace}`))\n } else {\n logger.success(`${locale} translation file has all used namespaces`)\n }\n })\n\n // then report missing translation keys\n config.i18n.locales.forEach(locale => {\n const missingKey = `missingIn${locale.toUpperCase()}`\n if (report[missingKey]?.length > 0) {\n logger.log(`\\nšŸ”“ missing keys in the ${locale} translation file:`)\n report[missingKey].forEach(key => logger.log(` - ${key}`))\n } else {\n logger.success(`${locale} translation file has all used keys`)\n }\n })\n\n // finally report inconsistent keys\n config.i18n.locales.forEach(locale => {\n const onlyKeys = `${locale}OnlyKeys`\n if (report[onlyKeys]?.length > 0) {\n logger.log(`\\nāš ļø keys only exist in the ${locale} translation file:`)\n report[onlyKeys].forEach(key => logger.log(` - ${key}`))\n }\n })\n\n logger.log('\\n=== report end ===\\n')\n logger.log(\"āš ļøāš ļøāš ļøscript depends on regular matching, for multiple translation namespaces in a single file, use naming to distinguish: t1 | t2 | t3 | ... āš ļøāš ļøāš ļø\")\n\n // save log file\n logger.saveToFile('check.log', cwd)\n\n // if there are any problems, return non-zero status code\n return Object.values(report).some(keys => keys.length > 0) ? 1 : 0\n\n } catch (error) { \n logger.error(`error checking translations: ${error}`)\n return 1\n }\n} ","import { DevScriptsConfig } from '@dev-scripts/config/schema'\nimport { getTranslationFilePath, loadTranslations, scanFiles } from '@dev-scripts/utils/file-scanner'\nimport { Logger } from '@dev-scripts/utils/logger'\nimport {\n cleanEmptyObjects,\n extractTranslationsInfo,\n getAllKeys,\n removeKeyFromTranslations\n} from '@dev-scripts/utils/translation-parser'\nimport { writeFileSync } from 'fs'\n\ninterface CleanReport {\n [key: string]: string[]\n}\n\nexport async function cleanTranslations(\n config: DevScriptsConfig, \n shouldRemove: boolean = false,\n cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'\n): Promise<number> {\n const logger = new Logger(config)\n const logFileName = shouldRemove ? 'remove.log' : 'clean.log'\n \n logger.warn('==============================')\n logger.warn(`ā€¼ļø Current working directory: ā­• ${cwd} ā­•`)\n logger.warn('==============================')\n \n try {\n logger.log('start checking unused translation keys...')\n\n // scan all files\n const scanResults = await scanFiles(config, cwd)\n logger.log(`ę‰¾åˆ° ${scanResults.length} äøŖę–‡ä»¶éœ€č¦ę‰«ę`)\n\n // load translation files\n const translations = loadTranslations(config, cwd)\n\n // collect used translation keys and namespaces\n const foundTranslationKeys: Set<string> = new Set()\n const foundNamespaces: Set<string> = new Set()\n\n // scan all files, collect used translation keys and namespaces\n for (const { filePath, content } of scanResults) {\n try {\n const { namespaces, keys } = extractTranslationsInfo(content, filePath)\n\n if (keys.length > 0 || namespaces.size > 0) {\n logger.log(`found the following information in the file ${filePath}:`)\n\n if (namespaces.size > 0) {\n logger.log(` translation function mapping:`)\n namespaces.forEach((namespace, varName) => {\n logger.log(` - ${varName} => ${namespace}`)\n foundNamespaces.add(namespace)\n })\n }\n\n if (keys.length > 0) {\n logger.log(` translation keys:`)\n keys.forEach(key => {\n logger.log(` - ${key}`)\n foundTranslationKeys.add(key)\n })\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n logger.error(`error processing file ${filePath}: ${error.message}`)\n } else {\n logger.error(`error processing file ${filePath}: unknown error`)\n }\n }\n }\n\n logger.log(`\\nfound ${foundTranslationKeys.size} used translation keys in the code`)\n logger.log(`found ${foundNamespaces.size} used namespaces in the code: ${Array.from(foundNamespaces).join(', ')}`)\n\n // check unused keys in each language file\n const unusedKeys: Record<string, string[]> = {}\n const removedKeys: Record<string, string[]> = {}\n const unusedNamespaces: Record<string, string[]> = {}\n\n config.i18n.locales.forEach(locale => {\n unusedKeys[locale] = []\n removedKeys[locale] = []\n unusedNamespaces[locale] = []\n\n // get all keys in the translation file\n const allTranslationKeys = getAllKeys(translations[locale])\n\n // get all namespaces (top-level keys) in the translation file\n const allNamespaces = Object.keys(translations[locale] || {})\n\n // find unused namespaces\n allNamespaces.forEach(namespace => {\n if (!foundNamespaces.has(namespace)) {\n unusedNamespaces[locale].push(namespace)\n }\n })\n\n // find unused keys\n allTranslationKeys.forEach(key => {\n if (!foundTranslationKeys.has(key)) {\n unusedKeys[locale].push(key)\n }\n })\n\n logger.log(`\\nfound ${unusedKeys[locale].length} unused keys in the ${locale} translation file`)\n logger.log(`found ${unusedNamespaces[locale].length} unused namespaces in the ${locale} translation file`)\n })\n\n if (shouldRemove) {\n logger.log('\\nstart deleting unused translation keys...')\n\n // delete unused keys in each language file\n config.i18n.locales.forEach(locale => {\n const translationsCopy = { ...translations[locale] }\n\n unusedKeys[locale].forEach(key => {\n if (removeKeyFromTranslations(key, translationsCopy)) {\n removedKeys[locale].push(key)\n }\n })\n\n // delete unused namespaces\n unusedNamespaces[locale].forEach(namespace => {\n if (translationsCopy[namespace] !== undefined) {\n delete translationsCopy[namespace]\n logger.log(`deleted unused namespace ${namespace} from the ${locale} translation file`)\n }\n })\n\n // clean empty objects\n const cleanedTranslations = cleanEmptyObjects(translationsCopy)\n\n // save updated translation file\n const filePath = getTranslationFilePath(locale, config, cwd)\n writeFileSync(filePath, JSON.stringify(cleanedTranslations, null, 2), 'utf8')\n\n logger.log(`deleted ${removedKeys[locale].length} unused keys from the ${locale} translation file`)\n })\n } else {\n logger.log('\\nTo delete unused keys, please run the script with the --remove parameter')\n }\n\n // generate report\n logger.log('\\n=== unused translation keys report ===\\n')\n\n config.i18n.locales.forEach(locale => {\n if (unusedNamespaces[locale].length > 0) {\n logger.log(`šŸ” unused namespaces in the ${locale} translation file:`)\n unusedNamespaces[locale].forEach(namespace => logger.log(` - ${namespace}`))\n } else {\n logger.success(`${locale} translation file has no unused namespaces`)\n }\n\n if (unusedKeys[locale].length > 0) {\n logger.log(`\\nšŸ” unused keys in the ${locale} translation file:`)\n unusedKeys[locale].forEach(key => logger.log(` - ${key}`))\n } else {\n logger.success(`${locale} translation file has no unused keys`)\n }\n\n if (shouldRemove && removedKeys[locale].length > 0) {\n logger.log(`\\nšŸ—‘ļø deleted keys from the ${locale} translation file:`)\n removedKeys[locale].forEach(key => logger.log(` - ${key}`))\n }\n })\n\n logger.log('\\n=== report end ===\\n')\n logger.log(\"āš ļøāš ļøāš ļøscript depends on regular matching, for multiple translation namespaces in a single file, use naming to distinguish: t1 | t2 | t3 | ... āš ļøāš ļøāš ļø\")\n\n // save log file\n logger.saveToFile(logFileName, cwd)\n\n // if there are any unused keys or namespaces, return non-zero status code\n return (Object.values(unusedKeys).some(keys => keys.length > 0) ||\n Object.values(unusedNamespaces).some(namespaces => namespaces.length > 0)) ? 1 : 0\n\n } catch (error) {\n logger.error(`error cleaning translations: ${error}`)\n return 1\n }\n} ","import { readFileSync, writeFileSync, readdirSync } from 'fs'\nimport { join } from 'path'\nimport { DevScriptsConfig } from '@dev-scripts/config/schema'\nimport { Logger } from '@dev-scripts/utils/logger'\nimport { readJsonFile } from '@dev-scripts/utils/file-scanner'\n\ninterface Frontmatter {\n title?: string\n description?: string\n icon?: string\n date?: string\n}\n\ninterface ProcessedArticle {\n slug: string\n title: string\n description?: string\n frontmatterIcon?: string\n date?: string\n}\n\ninterface MetaJson {\n pages: string[]\n}\n\nfunction parseFrontmatter(fileContent: string): Frontmatter {\n const frontmatter: Frontmatter = {}\n const match = fileContent.match(/^---([\\s\\S]*?)---/)\n if (match && match[1]) {\n const lines = match[1].trim().split('\\n')\n for (const line of lines) {\n const [key, ...valueParts] = line.split(':')\n if (key && valueParts.length > 0) {\n const value = valueParts.join(':').trim()\n if (key.trim() === 'title') frontmatter.title = value\n if (key.trim() === 'description') frontmatter.description = value\n if (key.trim() === 'icon') frontmatter.icon = value\n if (key.trim() === 'date') frontmatter.date = value\n }\n }\n }\n return frontmatter\n}\n\nfunction getIconComponentString(iconName?: string): string | undefined {\n if (!iconName) return undefined\n return `<${iconName} />`\n}\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\nfunction updateFrontmatterDate(frontmatter: string): string {\n const currentDate = getCurrentDateString()\n \n // Check if date field exists\n if (frontmatter.includes('date:')) {\n // Replace existing date\n return frontmatter.replace(/date:\\s*[^\\n]*/, `date: ${currentDate}`)\n } else {\n // Add date field before the closing ---\n return frontmatter.replace(/---$/, `date: ${currentDate}\\n---`)\n }\n}\n\nfunction getBlogPrefix(config: DevScriptsConfig): string {\n if (config.blog?.prefix === undefined || config.blog?.prefix === null) {\n return 'blog';\n } else if (typeof config.blog?.prefix === 'string' && config.blog?.prefix.trim() === '') {\n return '';\n } else {\n return String(config.blog.prefix).trim();\n }\n}\n\nasync function getAllBlogArticles(blogDir: string, cwd: string, logger: Logger): Promise<ProcessedArticle[]> {\n const articles: ProcessedArticle[] = []\n const blogPath = join(cwd, blogDir)\n \n try {\n const files = readdirSync(blogPath)\n for (const file of files) {\n if (file.endsWith('.mdx') && file !== 'index.mdx') {\n const slug = file.replace(/\\.mdx$/, '')\n const filePath = join(blogPath, file)\n try {\n const content = readFileSync(filePath, 'utf-8')\n const fm = parseFrontmatter(content)\n\n if (!fm.title) {\n logger.warn(`Article \"${file}\" is missing a title in its frontmatter. Skipping.`)\n continue\n }\n\n articles.push({\n slug,\n title: fm.title,\n description: fm.description,\n frontmatterIcon: fm.icon,\n date: fm.date,\n })\n } catch (readError) {\n logger.warn(`Could not read or parse frontmatter for \"${file}\": ${readError}`)\n }\n }\n }\n } catch (dirError) {\n logger.error(`Could not read blog directory: ${dirError}`)\n return []\n }\n return articles\n}\n\nexport async function generateBlogIndex(\n config: DevScriptsConfig,\n cwd: string = typeof process !== 'undefined' ? process.cwd() : '.'\n): Promise<number> {\n const logger = new Logger(config)\n logger.warn('==============================')\n logger.warn(`ā€¼ļø Current working directory: ā­• ${cwd} ā­•`)\n logger.warn('==============================')\n try {\n if (!config.blog) {\n logger.error('Blog configuration is missing. Please configure blog settings.')\n return 1\n }\n\n logger.log('Starting to generate blog index...')\n\n const blogPath = join(cwd, config.blog.mdxDir)\n const indexFile = join(blogPath, config.blog.outputFile || 'index.mdx')\n const metaFile = join(blogPath, config.blog.metaFile || 'meta.json')\n const iocFile = join(blogPath, `${config.blog.iocSlug || 'ioc'}.mdx`)\n const iocSlug = config.blog.iocSlug || 'ioc'\n const blogPrefix = getBlogPrefix(config)\n\n let meta: MetaJson = { pages: [] }\n const metaContent = readJsonFile<MetaJson>(metaFile)\n if (metaContent) {\n meta = metaContent\n } else {\n logger.warn(`Could not read or parse ${metaFile}. No articles will be marked as featured.`)\n }\n \n // ē»Ÿäø€ęå–č¢«éšč—ēš„ slug\n const hiddenSlugs = new Set(\n meta.pages.filter(p => p.startsWith('!')).map(p => p.slice(1))\n )\n // ioc 相关处理\n const featuredSlugs = meta.pages\n .filter(p => !p.startsWith('!'))\n .map(p => p.endsWith('.mdx') ? p.slice(0, -4) : p)\n .filter(slug => slug !== 'index' && slug !== '...')\n logger.log(`Featured slugs (meta-config): ${featuredSlugs.join(', ')}`)\n\n const allArticles = await getAllBlogArticles(config.blog.mdxDir, cwd, logger)\n logger.log(`Found ${allArticles.length} all articles.`)\n\n // čæ‡ę»¤ę‰€ęœ‰č¢«éšč—ēš„ slug\n const visibleArticles = allArticles.filter(a => !hiddenSlugs.has(a.slug))\n\n // ioc article 处理\n const iocArticle = visibleArticles.find(a => a.slug === iocSlug)\n const filteredArticles = visibleArticles.filter(a => a.slug !== iocSlug)\n\n if (filteredArticles.length === 0 && featuredSlugs.length === 0) {\n logger.warn(\"No articles found or featured. The generated index might be empty or minimal.\")\n }\n\n const featuredArticles: ProcessedArticle[] = []\n const pastArticles: ProcessedArticle[] = []\n\n filteredArticles.forEach(article => {\n if (featuredSlugs.includes(article.slug)) {\n featuredArticles.push(article)\n } else {\n pastArticles.push(article)\n }\n })\n\n // Sort articles by date in descending order (newest first)\n const sortByDateDesc = (a: ProcessedArticle, b: ProcessedArticle) => {\n if (a.date && b.date) {\n return b.date.localeCompare(a.date) // Newest first\n }\n if (a.date) return -1 // Articles with date come before those without\n if (b.date) return 1 // Articles with date come before those without\n return 0 // Keep original order if both lack dates\n }\n\n featuredArticles.sort(sortByDateDesc)\n pastArticles.sort(sortByDateDesc)\n\n logger.log(`Found ${featuredArticles.length} featured articles (sorted by date).`)\n logger.log(`Found ${pastArticles.length} past articles (sorted by date).`)\n\n // Preserve existing frontmatter or use a default\n let currentFileFrontmatter = '---\\ntitle: Blog\\ndescription: Articles and thoughts about various topics.\\nicon: Rss\\n---'\n try {\n const currentIndexContent = readFileSync(indexFile, 'utf-8')\n const frontmatterMatch = currentIndexContent.match(/^---([\\s\\S]*?)---/)\n if (frontmatterMatch && frontmatterMatch[0]) {\n currentFileFrontmatter = frontmatterMatch[0]\n logger.log('Preserving existing frontmatter from index.mdx')\n }\n } catch (error) {\n logger.warn('Could not read existing index.mdx or parse its frontmatter. Using default frontmatter.')\n }\n\n // Update date field in frontmatter\n currentFileFrontmatter = updateFrontmatterDate(currentFileFrontmatter)\n\n let mdxContent = `${currentFileFrontmatter}\\n\\n`\n\n const createCard = (article: ProcessedArticle): string => {\n const iconString = getIconComponentString(article.frontmatterIcon)\n const iconProp = iconString ? `icon={${iconString}}` : ''\n \n // Escape only double quotes in title for JSX attribute\n const escapedTitle = (article.title || '').replace(/\"/g, '&quot;')\n\n // Content of the card - should be raw, as it might be MDX\n const cardContent = article.date || article.description || '' \n \n // Ensure there's a space before href if iconProp is present and not empty\n const finalIconProp = iconProp ? `${iconProp} ` : ''\n // refer path is /locale/blog, this is blog root dir, so here is blog/X, then you'll get /locale/blog/X\n const href = blogPrefix ? `${blogPrefix}/${article.slug}` : `${article.slug}`\n return ` <ZiaCard ${finalIconProp} href=\"${href}\" title=\"${escapedTitle}\">\\n ${cardContent}\\n </ZiaCard>\\n`\n }\n\n if (featuredArticles.length > 0) {\n mdxContent += `## Feature List\\n\\n<Cards>\\n`\n featuredArticles.forEach(article => { mdxContent += createCard(article) })\n mdxContent += `</Cards>\\n\\n`\n }\n\n if (pastArticles.length > 0) {\n mdxContent += `## Past List\\n\\n<Cards>\\n`\n pastArticles.forEach(article => { mdxContent += createCard(article) })\n mdxContent += `</Cards>\\n`\n }\n\n // add Monthly Summary block separately\n if (iocArticle) {\n mdxContent += `\\n## Monthly Summary\\n\\n<Cards>\\n`\n const iocHref = blogPrefix ? `${blogPrefix}/${iocSlug}` : `${iocSlug}`\n mdxContent += ` <ZiaCard href=\"${iocHref}\" title=\"Overview\">\\n ${getCurrentDateString()}\\n </ZiaCard>\\n`\n mdxContent += `</Cards>\\n`\n }\n\n if (featuredArticles.length === 0 && pastArticles.length === 0 && !iocArticle) {\n mdxContent += \"No blog posts found yet. Stay tuned!\\n\"\n }\n\n writeFileSync(indexFile, mdxContent)\n logger.success(`Successfully generated ${indexFile}`)\n\n // generate monthly statistics\n await generateMonthlyBlogSummary(config, visibleArticles, iocFile, iocSlug, logger)\n\n logger.log('Blog index generation completed successfully!')\n logger.saveToFile('generate-blog.log', cwd)\n\n return 0\n\n } catch (error) {\n logger.error(`Error generating blog index: ${error}`)\n return 1\n }\n}\n\n/**\n * generate blog monthly statistics details\n */\nasync function generateMonthlyBlogSummary(\n config: DevScriptsConfig,\n articles: ProcessedArticle[],\n iocFile: string,\n iocSlug: string,\n logger: Logger\n): Promise<void> {\n try {\n // filter out articles without date and slug is ioc\n const articlesWithDate = articles.filter(a => a.date && a.slug !== iocSlug)\n\n // group by month\n const monthMap: Record<string, {date: string, title: string, slug: string}[]> = {}\n for (const art of articlesWithDate) {\n // only take the first 7 digits yyyy-mm\n const month = art.date!.slice(0, 7)\n if (!monthMap[month]) monthMap[month] = []\n monthMap[month].push({ date: art.date!, title: art.title, slug: art.slug })\n }\n\n // sort months in descending order\n const sortedMonths = Object.keys(monthMap).sort((a, b) => b.localeCompare(a))\n\n // sort articles by date in descending order\n for (const month of sortedMonths) {\n monthMap[month].sort((a, b) => b.date.localeCompare(a.date))\n }\n\n // read ioc.mdx original frontmatter\n let frontmatter = ''\n try {\n const content = readFileSync(iocFile, 'utf-8')\n const match = content.match(/^---([\\s\\S]*?)---/)\n if (match && match[0]) frontmatter = match[0]\n } catch {\n // File doesn't exist, use default\n }\n\n // if there is no frontmatter, use the default\n if (!frontmatter) {\n frontmatter = '---\\ntitle: Monthly Summary\\ndescription: Index and Summary\\n---'\n }\n\n // update date field in frontmatter\n frontmatter = updateFrontmatterDate(frontmatter)\n\n // generate content\n let mdx = `${frontmatter}\\n\\n\\n## Overview\\n<Files>\\n`\n if (sortedMonths.length === 0) {\n mdx += ' <ZiaFile name=\"Comming Soon\" className=\"opacity-50\" disabled/>\\n'\n } else {\n for (const month of sortedMonths) {\n // Folder name format YYYY-MM(article count)\n const count = monthMap[month].length\n const folderTitle = `${month}(${count})`\n // default open the latest month\n const defaultOpen = month === sortedMonths[0] ? ' defaultOpen' : ''\n mdx += ` <ZiaFolder name=\"${folderTitle}\"${defaultOpen}>\\n`\n for (const art of monthMap[month]) {\n // File name=\"YYYY-MM-DD(Title)\" format\n const day = art.date.slice(0, 10)\n // refer path is /locale/blog/ioc, so here is ./X, then you'll get /locale/blog/X\n const href = art.slug ? `./${art.slug}` : '';\n mdx += ` <ZiaFile name=\"${day}(${art.title})\" href=\"${href}\" />\\n`\n }\n mdx += ` </ZiaFolder>\\n`\n }\n }\n mdx += '</Files>\\n\\n'\n\n writeFileSync(iocFile, mdx)\n logger.success(`Successfully generated Monthly Blog Summary: ${iocFile}`)\n } catch (error) {\n logger.error(`Error generating monthly blog summary: ${error}`)\n }\n} ","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} "]}
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, readJson, writeJson, remove } from 'fs-extra';
7
+ import { ensureDir, copy, pathExists, rename, readJson, writeJson, remove } from 'fs-extra';
8
8
  import os from 'os';
9
9
 
10
10
  var MONOREPO_CLEAN_TARGETS = [
@@ -230,10 +230,55 @@ async function createDiaomaoApp(targetDir) {
230
230
  execSync(`tar -xzf ${packageFile}`, { cwd: tempDir });
231
231
  const templateDir = path.join(tempDir, "package");
232
232
  await copy(templateDir, destDir, { overwrite: true });
233
+ const envTxtPath = path.join(destDir, ".env.local.txt");
234
+ const envPath = path.join(destDir, ".env.local");
235
+ if (await pathExists(envTxtPath)) {
236
+ await rename(envTxtPath, envPath);
237
+ console.log("Renamed .env.local.txt to .env.local");
238
+ }
233
239
  const pkgPath = path.join(destDir, "package.json");
234
240
  const pkg = await readJson(pkgPath);
235
241
  pkg.name = path.basename(targetDir);
242
+ pkg.version = "1.0.0";
236
243
  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"
260
+ }
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
+ };
237
282
  delete pkg.publishConfig;
238
283
  delete pkg.files;
239
284
  await writeJson(pkgPath, pkg, { spaces: 2 });
@@ -262,6 +307,7 @@ async function createDiaomaoApp(targetDir) {
262
307
  Next steps:`);
263
308
  console.log(` cd ${targetDir}`);
264
309
  console.log(` pnpm dev`);
310
+ console.log(` NOTE: please check .env.local file and set your own env!`);
265
311
  } catch (error) {
266
312
  console.error("Failed to create project:", error);
267
313
  process.exit(1);
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 } 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 // 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.private = true;\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 \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 './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 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} "]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windrun-huaiin/dev-scripts",
3
- "version": "6.6.0",
3
+ "version": "6.6.1",
4
4
  "description": "Development scripts for multilingual projects",
5
5
  "main": "dist/index.js",
6
6
  "bin": {