@codyswann/lisa 1.0.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.
Files changed (322) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +867 -0
  3. package/all/copy-overwrite/.claude/README.md +205 -0
  4. package/all/copy-overwrite/.claude/agents/agent-architect.md +311 -0
  5. package/all/copy-overwrite/.claude/agents/codebase-analyzer.md +146 -0
  6. package/all/copy-overwrite/.claude/agents/codebase-locator.md +125 -0
  7. package/all/copy-overwrite/.claude/agents/codebase-pattern-finder.md +237 -0
  8. package/all/copy-overwrite/.claude/agents/git-history-analyzer.md +183 -0
  9. package/all/copy-overwrite/.claude/agents/hooks-expert.md +74 -0
  10. package/all/copy-overwrite/.claude/agents/skill-evaluator.md +246 -0
  11. package/all/copy-overwrite/.claude/agents/slash-command-architect.md +87 -0
  12. package/all/copy-overwrite/.claude/agents/web-search-researcher.md +112 -0
  13. package/all/copy-overwrite/.claude/commands/git/commit-and-submit-pr.md +8 -0
  14. package/all/copy-overwrite/.claude/commands/git/commit.md +44 -0
  15. package/all/copy-overwrite/.claude/commands/git/prune.md +34 -0
  16. package/all/copy-overwrite/.claude/commands/git/submit-pr.md +50 -0
  17. package/all/copy-overwrite/.claude/commands/jira/create.md +50 -0
  18. package/all/copy-overwrite/.claude/commands/jira/verify.md +34 -0
  19. package/all/copy-overwrite/.claude/commands/project/archive.md +8 -0
  20. package/all/copy-overwrite/.claude/commands/project/bootstrap.md +49 -0
  21. package/all/copy-overwrite/.claude/commands/project/complete-task.md +7 -0
  22. package/all/copy-overwrite/.claude/commands/project/debrief.md +65 -0
  23. package/all/copy-overwrite/.claude/commands/project/execute.md +94 -0
  24. package/all/copy-overwrite/.claude/commands/project/implement.md +42 -0
  25. package/all/copy-overwrite/.claude/commands/project/local-code-review.md +88 -0
  26. package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +74 -0
  27. package/all/copy-overwrite/.claude/commands/project/plan.md +314 -0
  28. package/all/copy-overwrite/.claude/commands/project/research.md +248 -0
  29. package/all/copy-overwrite/.claude/commands/project/review.md +63 -0
  30. package/all/copy-overwrite/.claude/commands/project/setup.md +19 -0
  31. package/all/copy-overwrite/.claude/commands/project/verify.md +38 -0
  32. package/all/copy-overwrite/.claude/commands/pull-request/review.md +12 -0
  33. package/all/copy-overwrite/.claude/commands/rules/format-md.md +72 -0
  34. package/all/copy-overwrite/.claude/commands/sonarqube/check.md +6 -0
  35. package/all/copy-overwrite/.claude/commands/sonarqube/fix.md +3 -0
  36. package/all/copy-overwrite/.claude/hooks/README.md +301 -0
  37. package/all/copy-overwrite/.claude/hooks/notify-ntfy.sh +181 -0
  38. package/all/copy-overwrite/.claude/settings.json +41 -0
  39. package/all/copy-overwrite/.claude/settings.local.json.example +14 -0
  40. package/all/copy-overwrite/.claude/skills/coding-philosophy/SKILL.md +405 -0
  41. package/all/copy-overwrite/.claude/skills/coding-philosophy/references/function-structure.md +416 -0
  42. package/all/copy-overwrite/.claude/skills/coding-philosophy/references/immutable-patterns.md +316 -0
  43. package/all/copy-overwrite/.claude/skills/prompt-complexity-scorer/SKILL.md +118 -0
  44. package/all/copy-overwrite/.claude/skills/skill-creator/LICENSE.txt +202 -0
  45. package/all/copy-overwrite/.claude/skills/skill-creator/SKILL.md +210 -0
  46. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
  47. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
  48. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
  49. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
  50. package/all/copy-overwrite/CLAUDE.md +77 -0
  51. package/all/copy-overwrite/HUMAN.md +17 -0
  52. package/all/copy-overwrite/specs/.keep +0 -0
  53. package/all/create-only/PROJECT_RULES.md +0 -0
  54. package/cdk/merge/package.json +20 -0
  55. package/dist/cli/index.d.ts +7 -0
  56. package/dist/cli/index.d.ts.map +1 -0
  57. package/dist/cli/index.js +107 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/prompts.d.ts +45 -0
  60. package/dist/cli/prompts.d.ts.map +1 -0
  61. package/dist/cli/prompts.js +58 -0
  62. package/dist/cli/prompts.js.map +1 -0
  63. package/dist/core/config.d.ts +73 -0
  64. package/dist/core/config.d.ts.map +1 -0
  65. package/dist/core/config.js +36 -0
  66. package/dist/core/config.js.map +1 -0
  67. package/dist/core/index.d.ts +4 -0
  68. package/dist/core/index.d.ts.map +1 -0
  69. package/dist/core/index.js +4 -0
  70. package/dist/core/index.js.map +1 -0
  71. package/dist/core/lisa.d.ts +81 -0
  72. package/dist/core/lisa.d.ts.map +1 -0
  73. package/dist/core/lisa.js +459 -0
  74. package/dist/core/lisa.js.map +1 -0
  75. package/dist/core/manifest.d.ts +58 -0
  76. package/dist/core/manifest.d.ts.map +1 -0
  77. package/dist/core/manifest.js +104 -0
  78. package/dist/core/manifest.js.map +1 -0
  79. package/dist/detection/detector.interface.d.ts +15 -0
  80. package/dist/detection/detector.interface.d.ts.map +1 -0
  81. package/dist/detection/detector.interface.js +2 -0
  82. package/dist/detection/detector.interface.js.map +1 -0
  83. package/dist/detection/detectors/cdk.d.ts +10 -0
  84. package/dist/detection/detectors/cdk.d.ts.map +1 -0
  85. package/dist/detection/detectors/cdk.js +34 -0
  86. package/dist/detection/detectors/cdk.js.map +1 -0
  87. package/dist/detection/detectors/expo.d.ts +10 -0
  88. package/dist/detection/detectors/expo.d.ts.map +1 -0
  89. package/dist/detection/detectors/expo.js +30 -0
  90. package/dist/detection/detectors/expo.js.map +1 -0
  91. package/dist/detection/detectors/nestjs.d.ts +10 -0
  92. package/dist/detection/detectors/nestjs.d.ts.map +1 -0
  93. package/dist/detection/detectors/nestjs.js +34 -0
  94. package/dist/detection/detectors/nestjs.js.map +1 -0
  95. package/dist/detection/detectors/npm-package.d.ts +13 -0
  96. package/dist/detection/detectors/npm-package.d.ts.map +1 -0
  97. package/dist/detection/detectors/npm-package.js +30 -0
  98. package/dist/detection/detectors/npm-package.js.map +1 -0
  99. package/dist/detection/detectors/typescript.d.ts +10 -0
  100. package/dist/detection/detectors/typescript.d.ts.map +1 -0
  101. package/dist/detection/detectors/typescript.js +25 -0
  102. package/dist/detection/detectors/typescript.js.map +1 -0
  103. package/dist/detection/index.d.ts +24 -0
  104. package/dist/detection/index.d.ts.map +1 -0
  105. package/dist/detection/index.js +57 -0
  106. package/dist/detection/index.js.map +1 -0
  107. package/dist/errors/index.d.ts +69 -0
  108. package/dist/errors/index.d.ts.map +1 -0
  109. package/dist/errors/index.js +110 -0
  110. package/dist/errors/index.js.map +1 -0
  111. package/dist/index.d.ts +3 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +8 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/logging/console-logger.d.ts +12 -0
  116. package/dist/logging/console-logger.d.ts.map +1 -0
  117. package/dist/logging/console-logger.js +22 -0
  118. package/dist/logging/console-logger.js.map +1 -0
  119. package/dist/logging/index.d.ts +4 -0
  120. package/dist/logging/index.d.ts.map +1 -0
  121. package/dist/logging/index.js +3 -0
  122. package/dist/logging/index.js.map +1 -0
  123. package/dist/logging/logger.interface.d.ts +20 -0
  124. package/dist/logging/logger.interface.d.ts.map +1 -0
  125. package/dist/logging/logger.interface.js +2 -0
  126. package/dist/logging/logger.interface.js.map +1 -0
  127. package/dist/logging/silent-logger.d.ts +12 -0
  128. package/dist/logging/silent-logger.d.ts.map +1 -0
  129. package/dist/logging/silent-logger.js +21 -0
  130. package/dist/logging/silent-logger.js.map +1 -0
  131. package/dist/strategies/copy-contents.d.ts +14 -0
  132. package/dist/strategies/copy-contents.d.ts.map +1 -0
  133. package/dist/strategies/copy-contents.js +69 -0
  134. package/dist/strategies/copy-contents.js.map +1 -0
  135. package/dist/strategies/copy-overwrite.d.ts +14 -0
  136. package/dist/strategies/copy-overwrite.d.ts.map +1 -0
  137. package/dist/strategies/copy-overwrite.js +47 -0
  138. package/dist/strategies/copy-overwrite.js.map +1 -0
  139. package/dist/strategies/create-only.d.ts +13 -0
  140. package/dist/strategies/create-only.d.ts.map +1 -0
  141. package/dist/strategies/create-only.js +30 -0
  142. package/dist/strategies/create-only.js.map +1 -0
  143. package/dist/strategies/index.d.ts +31 -0
  144. package/dist/strategies/index.d.ts.map +1 -0
  145. package/dist/strategies/index.js +52 -0
  146. package/dist/strategies/index.js.map +1 -0
  147. package/dist/strategies/merge.d.ts +13 -0
  148. package/dist/strategies/merge.d.ts.map +1 -0
  149. package/dist/strategies/merge.js +60 -0
  150. package/dist/strategies/merge.js.map +1 -0
  151. package/dist/strategies/strategy.interface.d.ts +31 -0
  152. package/dist/strategies/strategy.interface.d.ts.map +1 -0
  153. package/dist/strategies/strategy.interface.js +2 -0
  154. package/dist/strategies/strategy.interface.js.map +1 -0
  155. package/dist/transaction/backup.d.ts +38 -0
  156. package/dist/transaction/backup.d.ts.map +1 -0
  157. package/dist/transaction/backup.js +97 -0
  158. package/dist/transaction/backup.js.map +1 -0
  159. package/dist/transaction/index.d.ts +4 -0
  160. package/dist/transaction/index.d.ts.map +1 -0
  161. package/dist/transaction/index.js +3 -0
  162. package/dist/transaction/index.js.map +1 -0
  163. package/dist/transaction/transaction.d.ts +34 -0
  164. package/dist/transaction/transaction.d.ts.map +1 -0
  165. package/dist/transaction/transaction.js +68 -0
  166. package/dist/transaction/transaction.js.map +1 -0
  167. package/dist/utils/file-operations.d.ts +29 -0
  168. package/dist/utils/file-operations.d.ts.map +1 -0
  169. package/dist/utils/file-operations.js +84 -0
  170. package/dist/utils/file-operations.js.map +1 -0
  171. package/dist/utils/index.d.ts +4 -0
  172. package/dist/utils/index.d.ts.map +1 -0
  173. package/dist/utils/index.js +4 -0
  174. package/dist/utils/index.js.map +1 -0
  175. package/dist/utils/json-utils.d.ts +22 -0
  176. package/dist/utils/json-utils.d.ts.map +1 -0
  177. package/dist/utils/json-utils.js +57 -0
  178. package/dist/utils/json-utils.js.map +1 -0
  179. package/dist/utils/path-utils.d.ts +21 -0
  180. package/dist/utils/path-utils.d.ts.map +1 -0
  181. package/dist/utils/path-utils.js +35 -0
  182. package/dist/utils/path-utils.js.map +1 -0
  183. package/eslint-plugin-code-organization/README.md +149 -0
  184. package/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +468 -0
  185. package/eslint-plugin-code-organization/index.js +23 -0
  186. package/eslint-plugin-code-organization/package.json +10 -0
  187. package/eslint-plugin-code-organization/rules/enforce-statement-order.js +157 -0
  188. package/expo/copy-overwrite/.claude/skills/apollo-client/SKILL.md +238 -0
  189. package/expo/copy-overwrite/.claude/skills/apollo-client/references/mutation-patterns.md +360 -0
  190. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/SKILL.md +360 -0
  191. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
  192. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
  193. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
  194. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +327 -0
  195. package/expo/copy-overwrite/.claude/skills/container-view-pattern/SKILL.md +299 -0
  196. package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/examples.md +749 -0
  197. package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/patterns.md +318 -0
  198. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/create_component.py +198 -0
  199. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/validate_component.py +207 -0
  200. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/SKILL.md +268 -0
  201. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/common-issues.md +619 -0
  202. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
  203. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/platform-api.md +276 -0
  204. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +414 -0
  205. package/expo/copy-overwrite/.claude/skills/directory-structure/SKILL.md +202 -0
  206. package/expo/copy-overwrite/.claude/skills/directory-structure/scripts/validate_structure.py +443 -0
  207. package/expo/copy-overwrite/.claude/skills/expo-env-config/SKILL.md +309 -0
  208. package/expo/copy-overwrite/.claude/skills/expo-env-config/references/validation-patterns.md +417 -0
  209. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/SKILL.md +431 -0
  210. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/references/official-docs.md +290 -0
  211. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/scripts/generate-route.py +169 -0
  212. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/SKILL.md +411 -0
  213. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/color-tokens.md +343 -0
  214. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/component-mapping.md +307 -0
  215. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
  216. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/scripts/validate_styling.py +354 -0
  217. package/expo/copy-overwrite/.claude/skills/local-state/SKILL.md +362 -0
  218. package/expo/copy-overwrite/.claude/skills/local-state/references/async-storage.md +505 -0
  219. package/expo/copy-overwrite/.claude/skills/local-state/references/persistence-patterns.md +711 -0
  220. package/expo/copy-overwrite/.claude/skills/local-state/references/reactive-variables.md +446 -0
  221. package/expo/copy-overwrite/.claude/skills/playwright-selectors/SKILL.md +223 -0
  222. package/expo/copy-overwrite/.claude/skills/testing-library/SKILL.md +319 -0
  223. package/expo/copy-overwrite/.claude/skills/testing-library/references/async-patterns.md +420 -0
  224. package/expo/copy-overwrite/.claude/skills/testing-library/references/expo-router-testing.md +556 -0
  225. package/expo/copy-overwrite/.claude/skills/testing-library/references/mocking-patterns.md +590 -0
  226. package/expo/copy-overwrite/.claude/skills/testing-library/references/query-priority.md +291 -0
  227. package/expo/copy-overwrite/.easignore.extra +2 -0
  228. package/expo/copy-overwrite/.mcp.json +33 -0
  229. package/expo/copy-overwrite/eslint-plugin-component-structure/README.md +234 -0
  230. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/plugin-index.test.js +84 -0
  231. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js +196 -0
  232. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/single-component-per-file.test.js +289 -0
  233. package/expo/copy-overwrite/eslint-plugin-component-structure/index.js +32 -0
  234. package/expo/copy-overwrite/eslint-plugin-component-structure/package.json +10 -0
  235. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/enforce-component-structure.js +230 -0
  236. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/no-return-in-view.js +91 -0
  237. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/require-memo-in-view.js +178 -0
  238. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/single-component-per-file.js +238 -0
  239. package/expo/copy-overwrite/eslint-plugin-ui-standards/README.md +260 -0
  240. package/expo/copy-overwrite/eslint-plugin-ui-standards/index.js +29 -0
  241. package/expo/copy-overwrite/eslint-plugin-ui-standards/package.json +10 -0
  242. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-classname-outside-ui.js +51 -0
  243. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-direct-rn-imports.js +55 -0
  244. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-inline-styles.js +73 -0
  245. package/expo/copy-overwrite/eslint.config.mjs +560 -0
  246. package/expo/copy-overwrite/lighthouserc.js +194 -0
  247. package/expo/create-only/lighthouserc-config.json +28 -0
  248. package/expo/merge/package.json +132 -0
  249. package/lisa.sh +35 -0
  250. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/SKILL.md +176 -0
  251. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/advanced-features.md +527 -0
  252. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/project-patterns.md +483 -0
  253. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/quick-start.md +257 -0
  254. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
  255. package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/types-scalars.md +513 -0
  256. package/nestjs/copy-overwrite/.claude/skills/nestjs-rules/SKILL.md +536 -0
  257. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/SKILL.md +275 -0
  258. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
  259. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/entity-patterns.md +450 -0
  260. package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/observability-patterns.md +536 -0
  261. package/nestjs/merge/package.json +75 -0
  262. package/package.json +124 -0
  263. package/typescript/copy-contents/.husky/commit-msg +91 -0
  264. package/typescript/copy-contents/.husky/pre-commit +96 -0
  265. package/typescript/copy-contents/.husky/pre-push +211 -0
  266. package/typescript/copy-overwrite/.claude/hooks/format-on-edit.sh +74 -0
  267. package/typescript/copy-overwrite/.claude/hooks/install_pkgs.sh +59 -0
  268. package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +103 -0
  269. package/typescript/copy-overwrite/.claude/skills/jsdoc-best-practices/SKILL.md +388 -0
  270. package/typescript/copy-overwrite/.github/README.md +455 -0
  271. package/typescript/copy-overwrite/.github/dependabot.yml +40 -0
  272. package/typescript/copy-overwrite/.github/k6/BROWSER_TESTING_NOTE.md +129 -0
  273. package/typescript/copy-overwrite/.github/k6/INTEGRATION_GUIDE.md +354 -0
  274. package/typescript/copy-overwrite/.github/k6/README.md +386 -0
  275. package/typescript/copy-overwrite/.github/k6/SCENARIO_SELECTION_GUIDE.md +264 -0
  276. package/typescript/copy-overwrite/.github/k6/examples/customer-deploy-integration.yml +115 -0
  277. package/typescript/copy-overwrite/.github/k6/examples/data-driven-test.js +268 -0
  278. package/typescript/copy-overwrite/.github/k6/scenarios/load.js +142 -0
  279. package/typescript/copy-overwrite/.github/k6/scenarios/load.json +27 -0
  280. package/typescript/copy-overwrite/.github/k6/scenarios/smoke.js +26 -0
  281. package/typescript/copy-overwrite/.github/k6/scenarios/smoke.json +20 -0
  282. package/typescript/copy-overwrite/.github/k6/scenarios/soak.js +244 -0
  283. package/typescript/copy-overwrite/.github/k6/scenarios/soak.json +29 -0
  284. package/typescript/copy-overwrite/.github/k6/scenarios/spike.js +180 -0
  285. package/typescript/copy-overwrite/.github/k6/scenarios/spike.json +32 -0
  286. package/typescript/copy-overwrite/.github/k6/scenarios/stress.js +206 -0
  287. package/typescript/copy-overwrite/.github/k6/scenarios/stress.json +38 -0
  288. package/typescript/copy-overwrite/.github/k6/scripts/api-test.js +452 -0
  289. package/typescript/copy-overwrite/.github/k6/scripts/default-test.js +185 -0
  290. package/typescript/copy-overwrite/.github/k6/thresholds/normal.json +30 -0
  291. package/typescript/copy-overwrite/.github/k6/thresholds/relaxed.json +21 -0
  292. package/typescript/copy-overwrite/.github/k6/thresholds/strict.json +29 -0
  293. package/typescript/copy-overwrite/.github/workflows/build.yml +72 -0
  294. package/typescript/copy-overwrite/.github/workflows/ci.yml +49 -0
  295. package/typescript/copy-overwrite/.github/workflows/claude.yml +51 -0
  296. package/typescript/copy-overwrite/.github/workflows/create-github-issue-on-failure.yml +113 -0
  297. package/typescript/copy-overwrite/.github/workflows/create-jira-issue-on-failure.yml +195 -0
  298. package/typescript/copy-overwrite/.github/workflows/create-sentry-issue-on-failure.yml +267 -0
  299. package/typescript/copy-overwrite/.github/workflows/deploy.yml +228 -0
  300. package/typescript/copy-overwrite/.github/workflows/k6-load-test-README.md +230 -0
  301. package/typescript/copy-overwrite/.github/workflows/lighthouse.yml +68 -0
  302. package/typescript/copy-overwrite/.github/workflows/load-test.yml +282 -0
  303. package/typescript/copy-overwrite/.github/workflows/quality.yml +1737 -0
  304. package/typescript/copy-overwrite/.github/workflows/release.yml +1599 -0
  305. package/typescript/copy-overwrite/.gitleaksignore +28 -0
  306. package/typescript/copy-overwrite/.nvmrc +1 -0
  307. package/typescript/copy-overwrite/.prettierignore +23 -0
  308. package/typescript/copy-overwrite/.prettierrc.json +22 -0
  309. package/typescript/copy-overwrite/.versionrc +42 -0
  310. package/typescript/copy-overwrite/.yamllint +20 -0
  311. package/typescript/copy-overwrite/commitlint.config.js +11 -0
  312. package/typescript/copy-overwrite/eslint-plugin-code-organization/README.md +149 -0
  313. package/typescript/copy-overwrite/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +468 -0
  314. package/typescript/copy-overwrite/eslint-plugin-code-organization/index.js +23 -0
  315. package/typescript/copy-overwrite/eslint-plugin-code-organization/package.json +10 -0
  316. package/typescript/copy-overwrite/eslint-plugin-code-organization/rules/enforce-statement-order.js +157 -0
  317. package/typescript/copy-overwrite/eslint.config.mjs +390 -0
  318. package/typescript/copy-overwrite/eslint.ignore.config.json +57 -0
  319. package/typescript/copy-overwrite/eslint.thresholds.config.json +5 -0
  320. package/typescript/github-rulesets/base.json +106 -0
  321. package/typescript/merge/.claude/settings.json +28 -0
  322. package/typescript/merge/package.json +71 -0
