@xylabs/ts-scripts-common 7.5.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/build.mjs +161 -0
- package/dist/actions/build.mjs.map +1 -0
- package/dist/actions/claude-clean.mjs +71 -0
- package/dist/actions/claude-clean.mjs.map +1 -0
- package/dist/actions/claude-commands.mjs +112 -0
- package/dist/actions/claude-commands.mjs.map +1 -0
- package/dist/actions/claude-rules.mjs +137 -0
- package/dist/actions/claude-rules.mjs.map +1 -0
- package/dist/actions/claude-settings.mjs +85 -0
- package/dist/actions/claude-settings.mjs.map +1 -0
- package/dist/actions/claude-skills.mjs +120 -0
- package/dist/actions/claude-skills.mjs.map +1 -0
- package/dist/actions/clean-docs.mjs +45 -0
- package/dist/actions/clean-docs.mjs.map +1 -0
- package/dist/actions/clean-eslint.mjs +26 -0
- package/dist/actions/clean-eslint.mjs.map +1 -0
- package/dist/actions/clean.mjs +145 -0
- package/dist/actions/clean.mjs.map +1 -0
- package/dist/actions/compile.mjs +172 -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 +165 -0
- package/dist/actions/cycle.mjs.map +1 -0
- package/dist/actions/dead.mjs +98 -0
- package/dist/actions/dead.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/checkPackage.mjs +672 -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/getUnlistedDependencies.mjs +48 -0
- package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs +33 -0
- package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs +30 -0
- package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs +309 -0
- package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/getUnusedPeerDependencies.mjs +26 -0
- package/dist/actions/deplint/checkPackage/getUnusedPeerDependencies.mjs.map +1 -0
- package/dist/actions/deplint/checkPackage/index.mjs +672 -0
- package/dist/actions/deplint/checkPackage/index.mjs.map +1 -0
- package/dist/actions/deplint/deplint.mjs +770 -0
- package/dist/actions/deplint/deplint.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/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 +20 -0
- package/dist/actions/deplint/getDependenciesFromPackageJson.mjs.map +1 -0
- package/dist/actions/deplint/getExtendsFromTsconfigs.mjs +44 -0
- package/dist/actions/deplint/getExtendsFromTsconfigs.mjs.map +1 -0
- package/dist/actions/deplint/getExternalImportsFromFiles.mjs +122 -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 +36 -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 +80 -0
- package/dist/actions/deplint/implicitDevDependencies.mjs.map +1 -0
- package/dist/actions/deplint/index.mjs +770 -0
- package/dist/actions/deplint/index.mjs.map +1 -0
- package/dist/actions/dupdeps.mjs +205 -0
- package/dist/actions/dupdeps.mjs.map +1 -0
- package/dist/actions/fix.mjs +163 -0
- package/dist/actions/fix.mjs.map +1 -0
- package/dist/actions/gen-docs.mjs +130 -0
- package/dist/actions/gen-docs.mjs.map +1 -0
- package/dist/actions/gitignore.mjs +160 -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 +4129 -0
- package/dist/actions/index.mjs.map +1 -0
- package/dist/actions/knip.mjs +98 -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.mjs +160 -0
- package/dist/actions/lint.mjs.map +1 -0
- package/dist/actions/lintlint.mjs +230 -0
- package/dist/actions/lintlint.mjs.map +1 -0
- package/dist/actions/npmignore-gen.mjs +91 -0
- package/dist/actions/npmignore-gen.mjs.map +1 -0
- package/dist/actions/package/clean-outputs.mjs +29 -0
- package/dist/actions/package/clean-outputs.mjs.map +1 -0
- package/dist/actions/package/clean-typescript.mjs +29 -0
- package/dist/actions/package/clean-typescript.mjs.map +1 -0
- package/dist/actions/package/clean.mjs +48 -0
- package/dist/actions/package/clean.mjs.map +1 -0
- package/dist/actions/package/compile/XyConfig.mjs +1 -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 +433 -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 +26 -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 +436 -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 +94 -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 +46 -0
- package/dist/actions/package/copy-assets.mjs.map +1 -0
- package/dist/actions/package/cycle.mjs +39 -0
- package/dist/actions/package/cycle.mjs.map +1 -0
- package/dist/actions/package/gen-docs.mjs +114 -0
- package/dist/actions/package/gen-docs.mjs.map +1 -0
- package/dist/actions/package/index.mjs +825 -0
- package/dist/actions/package/index.mjs.map +1 -0
- package/dist/actions/package/lint.mjs +80 -0
- package/dist/actions/package/lint.mjs.map +1 -0
- package/dist/actions/package/publint.mjs +66 -0
- package/dist/actions/package/publint.mjs.map +1 -0
- package/dist/actions/package/recompile.mjs +483 -0
- package/dist/actions/package/recompile.mjs.map +1 -0
- package/dist/actions/package-lint.mjs +186 -0
- package/dist/actions/package-lint.mjs.map +1 -0
- package/dist/actions/packman/convert.mjs +387 -0
- package/dist/actions/packman/convert.mjs.map +1 -0
- package/dist/actions/packman/convertToPnpm.mjs +149 -0
- package/dist/actions/packman/convertToPnpm.mjs.map +1 -0
- package/dist/actions/packman/convertToYarn.mjs +171 -0
- package/dist/actions/packman/convertToYarn.mjs.map +1 -0
- package/dist/actions/packman/index.mjs +389 -0
- package/dist/actions/packman/index.mjs.map +1 -0
- package/dist/actions/packman/rewriteScripts.mjs +52 -0
- package/dist/actions/packman/rewriteScripts.mjs.map +1 -0
- package/dist/actions/publint.mjs +187 -0
- package/dist/actions/publint.mjs.map +1 -0
- package/dist/actions/readme-gen.mjs +292 -0
- package/dist/actions/readme-gen.mjs.map +1 -0
- package/dist/actions/readme-init.mjs +83 -0
- package/dist/actions/readme-init.mjs.map +1 -0
- package/dist/actions/rebuild.mjs +122 -0
- package/dist/actions/rebuild.mjs.map +1 -0
- package/dist/actions/recompile.mjs +188 -0
- package/dist/actions/recompile.mjs.map +1 -0
- package/dist/actions/relint.mjs +160 -0
- package/dist/actions/relint.mjs.map +1 -0
- package/dist/actions/retest.mjs +129 -0
- package/dist/actions/retest.mjs.map +1 -0
- package/dist/actions/sonar.mjs +98 -0
- package/dist/actions/sonar.mjs.map +1 -0
- package/dist/actions/statics.mjs +204 -0
- package/dist/actions/statics.mjs.map +1 -0
- package/dist/actions/test.mjs +123 -0
- package/dist/actions/test.mjs.map +1 -0
- package/dist/bin/package/build-only.mjs +445 -0
- package/dist/bin/package/build-only.mjs.map +1 -0
- package/dist/bin/package/build.mjs +445 -0
- package/dist/bin/package/build.mjs.map +1 -0
- package/dist/bin/package/clean-outputs.mjs +29 -0
- package/dist/bin/package/clean-outputs.mjs.map +1 -0
- package/dist/bin/package/clean-typescript.mjs +29 -0
- package/dist/bin/package/clean-typescript.mjs.map +1 -0
- package/dist/bin/package/clean.mjs +53 -0
- package/dist/bin/package/clean.mjs.map +1 -0
- package/dist/bin/package/compile-only.mjs +441 -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 +445 -0
- package/dist/bin/package/compile.mjs.map +1 -0
- package/dist/bin/package/copy-assets-cjs.mjs +54 -0
- package/dist/bin/package/copy-assets-cjs.mjs.map +1 -0
- package/dist/bin/package/copy-assets-esm.mjs +54 -0
- package/dist/bin/package/copy-assets-esm.mjs.map +1 -0
- package/dist/bin/package/cycle.mjs +51 -0
- package/dist/bin/package/cycle.mjs.map +1 -0
- package/dist/bin/package/fix.mjs +92 -0
- package/dist/bin/package/fix.mjs.map +1 -0
- package/dist/bin/package/gen-docs.mjs +121 -0
- package/dist/bin/package/gen-docs.mjs.map +1 -0
- package/dist/bin/package/lint-verbose.mjs +92 -0
- package/dist/bin/package/lint-verbose.mjs.map +1 -0
- package/dist/bin/package/lint.mjs +92 -0
- package/dist/bin/package/lint.mjs.map +1 -0
- package/dist/bin/package/publint.mjs +75 -0
- package/dist/bin/package/publint.mjs.map +1 -0
- package/dist/bin/package/recompile.mjs +489 -0
- package/dist/bin/package/recompile.mjs.map +1 -0
- package/dist/bin/package/relint.mjs +92 -0
- package/dist/bin/package/relint.mjs.map +1 -0
- package/dist/bin/xy.mjs +3826 -0
- package/dist/bin/xy.mjs.map +1 -0
- package/dist/index.d.ts +564 -0
- package/dist/index.mjs +4979 -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 +65 -0
- package/dist/lib/claudeMdTemplate.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 +81 -0
- package/dist/lib/dependencies/DuplicateDetector.mjs.map +1 -0
- package/dist/lib/dependencies/detectDuplicateDependencies.mjs +185 -0
- package/dist/lib/dependencies/detectDuplicateDependencies.mjs.map +1 -0
- package/dist/lib/dependencies/index.mjs +186 -0
- package/dist/lib/dependencies/index.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/generateIgnoreFiles.mjs +87 -0
- package/dist/lib/generateIgnoreFiles.mjs.map +1 -0
- package/dist/lib/generateReadmeFiles.mjs +260 -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 +834 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/initCwd.mjs +9 -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/loadConfig.mjs +24 -0
- package/dist/lib/loadConfig.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/runSteps.mjs +95 -0
- package/dist/lib/runSteps.mjs.map +1 -0
- package/dist/lib/runStepsAsync.mjs +113 -0
- package/dist/lib/runStepsAsync.mjs.map +1 -0
- package/dist/lib/runXy.mjs +124 -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 +56 -0
- package/dist/lib/tryRunLocalScript.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/loadPackageConfig.mjs +11 -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/index.mjs +28 -0
- package/dist/pm/index.mjs.map +1 -0
- package/dist/pm/registry.mjs +27 -0
- package/dist/pm/registry.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 +182 -0
- package/dist/xy/build/buildCommand.mjs.map +1 -0
- package/dist/xy/build/compileCommand.mjs +189 -0
- package/dist/xy/build/compileCommand.mjs.map +1 -0
- package/dist/xy/build/compileOnlyCommand.mjs +190 -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 +493 -0
- package/dist/xy/build/index.mjs.map +1 -0
- package/dist/xy/build/rebuildCommand.mjs +135 -0
- package/dist/xy/build/rebuildCommand.mjs.map +1 -0
- package/dist/xy/build/recompileCommand.mjs +205 -0
- package/dist/xy/build/recompileCommand.mjs.map +1 -0
- package/dist/xy/common/claude/cleanCommand.mjs +79 -0
- package/dist/xy/common/claude/cleanCommand.mjs.map +1 -0
- package/dist/xy/common/claude/commandsCommand.mjs +120 -0
- package/dist/xy/common/claude/commandsCommand.mjs.map +1 -0
- package/dist/xy/common/claude/index.mjs +546 -0
- package/dist/xy/common/claude/index.mjs.map +1 -0
- package/dist/xy/common/claude/initCommand.mjs +319 -0
- package/dist/xy/common/claude/initCommand.mjs.map +1 -0
- package/dist/xy/common/claude/rulesCommand.mjs +153 -0
- package/dist/xy/common/claude/rulesCommand.mjs.map +1 -0
- package/dist/xy/common/claude/settingsCommand.mjs +93 -0
- package/dist/xy/common/claude/settingsCommand.mjs.map +1 -0
- package/dist/xy/common/claude/skillsCommand.mjs +129 -0
- package/dist/xy/common/claude/skillsCommand.mjs.map +1 -0
- package/dist/xy/common/cleanDocsCommand.mjs +53 -0
- package/dist/xy/common/cleanDocsCommand.mjs.map +1 -0
- package/dist/xy/common/deadCommand.mjs +116 -0
- package/dist/xy/common/deadCommand.mjs.map +1 -0
- package/dist/xy/common/genDocsCommand.mjs +146 -0
- package/dist/xy/common/genDocsCommand.mjs.map +1 -0
- package/dist/xy/common/gitignoreCommand.mjs +166 -0
- package/dist/xy/common/gitignoreCommand.mjs.map +1 -0
- package/dist/xy/common/gitlintCommand.mjs +82 -0
- package/dist/xy/common/gitlintCommand.mjs.map +1 -0
- package/dist/xy/common/index.mjs +1874 -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 +101 -0
- package/dist/xy/common/npmignoreGenCommand.mjs.map +1 -0
- package/dist/xy/common/packmanCommand.mjs +415 -0
- package/dist/xy/common/packmanCommand.mjs.map +1 -0
- package/dist/xy/common/readme/genCommand.mjs +324 -0
- package/dist/xy/common/readme/genCommand.mjs.map +1 -0
- package/dist/xy/common/readme/index.mjs +364 -0
- package/dist/xy/common/readme/index.mjs.map +1 -0
- package/dist/xy/common/readme/initCommand.mjs +103 -0
- package/dist/xy/common/readme/initCommand.mjs.map +1 -0
- package/dist/xy/common/retestCommand.mjs +142 -0
- package/dist/xy/common/retestCommand.mjs.map +1 -0
- package/dist/xy/common/testCommand.mjs +136 -0
- package/dist/xy/common/testCommand.mjs.map +1 -0
- package/dist/xy/index.mjs +3823 -0
- package/dist/xy/index.mjs.map +1 -0
- package/dist/xy/lint/cycleCommand.mjs +184 -0
- package/dist/xy/lint/cycleCommand.mjs.map +1 -0
- package/dist/xy/lint/deplintCommand.mjs +820 -0
- package/dist/xy/lint/deplintCommand.mjs.map +1 -0
- package/dist/xy/lint/fixCommand.mjs +184 -0
- package/dist/xy/lint/fixCommand.mjs.map +1 -0
- package/dist/xy/lint/index.mjs +1691 -0
- package/dist/xy/lint/index.mjs.map +1 -0
- package/dist/xy/lint/knipCommand.mjs +121 -0
- package/dist/xy/lint/knipCommand.mjs.map +1 -0
- package/dist/xy/lint/lintCommand.mjs +202 -0
- package/dist/xy/lint/lintCommand.mjs.map +1 -0
- package/dist/xy/lint/lintlintCommand.mjs +250 -0
- package/dist/xy/lint/lintlintCommand.mjs.map +1 -0
- package/dist/xy/lint/packageLintCommand.mjs +201 -0
- package/dist/xy/lint/packageLintCommand.mjs.map +1 -0
- package/dist/xy/lint/publintCommand.mjs +208 -0
- package/dist/xy/lint/publintCommand.mjs.map +1 -0
- package/dist/xy/lint/relintCommand.mjs +179 -0
- package/dist/xy/lint/relintCommand.mjs.map +1 -0
- package/dist/xy/lint/sonarCommand.mjs +121 -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/xy.mjs +3819 -0
- package/dist/xy/xy.mjs.map +1 -0
- package/dist/xy/xyParseOptions.mjs +91 -0
- package/dist/xy/xyParseOptions.mjs.map +1 -0
- package/package.json +108 -0
- package/templates/claude/CLAUDE-local.md +4 -0
- package/templates/claude/CLAUDE-project.md +4 -0
- package/templates/claude/commands/xy-build.md +5 -0
- package/templates/claude/commands/xy-clean.md +5 -0
- package/templates/claude/commands/xy-compile.md +5 -0
- package/templates/claude/commands/xy-cycle.md +5 -0
- package/templates/claude/commands/xy-dead.md +5 -0
- package/templates/claude/commands/xy-deplint.md +5 -0
- package/templates/claude/commands/xy-deps.md +24 -0
- package/templates/claude/commands/xy-dupdeps.md +5 -0
- package/templates/claude/commands/xy-fix.md +5 -0
- package/templates/claude/commands/xy-gen-docs.md +5 -0
- package/templates/claude/commands/xy-gitignore.md +5 -0
- package/templates/claude/commands/xy-gitlint.md +5 -0
- package/templates/claude/commands/xy-knip.md +5 -0
- package/templates/claude/commands/xy-license.md +5 -0
- package/templates/claude/commands/xy-lint-rules.md +44 -0
- package/templates/claude/commands/xy-lint.md +5 -0
- package/templates/claude/commands/xy-publint.md +5 -0
- package/templates/claude/commands/xy-rebuild.md +5 -0
- package/templates/claude/commands/xy-recompile.md +5 -0
- package/templates/claude/commands/xy-reinstall.md +5 -0
- package/templates/claude/commands/xy-relint.md +5 -0
- package/templates/claude/commands/xy-retest.md +5 -0
- package/templates/claude/commands/xy-sonar.md +5 -0
- package/templates/claude/commands/xy-test.md +5 -0
- package/templates/claude/commands/xy-up.md +7 -0
- package/templates/claude/rules/xylabs-architecture.md +8 -0
- package/templates/claude/rules/xylabs-build.md +9 -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/gitignore/template.gitignore +51 -0
- package/templates/readme/README.body.md +11 -0
- package/templates/readme/README.template.md +22 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: xylabs-e2e-setup
|
|
3
|
+
description: >
|
|
4
|
+
Sets up a complete Playwright end-to-end testing package for a React/Vite monorepo app.
|
|
5
|
+
Use this skill whenever the user asks to add e2e tests, set up Playwright, add browser testing,
|
|
6
|
+
or create a test package for a React app — even if they just say something like "add e2e" or
|
|
7
|
+
"I want to test this in Safari too". The skill creates the full packages/e2e/ directory with
|
|
8
|
+
page object models, a Playwright config covering Chromium, Firefox, and WebKit, and a webkit-safe
|
|
9
|
+
home page title test. It adapts to the existing repo's package naming, dev server port, and
|
|
10
|
+
workspace conventions rather than using generic defaults.
|
|
11
|
+
---
|
|
12
|
+
# xylabs-e2e-setup
|
|
13
|
+
Scaffolds a `packages/e2e/` Playwright testing package that fits neatly into an existing
|
|
14
|
+
React/Vite Yarn-workspaces monorepo. The generated package uses the Page Object Model pattern,
|
|
15
|
+
targets all three browser engines, and includes a WebKit-safe title assertion.
|
|
16
|
+
---
|
|
17
|
+
## Step 1 — Read the repo before writing anything
|
|
18
|
+
Before generating any files, collect these four pieces of information from the repo root:
|
|
19
|
+
1. **App package name** — read `package.json` → `name` field (e.g. `web-explore.xyo.network-react`)
|
|
20
|
+
2. **Dev-server port** — read `vite.config.ts`; look for the parsed `port` variable or the `server.port` value. Default is `3000` if not set.
|
|
21
|
+
3. **Existing e2e scripts** — check whether `package.json` already has `"e2e"` scripts so you don't duplicate them.
|
|
22
|
+
4. **Workspace glob** — confirm `"workspaces": ["packages/*"]` is present so `packages/e2e` will be picked up automatically.
|
|
23
|
+
The e2e package name should be derived from the app name by stripping any leading scope/path noise
|
|
24
|
+
and appending `-e2e`. For example, `web-explore.xyo.network-react` → `web-explore-e2e`.
|
|
25
|
+
---
|
|
26
|
+
## Step 2 — Create `packages/e2e/`
|
|
27
|
+
Create every file below. Adapt the port and package name to what you found in Step 1.
|
|
28
|
+
### `packages/e2e/package.json`
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"name": "<derived-e2e-name>",
|
|
32
|
+
"private": true,
|
|
33
|
+
"type": "module",
|
|
34
|
+
"scripts": {
|
|
35
|
+
"test": "playwright test",
|
|
36
|
+
"test:debug": "playwright test --debug",
|
|
37
|
+
"test:headed": "playwright test --headed",
|
|
38
|
+
"test:ui": "playwright test --ui"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@playwright/test": "^1.49.0"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
### `packages/e2e/tsconfig.json`
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"compilerOptions": {
|
|
49
|
+
"esModuleInterop": true,
|
|
50
|
+
"lib": ["ES2022", "DOM"],
|
|
51
|
+
"module": "ESNext",
|
|
52
|
+
"moduleResolution": "bundler",
|
|
53
|
+
"noEmit": true,
|
|
54
|
+
"strict": true,
|
|
55
|
+
"target": "ES2022"
|
|
56
|
+
},
|
|
57
|
+
"exclude": ["node_modules", "test-results", "playwright-report"],
|
|
58
|
+
"include": ["playwright.config.ts", "tests/**/*.ts", "pages/**/*.ts", "fixtures/**/*.ts"]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
### `packages/e2e/playwright.config.ts`
|
|
62
|
+
Key points:
|
|
63
|
+
- `baseURL` falls back to `http://localhost:<PORT>` (use the port you found)
|
|
64
|
+
- `webServer` restarts the app's own dev server when needed, with `reuseExistingServer: true`
|
|
65
|
+
- `webServer.cwd` is `'../..'` — two levels up from `packages/e2e/` to the repo root
|
|
66
|
+
- `webServer.command` is `'yarn start'` (the standard React/Vite dev-server script)
|
|
67
|
+
- CI mode: `forbidOnly`, 1 worker, 2 retries, `github` reporter
|
|
68
|
+
```typescript
|
|
69
|
+
import { defineConfig, devices } from '@playwright/test'
|
|
70
|
+
const baseURL = process.env['BASE_URL'] ?? 'http://localhost:<PORT>'
|
|
71
|
+
export default defineConfig({
|
|
72
|
+
forbidOnly: !!process.env['CI'],
|
|
73
|
+
fullyParallel: true,
|
|
74
|
+
projects: [
|
|
75
|
+
{
|
|
76
|
+
name: 'chromium',
|
|
77
|
+
use: { ...devices['Desktop Chrome'] },
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'firefox',
|
|
81
|
+
use: { ...devices['Desktop Firefox'] },
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'webkit',
|
|
85
|
+
use: { ...devices['Desktop Safari'] },
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
reporter: process.env['CI'] ? 'github' : 'html',
|
|
89
|
+
retries: process.env['CI'] ? 2 : 0,
|
|
90
|
+
testDir: './tests',
|
|
91
|
+
use: {
|
|
92
|
+
baseURL,
|
|
93
|
+
screenshot: 'only-on-failure',
|
|
94
|
+
trace: 'on-first-retry',
|
|
95
|
+
video: 'on-first-retry',
|
|
96
|
+
},
|
|
97
|
+
webServer: {
|
|
98
|
+
command: 'yarn start',
|
|
99
|
+
cwd: '../..',
|
|
100
|
+
reuseExistingServer: true,
|
|
101
|
+
url: baseURL,
|
|
102
|
+
},
|
|
103
|
+
workers: process.env['CI'] ? 1 : undefined,
|
|
104
|
+
})
|
|
105
|
+
```
|
|
106
|
+
### `packages/e2e/pages/BasePage.ts`
|
|
107
|
+
The `goto` base method navigates and waits for `domcontentloaded`. Subclasses override `goto()` with
|
|
108
|
+
no arguments and call `super.goto('/<path>')`.
|
|
109
|
+
```typescript
|
|
110
|
+
import type { Page } from '@playwright/test'
|
|
111
|
+
export class BasePage {
|
|
112
|
+
readonly page: Page
|
|
113
|
+
constructor(page: Page) {
|
|
114
|
+
this.page = page
|
|
115
|
+
}
|
|
116
|
+
async goto(path: string): Promise<void> {
|
|
117
|
+
await this.page.goto(path)
|
|
118
|
+
await this.page.waitForLoadState('domcontentloaded')
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
### `packages/e2e/pages/HomePage.ts`
|
|
123
|
+
```typescript
|
|
124
|
+
import type { Locator, Page } from '@playwright/test'
|
|
125
|
+
import { BasePage } from './BasePage.js'
|
|
126
|
+
export class HomePage extends BasePage {
|
|
127
|
+
readonly nav: Locator
|
|
128
|
+
constructor(page: Page) {
|
|
129
|
+
super(page)
|
|
130
|
+
this.nav = page.locator('nav')
|
|
131
|
+
}
|
|
132
|
+
override async goto(): Promise<void> {
|
|
133
|
+
await super.goto('/')
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
### `packages/e2e/tests/home.spec.ts`
|
|
138
|
+
> **Why the `waitForFunction` call?**
|
|
139
|
+
> In WebKit (Safari), `networkidle` can fire before React (or react-helmet) has written
|
|
140
|
+
> `document.title`. Adding `waitForFunction(() => document.title.length > 0)` polls inside
|
|
141
|
+
> the browser until the title is actually set, so the `toHaveTitle` assertion is always
|
|
142
|
+
> racing against a non-empty string rather than timing out on an empty one.
|
|
143
|
+
```typescript
|
|
144
|
+
import { expect, test } from '@playwright/test'
|
|
145
|
+
import { HomePage } from '../pages/HomePage.js'
|
|
146
|
+
test.describe('Home page', () => {
|
|
147
|
+
test('loads successfully', async ({ page }) => {
|
|
148
|
+
const home = new HomePage(page)
|
|
149
|
+
await home.goto()
|
|
150
|
+
await page.waitForFunction(() => document.title.length > 0, { timeout: 5000 })
|
|
151
|
+
await expect(page).toHaveTitle(/.+/)
|
|
152
|
+
})
|
|
153
|
+
})
|
|
154
|
+
```
|
|
155
|
+
### `packages/e2e/tests/navigation.spec.ts`
|
|
156
|
+
Minimal smoke test — extend the `routes` array as the app grows.
|
|
157
|
+
```typescript
|
|
158
|
+
import { expect, test } from '@playwright/test'
|
|
159
|
+
const routes = [
|
|
160
|
+
{ name: 'Home', path: '/' },
|
|
161
|
+
]
|
|
162
|
+
test.describe('Navigation', () => {
|
|
163
|
+
for (const route of routes) {
|
|
164
|
+
test(`${route.name} route renders without errors`, async ({ page }) => {
|
|
165
|
+
await page.goto(route.path)
|
|
166
|
+
await expect(page.locator('body')).toBeVisible()
|
|
167
|
+
})
|
|
168
|
+
}
|
|
169
|
+
})
|
|
170
|
+
```
|
|
171
|
+
---
|
|
172
|
+
## Step 3 — Wire up root `package.json`
|
|
173
|
+
Add convenience scripts to the root `package.json` so developers can run tests without `cd`-ing
|
|
174
|
+
into `packages/e2e`. Use the e2e package name you derived in Step 1.
|
|
175
|
+
```json
|
|
176
|
+
"e2e": "yarn workspace <derived-e2e-name> test",
|
|
177
|
+
"e2e:debug": "yarn workspace <derived-e2e-name> test:debug",
|
|
178
|
+
"e2e:headed": "yarn workspace <derived-e2e-name> test:headed",
|
|
179
|
+
"e2e:ui": "yarn workspace <derived-e2e-name> test:ui"
|
|
180
|
+
```
|
|
181
|
+
Only add scripts that don't already exist.
|
|
182
|
+
---
|
|
183
|
+
## Step 4 — Update root `.gitignore`
|
|
184
|
+
Playwright generates several output directories that should never be committed. Read the root
|
|
185
|
+
`.gitignore` and append the following block **only if the entries are not already present**:
|
|
186
|
+
```gitignore
|
|
187
|
+
# Playwright
|
|
188
|
+
/packages/e2e/test-results/
|
|
189
|
+
/packages/e2e/playwright-report/
|
|
190
|
+
/packages/e2e/blob-report/
|
|
191
|
+
/packages/e2e/.playwright/
|
|
192
|
+
```
|
|
193
|
+
Do not create a new `.gitignore` if one doesn't exist — if there is no root `.gitignore`, skip
|
|
194
|
+
this step and note it to the user.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
## Step 5 — Install Playwright browsers and CLI tool
|
|
198
|
+
After scaffolding, run the following two commands via the Bash tool:
|
|
199
|
+
|
|
200
|
+
**5a — Install browser binaries:**
|
|
201
|
+
```bash
|
|
202
|
+
yarn workspace <derived-e2e-name> playwright install
|
|
203
|
+
```
|
|
204
|
+
This downloads the Chromium, Firefox, and WebKit browser binaries. Without this step the tests
|
|
205
|
+
will fail immediately with a "browser not found" error.
|
|
206
|
+
|
|
207
|
+
**5b — Install the `@playwright/cli` package and its skills:**
|
|
208
|
+
```bash
|
|
209
|
+
yarn workspace <derived-e2e-name> add @playwright/cli@latest && yarn workspace <derived-e2e-name> playwright-cli install --skills
|
|
210
|
+
```
|
|
211
|
+
`@playwright/cli` provides the `playwright-cli` binary. Running `playwright-cli install --skills`
|
|
212
|
+
installs the Playwright VS Code agent skills into the workspace so Copilot and other AI tooling
|
|
213
|
+
can generate accurate Playwright tests against the actual page structure.
|
|
214
|
+
|
|
215
|
+
Do not skip either step or ask the user to run them manually — execute both directly as part of
|
|
216
|
+
the setup.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
## Conventions to preserve
|
|
220
|
+
- All files use ESM (`import`/`export`), never CommonJS.
|
|
221
|
+
- Playwright bracket notation for env vars: `process.env['CI']`, not `process.env.CI` — avoids TypeScript strict-mode complaints.
|
|
222
|
+
- `strict: true` in `tsconfig.json`.
|
|
223
|
+
- No `dist/` output — `noEmit: true` because Playwright compiles on the fly via its own ESM loader.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Build outputs (root)
|
|
2
|
+
/build
|
|
3
|
+
/dist
|
|
4
|
+
/docs
|
|
5
|
+
/storybook-static
|
|
6
|
+
|
|
7
|
+
# Build outputs (packages)
|
|
8
|
+
packages/*/build
|
|
9
|
+
packages/*/dist
|
|
10
|
+
packages/*/docs
|
|
11
|
+
packages/*/storybook-static
|
|
12
|
+
|
|
13
|
+
# Coverage
|
|
14
|
+
/coverage
|
|
15
|
+
packages/*/coverage
|
|
16
|
+
|
|
17
|
+
# TypeScript
|
|
18
|
+
*.tsbuildinfo
|
|
19
|
+
|
|
20
|
+
# Logs
|
|
21
|
+
*.log
|
|
22
|
+
|
|
23
|
+
# Environment
|
|
24
|
+
.env
|
|
25
|
+
.env.*
|
|
26
|
+
!.env.example
|
|
27
|
+
|
|
28
|
+
# OS
|
|
29
|
+
.DS_Store
|
|
30
|
+
|
|
31
|
+
# Node
|
|
32
|
+
node_modules
|
|
33
|
+
|
|
34
|
+
# Yarn
|
|
35
|
+
.pnp.*
|
|
36
|
+
.yarn/*
|
|
37
|
+
!.yarn/patches
|
|
38
|
+
!.yarn/plugins
|
|
39
|
+
!.yarn/releases
|
|
40
|
+
!.yarn/sdks
|
|
41
|
+
!.yarn/versions
|
|
42
|
+
|
|
43
|
+
# Lint
|
|
44
|
+
.eslintcache
|
|
45
|
+
|
|
46
|
+
# Claude Code
|
|
47
|
+
.claude
|
|
48
|
+
CLAUDE.local.md
|
|
49
|
+
|
|
50
|
+
# Claude Code worktrees
|
|
51
|
+
.claude-worktrees
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
[![logo][]](https://xylabs.com)
|
|
2
|
+
|
|
3
|
+
# {{name}}
|
|
4
|
+
|
|
5
|
+
[![npm][npm-badge]][npm-link]
|
|
6
|
+
[![license][license-badge]][license-link]
|
|
7
|
+
|
|
8
|
+
> {{description}}
|
|
9
|
+
|
|
10
|
+
{{body}}
|
|
11
|
+
|
|
12
|
+
## License
|
|
13
|
+
|
|
14
|
+
See the [LICENSE](LICENSE) file for license rights and limitations (LGPL-3.0-only).
|
|
15
|
+
|
|
16
|
+
{{typedoc}}
|
|
17
|
+
|
|
18
|
+
[logo]: https://example.com/logo.svg
|
|
19
|
+
[npm-badge]: https://img.shields.io/npm/v/{{name}}.svg
|
|
20
|
+
[npm-link]: https://www.npmjs.com/package/{{name}}
|
|
21
|
+
[license-badge]: https://img.shields.io/npm/l/{{name}}.svg
|
|
22
|
+
[license-link]: https://github.com/xylabs/sdk-js/blob/main/LICENSE
|