@xylabs/ts-scripts-yarn3 7.4.4 → 7.4.5
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/actions/claude-rules.mjs +113 -0
- package/dist/actions/claude-rules.mjs.map +1 -0
- package/dist/actions/index.mjs +232 -129
- package/dist/actions/index.mjs.map +1 -1
- package/dist/bin/xy.mjs +201 -84
- package/dist/bin/xy.mjs.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.mjs +266 -145
- package/dist/index.mjs.map +1 -1
- package/dist/lib/claudeMdTemplate.mjs +24 -0
- package/dist/lib/claudeMdTemplate.mjs.map +1 -0
- package/dist/lib/index.mjs +31 -9
- package/dist/lib/index.mjs.map +1 -1
- package/dist/xy/index.mjs +201 -84
- package/dist/xy/index.mjs.map +1 -1
- package/dist/xy/xy.mjs +201 -84
- package/dist/xy/xy.mjs.map +1 -1
- package/dist/xy/xyCommonCommands.mjs +137 -20
- package/dist/xy/xyCommonCommands.mjs.map +1 -1
- package/package.json +4 -3
- package/templates/CLAUDE-project.md +4 -0
- package/templates/rules/xylabs-architecture.md +11 -0
- package/templates/rules/xylabs-build.md +14 -0
- package/templates/rules/xylabs-dependencies.md +24 -0
- package/templates/rules/xylabs-error-handling.md +7 -0
- package/templates/rules/xylabs-frameworks.md +8 -0
- package/templates/rules/xylabs-git-workflow.md +9 -0
- package/templates/rules/xylabs-naming.md +10 -0
- package/templates/rules/xylabs-style.md +22 -0
- package/templates/rules/xylabs-typescript.md +10 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// src/actions/claude-rules.ts
|
|
2
|
+
import {
|
|
3
|
+
existsSync,
|
|
4
|
+
mkdirSync,
|
|
5
|
+
readdirSync as readdirSync2,
|
|
6
|
+
readFileSync as readFileSync2,
|
|
7
|
+
unlinkSync,
|
|
8
|
+
writeFileSync
|
|
9
|
+
} from "fs";
|
|
10
|
+
import PATH2 from "path";
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
|
|
13
|
+
// src/lib/claudeMdTemplate.ts
|
|
14
|
+
import { readdirSync, readFileSync } from "fs";
|
|
15
|
+
import { createRequire } from "module";
|
|
16
|
+
import PATH from "path";
|
|
17
|
+
var require2 = createRequire(import.meta.url);
|
|
18
|
+
var packageRoot = PATH.dirname(require2.resolve("@xylabs/ts-scripts-yarn3/package.json"));
|
|
19
|
+
var templatesDir = PATH.resolve(packageRoot, "templates");
|
|
20
|
+
var XYLABS_RULES_PREFIX = "xylabs-";
|
|
21
|
+
var claudeMdRuleTemplates = () => {
|
|
22
|
+
const rulesDir = PATH.resolve(templatesDir, "rules");
|
|
23
|
+
const files = readdirSync(rulesDir).filter((f) => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith(".md"));
|
|
24
|
+
const result = {};
|
|
25
|
+
for (const file of files) {
|
|
26
|
+
result[file] = readFileSync(PATH.resolve(rulesDir, file), "utf8");
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
var claudeMdProjectTemplate = () => readFileSync(PATH.resolve(templatesDir, "CLAUDE-project.md"), "utf8");
|
|
31
|
+
|
|
32
|
+
// src/lib/yarn/yarnInitCwd.ts
|
|
33
|
+
var INIT_CWD = () => {
|
|
34
|
+
if (!process.env.INIT_CWD) console.error("Missing INIT_CWD");
|
|
35
|
+
return process.env.INIT_CWD;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// src/actions/claude-rules.ts
|
|
39
|
+
var syncRuleFiles = (rulesDir) => {
|
|
40
|
+
const templates = claudeMdRuleTemplates();
|
|
41
|
+
const templateNames = new Set(Object.keys(templates));
|
|
42
|
+
let updated = 0;
|
|
43
|
+
let created = 0;
|
|
44
|
+
for (const [filename, content] of Object.entries(templates)) {
|
|
45
|
+
const targetPath = PATH2.resolve(rulesDir, filename);
|
|
46
|
+
const existing = existsSync(targetPath) ? readFileSync2(targetPath, "utf8") : void 0;
|
|
47
|
+
if (existing === content) continue;
|
|
48
|
+
writeFileSync(targetPath, content, "utf8");
|
|
49
|
+
if (existing) {
|
|
50
|
+
updated++;
|
|
51
|
+
} else {
|
|
52
|
+
created++;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
created,
|
|
57
|
+
templateNames,
|
|
58
|
+
updated
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
var removeStaleRules = (rulesDir, templateNames) => {
|
|
62
|
+
const existingRules = readdirSync2(rulesDir).filter((f) => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith(".md"));
|
|
63
|
+
let removed = 0;
|
|
64
|
+
for (const file of existingRules) {
|
|
65
|
+
if (!templateNames.has(file)) {
|
|
66
|
+
unlinkSync(PATH2.resolve(rulesDir, file));
|
|
67
|
+
removed++;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return removed;
|
|
71
|
+
};
|
|
72
|
+
var logRulesResult = (created, updated, removed) => {
|
|
73
|
+
if (created || updated || removed) {
|
|
74
|
+
const parts = [
|
|
75
|
+
created ? `${created} created` : "",
|
|
76
|
+
updated ? `${updated} updated` : "",
|
|
77
|
+
removed ? `${removed} removed` : ""
|
|
78
|
+
].filter(Boolean);
|
|
79
|
+
console.log(chalk.green(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: ${parts.join(", ")}`));
|
|
80
|
+
} else {
|
|
81
|
+
console.log(chalk.gray(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: already up to date`));
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
var ensureProjectClaudeMd = (cwd, force) => {
|
|
85
|
+
const projectPath = PATH2.resolve(cwd, "CLAUDE.md");
|
|
86
|
+
if (!existsSync(projectPath) || force) {
|
|
87
|
+
if (force && existsSync(projectPath)) {
|
|
88
|
+
console.log(chalk.yellow("Overwriting existing CLAUDE.md"));
|
|
89
|
+
}
|
|
90
|
+
writeFileSync(projectPath, claudeMdProjectTemplate(), "utf8");
|
|
91
|
+
console.log(chalk.green("Generated CLAUDE.md"));
|
|
92
|
+
} else {
|
|
93
|
+
console.log(chalk.gray("CLAUDE.md already exists (skipped)"));
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
var claudeRules = ({ force } = {}) => {
|
|
97
|
+
const cwd = INIT_CWD() ?? process.cwd();
|
|
98
|
+
const rulesDir = PATH2.resolve(cwd, ".claude", "rules");
|
|
99
|
+
mkdirSync(rulesDir, { recursive: true });
|
|
100
|
+
const {
|
|
101
|
+
created,
|
|
102
|
+
templateNames,
|
|
103
|
+
updated
|
|
104
|
+
} = syncRuleFiles(rulesDir);
|
|
105
|
+
const removed = removeStaleRules(rulesDir, templateNames);
|
|
106
|
+
logRulesResult(created, updated, removed);
|
|
107
|
+
ensureProjectClaudeMd(cwd, force);
|
|
108
|
+
return 0;
|
|
109
|
+
};
|
|
110
|
+
export {
|
|
111
|
+
claudeRules
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=claude-rules.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/claude-rules.ts","../../src/lib/claudeMdTemplate.ts","../../src/lib/yarn/yarnInitCwd.ts"],"sourcesContent":["import {\n existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport {\n claudeMdProjectTemplate, claudeMdRuleTemplates, XYLABS_RULES_PREFIX,\n} from '../lib/index.ts'\nimport { INIT_CWD } from '../lib/yarn/index.ts'\n\nconst syncRuleFiles = (rulesDir: string) => {\n const templates = claudeMdRuleTemplates()\n const templateNames = new Set(Object.keys(templates))\n let updated = 0\n let created = 0\n\n for (const [filename, content] of Object.entries(templates)) {\n const targetPath = PATH.resolve(rulesDir, filename)\n const existing = existsSync(targetPath) ? readFileSync(targetPath, 'utf8') : undefined\n if (existing === content) continue\n writeFileSync(targetPath, content, 'utf8')\n if (existing) {\n updated++\n } else {\n created++\n }\n }\n\n return {\n created, templateNames, updated,\n }\n}\n\nconst removeStaleRules = (rulesDir: string, templateNames: Set<string>) => {\n const existingRules = readdirSync(rulesDir).filter(f => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith('.md'))\n let removed = 0\n\n for (const file of existingRules) {\n if (!templateNames.has(file)) {\n unlinkSync(PATH.resolve(rulesDir, file))\n removed++\n }\n }\n\n return removed\n}\n\nconst logRulesResult = (created: number, updated: number, removed: number) => {\n if (created || updated || removed) {\n const parts = [\n created ? `${created} created` : '',\n updated ? `${updated} updated` : '',\n removed ? `${removed} removed` : '',\n ].filter(Boolean)\n console.log(chalk.green(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: ${parts.join(', ')}`))\n } else {\n console.log(chalk.gray(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: already up to date`))\n }\n}\n\nconst ensureProjectClaudeMd = (cwd: string, force?: boolean) => {\n const projectPath = PATH.resolve(cwd, 'CLAUDE.md')\n\n if (!existsSync(projectPath) || force) {\n if (force && existsSync(projectPath)) {\n console.log(chalk.yellow('Overwriting existing CLAUDE.md'))\n }\n writeFileSync(projectPath, claudeMdProjectTemplate(), 'utf8')\n console.log(chalk.green('Generated CLAUDE.md'))\n } else {\n console.log(chalk.gray('CLAUDE.md already exists (skipped)'))\n }\n}\n\nexport const claudeRules = ({ force }: { force?: boolean } = {}): number => {\n const cwd = INIT_CWD() ?? process.cwd()\n const rulesDir = PATH.resolve(cwd, '.claude', 'rules')\n\n mkdirSync(rulesDir, { recursive: true })\n\n const {\n created, templateNames, updated,\n } = syncRuleFiles(rulesDir)\n const removed = removeStaleRules(rulesDir, templateNames)\n logRulesResult(created, updated, removed)\n ensureProjectClaudeMd(cwd, force)\n\n return 0\n}\n","import { readdirSync, readFileSync } from 'node:fs'\nimport { createRequire } from 'node:module'\nimport PATH from 'node:path'\n\nconst require = createRequire(import.meta.url)\nconst packageRoot = PATH.dirname(require.resolve('@xylabs/ts-scripts-yarn3/package.json'))\nconst templatesDir = PATH.resolve(packageRoot, 'templates')\n\nexport const XYLABS_RULES_PREFIX = 'xylabs-'\n\nexport const claudeMdRuleTemplates = (): Record<string, string> => {\n const rulesDir = PATH.resolve(templatesDir, 'rules')\n const files = readdirSync(rulesDir).filter(f => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith('.md'))\n const result: Record<string, string> = {}\n for (const file of files) {\n result[file] = readFileSync(PATH.resolve(rulesDir, file), 'utf8')\n }\n return result\n}\n\nexport const claudeMdProjectTemplate = (): string =>\n readFileSync(PATH.resolve(templatesDir, 'CLAUDE-project.md'), 'utf8')\n","export const INIT_CWD = () => {\n if (!process.env.INIT_CWD) console.error('Missing INIT_CWD')\n return process.env.INIT_CWD\n}\n"],"mappings":"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","names":["readdirSync","readFileSync","PATH","require","PATH","readFileSync","readdirSync"]}
|