@xylabs/ts-scripts-yarn3 7.4.9 → 7.4.10

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.
Files changed (35) hide show
  1. package/dist/actions/claude-commands.mjs +99 -0
  2. package/dist/actions/claude-commands.mjs.map +1 -0
  3. package/dist/actions/claude-rules.mjs.map +1 -1
  4. package/dist/actions/index.mjs +222 -141
  5. package/dist/actions/index.mjs.map +1 -1
  6. package/dist/bin/xy.mjs +184 -96
  7. package/dist/bin/xy.mjs.map +1 -1
  8. package/dist/index.d.ts +5 -1
  9. package/dist/index.mjs +244 -153
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/lib/claudeMdTemplate.mjs +12 -0
  12. package/dist/lib/claudeMdTemplate.mjs.map +1 -1
  13. package/dist/lib/index.mjs +12 -0
  14. package/dist/lib/index.mjs.map +1 -1
  15. package/dist/xy/index.mjs +184 -96
  16. package/dist/xy/index.mjs.map +1 -1
  17. package/dist/xy/xy.mjs +184 -96
  18. package/dist/xy/xy.mjs.map +1 -1
  19. package/dist/xy/xyCommonCommands.mjs +122 -34
  20. package/dist/xy/xyCommonCommands.mjs.map +1 -1
  21. package/package.json +2 -2
  22. package/templates/commands/xylabs-build.md +5 -0
  23. package/templates/commands/xylabs-clean.md +5 -0
  24. package/templates/commands/xylabs-compile.md +5 -0
  25. package/templates/commands/xylabs-cycle.md +5 -0
  26. package/templates/commands/xylabs-deplint.md +5 -0
  27. package/templates/commands/xylabs-deploy-major.md +7 -0
  28. package/templates/commands/xylabs-deploy-minor.md +7 -0
  29. package/templates/commands/xylabs-deploy.md +7 -0
  30. package/templates/commands/xylabs-fix.md +5 -0
  31. package/templates/commands/xylabs-knip.md +5 -0
  32. package/templates/commands/xylabs-lint.md +5 -0
  33. package/templates/commands/xylabs-publint.md +5 -0
  34. package/templates/commands/xylabs-rebuild.md +5 -0
  35. package/templates/commands/xylabs-test.md +5 -0
@@ -19,6 +19,7 @@ var require2 = createRequire(import.meta.url);
19
19
  var packageRoot = PATH.dirname(require2.resolve("@xylabs/ts-scripts-yarn3/package.json"));
20
20
  var templatesDir = PATH.resolve(packageRoot, "templates");
21
21
  var XYLABS_RULES_PREFIX = "xylabs-";
22
+ var XYLABS_COMMANDS_PREFIX = "xylabs-";
22
23
  var claudeMdRuleTemplates = () => {
23
24
  const rulesDir = PATH.resolve(templatesDir, "rules");
24
25
  const files = readdirSync(rulesDir).filter((f) => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith(".md"));
@@ -28,6 +29,15 @@ var claudeMdRuleTemplates = () => {
28
29
  }
29
30
  return result;
30
31
  };
32
+ var claudeCommandTemplates = () => {
33
+ const commandsDir = PATH.resolve(templatesDir, "commands");
34
+ const files = readdirSync(commandsDir).filter((f) => f.startsWith(XYLABS_COMMANDS_PREFIX) && f.endsWith(".md"));
35
+ const result = {};
36
+ for (const file of files) {
37
+ result[file] = readFileSync(PATH.resolve(commandsDir, file), "utf8");
38
+ }
39
+ return result;
40
+ };
31
41
  var claudeMdProjectTemplate = () => readFileSync(PATH.resolve(templatesDir, "CLAUDE-project.md"), "utf8");
32
42
 
33
43
  // src/lib/deleteGlob.ts
@@ -213,7 +223,7 @@ var runSteps = (name, steps, exitOnFail = true, messages) => {
213
223
  }, !!exitOnFail);
214
224
  };
215
225
 