@@ -0,0 +1,157 @@
1
+ /**
2
+ * ESLint rule to enforce statement order in all functions
3
+ *
4
+ * Enforces the following order:
5
+ * 1. Definitions: Variable declarations (const/let/var) and function declarations
6
+ * 2. Side effects: Expression statements that are function calls
7
+ * 3. Return statement
8
+ *
9
+ * Applies to all functions: hooks, components, utilities, etc.
10
+ * @type {import('eslint').Rule.RuleModule}
11
+ */
12
+ module.exports = {
13
+ meta: {
14
+ type: "problem",
15
+ docs: {
16
+ description:
17
+ "Enforce statement order: definitions → side effects → return",
18
+ category: "Best Practices",
19
+ recommended: true,
20
+ },
21
+ fixable: null,
22
+ schema: [],
23
+ messages: {
24
+ wrongOrder:
25
+ "{{current}} should come before {{previous}}. Expected order: definitions → side effects → return statement",
26
+ },
27
+ },
28
+
29
+ create(context) {
30
+ const ORDER = {
31
+ DEFINITION: 1, // Variable declarations, function declarations
32
+ SIDE_EFFECT: 2, // Expression statements with function calls
33
+ RETURN: 3, // Return statement
34
+ };
35
+
36
+ const ORDER_NAMES = {
37
+ [ORDER.DEFINITION]: "Definitions",
38
+ [ORDER.SIDE_EFFECT]: "Side effects",
39
+ [ORDER.RETURN]: "Return statement",
40
+ };
41
+
42
+ /**
43
+ * Checks if an expression statement is a function call (side effect)
44
+ * @param {import('eslint').Rule.Node} statement - AST node
45
+ * @returns {boolean} True if this is a function call expression
46
+ */
47
+ function isFunctionCallExpression(statement) {
48
+ if (statement.type !== "ExpressionStatement") {
49
+ return false;
50
+ }
51
+
52
+ const expression = statement.expression;
53
+
54
+ // Direct call: doSomething() or object.method()
55
+ if (expression.type === "CallExpression") {
56
+ return true;
57
+ }
58
+
59
+ return false;
60
+ }
61
+
62
+ /**
63
+ * Determines the order category of a statement
64
+ * Guard clauses (if statements with early returns) are ignored and don't
65
+ * affect order validation - they can appear anywhere in the function.
66
+ * @param {import('eslint').Rule.Node} statement - AST node
67
+ * @returns {number|null} Order category value, or null to skip this statement
68
+ */
69
+ function getStatementOrder(statement) {
70
+ // Bare return statement (not in an if block)
71
+ if (statement.type === "ReturnStatement") {
72
+ return ORDER.RETURN;
73
+ }
74
+
75
+ // If statements are ignored - they may contain guard clauses (early returns)
76
+ // which are valid at any position in the function
77
+ if (statement.type === "IfStatement") {
78
+ return null;
79
+ }
80
+
81
+ // Variable declarations are definitions
82
+ if (statement.type === "VariableDeclaration") {
83
+ return ORDER.DEFINITION;
84
+ }
85
+
86
+ // Function declarations are definitions
87
+ if (statement.type === "FunctionDeclaration") {
88
+ return ORDER.DEFINITION;
89
+ }
90
+
91
+ // Expression statements with function calls are side effects
92
+ if (isFunctionCallExpression(statement)) {
93
+ return ORDER.SIDE_EFFECT;
94
+ }
95
+
96
+ // Default to null for other statements (they don't affect order)
97
+ return null;
98
+ }
99
+
100
+ /**
101
+ * Checks if a function body follows the correct statement order
102
+ * @param {import('eslint').Rule.Node} node - Function node
103
+ */
104
+ function checkBodyOrder(node) {
105
+ if (!node.body || node.body.type !== "BlockStatement") {
106
+ return;
107
+ }
108
+
109
+ const statements = node.body.body;
110
+ // eslint-disable-next-line functional/no-let -- ESLint plugin requires mutable tracking variable for order validation
111
+ let maxOrderSeen = 0;
112
+
113
+ statements.forEach(statement => {
114
+ const currentOrder = getStatementOrder(statement);
115
+
116
+ // Skip statements that don't affect order (e.g., if statements)
117
+ if (currentOrder === null) {
118
+ return;
119
+ }
120
+
121
+ if (currentOrder < maxOrderSeen) {
122
+ context.report({
123
+ node: statement,
124
+ messageId: "wrongOrder",
125
+ data: {
126
+ current: ORDER_NAMES[currentOrder],
127
+ previous: ORDER_NAMES[maxOrderSeen],
128
+ },
129
+ });
130
+ }
131
+
132
+ // Track the highest order we've seen so far
133
+ if (currentOrder > maxOrderSeen) {
134
+ maxOrderSeen = currentOrder;
135
+ }
136
+ });
137
+ }
138
+
139
+ return {
140
+ // Check all function declarations
141
+ FunctionDeclaration(node) {
142
+ checkBodyOrder(node);
143
+ },
144
+
145
+ // Check all arrow functions and function expressions assigned to variables
146
+ VariableDeclarator(node) {
147
+ if (
148
+ node.init &&
149
+ (node.init.type === "ArrowFunctionExpression" ||
150
+ node.init.type === "FunctionExpression")
151
+ ) {
152
+ checkBodyOrder(node.init);
153
+ }
154
+ },
155
+ };
156
+ },
157
+ };
@@ -0,0 +1,238 @@
1
+ ---
2
+ name: apollo-client
3
+ description: This skill should be used when writing or modifying GraphQL operations, hooks, or mutations using Apollo Client 3.10. It enforces best practices for optimistic responses, cache updates, and TypeScript type generation. Use this skill when creating new queries/mutations, reviewing Apollo code, or troubleshooting cache issues.
4
+ ---
5
+
6
+ # Apollo Client 3.10
7
+
8
+ ## Overview
9
+
10
+ This skill provides best practices for Apollo Client 3.10 in this codebase, ensuring consistent patterns for GraphQL operations, optimistic UI updates, cache management, and TypeScript type safety.
11
+
12
+ ## Quick Reference
13
+
14
+ ### Generator Commands
15
+
16
+ After modifying any `operations.graphql` file, run the appropriate generator:
17
+
18
+ ```bash
19
+ bun run generate:types:dev # Development environment
20
+ bun run generate:types:staging # Staging environment
21
+ bun run generate:types:production # Production environment
22
+ ```
23
+
24
+ > **Note:** Replace `bun` with your project's package manager (`npm`, `yarn`, `pnpm`) as needed.
25
+
26
+ ### Import Pattern
27
+
28
+ All GraphQL types, hooks, and documents must come from generated types:
29
+
30
+ ```typescript
31
+ import {
32
+ useGetPlayerQuery,
33
+ useUpdatePlayerMutation,
34
+ GetPlayerQuery,
35
+ PlayerFragment,
36
+ ListPlayersDocument,
37
+ } from "@/generated/graphql";
38
+ ```
39
+
40
+ ## Core Rules
41
+
42
+ ### 1. Only Use Generated Types
43
+
44
+ Import all GraphQL-related types from `@/generated/graphql`. Never define manual TypeScript types for GraphQL entities.
45
+
46
+ ```typescript
47
+ // CORRECT
48
+ import { PlayerFragment, useUpdatePlayerMutation } from "@/generated/graphql";
49
+
50
+ // INCORRECT - Never do this
51
+ type Player = { id: string; name: string };
52
+ ```
53
+
54
+ ### 2. Never Modify Generated Files
55
+
56
+ The `generated/graphql.ts` file is auto-generated by codegen. To change types:
57
+
58
+ 1. Edit the appropriate `operations.graphql` file in the feature directory
59
+ 2. Run `bun run generate:types:dev`
60
+ 3. Import the newly generated types
61
+
62
+ ### 3. Always Run Generator After Schema Changes
63
+
64
+ After modifying any `operations.graphql` file, immediately run the generator before committing. Verify changes compile with `bun run typecheck`.
65
+
66
+ ### 4. Always Include Optimistic Response
67
+
68
+ Every mutation must include an `optimisticResponse` for instant UI feedback:
69
+
70
+ ```typescript
71
+ const [updatePlayer] = useUpdatePlayerMutation({
72
+ optimisticResponse: variables => ({
73
+ __typename: "Mutation",
74
+ updatePlayer: {
75
+ __typename: "Player",
76
+ id: variables.id,
77
+ name: variables.input.name,
78
+ updatedAt: new Date().toISOString(),
79
+ },
80
+ }),
81
+ });
82
+ ```
83
+
84
+ Key requirements:
85
+
86
+ - Always include `__typename` for every object in the response
87
+ - Always include `id` for cache normalization
88
+ - Use temporary IDs for new objects (e.g., `crypto.randomUUID()`)
89
+ - Include all fields that the mutation returns
90
+
91
+ ### 5. Always Update Cache
92
+
93
+ Every mutation must handle cache updates using one of these strategies:
94
+
95
+ **Automatic Updates** - When mutation returns the full entity with `id` and `__typename`, Apollo updates automatically. No extra code needed.
96
+
97
+ **cache.modify** - For adding/removing items from lists:
98
+
99
+ ```typescript
100
+ const [addPlayer] = useAddPlayerMutation({
101
+ optimisticResponse: {
102
+ /* ... */
103
+ },
104
+ update(cache, { data }) {
105
+ cache.modify({
106
+ fields: {
107
+ players(existingPlayers = [], { readField }) {
108
+ const newRef = cache.writeFragment({
109
+ data: data.addPlayer,
110
+ fragment: PlayerFragmentDoc,
111
+ });
112
+ return [...existingPlayers, newRef];
113
+ },
114
+ },
115
+ });
116
+ },
117
+ });
118
+ ```
119
+
120
+ **refetchQueries** - Fallback for complex scenarios:
121
+
122
+ ```typescript
123
+ const [complexMutation] = useComplexMutation({
124
+ refetchQueries: ["ListPlayers"],
125
+ awaitRefetchQueries: true,
126
+ });
127
+ ```
128
+
129
+ ## Operations.graphql Structure
130
+
131
+ ### Fragment-First Pattern
132
+
133
+ Define fragments before queries/mutations that use them:
134
+
135
+ ```graphql
136
+ # 1. Fragments first
137
+ fragment PlayerFragment on Player {
138
+ id
139
+ knownName
140
+ firstName
141
+ lastName
142
+ team {
143
+ id
144
+ name
145
+ }
146
+ }
147
+
148
+ # 2. Queries second
149
+ query GetPlayer($id: ID!) {
150
+ player(id: $id) {
151
+ ...PlayerFragment
152
+ }
153
+ }
154
+
155
+ # 3. Mutations last
156
+ mutation UpdatePlayer($id: ID!, $input: UpdatePlayerInput!) {
157
+ updatePlayer(id: $id, input: $input) {
158
+ ...PlayerFragment
159
+ }
160
+ }
161
+ ```
162
+
163
+ ### Include Required Fields
164
+
165
+ Mutations must return all fields needed for cache updates:
166
+
167
+ ```graphql
168
+ mutation AddPlayerToKanban($input: AddPlayerToKanbanInput!) {
169
+ addPlayerToKanban(input: $input) {
170
+ id # Required for cache normalization
171
+ position
172
+ notes
173
+ kanbanPhaseId
174
+ kanbanPhase {
175
+ # Include related objects
176
+ id
177
+ name
178
+ }
179
+ createdAt
180
+ updatedAt
181
+ }
182
+ }
183
+ ```
184
+
185
+ ## Query Best Practices
186
+
187
+ ### Fetch Policies
188
+
189
+ ```typescript
190
+ // Frequently changing data - balance speed and freshness
191
+ fetchPolicy: "cache-and-network";
192
+
193
+ // Stable reference data - prioritize cache
194
+ fetchPolicy: "cache-first";
195
+
196
+ // Always-fresh data - skip cache
197
+ fetchPolicy: "network-only";
198
+ ```
199
+
200
+ ### Skip When Variables Undefined
201
+
202
+ ```typescript
203
+ const { data } = useGetPlayerQuery({
204
+ variables: { id: playerId! },
205
+ skip: !playerId,
206
+ });
207
+ ```
208
+
209
+ ### Error Handling
210
+
211
+ Use `onError` callback instead of try/catch with console.log:
212
+
213
+ ```typescript
214
+ const [mutation] = useMutation(MUTATION, {
215
+ onError: error => {
216
+ setErrorState("Failed to update. Please try again.");
217
+ },
218
+ });
219
+ ```
220
+
221
+ ## Complete Mutation Pattern
222
+
223
+ Reference `references/mutation-patterns.md` for comprehensive examples of the complete mutation pattern including optimistic responses, cache updates, and error handling.
224
+
225
+ ## Validation Checklist
226
+
227
+ When writing or reviewing Apollo code, verify:
228
+
229
+ - [ ] All types imported from `@/generated/graphql`
230
+ - [ ] No manual type definitions for GraphQL entities
231
+ - [ ] Every mutation has `optimisticResponse`
232
+ - [ ] Every mutation has cache update strategy
233
+ - [ ] `__typename` included in all optimistic response objects
234
+ - [ ] `id` included in all optimistic response objects
235
+ - [ ] Queries use appropriate `fetchPolicy`
236
+ - [ ] Queries use `skip` when variables may be undefined
237
+ - [ ] Error handling via `onError` callback
238
+ - [ ] Generator was run after operations.graphql changes