@windrun-huaiin/dev-scripts 6.5.3 ā 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 +142 -23
- package/dist/cli.js.map +1 -1
- package/dist/cli.mjs +119 -1
- package/dist/cli.mjs.map +1 -1
- package/package.json +4 -2
package/dist/cli.js
CHANGED
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
|
|
4
4
|
var commander = require('commander');
|
|
5
5
|
var fs = require('fs');
|
|
6
|
-
var
|
|
6
|
+
var path2 = require('path');
|
|
7
7
|
var fg = require('fast-glob');
|
|
8
8
|
var child_process = require('child_process');
|
|
9
|
+
var fsExtra = require('fs-extra');
|
|
10
|
+
var os = require('os');
|
|
9
11
|
|
|
10
12
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
13
|
|
|
12
14
|
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
13
|
-
var
|
|
15
|
+
var path2__default = /*#__PURE__*/_interopDefault(path2);
|
|
14
16
|
var fg__default = /*#__PURE__*/_interopDefault(fg);
|
|
17
|
+
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
15
18
|
|
|
16
19
|
// src/config/schema.ts
|
|
17
20
|
var DEFAULT_CONFIG = {
|
|
@@ -94,7 +97,7 @@ var DEFAULT_CONFIG = {
|
|
|
94
97
|
// src/config/index.ts
|
|
95
98
|
function loadPackageJsonConfig(cwd2) {
|
|
96
99
|
try {
|
|
97
|
-
const packageJsonPath =
|
|
100
|
+
const packageJsonPath = path2__default.default.join(cwd2, "package.json");
|
|
98
101
|
if (!fs__default.default.existsSync(packageJsonPath)) return null;
|
|
99
102
|
const packageJson = JSON.parse(fs__default.default.readFileSync(packageJsonPath, "utf8"));
|
|
100
103
|
const devScripts = packageJson.devScripts;
|
|
@@ -135,7 +138,7 @@ function loadPackageJsonConfig(cwd2) {
|
|
|
135
138
|
}
|
|
136
139
|
function loadConfigFile(cwd2) {
|
|
137
140
|
try {
|
|
138
|
-
const configPath =
|
|
141
|
+
const configPath = path2__default.default.join(cwd2, "dev-scripts.config.json");
|
|
139
142
|
if (!fs__default.default.existsSync(configPath)) {
|
|
140
143
|
return null;
|
|
141
144
|
}
|
|
@@ -259,8 +262,8 @@ var Logger = class {
|
|
|
259
262
|
*/
|
|
260
263
|
saveToFile(filename, cwd2 = typeof process !== "undefined" ? process.cwd() : ".") {
|
|
261
264
|
try {
|
|
262
|
-
const logFilePath =
|
|
263
|
-
const logDir =
|
|
265
|
+
const logFilePath = path2.join(cwd2, this.config.output.logDir, filename);
|
|
266
|
+
const logDir = path2.dirname(logFilePath);
|
|
264
267
|
fs.mkdirSync(logDir, { recursive: true });
|
|
265
268
|
fs.writeFileSync(logFilePath, this.messages.join("\n"), "utf8");
|
|
266
269
|
console.log(`log saved to ${logFilePath}`);
|
|
@@ -768,13 +771,13 @@ function getBlogPrefix(config) {
|
|
|
768
771
|
}
|
|
769
772
|
async function getAllBlogArticles(blogDir, cwd2, logger) {
|
|
770
773
|
const articles = [];
|
|
771
|
-
const blogPath =
|
|
774
|
+
const blogPath = path2.join(cwd2, blogDir);
|
|
772
775
|
try {
|
|
773
776
|
const files = fs.readdirSync(blogPath);
|
|
774
777
|
for (const file of files) {
|
|
775
778
|
if (file.endsWith(".mdx") && file !== "index.mdx") {
|
|
776
779
|
const slug = file.replace(/\.mdx$/, "");
|
|
777
|
-
const filePath =
|
|
780
|
+
const filePath = path2.join(blogPath, file);
|
|
778
781
|
try {
|
|
779
782
|
const content = fs.readFileSync(filePath, "utf-8");
|
|
780
783
|
const fm = parseFrontmatter(content);
|
|
@@ -811,10 +814,10 @@ async function generateBlogIndex(config, cwd2 = typeof process !== "undefined" ?
|
|
|
811
814
|
return 1;
|
|
812
815
|
}
|
|
813
816
|
logger.log("Starting to generate blog index...");
|
|
814
|
-
const blogPath =
|
|
815
|
-
const indexFile =
|
|
816
|
-
const metaFile =
|
|
817
|
-
const iocFile =
|
|
817
|
+
const blogPath = path2.join(cwd2, config.blog.mdxDir);
|
|
818
|
+
const indexFile = path2.join(blogPath, config.blog.outputFile || "index.mdx");
|
|
819
|
+
const metaFile = path2.join(blogPath, config.blog.metaFile || "meta.json");
|
|
820
|
+
const iocFile = path2.join(blogPath, `${config.blog.iocSlug || "ioc"}.mdx`);
|
|
818
821
|
const iocSlug = config.blog.iocSlug || "ioc";
|
|
819
822
|
const blogPrefix = getBlogPrefix(config);
|
|
820
823
|
let meta = { pages: [] };
|
|
@@ -1011,17 +1014,17 @@ var SINGLE_CLEAN_TARGETS = [
|
|
|
1011
1014
|
];
|
|
1012
1015
|
function globDirsOrFiles(pattern, cwd2, isFile) {
|
|
1013
1016
|
if (!pattern.includes("*")) {
|
|
1014
|
-
const abs =
|
|
1017
|
+
const abs = path2.resolve(cwd2, pattern);
|
|
1015
1018
|
if (isFile) {
|
|
1016
1019
|
return fs.existsSync(abs) ? [abs] : [];
|
|
1017
1020
|
}
|
|
1018
1021
|
return fs.existsSync(abs) && fs.statSync(abs).isDirectory() ? [abs] : [];
|
|
1019
1022
|
}
|
|
1020
1023
|
const [base, rest] = pattern.split("/*");
|
|
1021
|
-
const absBase =
|
|
1024
|
+
const absBase = path2.resolve(cwd2, base);
|
|
1022
1025
|
if (!fs.existsSync(absBase) || !fs.statSync(absBase).isDirectory()) return [];
|
|
1023
1026
|
const subdirs = fs.readdirSync(absBase);
|
|
1024
|
-
return subdirs.map((d) =>
|
|
1027
|
+
return subdirs.map((d) => path2.join(absBase, d, rest.replace(/^[\/]/, ""))).filter((p) => fs.existsSync(p) && (isFile ? true : fs.statSync(p).isDirectory()));
|
|
1025
1028
|
}
|
|
1026
1029
|
async function deepClean(config, yes = false, cwd2 = typeof process !== "undefined" ? process.cwd() : ".") {
|
|
1027
1030
|
const logger = new Logger(config);
|
|
@@ -1034,7 +1037,7 @@ async function deepClean(config, yes = false, cwd2 = typeof process !== "undefin
|
|
|
1034
1037
|
logger.warn("==============================");
|
|
1035
1038
|
logger.warn(`\u203C\uFE0F Current working directory: \u2B55 ${cwd2} \u2B55`);
|
|
1036
1039
|
logger.warn("==============================");
|
|
1037
|
-
const isMonorepo = fs.existsSync(
|
|
1040
|
+
const isMonorepo = fs.existsSync(path2.resolve(cwd2, "pnpm-workspace.yaml"));
|
|
1038
1041
|
const cleanTargets = isMonorepo ? MONOREPO_CLEAN_TARGETS : SINGLE_CLEAN_TARGETS;
|
|
1039
1042
|
let totalToDelete = [];
|
|
1040
1043
|
let groupDeleteMap = {};
|
|
@@ -1105,9 +1108,9 @@ async function easyChangeset(cwd2 = typeof process !== "undefined" ? process.cwd
|
|
|
1105
1108
|
console.log("==============================");
|
|
1106
1109
|
console.log(`\u203C\uFE0F Current working directory: \u2B55 ${cwd2} \u2B55`);
|
|
1107
1110
|
console.log("==============================");
|
|
1108
|
-
const changesetDir =
|
|
1109
|
-
const mdxFile =
|
|
1110
|
-
const mdFile =
|
|
1111
|
+
const changesetDir = path2.join(cwd2, ".changeset");
|
|
1112
|
+
const mdxFile = path2.join(changesetDir, "d8-template.mdx");
|
|
1113
|
+
const mdFile = path2.join(changesetDir, "d8-template.md");
|
|
1111
1114
|
if (!fs.existsSync(changesetDir)) {
|
|
1112
1115
|
console.log("\u274C No .changeset directory found, skipping.");
|
|
1113
1116
|
return 1;
|
|
@@ -1161,11 +1164,11 @@ async function generateNextjsArchitecture(config, cwd2 = typeof process !== "und
|
|
|
1161
1164
|
return mdx2;
|
|
1162
1165
|
};
|
|
1163
1166
|
var renderTree = renderTree2;
|
|
1164
|
-
const logsDir =
|
|
1165
|
-
const blogDir =
|
|
1167
|
+
const logsDir = path2.join(cwd2, config.output?.logDir || "logs");
|
|
1168
|
+
const blogDir = path2.join(cwd2, config.blog?.mdxDir || "src/mdx/blog");
|
|
1166
1169
|
if (!fs.existsSync(logsDir)) fs.mkdirSync(logsDir, { recursive: true });
|
|
1167
1170
|
if (!fs.existsSync(blogDir)) fs.mkdirSync(blogDir, { recursive: true });
|
|
1168
|
-
const treeJsonPath =
|
|
1171
|
+
const treeJsonPath = path2.join(logsDir, "project_tree.json");
|
|
1169
1172
|
logger.log(`Running tree command to generate ${treeJsonPath}`);
|
|
1170
1173
|
child_process.execSync(`tree -a -J -I '.next|node_modules|logs|dist|pnpm-lock.yaml|turbo|.turbo|public|.cursor|.DS_Store|.git' > ${treeJsonPath}`);
|
|
1171
1174
|
const tree = readJsonFile(treeJsonPath);
|
|
@@ -1188,7 +1191,7 @@ date: ${getCurrentDateString2()}
|
|
|
1188
1191
|
const filesContent = renderTree2(tree);
|
|
1189
1192
|
const indentedFilesContent = filesContent.split("\n").map((line) => line ? " " + line : "").join("\n");
|
|
1190
1193
|
const mdx = frontmatter + "<Files>\n" + indentedFilesContent + "</Files>\n";
|
|
1191
|
-
const outputMdxPath =
|
|
1194
|
+
const outputMdxPath = path2.join(blogDir, "nextjs-architecture.mdx");
|
|
1192
1195
|
fs.writeFileSync(outputMdxPath, mdx);
|
|
1193
1196
|
logger.success(`Successfully generated ${outputMdxPath}`);
|
|
1194
1197
|
logger.saveToFile("generate-nextjs-architecture.log", cwd2);
|
|
@@ -1198,6 +1201,112 @@ date: ${getCurrentDateString2()}
|
|
|
1198
1201
|
return 1;
|
|
1199
1202
|
}
|
|
1200
1203
|
}
|
|
1204
|
+
async function createDiaomaoApp(targetDir) {
|
|
1205
|
+
if (!targetDir) {
|
|
1206
|
+
console.error("Usage: create-diaomao-app <project-name>");
|
|
1207
|
+
process.exit(1);
|
|
1208
|
+
}
|
|
1209
|
+
const destDir = path2__default.default.resolve(process.cwd(), targetDir);
|
|
1210
|
+
const tempDir = path2__default.default.join(os__default.default.tmpdir(), `diaomao-template-${Date.now()}`);
|
|
1211
|
+
console.log(`Creating project: ${targetDir}...`);
|
|
1212
|
+
try {
|
|
1213
|
+
await fsExtra.ensureDir(tempDir);
|
|
1214
|
+
console.log("Downloading diaomao template from npm...");
|
|
1215
|
+
child_process.execSync(`npm pack @windrun-huaiin/diaomao`, { cwd: tempDir, stdio: "inherit" });
|
|
1216
|
+
const packageFiles = child_process.execSync("ls *.tgz", { cwd: tempDir, encoding: "utf8" }).trim().split("\n");
|
|
1217
|
+
const packageFile = packageFiles[0];
|
|
1218
|
+
child_process.execSync(`tar -xzf ${packageFile}`, { cwd: tempDir });
|
|
1219
|
+
const templateDir = path2__default.default.join(tempDir, "package");
|
|
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
|
+
}
|
|
1227
|
+
const pkgPath = path2__default.default.join(destDir, "package.json");
|
|
1228
|
+
const pkg = await fsExtra.readJson(pkgPath);
|
|
1229
|
+
pkg.name = path2__default.default.basename(targetDir);
|
|
1230
|
+
pkg.version = "1.0.0";
|
|
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
|
+
};
|
|
1270
|
+
delete pkg.publishConfig;
|
|
1271
|
+
delete pkg.files;
|
|
1272
|
+
await fsExtra.writeJson(pkgPath, pkg, { spaces: 2 });
|
|
1273
|
+
console.log("Installing dependencies...");
|
|
1274
|
+
try {
|
|
1275
|
+
child_process.execSync("pnpm install", { cwd: destDir, stdio: "inherit" });
|
|
1276
|
+
} catch (error) {
|
|
1277
|
+
console.warn("pnpm failed, trying npm...");
|
|
1278
|
+
try {
|
|
1279
|
+
child_process.execSync("npm install", { cwd: destDir, stdio: "inherit" });
|
|
1280
|
+
} catch (npmError) {
|
|
1281
|
+
console.error("Failed to install dependencies. Please run npm install or pnpm install manually.");
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
console.log("Initializing Git repository...");
|
|
1285
|
+
try {
|
|
1286
|
+
child_process.execSync("git init", { cwd: destDir, stdio: "inherit" });
|
|
1287
|
+
child_process.execSync("git add .", { cwd: destDir, stdio: "inherit" });
|
|
1288
|
+
child_process.execSync('git commit -m "feat: initial commit from diaomao template"', { cwd: destDir, stdio: "inherit" });
|
|
1289
|
+
} catch (error) {
|
|
1290
|
+
console.warn("Failed to initialize Git repository. Please initialize manually.");
|
|
1291
|
+
}
|
|
1292
|
+
console.log(`
|
|
1293
|
+
\u2705 Project created: ${destDir}`);
|
|
1294
|
+
console.log(`
|
|
1295
|
+
Next steps:`);
|
|
1296
|
+
console.log(` cd ${targetDir}`);
|
|
1297
|
+
console.log(` pnpm dev`);
|
|
1298
|
+
console.log(` NOTE: please check .env.local file and set your own env!`);
|
|
1299
|
+
} catch (error) {
|
|
1300
|
+
console.error("Failed to create project:", error);
|
|
1301
|
+
process.exit(1);
|
|
1302
|
+
} finally {
|
|
1303
|
+
try {
|
|
1304
|
+
await fsExtra.remove(tempDir);
|
|
1305
|
+
} catch (cleanupError) {
|
|
1306
|
+
console.warn("Failed to cleanup temporary directory:", tempDir);
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
}
|
|
1201
1310
|
|
|
1202
1311
|
// src/cli.ts
|
|
1203
1312
|
var cwd = typeof process !== "undefined" ? process.cwd() : ".";
|
|
@@ -1305,6 +1414,16 @@ commander.program.command("generate-nextjs-architecture").description("generate
|
|
|
1305
1414
|
}
|
|
1306
1415
|
}
|
|
1307
1416
|
});
|
|
1417
|
+
commander.program.command("create-diaomao-app <project-name>").description("create a new diaomao app from template").action(async (projectName) => {
|
|
1418
|
+
try {
|
|
1419
|
+
await createDiaomaoApp(projectName);
|
|
1420
|
+
} catch (error) {
|
|
1421
|
+
console.error("Error:", error);
|
|
1422
|
+
if (typeof process !== "undefined") {
|
|
1423
|
+
process.exit(1);
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
});
|
|
1308
1427
|
if (typeof process !== "undefined") {
|
|
1309
1428
|
commander.program.parse(process.argv);
|
|
1310
1429
|
}
|
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/cli.ts"],"names":["cwd","path","fs","join","dirname","mkdirSync","writeFileSync","fg","readFileSync","match","readdirSync","resolve","existsSync","statSync","unlinkSync","rmSync","getCurrentDateString","renderTree","mdx","execSync","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, '"')\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} ","#!/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'\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\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, '"')\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
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
import { loadConfig, validateConfig, checkTranslations, cleanTranslations, generateBlogIndex, Logger, DEFAULT_CONFIG, readJsonFile } from './chunk-5BCB7TCA.mjs';
|
|
3
3
|
import { program } from 'commander';
|
|
4
4
|
import { existsSync, unlinkSync, rmSync, readFileSync, writeFileSync, mkdirSync, statSync, readdirSync } from 'fs';
|
|
5
|
-
import { resolve, join } from 'path';
|
|
5
|
+
import path, { resolve, join } from 'path';
|
|
6
6
|
import { execSync } from 'child_process';
|
|
7
|
+
import { ensureDir, copy, pathExists, rename, readJson, writeJson, remove } from 'fs-extra';
|
|
8
|
+
import os from 'os';
|
|
7
9
|
|
|
8
10
|
var MONOREPO_CLEAN_TARGETS = [
|
|
9
11
|
{ pattern: "node_modules", description: "Root directory dependencies" },
|
|
@@ -211,6 +213,112 @@ date: ${getCurrentDateString()}
|
|
|
211
213
|
return 1;
|
|
212
214
|
}
|
|
213
215
|
}
|
|
216
|
+
async function createDiaomaoApp(targetDir) {
|
|
217
|
+
if (!targetDir) {
|
|
218
|
+
console.error("Usage: create-diaomao-app <project-name>");
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
const destDir = path.resolve(process.cwd(), targetDir);
|
|
222
|
+
const tempDir = path.join(os.tmpdir(), `diaomao-template-${Date.now()}`);
|
|
223
|
+
console.log(`Creating project: ${targetDir}...`);
|
|
224
|
+
try {
|
|
225
|
+
await ensureDir(tempDir);
|
|
226
|
+
console.log("Downloading diaomao template from npm...");
|
|
227
|
+
execSync(`npm pack @windrun-huaiin/diaomao`, { cwd: tempDir, stdio: "inherit" });
|
|
228
|
+
const packageFiles = execSync("ls *.tgz", { cwd: tempDir, encoding: "utf8" }).trim().split("\n");
|
|
229
|
+
const packageFile = packageFiles[0];
|
|
230
|
+
execSync(`tar -xzf ${packageFile}`, { cwd: tempDir });
|
|
231
|
+
const templateDir = path.join(tempDir, "package");
|
|
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
|
+
}
|
|
239
|
+
const pkgPath = path.join(destDir, "package.json");
|
|
240
|
+
const pkg = await readJson(pkgPath);
|
|
241
|
+
pkg.name = path.basename(targetDir);
|
|
242
|
+
pkg.version = "1.0.0";
|
|
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
|
+
};
|
|
282
|
+
delete pkg.publishConfig;
|
|
283
|
+
delete pkg.files;
|
|
284
|
+
await writeJson(pkgPath, pkg, { spaces: 2 });
|
|
285
|
+
console.log("Installing dependencies...");
|
|
286
|
+
try {
|
|
287
|
+
execSync("pnpm install", { cwd: destDir, stdio: "inherit" });
|
|
288
|
+
} catch (error) {
|
|
289
|
+
console.warn("pnpm failed, trying npm...");
|
|
290
|
+
try {
|
|
291
|
+
execSync("npm install", { cwd: destDir, stdio: "inherit" });
|
|
292
|
+
} catch (npmError) {
|
|
293
|
+
console.error("Failed to install dependencies. Please run npm install or pnpm install manually.");
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
console.log("Initializing Git repository...");
|
|
297
|
+
try {
|
|
298
|
+
execSync("git init", { cwd: destDir, stdio: "inherit" });
|
|
299
|
+
execSync("git add .", { cwd: destDir, stdio: "inherit" });
|
|
300
|
+
execSync('git commit -m "feat: initial commit from diaomao template"', { cwd: destDir, stdio: "inherit" });
|
|
301
|
+
} catch (error) {
|
|
302
|
+
console.warn("Failed to initialize Git repository. Please initialize manually.");
|
|
303
|
+
}
|
|
304
|
+
console.log(`
|
|
305
|
+
\u2705 Project created: ${destDir}`);
|
|
306
|
+
console.log(`
|
|
307
|
+
Next steps:`);
|
|
308
|
+
console.log(` cd ${targetDir}`);
|
|
309
|
+
console.log(` pnpm dev`);
|
|
310
|
+
console.log(` NOTE: please check .env.local file and set your own env!`);
|
|
311
|
+
} catch (error) {
|
|
312
|
+
console.error("Failed to create project:", error);
|
|
313
|
+
process.exit(1);
|
|
314
|
+
} finally {
|
|
315
|
+
try {
|
|
316
|
+
await remove(tempDir);
|
|
317
|
+
} catch (cleanupError) {
|
|
318
|
+
console.warn("Failed to cleanup temporary directory:", tempDir);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
214
322
|
|
|
215
323
|
// src/cli.ts
|
|
216
324
|
var cwd = typeof process !== "undefined" ? process.cwd() : ".";
|
|
@@ -318,6 +426,16 @@ program.command("generate-nextjs-architecture").description("generate nextjs-arc
|
|
|
318
426
|
}
|
|
319
427
|
}
|
|
320
428
|
});
|
|
429
|
+
program.command("create-diaomao-app <project-name>").description("create a new diaomao app from template").action(async (projectName) => {
|
|
430
|
+
try {
|
|
431
|
+
await createDiaomaoApp(projectName);
|
|
432
|
+
} catch (error) {
|
|
433
|
+
console.error("Error:", error);
|
|
434
|
+
if (typeof process !== "undefined") {
|
|
435
|
+
process.exit(1);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
});
|
|
321
439
|
if (typeof process !== "undefined") {
|
|
322
440
|
program.parse(process.argv);
|
|
323
441
|
}
|
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/cli.ts"],"names":["cwd","join","existsSync","renderTree","mdx","writeFileSync"],"mappings":";;;;;;;AAWA,IAAM,sBAAA,GAAwC;AAAA,EAC5C,EAAE,OAAA,EAAS,cAAA,EAAgB,WAAA,EAAa,6BAAA,EAA8B;AAAA,EACtE,EAAE,OAAA,EAAS,yBAAA,EAA2B,WAAA,EAAa,sBAAA,EAAuB;AAAA,EAC1E,EAAE,OAAA,EAAS,qBAAA,EAAuB,WAAA,EAAa,0BAAA,EAA2B;AAAA,EAC1E,EAAE,OAAA,EAAS,cAAA,EAAgB,WAAA,EAAa,eAAA,EAAgB;AAAA,EACxD,EAAE,OAAA,EAAS,iBAAA,EAAmB,WAAA,EAAa,yBAAA,EAA0B;AAAA,EACrE,EAAE,OAAA,EAAS,aAAA,EAAe,WAAA,EAAa,6BAAA,EAA8B;AAAA,EACrE,EAAE,OAAA,EAAS,QAAA,EAAU,WAAA,EAAa,4BAAA,EAA6B;AAAA,EAC/D,EAAE,OAAA,EAAS,mBAAA,EAAqB,WAAA,EAAa,qBAAA,EAAsB;AAAA,EACnE,EAAE,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,yBAAA,EAA0B;AAAA,EACnE,EAAE,OAAA,EAAS,gBAAA,EAAkB,WAAA,EAAa,gBAAA,EAAkB,QAAQ,IAAA;AACtE,CAAA;AAEA,IAAM,oBAAA,GAAsC;AAAA,EAC1C,EAAE,OAAA,EAAS,cAAA,EAAgB,WAAA,EAAa,6BAAA,EAA8B;AAAA,EACtE,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,eAAA,EAAgB;AAAA,EACjD,EAAE,OAAA,EAAS,gBAAA,EAAkB,WAAA,EAAa,gBAAA,EAAkB,QAAQ,IAAA;AACtE,CAAA;AAEA,SAAS,eAAA,CAAgB,OAAA,EAAiBA,IAAAA,EAAa,MAAA,EAA4B;AACjF,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQA,IAAAA,EAAK,OAAO,CAAA;AAChC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,WAAW,GAAG,CAAA,GAAI,CAAC,GAAG,IAAI,EAAC;AAAA,IACpC;AACA,IAAA,OAAO,UAAA,CAAW,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,CAAE,WAAA,EAAY,GAAI,CAAC,GAAG,CAAA,GAAI,EAAC;AAAA,EACnE;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,OAAA,CAAQ,MAAM,IAAI,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQA,IAAAA,EAAK,IAAI,CAAA;AACjC,EAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,IAAK,CAAC,QAAA,CAAS,OAAO,CAAA,CAAE,WAAA,EAAY,EAAG,OAAO,EAAC;AACtE,EAAA,MAAM,OAAA,GAAU,YAAY,OAAO,CAAA;AACnC,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,IAAA,CAAK,OAAA,EAAS,GAAG,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAC,EAChE,MAAA,CAAO,CAAA,CAAA,KAAK,UAAA,CAAW,CAAC,CAAA,KAAM,MAAA,GAAS,OAAO,QAAA,CAAS,CAAC,CAAA,CAAE,WAAA,EAAY,CAAE,CAAA;AAC7E;AAEA,eAAsB,SAAA,CACpB,MAAA,EACA,GAAA,GAAe,KAAA,EACfA,IAAAA,GAAc,OAAO,OAAA,KAAY,WAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,GAAI,GAAA,EAC9C;AACjB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAM,CAAA;AAEhC,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,MAAA,CAAO,MAAM,+DAA0D,CAAA;AACvE,IAAA,MAAA,CAAO,IAAI,4DAA4D,CAAA;AACvE,IAAA,MAAA,CAAO,UAAA,CAAW,kBAAkBA,IAAG,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAA,CAAO,KAAK,gCAAgC,CAAA;AAC5C,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iDAAA,EAAqCA,IAAG,CAAA,QAAA,CAAK,CAAA;AACzD,EAAA,MAAA,CAAO,KAAK,gCAAgC,CAAA;AAG5C,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQA,IAAAA,EAAK,qBAAqB,CAAC,CAAA;AACjE,EAAA,MAAM,YAAA,GAA8B,aAAa,sBAAA,GAAyB,oBAAA;AAE1E,EAAA,IAAI,gBAA0B,EAAC;AAC/B,EAAA,IAAI,iBAA2C,EAAC;AAEhD,EAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,IAAA,MAAM,QAAQ,eAAA,CAAgB,MAAA,CAAO,OAAA,EAASA,IAAAA,EAAK,OAAO,MAAM,CAAA;AAChE,IAAA,cAAA,CAAe,MAAA,CAAO,WAAW,CAAA,GAAI,KAAA;AACrC,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,YAAA,EAAQ,MAAA,CAAO,WAAW,CAAA,kBAAA,CAAoB,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAA,CAAI;AAAA,CAAA,EAAM,MAAA,CAAO,WAAW,CAAA,CAAA,CAAG,CAAA;AACtC,MAAA,KAAA,CAAM,QAAQ,CAAA,CAAA,KAAK,MAAA,CAAO,KAAK,CAAA,qBAAA,EAAiB,CAAC,EAAE,CAAC,CAAA;AACpD,MAAA,aAAA,CAAc,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,MAAA,CAAO,QAAQ,mCAAmC,CAAA;AAClD,IAAA,MAAA,CAAO,UAAA,CAAW,kBAAkBA,IAAG,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAA,CAAO,IAAI,+DAA+D,CAAA;AAC1E,IAAA,MAAA,CAAO,UAAA,CAAW,kBAAkBA,IAAG,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,MAAA,CAAO,WAAW,KAAK,EAAC;AACrD,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAA,CAAO,GAAA,CAAI;AAAA,CAAA,EAAM,MAAA,CAAO,WAAW,CAAA,CAAA,CAAG,CAAA;AACtC,MAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,QAAA,IAAI;AACF,UAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,YAAA,UAAA,CAAW,CAAC,CAAA;AACZ,YAAA,IAAI,CAAC,UAAA,CAAW,CAAC,CAAA,EAAG;AAClB,cAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,mBAAA,EAAe,CAAC,CAAA,CAAE,CAAA;AACjC,cAAA,OAAA,EAAA;AAAA,YACF,CAAA,MAAO;AACL,cAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAoB,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAAA,YAC1D;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,UAAA,EAAY,CAAA,EAAG,UAAA,EAAY,GAAA,EAAK,CAAA;AAC1E,YAAA,IAAI,CAAC,UAAA,CAAW,CAAC,CAAA,EAAG;AAClB,cAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,mBAAA,EAAe,CAAC,CAAA,CAAE,CAAA;AACjC,cAAA,OAAA,EAAA;AAAA,YACF,CAAA,MAAO;AACL,cAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAoB,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAAA,YAC/D;AAAA,UACF;AAAA,QACF,SAAS,CAAA,EAAQ;AACf,UAAA,MAAA,CAAO,MAAM,CAAA,sBAAA,EAAoB,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAA,CAAO,GAAA,CAAI;AAAA,yBAAA,EAAuB,OAAO,CAAA,sBAAA,CAAwB,CAAA;AACjE,EAAA,MAAA,CAAO,UAAA,CAAW,kBAAkBA,IAAG,CAAA;AACvC,EAAA,OAAO,CAAA;AACT;AC9HA,eAAsB,aAAA,CAAcA,OAAc,OAAO,OAAA,KAAY,cAAc,OAAA,CAAQ,GAAA,KAAQ,GAAA,EAAK;AAEtG,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,OAAA,CAAQ,IAAI,+DAA0D,CAAA;AACtE,IAAA,OAAA,CAAQ,IAAI,4DAA4D,CAAA;AACxE,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,OAAA,CAAQ,IAAI,gCAAgC,CAAA;AAC5C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iDAAA,EAAqCA,IAAG,CAAA,QAAA,CAAK,CAAA;AACzD,EAAA,OAAA,CAAQ,IAAI,gCAAgC,CAAA;AAE5C,EAAA,MAAM,YAAA,GAAeC,IAAAA,CAAKD,IAAAA,EAAK,YAAY,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAUC,IAAAA,CAAK,YAAA,EAAc,iBAAiB,CAAA;AACpD,EAAA,MAAM,MAAA,GAASA,IAAAA,CAAK,YAAA,EAAc,gBAAgB,CAAA;AAElD,EAAA,IAAI,CAACC,UAAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,IAAA,OAAA,CAAQ,IAAI,iDAA4C,CAAA;AACxD,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,CAACA,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAA,OAAA,CAAQ,IAAI,4DAAuD,CAAA;AACnE,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAC7C,IAAA,aAAA,CAAc,MAAA,EAAQ,SAAS,OAAO,CAAA;AACtC,IAAA,OAAA,CAAQ,IAAI,yDAAoD,CAAA;AAChE,IAAA,OAAO,CAAA;AAAA,EACT,SAAS,CAAA,EAAQ;AACf,IAAA,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAkB,CAAA,CAAE,OAAO,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AC7BA,SAAS,oBAAA,GAA+B;AACtC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY;AAC7B,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAA,CAAI,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACxD,EAAA,MAAM,GAAA,GAAM,OAAO,GAAA,CAAI,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACjD,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,GAAG,CAAA,CAAA;AAChC;AAEA,eAAsB,0BAAA,CACpB,QACAF,IAAAA,GAAc,OAAO,YAAY,WAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,GAAI,GAAA,EAC9C;AACjB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAM,CAAA;AAChC,EAAA,IAAI;AAsBF,IAAA,IAASG,cAAT,SAAoB,KAAA,EAAc,KAAA,GAAQ,CAAA,EAAG,aAAqB,EAAA,EAAY;AAC5E,MAAA,IAAIC,IAAAA,GAAM,EAAA;AACV,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,QAAA,GAAW,aAAa,CAAA,EAAG,UAAU,IAAI,IAAA,CAAK,IAAI,KAAK,IAAA,CAAK,IAAA;AAClE,QAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,IAAK,EAAA;AAEjD,QAAA,MAAM,cAAe,KAAA,KAAU,CAAA,IAAK,KAAK,IAAA,KAAS,GAAA,GAAO,SAAS,IAAA,CAAK,IAAA;AACvE,QAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,UAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAEhD,YAAAA,IAAAA,IAAO,GAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,iBAAA,EAAoB,WAAW,CAAA,WAAA,EAAc,OAAO,CAAA;AAAA,CAAA;AAAA,UAClF,CAAA,MAAO;AAEL,YAAAA,IAAAA,IAAO,GAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,iBAAA,EAAoB,WAAW,CAAA,WAAA,EAAc,OAAO,CAAA;AAAA,CAAA;AAChF,YAAAA,QAAOD,WAAAA,CAAW,IAAA,CAAK,QAAA,EAAU,KAAA,GAAQ,GAAG,QAAQ,CAAA;AACpD,YAAAC,IAAAA,IAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,CAAA;AAAA,UAC9B;AAAA,QACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAC/B,UAAAA,IAAAA,IAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,WAAA,EAAc,OAAO,CAAA;AAAA,CAAA;AAAA,QAC9E;AAAA,MACF;AACA,MAAA,OAAOA,IAAAA;AAAA,IACT,CAAA;AAtBS,IAAA,IAAA,UAAA,GAAAD,WAAAA;AApBT,IAAA,MAAM,UAAUF,IAAAA,CAAKD,IAAAA,EAAK,MAAA,CAAO,MAAA,EAAQ,UAAU,MAAM,CAAA;AACzD,IAAA,MAAM,UAAUC,IAAAA,CAAKD,IAAAA,EAAK,MAAA,CAAO,IAAA,EAAM,UAAU,cAAc,CAAA;AAC/D,IAAA,IAAI,CAACE,WAAW,OAAO,CAAA,YAAa,OAAA,EAAS,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAChE,IAAA,IAAI,CAACA,WAAW,OAAO,CAAA,YAAa,OAAA,EAAS,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAGhE,IAAA,MAAM,YAAA,GAAeD,IAAAA,CAAK,OAAA,EAAS,mBAAmB,CAAA;AACtD,IAAA,MAAA,CAAO,GAAA,CAAI,CAAA,iCAAA,EAAoC,YAAY,CAAA,CAAE,CAAA;AAC7D,IAAA,QAAA,CAAS,CAAA,yGAAA,EAA4G,YAAY,CAAA,CAAE,CAAA;AAGnI,IAAA,MAAM,IAAA,GAAO,aAAoB,YAAY,CAAA;AAC7C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAA,CAAO,MAAM,kCAAkC,CAAA;AAC/C,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,kBAAA,IAAsB,EAAC;AACjD,IAAA,MAAM,kBAAA,GAAqB,EAAE,GAAI,cAAA,CAAe,sBAAsB,EAAC,EAAI,GAAG,UAAA,EAAW;AA2BzF,IAAA,MAAM,WAAA,GAAc,CAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAAmH,sBAAsB;AAAA;;AAAA;;AAAA,CAAA;AAE7J,IAAA,MAAM,YAAA,GAAeE,YAAW,IAAI,CAAA;AACpC,IAAA,MAAM,oBAAA,GAAuB,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,GAAO,IAAA,GAAO,IAAA,GAAO,EAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACpG,IAAA,MAAM,GAAA,GAAM,WAAA,GAAc,WAAA,GAAc,oBAAA,GAAuB,YAAA;AAE/D,IAAA,MAAM,aAAA,GAAgBF,IAAAA,CAAK,OAAA,EAAS,yBAAyB,CAAA;AAC7D,IAAAI,aAAAA,CAAc,eAAe,GAAG,CAAA;AAChC,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,uBAAA,EAA0B,aAAa,CAAA,CAAE,CAAA;AACxD,IAAA,MAAA,CAAO,UAAA,CAAW,oCAAoCL,IAAG,CAAA;AACzD,IAAA,OAAO,CAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,0CAAA,EAA6C,KAAK,CAAA,CAAE,CAAA;AACjE,IAAA,OAAO,CAAA;AAAA,EACT;AACF;;;ACtEA,IAAM,MAAM,OAAO,OAAA,KAAY,WAAA,GAAc,OAAA,CAAQ,KAAI,GAAI,GAAA;AAE7D,OAAA,CACG,KAAK,aAAa,CAAA,CAClB,YAAY,iDAAiD,CAAA,CAC7D,QAAQ,OAAO,CAAA;AAElB,OAAA,CACG,OAAA,CAAQ,oBAAoB,CAAA,CAC5B,WAAA,CAAY,6DAA6D,CAAA,CACzE,MAAA,CAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAGlD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AAEA,IAAA,cAAA,CAAe,MAAM,CAAA;AAErB,IAAA,MAAM,QAAA,GAAW,MAAM,iBAAA,CAAkB,MAAA,EAAQ,GAAG,CAAA;AAEpD,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,QAAQ,oBAAoB,CAAA,CAC5B,YAAY,+BAA+B,CAAA,CAC3C,OAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,OAAO,UAAA,EAAY,iDAAA,EAAmD,KAAK,CAAA,CAC3E,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAGlD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AAEA,IAAA,cAAA,CAAe,MAAM,CAAA;AAErB,IAAA,MAAM,WAAW,MAAM,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAEpE,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,OAAA,CAAQ,qBAAqB,CAAA,CAC7B,WAAA,CAAY,0BAA0B,CAAA,CACtC,MAAA,CAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAGlD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AAEA,IAAA,cAAA,CAAe,MAAM,CAAA;AAErB,IAAA,MAAM,QAAA,GAAW,MAAM,iBAAA,CAAkB,MAAA,EAAQ,GAAG,CAAA;AAEpD,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,QAAQ,YAAY,CAAA,CACpB,YAAY,4EAA4E,CAAA,CACxF,OAAO,OAAA,EAAS,4DAAA,EAA8D,KAAK,CAAA,CACnF,OAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAClD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AACA,IAAA,cAAA,CAAe,MAAM,CAAA;AACrB,IAAA,MAAM,WAAW,MAAM,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,KAAK,GAAG,CAAA;AACzD,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,QAAQ,gBAAgB,CAAA,CACxB,YAAY,4EAA4E,CAAA,CACxF,OAAO,YAAY;AAClB,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAG,CAAA;AACxC,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,OAAA,CAAQ,8BAA8B,CAAA,CACtC,WAAA,CAAY,wDAAwD,CAAA,CACpE,MAAA,CAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAClD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AACA,IAAA,cAAA,CAAe,MAAM,CAAA;AACrB,IAAA,MAAM,QAAA,GAAW,MAAM,0BAAA,CAA2B,MAAA,EAAQ,GAAG,CAAA;AAC7D,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAGH,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,EAAA,OAAA,CAAQ,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC5B","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} ","#!/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'\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\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":";;;;;;;;;AAWA,IAAM,sBAAA,GAAwC;AAAA,EAC5C,EAAE,OAAA,EAAS,cAAA,EAAgB,WAAA,EAAa,6BAAA,EAA8B;AAAA,EACtE,EAAE,OAAA,EAAS,yBAAA,EAA2B,WAAA,EAAa,sBAAA,EAAuB;AAAA,EAC1E,EAAE,OAAA,EAAS,qBAAA,EAAuB,WAAA,EAAa,0BAAA,EAA2B;AAAA,EAC1E,EAAE,OAAA,EAAS,cAAA,EAAgB,WAAA,EAAa,eAAA,EAAgB;AAAA,EACxD,EAAE,OAAA,EAAS,iBAAA,EAAmB,WAAA,EAAa,yBAAA,EAA0B;AAAA,EACrE,EAAE,OAAA,EAAS,aAAA,EAAe,WAAA,EAAa,6BAAA,EAA8B;AAAA,EACrE,EAAE,OAAA,EAAS,QAAA,EAAU,WAAA,EAAa,4BAAA,EAA6B;AAAA,EAC/D,EAAE,OAAA,EAAS,mBAAA,EAAqB,WAAA,EAAa,qBAAA,EAAsB;AAAA,EACnE,EAAE,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,yBAAA,EAA0B;AAAA,EACnE,EAAE,OAAA,EAAS,gBAAA,EAAkB,WAAA,EAAa,gBAAA,EAAkB,QAAQ,IAAA;AACtE,CAAA;AAEA,IAAM,oBAAA,GAAsC;AAAA,EAC1C,EAAE,OAAA,EAAS,cAAA,EAAgB,WAAA,EAAa,6BAAA,EAA8B;AAAA,EACtE,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,eAAA,EAAgB;AAAA,EACjD,EAAE,OAAA,EAAS,gBAAA,EAAkB,WAAA,EAAa,gBAAA,EAAkB,QAAQ,IAAA;AACtE,CAAA;AAEA,SAAS,eAAA,CAAgB,OAAA,EAAiBA,IAAAA,EAAa,MAAA,EAA4B;AACjF,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1B,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQA,IAAAA,EAAK,OAAO,CAAA;AAChC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,WAAW,GAAG,CAAA,GAAI,CAAC,GAAG,IAAI,EAAC;AAAA,IACpC;AACA,IAAA,OAAO,UAAA,CAAW,GAAG,CAAA,IAAK,QAAA,CAAS,GAAG,CAAA,CAAE,WAAA,EAAY,GAAI,CAAC,GAAG,CAAA,GAAI,EAAC;AAAA,EACnE;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,OAAA,CAAQ,MAAM,IAAI,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQA,IAAAA,EAAK,IAAI,CAAA;AACjC,EAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,IAAK,CAAC,QAAA,CAAS,OAAO,CAAA,CAAE,WAAA,EAAY,EAAG,OAAO,EAAC;AACtE,EAAA,MAAM,OAAA,GAAU,YAAY,OAAO,CAAA;AACnC,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,IAAA,CAAK,OAAA,EAAS,GAAG,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAC,EAChE,MAAA,CAAO,CAAA,CAAA,KAAK,UAAA,CAAW,CAAC,CAAA,KAAM,MAAA,GAAS,OAAO,QAAA,CAAS,CAAC,CAAA,CAAE,WAAA,EAAY,CAAE,CAAA;AAC7E;AAEA,eAAsB,SAAA,CACpB,MAAA,EACA,GAAA,GAAe,KAAA,EACfA,IAAAA,GAAc,OAAO,OAAA,KAAY,WAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,GAAI,GAAA,EAC9C;AACjB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAM,CAAA;AAEhC,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,MAAA,CAAO,MAAM,+DAA0D,CAAA;AACvE,IAAA,MAAA,CAAO,IAAI,4DAA4D,CAAA;AACvE,IAAA,MAAA,CAAO,UAAA,CAAW,kBAAkBA,IAAG,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAA,CAAO,KAAK,gCAAgC,CAAA;AAC5C,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iDAAA,EAAqCA,IAAG,CAAA,QAAA,CAAK,CAAA;AACzD,EAAA,MAAA,CAAO,KAAK,gCAAgC,CAAA;AAG5C,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQA,IAAAA,EAAK,qBAAqB,CAAC,CAAA;AACjE,EAAA,MAAM,YAAA,GAA8B,aAAa,sBAAA,GAAyB,oBAAA;AAE1E,EAAA,IAAI,gBAA0B,EAAC;AAC/B,EAAA,IAAI,iBAA2C,EAAC;AAEhD,EAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,IAAA,MAAM,QAAQ,eAAA,CAAgB,MAAA,CAAO,OAAA,EAASA,IAAAA,EAAK,OAAO,MAAM,CAAA;AAChE,IAAA,cAAA,CAAe,MAAA,CAAO,WAAW,CAAA,GAAI,KAAA;AACrC,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,YAAA,EAAQ,MAAA,CAAO,WAAW,CAAA,kBAAA,CAAoB,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAA,CAAI;AAAA,CAAA,EAAM,MAAA,CAAO,WAAW,CAAA,CAAA,CAAG,CAAA;AACtC,MAAA,KAAA,CAAM,QAAQ,CAAA,CAAA,KAAK,MAAA,CAAO,KAAK,CAAA,qBAAA,EAAiB,CAAC,EAAE,CAAC,CAAA;AACpD,MAAA,aAAA,CAAc,IAAA,CAAK,GAAG,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,MAAA,CAAO,QAAQ,mCAAmC,CAAA;AAClD,IAAA,MAAA,CAAO,UAAA,CAAW,kBAAkBA,IAAG,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAA,CAAO,IAAI,+DAA+D,CAAA;AAC1E,IAAA,MAAA,CAAO,UAAA,CAAW,kBAAkBA,IAAG,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,MAAA,CAAO,WAAW,KAAK,EAAC;AACrD,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAA,CAAO,GAAA,CAAI;AAAA,CAAA,EAAM,MAAA,CAAO,WAAW,CAAA,CAAA,CAAG,CAAA;AACtC,MAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,QAAA,IAAI;AACF,UAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,YAAA,UAAA,CAAW,CAAC,CAAA;AACZ,YAAA,IAAI,CAAC,UAAA,CAAW,CAAC,CAAA,EAAG;AAClB,cAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,mBAAA,EAAe,CAAC,CAAA,CAAE,CAAA;AACjC,cAAA,OAAA,EAAA;AAAA,YACF,CAAA,MAAO;AACL,cAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAoB,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAAA,YAC1D;AAAA,UACF,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,UAAA,EAAY,CAAA,EAAG,UAAA,EAAY,GAAA,EAAK,CAAA;AAC1E,YAAA,IAAI,CAAC,UAAA,CAAW,CAAC,CAAA,EAAG;AAClB,cAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,mBAAA,EAAe,CAAC,CAAA,CAAE,CAAA;AACjC,cAAA,OAAA,EAAA;AAAA,YACF,CAAA,MAAO;AACL,cAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAoB,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAAA,YAC/D;AAAA,UACF;AAAA,QACF,SAAS,CAAA,EAAQ;AACf,UAAA,MAAA,CAAO,MAAM,CAAA,sBAAA,EAAoB,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAA,CAAO,GAAA,CAAI;AAAA,yBAAA,EAAuB,OAAO,CAAA,sBAAA,CAAwB,CAAA;AACjE,EAAA,MAAA,CAAO,UAAA,CAAW,kBAAkBA,IAAG,CAAA;AACvC,EAAA,OAAO,CAAA;AACT;AC9HA,eAAsB,aAAA,CAAcA,OAAc,OAAO,OAAA,KAAY,cAAc,OAAA,CAAQ,GAAA,KAAQ,GAAA,EAAK;AAEtG,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,OAAA,CAAQ,IAAI,+DAA0D,CAAA;AACtE,IAAA,OAAA,CAAQ,IAAI,4DAA4D,CAAA;AACxE,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,OAAA,CAAQ,IAAI,gCAAgC,CAAA;AAC5C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iDAAA,EAAqCA,IAAG,CAAA,QAAA,CAAK,CAAA;AACzD,EAAA,OAAA,CAAQ,IAAI,gCAAgC,CAAA;AAE5C,EAAA,MAAM,YAAA,GAAeC,IAAAA,CAAKD,IAAAA,EAAK,YAAY,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAUC,IAAAA,CAAK,YAAA,EAAc,iBAAiB,CAAA;AACpD,EAAA,MAAM,MAAA,GAASA,IAAAA,CAAK,YAAA,EAAc,gBAAgB,CAAA;AAElD,EAAA,IAAI,CAACC,UAAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,IAAA,OAAA,CAAQ,IAAI,iDAA4C,CAAA;AACxD,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,CAACA,UAAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAA,OAAA,CAAQ,IAAI,4DAAuD,CAAA;AACnE,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAC7C,IAAA,aAAA,CAAc,MAAA,EAAQ,SAAS,OAAO,CAAA;AACtC,IAAA,OAAA,CAAQ,IAAI,yDAAoD,CAAA;AAChE,IAAA,OAAO,CAAA;AAAA,EACT,SAAS,CAAA,EAAQ;AACf,IAAA,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAkB,CAAA,CAAE,OAAO,CAAA;AACvC,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AC7BA,SAAS,oBAAA,GAA+B;AACtC,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY;AAC7B,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAA,CAAI,QAAA,KAAa,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACxD,EAAA,MAAM,GAAA,GAAM,OAAO,GAAA,CAAI,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACjD,EAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,IAAI,GAAG,CAAA,CAAA;AAChC;AAEA,eAAsB,0BAAA,CACpB,QACAF,IAAAA,GAAc,OAAO,YAAY,WAAA,GAAc,OAAA,CAAQ,GAAA,EAAI,GAAI,GAAA,EAC9C;AACjB,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,MAAM,CAAA;AAChC,EAAA,IAAI;AAsBF,IAAA,IAASG,cAAT,SAAoB,KAAA,EAAc,KAAA,GAAQ,CAAA,EAAG,aAAqB,EAAA,EAAY;AAC5E,MAAA,IAAIC,IAAAA,GAAM,EAAA;AACV,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,QAAA,GAAW,aAAa,CAAA,EAAG,UAAU,IAAI,IAAA,CAAK,IAAI,KAAK,IAAA,CAAK,IAAA;AAClE,QAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,IAAK,EAAA;AAEjD,QAAA,MAAM,cAAe,KAAA,KAAU,CAAA,IAAK,KAAK,IAAA,KAAS,GAAA,GAAO,SAAS,IAAA,CAAK,IAAA;AACvE,QAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,UAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAEhD,YAAAA,IAAAA,IAAO,GAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,iBAAA,EAAoB,WAAW,CAAA,WAAA,EAAc,OAAO,CAAA;AAAA,CAAA;AAAA,UAClF,CAAA,MAAO;AAEL,YAAAA,IAAAA,IAAO,GAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,iBAAA,EAAoB,WAAW,CAAA,WAAA,EAAc,OAAO,CAAA;AAAA,CAAA;AAChF,YAAAA,QAAOD,WAAAA,CAAW,IAAA,CAAK,QAAA,EAAU,KAAA,GAAQ,GAAG,QAAQ,CAAA;AACpD,YAAAC,IAAAA,IAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,CAAA;AAAA,UAC9B;AAAA,QACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAC/B,UAAAA,IAAAA,IAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,WAAA,EAAc,OAAO,CAAA;AAAA,CAAA;AAAA,QAC9E;AAAA,MACF;AACA,MAAA,OAAOA,IAAAA;AAAA,IACT,CAAA;AAtBS,IAAA,IAAA,UAAA,GAAAD,WAAAA;AApBT,IAAA,MAAM,UAAUF,IAAAA,CAAKD,IAAAA,EAAK,MAAA,CAAO,MAAA,EAAQ,UAAU,MAAM,CAAA;AACzD,IAAA,MAAM,UAAUC,IAAAA,CAAKD,IAAAA,EAAK,MAAA,CAAO,IAAA,EAAM,UAAU,cAAc,CAAA;AAC/D,IAAA,IAAI,CAACE,WAAW,OAAO,CAAA,YAAa,OAAA,EAAS,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAChE,IAAA,IAAI,CAACA,WAAW,OAAO,CAAA,YAAa,OAAA,EAAS,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAGhE,IAAA,MAAM,YAAA,GAAeD,IAAAA,CAAK,OAAA,EAAS,mBAAmB,CAAA;AACtD,IAAA,MAAA,CAAO,GAAA,CAAI,CAAA,iCAAA,EAAoC,YAAY,CAAA,CAAE,CAAA;AAC7D,IAAA,QAAA,CAAS,CAAA,yGAAA,EAA4G,YAAY,CAAA,CAAE,CAAA;AAGnI,IAAA,MAAM,IAAA,GAAO,aAAoB,YAAY,CAAA;AAC7C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAA,CAAO,MAAM,kCAAkC,CAAA;AAC/C,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,kBAAA,IAAsB,EAAC;AACjD,IAAA,MAAM,kBAAA,GAAqB,EAAE,GAAI,cAAA,CAAe,sBAAsB,EAAC,EAAI,GAAG,UAAA,EAAW;AA2BzF,IAAA,MAAM,WAAA,GAAc,CAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAAmH,sBAAsB;AAAA;;AAAA;;AAAA,CAAA;AAE7J,IAAA,MAAM,YAAA,GAAeE,YAAW,IAAI,CAAA;AACpC,IAAA,MAAM,oBAAA,GAAuB,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAA,IAAA,KAAQ,IAAA,GAAO,IAAA,GAAO,IAAA,GAAO,EAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACpG,IAAA,MAAM,GAAA,GAAM,WAAA,GAAc,WAAA,GAAc,oBAAA,GAAuB,YAAA;AAE/D,IAAA,MAAM,aAAA,GAAgBF,IAAAA,CAAK,OAAA,EAAS,yBAAyB,CAAA;AAC7D,IAAAI,aAAAA,CAAc,eAAe,GAAG,CAAA;AAChC,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,uBAAA,EAA0B,aAAa,CAAA,CAAE,CAAA;AACxD,IAAA,MAAA,CAAO,UAAA,CAAW,oCAAoCL,IAAG,CAAA;AACzD,IAAA,OAAO,CAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,0CAAA,EAA6C,KAAK,CAAA,CAAE,CAAA;AACjE,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AC7EA,eAAsB,iBAAiB,SAAA,EAAmB;AACxD,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAA,CAAQ,MAAM,0CAA0C,CAAA;AACxD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,SAAS,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,MAAA,IAAU,CAAA,iBAAA,EAAoB,IAAA,CAAK,GAAA,EAAK,CAAA,CAAE,CAAA;AAEvE,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,SAAS,CAAA,GAAA,CAAK,CAAA;AAE/C,EAAA,IAAI;AAEF,IAAA,MAAM,UAAU,OAAO,CAAA;AAGvB,IAAA,OAAA,CAAQ,IAAI,0CAA0C,CAAA;AACtD,IAAAM,SAAS,CAAA,gCAAA,CAAA,EAAoC,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AAG/E,IAAA,MAAM,YAAA,GAAeA,QAAAA,CAAS,UAAA,EAAY,EAAE,GAAA,EAAK,OAAA,EAAS,QAAA,EAAU,MAAA,EAAQ,CAAA,CAAE,IAAA,EAAK,CAAE,MAAM,IAAI,CAAA;AAC/F,IAAA,MAAM,WAAA,GAAc,aAAa,CAAC,CAAA;AAClC,IAAAA,SAAS,CAAA,SAAA,EAAY,WAAW,IAAI,EAAE,GAAA,EAAK,SAAS,CAAA;AAGpD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,SAAS,CAAA;AAChD,IAAA,MAAM,KAAK,WAAA,EAAa,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AAGpD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA;AACtD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,YAAY,CAAA;AAC/C,IAAA,IAAI,MAAM,UAAA,CAAW,UAAU,CAAA,EAAG;AAChC,MAAA,MAAM,MAAA,CAAO,YAAY,OAAO,CAAA;AAChC,MAAA,OAAA,CAAQ,IAAI,sCAAsC,CAAA;AAAA,IACpD;AAGA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,cAAc,CAAA;AACjD,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,OAAO,CAAA;AAClC,IAAA,GAAA,CAAI,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAClC,IAAA,GAAA,CAAI,OAAA,GAAU,OAAA;AACd,IAAA,GAAA,CAAI,OAAA,GAAU,IAAA;AAGd,IAAA,GAAA,CAAI,IAAA,GAAO;AAAA,MACT,uBAAA,EAAyB;AAAA,QACvB,eAAA;AAAA,QACA,iBAAA;AAAA,QACA,oBAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAa;AAAA,QACX,cAAA,EAAgB,QAAA;AAAA,QAChB,kBAAA,EAAoB;AAAA,OACtB;AAAA,MACA,qBAAA,EAAuB;AAAA,QACrB,oBAAA,EAAsB;AAAA;AACxB,KACF;AAEA,IAAA,GAAA,CAAI,OAAA,GAAU;AAAA,MACZ,aAAA,EAAe,cAAA;AAAA,MACf,QAAA,EAAU,eAAA;AAAA,MACV,KAAA,EAAO,sBAAA;AAAA,MACP,OAAA,EAAS,wCAAA;AAAA,MACT,WAAA,EAAa,wCAAA;AAAA,MACb,YAAA,EAAc,YAAA;AAAA,MACd,OAAA,EAAS,YAAA;AAAA,MACT,MAAA,EAAQ,WAAA;AAAA,MACR,YAAA,EAAc,wBAAA;AAAA,MACd,IAAA,EAAM,qBAAA;AAAA,MACN,gBAAA,EAAkB,4BAAA;AAAA,MAClB,IAAA,EAAM,kDAAA;AAAA,MACN,KAAA,EAAO,wBAAA;AAAA,MACP,qBAAA,EAAuB,oCAAA;AAAA,MACvB,oBAAA,EAAsB,mCAAA;AAAA,MACtB,oBAAA,EAAsB,mCAAA;AAAA,MACtB,qBAAA,EAAuB,4CAAA;AAAA,MACvB,WAAA,EAAa;AAAA,KACf;AAGA,IAAA,OAAO,GAAA,CAAI,aAAA;AACX,IAAA,OAAO,GAAA,CAAI,KAAA;AACX,IAAA,MAAM,UAAU,OAAA,EAAS,GAAA,EAAK,EAAE,MAAA,EAAQ,GAAG,CAAA;AAE3C,IAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AAGxC,IAAA,IAAI;AACF,MAAAA,SAAS,cAAA,EAAgB,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AAAA,IAC7D,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAK,4BAA4B,CAAA;AACzC,MAAA,IAAI;AACF,QAAAA,SAAS,aAAA,EAAe,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AAAA,MAC5D,SAAS,QAAA,EAAU;AACjB,QAAA,OAAA,CAAQ,MAAM,kFAAkF,CAAA;AAAA,MAClG;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAI,gCAAgC,CAAA;AAG5C,IAAA,IAAI;AACF,MAAAA,SAAS,UAAA,EAAY,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AACvD,MAAAA,SAAS,WAAA,EAAa,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AACxD,MAAAA,SAAS,4DAAA,EAA8D,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AAAA,IAC3G,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAK,kEAAkE,CAAA;AAAA,IACjF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,wBAAA,EAAwB,OAAO,CAAA,CAAE,CAAA;AAC7C,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,WAAA,CAAe,CAAA;AAC3B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE,CAAA;AAC/B,IAAA,OAAA,CAAQ,IAAI,CAAA,UAAA,CAAY,CAAA;AACxB,IAAA,OAAA,CAAQ,IAAI,CAAA,0DAAA,CAA4D,CAAA;AAAA,EAE1E,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAChD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAA,SAAE;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,OAAO,CAAA;AAAA,IACtB,SAAS,YAAA,EAAc;AACrB,MAAA,OAAA,CAAQ,IAAA,CAAK,0CAA0C,OAAO,CAAA;AAAA,IAChE;AAAA,EACF;AACF;;;AC3HA,IAAM,MAAM,OAAO,OAAA,KAAY,WAAA,GAAc,OAAA,CAAQ,KAAI,GAAI,GAAA;AAE7D,OAAA,CACG,KAAK,aAAa,CAAA,CAClB,YAAY,iDAAiD,CAAA,CAC7D,QAAQ,OAAO,CAAA;AAElB,OAAA,CACG,OAAA,CAAQ,oBAAoB,CAAA,CAC5B,WAAA,CAAY,6DAA6D,CAAA,CACzE,MAAA,CAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAGlD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AAEA,IAAA,cAAA,CAAe,MAAM,CAAA;AAErB,IAAA,MAAM,QAAA,GAAW,MAAM,iBAAA,CAAkB,MAAA,EAAQ,GAAG,CAAA;AAEpD,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,QAAQ,oBAAoB,CAAA,CAC5B,YAAY,+BAA+B,CAAA,CAC3C,OAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,OAAO,UAAA,EAAY,iDAAA,EAAmD,KAAK,CAAA,CAC3E,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAGlD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AAEA,IAAA,cAAA,CAAe,MAAM,CAAA;AAErB,IAAA,MAAM,WAAW,MAAM,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAEpE,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,OAAA,CAAQ,qBAAqB,CAAA,CAC7B,WAAA,CAAY,0BAA0B,CAAA,CACtC,MAAA,CAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAGlD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AAEA,IAAA,cAAA,CAAe,MAAM,CAAA;AAErB,IAAA,MAAM,QAAA,GAAW,MAAM,iBAAA,CAAkB,MAAA,EAAQ,GAAG,CAAA;AAEpD,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,QAAQ,YAAY,CAAA,CACpB,YAAY,4EAA4E,CAAA,CACxF,OAAO,OAAA,EAAS,4DAAA,EAA8D,KAAK,CAAA,CACnF,OAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAClD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AACA,IAAA,cAAA,CAAe,MAAM,CAAA;AACrB,IAAA,MAAM,WAAW,MAAM,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,KAAK,GAAG,CAAA;AACzD,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,QAAQ,gBAAgB,CAAA,CACxB,YAAY,4EAA4E,CAAA,CACxF,OAAO,YAAY;AAClB,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,GAAG,CAAA;AACxC,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,OAAA,CAAQ,8BAA8B,CAAA,CACtC,WAAA,CAAY,wDAAwD,CAAA,CACpE,MAAA,CAAO,eAAA,EAAiB,oBAAA,EAAsB,KAAK,CAAA,CACnD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,UAAA,CAAW,GAAA,EAAK,EAAC,EAAG,QAAQ,OAAO,CAAA;AAClD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAO,OAAA,GAAU,IAAA;AAAA,IAC1B;AACA,IAAA,cAAA,CAAe,MAAM,CAAA;AACrB,IAAA,MAAM,QAAA,GAAW,MAAM,0BAAA,CAA2B,MAAA,EAAQ,GAAG,CAAA;AAC7D,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAEH,OAAA,CACG,OAAA,CAAQ,mCAAmC,CAAA,CAC3C,WAAA,CAAY,wCAAwC,CAAA,CACpD,MAAA,CAAO,OAAO,WAAA,KAAgB;AAC7B,EAAA,IAAI;AACF,IAAA,MAAM,iBAAiB,WAAW,CAAA;AAAA,EACpC,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAK,CAAA;AAC7B,IAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAGH,IAAI,OAAO,YAAY,WAAA,EAAa;AAClC,EAAA,OAAA,CAAQ,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC5B","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.
|
|
3
|
+
"version": "6.6.1",
|
|
4
4
|
"description": "Development scripts for multilingual projects",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"fast-glob": "^3.3.2",
|
|
11
11
|
"commander": "^12.0.0",
|
|
12
|
-
"picocolors": "^1.0.0"
|
|
12
|
+
"picocolors": "^1.0.0",
|
|
13
|
+
"fs-extra": "^11.2.0"
|
|
13
14
|
},
|
|
14
15
|
"devDependencies": {
|
|
15
16
|
"@types/node": "^20.0.0",
|
|
17
|
+
"@types/fs-extra": "^11.0.4",
|
|
16
18
|
"tsup": "^8.0.0",
|
|
17
19
|
"typescript": "^5.0.0"
|
|
18
20
|
},
|