@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,513 @@
1
+ # Types and Scalars
2
+
3
+ Guide to defining GraphQL types, scalars, enums, interfaces, and unions in NestJS.
4
+
5
+ ## Object Types
6
+
7
+ ### Basic Object Type
8
+
9
+ ```typescript
10
+ import { Field, ID, ObjectType } from "@nestjs/graphql";
11
+
12
+ @ObjectType({ description: "A user account in the system" })
13
+ export class User {
14
+ @Field(() => ID, { description: "Unique identifier" })
15
+ id: string;
16
+
17
+ @Field(() => String, { description: "Email address" })
18
+ email: string;
19
+
20
+ @Field(() => String, { nullable: true, description: "Display name" })
21
+ displayName?: string;
22
+
23
+ @Field(() => Boolean, { description: "Whether email is verified" })
24
+ isVerified: boolean;
25
+
26
+ @Field(() => Date, { description: "Account creation date" })
27
+ createdAt: Date;
28
+ }
29
+ ```
30
+
31
+ ### Object Type with Relations
32
+
33
+ ```typescript
34
+ @ObjectType({ description: "A blog post" })
35
+ export class Post {
36
+ @Field(() => ID)
37
+ id: string;
38
+
39
+ @Field(() => String)
40
+ title: string;
41
+
42
+ @Field(() => User, { description: "Post author" })
43
+ author: User;
44
+
45
+ @Field(() => [Comment], { description: "Post comments" })
46
+ comments: Comment[];
47
+ }
48
+ ```
49
+
50
+ ## Input Types
51
+
52
+ ### Basic Input Type
53
+
54
+ ```typescript
55
+ import { Field, InputType } from "@nestjs/graphql";
56
+
57
+ @InputType({ description: "Input for creating a user" })
58
+ export class CreateUserInput {
59
+ @Field(() => String, { description: "User's email" })
60
+ email: string;
61
+
62
+ @Field(() => String, { description: "User's password" })
63
+ password: string;
64
+
65
+ @Field(() => String, { nullable: true, description: "Optional display name" })
66
+ displayName?: string;
67
+ }
68
+ ```
69
+
70
+ ### Update Input Type
71
+
72
+ ```typescript
73
+ @InputType({ description: "Input for updating a user" })
74
+ export class UpdateUserInput {
75
+ @Field(() => String, { nullable: true })
76
+ displayName?: string;
77
+
78
+ @Field(() => String, { nullable: true })
79
+ avatarUrl?: string;
80
+ }
81
+ ```
82
+
83
+ ## Mapped Types
84
+
85
+ NestJS provides utility functions to create derived types from existing ones.
86
+
87
+ ### PartialType
88
+
89
+ Makes all fields optional:
90
+
91
+ ```typescript
92
+ import { PartialType } from "@nestjs/graphql";
93
+
94
+ @InputType()
95
+ export class UpdateUserInput extends PartialType(CreateUserInput) {}
96
+ ```
97
+
98
+ ### PickType
99
+
100
+ Select specific fields:
101
+
102
+ ```typescript
103
+ import { PickType } from "@nestjs/graphql";
104
+
105
+ @InputType()
106
+ export class UpdateEmailInput extends PickType(CreateUserInput, ["email"] as const) {}
107
+ ```
108
+
109
+ ### OmitType
110
+
111
+ Exclude specific fields:
112
+
113
+ ```typescript
114
+ import { OmitType } from "@nestjs/graphql";
115
+
116
+ @InputType()
117
+ export class UpdateUserInput extends OmitType(CreateUserInput, ["password"] as const) {}
118
+ ```
119
+
120
+ ### IntersectionType
121
+
122
+ Combine multiple types:
123
+
124
+ ```typescript
125
+ import { IntersectionType } from "@nestjs/graphql";
126
+
127
+ @InputType()
128
+ export class CreateUserWithPrefsInput extends IntersectionType(
129
+ CreateUserInput,
130
+ UserPreferencesInput
131
+ ) {}
132
+ ```
133
+
134
+ ### Composition
135
+
136
+ Combine multiple utilities:
137
+
138
+ ```typescript
139
+ @InputType()
140
+ export class UpdateUserInput extends PartialType(
141
+ OmitType(CreateUserInput, ["password"] as const)
142
+ ) {}
143
+ ```
144
+
145
+ ## Enums
146
+
147
+ ### Defining Enums
148
+
149
+ ```typescript
150
+ import { registerEnumType } from "@nestjs/graphql";
151
+
152
+ export enum UserRole {
153
+ ADMIN = "ADMIN",
154
+ MODERATOR = "MODERATOR",
155
+ USER = "USER",
156
+ }
157
+
158
+ registerEnumType(UserRole, {
159
+ name: "UserRole",
160
+ description: "Available user roles in the system",
161
+ valuesMap: {
162
+ ADMIN: { description: "Full system access" },
163
+ MODERATOR: { description: "Content moderation access" },
164
+ USER: { description: "Standard user access" },
165
+ },
166
+ });
167
+ ```
168
+
169
+ ### Using Enums in Types
170
+
171
+ ```typescript
172
+ @ObjectType()
173
+ export class User {
174
+ @Field(() => UserRole, { description: "User's role" })
175
+ role: UserRole;
176
+ }
177
+
178
+ @InputType()
179
+ export class CreateUserInput {
180
+ @Field(() => UserRole, { defaultValue: UserRole.USER })
181
+ role: UserRole;
182
+ }
183
+ ```
184
+
185
+ ## Interfaces
186
+
187
+ ### Defining Interfaces
188
+
189
+ ```typescript
190
+ import { Field, ID, InterfaceType } from "@nestjs/graphql";
191
+
192
+ @InterfaceType({ description: "Base interface for all nodes" })
193
+ export abstract class Node {
194
+ @Field(() => ID)
195
+ id: string;
196
+ }
197
+ ```
198
+
199
+ ### Implementing Interfaces
200
+
201
+ ```typescript
202
+ @ObjectType({ implements: () => [Node] })
203
+ export class User extends Node {
204
+ @Field(() => String)
205
+ email: string;
206
+ }
207
+
208
+ @ObjectType({ implements: () => [Node] })
209
+ export class Post extends Node {
210
+ @Field(() => String)
211
+ title: string;
212
+ }
213
+ ```
214
+
215
+ ### Resolving Interface Types
216
+
217
+ ```typescript
218
+ @InterfaceType({
219
+ resolveType: (value) => {
220
+ if ("email" in value) return User;
221
+ if ("title" in value) return Post;
222
+ return null;
223
+ },
224
+ })
225
+ export abstract class Node {
226
+ @Field(() => ID)
227
+ id: string;
228
+ }
229
+ ```
230
+
231
+ ## Unions
232
+
233
+ ### Defining Unions
234
+
235
+ ```typescript
236
+ import { createUnionType } from "@nestjs/graphql";
237
+
238
+ export const SearchResult = createUnionType({
239
+ name: "SearchResult",
240
+ description: "Possible search result types",
241
+ types: () => [User, Post, Comment] as const,
242
+ resolveType: (value) => {
243
+ if ("email" in value) return User;
244
+ if ("title" in value) return Post;
245
+ if ("body" in value) return Comment;
246
+ return null;
247
+ },
248
+ });
249
+ ```
250
+
251
+ ### Using Unions
252
+
253
+ ```typescript
254
+ @Query(() => [SearchResult], { description: "Search across all content" })
255
+ async search(@Args("query") query: string): Promise<typeof SearchResult[]> {
256
+ const users = await this.userService.search(query);
257
+ const posts = await this.postService.search(query);
258
+ return [...users, ...posts];
259
+ }
260
+ ```
261
+
262
+ ## Custom Scalars
263
+
264
+ ### Built-in Scalars
265
+
266
+ NestJS/GraphQL includes these scalars by default:
267
+ - `ID` - Unique identifier
268
+ - `String` - UTF-8 string
269
+ - `Boolean` - true/false
270
+ - `Int` - 32-bit integer
271
+ - `Float` - Double-precision float
272
+
273
+ ### Date Scalar
274
+
275
+ ```typescript
276
+ import { Scalar, CustomScalar } from "@nestjs/graphql";
277
+ import { Kind, ValueNode } from "graphql";
278
+
279
+ @Scalar("Date", () => Date)
280
+ export class DateScalar implements CustomScalar<number, Date> {
281
+ description = "Date custom scalar type";
282
+
283
+ parseValue(value: number): Date {
284
+ return new Date(value);
285
+ }
286
+
287
+ serialize(value: Date): number {
288
+ return value.getTime();
289
+ }
290
+
291
+ parseLiteral(ast: ValueNode): Date {
292
+ if (ast.kind === Kind.INT) {
293
+ return new Date(parseInt(ast.value, 10));
294
+ }
295
+ return null;
296
+ }
297
+ }
298
+ ```
299
+
300
+ ### JSON Scalar
301
+
302
+ ```typescript
303
+ import { Scalar, CustomScalar } from "@nestjs/graphql";
304
+ import { Kind, ValueNode } from "graphql";
305
+
306
+ @Scalar("JSON")
307
+ export class JSONScalar implements CustomScalar<string, object> {
308
+ description = "JSON custom scalar type";
309
+
310
+ parseValue(value: string): object {
311
+ return JSON.parse(value);
312
+ }
313
+
314
+ serialize(value: object): string {
315
+ return JSON.stringify(value);
316
+ }
317
+
318
+ parseLiteral(ast: ValueNode): object {
319
+ if (ast.kind === Kind.STRING) {
320
+ return JSON.parse(ast.value);
321
+ }
322
+ return null;
323
+ }
324
+ }
325
+ ```
326
+
327
+ ### Registering Scalars
328
+
329
+ ```typescript
330
+ @Module({
331
+ providers: [DateScalar, JSONScalar],
332
+ })
333
+ export class CommonModule {}
334
+ ```
335
+
336
+ ### Using graphql-scalars Library
337
+
338
+ ```typescript
339
+ import { GraphQLDateTime, GraphQLJSON } from "graphql-scalars";
340
+
341
+ GraphQLModule.forRoot<ApolloDriverConfig>({
342
+ resolvers: {
343
+ DateTime: GraphQLDateTime,
344
+ JSON: GraphQLJSON,
345
+ },
346
+ })
347
+ ```
348
+
349
+ ## Field Options
350
+
351
+ ### Common Field Options
352
+
353
+ ```typescript
354
+ @Field(() => String, {
355
+ // Description shown in schema
356
+ description: "User's email address",
357
+
358
+ // Allow null values
359
+ nullable: true,
360
+
361
+ // Deprecation notice
362
+ deprecationReason: "Use `primaryEmail` instead",
363
+
364
+ // Query complexity cost
365
+ complexity: 1,
366
+
367
+ // Default value for input fields
368
+ defaultValue: "default",
369
+
370
+ // Custom name in schema
371
+ name: "emailAddress",
372
+ })
373
+ email: string;
374
+ ```
375
+
376
+ ### Array Fields
377
+
378
+ ```typescript
379
+ // Non-nullable array with non-nullable items: [String!]!
380
+ @Field(() => [String])
381
+ tags: string[];
382
+
383
+ // Nullable array items: [String]!
384
+ @Field(() => [String], { nullable: "items" })
385
+ tags: (string | null)[];
386
+
387
+ // Nullable array: [String!]
388
+ @Field(() => [String], { nullable: true })
389
+ tags?: string[];
390
+
391
+ // Both nullable: [String]
392
+ @Field(() => [String], { nullable: "itemsAndList" })
393
+ tags?: (string | null)[] | null;
394
+ ```
395
+
396
+ ## Type Composition Patterns
397
+
398
+ ### Base Entity Type
399
+
400
+ ```typescript
401
+ @ObjectType({ isAbstract: true })
402
+ export abstract class BaseEntity {
403
+ @Field(() => ID)
404
+ id: string;
405
+
406
+ @Field(() => Date)
407
+ createdAt: Date;
408
+
409
+ @Field(() => Date)
410
+ updatedAt: Date;
411
+ }
412
+
413
+ @ObjectType()
414
+ export class User extends BaseEntity {
415
+ @Field()
416
+ email: string;
417
+ }
418
+ ```
419
+
420
+ ### Pagination Types
421
+
422
+ ```typescript
423
+ @ObjectType()
424
+ export class PageInfo {
425
+ @Field(() => Boolean)
426
+ hasNextPage: boolean;
427
+
428
+ @Field(() => Boolean)
429
+ hasPreviousPage: boolean;
430
+
431
+ @Field(() => String, { nullable: true })
432
+ startCursor?: string;
433
+
434
+ @Field(() => String, { nullable: true })
435
+ endCursor?: string;
436
+ }
437
+
438
+ @ObjectType()
439
+ export class UserEdge {
440
+ @Field(() => User)
441
+ node: User;
442
+
443
+ @Field(() => String)
444
+ cursor: string;
445
+ }
446
+
447
+ @ObjectType()
448
+ export class UserConnection {
449
+ @Field(() => [UserEdge])
450
+ edges: UserEdge[];
451
+
452
+ @Field(() => PageInfo)
453
+ pageInfo: PageInfo;
454
+
455
+ @Field(() => Int)
456
+ totalCount: number;
457
+ }
458
+ ```
459
+
460
+ ## Best Practices
461
+
462
+ ### 1. Always Add Descriptions
463
+
464
+ Every type, field, and enum value should have a description:
465
+
466
+ ```typescript
467
+ @ObjectType({ description: "A user account in the system" })
468
+ export class User {
469
+ @Field(() => ID, { description: "Unique identifier (UUID v4)" })
470
+ id: string;
471
+ }
472
+ ```
473
+
474
+ ### 2. Use Explicit Types
475
+
476
+ Always specify the GraphQL type explicitly:
477
+
478
+ ```typescript
479
+ // Good
480
+ @Field(() => Int)
481
+ age: number;
482
+
483
+ // Bad - GraphQL can't infer Int vs Float
484
+ @Field()
485
+ age: number;
486
+ ```
487
+
488
+ ### 3. Separate Input and Output Types
489
+
490
+ Don't reuse ObjectTypes as InputTypes:
491
+
492
+ ```typescript
493
+ // Good
494
+ @ObjectType()
495
+ export class User { }
496
+
497
+ @InputType()
498
+ export class CreateUserInput { }
499
+
500
+ // Bad
501
+ @ObjectType()
502
+ @InputType("UserInput")
503
+ export class User { }
504
+ ```
505
+
506
+ ### 4. Use Mapped Types for Updates
507
+
508
+ ```typescript
509
+ @InputType()
510
+ export class UpdateUserInput extends PartialType(
511
+ OmitType(CreateUserInput, ["password"])
512
+ ) {}
513
+ ```