@xylabs/toolchain 7.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/analyze.mjs +140 -0
- package/dist/actions/analyze.mjs.map +1 -0
- package/dist/actions/build.mjs +173 -0
- package/dist/actions/build.mjs.map +1 -0
- package/dist/actions/claude-check.mjs +199 -0
- package/dist/actions/claude-check.mjs.map +1 -0
- package/dist/actions/claude-clean.mjs +70 -0
- package/dist/actions/claude-clean.mjs.map +1 -0
- package/dist/actions/claude-commands.mjs +126 -0
- package/dist/actions/claude-commands.mjs.map +1 -0
- package/dist/actions/claude-rules.mjs +151 -0
- package/dist/actions/claude-rules.mjs.map +1 -0
- package/dist/actions/claude-settings.mjs +99 -0
- package/dist/actions/claude-settings.mjs.map +1 -0
- package/dist/actions/claude-skills.mjs +131 -0
- package/dist/actions/claude-skills.mjs.map +1 -0
- package/dist/actions/clean-docs.mjs +66 -0
- package/dist/actions/clean-docs.mjs.map +1 -0
- package/dist/actions/clean-eslint.mjs +47 -0
- package/dist/actions/clean-eslint.mjs.map +1 -0
- package/dist/actions/clean.mjs +166 -0
- package/dist/actions/clean.mjs.map +1 -0
- package/dist/actions/compile.mjs +184 -0
- package/dist/actions/compile.mjs.map +1 -0
- package/dist/actions/copy-assets.mjs +81 -0
- package/dist/actions/copy-assets.mjs.map +1 -0
- package/dist/actions/cycle.mjs +275 -0
- package/dist/actions/cycle.mjs.map +1 -0
- package/dist/actions/dead.mjs +119 -0
- package/dist/actions/dead.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/checkPackage.mjs +1556 -0
- package/dist/actions/deplint/checkPackage/checkPackage.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/checkPackageTypes.mjs +1 -0
- package/dist/actions/deplint/checkPackage/checkPackageTypes.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getMismatchedPeerDevVersions.mjs +77 -0
- package/dist/actions/deplint/checkPackage/getMismatchedPeerDevVersions.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs +158 -0
- package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs +125 -0
- package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnnecessaryPeerDependencies.mjs +207 -0
- package/dist/actions/deplint/checkPackage/getUnnecessaryPeerDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnsatisfiedPeerDependencies.mjs +318 -0
- package/dist/actions/deplint/checkPackage/getUnsatisfiedPeerDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs +163 -0
- package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs +408 -0
- package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnusedPeerDependencies.mjs +75 -0
- package/dist/actions/deplint/checkPackage/getUnusedPeerDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getWorkspaceVersionProblems.mjs +128 -0
- package/dist/actions/deplint/checkPackage/getWorkspaceVersionProblems.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/index.mjs +1609 -0
- package/dist/actions/deplint/checkPackage/index.mjs.map +1 -0
- package/dist/actions/deplint/deplint.mjs +1840 -0
- package/dist/actions/deplint/deplint.mjs.map +1 -0
- package/dist/actions/deplint/engine.mjs +1736 -0
- package/dist/actions/deplint/engine.mjs.map +1 -0
- package/dist/actions/deplint/findFiles.mjs +39 -0
- package/dist/actions/deplint/findFiles.mjs.map +1 -0
- package/dist/actions/deplint/findFilesByGlob.mjs +14 -0
- package/dist/actions/deplint/findFilesByGlob.mjs.map +1 -0
- package/dist/actions/deplint/fixer.mjs +103 -0
- package/dist/actions/deplint/fixer.mjs.map +1 -0
- package/dist/actions/deplint/getBasePackageName.mjs +13 -0
- package/dist/actions/deplint/getBasePackageName.mjs.map +1 -0
- package/dist/actions/deplint/getCliReferencedPackagesFromFiles.mjs +140 -0
- package/dist/actions/deplint/getCliReferencedPackagesFromFiles.mjs.map +1 -0
- package/dist/actions/deplint/getDependenciesFromPackageJson.mjs +29 -0
- package/dist/actions/deplint/getDependenciesFromPackageJson.mjs.map +1 -0
- package/dist/actions/deplint/getExtendsFromTsconfigs.mjs +68 -0
- package/dist/actions/deplint/getExtendsFromTsconfigs.mjs.map +1 -0
- package/dist/actions/deplint/getExternalImportsFromFiles.mjs +143 -0
- package/dist/actions/deplint/getExternalImportsFromFiles.mjs.map +1 -0
- package/dist/actions/deplint/getImportsFromFile.mjs +85 -0
- package/dist/actions/deplint/getImportsFromFile.mjs.map +1 -0
- package/dist/actions/deplint/getRequiredPeerDependencies.mjs +37 -0
- package/dist/actions/deplint/getRequiredPeerDependencies.mjs.map +1 -0
- package/dist/actions/deplint/getScriptReferencedPackages.mjs +83 -0
- package/dist/actions/deplint/getScriptReferencedPackages.mjs.map +1 -0
- package/dist/actions/deplint/implicitDevDependencies.mjs +116 -0
- package/dist/actions/deplint/implicitDevDependencies.mjs.map +1 -0
- package/dist/actions/deplint/index.mjs +1848 -0
- package/dist/actions/deplint/index.mjs.map +1 -0
- package/dist/actions/deplint/packageEditor.mjs +82 -0
- package/dist/actions/deplint/packageEditor.mjs.map +1 -0
- package/dist/actions/deplint/packageJsonEditor.mjs +101 -0
- package/dist/actions/deplint/packageJsonEditor.mjs.map +1 -0
- package/dist/actions/deplint/reporters.mjs +36 -0
- package/dist/actions/deplint/reporters.mjs.map +1 -0
- package/dist/actions/deplint/rules.mjs +1223 -0
- package/dist/actions/deplint/rules.mjs.map +1 -0
- package/dist/actions/deplint/snapshot.mjs +372 -0
- package/dist/actions/deplint/snapshot.mjs.map +1 -0
- package/dist/actions/deplint/tsScriptsAliases.mjs +20 -0
- package/dist/actions/deplint/tsScriptsAliases.mjs.map +1 -0
- package/dist/actions/deplint/types.mjs +1 -0
- package/dist/actions/deplint/types.mjs.map +1 -0
- package/dist/actions/deploy.mjs +194 -0
- package/dist/actions/deploy.mjs.map +1 -0
- package/dist/actions/dupdeps.mjs +226 -0
- package/dist/actions/dupdeps.mjs.map +1 -0
- package/dist/actions/eject.mjs +142 -0
- package/dist/actions/eject.mjs.map +1 -0
- package/dist/actions/fix.mjs +359 -0
- package/dist/actions/fix.mjs.map +1 -0
- package/dist/actions/gen-docs.mjs +155 -0
- package/dist/actions/gen-docs.mjs.map +1 -0
- package/dist/actions/gitignore.mjs +159 -0
- package/dist/actions/gitignore.mjs.map +1 -0
- package/dist/actions/gitlint-fix.mjs +27 -0
- package/dist/actions/gitlint-fix.mjs.map +1 -0
- package/dist/actions/gitlint.mjs +48 -0
- package/dist/actions/gitlint.mjs.map +1 -0
- package/dist/actions/index.mjs +8259 -0
- package/dist/actions/index.mjs.map +1 -0
- package/dist/actions/knip.mjs +119 -0
- package/dist/actions/knip.mjs.map +1 -0
- package/dist/actions/license.mjs +92 -0
- package/dist/actions/license.mjs.map +1 -0
- package/dist/actions/lint-init.mjs +275 -0
- package/dist/actions/lint-init.mjs.map +1 -0
- package/dist/actions/lint.mjs +356 -0
- package/dist/actions/lint.mjs.map +1 -0
- package/dist/actions/lintNext.mjs +209 -0
- package/dist/actions/lintNext.mjs.map +1 -0
- package/dist/actions/lintlint.mjs +341 -0
- package/dist/actions/lintlint.mjs.map +1 -0
- package/dist/actions/npmignore-gen.mjs +90 -0
- package/dist/actions/npmignore-gen.mjs.map +1 -0
- package/dist/actions/orphan.mjs +110 -0
- package/dist/actions/orphan.mjs.map +1 -0
- package/dist/actions/package/clean-outputs.mjs +50 -0
- package/dist/actions/package/clean-outputs.mjs.map +1 -0
- package/dist/actions/package/clean-typescript.mjs +50 -0
- package/dist/actions/package/clean-typescript.mjs.map +1 -0
- package/dist/actions/package/clean.mjs +69 -0
- package/dist/actions/package/clean.mjs.map +1 -0
- package/dist/actions/package/compile/XyConfig.mjs +32 -0
- package/dist/actions/package/compile/XyConfig.mjs.map +1 -0
- package/dist/actions/package/compile/buildEntries.mjs +53 -0
- package/dist/actions/package/compile/buildEntries.mjs.map +1 -0
- package/dist/actions/package/compile/compile.mjs +439 -0
- package/dist/actions/package/compile/compile.mjs.map +1 -0
- package/dist/actions/package/compile/copyTypeFiles.mjs +34 -0
- package/dist/actions/package/compile/copyTypeFiles.mjs.map +1 -0
- package/dist/actions/package/compile/deepMerge.mjs +27 -0
- package/dist/actions/package/compile/deepMerge.mjs.map +1 -0
- package/dist/actions/package/compile/getCompilerOptions.mjs +12 -0
- package/dist/actions/package/compile/getCompilerOptions.mjs.map +1 -0
- package/dist/actions/package/compile/index.mjs +472 -0
- package/dist/actions/package/compile/index.mjs.map +1 -0
- package/dist/actions/package/compile/inputs.mjs +22 -0
- package/dist/actions/package/compile/inputs.mjs.map +1 -0
- package/dist/actions/package/compile/packageCompileTsc.mjs +93 -0
- package/dist/actions/package/compile/packageCompileTsc.mjs.map +1 -0
- package/dist/actions/package/compile/packageCompileTscTypes.mjs +92 -0
- package/dist/actions/package/compile/packageCompileTscTypes.mjs.map +1 -0
- package/dist/actions/package/compile/packageCompileTsup.mjs +402 -0
- package/dist/actions/package/compile/packageCompileTsup.mjs.map +1 -0
- package/dist/actions/package/copy-assets.mjs +69 -0
- package/dist/actions/package/copy-assets.mjs.map +1 -0
- package/dist/actions/package/cycle.mjs +62 -0
- package/dist/actions/package/cycle.mjs.map +1 -0
- package/dist/actions/package/gen-docs.mjs +137 -0
- package/dist/actions/package/gen-docs.mjs.map +1 -0
- package/dist/actions/package/index.mjs +1131 -0
- package/dist/actions/package/index.mjs.map +1 -0
- package/dist/actions/package/lint.mjs +87 -0
- package/dist/actions/package/lint.mjs.map +1 -0
- package/dist/actions/package/publint.mjs +336 -0
- package/dist/actions/package/publint.mjs.map +1 -0
- package/dist/actions/package/recompile.mjs +510 -0
- package/dist/actions/package/recompile.mjs.map +1 -0
- package/dist/actions/package-lint-deps.mjs +348 -0
- package/dist/actions/package-lint-deps.mjs.map +1 -0
- package/dist/actions/package-lint.mjs +774 -0
- package/dist/actions/package-lint.mjs.map +1 -0
- package/dist/actions/packman/clean.mjs +144 -0
- package/dist/actions/packman/clean.mjs.map +1 -0
- package/dist/actions/packman/convert.mjs +1331 -0
- package/dist/actions/packman/convert.mjs.map +1 -0
- package/dist/actions/packman/convertToPnpm.mjs +295 -0
- package/dist/actions/packman/convertToPnpm.mjs.map +1 -0
- package/dist/actions/packman/convertToYarn.mjs +307 -0
- package/dist/actions/packman/convertToYarn.mjs.map +1 -0
- package/dist/actions/packman/index.mjs +1493 -0
- package/dist/actions/packman/index.mjs.map +1 -0
- package/dist/actions/packman/lint.mjs +109 -0
- package/dist/actions/packman/lint.mjs.map +1 -0
- package/dist/actions/packman/rewriteScripts.mjs +52 -0
- package/dist/actions/packman/rewriteScripts.mjs.map +1 -0
- package/dist/actions/packman/rewriteSourceImports.mjs +60 -0
- package/dist/actions/packman/rewriteSourceImports.mjs.map +1 -0
- package/dist/actions/packman/swapTsScriptsDependency.mjs +57 -0
- package/dist/actions/packman/swapTsScriptsDependency.mjs.map +1 -0
- package/dist/actions/publint.mjs +748 -0
- package/dist/actions/publint.mjs.map +1 -0
- package/dist/actions/publish.mjs +208 -0
- package/dist/actions/publish.mjs.map +1 -0
- package/dist/actions/reactTest.mjs +142 -0
- package/dist/actions/reactTest.mjs.map +1 -0
- package/dist/actions/readme-gen.mjs +362 -0
- package/dist/actions/readme-gen.mjs.map +1 -0
- package/dist/actions/readme-init.mjs +89 -0
- package/dist/actions/readme-init.mjs.map +1 -0
- package/dist/actions/readme-lint.mjs +147 -0
- package/dist/actions/readme-lint.mjs.map +1 -0
- package/dist/actions/rebuild.mjs +143 -0
- package/dist/actions/rebuild.mjs.map +1 -0
- package/dist/actions/recompile.mjs +196 -0
- package/dist/actions/recompile.mjs.map +1 -0
- package/dist/actions/reinstall.mjs +283 -0
- package/dist/actions/reinstall.mjs.map +1 -0
- package/dist/actions/relint.mjs +355 -0
- package/dist/actions/relint.mjs.map +1 -0
- package/dist/actions/repo-init.mjs +217 -0
- package/dist/actions/repo-init.mjs.map +1 -0
- package/dist/actions/retest.mjs +150 -0
- package/dist/actions/retest.mjs.map +1 -0
- package/dist/actions/sitemap.mjs +121 -0
- package/dist/actions/sitemap.mjs.map +1 -0
- package/dist/actions/sonar.mjs +119 -0
- package/dist/actions/sonar.mjs.map +1 -0
- package/dist/actions/start.mjs +142 -0
- package/dist/actions/start.mjs.map +1 -0
- package/dist/actions/statics.mjs +225 -0
- package/dist/actions/statics.mjs.map +1 -0
- package/dist/actions/test.mjs +144 -0
- package/dist/actions/test.mjs.map +1 -0
- package/dist/actions/up.mjs +140 -0
- package/dist/actions/up.mjs.map +1 -0
- package/dist/actions/updo.mjs +533 -0
- package/dist/actions/updo.mjs.map +1 -0
- package/dist/actions/upplug.mjs +124 -0
- package/dist/actions/upplug.mjs.map +1 -0
- package/dist/actions/upyarn.mjs +119 -0
- package/dist/actions/upyarn.mjs.map +1 -0
- package/dist/actions/yarn3only.mjs +60 -0
- package/dist/actions/yarn3only.mjs.map +1 -0
- package/dist/bin/package/build-only.mjs +451 -0
- package/dist/bin/package/build-only.mjs.map +1 -0
- package/dist/bin/package/build.mjs +451 -0
- package/dist/bin/package/build.mjs.map +1 -0
- package/dist/bin/package/clean-outputs.mjs +50 -0
- package/dist/bin/package/clean-outputs.mjs.map +1 -0
- package/dist/bin/package/clean-typescript.mjs +50 -0
- package/dist/bin/package/clean-typescript.mjs.map +1 -0
- package/dist/bin/package/clean.mjs +75 -0
- package/dist/bin/package/clean.mjs.map +1 -0
- package/dist/bin/package/compile-only.mjs +447 -0
- package/dist/bin/package/compile-only.mjs.map +1 -0
- package/dist/bin/package/compile-tsup.mjs +409 -0
- package/dist/bin/package/compile-tsup.mjs.map +1 -0
- package/dist/bin/package/compile.mjs +451 -0
- package/dist/bin/package/compile.mjs.map +1 -0
- package/dist/bin/package/copy-assets-cjs.mjs +75 -0
- package/dist/bin/package/copy-assets-cjs.mjs.map +1 -0
- package/dist/bin/package/copy-assets-esm.mjs +75 -0
- package/dist/bin/package/copy-assets-esm.mjs.map +1 -0
- package/dist/bin/package/cycle.mjs +72 -0
- package/dist/bin/package/cycle.mjs.map +1 -0
- package/dist/bin/package/fix.mjs +97 -0
- package/dist/bin/package/fix.mjs.map +1 -0
- package/dist/bin/package/gen-docs.mjs +142 -0
- package/dist/bin/package/gen-docs.mjs.map +1 -0
- package/dist/bin/package/lint-verbose.mjs +97 -0
- package/dist/bin/package/lint-verbose.mjs.map +1 -0
- package/dist/bin/package/lint.mjs +97 -0
- package/dist/bin/package/lint.mjs.map +1 -0
- package/dist/bin/package/publint.mjs +423 -0
- package/dist/bin/package/publint.mjs.map +1 -0
- package/dist/bin/package/recompile.mjs +516 -0
- package/dist/bin/package/recompile.mjs.map +1 -0
- package/dist/bin/package/relint.mjs +97 -0
- package/dist/bin/package/relint.mjs.map +1 -0
- package/dist/bin/run-or-exec.mjs +20 -0
- package/dist/bin/run-or-exec.mjs.map +1 -0
- package/dist/bin/xy.mjs +8885 -0
- package/dist/bin/xy.mjs.map +1 -0
- package/dist/index.d.ts +1102 -0
- package/dist/index.mjs +9986 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib/checkResult.mjs +16 -0
- package/dist/lib/checkResult.mjs.map +1 -0
- package/dist/lib/claudeMdTemplate.mjs +69 -0
- package/dist/lib/claudeMdTemplate.mjs.map +1 -0
- package/dist/lib/concurrency.mjs +38 -0
- package/dist/lib/concurrency.mjs.map +1 -0
- package/dist/lib/createBuildConfig.mjs +55 -0
- package/dist/lib/createBuildConfig.mjs.map +1 -0
- package/dist/lib/defaultBuildConfig.mjs +23 -0
- package/dist/lib/defaultBuildConfig.mjs.map +1 -0
- package/dist/lib/deleteGlob.mjs +13 -0
- package/dist/lib/deleteGlob.mjs.map +1 -0
- package/dist/lib/dependencies/DuplicateDetector.mjs +99 -0
- package/dist/lib/dependencies/DuplicateDetector.mjs.map +1 -0
- package/dist/lib/dependencies/detectDuplicateDependencies.mjs +203 -0
- package/dist/lib/dependencies/detectDuplicateDependencies.mjs.map +1 -0
- package/dist/lib/dependencies/index.mjs +281 -0
- package/dist/lib/dependencies/index.mjs.map +1 -0
- package/dist/lib/dependencies/workspaceCycles.mjs +79 -0
- package/dist/lib/dependencies/workspaceCycles.mjs.map +1 -0
- package/dist/lib/file/ReadFileSyncOptions.mjs +6 -0
- package/dist/lib/file/ReadFileSyncOptions.mjs.map +1 -0
- package/dist/lib/file/constants.mjs +8 -0
- package/dist/lib/file/constants.mjs.map +1 -0
- package/dist/lib/file/fileLines.mjs +32 -0
- package/dist/lib/file/fileLines.mjs.map +1 -0
- package/dist/lib/file/index.mjs +42 -0
- package/dist/lib/file/index.mjs.map +1 -0
- package/dist/lib/file/tryReadFileSync.mjs +14 -0
- package/dist/lib/file/tryReadFileSync.mjs.map +1 -0
- package/dist/lib/fillTemplate.mjs +8 -0
- package/dist/lib/fillTemplate.mjs.map +1 -0
- package/dist/lib/generateIgnoreFiles.mjs +86 -0
- package/dist/lib/generateIgnoreFiles.mjs.map +1 -0
- package/dist/lib/generateReadmeFiles.mjs +323 -0
- package/dist/lib/generateReadmeFiles.mjs.map +1 -0
- package/dist/lib/gitignoreTemplate.mjs +12 -0
- package/dist/lib/gitignoreTemplate.mjs.map +1 -0
- package/dist/lib/index.mjs +1627 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/initCwd.mjs +8 -0
- package/dist/lib/initCwd.mjs.map +1 -0
- package/dist/lib/jsonFormatters.mjs +11 -0
- package/dist/lib/jsonFormatters.mjs.map +1 -0
- package/dist/lib/latestVersions.mjs +12 -0
- package/dist/lib/latestVersions.mjs.map +1 -0
- package/dist/lib/loadConfig.mjs +72 -0
- package/dist/lib/loadConfig.mjs.map +1 -0
- package/dist/lib/packageName.mjs +26 -0
- package/dist/lib/packageName.mjs.map +1 -0
- package/dist/lib/parsedPackageJSON.mjs +11 -0
- package/dist/lib/parsedPackageJSON.mjs.map +1 -0
- package/dist/lib/processEx.mjs +36 -0
- package/dist/lib/processEx.mjs.map +1 -0
- package/dist/lib/repoTemplates.mjs +34 -0
- package/dist/lib/repoTemplates.mjs.map +1 -0
- package/dist/lib/runInstall.mjs +30 -0
- package/dist/lib/runInstall.mjs.map +1 -0
- package/dist/lib/runSteps.mjs +118 -0
- package/dist/lib/runSteps.mjs.map +1 -0
- package/dist/lib/runStepsAsync.mjs +136 -0
- package/dist/lib/runStepsAsync.mjs.map +1 -0
- package/dist/lib/runXy.mjs +147 -0
- package/dist/lib/runXy.mjs.map +1 -0
- package/dist/lib/runXyWithWarning.mjs +36 -0
- package/dist/lib/runXyWithWarning.mjs.map +1 -0
- package/dist/lib/safeExit.mjs +61 -0
- package/dist/lib/safeExit.mjs.map +1 -0
- package/dist/lib/string/empty.mjs +8 -0
- package/dist/lib/string/empty.mjs.map +1 -0
- package/dist/lib/string/index.mjs +12 -0
- package/dist/lib/string/index.mjs.map +1 -0
- package/dist/lib/string/union.mjs +6 -0
- package/dist/lib/string/union.mjs.map +1 -0
- package/dist/lib/tryRunLocalScript.mjs +57 -0
- package/dist/lib/tryRunLocalScript.mjs.map +1 -0
- package/dist/lib/updo/applyUpdates.mjs +44 -0
- package/dist/lib/updo/applyUpdates.mjs.map +1 -0
- package/dist/lib/updo/collectWorkspaceDeps.mjs +48 -0
- package/dist/lib/updo/collectWorkspaceDeps.mjs.map +1 -0
- package/dist/lib/updo/fetchRegistryInfo.mjs +53 -0
- package/dist/lib/updo/fetchRegistryInfo.mjs.map +1 -0
- package/dist/lib/updo/index.mjs +594 -0
- package/dist/lib/updo/index.mjs.map +1 -0
- package/dist/lib/updo/interactiveSelect.mjs +185 -0
- package/dist/lib/updo/interactiveSelect.mjs.map +1 -0
- package/dist/lib/updo/interfaces.mjs +1 -0
- package/dist/lib/updo/interfaces.mjs.map +1 -0
- package/dist/lib/updo/renderTable.mjs +79 -0
- package/dist/lib/updo/renderTable.mjs.map +1 -0
- package/dist/lib/updo/resolveVersions.mjs +49 -0
- package/dist/lib/updo/resolveVersions.mjs.map +1 -0
- package/dist/lib/updo/runUpdo.mjs +511 -0
- package/dist/lib/updo/runUpdo.mjs.map +1 -0
- package/dist/lib/withErrnoException.mjs +13 -0
- package/dist/lib/withErrnoException.mjs.map +1 -0
- package/dist/lib/withError.mjs +8 -0
- package/dist/lib/withError.mjs.map +1 -0
- package/dist/lib/yarn/index.mjs +39 -0
- package/dist/lib/yarn/index.mjs.map +1 -0
- package/dist/lib/yarn/isYarnVersionOrGreater.mjs +18 -0
- package/dist/lib/yarn/isYarnVersionOrGreater.mjs.map +1 -0
- package/dist/lib/yarn/workspace/Workspace.mjs +1 -0
- package/dist/lib/yarn/workspace/Workspace.mjs.map +1 -0
- package/dist/lib/yarn/workspace/index.mjs +23 -0
- package/dist/lib/yarn/workspace/index.mjs.map +1 -0
- package/dist/lib/yarn/workspace/yarnWorkspace.mjs +22 -0
- package/dist/lib/yarn/workspace/yarnWorkspace.mjs.map +1 -0
- package/dist/lib/yarn/workspace/yarnWorkspaces.mjs +15 -0
- package/dist/lib/yarn/workspace/yarnWorkspaces.mjs.map +1 -0
- package/dist/lib/yarn/yarnInitCwd.mjs +8 -0
- package/dist/lib/yarn/yarnInitCwd.mjs.map +1 -0
- package/dist/loadPackageConfig.mjs +18 -0
- package/dist/loadPackageConfig.mjs.map +1 -0
- package/dist/pm/PackageManager.mjs +1 -0
- package/dist/pm/PackageManager.mjs.map +1 -0
- package/dist/pm/detectPackageManager.mjs +10 -0
- package/dist/pm/detectPackageManager.mjs.map +1 -0
- package/dist/pm/detectReact.mjs +52 -0
- package/dist/pm/detectReact.mjs.map +1 -0
- package/dist/pm/index.mjs +263 -0
- package/dist/pm/index.mjs.map +1 -0
- package/dist/pm/pnpmPackageManager.mjs +97 -0
- package/dist/pm/pnpmPackageManager.mjs.map +1 -0
- package/dist/pm/registry.mjs +27 -0
- package/dist/pm/registry.mjs.map +1 -0
- package/dist/pm/yarnPackageManager.mjs +112 -0
- package/dist/pm/yarnPackageManager.mjs.map +1 -0
- package/dist/types.d.mjs +1 -0
- package/dist/types.d.mjs.map +1 -0
- package/dist/xy/build/buildCommand.mjs +194 -0
- package/dist/xy/build/buildCommand.mjs.map +1 -0
- package/dist/xy/build/compileCommand.mjs +203 -0
- package/dist/xy/build/compileCommand.mjs.map +1 -0
- package/dist/xy/build/compileOnlyCommand.mjs +204 -0
- package/dist/xy/build/compileOnlyCommand.mjs.map +1 -0
- package/dist/xy/build/copyAssetsCommand.mjs +92 -0
- package/dist/xy/build/copyAssetsCommand.mjs.map +1 -0
- package/dist/xy/build/index.mjs +487 -0
- package/dist/xy/build/index.mjs.map +1 -0
- package/dist/xy/build/rebuildCommand.mjs +156 -0
- package/dist/xy/build/rebuildCommand.mjs.map +1 -0
- package/dist/xy/build/recompileCommand.mjs +215 -0
- package/dist/xy/build/recompileCommand.mjs.map +1 -0
- package/dist/xy/common/checkCommand.mjs +1909 -0
- package/dist/xy/common/checkCommand.mjs.map +1 -0
- package/dist/xy/common/claude/checkCommand.mjs +207 -0
- package/dist/xy/common/claude/checkCommand.mjs.map +1 -0
- package/dist/xy/common/claude/cleanCommand.mjs +78 -0
- package/dist/xy/common/claude/cleanCommand.mjs.map +1 -0
- package/dist/xy/common/claude/commandsCommand.mjs +134 -0
- package/dist/xy/common/claude/commandsCommand.mjs.map +1 -0
- package/dist/xy/common/claude/index.mjs +734 -0
- package/dist/xy/common/claude/index.mjs.map +1 -0
- package/dist/xy/common/claude/initCommand.mjs +458 -0
- package/dist/xy/common/claude/initCommand.mjs.map +1 -0
- package/dist/xy/common/claude/rulesCommand.mjs +167 -0
- package/dist/xy/common/claude/rulesCommand.mjs.map +1 -0
- package/dist/xy/common/claude/settingsCommand.mjs +115 -0
- package/dist/xy/common/claude/settingsCommand.mjs.map +1 -0
- package/dist/xy/common/claude/skillsCommand.mjs +140 -0
- package/dist/xy/common/claude/skillsCommand.mjs.map +1 -0
- package/dist/xy/common/cleanDocsCommand.mjs +74 -0
- package/dist/xy/common/cleanDocsCommand.mjs.map +1 -0
- package/dist/xy/common/deadCommand.mjs +137 -0
- package/dist/xy/common/deadCommand.mjs.map +1 -0
- package/dist/xy/common/genDocsCommand.mjs +175 -0
- package/dist/xy/common/genDocsCommand.mjs.map +1 -0
- package/dist/xy/common/gitignoreCommand.mjs +165 -0
- package/dist/xy/common/gitignoreCommand.mjs.map +1 -0
- package/dist/xy/common/gitlintCommand.mjs +89 -0
- package/dist/xy/common/gitlintCommand.mjs.map +1 -0
- package/dist/xy/common/index.mjs +4654 -0
- package/dist/xy/common/index.mjs.map +1 -0
- package/dist/xy/common/licenseCommand.mjs +108 -0
- package/dist/xy/common/licenseCommand.mjs.map +1 -0
- package/dist/xy/common/npmignoreGenCommand.mjs +100 -0
- package/dist/xy/common/npmignoreGenCommand.mjs.map +1 -0
- package/dist/xy/common/orphan/cleanCommand.mjs +102 -0
- package/dist/xy/common/orphan/cleanCommand.mjs.map +1 -0
- package/dist/xy/common/orphan/index.mjs +138 -0
- package/dist/xy/common/orphan/index.mjs.map +1 -0
- package/dist/xy/common/orphan/listCommand.mjs +100 -0
- package/dist/xy/common/orphan/listCommand.mjs.map +1 -0
- package/dist/xy/common/packmanCommand.mjs +1538 -0
- package/dist/xy/common/packmanCommand.mjs.map +1 -0
- package/dist/xy/common/readme/genCommand.mjs +395 -0
- package/dist/xy/common/readme/genCommand.mjs.map +1 -0
- package/dist/xy/common/readme/index.mjs +538 -0
- package/dist/xy/common/readme/index.mjs.map +1 -0
- package/dist/xy/common/readme/initCommand.mjs +109 -0
- package/dist/xy/common/readme/initCommand.mjs.map +1 -0
- package/dist/xy/common/readme/lintCommand.mjs +181 -0
- package/dist/xy/common/readme/lintCommand.mjs.map +1 -0
- package/dist/xy/common/repo/index.mjs +1070 -0
- package/dist/xy/common/repo/index.mjs.map +1 -0
- package/dist/xy/common/repo/initCommand.mjs +273 -0
- package/dist/xy/common/repo/initCommand.mjs.map +1 -0
- package/dist/xy/common/repo/lintCommand.mjs +789 -0
- package/dist/xy/common/repo/lintCommand.mjs.map +1 -0
- package/dist/xy/common/retestCommand.mjs +163 -0
- package/dist/xy/common/retestCommand.mjs.map +1 -0
- package/dist/xy/common/testCommand.mjs +157 -0
- package/dist/xy/common/testCommand.mjs.map +1 -0
- package/dist/xy/deploy/deployCommand.mjs +214 -0
- package/dist/xy/deploy/deployCommand.mjs.map +1 -0
- package/dist/xy/deploy/index.mjs +289 -0
- package/dist/xy/deploy/index.mjs.map +1 -0
- package/dist/xy/deploy/publishCommand.mjs +218 -0
- package/dist/xy/deploy/publishCommand.mjs.map +1 -0
- package/dist/xy/index.mjs +8887 -0
- package/dist/xy/index.mjs.map +1 -0
- package/dist/xy/install/cleanCommand.mjs +182 -0
- package/dist/xy/install/cleanCommand.mjs.map +1 -0
- package/dist/xy/install/dupdepsCommand.mjs +234 -0
- package/dist/xy/install/dupdepsCommand.mjs.map +1 -0
- package/dist/xy/install/index.mjs +1006 -0
- package/dist/xy/install/index.mjs.map +1 -0
- package/dist/xy/install/reinstallCommand.mjs +292 -0
- package/dist/xy/install/reinstallCommand.mjs.map +1 -0
- package/dist/xy/install/staticsCommand.mjs +233 -0
- package/dist/xy/install/staticsCommand.mjs.map +1 -0
- package/dist/xy/install/upCommand.mjs +150 -0
- package/dist/xy/install/upCommand.mjs.map +1 -0
- package/dist/xy/install/updoCommand.mjs +550 -0
- package/dist/xy/install/updoCommand.mjs.map +1 -0
- package/dist/xy/lint/cycleCommand.mjs +289 -0
- package/dist/xy/lint/cycleCommand.mjs.map +1 -0
- package/dist/xy/lint/deplintCommand.mjs +1897 -0
- package/dist/xy/lint/deplintCommand.mjs.map +1 -0
- package/dist/xy/lint/fixCommand.mjs +398 -0
- package/dist/xy/lint/fixCommand.mjs.map +1 -0
- package/dist/xy/lint/index.mjs +3759 -0
- package/dist/xy/lint/index.mjs.map +1 -0
- package/dist/xy/lint/knipCommand.mjs +142 -0
- package/dist/xy/lint/knipCommand.mjs.map +1 -0
- package/dist/xy/lint/lint/index.mjs +695 -0
- package/dist/xy/lint/lint/index.mjs.map +1 -0
- package/dist/xy/lint/lint/initCommand.mjs +282 -0
- package/dist/xy/lint/lint/initCommand.mjs.map +1 -0
- package/dist/xy/lint/lint/runCommand.mjs +405 -0
- package/dist/xy/lint/lint/runCommand.mjs.map +1 -0
- package/dist/xy/lint/lintCommand.mjs +695 -0
- package/dist/xy/lint/lintCommand.mjs.map +1 -0
- package/dist/xy/lint/lintlintCommand.mjs +359 -0
- package/dist/xy/lint/lintlintCommand.mjs.map +1 -0
- package/dist/xy/lint/publintCommand.mjs +778 -0
- package/dist/xy/lint/publintCommand.mjs.map +1 -0
- package/dist/xy/lint/relintCommand.mjs +381 -0
- package/dist/xy/lint/relintCommand.mjs.map +1 -0
- package/dist/xy/lint/sonarCommand.mjs +137 -0
- package/dist/xy/lint/sonarCommand.mjs.map +1 -0
- package/dist/xy/param.mjs +8 -0
- package/dist/xy/param.mjs.map +1 -0
- package/dist/xy/react/analyzeCommand.mjs +150 -0
- package/dist/xy/react/analyzeCommand.mjs.map +1 -0
- package/dist/xy/react/ejectCommand.mjs +150 -0
- package/dist/xy/react/ejectCommand.mjs.map +1 -0
- package/dist/xy/react/index.mjs +202 -0
- package/dist/xy/react/index.mjs.map +1 -0
- package/dist/xy/react/sitemapCommand.mjs +129 -0
- package/dist/xy/react/sitemapCommand.mjs.map +1 -0
- package/dist/xy/react/startCommand.mjs +150 -0
- package/dist/xy/react/startCommand.mjs.map +1 -0
- package/dist/xy/xy.mjs +8879 -0
- package/dist/xy/xy.mjs.map +1 -0
- package/dist/xy/xyParseOptions.mjs +117 -0
- package/dist/xy/xyParseOptions.mjs.map +1 -0
- package/dist/xy/yarn/index.mjs +188 -0
- package/dist/xy/yarn/index.mjs.map +1 -0
- package/dist/xy/yarn/upplugCommand.mjs +134 -0
- package/dist/xy/yarn/upplugCommand.mjs.map +1 -0
- package/dist/xy/yarn/upyarnCommand.mjs +129 -0
- package/dist/xy/yarn/upyarnCommand.mjs.map +1 -0
- package/dist/xy/yarn/yarn3OnlyCommand.mjs +70 -0
- package/dist/xy/yarn/yarn3OnlyCommand.mjs.map +1 -0
- package/package.json +119 -0
- package/templates/claude/CLAUDE-local.md +4 -0
- package/templates/claude/CLAUDE-project.md +4 -0
- package/templates/claude/commands/xy-build.md +7 -0
- package/templates/claude/commands/xy-clean.md +7 -0
- package/templates/claude/commands/xy-compile.md +7 -0
- package/templates/claude/commands/xy-cycle.md +7 -0
- package/templates/claude/commands/xy-dead.md +7 -0
- package/templates/claude/commands/xy-deplint.md +7 -0
- package/templates/claude/commands/xy-deps.md +24 -0
- package/templates/claude/commands/xy-dupdeps.md +7 -0
- package/templates/claude/commands/xy-fix.md +7 -0
- package/templates/claude/commands/xy-gen-docs.md +7 -0
- package/templates/claude/commands/xy-gitignore.md +7 -0
- package/templates/claude/commands/xy-gitlint.md +7 -0
- package/templates/claude/commands/xy-knip.md +7 -0
- package/templates/claude/commands/xy-license.md +7 -0
- package/templates/claude/commands/xy-lint-rules.md +44 -0
- package/templates/claude/commands/xy-lint.md +7 -0
- package/templates/claude/commands/xy-publint.md +7 -0
- package/templates/claude/commands/xy-rebuild.md +7 -0
- package/templates/claude/commands/xy-recompile.md +7 -0
- package/templates/claude/commands/xy-reinstall.md +7 -0
- package/templates/claude/commands/xy-relint.md +7 -0
- package/templates/claude/commands/xy-retest.md +7 -0
- package/templates/claude/commands/xy-sonar.md +7 -0
- package/templates/claude/commands/xy-test.md +7 -0
- package/templates/claude/commands/xy-up.md +9 -0
- package/templates/claude/rules/xylabs-architecture.md +8 -0
- package/templates/claude/rules/xylabs-git-workflow.md +7 -0
- package/templates/claude/rules/xylabs-naming.md +7 -0
- package/templates/claude/rules/xylabs-style.md +17 -0
- package/templates/claude/skills/xylabs-e2e-setup/SKILL.md +223 -0
- package/templates/claude/skills/xylabs-xy-cli/SKILL.md +236 -0
- package/templates/claude/skills/xylabs-xy-deplint-fix/SKILL.md +122 -0
- package/templates/gitignore/gitignore/template.gitignore +51 -0
- package/templates/gitignore/template.gitignore +51 -0
- package/templates/readme/README.body.md +25 -0
- package/templates/readme/README.template.md +22 -0
- package/templates/repo/cli/package/package.json.tmpl +63 -0
- package/templates/repo/cli/package/src/__packageName__.ts.tmpl +21 -0
- package/templates/repo/cli/package/src/actions/index.ts +1 -0
- package/templates/repo/cli/package/src/actions/printVersion.ts.tmpl +8 -0
- package/templates/repo/cli/package/src/bin/__packageName__.ts.tmpl +12 -0
- package/templates/repo/cli/package/src/commands/index.ts +1 -0
- package/templates/repo/cli/package/src/commands/versionCommand.ts.tmpl +11 -0
- package/templates/repo/cli/package/src/index.ts.tmpl +1 -0
- package/templates/repo/cli/package/tsconfig.build.json +25 -0
- package/templates/repo/cli/package/tsconfig.json +4 -0
- package/templates/repo/cli/package/tsup.config.ts +15 -0
- package/templates/repo/cli/package/xy.config.ts +3 -0
- package/templates/repo/cli/root/CLAUDE.md.tmpl +38 -0
- package/templates/repo/cli/root/cspell.json.tmpl +13 -0
- package/templates/repo/cli/root/eslint.config.ts +28 -0
- package/templates/repo/cli/root/github/workflows/build-pnpm.yml.tmpl +34 -0
- package/templates/repo/cli/root/github/workflows/build-yarn.yml.tmpl +32 -0
- package/templates/repo/cli/root/gitignore.tmpl +47 -0
- package/templates/repo/cli/root/knip.config.ts +16 -0
- package/templates/repo/cli/root/package.json.tmpl +54 -0
- package/templates/repo/cli/root/pnpm-workspace.yaml +2 -0
- package/templates/repo/cli/root/tsconfig.json +4 -0
- package/templates/repo/cli/root/vitest.config.ts +31 -0
- package/templates/repo/cli/root/xy.config.ts.tmpl +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/claude-clean.ts","../../src/lib/initCwd.ts"],"sourcesContent":["import {\n existsSync, readdirSync, rmSync, unlinkSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { INIT_CWD } from '../lib/index.ts'\n\nfunction removeFile(filePath: string, label: string): boolean {\n if (existsSync(filePath)) {\n unlinkSync(filePath)\n console.log(chalk.yellow(` Removed ${label}`))\n return true\n }\n return false\n}\n\nfunction removeDir(dirPath: string, label: string): boolean {\n if (existsSync(dirPath)) {\n rmSync(dirPath, { recursive: true })\n console.log(chalk.yellow(` Removed ${label}`))\n return true\n }\n return false\n}\n\nexport function claudeClean(): number {\n console.log(chalk.green('Clean Claude configuration'))\n const cwd = INIT_CWD()\n let removed = 0\n\n // Root-level files\n const rootFiles = ['CLAUDE.md', 'CLAUDE.local.md']\n for (const file of rootFiles) {\n if (removeFile(PATH.resolve(cwd, file), file)) removed++\n }\n\n // .claude directory\n if (removeDir(PATH.resolve(cwd, '.claude'), '.claude/')) removed++\n\n // Package-level CLAUDE.md files\n const packagesDir = PATH.resolve(cwd, 'packages')\n if (existsSync(packagesDir)) {\n const findClaudeFiles = (dir: string, prefix: string) => {\n const entries = readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = PATH.resolve(dir, entry.name)\n const label = `${prefix}${entry.name}`\n if (entry.isFile() && (entry.name === 'CLAUDE.md' || entry.name === 'CLAUDE.local.md')) {\n if (removeFile(fullPath, label)) removed++\n } else if (entry.isDirectory() && entry.name === '.claude') {\n if (removeDir(fullPath, `${label}/`)) removed++\n } else if (entry.isDirectory() && entry.name !== 'node_modules' && entry.name !== 'dist') {\n findClaudeFiles(fullPath, `${label}/`)\n }\n }\n }\n findClaudeFiles(packagesDir, 'packages/')\n }\n\n if (removed > 0) {\n console.log(chalk.green(` Removed ${removed} item(s)`))\n } else {\n console.log(chalk.gray(' Nothing to clean'))\n }\n\n return 0\n}\n","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EAAY;AAAA,EAAa;AAAA,EAAQ;AAAA,OAC5B;AACP,OAAO,UAAU;AAEjB,OAAO,WAAW;;;ACLX,SAAS,WAAmB;AACjC,SAAO,QAAQ,IAAI,YAAY,QAAQ,IAAI;AAC7C;;;ADOA,SAAS,WAAW,UAAkB,OAAwB;AAC5D,MAAI,WAAW,QAAQ,GAAG;AACxB,eAAW,QAAQ;AACnB,YAAQ,IAAI,MAAM,OAAO,aAAa,KAAK,EAAE,CAAC;AAC9C,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,UAAU,SAAiB,OAAwB;AAC1D,MAAI,WAAW,OAAO,GAAG;AACvB,WAAO,SAAS,EAAE,WAAW,KAAK,CAAC;AACnC,YAAQ,IAAI,MAAM,OAAO,aAAa,KAAK,EAAE,CAAC;AAC9C,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,cAAsB;AACpC,UAAQ,IAAI,MAAM,MAAM,4BAA4B,CAAC;AACrD,QAAM,MAAM,SAAS;AACrB,MAAI,UAAU;AAGd,QAAM,YAAY,CAAC,aAAa,iBAAiB;AACjD,aAAW,QAAQ,WAAW;AAC5B,QAAI,WAAW,KAAK,QAAQ,KAAK,IAAI,GAAG,IAAI,EAAG;AAAA,EACjD;AAGA,MAAI,UAAU,KAAK,QAAQ,KAAK,SAAS,GAAG,UAAU,EAAG;AAGzD,QAAM,cAAc,KAAK,QAAQ,KAAK,UAAU;AAChD,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,kBAAkB,CAAC,KAAa,WAAmB;AACvD,YAAM,UAAU,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AACxD,iBAAW,SAAS,SAAS;AAC3B,cAAM,WAAW,KAAK,QAAQ,KAAK,MAAM,IAAI;AAC7C,cAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,IAAI;AACpC,YAAI,MAAM,OAAO,MAAM,MAAM,SAAS,eAAe,MAAM,SAAS,oBAAoB;AACtF,cAAI,WAAW,UAAU,KAAK,EAAG;AAAA,QACnC,WAAW,MAAM,YAAY,KAAK,MAAM,SAAS,WAAW;AAC1D,cAAI,UAAU,UAAU,GAAG,KAAK,GAAG,EAAG;AAAA,QACxC,WAAW,MAAM,YAAY,KAAK,MAAM,SAAS,kBAAkB,MAAM,SAAS,QAAQ;AACxF,0BAAgB,UAAU,GAAG,KAAK,GAAG;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AACA,oBAAgB,aAAa,WAAW;AAAA,EAC1C;AAEA,MAAI,UAAU,GAAG;AACf,YAAQ,IAAI,MAAM,MAAM,aAAa,OAAO,UAAU,CAAC;AAAA,EACzD,OAAO;AACL,YAAQ,IAAI,MAAM,KAAK,oBAAoB,CAAC;AAAA,EAC9C;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// src/actions/claude-commands.ts
|
|
2
|
+
import {
|
|
3
|
+
existsSync as existsSync2,
|
|
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 {
|
|
15
|
+
readdirSync,
|
|
16
|
+
readFileSync,
|
|
17
|
+
statSync
|
|
18
|
+
} from "fs";
|
|
19
|
+
import { createRequire } from "module";
|
|
20
|
+
import PATH from "path";
|
|
21
|
+
var require2 = createRequire(import.meta.url);
|
|
22
|
+
var packageRoot = PATH.dirname(require2.resolve("@xylabs/ts-scripts-common/package.json"));
|
|
23
|
+
var templatesDir = PATH.resolve(packageRoot, "templates", "claude");
|
|
24
|
+
function applyPackageManager(content, pm) {
|
|
25
|
+
return content.replaceAll("yarn xy", `${pm} xy`).replaceAll("yarn add", `${pm} add`);
|
|
26
|
+
}
|
|
27
|
+
var XYLABS_COMMANDS_PREFIX = "xy-";
|
|
28
|
+
var LEGACY_COMMANDS_PREFIX = "xylabs-";
|
|
29
|
+
var claudeCommandTemplates = () => {
|
|
30
|
+
const commandsDir = PATH.resolve(templatesDir, "commands");
|
|
31
|
+
const files = readdirSync(commandsDir).filter((f) => f.startsWith(XYLABS_COMMANDS_PREFIX) && f.endsWith(".md"));
|
|
32
|
+
const result = {};
|
|
33
|
+
for (const file of files) {
|
|
34
|
+
result[file] = readFileSync(PATH.resolve(commandsDir, file), "utf8");
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// src/pm/detectPackageManager.ts
|
|
40
|
+
import { existsSync } from "fs";
|
|
41
|
+
function detectPackageManager() {
|
|
42
|
+
if (existsSync("pnpm-lock.yaml") || existsSync("pnpm-workspace.yaml")) return "pnpm";
|
|
43
|
+
return "yarn";
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// src/lib/initCwd.ts
|
|
47
|
+
function INIT_CWD() {
|
|
48
|
+
return process.env.INIT_CWD ?? process.cwd();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// src/actions/claude-commands.ts
|
|
52
|
+
var syncCommandFiles = (commandsDir) => {
|
|
53
|
+
const pm = detectPackageManager();
|
|
54
|
+
const rawTemplates = claudeCommandTemplates();
|
|
55
|
+
const templates = {};
|
|
56
|
+
for (const [name, content] of Object.entries(rawTemplates)) {
|
|
57
|
+
templates[name] = applyPackageManager(content, pm);
|
|
58
|
+
}
|
|
59
|
+
const templateNames = new Set(Object.keys(templates));
|
|
60
|
+
let updated = 0;
|
|
61
|
+
let created = 0;
|
|
62
|
+
for (const [filename, content] of Object.entries(templates)) {
|
|
63
|
+
const targetPath = PATH2.resolve(commandsDir, filename);
|
|
64
|
+
const existing = existsSync2(targetPath) ? readFileSync2(targetPath, "utf8") : void 0;
|
|
65
|
+
if (existing === content) continue;
|
|
66
|
+
writeFileSync(targetPath, content, "utf8");
|
|
67
|
+
if (existing) {
|
|
68
|
+
updated++;
|
|
69
|
+
} else {
|
|
70
|
+
created++;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
created,
|
|
75
|
+
templateNames,
|
|
76
|
+
updated
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
var removeStaleCommands = (commandsDir, templateNames) => {
|
|
80
|
+
const existingCommands = readdirSync2(commandsDir).filter((f) => f.startsWith(XYLABS_COMMANDS_PREFIX) && f.endsWith(".md"));
|
|
81
|
+
let removed = 0;
|
|
82
|
+
for (const file of existingCommands) {
|
|
83
|
+
if (!templateNames.has(file)) {
|
|
84
|
+
unlinkSync(PATH2.resolve(commandsDir, file));
|
|
85
|
+
removed++;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return removed;
|
|
89
|
+
};
|
|
90
|
+
var removeLegacyCommands = (commandsDir) => {
|
|
91
|
+
const legacyFiles = readdirSync2(commandsDir).filter((f) => f.startsWith(LEGACY_COMMANDS_PREFIX) && f.endsWith(".md"));
|
|
92
|
+
for (const file of legacyFiles) {
|
|
93
|
+
unlinkSync(PATH2.resolve(commandsDir, file));
|
|
94
|
+
}
|
|
95
|
+
return legacyFiles.length;
|
|
96
|
+
};
|
|
97
|
+
var logCommandsResult = (created, updated, removed) => {
|
|
98
|
+
if (created || updated || removed) {
|
|
99
|
+
const parts = [
|
|
100
|
+
created ? `${created} created` : "",
|
|
101
|
+
updated ? `${updated} updated` : "",
|
|
102
|
+
removed ? `${removed} removed` : ""
|
|
103
|
+
].filter(Boolean);
|
|
104
|
+
console.log(chalk.green(`.claude/commands/${XYLABS_COMMANDS_PREFIX}*.md: ${parts.join(", ")}`));
|
|
105
|
+
} else {
|
|
106
|
+
console.log(chalk.gray(`.claude/commands/${XYLABS_COMMANDS_PREFIX}*.md: already up to date`));
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
var claudeCommands = () => {
|
|
110
|
+
const cwd = INIT_CWD();
|
|
111
|
+
const commandsDir = PATH2.resolve(cwd, ".claude", "commands");
|
|
112
|
+
mkdirSync(commandsDir, { recursive: true });
|
|
113
|
+
const legacy = removeLegacyCommands(commandsDir);
|
|
114
|
+
const {
|
|
115
|
+
created,
|
|
116
|
+
templateNames,
|
|
117
|
+
updated
|
|
118
|
+
} = syncCommandFiles(commandsDir);
|
|
119
|
+
const removed = removeStaleCommands(commandsDir, templateNames);
|
|
120
|
+
logCommandsResult(created, updated, removed + legacy);
|
|
121
|
+
return 0;
|
|
122
|
+
};
|
|
123
|
+
export {
|
|
124
|
+
claudeCommands
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=claude-commands.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/claude-commands.ts","../../src/lib/claudeMdTemplate.ts","../../src/pm/detectPackageManager.ts","../../src/lib/initCwd.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 applyPackageManager, claudeCommandTemplates, INIT_CWD,\n LEGACY_COMMANDS_PREFIX, XYLABS_COMMANDS_PREFIX,\n} from '../lib/index.ts'\nimport { detectPackageManager } from '../pm/index.ts'\n\nconst syncCommandFiles = (commandsDir: string) => {\n const pm = detectPackageManager()\n const rawTemplates = claudeCommandTemplates()\n const templates: Record<string, string> = {}\n for (const [name, content] of Object.entries(rawTemplates)) {\n templates[name] = applyPackageManager(content, pm)\n }\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 removeLegacyCommands = (commandsDir: string): number => {\n const legacyFiles = readdirSync(commandsDir).filter(f => f.startsWith(LEGACY_COMMANDS_PREFIX) && f.endsWith('.md'))\n for (const file of legacyFiles) {\n unlinkSync(PATH.resolve(commandsDir, file))\n }\n return legacyFiles.length\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()\n const commandsDir = PATH.resolve(cwd, '.claude', 'commands')\n\n mkdirSync(commandsDir, { recursive: true })\n\n const legacy = removeLegacyCommands(commandsDir)\n const {\n created, templateNames, updated,\n } = syncCommandFiles(commandsDir)\n const removed = removeStaleCommands(commandsDir, templateNames)\n logCommandsResult(created, updated, removed + legacy)\n\n return 0\n}\n","import {\n readdirSync, readFileSync, statSync,\n} from 'node:fs'\nimport { createRequire } from 'node:module'\nimport PATH from 'node:path'\n\nimport type { PackageManagerName } from '../pm/index.ts'\n\nconst require = createRequire(import.meta.url)\nconst packageRoot = PATH.dirname(require.resolve('@xylabs/ts-scripts-common/package.json'))\nconst templatesDir = PATH.resolve(packageRoot, 'templates', 'claude')\n\nexport function applyPackageManager(content: string, pm: PackageManagerName): string {\n return content.replaceAll('yarn xy', `${pm} xy`).replaceAll('yarn add', `${pm} add`)\n}\n\nexport const XYLABS_RULES_PREFIX = 'xylabs-'\nexport const XYLABS_COMMANDS_PREFIX = 'xy-'\nexport const LEGACY_COMMANDS_PREFIX = 'xylabs-'\nexport const XYLABS_SKILLS_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\n// Returns { 'xylabs-foo': { 'SKILL.md': '...', 'other.ts': '...' } }\nexport const claudeSkillTemplates = (): Record<string, Record<string, string>> => {\n const skillsDir = PATH.resolve(templatesDir, 'skills')\n const dirs = readdirSync(skillsDir).filter(\n f => f.startsWith(XYLABS_SKILLS_PREFIX) && statSync(PATH.resolve(skillsDir, f)).isDirectory(),\n )\n const result: Record<string, Record<string, string>> = {}\n for (const dir of dirs) {\n const dirPath = PATH.resolve(skillsDir, dir)\n const files = readdirSync(dirPath, { recursive: true, encoding: 'utf8' })\n result[dir] = {}\n for (const file of files) {\n if (statSync(PATH.resolve(dirPath, file)).isFile()) {\n result[dir][file] = readFileSync(PATH.resolve(dirPath, file), 'utf8')\n }\n }\n }\n return result\n}\n\nexport const claudeMdProjectTemplate = (): string =>\n readFileSync(PATH.resolve(templatesDir, 'CLAUDE-project.md'), 'utf8')\n\nexport const claudeMdLocalTemplate = (): string =>\n readFileSync(PATH.resolve(templatesDir, 'CLAUDE-local.md'), 'utf8')\n","import { existsSync } from 'node:fs'\n\nexport type PackageManagerName = 'pnpm' | 'yarn'\n\nexport function detectPackageManager(): PackageManagerName {\n if (existsSync('pnpm-lock.yaml') || existsSync('pnpm-workspace.yaml')) return 'pnpm'\n return 'yarn'\n}\n","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n"],"mappings":"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","names":["existsSync","readdirSync","readFileSync","PATH","require","PATH","existsSync","readFileSync","readdirSync"]}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// src/actions/claude-rules.ts
|
|
2
|
+
import { spawnSync } from "child_process";
|
|
3
|
+
import {
|
|
4
|
+
existsSync as existsSync2,
|
|
5
|
+
mkdirSync,
|
|
6
|
+
readdirSync as readdirSync2,
|
|
7
|
+
readFileSync as readFileSync2,
|
|
8
|
+
unlinkSync,
|
|
9
|
+
writeFileSync
|
|
10
|
+
} from "fs";
|
|
11
|
+
import PATH2 from "path";
|
|
12
|
+
import chalk from "chalk";
|
|
13
|
+
|
|
14
|
+
// src/lib/claudeMdTemplate.ts
|
|
15
|
+
import {
|
|
16
|
+
readdirSync,
|
|
17
|
+
readFileSync,
|
|
18
|
+
statSync
|
|
19
|
+
} from "fs";
|
|
20
|
+
import { createRequire } from "module";
|
|
21
|
+
import PATH from "path";
|
|
22
|
+
var require2 = createRequire(import.meta.url);
|
|
23
|
+
var packageRoot = PATH.dirname(require2.resolve("@xylabs/ts-scripts-common/package.json"));
|
|
24
|
+
var templatesDir = PATH.resolve(packageRoot, "templates", "claude");
|
|
25
|
+
function applyPackageManager(content, pm) {
|
|
26
|
+
return content.replaceAll("yarn xy", `${pm} xy`).replaceAll("yarn add", `${pm} add`);
|
|
27
|
+
}
|
|
28
|
+
var XYLABS_RULES_PREFIX = "xylabs-";
|
|
29
|
+
var claudeMdRuleTemplates = () => {
|
|
30
|
+
const rulesDir = PATH.resolve(templatesDir, "rules");
|
|
31
|
+
const files = readdirSync(rulesDir).filter((f) => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith(".md"));
|
|
32
|
+
const result = {};
|
|
33
|
+
for (const file of files) {
|
|
34
|
+
result[file] = readFileSync(PATH.resolve(rulesDir, file), "utf8");
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
var claudeMdLocalTemplate = () => readFileSync(PATH.resolve(templatesDir, "CLAUDE-local.md"), "utf8");
|
|
39
|
+
|
|
40
|
+
// src/pm/detectPackageManager.ts
|
|
41
|
+
import { existsSync } from "fs";
|
|
42
|
+
function detectPackageManager() {
|
|
43
|
+
if (existsSync("pnpm-lock.yaml") || existsSync("pnpm-workspace.yaml")) return "pnpm";
|
|
44
|
+
return "yarn";
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// src/lib/initCwd.ts
|
|
48
|
+
function INIT_CWD() {
|
|
49
|
+
return process.env.INIT_CWD ?? process.cwd();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// src/actions/claude-rules.ts
|
|
53
|
+
var syncRuleFiles = (rulesDir) => {
|
|
54
|
+
const pm = detectPackageManager();
|
|
55
|
+
const rawTemplates = claudeMdRuleTemplates();
|
|
56
|
+
const templates = {};
|
|
57
|
+
for (const [name, content] of Object.entries(rawTemplates)) {
|
|
58
|
+
templates[name] = applyPackageManager(content, pm);
|
|
59
|
+
}
|
|
60
|
+
const templateNames = new Set(Object.keys(templates));
|
|
61
|
+
let updated = 0;
|
|
62
|
+
let created = 0;
|
|
63
|
+
for (const [filename, content] of Object.entries(templates)) {
|
|
64
|
+
const targetPath = PATH2.resolve(rulesDir, filename);
|
|
65
|
+
const existing = existsSync2(targetPath) ? readFileSync2(targetPath, "utf8") : void 0;
|
|
66
|
+
if (existing === content) continue;
|
|
67
|
+
writeFileSync(targetPath, content, "utf8");
|
|
68
|
+
if (existing) {
|
|
69
|
+
updated++;
|
|
70
|
+
} else {
|
|
71
|
+
created++;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
created,
|
|
76
|
+
templateNames,
|
|
77
|
+
updated
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
var removeStaleRules = (rulesDir, templateNames) => {
|
|
81
|
+
const existingRules = readdirSync2(rulesDir).filter((f) => f.startsWith(XYLABS_RULES_PREFIX) && f.endsWith(".md"));
|
|
82
|
+
let removed = 0;
|
|
83
|
+
for (const file of existingRules) {
|
|
84
|
+
if (!templateNames.has(file)) {
|
|
85
|
+
unlinkSync(PATH2.resolve(rulesDir, file));
|
|
86
|
+
removed++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return removed;
|
|
90
|
+
};
|
|
91
|
+
var logRulesResult = (created, updated, removed) => {
|
|
92
|
+
if (created || updated || removed) {
|
|
93
|
+
const parts = [
|
|
94
|
+
created ? `${created} created` : "",
|
|
95
|
+
updated ? `${updated} updated` : "",
|
|
96
|
+
removed ? `${removed} removed` : ""
|
|
97
|
+
].filter(Boolean);
|
|
98
|
+
console.log(chalk.green(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: ${parts.join(", ")}`));
|
|
99
|
+
} else {
|
|
100
|
+
console.log(chalk.gray(`.claude/rules/${XYLABS_RULES_PREFIX}*.md: already up to date`));
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
var ensureProjectClaudeMd = (cwd, force) => {
|
|
104
|
+
const projectPath = PATH2.resolve(cwd, "CLAUDE.md");
|
|
105
|
+
if (!existsSync2(projectPath) || force) {
|
|
106
|
+
if (force && existsSync2(projectPath)) {
|
|
107
|
+
console.log(chalk.yellow("Regenerating CLAUDE.md"));
|
|
108
|
+
}
|
|
109
|
+
console.log(chalk.green("Generating CLAUDE.md via claude /init..."));
|
|
110
|
+
const result = spawnSync("claude", ["-p", "/init", "--allowedTools", "Read", "Write", "Glob", "Grep"], {
|
|
111
|
+
cwd,
|
|
112
|
+
shell: true,
|
|
113
|
+
stdio: "inherit"
|
|
114
|
+
});
|
|
115
|
+
if (result.status !== 0) {
|
|
116
|
+
console.error(chalk.red("claude /init failed \u2014 is Claude Code installed?"));
|
|
117
|
+
return 1;
|
|
118
|
+
}
|
|
119
|
+
} else {
|
|
120
|
+
console.log(chalk.gray("CLAUDE.md already exists (skipped, use --force to regenerate)"));
|
|
121
|
+
}
|
|
122
|
+
return 0;
|
|
123
|
+
};
|
|
124
|
+
var ensureLocalClaudeMd = (cwd) => {
|
|
125
|
+
const localPath = PATH2.resolve(cwd, "CLAUDE.local.md");
|
|
126
|
+
if (existsSync2(localPath)) {
|
|
127
|
+
console.log(chalk.gray("CLAUDE.local.md already exists (skipped)"));
|
|
128
|
+
} else {
|
|
129
|
+
writeFileSync(localPath, claudeMdLocalTemplate(), "utf8");
|
|
130
|
+
console.log(chalk.green("Generated CLAUDE.local.md"));
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
var claudeRules = ({ force } = {}) => {
|
|
134
|
+
const cwd = INIT_CWD();
|
|
135
|
+
const rulesDir = PATH2.resolve(cwd, ".claude", "rules");
|
|
136
|
+
mkdirSync(rulesDir, { recursive: true });
|
|
137
|
+
const {
|
|
138
|
+
created,
|
|
139
|
+
templateNames,
|
|
140
|
+
updated
|
|
141
|
+
} = syncRuleFiles(rulesDir);
|
|
142
|
+
const removed = removeStaleRules(rulesDir, templateNames);
|
|
143
|
+
logRulesResult(created, updated, removed);
|
|
144
|
+
const claudeMdResult = ensureProjectClaudeMd(cwd, force);
|
|
145
|
+
ensureLocalClaudeMd(cwd);
|
|
146
|
+
return claudeMdResult ?? 0;
|
|
147
|
+
};
|
|
148
|
+
export {
|
|
149
|
+
claudeRules
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=claude-rules.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/claude-rules.ts","../../src/lib/claudeMdTemplate.ts","../../src/pm/detectPackageManager.ts","../../src/lib/initCwd.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process'\nimport {\n existsSync, mkdirSync, readdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport {\n applyPackageManager, claudeMdLocalTemplate, claudeMdRuleTemplates, INIT_CWD,\n XYLABS_RULES_PREFIX,\n} from '../lib/index.ts'\nimport { detectPackageManager } from '../pm/index.ts'\n\nconst syncRuleFiles = (rulesDir: string) => {\n const pm = detectPackageManager()\n const rawTemplates = claudeMdRuleTemplates()\n const templates: Record<string, string> = {}\n for (const [name, content] of Object.entries(rawTemplates)) {\n templates[name] = applyPackageManager(content, pm)\n }\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('Regenerating CLAUDE.md'))\n }\n console.log(chalk.green('Generating CLAUDE.md via claude /init...'))\n const result = spawnSync('claude', ['-p', '/init', '--allowedTools', 'Read', 'Write', 'Glob', 'Grep'], {\n cwd,\n shell: true,\n stdio: 'inherit',\n })\n if (result.status !== 0) {\n console.error(chalk.red('claude /init failed — is Claude Code installed?'))\n return 1\n }\n } else {\n console.log(chalk.gray('CLAUDE.md already exists (skipped, use --force to regenerate)'))\n }\n return 0\n}\n\nconst ensureLocalClaudeMd = (cwd: string) => {\n const localPath = PATH.resolve(cwd, 'CLAUDE.local.md')\n\n if (existsSync(localPath)) {\n console.log(chalk.gray('CLAUDE.local.md already exists (skipped)'))\n } else {\n writeFileSync(localPath, claudeMdLocalTemplate(), 'utf8')\n console.log(chalk.green('Generated CLAUDE.local.md'))\n }\n}\n\nexport const claudeRules = ({ force }: { force?: boolean } = {}): number => {\n const cwd = INIT_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 const claudeMdResult = ensureProjectClaudeMd(cwd, force)\n ensureLocalClaudeMd(cwd)\n\n return claudeMdResult ?? 0\n}\n","import {\n readdirSync, readFileSync, statSync,\n} from 'node:fs'\nimport { createRequire } from 'node:module'\nimport PATH from 'node:path'\n\nimport type { PackageManagerName } from '../pm/index.ts'\n\nconst require = createRequire(import.meta.url)\nconst packageRoot = PATH.dirname(require.resolve('@xylabs/ts-scripts-common/package.json'))\nconst templatesDir = PATH.resolve(packageRoot, 'templates', 'claude')\n\nexport function applyPackageManager(content: string, pm: PackageManagerName): string {\n return content.replaceAll('yarn xy', `${pm} xy`).replaceAll('yarn add', `${pm} add`)\n}\n\nexport const XYLABS_RULES_PREFIX = 'xylabs-'\nexport const XYLABS_COMMANDS_PREFIX = 'xy-'\nexport const LEGACY_COMMANDS_PREFIX = 'xylabs-'\nexport const XYLABS_SKILLS_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\n// Returns { 'xylabs-foo': { 'SKILL.md': '...', 'other.ts': '...' } }\nexport const claudeSkillTemplates = (): Record<string, Record<string, string>> => {\n const skillsDir = PATH.resolve(templatesDir, 'skills')\n const dirs = readdirSync(skillsDir).filter(\n f => f.startsWith(XYLABS_SKILLS_PREFIX) && statSync(PATH.resolve(skillsDir, f)).isDirectory(),\n )\n const result: Record<string, Record<string, string>> = {}\n for (const dir of dirs) {\n const dirPath = PATH.resolve(skillsDir, dir)\n const files = readdirSync(dirPath, { recursive: true, encoding: 'utf8' })\n result[dir] = {}\n for (const file of files) {\n if (statSync(PATH.resolve(dirPath, file)).isFile()) {\n result[dir][file] = readFileSync(PATH.resolve(dirPath, file), 'utf8')\n }\n }\n }\n return result\n}\n\nexport const claudeMdProjectTemplate = (): string =>\n readFileSync(PATH.resolve(templatesDir, 'CLAUDE-project.md'), 'utf8')\n\nexport const claudeMdLocalTemplate = (): string =>\n readFileSync(PATH.resolve(templatesDir, 'CLAUDE-local.md'), 'utf8')\n","import { existsSync } from 'node:fs'\n\nexport type PackageManagerName = 'pnpm' | 'yarn'\n\nexport function detectPackageManager(): PackageManagerName {\n if (existsSync('pnpm-lock.yaml') || existsSync('pnpm-workspace.yaml')) return 'pnpm'\n return 'yarn'\n}\n","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n"],"mappings":"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","names":["existsSync","readdirSync","readFileSync","PATH","require","PATH","existsSync","readFileSync","readdirSync"]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// src/actions/claude-settings.ts
|
|
2
|
+
import {
|
|
3
|
+
existsSync,
|
|
4
|
+
mkdirSync,
|
|
5
|
+
writeFileSync
|
|
6
|
+
} from "fs";
|
|
7
|
+
import PATH from "path";
|
|
8
|
+
import { createInterface } from "readline";
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
|
|
11
|
+
// src/lib/initCwd.ts
|
|
12
|
+
function INIT_CWD() {
|
|
13
|
+
return process.env.INIT_CWD ?? process.cwd();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// src/actions/claude-settings.ts
|
|
17
|
+
var DENY_LIST = [
|
|
18
|
+
"Bash(git push --force *)",
|
|
19
|
+
"Bash(git reset --hard *)",
|
|
20
|
+
"Bash(rm -rf /*)"
|
|
21
|
+
];
|
|
22
|
+
var RESTRICTIVE_ALLOW = [
|
|
23
|
+
"Bash(git *)",
|
|
24
|
+
"Bash(yarn *)",
|
|
25
|
+
"Bash(pnpm *)",
|
|
26
|
+
"Bash(npx *)",
|
|
27
|
+
"Bash(ls *)",
|
|
28
|
+
"Bash(mkdir *)",
|
|
29
|
+
"Bash(cp *)",
|
|
30
|
+
"Bash(mv *)",
|
|
31
|
+
"Bash(rm *)",
|
|
32
|
+
"Bash(cat *)",
|
|
33
|
+
"Bash(head *)",
|
|
34
|
+
"Bash(tail *)",
|
|
35
|
+
"Bash(echo *)",
|
|
36
|
+
"Bash(pwd)",
|
|
37
|
+
"Bash(which *)",
|
|
38
|
+
"Bash(grep *)",
|
|
39
|
+
"Bash(find *)",
|
|
40
|
+
"Bash(wc *)",
|
|
41
|
+
"Bash(npm view *)",
|
|
42
|
+
"Bash(gh *)",
|
|
43
|
+
"Read",
|
|
44
|
+
"Edit",
|
|
45
|
+
"Write",
|
|
46
|
+
"Glob",
|
|
47
|
+
"Grep",
|
|
48
|
+
"Skill"
|
|
49
|
+
];
|
|
50
|
+
var PERMISSIVE_ALLOW = [
|
|
51
|
+
...RESTRICTIVE_ALLOW,
|
|
52
|
+
"Bash(node *)",
|
|
53
|
+
"Bash(python3 *)",
|
|
54
|
+
"Bash(claude *)",
|
|
55
|
+
"Bash(sed *)",
|
|
56
|
+
"Bash(xargs *)",
|
|
57
|
+
"Bash(tee *)"
|
|
58
|
+
];
|
|
59
|
+
function buildSettings(level) {
|
|
60
|
+
return {
|
|
61
|
+
permissions: {
|
|
62
|
+
allow: level === "restrictive" ? RESTRICTIVE_ALLOW : PERMISSIVE_ALLOW,
|
|
63
|
+
deny: DENY_LIST
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function askConfirmation(question) {
|
|
68
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
69
|
+
return new Promise((resolve) => {
|
|
70
|
+
rl.question(question, (answer) => {
|
|
71
|
+
rl.close();
|
|
72
|
+
resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async function claudeSettings({ level = "permissive" } = {}) {
|
|
77
|
+
const cwd = INIT_CWD();
|
|
78
|
+
const claudeDir = PATH.resolve(cwd, ".claude");
|
|
79
|
+
const settingsPath = PATH.resolve(claudeDir, "settings.local.json");
|
|
80
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
81
|
+
if (existsSync(settingsPath)) {
|
|
82
|
+
const confirmed = await askConfirmation(
|
|
83
|
+
chalk.yellow(`${settingsPath} already exists. Replace it? (y/N) `)
|
|
84
|
+
);
|
|
85
|
+
if (!confirmed) {
|
|
86
|
+
console.log(chalk.gray("Skipped \u2014 existing settings.local.json preserved"));
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const settings = buildSettings(level);
|
|
91
|
+
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}
|
|
92
|
+
`, "utf8");
|
|
93
|
+
console.log(chalk.green(`Generated .claude/settings.local.json (${level})`));
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
claudeSettings
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=claude-settings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/claude-settings.ts","../../src/lib/initCwd.ts"],"sourcesContent":["import {\n existsSync, mkdirSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\nimport { createInterface } from 'node:readline'\n\nimport chalk from 'chalk'\n\nimport { INIT_CWD } from '../lib/index.ts'\n\nexport type SettingsLevel = 'restrictive' | 'permissive'\n\nconst DENY_LIST = [\n 'Bash(git push --force *)',\n 'Bash(git reset --hard *)',\n 'Bash(rm -rf /*)',\n]\n\nconst RESTRICTIVE_ALLOW = [\n 'Bash(git *)',\n 'Bash(yarn *)',\n 'Bash(pnpm *)',\n 'Bash(npx *)',\n 'Bash(ls *)',\n 'Bash(mkdir *)',\n 'Bash(cp *)',\n 'Bash(mv *)',\n 'Bash(rm *)',\n 'Bash(cat *)',\n 'Bash(head *)',\n 'Bash(tail *)',\n 'Bash(echo *)',\n 'Bash(pwd)',\n 'Bash(which *)',\n 'Bash(grep *)',\n 'Bash(find *)',\n 'Bash(wc *)',\n 'Bash(npm view *)',\n 'Bash(gh *)',\n 'Read',\n 'Edit',\n 'Write',\n 'Glob',\n 'Grep',\n 'Skill',\n]\n\nconst PERMISSIVE_ALLOW = [\n ...RESTRICTIVE_ALLOW,\n 'Bash(node *)',\n 'Bash(python3 *)',\n 'Bash(claude *)',\n 'Bash(sed *)',\n 'Bash(xargs *)',\n 'Bash(tee *)',\n]\n\nfunction buildSettings(level: SettingsLevel): object {\n return {\n permissions: {\n allow: level === 'restrictive' ? RESTRICTIVE_ALLOW : PERMISSIVE_ALLOW,\n deny: DENY_LIST,\n },\n }\n}\n\nfunction askConfirmation(question: string): Promise<boolean> {\n const rl = createInterface({ input: process.stdin, output: process.stdout })\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close()\n resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes')\n })\n })\n}\n\nexport async function claudeSettings({ level = 'permissive' }: { level?: SettingsLevel } = {}): Promise<number> {\n const cwd = INIT_CWD()\n const claudeDir = PATH.resolve(cwd, '.claude')\n const settingsPath = PATH.resolve(claudeDir, 'settings.local.json')\n\n mkdirSync(claudeDir, { recursive: true })\n\n if (existsSync(settingsPath)) {\n const confirmed = await askConfirmation(\n chalk.yellow(`${settingsPath} already exists. Replace it? (y/N) `),\n )\n if (!confirmed) {\n console.log(chalk.gray('Skipped — existing settings.local.json preserved'))\n return 0\n }\n }\n\n const settings = buildSettings(level)\n writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\\n`, 'utf8')\n console.log(chalk.green(`Generated .claude/settings.local.json (${level})`))\n return 0\n}\n","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EAAY;AAAA,EAAW;AAAA,OAClB;AACP,OAAO,UAAU;AACjB,SAAS,uBAAuB;AAEhC,OAAO,WAAW;;;ACNX,SAAS,WAAmB;AACjC,SAAO,QAAQ,IAAI,YAAY,QAAQ,IAAI;AAC7C;;;ADUA,IAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,mBAAmB;AAAA,EACvB,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,cAAc,OAA8B;AACnD,SAAO;AAAA,IACL,aAAa;AAAA,MACX,OAAO,UAAU,gBAAgB,oBAAoB;AAAA,MACrD,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,UAAoC;AAC3D,QAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAC3E,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,OAAG,SAAS,UAAU,CAAC,WAAW;AAChC,SAAG,MAAM;AACT,cAAQ,OAAO,YAAY,MAAM,OAAO,OAAO,YAAY,MAAM,KAAK;AAAA,IACxE,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,eAAe,EAAE,QAAQ,aAAa,IAA+B,CAAC,GAAoB;AAC9G,QAAM,MAAM,SAAS;AACrB,QAAM,YAAY,KAAK,QAAQ,KAAK,SAAS;AAC7C,QAAM,eAAe,KAAK,QAAQ,WAAW,qBAAqB;AAElE,YAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAExC,MAAI,WAAW,YAAY,GAAG;AAC5B,UAAM,YAAY,MAAM;AAAA,MACtB,MAAM,OAAO,GAAG,YAAY,qCAAqC;AAAA,IACnE;AACA,QAAI,CAAC,WAAW;AACd,cAAQ,IAAI,MAAM,KAAK,uDAAkD,CAAC;AAC1E,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,WAAW,cAAc,KAAK;AACpC,gBAAc,cAAc,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAC5E,UAAQ,IAAI,MAAM,MAAM,0CAA0C,KAAK,GAAG,CAAC;AAC3E,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// src/actions/claude-skills.ts
|
|
2
|
+
import {
|
|
3
|
+
existsSync as existsSync2,
|
|
4
|
+
mkdirSync,
|
|
5
|
+
readdirSync as readdirSync2,
|
|
6
|
+
readFileSync as readFileSync2,
|
|
7
|
+
rmSync,
|
|
8
|
+
statSync as statSync2,
|
|
9
|
+
writeFileSync
|
|
10
|
+
} from "fs";
|
|
11
|
+
import PATH2 from "path";
|
|
12
|
+
import chalk from "chalk";
|
|
13
|
+
|
|
14
|
+
// src/lib/claudeMdTemplate.ts
|
|
15
|
+
import {
|
|
16
|
+
readdirSync,
|
|
17
|
+
readFileSync,
|
|
18
|
+
statSync
|
|
19
|
+
} from "fs";
|
|
20
|
+
import { createRequire } from "module";
|
|
21
|
+
import PATH from "path";
|
|
22
|
+
var require2 = createRequire(import.meta.url);
|
|
23
|
+
var packageRoot = PATH.dirname(require2.resolve("@xylabs/ts-scripts-common/package.json"));
|
|
24
|
+
var templatesDir = PATH.resolve(packageRoot, "templates", "claude");
|
|
25
|
+
function applyPackageManager(content, pm) {
|
|
26
|
+
return content.replaceAll("yarn xy", `${pm} xy`).replaceAll("yarn add", `${pm} add`);
|
|
27
|
+
}
|
|
28
|
+
var XYLABS_SKILLS_PREFIX = "xylabs-";
|
|
29
|
+
var claudeSkillTemplates = () => {
|
|
30
|
+
const skillsDir = PATH.resolve(templatesDir, "skills");
|
|
31
|
+
const dirs = readdirSync(skillsDir).filter(
|
|
32
|
+
(f) => f.startsWith(XYLABS_SKILLS_PREFIX) && statSync(PATH.resolve(skillsDir, f)).isDirectory()
|
|
33
|
+
);
|
|
34
|
+
const result = {};
|
|
35
|
+
for (const dir of dirs) {
|
|
36
|
+
const dirPath = PATH.resolve(skillsDir, dir);
|
|
37
|
+
const files = readdirSync(dirPath, { recursive: true, encoding: "utf8" });
|
|
38
|
+
result[dir] = {};
|
|
39
|
+
for (const file of files) {
|
|
40
|
+
if (statSync(PATH.resolve(dirPath, file)).isFile()) {
|
|
41
|
+
result[dir][file] = readFileSync(PATH.resolve(dirPath, file), "utf8");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// src/pm/detectPackageManager.ts
|
|
49
|
+
import { existsSync } from "fs";
|
|
50
|
+
function detectPackageManager() {
|
|
51
|
+
if (existsSync("pnpm-lock.yaml") || existsSync("pnpm-workspace.yaml")) return "pnpm";
|
|
52
|
+
return "yarn";
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/lib/initCwd.ts
|
|
56
|
+
function INIT_CWD() {
|
|
57
|
+
return process.env.INIT_CWD ?? process.cwd();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/actions/claude-skills.ts
|
|
61
|
+
var syncSkillFiles = (skillsDir) => {
|
|
62
|
+
const pm = detectPackageManager();
|
|
63
|
+
const rawTemplates = claudeSkillTemplates();
|
|
64
|
+
const templateNames = new Set(Object.keys(rawTemplates));
|
|
65
|
+
let updated = 0;
|
|
66
|
+
let created = 0;
|
|
67
|
+
for (const [skillName, files] of Object.entries(rawTemplates)) {
|
|
68
|
+
const skillDir = PATH2.resolve(skillsDir, skillName);
|
|
69
|
+
mkdirSync(skillDir, { recursive: true });
|
|
70
|
+
for (const [filename, rawContent] of Object.entries(files)) {
|
|
71
|
+
const content = applyPackageManager(rawContent, pm);
|
|
72
|
+
const targetPath = PATH2.resolve(skillDir, filename);
|
|
73
|
+
mkdirSync(PATH2.dirname(targetPath), { recursive: true });
|
|
74
|
+
const existing = existsSync2(targetPath) ? readFileSync2(targetPath, "utf8") : void 0;
|
|
75
|
+
if (existing === content) continue;
|
|
76
|
+
writeFileSync(targetPath, content, "utf8");
|
|
77
|
+
if (existing) {
|
|
78
|
+
updated++;
|
|
79
|
+
} else {
|
|
80
|
+
created++;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
created,
|
|
86
|
+
templateNames,
|
|
87
|
+
updated
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
var removeStaleSkills = (skillsDir, templateNames) => {
|
|
91
|
+
const existingSkills = readdirSync2(skillsDir).filter(
|
|
92
|
+
(f) => f.startsWith(XYLABS_SKILLS_PREFIX) && statSync2(PATH2.resolve(skillsDir, f)).isDirectory()
|
|
93
|
+
);
|
|
94
|
+
let removed = 0;
|
|
95
|
+
for (const dir of existingSkills) {
|
|
96
|
+
if (!templateNames.has(dir)) {
|
|
97
|
+
rmSync(PATH2.resolve(skillsDir, dir), { recursive: true });
|
|
98
|
+
removed++;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return removed;
|
|
102
|
+
};
|
|
103
|
+
var logSkillsResult = (created, updated, removed) => {
|
|
104
|
+
if (created || updated || removed) {
|
|
105
|
+
const parts = [
|
|
106
|
+
created ? `${created} created` : "",
|
|
107
|
+
updated ? `${updated} updated` : "",
|
|
108
|
+
removed ? `${removed} removed` : ""
|
|
109
|
+
].filter(Boolean);
|
|
110
|
+
console.log(chalk.green(`.claude/skills/${XYLABS_SKILLS_PREFIX}*/: ${parts.join(", ")}`));
|
|
111
|
+
} else {
|
|
112
|
+
console.log(chalk.gray(`.claude/skills/${XYLABS_SKILLS_PREFIX}*/: already up to date`));
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var claudeSkills = () => {
|
|
116
|
+
const cwd = INIT_CWD();
|
|
117
|
+
const skillsDir = PATH2.resolve(cwd, ".claude", "skills");
|
|
118
|
+
mkdirSync(skillsDir, { recursive: true });
|
|
119
|
+
const {
|
|
120
|
+
created,
|
|
121
|
+
templateNames,
|
|
122
|
+
updated
|
|
123
|
+
} = syncSkillFiles(skillsDir);
|
|
124
|
+
const removed = removeStaleSkills(skillsDir, templateNames);
|
|
125
|
+
logSkillsResult(created, updated, removed);
|
|
126
|
+
return 0;
|
|
127
|
+
};
|
|
128
|
+
export {
|
|
129
|
+
claudeSkills
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=claude-skills.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actions/claude-skills.ts","../../src/lib/claudeMdTemplate.ts","../../src/pm/detectPackageManager.ts","../../src/lib/initCwd.ts"],"sourcesContent":["import {\n existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport {\n applyPackageManager, claudeSkillTemplates, INIT_CWD, XYLABS_SKILLS_PREFIX,\n} from '../lib/index.ts'\nimport { detectPackageManager } from '../pm/index.ts'\n\nconst syncSkillFiles = (skillsDir: string) => {\n const pm = detectPackageManager()\n const rawTemplates = claudeSkillTemplates()\n const templateNames = new Set(Object.keys(rawTemplates))\n let updated = 0\n let created = 0\n\n for (const [skillName, files] of Object.entries(rawTemplates)) {\n const skillDir = PATH.resolve(skillsDir, skillName)\n mkdirSync(skillDir, { recursive: true })\n\n for (const [filename, rawContent] of Object.entries(files)) {\n const content = applyPackageManager(rawContent, pm)\n const targetPath = PATH.resolve(skillDir, filename)\n mkdirSync(PATH.dirname(targetPath), { recursive: true })\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\n return {\n created, templateNames, updated,\n }\n}\n\nconst removeStaleSkills = (skillsDir: string, templateNames: Set<string>) => {\n const existingSkills = readdirSync(skillsDir).filter(\n f => f.startsWith(XYLABS_SKILLS_PREFIX) && statSync(PATH.resolve(skillsDir, f)).isDirectory(),\n )\n let removed = 0\n\n for (const dir of existingSkills) {\n if (!templateNames.has(dir)) {\n rmSync(PATH.resolve(skillsDir, dir), { recursive: true })\n removed++\n }\n }\n\n return removed\n}\n\nconst logSkillsResult = (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/skills/${XYLABS_SKILLS_PREFIX}*/: ${parts.join(', ')}`))\n } else {\n console.log(chalk.gray(`.claude/skills/${XYLABS_SKILLS_PREFIX}*/: already up to date`))\n }\n}\n\nexport const claudeSkills = (): number => {\n const cwd = INIT_CWD()\n const skillsDir = PATH.resolve(cwd, '.claude', 'skills')\n\n mkdirSync(skillsDir, { recursive: true })\n\n const {\n created, templateNames, updated,\n } = syncSkillFiles(skillsDir)\n const removed = removeStaleSkills(skillsDir, templateNames)\n logSkillsResult(created, updated, removed)\n\n return 0\n}\n","import {\n readdirSync, readFileSync, statSync,\n} from 'node:fs'\nimport { createRequire } from 'node:module'\nimport PATH from 'node:path'\n\nimport type { PackageManagerName } from '../pm/index.ts'\n\nconst require = createRequire(import.meta.url)\nconst packageRoot = PATH.dirname(require.resolve('@xylabs/ts-scripts-common/package.json'))\nconst templatesDir = PATH.resolve(packageRoot, 'templates', 'claude')\n\nexport function applyPackageManager(content: string, pm: PackageManagerName): string {\n return content.replaceAll('yarn xy', `${pm} xy`).replaceAll('yarn add', `${pm} add`)\n}\n\nexport const XYLABS_RULES_PREFIX = 'xylabs-'\nexport const XYLABS_COMMANDS_PREFIX = 'xy-'\nexport const LEGACY_COMMANDS_PREFIX = 'xylabs-'\nexport const XYLABS_SKILLS_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\n// Returns { 'xylabs-foo': { 'SKILL.md': '...', 'other.ts': '...' } }\nexport const claudeSkillTemplates = (): Record<string, Record<string, string>> => {\n const skillsDir = PATH.resolve(templatesDir, 'skills')\n const dirs = readdirSync(skillsDir).filter(\n f => f.startsWith(XYLABS_SKILLS_PREFIX) && statSync(PATH.resolve(skillsDir, f)).isDirectory(),\n )\n const result: Record<string, Record<string, string>> = {}\n for (const dir of dirs) {\n const dirPath = PATH.resolve(skillsDir, dir)\n const files = readdirSync(dirPath, { recursive: true, encoding: 'utf8' })\n result[dir] = {}\n for (const file of files) {\n if (statSync(PATH.resolve(dirPath, file)).isFile()) {\n result[dir][file] = readFileSync(PATH.resolve(dirPath, file), 'utf8')\n }\n }\n }\n return result\n}\n\nexport const claudeMdProjectTemplate = (): string =>\n readFileSync(PATH.resolve(templatesDir, 'CLAUDE-project.md'), 'utf8')\n\nexport const claudeMdLocalTemplate = (): string =>\n readFileSync(PATH.resolve(templatesDir, 'CLAUDE-local.md'), 'utf8')\n","import { existsSync } from 'node:fs'\n\nexport type PackageManagerName = 'pnpm' | 'yarn'\n\nexport function detectPackageManager(): PackageManagerName {\n if (existsSync('pnpm-lock.yaml') || existsSync('pnpm-workspace.yaml')) return 'pnpm'\n return 'yarn'\n}\n","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n"],"mappings":"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","names":["existsSync","readdirSync","readFileSync","statSync","PATH","require","PATH","existsSync","readFileSync","readdirSync","statSync"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// src/actions/clean-docs.ts
|
|
2
|
+
import path2 from "path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
|
|
5
|
+
// src/lib/deleteGlob.ts
|
|
6
|
+
import fs from "fs";
|
|
7
|
+
import { glob } from "glob";
|
|
8
|
+
var deleteGlob = (globPath) => {
|
|
9
|
+
const files = glob.sync(globPath);
|
|
10
|
+
for (const file of files) {
|
|
11
|
+
fs.rmSync(file, { recursive: true, force: true });
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// src/pm/detectPackageManager.ts
|
|
16
|
+
import { existsSync } from "fs";
|
|
17
|
+
function detectPackageManager() {
|
|
18
|
+
if (existsSync("pnpm-lock.yaml") || existsSync("pnpm-workspace.yaml")) return "pnpm";
|
|
19
|
+
return "yarn";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// src/pm/registry.ts
|
|
23
|
+
var implementations = /* @__PURE__ */ new Map();
|
|
24
|
+
function getPackageManager(name) {
|
|
25
|
+
const pmName = name ?? detectPackageManager();
|
|
26
|
+
const pm = implementations.get(pmName);
|
|
27
|
+
if (!pm) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
`No package manager implementation registered for "${pmName}". Ensure registerPackageManager() has been called before getPackageManager().`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return pm;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// src/lib/initCwd.ts
|
|
36
|
+
function INIT_CWD() {
|
|
37
|
+
return process.env.INIT_CWD ?? process.cwd();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// src/lib/packageName.ts
|
|
41
|
+
import { readFileSync } from "fs";
|
|
42
|
+
import path from "path";
|
|
43
|
+
function packageName() {
|
|
44
|
+
if (process.env.npm_package_name) {
|
|
45
|
+
return process.env.npm_package_name;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const pkgPath = path.join(INIT_CWD(), "package.json");
|
|
49
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
50
|
+
return pkg.name;
|
|
51
|
+
} catch {
|
|
52
|
+
return void 0;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// src/actions/clean-docs.ts
|
|
57
|
+
var cleanDocs = () => {
|
|
58
|
+
const pkgName = packageName();
|
|
59
|
+
console.log(chalk.green(`Cleaning Docs [${pkgName}]`));
|
|
60
|
+
for (const { location } of getPackageManager().listWorkspaces()) deleteGlob(path2.join(location, "docs"));
|
|
61
|
+
return 0;
|
|
62
|
+
};
|
|
63
|
+
export {
|
|
64
|
+
cleanDocs
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=clean-docs.mjs.map
|