216
- // src/actions/claude-rules.ts
226
+ // src/actions/claude-commands.ts
217
227
  import {
218
228
  existsSync as existsSync3,
219
229
  mkdirSync,
@@ -224,13 +234,13 @@ import {
224
234
  } from "fs";
225
235
  import PATH2 from "path";
226
236
  import chalk5 from "chalk";
227
- var syncRuleFiles = (rulesDir) => {
228
- const templates = claudeMdRuleTemplates();
237
+ var syncCommandFiles = (commandsDir) => {
238
+ const templates = claudeCommandTemplates();
229
239
  const templateNames = new Set(Object.keys(templates));
230
240
  let updated = 0;
231
241
  let created = 0;
232
242
  for (const [filename3, content] of Object.entries(templates)) {
233
- const targetPath = PATH2.resolve(rulesDir, filename3);
243
+ const targetPath = PATH2.resolve(commandsDir, filename3);
234
244
  const existing = existsSync3(targetPath) ? readFileSync3(targetPath, "utf8") : void 0;
235
245
  if (existing === content) continue;
236
246
  writeFileSync2(targetPath, content, "utf8");
@@ -246,12 +256,82 @@ var syncRuleFiles = (rulesDir) => {
246
256
  updated
247
257
  };
248
258
  };
259
+ var removeStaleCommands = (commandsDir, templateNames) => {
260
+ const existingCommands = readdirSync2(commandsDir).filter((f) => f.startsWith(XYLABS_COMMANDS_PREFIX) && f.endsWith(".md"));
261
+ let removed = 0;
262
+ for (const file of existingCommands) {
263
+ if (!templateNames.has(file)) {
264
+ unlinkSync(PATH2.resolve(commandsDir, file));
265
+ removed++;
266
+ }
267
+ }
268
+ return removed;
269
+ };
270
+ var logCommandsResult = (created, updated, removed) => {
271
+ if (created || updated || removed) {
272
+ const parts = [
273
+ created ? `${created} created` : "",
274
+ updated ? `${updated} updated` : "",
275
+ removed ? `${removed} removed` : ""
276
+ ].filter(Boolean);
277
+ console.log(chalk5.green(`.claude/commands/${XYLABS_COMMANDS_PREFIX}*.md: ${parts.join(", ")}`));
278
+ } else {
279
+ console.log(chalk5.gray(`.claude/commands/${XYLABS_COMMANDS_PREFIX}*.md: already up to date`));
280
+ }
281
+ };
282
+ var claudeCommands = () => {
283
+ const cwd = INIT_CWD() ?? process.cwd();
284
+ const commandsDir = PATH2.resolve(cwd, ".claude", "commands");
285
+ mkdirSync(commandsDir, { recursive: true });
286
+ const {
287
+ created,
288
+ templateNames,
289
+ updated
290
+ } = syncCommandFiles(commandsDir);
291
+ const removed = removeStaleCommands(commandsDir, templateNames);
292
+ logCommandsResult(created, updated, removed);
293
+ return 0;
294
+ };
295
+
296
+ // src/actions/claude-rules.ts
297
+ import {
298
+ existsSync as existsSync4,
299
+ mkdirSync as mkdirSync2,
300
+ readdirSync as readdirSync3,
301
+ readFileSync as readFileSync4,
302
+ unlinkSync as unlinkSync2,
303
+ writeFileSync as writeFileSync3
304
+ } from "fs";
305
+ import PATH3 from "path";
306
+ import chalk6 from "chalk";
307
+ var syncRuleFiles = (rulesDir) => {
308
+ const templates = claudeMdRuleTemplates();
309
+ const templateNames = new Set(Object.keys(templates));
310
+ let updated = 0;
311
+ let created = 0;
312
+ for (const [filename3, content] of Object.entries(templates)) {
313
+ const targetPath = PATH3.resolve(rulesDir, filename3);
314
+ const existing = existsSync4(targetPath) ? readFileSync4(targetPath, "utf8") : void 0;
315
+ if (existing === content) continue;
316
+ writeFileSync3(targetPath, content, "utf8");
317
+ if (existing) {
318
+ updated++;
319
+ } else {
320
+ created++;
321
+ }
322
+ }
323
+ return {
324
+ created,
325
+ templateNames,
326
+ updated
327
+ };
328
+ };
249
329
  var removeStaleRules = (rulesDir, templateNames) => {
250
- const existingRules = readdirSync2(rulesDir).filter((f) => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith(".md"));
330
+ const existingRules = readdirSync3(rulesDir).filter((f) => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith(".md"));
251
331
  let removed = 0;
252
332
  for (const file of existingRules) {
253
333
  if (!templateNames.has(file)) {
254
- unlinkSync(PATH2.resolve(rulesDir, file));
334
+ unlinkSync2(PATH3.resolve(rulesDir, file));
255
335
  removed++;
256
336
  }
257
337
  }
@@ -264,27 +344,27 @@ var logRulesResult = (created, updated, removed) => {
264
344
  updated ? `${updated} updated` : "",
265
345
  removed ? `${removed} removed` : ""
266
346
  ].filter(Boolean);
267
- console.log(chalk5.green(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: ${parts.join(", ")}`));
347
+ console.log(chalk6.green(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: ${parts.join(", ")}`));
268
348
  } else {
269
- console.log(chalk5.gray(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: already up to date`));
349
+ console.log(chalk6.gray(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: already up to date`));
270
350
  }
271
351
  };
272
352
  var ensureProjectClaudeMd = (cwd, force) => {
273
- const projectPath = PATH2.resolve(cwd, "CLAUDE.md");
274
- if (!existsSync3(projectPath) || force) {
275
- if (force && existsSync3(projectPath)) {
276
- console.log(chalk5.yellow("Overwriting existing CLAUDE.md"));
353
+ const projectPath = PATH3.resolve(cwd, "CLAUDE.md");
354
+ if (!existsSync4(projectPath) || force) {
355
+ if (force && existsSync4(projectPath)) {
356
+ console.log(chalk6.yellow("Overwriting existing CLAUDE.md"));
277
357
  }
278
- writeFileSync2(projectPath, claudeMdProjectTemplate(), "utf8");
279
- console.log(chalk5.green("Generated CLAUDE.md"));
358
+ writeFileSync3(projectPath, claudeMdProjectTemplate(), "utf8");
359
+ console.log(chalk6.green("Generated CLAUDE.md"));
280
360
  } else {
281
- console.log(chalk5.gray("CLAUDE.md already exists (skipped)"));
361
+ console.log(chalk6.gray("CLAUDE.md already exists (skipped)"));
282
362
  }
283
363
  };
284
364
  var claudeRules = ({ force } = {}) => {
285
365
  const cwd = INIT_CWD() ?? process.cwd();
286
- const rulesDir = PATH2.resolve(cwd, ".claude", "rules");
287
- mkdirSync(rulesDir, { recursive: true });
366
+ const rulesDir = PATH3.resolve(cwd, ".claude", "rules");
367
+ mkdirSync2(rulesDir, { recursive: true });
288
368
  const {
289
369
  created,
290
370
  templateNames,
@@ -298,10 +378,10 @@ var claudeRules = ({ force } = {}) => {
298
378
 
299
379
  // src/actions/clean-docs.ts
300
380
  import path from "path";
301
- import chalk6 from "chalk";
381
+ import chalk7 from "chalk";
302
382
  var cleanDocs = () => {
303
383
  const pkgName = process.env.npm_package_name;
304
- console.log(chalk6.green(`Cleaning Docs [${pkgName}]`));
384
+ console.log(chalk7.green(`Cleaning Docs [${pkgName}]`));
305
385
  for (const { location } of yarnWorkspaces()) deleteGlob(path.join(location, "docs"));
306
386
  return 0;
307
387
  };
@@ -330,7 +410,7 @@ var filename = ".gitignore";
330
410
  var gitignoreGen = (pkg) => generateIgnoreFiles(filename, pkg);
331
411
 
332
412
  // src/actions/gitlint.ts
333
- import chalk7 from "chalk";
413
+ import chalk8 from "chalk";
334
414
  import ParseGitConfig from "parse-git-config";
335
415
  var gitlint = () => {
336
416
  console.log(`
@@ -341,7 +421,7 @@ Gitlint Start [${process.cwd()}]
341
421
  const errors = 0;
342
422
  const gitConfig = ParseGitConfig.sync();
343
423
  const warn = (message) => {
344
- console.warn(chalk7.yellow(`Warning: ${message}`));
424
+ console.warn(chalk8.yellow(`Warning: ${message}`));
345
425
  warnings++;
346
426
  };
347
427
  if (gitConfig.core.ignorecase) {
@@ -361,13 +441,13 @@ Gitlint Start [${process.cwd()}]
361
441
  }
362
442
  const resultMessages = [];
363
443
  if (valid > 0) {
364
- resultMessages.push(chalk7.green(`Passed: ${valid}`));
444
+ resultMessages.push(chalk8.green(`Passed: ${valid}`));
365
445
  }
366
446
  if (warnings > 0) {
367
- resultMessages.push(chalk7.yellow(`Warnings: ${warnings}`));
447
+ resultMessages.push(chalk8.yellow(`Warnings: ${warnings}`));
368
448
  }
369
449
  if (errors > 0) {
370
- resultMessages.push(chalk7.red(` Errors: ${errors}`));
450
+ resultMessages.push(chalk8.red(` Errors: ${errors}`));
371
451
  }
372
452
  console.warn(`Gitlint Finish [ ${resultMessages.join(" | ")} ]
373
453
  `);
@@ -376,7 +456,7 @@ Gitlint Start [${process.cwd()}]
376
456
 
377
457
  // src/actions/gitlint-fix.ts
378
458
  import { execSync } from "child_process";
379
- import chalk8 from "chalk";
459
+ import chalk9 from "chalk";
380
460
  import ParseGitConfig2 from "parse-git-config";
381
461
  var gitlintFix = () => {
382
462
  console.log(`
@@ -385,21 +465,21 @@ Gitlint Fix Start [${process.cwd()}]
385
465
  const gitConfig = ParseGitConfig2.sync();
386
466
  if (gitConfig.core.ignorecase) {
387
467
  execSync("git config core.ignorecase false", { stdio: "inherit" });
388
- console.warn(chalk8.yellow("\nGitlint Fix: Updated core.ignorecase to be false\n"));
468
+ console.warn(chalk9.yellow("\nGitlint Fix: Updated core.ignorecase to be false\n"));
389
469
  }
390
470
  if (gitConfig.core.autocrlf !== false) {
391
471
  execSync("git config core.autocrlf false", { stdio: "inherit" });
392
- console.warn(chalk8.yellow("\nGitlint Fix: Updated core.autocrlf to be false\n"));
472
+ console.warn(chalk9.yellow("\nGitlint Fix: Updated core.autocrlf to be false\n"));
393
473
  }
394
474
  if (gitConfig.core.eol !== "lf") {
395
475
  execSync("git config core.eol lf", { stdio: "inherit" });
396
- console.warn(chalk8.yellow('\nGitlint Fix: Updated core.eol to be "lf"\n'));
476
+ console.warn(chalk9.yellow('\nGitlint Fix: Updated core.eol to be "lf"\n'));
397
477
  }
398
478
  return 1;
399
479
  };
400
480
 
401
481
  // src/actions/license.ts
402
- import chalk9 from "chalk";
482
+ import chalk10 from "chalk";
403
483
  import { init } from "license-checker";
404
484
  var license = async (pkg) => {
405
485
  const workspaces = yarnWorkspaces();
@@ -424,18 +504,18 @@ var license = async (pkg) => {
424
504
  "LGPL-3.0-or-later",
425
505
  "Python-2.0"
426
506
  ]);
427
- console.log(chalk9.green("License Checker"));
507
+ console.log(chalk10.green("License Checker"));
428
508
  return (await Promise.all(
429
509
  workspaceList.map(({ location, name }) => {
430
510
  return new Promise((resolve) => {
431
511
  init({ production: true, start: location }, (error, packages) => {
432
512
  if (error) {
433
- console.error(chalk9.red(`License Checker [${name}] Error`));
434
- console.error(chalk9.gray(error));
513
+ console.error(chalk10.red(`License Checker [${name}] Error`));
514
+ console.error(chalk10.gray(error));
435
515
  console.log("\n");
436
516
  resolve(1);
437
517
  } else {
438
- console.log(chalk9.green(`License Checker [${name}]`));
518
+ console.log(chalk10.green(`License Checker [${name}]`));
439
519
  let count = 0;
440
520
  for (const [name2, info] of Object.entries(packages)) {
441
521
  const licenses = Array.isArray(info.licenses) ? info.licenses : [info.licenses];
@@ -451,7 +531,7 @@ var license = async (pkg) => {
451
531
  }
452
532
  if (!orLicenseFound) {
453
533
  count++;
454
- console.warn(chalk9.yellow(`${name2}: Package License not allowed [${license2}]`));
534
+ console.warn(chalk10.yellow(`${name2}: Package License not allowed [${license2}]`));
455
535
  }
456
536
  }
457
537
  }
@@ -514,6 +594,14 @@ var packagePositionalParam = (yargs) => {
514
594
  // src/xy/xyCommonCommands.ts
515
595
  var xyCommonCommands = (args) => {
516
596
  return args.command(
597
+ "claude-commands",
598
+ "Claude Commands - Sync XY Labs standard Claude slash commands to .claude/commands/",
599
+ (yargs) => yargs,
600
+ (argv) => {
601
+ if (argv.verbose) console.log("Claude Commands");
602
+ process.exitCode = claudeCommands();
603
+ }
604
+ ).command(
517
605
  "claude-rules",
518
606
  "Claude Rules - Sync XY Labs standard Claude rules to .claude/rules/",
519
607
  (yargs) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/checkResult.ts","../../src/lib/claudeMdTemplate.ts","../../src/lib/deleteGlob.ts","../../src/lib/processEx.ts","../../src/lib/withError.ts","../../src/lib/withErrnoException.ts","../../src/lib/safeExit.ts","../../src/lib/file/constants.ts","../../src/lib/file/fileLines.ts","../../src/lib/string/empty.ts","../../src/lib/string/union.ts","../../src/lib/file/ReadFileSyncOptions.ts","../../src/lib/generateIgnoreFiles.ts","../../src/lib/yarn/isYarnVersionOrGreater.ts","../../src/lib/yarn/workspace/yarnWorkspaces.ts","../../src/lib/yarn/workspace/yarnWorkspace.ts","../../src/lib/yarn/yarnInitCwd.ts","../../src/lib/runSteps.ts","../../src/actions/claude-rules.ts","../../src/actions/clean-docs.ts","../../src/actions/dead.ts","../../src/actions/gen-docs.ts","../../src/actions/gitignore-gen.ts","../../src/actions/gitlint.ts","../../src/actions/gitlint-fix.ts","../../src/actions/license.ts","../../src/actions/npmignore-gen.ts","../../src/actions/retest.ts","../../src/actions/test.ts","../../src/actions/upplug.ts","../../src/actions/upyarn.ts","../../src/actions/yarn3only.ts","../../src/xy/param.ts","../../src/xy/xyCommonCommands.ts"],"sourcesContent":["import chalk from 'chalk'\n\nexport const checkResult = (name: string, result: number, level: 'error' | 'warn' = 'error', exitOnFail = false) => {\n if (result) {\n const exiting = exitOnFail ? '[Exiting Process]' : '[Continuing]'\n const chalkFunc = level === 'error' ? chalk.red : chalk.yellow\n console[level](chalkFunc(`${name} had ${result} failures ${exiting}`))\n if (exitOnFail) {\n process.exit(result)\n }\n }\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","import fs from 'node:fs'\n\nimport { glob } from 'glob'\n\nexport const deleteGlob = (globPath: string) => {\n // Find all files matching the glob pattern\n const files = glob.sync(globPath)\n\n // Remove each file or directory\n for (const file of files) {\n fs.rmSync(file, { recursive: true, force: true })\n }\n}\n","import chalk from 'chalk'\n\nimport { withErrnoException } from './withErrnoException.ts'\nimport { withError } from './withError.ts'\n\nexport const processEx = (ex: unknown) => {\n const error = typeof ex === 'string' ? new Error(ex) : ex\n const exitCode\n = withErrnoException(error, (error) => {\n if (error.code === 'ENOENT') {\n console.error(chalk.red(`'${error.path}' not found.`))\n } else {\n console.error(chalk.red(`Errno: ${error.code}`))\n }\n return error.errno ?? -1\n })\n ?? withError(error, (error) => {\n console.error(chalk.red(`${error.name}: ${error.message}`))\n return -1\n })\n ?? (() => {\n console.error(chalk.red(`Unexpected Error: ${JSON.stringify(ex, null, 2)}`))\n return -1\n })()\n // This allows us to use a previously set exit code\n process.exit(process.exitCode ?? exitCode)\n}\n","export const withError = <T extends Error = Error>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ex: any,\n closure: (error: T) => number,\n predicate = (ex: T) => (!!ex.name && !!ex.message),\n) => {\n return predicate(ex as T) ? closure(ex as T) : undefined\n}\n","import { withError } from './withError.ts'\n\nexport const withErrnoException = <T extends NodeJS.ErrnoException = NodeJS.ErrnoException>(\n ex: unknown, closure: (error: T) => number,\n) => {\n return withError<T>(ex, closure, (ex: unknown) => (ex as NodeJS.ErrnoException).errno !== undefined)\n}\n","/** Catch child process a crash and returns the code */\n\nimport { processEx } from './processEx.ts'\n\nconst safeExit = (func: () => number, exitOnFail = true): number => {\n try {\n const result = func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nconst safeExitAsync = async (func: () => Promise<number>, exitOnFail = true): Promise<number> => {\n try {\n const result = await func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nexport { safeExit, safeExitAsync }\n","export const WINDOWS_NEWLINE_REGEX = /\\r\\n/g\nexport const CROSS_PLATFORM_NEWLINE = '\\n'\n","import type { PathLike, WriteFileOptions } from 'node:fs'\nimport {\n existsSync, readFileSync,\n writeFileSync,\n} from 'node:fs'\n\nimport { notEmpty } from '../string/index.ts'\nimport { CROSS_PLATFORM_NEWLINE, WINDOWS_NEWLINE_REGEX } from './constants.ts'\nimport type { ReadFileSyncOptions } from './ReadFileSyncOptions.ts'\nimport { defaultReadFileSyncOptions } from './ReadFileSyncOptions.ts'\n\nexport const readLines = (uri: PathLike, options: ReadFileSyncOptions = defaultReadFileSyncOptions): string[] =>\n existsSync(uri)\n ? readFileSync(uri, options).replace(WINDOWS_NEWLINE_REGEX, CROSS_PLATFORM_NEWLINE).split(CROSS_PLATFORM_NEWLINE)\n : []\n\nexport const readNonEmptyLines = (uri: PathLike, options: ReadFileSyncOptions = defaultReadFileSyncOptions): string[] =>\n readLines(uri, options).filter(notEmpty)\n\nexport const writeLines = (uri: PathLike, lines: string[], options: WriteFileOptions = defaultReadFileSyncOptions) => {\n const existing = existsSync(uri) ? readFileSync(uri, options) : undefined\n const desired = lines.join(CROSS_PLATFORM_NEWLINE)\n // Check if the file is different before writing\n if (existing !== desired) writeFileSync(uri, desired, options)\n}\n","export const empty = (value?: string | undefined): boolean => value?.trim().length === 0\nexport const notEmpty = (value?: string | undefined): boolean => !empty(value)\n","export const union = (a: string[], b: string[]): Set<string> => new Set([...new Set(a), ...new Set(b)])\n","export type ReadFileSyncOptions = BufferEncoding | {\n encoding: BufferEncoding\n flags?: string\n}\n\nexport const defaultReadFileSyncOptions: ReadFileSyncOptions = { encoding: 'utf8' }\n","import chalk from 'chalk'\n\nimport { readNonEmptyLines, writeLines } from './file/index.ts'\nimport { union } from './string/index.ts'\nimport {\n INIT_CWD, yarnWorkspace, yarnWorkspaces,\n} from './yarn/index.ts'\n\nconst localeCompare = (a: string, b: string) => a.localeCompare(b)\n\nconst mergeEntries = (a: string[], b: string[]): string[] => [...union(a, b)].toSorted(localeCompare)\n\nexport const generateIgnoreFiles = (filename: string, pkg?: string) => {\n console.log(chalk.green(`Generate ${filename} Files`))\n const cwd = INIT_CWD() ?? '.'\n const workspaces = pkg ? [yarnWorkspace(pkg)] : yarnWorkspaces()\n const readEntries = (location: string): string[] => readNonEmptyLines(`${location}/${filename}`)\n const writeEntries = (location: string, entries: string[]) => writeLines(`${location}/${filename}`, entries)\n const results = workspaces.map(({ location, name }) => {\n try {\n writeEntries(location, mergeEntries(readEntries(cwd), readEntries(location)))\n return 0\n } catch (ex) {\n const error = ex as Error\n console.error(`Generate ${filename} Files [${name}] [${error.message}]`)\n return 1\n }\n })\n const succeeded = results.every(result => result === 0)\n return succeeded ? 0 : 1\n}\n","import { spawnSync } from 'node:child_process'\n\nexport const isYarnVersionOrGreater = (major: number, minor?: number, patch?: number): [boolean, string] => {\n const result = spawnSync('yarn', ['-v'], { encoding: 'utf8', shell: true })\n const version = result.stdout.toString().replaceAll('\\n', '')\n const versionNumbers = version.split('.').map(ver => Number.parseInt(ver))\n const majorDelta = versionNumbers[0] - major\n const minorDelta = versionNumbers[1] - (minor ?? versionNumbers[1])\n const patchDelta = versionNumbers[2] - (patch ?? versionNumbers[2])\n\n const majorOk = majorDelta >= 0\n const minorOk = majorDelta > 0 || minorDelta >= 0\n const patchOk = majorDelta > 0 || minorDelta > 0 || patchDelta >= 0\n\n return [majorOk && minorOk && patchOk, version]\n}\n","import { spawnSync } from 'node:child_process'\n\nimport type { Workspace } from './Workspace.ts'\n\nexport const yarnWorkspaces = (): Workspace[] => {\n const result = spawnSync('yarn', ['workspaces', 'list', '--json', '--recursive'], { encoding: 'utf8', shell: true })\n if (result.error) {\n throw result.error\n }\n return (\n result.stdout\n .toString()\n // NOTE: This probably doesn't work on Windows\n // TODO: Replace /r/n with /n first\n .split('\\n')\n .slice(0, -1)\n .map((item) => {\n return JSON.parse(item)\n })\n )\n}\n","import type { Workspace } from './Workspace.ts'\nimport { yarnWorkspaces } from './yarnWorkspaces.ts'\n\nexport const yarnWorkspace = (pkg: string): Workspace => {\n const workspace = yarnWorkspaces().find(({ name }) => name === pkg)\n if (!workspace) throw new Error(`Workspace ${pkg} not found`)\n return workspace\n}\n","export const INIT_CWD = () => {\n if (!process.env.INIT_CWD) console.error('Missing INIT_CWD')\n return process.env.INIT_CWD\n}\n","import type { SpawnSyncOptionsWithBufferEncoding } from 'node:child_process'\nimport { spawnSync } from 'node:child_process'\nimport { existsSync } from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport { checkResult } from './checkResult.ts'\nimport { safeExit } from './safeExit.ts'\n\nexport type ScriptStep\n = | [/* command */ 'yarn' | 'node' | 'ts-node-script' | 'tsc' | 'jest' | 'npm', /* arg */ string | string[]]\n | [/* command */ string, /* arg */ string | string[], /* config */ SpawnSyncOptionsWithBufferEncoding]\n\nexport const runSteps = (name: string, steps: ScriptStep[], exitOnFail = true, messages?: string[]): number => {\n return safeExit(() => {\n const pkgName = process.env.npm_package_name\n console.log(chalk.green(`${name} [${pkgName}]`))\n let totalStatus = 0\n for (const [i, [command, args, config]] of steps.entries()) {\n if (messages?.[i]) {\n console.log(chalk.gray(messages?.[i]))\n }\n const argList = Array.isArray(args) ? args : args.split(' ')\n if (command === 'node' && !existsSync(argList[0])) {\n throw new Error(`File not found [${argList[0]}]`)\n }\n const status\n = spawnSync(command, Array.isArray(args) ? args : args.split(' '), {\n ...config,\n encoding: 'utf8',\n env: { FORCE_COLOR: '3', ...process.env },\n shell: true,\n stdio: 'inherit',\n }).status ?? 0\n checkResult(name, status, 'error', exitOnFail)\n totalStatus += status ?? 0\n }\n return totalStatus\n }, !!exitOnFail)\n}\n","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 path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { deleteGlob, yarnWorkspaces } from '../lib/index.ts'\n\nexport const cleanDocs = () => {\n const pkgName = process.env.npm_package_name\n console.log(chalk.green(`Cleaning Docs [${pkgName}]`))\n for (const { location } of yarnWorkspaces()) deleteGlob(path.join(location, 'docs'))\n return 0\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const dead = () => {\n return runSteps('Dead', [['yarn', ['ts-prune', '-p', 'tsconfig.json']]])\n}\n","import type { ScriptStep } from '../lib/index.ts'\nimport { runSteps } from '../lib/index.ts'\n\nexport interface GenDocsParams {\n incremental?: boolean\n pkg?: string\n}\n\nexport interface GenDocsPackageParams { pkg: string }\n\nexport const genDocs = ({ pkg, incremental }: GenDocsParams) => {\n return pkg ? genDocsPackage({ pkg }) : genDocsAll({ incremental })\n}\n\nexport const genDocsPackage = ({ pkg }: GenDocsPackageParams) => {\n const steps: ScriptStep[] = [['yarn', ['workspace', pkg, 'run', 'package-gen-docs']]]\n\n return runSteps(`GenDocs [${pkg}]`, [...steps])\n}\n\nexport const genDocsAll = ({ incremental }: GenDocsParams) => {\n const incrementalOptions = incremental ? ['--since', '-pA'] : ['-pA']\n const steps: ScriptStep[] = [['yarn', ['workspaces', 'foreach', ...incrementalOptions, 'run', 'package-gen-docs']]]\n\n return runSteps(`GenDocs [All${incremental ? '-Incremental' : ''}]`, [...steps])\n}\n","import { generateIgnoreFiles } from '../lib/index.ts'\n\nconst filename = '.gitignore'\n\nexport const gitignoreGen = (pkg?: string) => generateIgnoreFiles(filename, pkg)\n","import chalk from 'chalk'\nimport ParseGitConfig from 'parse-git-config'\n\nexport const gitlint = () => {\n console.log(`\\nGitlint Start [${process.cwd()}]\\n`)\n let valid = 0\n let warnings = 0\n const errors = 0\n const gitConfig = ParseGitConfig.sync()\n\n const warn = (message: string) => {\n console.warn(chalk.yellow(`Warning: ${message}`))\n warnings++\n }\n\n if (gitConfig.core.ignorecase) {\n warn('Please set core.ignorecase to FALSE in .git/config file [run yarn gitlint-fix]')\n } else {\n valid++\n }\n\n if (gitConfig.core.autocrlf === false) {\n valid++\n } else {\n warn('Please set core.autocrlf to FALSE in .git/config file [run yarn gitlint-fix]')\n }\n\n if (gitConfig.core.eol === 'lf') {\n valid++\n } else {\n warn('Please set core.eol to \"lf\" in .git/config file [run yarn gitlint-fix]')\n }\n\n const resultMessages: string[] = []\n if (valid > 0) {\n resultMessages.push(chalk.green(`Passed: ${valid}`))\n }\n if (warnings > 0) {\n resultMessages.push(chalk.yellow(`Warnings: ${warnings}`))\n }\n if (errors > 0) {\n resultMessages.push(chalk.red(` Errors: ${errors}`))\n }\n console.warn(`Gitlint Finish [ ${resultMessages.join(' | ')} ]\\n`)\n return warnings + errors === 0 ? 1 : 0\n}\n","import { execSync } from 'node:child_process'\n\nimport chalk from 'chalk'\nimport ParseGitConfig from 'parse-git-config'\n\nexport const gitlintFix = () => {\n console.log(`\\nGitlint Fix Start [${process.cwd()}]\\n`)\n\n const gitConfig = ParseGitConfig.sync()\n\n if (gitConfig.core.ignorecase) {\n execSync('git config core.ignorecase false', { stdio: 'inherit' })\n console.warn(chalk.yellow('\\nGitlint Fix: Updated core.ignorecase to be false\\n'))\n }\n\n if (gitConfig.core.autocrlf !== false) {\n execSync('git config core.autocrlf false', { stdio: 'inherit' })\n console.warn(chalk.yellow('\\nGitlint Fix: Updated core.autocrlf to be false\\n'))\n }\n\n if (gitConfig.core.eol !== 'lf') {\n execSync('git config core.eol lf', { stdio: 'inherit' })\n console.warn(chalk.yellow('\\nGitlint Fix: Updated core.eol to be \"lf\"\\n'))\n }\n\n return 1\n}\n","import chalk from 'chalk'\nimport { init } from 'license-checker'\n\nimport { yarnWorkspaces } from '../lib/index.ts'\n\nexport const license = async (pkg?: string) => {\n const workspaces = yarnWorkspaces()\n const workspaceList = workspaces.filter(({ name }) => {\n return pkg === undefined || name === pkg\n })\n\n const exclude = new Set([\n 'MIT',\n 'MIT*',\n 'ISC',\n 'Apache-2.0',\n 'BSD',\n 'BSD*',\n 'BSD-2-Clause',\n 'BSD-3-Clause',\n 'CC-BY-4.0',\n 'Unlicense',\n 'CC-BY-3.0',\n 'CC0-1.0',\n 'LGPL-3.0-only',\n 'LGPL-3.0',\n 'LGPL-3.0-or-later',\n 'Python-2.0',\n ])\n\n console.log(chalk.green('License Checker'))\n\n return (\n (\n await Promise.all(\n workspaceList.map(({ location, name }) => {\n return new Promise<number>((resolve) => {\n init({ production: true, start: location }, (error, packages) => {\n if (error) {\n console.error(chalk.red(`License Checker [${name}] Error`))\n console.error(chalk.gray(error))\n console.log('\\n')\n resolve(1)\n } else {\n console.log(chalk.green(`License Checker [${name}]`))\n let count = 0\n for (const [name, info] of Object.entries(packages)) {\n const licenses = Array.isArray(info.licenses) ? info.licenses : [info.licenses]\n for (let license of licenses) {\n if (license) {\n // remove surrounding parens on some string\n const processedLicense = (license[0] === '(' && license.at(-1) === ')')\n ? license.slice(1, -2)\n : license\n // get list of OR licenses from string\n const orLicenses = processedLicense.split(' OR ')\n let orLicenseFound = false\n for (const orLicense of orLicenses) {\n if (exclude.has(orLicense)) {\n orLicenseFound = true\n }\n }\n if (!orLicenseFound) {\n count++\n console.warn(chalk.yellow(`${name}: Package License not allowed [${license}]`))\n }\n }\n }\n }\n console.log('\\n')\n resolve(count)\n }\n })\n })\n }),\n )\n )\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((prev, value) => prev || value, 0)\n )\n}\n","import { generateIgnoreFiles } from '../lib/index.ts'\n\nconst filename = '.npmignore'\n\nexport const npmignoreGen = (pkg?: string) => generateIgnoreFiles(filename, pkg)\n","import { runSteps } from '../lib/index.ts'\n\nexport const retest = () => {\n return runSteps('Test', [\n ['yarn', ['jest', '--clearCache']],\n ['yarn', ['jest', '.']],\n ])\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const test = () => {\n return runSteps('Test', [['yarn', ['vitest', '.']]])\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const updateYarnPlugins = () => {\n return runSteps('Update Yarn Plugins', [\n ['yarn', ['plugin', 'import', 'https://mskelton.dev/yarn-outdated/v3']],\n ['yarn', ['plugin', 'import', 'version']],\n ['yarn', ['plugin', 'import', 'interactive-tools']],\n ['yarn', ['plugin', 'import', 'workspace-tools']],\n ])\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const updateYarnVersion = () => {\n return runSteps('Update Yarn Version', [['yarn', ['set', 'version', 'latest']]])\n}\n","import { isYarnVersionOrGreater, processEx } from '../lib/index.ts'\n\nexport const yarn3Only = () => {\n const [valid, version] = isYarnVersionOrGreater(3)\n if (!valid) {\n processEx(`Invalid Yarn version [${version}]`)\n }\n return 0\n}\n","import type { Argv } from 'yargs'\n\nexport const packagePositionalParam = (yargs: Argv<unknown>) => {\n return yargs.positional('package', { describe: 'Specific package to target', type: 'string' })\n}\n","import type { Argv } from 'yargs'\n\nimport {\n claudeRules,\n cleanDocs,\n dead,\n genDocs,\n gitignoreGen,\n gitlint,\n gitlintFix,\n license,\n npmignoreGen,\n retest,\n test,\n updateYarnPlugins,\n updateYarnVersion,\n yarn3Only,\n} from '../actions/index.ts'\nimport { packagePositionalParam } from './param.ts'\n\nexport const xyCommonCommands = (args: Argv) => {\n return args\n\n .command(\n 'claude-rules',\n 'Claude Rules - Sync XY Labs standard Claude rules to .claude/rules/',\n (yargs) => {\n return yargs\n .option('force', {\n alias: 'f',\n default: false,\n description: 'Overwrite existing CLAUDE.md',\n type: 'boolean',\n })\n },\n (argv) => {\n if (argv.verbose) console.log('Claude Rules')\n process.exitCode = claudeRules({ force: argv.force })\n },\n )\n .command(\n 'license [package]',\n 'License - Check licenses of dependencies',\n (yargs) => {\n return packagePositionalParam(yargs)\n },\n async (argv) => {\n if (argv.verbose) console.log(`License: ${argv.package ?? 'all'}`)\n process.exitCode = await license()\n },\n )\n .command(\n 'dead [package]',\n 'Dead - Check for dead code',\n (yargs) => {\n return packagePositionalParam(yargs)\n },\n (argv) => {\n if (argv.verbose) console.log('Dead')\n process.exitCode = dead()\n },\n )\n .command(\n 'gen-docs [package]',\n 'GenDocs - Generate TypeDocs',\n (yargs) => {\n return packagePositionalParam(yargs)\n },\n (argv) => {\n if (argv.verbose) console.log(`Generating TypeDocs: ${argv.package ?? 'all'}`)\n process.exitCode = genDocs({ incremental: !!argv.incremental, pkg: argv.package as string })\n },\n )\n .command(\n 'clean-docs',\n 'CleanDocs - Clean TypeDocs',\n yargs => yargs,\n (argv) => {\n if (argv.verbose) console.log('Cleaning TypeDocs: all')\n process.exitCode = cleanDocs()\n },\n )\n .command(\n 'gitlint [package]',\n 'Gitlint - Lint your git config',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('Gitlint')\n process.exitCode = argv.fix ? gitlintFix() : gitlint()\n },\n )\n .command(\n 'gitignore-gen',\n 'GitIgnore Gen - Generate .gitignore files',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('GitIgnore Gen')\n process.exitCode = gitignoreGen()\n },\n )\n .command(\n 'npmignore-gen',\n 'NpmIgnore Gen - Generate .npmignore files',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('NpmIgnore Gen')\n process.exitCode = npmignoreGen()\n },\n )\n .command(\n 'retest',\n 'Re-Test - Run Jest Tests with cleaned cache',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('Re-Testing')\n process.exitCode = retest()\n },\n )\n .command(\n 'test',\n 'Test - Run Jest Tests',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('Testing')\n process.exitCode = test()\n },\n )\n .command(\n 'upplug',\n 'UpPlug - Update Yarn Plugins',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('UpPlug')\n process.exitCode = updateYarnPlugins()\n },\n )\n .command(\n 'upyarn',\n 'UpYarn - Update Yarn Version',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('UpYarn')\n process.exitCode = updateYarnVersion()\n },\n )\n .command(\n 'yarn3only',\n 'Yarn3Only - Check if using Yarn v3',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('Yarn 3 Check')\n process.exitCode = yarn3Only()\n },\n )\n}\n"],"mappings":"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","names":["require","chalk","ex","ex","error","chalk","readFileSync","readFileSync","chalk","spawnSync","filename","chalk","spawnSync","existsSync","chalk","chalk","existsSync","spawnSync","existsSync","readdirSync","readFileSync","writeFileSync","PATH","chalk","filename","PATH","existsSync","readFileSync","writeFileSync","readdirSync","chalk","chalk","chalk","chalk","chalk","ParseGitConfig","chalk","chalk","name","license","filename"]}
1
+ {"version":3,"sources":["../../src/lib/checkResult.ts","../../src/lib/claudeMdTemplate.ts","../../src/lib/deleteGlob.ts","../../src/lib/processEx.ts","../../src/lib/withError.ts","../../src/lib/withErrnoException.ts","../../src/lib/safeExit.ts","../../src/lib/file/constants.ts","../../src/lib/file/fileLines.ts","../../src/lib/string/empty.ts","../../src/lib/string/union.ts","../../src/lib/file/ReadFileSyncOptions.ts","../../src/lib/generateIgnoreFiles.ts","../../src/lib/yarn/isYarnVersionOrGreater.ts","../../src/lib/yarn/workspace/yarnWorkspaces.ts","../../src/lib/yarn/workspace/yarnWorkspace.ts","../../src/lib/yarn/yarnInitCwd.ts","../../src/lib/runSteps.ts","../../src/actions/claude-commands.ts","../../src/actions/claude-rules.ts","../../src/actions/clean-docs.ts","../../src/actions/dead.ts","../../src/actions/gen-docs.ts","../../src/actions/gitignore-gen.ts","../../src/actions/gitlint.ts","../../src/actions/gitlint-fix.ts","../../src/actions/license.ts","../../src/actions/npmignore-gen.ts","../../src/actions/retest.ts","../../src/actions/test.ts","../../src/actions/upplug.ts","../../src/actions/upyarn.ts","../../src/actions/yarn3only.ts","../../src/xy/param.ts","../../src/xy/xyCommonCommands.ts"],"sourcesContent":["import chalk from 'chalk'\n\nexport const checkResult = (name: string, result: number, level: 'error' | 'warn' = 'error', exitOnFail = false) => {\n if (result) {\n const exiting = exitOnFail ? '[Exiting Process]' : '[Continuing]'\n const chalkFunc = level === 'error' ? chalk.red : chalk.yellow\n console[level](chalkFunc(`${name} had ${result} failures ${exiting}`))\n if (exitOnFail) {\n process.exit(result)\n }\n }\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-'\nexport const XYLABS_COMMANDS_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 claudeCommandTemplates = (): Record<string, string> => {\n const commandsDir = PATH.resolve(templatesDir, 'commands')\n const files = readdirSync(commandsDir).filter(f => f.startsWith(XYLABS_COMMANDS_PREFIX) && f.endsWith('.md'))\n const result: Record<string, string> = {}\n for (const file of files) {\n result[file] = readFileSync(PATH.resolve(commandsDir, file), 'utf8')\n }\n return result\n}\n\nexport const claudeMdProjectTemplate = (): string =>\n readFileSync(PATH.resolve(templatesDir, 'CLAUDE-project.md'), 'utf8')\n","import fs from 'node:fs'\n\nimport { glob } from 'glob'\n\nexport const deleteGlob = (globPath: string) => {\n // Find all files matching the glob pattern\n const files = glob.sync(globPath)\n\n // Remove each file or directory\n for (const file of files) {\n fs.rmSync(file, { recursive: true, force: true })\n }\n}\n","import chalk from 'chalk'\n\nimport { withErrnoException } from './withErrnoException.ts'\nimport { withError } from './withError.ts'\n\nexport const processEx = (ex: unknown) => {\n const error = typeof ex === 'string' ? new Error(ex) : ex\n const exitCode\n = withErrnoException(error, (error) => {\n if (error.code === 'ENOENT') {\n console.error(chalk.red(`'${error.path}' not found.`))\n } else {\n console.error(chalk.red(`Errno: ${error.code}`))\n }\n return error.errno ?? -1\n })\n ?? withError(error, (error) => {\n console.error(chalk.red(`${error.name}: ${error.message}`))\n return -1\n })\n ?? (() => {\n console.error(chalk.red(`Unexpected Error: ${JSON.stringify(ex, null, 2)}`))\n return -1\n })()\n // This allows us to use a previously set exit code\n process.exit(process.exitCode ?? exitCode)\n}\n","export const withError = <T extends Error = Error>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ex: any,\n closure: (error: T) => number,\n predicate = (ex: T) => (!!ex.name && !!ex.message),\n) => {\n return predicate(ex as T) ? closure(ex as T) : undefined\n}\n","import { withError } from './withError.ts'\n\nexport const withErrnoException = <T extends NodeJS.ErrnoException = NodeJS.ErrnoException>(\n ex: unknown, closure: (error: T) => number,\n) => {\n return withError<T>(ex, closure, (ex: unknown) => (ex as NodeJS.ErrnoException).errno !== undefined)\n}\n","/** Catch child process a crash and returns the code */\n\nimport { processEx } from './processEx.ts'\n\nconst safeExit = (func: () => number, exitOnFail = true): number => {\n try {\n const result = func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nconst safeExitAsync = async (func: () => Promise<number>, exitOnFail = true): Promise<number> => {\n try {\n const result = await func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nexport { safeExit, safeExitAsync }\n","export const WINDOWS_NEWLINE_REGEX = /\\r\\n/g\nexport const CROSS_PLATFORM_NEWLINE = '\\n'\n","import type { PathLike, WriteFileOptions } from 'node:fs'\nimport {\n existsSync, readFileSync,\n writeFileSync,\n} from 'node:fs'\n\nimport { notEmpty } from '../string/index.ts'\nimport { CROSS_PLATFORM_NEWLINE, WINDOWS_NEWLINE_REGEX } from './constants.ts'\nimport type { ReadFileSyncOptions } from './ReadFileSyncOptions.ts'\nimport { defaultReadFileSyncOptions } from './ReadFileSyncOptions.ts'\n\nexport const readLines = (uri: PathLike, options: ReadFileSyncOptions = defaultReadFileSyncOptions): string[] =>\n existsSync(uri)\n ? readFileSync(uri, options).replace(WINDOWS_NEWLINE_REGEX, CROSS_PLATFORM_NEWLINE).split(CROSS_PLATFORM_NEWLINE)\n : []\n\nexport const readNonEmptyLines = (uri: PathLike, options: ReadFileSyncOptions = defaultReadFileSyncOptions): string[] =>\n readLines(uri, options).filter(notEmpty)\n\nexport const writeLines = (uri: PathLike, lines: string[], options: WriteFileOptions = defaultReadFileSyncOptions) => {\n const existing = existsSync(uri) ? readFileSync(uri, options) : undefined\n const desired = lines.join(CROSS_PLATFORM_NEWLINE)\n // Check if the file is different before writing\n if (existing !== desired) writeFileSync(uri, desired, options)\n}\n","export const empty = (value?: string | undefined): boolean => value?.trim().length === 0\nexport const notEmpty = (value?: string | undefined): boolean => !empty(value)\n","export const union = (a: string[], b: string[]): Set<string> => new Set([...new Set(a), ...new Set(b)])\n","export type ReadFileSyncOptions = BufferEncoding | {\n encoding: BufferEncoding\n flags?: string\n}\n\nexport const defaultReadFileSyncOptions: ReadFileSyncOptions = { encoding: 'utf8' }\n","import chalk from 'chalk'\n\nimport { readNonEmptyLines, writeLines } from './file/index.ts'\nimport { union } from './string/index.ts'\nimport {\n INIT_CWD, yarnWorkspace, yarnWorkspaces,\n} from './yarn/index.ts'\n\nconst localeCompare = (a: string, b: string) => a.localeCompare(b)\n\nconst mergeEntries = (a: string[], b: string[]): string[] => [...union(a, b)].toSorted(localeCompare)\n\nexport const generateIgnoreFiles = (filename: string, pkg?: string) => {\n console.log(chalk.green(`Generate ${filename} Files`))\n const cwd = INIT_CWD() ?? '.'\n const workspaces = pkg ? [yarnWorkspace(pkg)] : yarnWorkspaces()\n const readEntries = (location: string): string[] => readNonEmptyLines(`${location}/${filename}`)\n const writeEntries = (location: string, entries: string[]) => writeLines(`${location}/${filename}`, entries)\n const results = workspaces.map(({ location, name }) => {\n try {\n writeEntries(location, mergeEntries(readEntries(cwd), readEntries(location)))\n return 0\n } catch (ex) {\n const error = ex as Error\n console.error(`Generate ${filename} Files [${name}] [${error.message}]`)\n return 1\n }\n })\n const succeeded = results.every(result => result === 0)\n return succeeded ? 0 : 1\n}\n","import { spawnSync } from 'node:child_process'\n\nexport const isYarnVersionOrGreater = (major: number, minor?: number, patch?: number): [boolean, string] => {\n const result = spawnSync('yarn', ['-v'], { encoding: 'utf8', shell: true })\n const version = result.stdout.toString().replaceAll('\\n', '')\n const versionNumbers = version.split('.').map(ver => Number.parseInt(ver))\n const majorDelta = versionNumbers[0] - major\n const minorDelta = versionNumbers[1] - (minor ?? versionNumbers[1])\n const patchDelta = versionNumbers[2] - (patch ?? versionNumbers[2])\n\n const majorOk = majorDelta >= 0\n const minorOk = majorDelta > 0 || minorDelta >= 0\n const patchOk = majorDelta > 0 || minorDelta > 0 || patchDelta >= 0\n\n return [majorOk && minorOk && patchOk, version]\n}\n","import { spawnSync } from 'node:child_process'\n\nimport type { Workspace } from './Workspace.ts'\n\nexport const yarnWorkspaces = (): Workspace[] => {\n const result = spawnSync('yarn', ['workspaces', 'list', '--json', '--recursive'], { encoding: 'utf8', shell: true })\n if (result.error) {\n throw result.error\n }\n return (\n result.stdout\n .toString()\n // NOTE: This probably doesn't work on Windows\n // TODO: Replace /r/n with /n first\n .split('\\n')\n .slice(0, -1)\n .map((item) => {\n return JSON.parse(item)\n })\n )\n}\n","import type { Workspace } from './Workspace.ts'\nimport { yarnWorkspaces } from './yarnWorkspaces.ts'\n\nexport const yarnWorkspace = (pkg: string): Workspace => {\n const workspace = yarnWorkspaces().find(({ name }) => name === pkg)\n if (!workspace) throw new Error(`Workspace ${pkg} not found`)\n return workspace\n}\n","export const INIT_CWD = () => {\n if (!process.env.INIT_CWD) console.error('Missing INIT_CWD')\n return process.env.INIT_CWD\n}\n","import type { SpawnSyncOptionsWithBufferEncoding } from 'node:child_process'\nimport { spawnSync } from 'node:child_process'\nimport { existsSync } from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport { checkResult } from './checkResult.ts'\nimport { safeExit } from './safeExit.ts'\n\nexport type ScriptStep\n = | [/* command */ 'yarn' | 'node' | 'ts-node-script' | 'tsc' | 'jest' | 'npm', /* arg */ string | string[]]\n | [/* command */ string, /* arg */ string | string[], /* config */ SpawnSyncOptionsWithBufferEncoding]\n\nexport const runSteps = (name: string, steps: ScriptStep[], exitOnFail = true, messages?: string[]): number => {\n return safeExit(() => {\n const pkgName = process.env.npm_package_name\n console.log(chalk.green(`${name} [${pkgName}]`))\n let totalStatus = 0\n for (const [i, [command, args, config]] of steps.entries()) {\n if (messages?.[i]) {\n console.log(chalk.gray(messages?.[i]))\n }\n const argList = Array.isArray(args) ? args : args.split(' ')\n if (command === 'node' && !existsSync(argList[0])) {\n throw new Error(`File not found [${argList[0]}]`)\n }\n const status\n = spawnSync(command, Array.isArray(args) ? args : args.split(' '), {\n ...config,\n encoding: 'utf8',\n env: { FORCE_COLOR: '3', ...process.env },\n shell: true,\n stdio: 'inherit',\n }).status ?? 0\n checkResult(name, status, 'error', exitOnFail)\n totalStatus += status ?? 0\n }\n return totalStatus\n }, !!exitOnFail)\n}\n","import {\n existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { claudeCommandTemplates, XYLABS_COMMANDS_PREFIX } from '../lib/index.ts'\nimport { INIT_CWD } from '../lib/yarn/index.ts'\n\nconst syncCommandFiles = (commandsDir: string) => {\n const templates = claudeCommandTemplates()\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(commandsDir, 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 removeStaleCommands = (commandsDir: string, templateNames: Set<string>) => {\n const existingCommands = readdirSync(commandsDir).filter(f => f.startsWith(XYLABS_COMMANDS_PREFIX) && f.endsWith('.md'))\n let removed = 0\n\n for (const file of existingCommands) {\n if (!templateNames.has(file)) {\n unlinkSync(PATH.resolve(commandsDir, file))\n removed++\n }\n }\n\n return removed\n}\n\nconst logCommandsResult = (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/commands/${XYLABS_COMMANDS_PREFIX}*.md: ${parts.join(', ')}`))\n } else {\n console.log(chalk.gray(`.claude/commands/${XYLABS_COMMANDS_PREFIX}*.md: already up to date`))\n }\n}\n\nexport const claudeCommands = (): number => {\n const cwd = INIT_CWD() ?? process.cwd()\n const commandsDir = PATH.resolve(cwd, '.claude', 'commands')\n\n mkdirSync(commandsDir, { recursive: true })\n\n const {\n created, templateNames, updated,\n } = syncCommandFiles(commandsDir)\n const removed = removeStaleCommands(commandsDir, templateNames)\n logCommandsResult(created, updated, removed)\n\n return 0\n}\n","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 path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { deleteGlob, yarnWorkspaces } from '../lib/index.ts'\n\nexport const cleanDocs = () => {\n const pkgName = process.env.npm_package_name\n console.log(chalk.green(`Cleaning Docs [${pkgName}]`))\n for (const { location } of yarnWorkspaces()) deleteGlob(path.join(location, 'docs'))\n return 0\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const dead = () => {\n return runSteps('Dead', [['yarn', ['ts-prune', '-p', 'tsconfig.json']]])\n}\n","import type { ScriptStep } from '../lib/index.ts'\nimport { runSteps } from '../lib/index.ts'\n\nexport interface GenDocsParams {\n incremental?: boolean\n pkg?: string\n}\n\nexport interface GenDocsPackageParams { pkg: string }\n\nexport const genDocs = ({ pkg, incremental }: GenDocsParams) => {\n return pkg ? genDocsPackage({ pkg }) : genDocsAll({ incremental })\n}\n\nexport const genDocsPackage = ({ pkg }: GenDocsPackageParams) => {\n const steps: ScriptStep[] = [['yarn', ['workspace', pkg, 'run', 'package-gen-docs']]]\n\n return runSteps(`GenDocs [${pkg}]`, [...steps])\n}\n\nexport const genDocsAll = ({ incremental }: GenDocsParams) => {\n const incrementalOptions = incremental ? ['--since', '-pA'] : ['-pA']\n const steps: ScriptStep[] = [['yarn', ['workspaces', 'foreach', ...incrementalOptions, 'run', 'package-gen-docs']]]\n\n return runSteps(`GenDocs [All${incremental ? '-Incremental' : ''}]`, [...steps])\n}\n","import { generateIgnoreFiles } from '../lib/index.ts'\n\nconst filename = '.gitignore'\n\nexport const gitignoreGen = (pkg?: string) => generateIgnoreFiles(filename, pkg)\n","import chalk from 'chalk'\nimport ParseGitConfig from 'parse-git-config'\n\nexport const gitlint = () => {\n console.log(`\\nGitlint Start [${process.cwd()}]\\n`)\n let valid = 0\n let warnings = 0\n const errors = 0\n const gitConfig = ParseGitConfig.sync()\n\n const warn = (message: string) => {\n console.warn(chalk.yellow(`Warning: ${message}`))\n warnings++\n }\n\n if (gitConfig.core.ignorecase) {\n warn('Please set core.ignorecase to FALSE in .git/config file [run yarn gitlint-fix]')\n } else {\n valid++\n }\n\n if (gitConfig.core.autocrlf === false) {\n valid++\n } else {\n warn('Please set core.autocrlf to FALSE in .git/config file [run yarn gitlint-fix]')\n }\n\n if (gitConfig.core.eol === 'lf') {\n valid++\n } else {\n warn('Please set core.eol to \"lf\" in .git/config file [run yarn gitlint-fix]')\n }\n\n const resultMessages: string[] = []\n if (valid > 0) {\n resultMessages.push(chalk.green(`Passed: ${valid}`))\n }\n if (warnings > 0) {\n resultMessages.push(chalk.yellow(`Warnings: ${warnings}`))\n }\n if (errors > 0) {\n resultMessages.push(chalk.red(` Errors: ${errors}`))\n }\n console.warn(`Gitlint Finish [ ${resultMessages.join(' | ')} ]\\n`)\n return warnings + errors === 0 ? 1 : 0\n}\n","import { execSync } from 'node:child_process'\n\nimport chalk from 'chalk'\nimport ParseGitConfig from 'parse-git-config'\n\nexport const gitlintFix = () => {\n console.log(`\\nGitlint Fix Start [${process.cwd()}]\\n`)\n\n const gitConfig = ParseGitConfig.sync()\n\n if (gitConfig.core.ignorecase) {\n execSync('git config core.ignorecase false', { stdio: 'inherit' })\n console.warn(chalk.yellow('\\nGitlint Fix: Updated core.ignorecase to be false\\n'))\n }\n\n if (gitConfig.core.autocrlf !== false) {\n execSync('git config core.autocrlf false', { stdio: 'inherit' })\n console.warn(chalk.yellow('\\nGitlint Fix: Updated core.autocrlf to be false\\n'))\n }\n\n if (gitConfig.core.eol !== 'lf') {\n execSync('git config core.eol lf', { stdio: 'inherit' })\n console.warn(chalk.yellow('\\nGitlint Fix: Updated core.eol to be \"lf\"\\n'))\n }\n\n return 1\n}\n","import chalk from 'chalk'\nimport { init } from 'license-checker'\n\nimport { yarnWorkspaces } from '../lib/index.ts'\n\nexport const license = async (pkg?: string) => {\n const workspaces = yarnWorkspaces()\n const workspaceList = workspaces.filter(({ name }) => {\n return pkg === undefined || name === pkg\n })\n\n const exclude = new Set([\n 'MIT',\n 'MIT*',\n 'ISC',\n 'Apache-2.0',\n 'BSD',\n 'BSD*',\n 'BSD-2-Clause',\n 'BSD-3-Clause',\n 'CC-BY-4.0',\n 'Unlicense',\n 'CC-BY-3.0',\n 'CC0-1.0',\n 'LGPL-3.0-only',\n 'LGPL-3.0',\n 'LGPL-3.0-or-later',\n 'Python-2.0',\n ])\n\n console.log(chalk.green('License Checker'))\n\n return (\n (\n await Promise.all(\n workspaceList.map(({ location, name }) => {\n return new Promise<number>((resolve) => {\n init({ production: true, start: location }, (error, packages) => {\n if (error) {\n console.error(chalk.red(`License Checker [${name}] Error`))\n console.error(chalk.gray(error))\n console.log('\\n')\n resolve(1)\n } else {\n console.log(chalk.green(`License Checker [${name}]`))\n let count = 0\n for (const [name, info] of Object.entries(packages)) {\n const licenses = Array.isArray(info.licenses) ? info.licenses : [info.licenses]\n for (let license of licenses) {\n if (license) {\n // remove surrounding parens on some string\n const processedLicense = (license[0] === '(' && license.at(-1) === ')')\n ? license.slice(1, -2)\n : license\n // get list of OR licenses from string\n const orLicenses = processedLicense.split(' OR ')\n let orLicenseFound = false\n for (const orLicense of orLicenses) {\n if (exclude.has(orLicense)) {\n orLicenseFound = true\n }\n }\n if (!orLicenseFound) {\n count++\n console.warn(chalk.yellow(`${name}: Package License not allowed [${license}]`))\n }\n }\n }\n }\n console.log('\\n')\n resolve(count)\n }\n })\n })\n }),\n )\n )\n // eslint-disable-next-line unicorn/no-array-reduce\n .reduce((prev, value) => prev || value, 0)\n )\n}\n","import { generateIgnoreFiles } from '../lib/index.ts'\n\nconst filename = '.npmignore'\n\nexport const npmignoreGen = (pkg?: string) => generateIgnoreFiles(filename, pkg)\n","import { runSteps } from '../lib/index.ts'\n\nexport const retest = () => {\n return runSteps('Test', [\n ['yarn', ['jest', '--clearCache']],\n ['yarn', ['jest', '.']],\n ])\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const test = () => {\n return runSteps('Test', [['yarn', ['vitest', '.']]])\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const updateYarnPlugins = () => {\n return runSteps('Update Yarn Plugins', [\n ['yarn', ['plugin', 'import', 'https://mskelton.dev/yarn-outdated/v3']],\n ['yarn', ['plugin', 'import', 'version']],\n ['yarn', ['plugin', 'import', 'interactive-tools']],\n ['yarn', ['plugin', 'import', 'workspace-tools']],\n ])\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const updateYarnVersion = () => {\n return runSteps('Update Yarn Version', [['yarn', ['set', 'version', 'latest']]])\n}\n","import { isYarnVersionOrGreater, processEx } from '../lib/index.ts'\n\nexport const yarn3Only = () => {\n const [valid, version] = isYarnVersionOrGreater(3)\n if (!valid) {\n processEx(`Invalid Yarn version [${version}]`)\n }\n return 0\n}\n","import type { Argv } from 'yargs'\n\nexport const packagePositionalParam = (yargs: Argv<unknown>) => {\n return yargs.positional('package', { describe: 'Specific package to target', type: 'string' })\n}\n","import type { Argv } from 'yargs'\n\nimport {\n claudeCommands,\n claudeRules,\n cleanDocs,\n dead,\n genDocs,\n gitignoreGen,\n gitlint,\n gitlintFix,\n license,\n npmignoreGen,\n retest,\n test,\n updateYarnPlugins,\n updateYarnVersion,\n yarn3Only,\n} from '../actions/index.ts'\nimport { packagePositionalParam } from './param.ts'\n\nexport const xyCommonCommands = (args: Argv) => {\n return args\n\n .command(\n 'claude-commands',\n 'Claude Commands - Sync XY Labs standard Claude slash commands to .claude/commands/',\n yargs => yargs,\n (argv) => {\n if (argv.verbose) console.log('Claude Commands')\n process.exitCode = claudeCommands()\n },\n )\n .command(\n 'claude-rules',\n 'Claude Rules - Sync XY Labs standard Claude rules to .claude/rules/',\n (yargs) => {\n return yargs\n .option('force', {\n alias: 'f',\n default: false,\n description: 'Overwrite existing CLAUDE.md',\n type: 'boolean',\n })\n },\n (argv) => {\n if (argv.verbose) console.log('Claude Rules')\n process.exitCode = claudeRules({ force: argv.force })\n },\n )\n .command(\n 'license [package]',\n 'License - Check licenses of dependencies',\n (yargs) => {\n return packagePositionalParam(yargs)\n },\n async (argv) => {\n if (argv.verbose) console.log(`License: ${argv.package ?? 'all'}`)\n process.exitCode = await license()\n },\n )\n .command(\n 'dead [package]',\n 'Dead - Check for dead code',\n (yargs) => {\n return packagePositionalParam(yargs)\n },\n (argv) => {\n if (argv.verbose) console.log('Dead')\n process.exitCode = dead()\n },\n )\n .command(\n 'gen-docs [package]',\n 'GenDocs - Generate TypeDocs',\n (yargs) => {\n return packagePositionalParam(yargs)\n },\n (argv) => {\n if (argv.verbose) console.log(`Generating TypeDocs: ${argv.package ?? 'all'}`)\n process.exitCode = genDocs({ incremental: !!argv.incremental, pkg: argv.package as string })\n },\n )\n .command(\n 'clean-docs',\n 'CleanDocs - Clean TypeDocs',\n yargs => yargs,\n (argv) => {\n if (argv.verbose) console.log('Cleaning TypeDocs: all')\n process.exitCode = cleanDocs()\n },\n )\n .command(\n 'gitlint [package]',\n 'Gitlint - Lint your git config',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('Gitlint')\n process.exitCode = argv.fix ? gitlintFix() : gitlint()\n },\n )\n .command(\n 'gitignore-gen',\n 'GitIgnore Gen - Generate .gitignore files',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('GitIgnore Gen')\n process.exitCode = gitignoreGen()\n },\n )\n .command(\n 'npmignore-gen',\n 'NpmIgnore Gen - Generate .npmignore files',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('NpmIgnore Gen')\n process.exitCode = npmignoreGen()\n },\n )\n .command(\n 'retest',\n 'Re-Test - Run Jest Tests with cleaned cache',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('Re-Testing')\n process.exitCode = retest()\n },\n )\n .command(\n 'test',\n 'Test - Run Jest Tests',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('Testing')\n process.exitCode = test()\n },\n )\n .command(\n 'upplug',\n 'UpPlug - Update Yarn Plugins',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('UpPlug')\n process.exitCode = updateYarnPlugins()\n },\n )\n .command(\n 'upyarn',\n 'UpYarn - Update Yarn Version',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('UpYarn')\n process.exitCode = updateYarnVersion()\n },\n )\n .command(\n 'yarn3only',\n 'Yarn3Only - Check if using Yarn v3',\n (yargs) => {\n return yargs\n },\n (argv) => {\n if (argv.verbose) console.log('Yarn 3 Check')\n process.exitCode = yarn3Only()\n },\n )\n}\n"],"mappings":";AAAA,OAAO,WAAW;AAEX,IAAM,cAAc,CAAC,MAAc,QAAgB,QAA0B,SAAS,aAAa,UAAU;AAClH,MAAI,QAAQ;AACV,UAAM,UAAU,aAAa,sBAAsB;AACnD,UAAM,YAAY,UAAU,UAAU,MAAM,MAAM,MAAM;AACxD,YAAQ,KAAK,EAAE,UAAU,GAAG,IAAI,QAAQ,MAAM,aAAa,OAAO,EAAE,CAAC;AACrE,QAAI,YAAY;AACd,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,EACF;AACF;;;ACXA,SAAS,aAAa,oBAAoB;AAC1C,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAEjB,IAAMA,WAAU,cAAc,YAAY,GAAG;AAC7C,IAAM,cAAc,KAAK,QAAQA,SAAQ,QAAQ,uCAAuC,CAAC;AACzF,IAAM,eAAe,KAAK,QAAQ,aAAa,WAAW;AAEnD,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAE/B,IAAM,wBAAwB,MAA8B;AACjE,QAAM,WAAW,KAAK,QAAQ,cAAc,OAAO;AACnD,QAAM,QAAQ,YAAY,QAAQ,EAAE,OAAO,OAAK,EAAE,WAAW,mBAAmB,KAAK,EAAE,SAAS,KAAK,CAAC;AACtG,QAAM,SAAiC,CAAC;AACxC,aAAW,QAAQ,OAAO;AACxB,WAAO,IAAI,IAAI,aAAa,KAAK,QAAQ,UAAU,IAAI,GAAG,MAAM;AAAA,EAClE;AACA,SAAO;AACT;AAEO,IAAM,yBAAyB,MAA8B;AAClE,QAAM,cAAc,KAAK,QAAQ,cAAc,UAAU;AACzD,QAAM,QAAQ,YAAY,WAAW,EAAE,OAAO,OAAK,EAAE,WAAW,sBAAsB,KAAK,EAAE,SAAS,KAAK,CAAC;AAC5G,QAAM,SAAiC,CAAC;AACxC,aAAW,QAAQ,OAAO;AACxB,WAAO,IAAI,IAAI,aAAa,KAAK,QAAQ,aAAa,IAAI,GAAG,MAAM;AAAA,EACrE;AACA,SAAO;AACT;AAEO,IAAM,0BAA0B,MACrC,aAAa,KAAK,QAAQ,cAAc,mBAAmB,GAAG,MAAM;;;AChCtE,OAAO,QAAQ;AAEf,SAAS,YAAY;AAEd,IAAM,aAAa,CAAC,aAAqB;AAE9C,QAAM,QAAQ,KAAK,KAAK,QAAQ;AAGhC,aAAW,QAAQ,OAAO;AACxB,OAAG,OAAO,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EAClD;AACF;;;ACZA,OAAOC,YAAW;;;ACAX,IAAM,YAAY,CAEvB,IACA,SACA,YAAY,CAACC,QAAW,CAAC,CAACA,IAAG,QAAQ,CAAC,CAACA,IAAG,YACvC;AACH,SAAO,UAAU,EAAO,IAAI,QAAQ,EAAO,IAAI;AACjD;;;ACLO,IAAM,qBAAqB,CAChC,IAAa,YACV;AACH,SAAO,UAAa,IAAI,SAAS,CAACC,QAAiBA,IAA6B,UAAU,MAAS;AACrG;;;AFDO,IAAM,YAAY,CAAC,OAAgB;AACxC,QAAM,QAAQ,OAAO,OAAO,WAAW,IAAI,MAAM,EAAE,IAAI;AACvD,QAAM,WACF,mBAAmB,OAAO,CAACC,WAAU;AACrC,QAAIA,OAAM,SAAS,UAAU;AAC3B,cAAQ,MAAMC,OAAM,IAAI,IAAID,OAAM,IAAI,cAAc,CAAC;AAAA,IACvD,OAAO;AACL,cAAQ,MAAMC,OAAM,IAAI,UAAUD,OAAM,IAAI,EAAE,CAAC;AAAA,IACjD;AACA,WAAOA,OAAM,SAAS;AAAA,EACxB,CAAC,KACE,UAAU,OAAO,CAACA,WAAU;AAC7B,YAAQ,MAAMC,OAAM,IAAI,GAAGD,OAAM,IAAI,KAAKA,OAAM,OAAO,EAAE,CAAC;AAC1D,WAAO;AAAA,EACT,CAAC,MACG,MAAM;AACR,YAAQ,MAAMC,OAAM,IAAI,qBAAqB,KAAK,UAAU,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC;AAC3E,WAAO;AAAA,EACT,GAAG;AAEL,UAAQ,KAAK,QAAQ,YAAY,QAAQ;AAC3C;;;AGtBA,IAAM,WAAW,CAAC,MAAoB,aAAa,SAAiB;AAClE,MAAI;AACF,UAAM,SAAS,KAAK;AACpB,QAAI,UAAU,YAAY;AACxB,cAAQ,KAAK,MAAM;AAAA,IACrB;AACA,WAAO;AAAA,EACT,SAAS,IAAI;AACX,WAAO,UAAU,EAAE;AAAA,EACrB;AACF;;;ACdO,IAAM,wBAAwB;AAC9B,IAAM,yBAAyB;;;ACAtC;AAAA,EACE;AAAA,EAAY,gBAAAC;AAAA,EACZ;AAAA,OACK;;;ACJA,IAAM,QAAQ,CAAC,UAAwC,OAAO,KAAK,EAAE,WAAW;AAChF,IAAM,WAAW,CAAC,UAAwC,CAAC,MAAM,KAAK;;;ACDtE,IAAM,QAAQ,CAAC,GAAa,MAA6B,oBAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;;;ACK/F,IAAM,6BAAkD,EAAE,UAAU,OAAO;;;AHM3E,IAAM,YAAY,CAAC,KAAe,UAA+B,+BACtE,WAAW,GAAG,IACVC,cAAa,KAAK,OAAO,EAAE,QAAQ,uBAAuB,sBAAsB,EAAE,MAAM,sBAAsB,IAC9G,CAAC;AAEA,IAAM,oBAAoB,CAAC,KAAe,UAA+B,+BAC9E,UAAU,KAAK,OAAO,EAAE,OAAO,QAAQ;AAElC,IAAM,aAAa,CAAC,KAAe,OAAiB,UAA4B,+BAA+B;AACpH,QAAM,WAAW,WAAW,GAAG,IAAIA,cAAa,KAAK,OAAO,IAAI;AAChE,QAAM,UAAU,MAAM,KAAK,sBAAsB;AAEjD,MAAI,aAAa,QAAS,eAAc,KAAK,SAAS,OAAO;AAC/D;;;AIxBA,OAAOC,YAAW;;;ACAlB,SAAS,iBAAiB;AAEnB,IAAM,yBAAyB,CAAC,OAAe,OAAgB,UAAsC;AAC1G,QAAM,SAAS,UAAU,QAAQ,CAAC,IAAI,GAAG,EAAE,UAAU,QAAQ,OAAO,KAAK,CAAC;AAC1E,QAAM,UAAU,OAAO,OAAO,SAAS,EAAE,WAAW,MAAM,EAAE;AAC5D,QAAM,iBAAiB,QAAQ,MAAM,GAAG,EAAE,IAAI,SAAO,OAAO,SAAS,GAAG,CAAC;AACzE,QAAM,aAAa,eAAe,CAAC,IAAI;AACvC,QAAM,aAAa,eAAe,CAAC,KAAK,SAAS,eAAe,CAAC;AACjE,QAAM,aAAa,eAAe,CAAC,KAAK,SAAS,eAAe,CAAC;AAEjE,QAAM,UAAU,cAAc;AAC9B,QAAM,UAAU,aAAa,KAAK,cAAc;AAChD,QAAM,UAAU,aAAa,KAAK,aAAa,KAAK,cAAc;AAElE,SAAO,CAAC,WAAW,WAAW,SAAS,OAAO;AAChD;;;ACfA,SAAS,aAAAC,kBAAiB;AAInB,IAAM,iBAAiB,MAAmB;AAC/C,QAAM,SAASA,WAAU,QAAQ,CAAC,cAAc,QAAQ,UAAU,aAAa,GAAG,EAAE,UAAU,QAAQ,OAAO,KAAK,CAAC;AACnH,MAAI,OAAO,OAAO;AAChB,UAAM,OAAO;AAAA,EACf;AACA,SACE,OAAO,OACJ,SAAS,EAGT,MAAM,IAAI,EACV,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,SAAS;AACb,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,CAAC;AAEP;;;ACjBO,IAAM,gBAAgB,CAAC,QAA2B;AACvD,QAAM,YAAY,eAAe,EAAE,KAAK,CAAC,EAAE,KAAK,MAAM,SAAS,GAAG;AAClE,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,aAAa,GAAG,YAAY;AAC5D,SAAO;AACT;;;ACPO,IAAM,WAAW,MAAM;AAC5B,MAAI,CAAC,QAAQ,IAAI,SAAU,SAAQ,MAAM,kBAAkB;AAC3D,SAAO,QAAQ,IAAI;AACrB;;;AJKA,IAAM,gBAAgB,CAAC,GAAW,MAAc,EAAE,cAAc,CAAC;AAEjE,IAAM,eAAe,CAAC,GAAa,MAA0B,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,aAAa;AAE7F,IAAM,sBAAsB,CAACC,WAAkB,QAAiB;AACrE,UAAQ,IAAIC,OAAM,MAAM,YAAYD,SAAQ,QAAQ,CAAC;AACrD,QAAM,MAAM,SAAS,KAAK;AAC1B,QAAM,aAAa,MAAM,CAAC,cAAc,GAAG,CAAC,IAAI,eAAe;AAC/D,QAAM,cAAc,CAAC,aAA+B,kBAAkB,GAAG,QAAQ,IAAIA,SAAQ,EAAE;AAC/F,QAAM,eAAe,CAAC,UAAkB,YAAsB,WAAW,GAAG,QAAQ,IAAIA,SAAQ,IAAI,OAAO;AAC3G,QAAM,UAAU,WAAW,IAAI,CAAC,EAAE,UAAU,KAAK,MAAM;AACrD,QAAI;AACF,mBAAa,UAAU,aAAa,YAAY,GAAG,GAAG,YAAY,QAAQ,CAAC,CAAC;AAC5E,aAAO;AAAA,IACT,SAAS,IAAI;AACX,YAAM,QAAQ;AACd,cAAQ,MAAM,YAAYA,SAAQ,WAAW,IAAI,MAAM,MAAM,OAAO,GAAG;AACvE,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACD,QAAM,YAAY,QAAQ,MAAM,YAAU,WAAW,CAAC;AACtD,SAAO,YAAY,IAAI;AACzB;;;AK7BA,SAAS,aAAAE,kBAAiB;AAC1B,SAAS,cAAAC,mBAAkB;AAE3B,OAAOC,YAAW;AASX,IAAM,WAAW,CAAC,MAAc,OAAqB,aAAa,MAAM,aAAgC;AAC7G,SAAO,SAAS,MAAM;AACpB,UAAM,UAAU,QAAQ,IAAI;AAC5B,YAAQ,IAAIC,OAAM,MAAM,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC;AAC/C,QAAI,cAAc;AAClB,eAAW,CAAC,GAAG,CAAC,SAAS,MAAM,MAAM,CAAC,KAAK,MAAM,QAAQ,GAAG;AAC1D,UAAI,WAAW,CAAC,GAAG;AACjB,gBAAQ,IAAIA,OAAM,KAAK,WAAW,CAAC,CAAC,CAAC;AAAA,MACvC;AACA,YAAM,UAAU,MAAM,QAAQ,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG;AAC3D,UAAI,YAAY,UAAU,CAACC,YAAW,QAAQ,CAAC,CAAC,GAAG;AACjD,cAAM,IAAI,MAAM,mBAAmB,QAAQ,CAAC,CAAC,GAAG;AAAA,MAClD;AACA,YAAM,SACFC,WAAU,SAAS,MAAM,QAAQ,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,GAAG;AAAA,QACjE,GAAG;AAAA,QACH,UAAU;AAAA,QACV,KAAK,EAAE,aAAa,KAAK,GAAG,QAAQ,IAAI;AAAA,QACxC,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC,EAAE,UAAU;AACf,kBAAY,MAAM,QAAQ,SAAS,UAAU;AAC7C,qBAAe,UAAU;AAAA,IAC3B;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC,UAAU;AACjB;;;ACvCA;AAAA,EACE,cAAAC;AAAA,EAAY;AAAA,EAAW,eAAAC;AAAA,EAAa,gBAAAC;AAAA,EAAc;AAAA,EAAY,iBAAAC;AAAA,OACzD;AACP,OAAOC,WAAU;AAEjB,OAAOC,YAAW;AAKlB,IAAM,mBAAmB,CAAC,gBAAwB;AAChD,QAAM,YAAY,uBAAuB;AACzC,QAAM,gBAAgB,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC;AACpD,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,aAAW,CAACC,WAAU,OAAO,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC3D,UAAM,aAAaC,MAAK,QAAQ,aAAaD,SAAQ;AACrD,UAAM,WAAWE,YAAW,UAAU,IAAIC,cAAa,YAAY,MAAM,IAAI;AAC7E,QAAI,aAAa,QAAS;AAC1B,IAAAC,eAAc,YAAY,SAAS,MAAM;AACzC,QAAI,UAAU;AACZ;AAAA,IACF,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAe;AAAA,EAC1B;AACF;AAEA,IAAM,sBAAsB,CAAC,aAAqB,kBAA+B;AAC/E,QAAM,mBAAmBC,aAAY,WAAW,EAAE,OAAO,OAAK,EAAE,WAAW,sBAAsB,KAAK,EAAE,SAAS,KAAK,CAAC;AACvH,MAAI,UAAU;AAEd,aAAW,QAAQ,kBAAkB;AACnC,QAAI,CAAC,cAAc,IAAI,IAAI,GAAG;AAC5B,iBAAWJ,MAAK,QAAQ,aAAa,IAAI,CAAC;AAC1C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,SAAiB,SAAiB,YAAoB;AAC/E,MAAI,WAAW,WAAW,SAAS;AACjC,UAAM,QAAQ;AAAA,MACZ,UAAU,GAAG,OAAO,aAAa;AAAA,MACjC,UAAU,GAAG,OAAO,aAAa;AAAA,MACjC,UAAU,GAAG,OAAO,aAAa;AAAA,IACnC,EAAE,OAAO,OAAO;AAChB,YAAQ,IAAIK,OAAM,MAAM,oBAAoB,sBAAsB,SAAS,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAChG,OAAO;AACL,YAAQ,IAAIA,OAAM,KAAK,oBAAoB,sBAAsB,0BAA0B,CAAC;AAAA,EAC9F;AACF;AAEO,IAAM,iBAAiB,MAAc;AAC1C,QAAM,MAAM,SAAS,KAAK,QAAQ,IAAI;AACtC,QAAM,cAAcL,MAAK,QAAQ,KAAK,WAAW,UAAU;AAE3D,YAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAE1C,QAAM;AAAA,IACJ;AAAA,IAAS;AAAA,IAAe;AAAA,EAC1B,IAAI,iBAAiB,WAAW;AAChC,QAAM,UAAU,oBAAoB,aAAa,aAAa;AAC9D,oBAAkB,SAAS,SAAS,OAAO;AAE3C,SAAO;AACT;;;ACzEA;AAAA,EACE,cAAAM;AAAA,EAAY,aAAAC;AAAA,EAAW,eAAAC;AAAA,EAAa,gBAAAC;AAAA,EAAc,cAAAC;AAAA,EAAY,iBAAAC;AAAA,OACzD;AACP,OAAOC,WAAU;AAEjB,OAAOC,YAAW;AAOlB,IAAM,gBAAgB,CAAC,aAAqB;AAC1C,QAAM,YAAY,sBAAsB;AACxC,QAAM,gBAAgB,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC;AACpD,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,aAAW,CAACC,WAAU,OAAO,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC3D,UAAM,aAAaC,MAAK,QAAQ,UAAUD,SAAQ;AAClD,UAAM,WAAWE,YAAW,UAAU,IAAIC,cAAa,YAAY,MAAM,IAAI;AAC7E,QAAI,aAAa,QAAS;AAC1B,IAAAC,eAAc,YAAY,SAAS,MAAM;AACzC,QAAI,UAAU;AACZ;AAAA,IACF,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAe;AAAA,EAC1B;AACF;AAEA,IAAM,mBAAmB,CAAC,UAAkB,kBAA+B;AACzE,QAAM,gBAAgBC,aAAY,QAAQ,EAAE,OAAO,OAAK,EAAE,WAAW,mBAAmB,KAAK,EAAE,SAAS,KAAK,CAAC;AAC9G,MAAI,UAAU;AAEd,aAAW,QAAQ,eAAe;AAChC,QAAI,CAAC,cAAc,IAAI,IAAI,GAAG;AAC5B,MAAAC,YAAWL,MAAK,QAAQ,UAAU,IAAI,CAAC;AACvC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,iBAAiB,CAAC,SAAiB,SAAiB,YAAoB;AAC5E,MAAI,WAAW,WAAW,SAAS;AACjC,UAAM,QAAQ;AAAA,MACZ,UAAU,GAAG,OAAO,aAAa;AAAA,MACjC,UAAU,GAAG,OAAO,aAAa;AAAA,MACjC,UAAU,GAAG,OAAO,aAAa;AAAA,IACnC,EAAE,OAAO,OAAO;AAChB,YAAQ,IAAIM,OAAM,MAAM,iBAAiB,mBAAmB,SAAS,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAC1F,OAAO;AACL,YAAQ,IAAIA,OAAM,KAAK,iBAAiB,mBAAmB,0BAA0B,CAAC;AAAA,EACxF;AACF;AAEA,IAAM,wBAAwB,CAAC,KAAa,UAAoB;AAC9D,QAAM,cAAcN,MAAK,QAAQ,KAAK,WAAW;AAEjD,MAAI,CAACC,YAAW,WAAW,KAAK,OAAO;AACrC,QAAI,SAASA,YAAW,WAAW,GAAG;AACpC,cAAQ,IAAIK,OAAM,OAAO,gCAAgC,CAAC;AAAA,IAC5D;AACA,IAAAH,eAAc,aAAa,wBAAwB,GAAG,MAAM;AAC5D,YAAQ,IAAIG,OAAM,MAAM,qBAAqB,CAAC;AAAA,EAChD,OAAO;AACL,YAAQ,IAAIA,OAAM,KAAK,oCAAoC,CAAC;AAAA,EAC9D;AACF;AAEO,IAAM,cAAc,CAAC,EAAE,MAAM,IAAyB,CAAC,MAAc;AAC1E,QAAM,MAAM,SAAS,KAAK,QAAQ,IAAI;AACtC,QAAM,WAAWN,MAAK,QAAQ,KAAK,WAAW,OAAO;AAErD,EAAAO,WAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAEvC,QAAM;AAAA,IACJ;AAAA,IAAS;AAAA,IAAe;AAAA,EAC1B,IAAI,cAAc,QAAQ;AAC1B,QAAM,UAAU,iBAAiB,UAAU,aAAa;AACxD,iBAAe,SAAS,SAAS,OAAO;AACxC,wBAAsB,KAAK,KAAK;AAEhC,SAAO;AACT;;;AC1FA,OAAO,UAAU;AAEjB,OAAOC,YAAW;AAIX,IAAM,YAAY,MAAM;AAC7B,QAAM,UAAU,QAAQ,IAAI;AAC5B,UAAQ,IAAIC,OAAM,MAAM,kBAAkB,OAAO,GAAG,CAAC;AACrD,aAAW,EAAE,SAAS,KAAK,eAAe,EAAG,YAAW,KAAK,KAAK,UAAU,MAAM,CAAC;AACnF,SAAO;AACT;;;ACTO,IAAM,OAAO,MAAM;AACxB,SAAO,SAAS,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,MAAM,eAAe,CAAC,CAAC,CAAC;AACzE;;;ACMO,IAAM,UAAU,CAAC,EAAE,KAAK,YAAY,MAAqB;AAC9D,SAAO,MAAM,eAAe,EAAE,IAAI,CAAC,IAAI,WAAW,EAAE,YAAY,CAAC;AACnE;AAEO,IAAM,iBAAiB,CAAC,EAAE,IAAI,MAA4B;AAC/D,QAAM,QAAsB,CAAC,CAAC,QAAQ,CAAC,aAAa,KAAK,OAAO,kBAAkB,CAAC,CAAC;AAEpF,SAAO,SAAS,YAAY,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAChD;AAEO,IAAM,aAAa,CAAC,EAAE,YAAY,MAAqB;AAC5D,QAAM,qBAAqB,cAAc,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK;AACpE,QAAM,QAAsB,CAAC,CAAC,QAAQ,CAAC,cAAc,WAAW,GAAG,oBAAoB,OAAO,kBAAkB,CAAC,CAAC;AAElH,SAAO,SAAS,eAAe,cAAc,iBAAiB,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;AACjF;;;ACvBA,IAAM,WAAW;AAEV,IAAM,eAAe,CAAC,QAAiB,oBAAoB,UAAU,GAAG;;;ACJ/E,OAAOC,YAAW;AAClB,OAAO,oBAAoB;AAEpB,IAAM,UAAU,MAAM;AAC3B,UAAQ,IAAI;AAAA,iBAAoB,QAAQ,IAAI,CAAC;AAAA,CAAK;AAClD,MAAI,QAAQ;AACZ,MAAI,WAAW;AACf,QAAM,SAAS;AACf,QAAM,YAAY,eAAe,KAAK;AAEtC,QAAM,OAAO,CAAC,YAAoB;AAChC,YAAQ,KAAKA,OAAM,OAAO,YAAY,OAAO,EAAE,CAAC;AAChD;AAAA,EACF;AAEA,MAAI,UAAU,KAAK,YAAY;AAC7B,SAAK,gFAAgF;AAAA,EACvF,OAAO;AACL;AAAA,EACF;AAEA,MAAI,UAAU,KAAK,aAAa,OAAO;AACrC;AAAA,EACF,OAAO;AACL,SAAK,8EAA8E;AAAA,EACrF;AAEA,MAAI,UAAU,KAAK,QAAQ,MAAM;AAC/B;AAAA,EACF,OAAO;AACL,SAAK,wEAAwE;AAAA,EAC/E;AAEA,QAAM,iBAA2B,CAAC;AAClC,MAAI,QAAQ,GAAG;AACb,mBAAe,KAAKA,OAAM,MAAM,WAAW,KAAK,EAAE,CAAC;AAAA,EACrD;AACA,MAAI,WAAW,GAAG;AAChB,mBAAe,KAAKA,OAAM,OAAO,aAAa,QAAQ,EAAE,CAAC;AAAA,EAC3D;AACA,MAAI,SAAS,GAAG;AACd,mBAAe,KAAKA,OAAM,IAAI,YAAY,MAAM,EAAE,CAAC;AAAA,EACrD;AACA,UAAQ,KAAK,oBAAoB,eAAe,KAAK,KAAK,CAAC;AAAA,CAAM;AACjE,SAAO,WAAW,WAAW,IAAI,IAAI;AACvC;;;AC7CA,SAAS,gBAAgB;AAEzB,OAAOC,YAAW;AAClB,OAAOC,qBAAoB;AAEpB,IAAM,aAAa,MAAM;AAC9B,UAAQ,IAAI;AAAA,qBAAwB,QAAQ,IAAI,CAAC;AAAA,CAAK;AAEtD,QAAM,YAAYA,gBAAe,KAAK;AAEtC,MAAI,UAAU,KAAK,YAAY;AAC7B,aAAS,oCAAoC,EAAE,OAAO,UAAU,CAAC;AACjE,YAAQ,KAAKD,OAAM,OAAO,sDAAsD,CAAC;AAAA,EACnF;AAEA,MAAI,UAAU,KAAK,aAAa,OAAO;AACrC,aAAS,kCAAkC,EAAE,OAAO,UAAU,CAAC;AAC/D,YAAQ,KAAKA,OAAM,OAAO,oDAAoD,CAAC;AAAA,EACjF;AAEA,MAAI,UAAU,KAAK,QAAQ,MAAM;AAC/B,aAAS,0BAA0B,EAAE,OAAO,UAAU,CAAC;AACvD,YAAQ,KAAKA,OAAM,OAAO,8CAA8C,CAAC;AAAA,EAC3E;AAEA,SAAO;AACT;;;AC1BA,OAAOE,aAAW;AAClB,SAAS,YAAY;AAId,IAAM,UAAU,OAAO,QAAiB;AAC7C,QAAM,aAAa,eAAe;AAClC,QAAM,gBAAgB,WAAW,OAAO,CAAC,EAAE,KAAK,MAAM;AACpD,WAAO,QAAQ,UAAa,SAAS;AAAA,EACvC,CAAC;AAED,QAAM,UAAU,oBAAI,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,UAAQ,IAAIC,QAAM,MAAM,iBAAiB,CAAC;AAE1C,UAEI,MAAM,QAAQ;AAAA,IACZ,cAAc,IAAI,CAAC,EAAE,UAAU,KAAK,MAAM;AACxC,aAAO,IAAI,QAAgB,CAAC,YAAY;AACtC,aAAK,EAAE,YAAY,MAAM,OAAO,SAAS,GAAG,CAAC,OAAO,aAAa;AAC/D,cAAI,OAAO;AACT,oBAAQ,MAAMA,QAAM,IAAI,oBAAoB,IAAI,SAAS,CAAC;AAC1D,oBAAQ,MAAMA,QAAM,KAAK,KAAK,CAAC;AAC/B,oBAAQ,IAAI,IAAI;AAChB,oBAAQ,CAAC;AAAA,UACX,OAAO;AACL,oBAAQ,IAAIA,QAAM,MAAM,oBAAoB,IAAI,GAAG,CAAC;AACpD,gBAAI,QAAQ;AACZ,uBAAW,CAACC,OAAM,IAAI,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,oBAAM,WAAW,MAAM,QAAQ,KAAK,QAAQ,IAAI,KAAK,WAAW,CAAC,KAAK,QAAQ;AAC9E,uBAASC,YAAW,UAAU;AAC5B,oBAAIA,UAAS;AAEX,wBAAM,mBAAoBA,SAAQ,CAAC,MAAM,OAAOA,SAAQ,GAAG,EAAE,MAAM,MAC/DA,SAAQ,MAAM,GAAG,EAAE,IACnBA;AAEJ,wBAAM,aAAa,iBAAiB,MAAM,MAAM;AAChD,sBAAI,iBAAiB;AACrB,6BAAW,aAAa,YAAY;AAClC,wBAAI,QAAQ,IAAI,SAAS,GAAG;AAC1B,uCAAiB;AAAA,oBACnB;AAAA,kBACF;AACA,sBAAI,CAAC,gBAAgB;AACnB;AACA,4BAAQ,KAAKF,QAAM,OAAO,GAAGC,KAAI,kCAAkCC,QAAO,GAAG,CAAC;AAAA,kBAChF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AACA,oBAAQ,IAAI,IAAI;AAChB,oBAAQ,KAAK;AAAA,UACf;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAGC,OAAO,CAAC,MAAM,UAAU,QAAQ,OAAO,CAAC;AAE/C;;;AC9EA,IAAMC,YAAW;AAEV,IAAM,eAAe,CAAC,QAAiB,oBAAoBA,WAAU,GAAG;;;ACFxE,IAAM,SAAS,MAAM;AAC1B,SAAO,SAAS,QAAQ;AAAA,IACtB,CAAC,QAAQ,CAAC,QAAQ,cAAc,CAAC;AAAA,IACjC,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC;AAAA,EACxB,CAAC;AACH;;;ACLO,IAAM,OAAO,MAAM;AACxB,SAAO,SAAS,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACrD;;;ACFO,IAAM,oBAAoB,MAAM;AACrC,SAAO,SAAS,uBAAuB;AAAA,IACrC,CAAC,QAAQ,CAAC,UAAU,UAAU,uCAAuC,CAAC;AAAA,IACtE,CAAC,QAAQ,CAAC,UAAU,UAAU,SAAS,CAAC;AAAA,IACxC,CAAC,QAAQ,CAAC,UAAU,UAAU,mBAAmB,CAAC;AAAA,IAClD,CAAC,QAAQ,CAAC,UAAU,UAAU,iBAAiB,CAAC;AAAA,EAClD,CAAC;AACH;;;ACPO,IAAM,oBAAoB,MAAM;AACrC,SAAO,SAAS,uBAAuB,CAAC,CAAC,QAAQ,CAAC,OAAO,WAAW,QAAQ,CAAC,CAAC,CAAC;AACjF;;;ACFO,IAAM,YAAY,MAAM;AAC7B,QAAM,CAAC,OAAO,OAAO,IAAI,uBAAuB,CAAC;AACjD,MAAI,CAAC,OAAO;AACV,cAAU,yBAAyB,OAAO,GAAG;AAAA,EAC/C;AACA,SAAO;AACT;;;ACNO,IAAM,yBAAyB,CAAC,UAAyB;AAC9D,SAAO,MAAM,WAAW,WAAW,EAAE,UAAU,8BAA8B,MAAM,SAAS,CAAC;AAC/F;;;ACiBO,IAAM,mBAAmB,CAAC,SAAe;AAC9C,SAAO,KAEJ;AAAA,IACC;AAAA,IACA;AAAA,IACA,WAAS;AAAA,IACT,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,iBAAiB;AAC/C,cAAQ,WAAW,eAAe;AAAA,IACpC;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO,MACJ,OAAO,SAAS;AAAA,QACf,OAAO;AAAA,QACP,SAAS;AAAA,QACT,aAAa;AAAA,QACb,MAAM;AAAA,MACR,CAAC;AAAA,IACL;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,cAAc;AAC5C,cAAQ,WAAW,YAAY,EAAE,OAAO,KAAK,MAAM,CAAC;AAAA,IACtD;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO,uBAAuB,KAAK;AAAA,IACrC;AAAA,IACA,OAAO,SAAS;AACd,UAAI,KAAK,QAAS,SAAQ,IAAI,YAAY,KAAK,WAAW,KAAK,EAAE;AACjE,cAAQ,WAAW,MAAM,QAAQ;AAAA,IACnC;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO,uBAAuB,KAAK;AAAA,IACrC;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,MAAM;AACpC,cAAQ,WAAW,KAAK;AAAA,IAC1B;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO,uBAAuB,KAAK;AAAA,IACrC;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,wBAAwB,KAAK,WAAW,KAAK,EAAE;AAC7E,cAAQ,WAAW,QAAQ,EAAE,aAAa,CAAC,CAAC,KAAK,aAAa,KAAK,KAAK,QAAkB,CAAC;AAAA,IAC7F;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,WAAS;AAAA,IACT,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,wBAAwB;AACtD,cAAQ,WAAW,UAAU;AAAA,IAC/B;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,SAAS;AACvC,cAAQ,WAAW,KAAK,MAAM,WAAW,IAAI,QAAQ;AAAA,IACvD;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,eAAe;AAC7C,cAAQ,WAAW,aAAa;AAAA,IAClC;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,eAAe;AAC7C,cAAQ,WAAW,aAAa;AAAA,IAClC;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,YAAY;AAC1C,cAAQ,WAAW,OAAO;AAAA,IAC5B;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,SAAS;AACvC,cAAQ,WAAW,KAAK;AAAA,IAC1B;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,QAAQ;AACtC,cAAQ,WAAW,kBAAkB;AAAA,IACvC;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,QAAQ;AACtC,cAAQ,WAAW,kBAAkB;AAAA,IACvC;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,KAAK,QAAS,SAAQ,IAAI,cAAc;AAC5C,cAAQ,WAAW,UAAU;AAAA,IAC/B;AAAA,EACF;AACJ;","names":["require","chalk","ex","ex","error","chalk","readFileSync","readFileSync","chalk","spawnSync","filename","chalk","spawnSync","existsSync","chalk","chalk","existsSync","spawnSync","existsSync","readdirSync","readFileSync","writeFileSync","PATH","chalk","filename","PATH","existsSync","readFileSync","writeFileSync","readdirSync","chalk","existsSync","mkdirSync","readdirSync","readFileSync","unlinkSync","writeFileSync","PATH","chalk","filename","PATH","existsSync","readFileSync","writeFileSync","readdirSync","unlinkSync","chalk","mkdirSync","chalk","chalk","chalk","chalk","ParseGitConfig","chalk","chalk","name","license","filename"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/ts-scripts-yarn3",
3
- "version": "7.4.9",
3
+ "version": "7.4.10",
4
4
  "description": "TypeScript project scripts",
5
5
  "keywords": [
6
6
  "xylabs",
@@ -93,7 +93,7 @@
93
93
  "@types/parse-git-config": "~3.0.4",
94
94
  "@types/picomatch": "~4.0.2",
95
95
  "@types/yargs": "~17.0.35",
96
- "@xylabs/tsconfig": "~7.4.9",
96
+ "@xylabs/tsconfig": "~7.4.10",
97
97
  "esbuild": "0.27.3",
98
98
  "types-package-json": "~2.0.39",
99
99
  "typescript": "~5.9.3",
@@ -0,0 +1,5 @@
1
+ Run a full build of the current project using `yarn xy build`. This compiles TypeScript, runs publint, deplint, and lint. Review the output for errors and fix any issues found.
2
+
3
+ ```bash
4
+ yarn xy build
5
+ ```
@@ -0,0 +1,5 @@
1
+ Clean build artifacts from the current project using `yarn xy clean`. This removes dist, build, and other generated directories.
2
+
3
+ ```bash
4
+ yarn xy clean
5
+ ```
@@ -0,0 +1,5 @@
1
+ Compile the current project using `yarn xy compile`. This runs TypeScript compilation via tsup and publint validation. Review the output for errors and fix any issues found.
2
+
3
+ ```bash
4
+ yarn xy compile
5
+ ```
@@ -0,0 +1,5 @@
1
+ Check for circular dependency cycles in the current project using `yarn xy cycle`. Review the output and refactor any circular dependencies found.
2
+
3
+ ```bash
4
+ yarn xy cycle
5
+ ```
@@ -0,0 +1,5 @@
1
+ Check dependency declarations in the current project using `yarn xy deplint`. This verifies that all imports have corresponding entries in package.json dependencies. Review the output for missing or extraneous dependencies and fix them.
2
+
3
+ ```bash
4
+ yarn xy deplint
5
+ ```
@@ -0,0 +1,7 @@
1
+ Deploy a major version of the current project using `yarn xy deploy-major`. This bumps the major version number and publishes.
2
+
3
+ **Important:** Confirm with the user before running this command, as it publishes to npm and indicates breaking changes.
4
+
5
+ ```bash
6
+ yarn xy deploy-major
7
+ ```
@@ -0,0 +1,7 @@
1
+ Deploy a minor version of the current project using `yarn xy deploy-minor`. This bumps the minor version number and publishes.
2
+
3
+ **Important:** Confirm with the user before running this command, as it publishes to npm.
4
+
5
+ ```bash
6
+ yarn xy deploy-minor
7
+ ```
@@ -0,0 +1,7 @@
1
+ Deploy a patch version of the current project using `yarn xy deploy`. This bumps the patch version number and publishes.
2
+
3
+ **Important:** Confirm with the user before running this command, as it publishes to npm.
4
+
5
+ ```bash
6
+ yarn xy deploy
7
+ ```
@@ -0,0 +1,5 @@
1
+ Auto-fix lint issues in the current project using `yarn xy fix`. This runs ESLint with the --fix flag. Review the output for any remaining issues that could not be auto-fixed and fix them manually.
2
+
3
+ ```bash
4
+ yarn xy fix
5
+ ```
@@ -0,0 +1,5 @@
1
+ Check for unused exports and dead code in the current project using `yarn xy knip`. Review the output and remove any unused exports, files, or dependencies.
2
+
3
+ ```bash
4
+ yarn xy knip
5
+ ```
@@ -0,0 +1,5 @@
1
+ Lint the current project using `yarn xy lint`. This runs ESLint across all packages. Review the output for errors and fix any issues found.
2
+
3
+ ```bash
4
+ yarn xy lint
5
+ ```
@@ -0,0 +1,5 @@
1
+ Validate package.json files for npm publishing correctness using `yarn xy publint`. Review the output for issues and fix them.
2
+
3
+ ```bash
4
+ yarn xy publint
5
+ ```