@xonovex/skills 0.1.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 (341) hide show
  1. package/.claude-plugin/plugin.json +21 -0
  2. package/commands/code-align.md +108 -0
  3. package/commands/code-harden.md +74 -0
  4. package/commands/code-simplify.md +145 -0
  5. package/commands/git-commit.md +146 -0
  6. package/commands/insights-extract.md +109 -0
  7. package/commands/insights-integrate.md +100 -0
  8. package/commands/plan-continue.md +167 -0
  9. package/commands/plan-create.md +107 -0
  10. package/commands/plan-research.md +113 -0
  11. package/commands/plan-subplans-create.md +111 -0
  12. package/commands/plan-tdd-create.md +128 -0
  13. package/commands/plan-update.md +99 -0
  14. package/commands/plan-validate.md +100 -0
  15. package/commands/plan-worktree-abandon.md +104 -0
  16. package/commands/plan-worktree-create.md +92 -0
  17. package/commands/plan-worktree-merge.md +132 -0
  18. package/package.json +44 -0
  19. package/skills/astro-guidelines/SKILL.md +23 -0
  20. package/skills/astro-guidelines/reference/accessibility.md +31 -0
  21. package/skills/astro-guidelines/reference/components.md +42 -0
  22. package/skills/astro-guidelines/reference/content-collections.md +32 -0
  23. package/skills/astro-guidelines/reference/islands-architecture.md +26 -0
  24. package/skills/astro-guidelines/reference/project-structure.md +32 -0
  25. package/skills/c99-game-opinionated-guidelines/SKILL.md +43 -0
  26. package/skills/c99-game-opinionated-guidelines/reference/builder-pattern.md +29 -0
  27. package/skills/c99-game-opinionated-guidelines/reference/coordinate-system.md +27 -0
  28. package/skills/c99-game-opinionated-guidelines/reference/geometry-pipeline.md +29 -0
  29. package/skills/c99-game-opinionated-guidelines/reference/math-types.md +31 -0
  30. package/skills/c99-game-opinionated-guidelines/reference/mesh-types.md +32 -0
  31. package/skills/c99-game-opinionated-guidelines/reference/physics-patterns.md +28 -0
  32. package/skills/c99-game-opinionated-guidelines/reference/spatial-structures.md +26 -0
  33. package/skills/c99-game-opinionated-guidelines/reference/tagged-unions.md +40 -0
  34. package/skills/c99-game-opinionated-guidelines/reference/vertex-packing.md +38 -0
  35. package/skills/c99-guidelines/SKILL.md +29 -0
  36. package/skills/c99-guidelines/reference/compound-literals.md +33 -0
  37. package/skills/c99-guidelines/reference/const-correctness.md +32 -0
  38. package/skills/c99-guidelines/reference/designated-initializers.md +32 -0
  39. package/skills/c99-guidelines/reference/error-handling.md +49 -0
  40. package/skills/c99-guidelines/reference/inline-functions.md +37 -0
  41. package/skills/c99-guidelines/reference/memory-management.md +35 -0
  42. package/skills/c99-opinionated-guidelines/SKILL.md +44 -0
  43. package/skills/c99-opinionated-guidelines/reference/alignment.md +50 -0
  44. package/skills/c99-opinionated-guidelines/reference/caller-owns-memory.md +38 -0
  45. package/skills/c99-opinionated-guidelines/reference/compound-literals.md +33 -0
  46. package/skills/c99-opinionated-guidelines/reference/const-correctness.md +32 -0
  47. package/skills/c99-opinionated-guidelines/reference/data-oriented-design.md +42 -0
  48. package/skills/c99-opinionated-guidelines/reference/designated-initializers.md +32 -0
  49. package/skills/c99-opinionated-guidelines/reference/error-handling.md +49 -0
  50. package/skills/c99-opinionated-guidelines/reference/file-naming.md +33 -0
  51. package/skills/c99-opinionated-guidelines/reference/implementation-variants.md +35 -0
  52. package/skills/c99-opinionated-guidelines/reference/inline-functions.md +37 -0
  53. package/skills/c99-opinionated-guidelines/reference/memory-management.md +35 -0
  54. package/skills/c99-opinionated-guidelines/reference/safety-validations.md +32 -0
  55. package/skills/c99-opinionated-guidelines/reference/testing-patterns.md +39 -0
  56. package/skills/cmake-guidelines/SKILL.md +31 -0
  57. package/skills/cmake-guidelines/reference/compile-options.md +34 -0
  58. package/skills/cmake-guidelines/reference/fetchcontent.md +32 -0
  59. package/skills/cmake-guidelines/reference/find-package.md +29 -0
  60. package/skills/cmake-guidelines/reference/generator-expressions.md +34 -0
  61. package/skills/cmake-guidelines/reference/installation.md +38 -0
  62. package/skills/cmake-guidelines/reference/project-structure.md +40 -0
  63. package/skills/cmake-guidelines/reference/target-types.md +37 -0
  64. package/skills/cmake-guidelines/reference/testing.md +30 -0
  65. package/skills/cmake-guidelines/reference/visibility-specifiers.md +32 -0
  66. package/skills/content-guidelines/SKILL.md +36 -0
  67. package/skills/content-guidelines/reference/humanize.md +30 -0
  68. package/skills/content-guidelines/reference/news.md +28 -0
  69. package/skills/content-guidelines/reference/travelguide.md +31 -0
  70. package/skills/docker-guidelines/SKILL.md +23 -0
  71. package/skills/docker-guidelines/reference/docker-compose.md +40 -0
  72. package/skills/docker-guidelines/reference/layer-caching.md +25 -0
  73. package/skills/docker-guidelines/reference/multi-stage-builds.md +37 -0
  74. package/skills/docker-guidelines/reference/production-config.md +32 -0
  75. package/skills/docker-guidelines/reference/security.md +27 -0
  76. package/skills/express.js-guidelines/SKILL.md +32 -0
  77. package/skills/express.js-guidelines/reference/app-setup.md +39 -0
  78. package/skills/express.js-guidelines/reference/authentication.md +39 -0
  79. package/skills/express.js-guidelines/reference/controllers.md +49 -0
  80. package/skills/express.js-guidelines/reference/error-handling.md +54 -0
  81. package/skills/express.js-guidelines/reference/project-structure.md +29 -0
  82. package/skills/express.js-guidelines/reference/responses.md +30 -0
  83. package/skills/express.js-guidelines/reference/routes.md +29 -0
  84. package/skills/express.js-guidelines/reference/testing.md +39 -0
  85. package/skills/express.js-guidelines/reference/validation.md +41 -0
  86. package/skills/general-fp-guidelines/SKILL.md +28 -0
  87. package/skills/general-oop-guidelines/SKILL.md +28 -0
  88. package/skills/git-guidelines/SKILL.md +46 -0
  89. package/skills/git-guidelines/reference/commit.md +32 -0
  90. package/skills/git-guidelines/reference/merge-resolve.md +38 -0
  91. package/skills/git-guidelines/reference/worktree-abandon.md +48 -0
  92. package/skills/git-guidelines/reference/worktree-cleanup.md +40 -0
  93. package/skills/git-guidelines/reference/worktree-commit.md +46 -0
  94. package/skills/git-guidelines/reference/worktree-create.md +42 -0
  95. package/skills/git-guidelines/reference/worktree-merge.md +45 -0
  96. package/skills/git-guidelines/reference/worktree-validate.md +44 -0
  97. package/skills/hono-guidelines/SKILL.md +49 -0
  98. package/skills/hono-guidelines/reference/application-structure.md +53 -0
  99. package/skills/hono-guidelines/reference/context-storage.md +46 -0
  100. package/skills/hono-guidelines/reference/cookie-handling.md +63 -0
  101. package/skills/hono-guidelines/reference/error-handling.md +69 -0
  102. package/skills/hono-guidelines/reference/middleware-combine.md +47 -0
  103. package/skills/hono-guidelines/reference/middleware-patterns.md +58 -0
  104. package/skills/hono-guidelines/reference/platform-runtime.md +41 -0
  105. package/skills/hono-guidelines/reference/security-middleware.md +60 -0
  106. package/skills/hono-guidelines/reference/validation-type-safety.md +43 -0
  107. package/skills/hono-guidelines/reference/websocket-support.md +59 -0
  108. package/skills/hono-opinionated-guidelines/SKILL.md +49 -0
  109. package/skills/hono-opinionated-guidelines/reference/application-structure.md +53 -0
  110. package/skills/hono-opinionated-guidelines/reference/body-limit.md +57 -0
  111. package/skills/hono-opinionated-guidelines/reference/context-storage.md +46 -0
  112. package/skills/hono-opinionated-guidelines/reference/controllers.md +38 -0
  113. package/skills/hono-opinionated-guidelines/reference/cookie-handling.md +63 -0
  114. package/skills/hono-opinionated-guidelines/reference/error-handling.md +69 -0
  115. package/skills/hono-opinionated-guidelines/reference/middleware-combine.md +47 -0
  116. package/skills/hono-opinionated-guidelines/reference/middleware-patterns.md +58 -0
  117. package/skills/hono-opinionated-guidelines/reference/openapi-explicit-status-codes.md +61 -0
  118. package/skills/hono-opinionated-guidelines/reference/openapi-inline-handlers.md +56 -0
  119. package/skills/hono-opinionated-guidelines/reference/openapi-router-hierarchy.md +64 -0
  120. package/skills/hono-opinionated-guidelines/reference/openapi-spec-generation.md +57 -0
  121. package/skills/hono-opinionated-guidelines/reference/platform-runtime.md +41 -0
  122. package/skills/hono-opinionated-guidelines/reference/router-selection.md +34 -0
  123. package/skills/hono-opinionated-guidelines/reference/security-middleware.md +60 -0
  124. package/skills/hono-opinionated-guidelines/reference/validation-type-safety.md +43 -0
  125. package/skills/hono-opinionated-guidelines/reference/websocket-support.md +59 -0
  126. package/skills/insights-guidelines/SKILL.md +28 -0
  127. package/skills/insights-guidelines/reference/insights-extract.md +31 -0
  128. package/skills/insights-guidelines/reference/insights-integrate.md +35 -0
  129. package/skills/instruction-guidelines/SKILL.md +26 -0
  130. package/skills/instruction-guidelines/reference/assimilate.md +38 -0
  131. package/skills/instruction-guidelines/reference/simplify.md +46 -0
  132. package/skills/instruction-guidelines/reference/sync.md +41 -0
  133. package/skills/kubernetes-guidelines/SKILL.md +28 -0
  134. package/skills/kubernetes-guidelines/reference/configmaps-secrets.md +34 -0
  135. package/skills/kubernetes-guidelines/reference/deployments.md +55 -0
  136. package/skills/kubernetes-guidelines/reference/kustomize.md +41 -0
  137. package/skills/kubernetes-guidelines/reference/network-policies.md +53 -0
  138. package/skills/kubernetes-guidelines/reference/services.md +36 -0
  139. package/skills/kubernetes-guidelines/reference/validation.md +32 -0
  140. package/skills/lua-guidelines/SKILL.md +29 -0
  141. package/skills/lua-guidelines/reference/coroutines.md +66 -0
  142. package/skills/lua-guidelines/reference/error-handling.md +41 -0
  143. package/skills/lua-guidelines/reference/idiomatic-patterns.md +40 -0
  144. package/skills/lua-guidelines/reference/input-validation.md +42 -0
  145. package/skills/lua-guidelines/reference/local-variables.md +33 -0
  146. package/skills/lua-guidelines/reference/metatables.md +52 -0
  147. package/skills/lua-guidelines/reference/module-pattern.md +37 -0
  148. package/skills/lua-guidelines/reference/string-concatenation.md +31 -0
  149. package/skills/lua-opinionated-guidelines/SKILL.md +32 -0
  150. package/skills/lua-opinionated-guidelines/reference/cache-lookups.md +43 -0
  151. package/skills/lua-opinionated-guidelines/reference/coroutines.md +66 -0
  152. package/skills/lua-opinionated-guidelines/reference/error-handling.md +41 -0
  153. package/skills/lua-opinionated-guidelines/reference/idiomatic-patterns.md +40 -0
  154. package/skills/lua-opinionated-guidelines/reference/input-validation.md +42 -0
  155. package/skills/lua-opinionated-guidelines/reference/jit-friendly-tables.md +57 -0
  156. package/skills/lua-opinionated-guidelines/reference/local-variables.md +33 -0
  157. package/skills/lua-opinionated-guidelines/reference/metatables.md +52 -0
  158. package/skills/lua-opinionated-guidelines/reference/module-pattern.md +37 -0
  159. package/skills/lua-opinionated-guidelines/reference/string-concatenation.md +31 -0
  160. package/skills/moon-guidelines/SKILL.md +30 -0
  161. package/skills/moon-guidelines/reference/docker-multistage.md +42 -0
  162. package/skills/moon-guidelines/reference/project-constraints.md +25 -0
  163. package/skills/moon-guidelines/reference/query-language.md +27 -0
  164. package/skills/moon-guidelines/reference/tag-based-filtering.md +28 -0
  165. package/skills/moon-guidelines/reference/task-configuration.md +38 -0
  166. package/skills/moon-guidelines/reference/task-inheritance.md +30 -0
  167. package/skills/motion-react-guidelines/SKILL.md +66 -0
  168. package/skills/motion-react-guidelines/reference/3d-effects.md +35 -0
  169. package/skills/motion-react-guidelines/reference/entrance.md +36 -0
  170. package/skills/motion-react-guidelines/reference/exit.md +35 -0
  171. package/skills/motion-react-guidelines/reference/gestures.md +23 -0
  172. package/skills/motion-react-guidelines/reference/layout.md +39 -0
  173. package/skills/motion-react-guidelines/reference/motion-values.md +33 -0
  174. package/skills/motion-react-guidelines/reference/performance.md +32 -0
  175. package/skills/motion-react-guidelines/reference/scroll.md +38 -0
  176. package/skills/motion-react-guidelines/reference/spring-physics.md +40 -0
  177. package/skills/motion-react-guidelines/reference/stagger.md +34 -0
  178. package/skills/motion-react-guidelines/reference/svg-path.md +33 -0
  179. package/skills/motion-react-guidelines/reference/text-effects.md +39 -0
  180. package/skills/plan-guidelines/SKILL.md +56 -0
  181. package/skills/plan-guidelines/reference/code-align.md +23 -0
  182. package/skills/plan-guidelines/reference/code-barrels-remove.md +24 -0
  183. package/skills/plan-guidelines/reference/code-comments-remove.md +28 -0
  184. package/skills/plan-guidelines/reference/code-harden.md +30 -0
  185. package/skills/plan-guidelines/reference/code-shared-extract.md +25 -0
  186. package/skills/plan-guidelines/reference/code-simplify.md +33 -0
  187. package/skills/plan-guidelines/reference/code-template-extract.md +34 -0
  188. package/skills/plan-guidelines/reference/code-template-scaffold.md +36 -0
  189. package/skills/plan-guidelines/reference/general-research.md +35 -0
  190. package/skills/plan-guidelines/reference/plan-create.md +37 -0
  191. package/skills/plan-guidelines/reference/plan-tdd-create.md +44 -0
  192. package/skills/plan-guidelines/reference/todos.md +39 -0
  193. package/skills/presentation-guidelines/SKILL.md +25 -0
  194. package/skills/presentation-guidelines/reference/presentation-create.md +41 -0
  195. package/skills/presentation-guidelines/reference/presentation-motion-scaffold.md +38 -0
  196. package/skills/python-guidelines/SKILL.md +32 -0
  197. package/skills/python-guidelines/reference/async-await-patterns.md +62 -0
  198. package/skills/python-guidelines/reference/caching-functions.md +47 -0
  199. package/skills/python-guidelines/reference/dataclasses-type-hints.md +63 -0
  200. package/skills/python-guidelines/reference/exception-handling.md +72 -0
  201. package/skills/python-guidelines/reference/generators-comprehensions.md +54 -0
  202. package/skills/python-guidelines/reference/pathlib-file-ops.md +60 -0
  203. package/skills/python-guidelines/reference/resource-management.md +58 -0
  204. package/skills/python-guidelines/reference/string-formatting.md +41 -0
  205. package/skills/python-guidelines/reference/type-checking.md +47 -0
  206. package/skills/react-guidelines/SKILL.md +105 -0
  207. package/skills/react-guidelines/reference/accessibility.md +31 -0
  208. package/skills/react-guidelines/reference/activity-effect-event.md +42 -0
  209. package/skills/react-guidelines/reference/component-design.md +57 -0
  210. package/skills/react-guidelines/reference/hooks.md +39 -0
  211. package/skills/react-guidelines/reference/migration-anti-patterns.md +33 -0
  212. package/skills/react-guidelines/reference/migration-deprecations.md +109 -0
  213. package/skills/react-guidelines/reference/migration-paradigm-shifts.md +33 -0
  214. package/skills/react-guidelines/reference/migration-typescript.md +95 -0
  215. package/skills/react-guidelines/reference/new-hooks.md +94 -0
  216. package/skills/react-guidelines/reference/performance-optimization.md +41 -0
  217. package/skills/react-guidelines/reference/react-compiler.md +34 -0
  218. package/skills/react-guidelines/reference/server-components.md +99 -0
  219. package/skills/react-guidelines/reference/state-management.md +72 -0
  220. package/skills/react-guidelines/reference/suspense-streaming.md +36 -0
  221. package/skills/remotion-guidelines/SKILL.md +67 -0
  222. package/skills/remotion-guidelines/reference/animations.md +121 -0
  223. package/skills/remotion-guidelines/reference/assets.md +21 -0
  224. package/skills/remotion-guidelines/reference/captions.md +33 -0
  225. package/skills/remotion-guidelines/reference/charts.md +35 -0
  226. package/skills/remotion-guidelines/reference/compositions.md +40 -0
  227. package/skills/remotion-guidelines/reference/dom-measurement.md +82 -0
  228. package/skills/remotion-guidelines/reference/gifs.md +33 -0
  229. package/skills/remotion-guidelines/reference/lottie.md +41 -0
  230. package/skills/remotion-guidelines/reference/maps.md +26 -0
  231. package/skills/remotion-guidelines/reference/media.md +39 -0
  232. package/skills/remotion-guidelines/reference/mediabunny.md +28 -0
  233. package/skills/remotion-guidelines/reference/sequencing.md +44 -0
  234. package/skills/remotion-guidelines/reference/text.md +24 -0
  235. package/skills/remotion-guidelines/reference/three-d.md +33 -0
  236. package/skills/remotion-guidelines/reference/timing.md +22 -0
  237. package/skills/remotion-guidelines/reference/transitions.md +52 -0
  238. package/skills/shell-scripting-guidelines/SKILL.md +31 -0
  239. package/skills/shell-scripting-guidelines/reference/argument-parsing.md +67 -0
  240. package/skills/shell-scripting-guidelines/reference/common-patterns.md +46 -0
  241. package/skills/shell-scripting-guidelines/reference/error-handling.md +62 -0
  242. package/skills/shell-scripting-guidelines/reference/functions.md +66 -0
  243. package/skills/shell-scripting-guidelines/reference/idempotency.md +57 -0
  244. package/skills/shell-scripting-guidelines/reference/parameter-expansion.md +38 -0
  245. package/skills/shell-scripting-guidelines/reference/posix-compatibility.md +53 -0
  246. package/skills/shell-scripting-guidelines/reference/quoting.md +42 -0
  247. package/skills/shell-scripting-guidelines/reference/script-template.md +70 -0
  248. package/skills/shell-scripting-guidelines/reference/strict-mode.md +41 -0
  249. package/skills/shell-scripting-guidelines/reference/validation.md +30 -0
  250. package/skills/skill-guidelines/SKILL.md +33 -0
  251. package/skills/skill-guidelines/reference/assimilate.md +51 -0
  252. package/skills/skill-guidelines/reference/create.md +48 -0
  253. package/skills/skill-guidelines/reference/extract.md +48 -0
  254. package/skills/skill-guidelines/reference/simplify.md +56 -0
  255. package/skills/sql-postgresql-guidelines/SKILL.md +31 -0
  256. package/skills/sql-postgresql-guidelines/reference/constraints.md +47 -0
  257. package/skills/sql-postgresql-guidelines/reference/cte-patterns.md +42 -0
  258. package/skills/sql-postgresql-guidelines/reference/data-types.md +46 -0
  259. package/skills/sql-postgresql-guidelines/reference/indexing.md +45 -0
  260. package/skills/sql-postgresql-guidelines/reference/jsonb.md +54 -0
  261. package/skills/sql-postgresql-guidelines/reference/performance.md +46 -0
  262. package/skills/sql-postgresql-guidelines/reference/role-based-access.md +47 -0
  263. package/skills/sql-postgresql-guidelines/reference/row-level-security.md +66 -0
  264. package/skills/strudel-guidelines/SKILL.md +52 -0
  265. package/skills/strudel-guidelines/reference/arrangement.md +24 -0
  266. package/skills/strudel-guidelines/reference/conditionals.md +22 -0
  267. package/skills/strudel-guidelines/reference/effects.md +22 -0
  268. package/skills/strudel-guidelines/reference/genre-ambient.md +26 -0
  269. package/skills/strudel-guidelines/reference/genre-harsh.md +21 -0
  270. package/skills/strudel-guidelines/reference/genre-trance.md +23 -0
  271. package/skills/strudel-guidelines/reference/layering.md +22 -0
  272. package/skills/strudel-guidelines/reference/mini-notation.md +74 -0
  273. package/skills/strudel-guidelines/reference/modulation.md +22 -0
  274. package/skills/strudel-guidelines/reference/scales-harmony.md +20 -0
  275. package/skills/strudel-guidelines/reference/sounds.md +89 -0
  276. package/skills/strudel-guidelines/reference/tempo-timing.md +23 -0
  277. package/skills/terraform-guidelines/SKILL.md +28 -0
  278. package/skills/terraform-guidelines/reference/advanced-patterns.md +88 -0
  279. package/skills/terraform-guidelines/reference/locals.md +53 -0
  280. package/skills/terraform-guidelines/reference/module-definition.md +81 -0
  281. package/skills/terraform-guidelines/reference/module-structure.md +51 -0
  282. package/skills/terraform-guidelines/reference/remote-state.md +38 -0
  283. package/skills/terraform-guidelines/reference/root-module.md +71 -0
  284. package/skills/terraform-guidelines/reference/typed-variables.md +90 -0
  285. package/skills/threejs-guidelines/SKILL.md +38 -0
  286. package/skills/threejs-guidelines/reference/animation.md +26 -0
  287. package/skills/threejs-guidelines/reference/cameras-controls.md +26 -0
  288. package/skills/threejs-guidelines/reference/geometry.md +22 -0
  289. package/skills/threejs-guidelines/reference/interaction.md +25 -0
  290. package/skills/threejs-guidelines/reference/lighting-shadows.md +31 -0
  291. package/skills/threejs-guidelines/reference/loaders.md +29 -0
  292. package/skills/threejs-guidelines/reference/materials.md +25 -0
  293. package/skills/threejs-guidelines/reference/math.md +27 -0
  294. package/skills/threejs-guidelines/reference/node-materials.md +32 -0
  295. package/skills/threejs-guidelines/reference/patterns.md +29 -0
  296. package/skills/threejs-guidelines/reference/performance.md +24 -0
  297. package/skills/threejs-guidelines/reference/physics-vr.md +36 -0
  298. package/skills/threejs-guidelines/reference/postprocessing.md +26 -0
  299. package/skills/threejs-guidelines/reference/scene-fundamentals.md +26 -0
  300. package/skills/threejs-guidelines/reference/shaders.md +28 -0
  301. package/skills/threejs-guidelines/reference/textures.md +21 -0
  302. package/skills/threejs-guidelines/reference/webgpu.md +34 -0
  303. package/skills/typescript-guidelines/SKILL.md +37 -0
  304. package/skills/typescript-guidelines/reference/async-without-await.md +32 -0
  305. package/skills/typescript-guidelines/reference/avoid-barrel-exports.md +25 -0
  306. package/skills/typescript-guidelines/reference/avoid-eslint-disable.md +28 -0
  307. package/skills/typescript-guidelines/reference/avoid-reexports.md +26 -0
  308. package/skills/typescript-guidelines/reference/env-access-bracket-notation.md +29 -0
  309. package/skills/typescript-guidelines/reference/numeric-separator-enforcement.md +30 -0
  310. package/skills/typescript-guidelines/reference/template-literals-require-string-conversion.md +26 -0
  311. package/skills/typescript-guidelines/reference/unbound-method-references.md +32 -0
  312. package/skills/typescript-guidelines/reference/unnecessary-async-keywords.md +37 -0
  313. package/skills/typescript-to-lua-guidelines/SKILL.md +33 -0
  314. package/skills/typescript-to-lua-guidelines/reference/avoiding-heavy-features.md +41 -0
  315. package/skills/typescript-to-lua-guidelines/reference/coroutine-patterns.md +49 -0
  316. package/skills/typescript-to-lua-guidelines/reference/function-patterns.md +59 -0
  317. package/skills/typescript-to-lua-guidelines/reference/lua-interop.md +49 -0
  318. package/skills/typescript-to-lua-guidelines/reference/module-organization.md +42 -0
  319. package/skills/typescript-to-lua-guidelines/reference/multi-return-functions.md +47 -0
  320. package/skills/typescript-to-lua-guidelines/reference/namespaces-vs-classes.md +52 -0
  321. package/skills/typescript-to-lua-guidelines/reference/performance-tips.md +68 -0
  322. package/skills/typescript-to-lua-guidelines/reference/stable-tables.md +60 -0
  323. package/skills/typescript-to-lua-guidelines/reference/tsconfig.md +46 -0
  324. package/skills/typescript-to-lua-guidelines/reference/tstl-decorators.md +61 -0
  325. package/skills/typescript-to-lua-guidelines/reference/type-safety.md +79 -0
  326. package/skills/vitest-guidelines/SKILL.md +32 -0
  327. package/skills/vitest-guidelines/reference/cors-preflight-status-code.md +34 -0
  328. package/skills/vitest-guidelines/reference/http-testing.md +57 -0
  329. package/skills/vitest-guidelines/reference/json-response-type-safety.md +40 -0
  330. package/skills/vitest-guidelines/reference/mock-patterns.md +53 -0
  331. package/skills/vitest-guidelines/reference/project-references-path-resolution.md +36 -0
  332. package/skills/vitest-guidelines/reference/test-organization.md +25 -0
  333. package/skills/vitest-guidelines/reference/timestamp-testing.md +55 -0
  334. package/skills/vitest-guidelines/reference/type-safety.md +55 -0
  335. package/skills/vitest-guidelines/reference/typescript-config.md +43 -0
  336. package/skills/zod-guidelines/SKILL.md +33 -0
  337. package/skills/zod-guidelines/reference/default-values-output-type.md +63 -0
  338. package/skills/zod-guidelines/reference/migration-string-validators.md +38 -0
  339. package/skills/zod-guidelines/reference/migration-v4.md +46 -0
  340. package/skills/zod-guidelines/reference/schema-organization.md +73 -0
  341. package/skills/zod-guidelines/reference/validation-patterns.md +37 -0
@@ -0,0 +1,59 @@
1
+ # function-patterns: Function and Module Patterns
2
+
3
+ **Guideline:** Use pure functions, module-level constants, and type-safe enums for efficient Lua.
4
+
5
+ **Rationale:** Pure functions compile to simple Lua without closures. Constants generate efficient tables. Patterns align with Lua's procedural nature.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // Pure functions in namespace
10
+ namespace Math {
11
+ export function add(a: number, b: number): number { return a + b }
12
+ export function multiply(a: number, b: number): number { return a * b }
13
+ }
14
+
15
+ // Module-level constants
16
+ namespace Colors {
17
+ export const RED = 0xFF0000
18
+ export const GREEN = 0x00FF00
19
+ export const BLUE = 0x0000FF
20
+ }
21
+
22
+ // Numeric enums (efficient)
23
+ enum Direction {
24
+ Up = 0,
25
+ Down = 1,
26
+ Left = 2,
27
+ Right = 3
28
+ }
29
+
30
+ // Enum utilities
31
+ namespace DirectionUtils {
32
+ export function opposite(dir: Direction): Direction {
33
+ if (dir === Direction.Up) return Direction.Down
34
+ if (dir === Direction.Down) return Direction.Up
35
+ if (dir === Direction.Left) return Direction.Right
36
+ return Direction.Left
37
+ }
38
+ }
39
+
40
+ // Generic functions
41
+ namespace Array {
42
+ export function map<T, U>(arr: T[], fn: (t: T) => U): U[] {
43
+ const result: U[] = []
44
+ for (let i = 0; i < arr.length; i++) {
45
+ result[i] = fn(arr[i])
46
+ }
47
+ return result
48
+ }
49
+ }
50
+ ```
51
+
52
+ **Techniques:**
53
+ - Export pure functions in namespaces to organize code without closures
54
+ - Define module-level constants in dedicated namespaces for reusability
55
+ - Use numeric enums for efficient representation that compiles to simple numbers
56
+ - Create utility namespaces with static functions for enum operations
57
+ - Keep functions stateless to enable inline compilation
58
+ - Use type parameters for generic functions to maintain type safety
59
+ - Group related utilities in single namespaces to generate efficient tables
@@ -0,0 +1,49 @@
1
+ # lua-interop: Integration with Lua APIs
2
+
3
+ **Guideline:** Declare Lua globals with TypeScript types for type-safe integration.
4
+
5
+ **Rationale:** Lua environments provide global APIs (LÖVE, Corona, custom engines). TypeScript declarations enable autocomplete, type checking, and full interop.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // LÖVE 2D game engine declarations
10
+ declare const love: {
11
+ graphics: {
12
+ draw: (drawable: Drawable, x: number, y: number) => void
13
+ print: (text: string, x: number, y: number) => void
14
+ setColor: (r: number, g: number, b: number, a?: number) => void
15
+ }
16
+ window: {
17
+ setWidth: (width: number) => void
18
+ setHeight: (height: number) => void
19
+ getWidth: () => number
20
+ getHeight: () => number
21
+ }
22
+ timer: {
23
+ getDelta: () => number
24
+ getTime: () => number
25
+ }
26
+ }
27
+
28
+ // Custom engine example
29
+ declare const engine: {
30
+ render: (meshId: number, transform: Matrix4) => void
31
+ physics: {
32
+ raycast: (origin: Vector3, direction: Vector3) => HitResult | null
33
+ }
34
+ }
35
+
36
+ // Type-safe usage
37
+ love.graphics.setColor(1, 0, 0) // Red
38
+ love.graphics.print('Hello', 100, 50)
39
+ const width = love.window.getWidth()
40
+ ```
41
+
42
+ **Techniques:**
43
+ - Use `declare const` to declare Lua global variables and libraries
44
+ - Define complete type signatures for all global APIs and functions
45
+ - Use string literal types for enum-like parameters (e.g., `"fill" | "line"`)
46
+ - Group related functions in nested object types matching Lua structure
47
+ - Document expected parameters and return types for each API call
48
+ - Use union types for optional or variable-length parameters
49
+ - Create type definitions that match exact Lua API signatures
@@ -0,0 +1,42 @@
1
+ # module-organization: Module Organization
2
+
3
+ **Guideline:** Organize code in flat namespace hierarchies that map cleanly to Lua tables.
4
+
5
+ **Rationale:** Nested namespaces compile to nested Lua tables, creating efficient module systems aligned with Lua patterns.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // Good: 2-level hierarchy, organized by feature
10
+ namespace Physics {
11
+ namespace Collision {
12
+ export interface Circle { x: number; y: number; radius: number }
13
+ export function intersect(a: Circle, b: Circle): boolean {
14
+ const dx = a.x - b.x
15
+ const dy = a.y - b.y
16
+ const dist = Math.sqrt(dx * dx + dy * dy)
17
+ return dist < a.radius + b.radius
18
+ }
19
+ }
20
+ export function update(body: Body, dt: number) { /* ... */ }
21
+ }
22
+
23
+ namespace Rendering {
24
+ namespace Color {
25
+ export const RED = { r: 1, g: 0, b: 0 }
26
+ export const BLUE = { r: 0, g: 0, b: 1 }
27
+ }
28
+ export function draw(mesh: Mesh) { /* ... */ }
29
+ }
30
+
31
+ // Avoid: Too deep (translates to verbose Lua)
32
+ namespace Game.Entities.Physics.Collision.Detection {}
33
+ ```
34
+
35
+ **Techniques:**
36
+ - Use nested namespaces for logical grouping that maps to Lua table structure
37
+ - Export functions directly within namespaces (not as properties)
38
+ - Keep hierarchy shallow: maximum 2-3 levels deep for clarity
39
+ - Group related functionality together in single namespace
40
+ - Organize by feature (Physics, Rendering, Input) rather than by file
41
+ - Use consistent naming conventions across namespace hierarchy
42
+ - Minimize cross-namespace dependencies for cleaner module structure
@@ -0,0 +1,47 @@
1
+ # multi-return-functions: Lua Multi-Return Functions
2
+
3
+ **Guideline:** Use `LuaMultiReturn` and `$multi()` for idiomatic Lua multiple-value returns.
4
+
5
+ **Rationale:** Lua natively supports multiple returns, more efficient than arrays/objects. TSTL provides `LuaMultiReturn` for type-safe multi-returns.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ import { LuaMultiReturn } from 'typescript-to-lua'
10
+
11
+ // Simple multi-return
12
+ function divmod(a: number, b: number): LuaMultiReturn<[number, number]> {
13
+ return $multi(Math.floor(a / b), a % b)
14
+ }
15
+
16
+ // Usage
17
+ const [quotient, remainder] = divmod(17, 5)
18
+ // quotient = 3, remainder = 2
19
+
20
+ // Error handling with optional
21
+ function parseJSON(json: string): LuaMultiReturn<[object | null, string | null]> {
22
+ try {
23
+ return $multi(JSON.parse(json), null)
24
+ } catch (e) {
25
+ return $multi(null, (e as Error).message)
26
+ }
27
+ }
28
+
29
+ // Usage
30
+ const [data, err] = parseJSON('{"key": "value"}')
31
+ if (err) console.error('Parse error:', err)
32
+ else console.log('Data:', data)
33
+
34
+ // Variadic returns
35
+ function unpack<T extends any[]>(arr: T): LuaMultiReturn<T> {
36
+ return $multi(...arr)
37
+ }
38
+ ```
39
+
40
+ **Techniques:**
41
+ - Import `LuaMultiReturn` from "typescript-to-lua" package
42
+ - Declare return type as `LuaMultiReturn<[type1, type2, ...]>` for multiple values
43
+ - Return using `$multi(value1, value2, ...)` function call syntax
44
+ - Destructure multi-returns with `const [a, b] = func()` for clarity
45
+ - Use for idiomatic Lua patterns like divmod that return quotient and remainder
46
+ - Implement error handling by returning optional value with error message
47
+ - Support variadic returns with spread operator inside $multi
@@ -0,0 +1,52 @@
1
+ # namespaces-vs-classes: Namespace vs Class Design
2
+
3
+ **Guideline:** Prefer namespaces over classes for cleaner, more efficient Lua output.
4
+
5
+ **Rationale:** Classes generate metatables and inheritance chains. Namespaces compile to simple Lua tables with functions, resulting in efficient output.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // AVOID: Class generates complex Lua with metatables
10
+ class Vector {
11
+ constructor(public x: number, public y: number) {}
12
+ magnitude(): number {
13
+ return Math.sqrt(this.x * this.x + this.y * this.y)
14
+ }
15
+ normalize(): Vector {
16
+ const m = this.magnitude()
17
+ return new Vector(this.x / m, this.y / m)
18
+ }
19
+ }
20
+
21
+ // PREFER: Namespace generates simple Lua tables
22
+ namespace Vector {
23
+ export interface Vec { x: number; y: number }
24
+
25
+ export function magnitude(v: Vec): number {
26
+ return Math.sqrt(v.x * v.x + v.y * v.y)
27
+ }
28
+
29
+ export function normalize(v: Vec): Vec {
30
+ const m = magnitude(v)
31
+ return { x: v.x / m, y: v.y / m }
32
+ }
33
+
34
+ export function add(a: Vec, b: Vec): Vec {
35
+ return { x: a.x + b.x, y: a.y + b.y }
36
+ }
37
+ }
38
+
39
+ // Usage
40
+ const v: Vector.Vec = { x: 3, y: 4 }
41
+ const mag = Vector.magnitude(v) // 5
42
+ const norm = Vector.normalize(v) // { x: 0.6, y: 0.8 }
43
+ ```
44
+
45
+ **Techniques:**
46
+ - Use `export namespace` for grouping related functions instead of classes
47
+ - Export functions directly within namespaces (not static methods)
48
+ - Avoid classes for purely functional code, use namespaces for cleaner output
49
+ - Keep functions pure and stateless within namespaces
50
+ - Use composition patterns to share behavior across namespaces
51
+ - Consider inheritance only when truly needed (rare in Lua)
52
+ - Prefer namespace-based organization for utilities and helper functions
@@ -0,0 +1,68 @@
1
+ # performance-tips: Performance Optimization Tips
2
+
3
+ **Guideline:** Cache lookups, use numeric for-loops, and pre-allocate data structures for optimal performance.
4
+
5
+ **Rationale:** Lua has different performance characteristics than JavaScript. Lookups, iterators, and dynamic allocation have costs. Pre-allocation aligns with LuaJIT optimization.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // SLOW: Repeated lookups, for-of loop
10
+ for (const item of items) {
11
+ console.log(item)
12
+ Math.sqrt(item.value) // Lookup Math each iteration
13
+ }
14
+
15
+ // FAST: Cache lookups, numeric loop
16
+ const sqrt = Math.sqrt
17
+ const itemsLen = items.length
18
+ for (let i = 0; i < itemsLen; i++) {
19
+ const item = items[i]
20
+ console.log(item)
21
+ sqrt(item.value) // Cached reference
22
+ }
23
+
24
+ // SLOW: Dynamic array growth
25
+ const results: number[] = []
26
+ for (const item of items) {
27
+ results.push(item * 2) // Reallocates as it grows
28
+ }
29
+
30
+ // FAST: Pre-allocate
31
+ const results = new Array<number>(items.length)
32
+ for (let i = 0; i < items.length; i++) {
33
+ results[i] = items[i] * 2 // No reallocation
34
+ }
35
+
36
+ // SLOW: Table allocation in hot path
37
+ function updatePositions(bodies: Body[]) {
38
+ for (const body of bodies) {
39
+ const delta = { x: 0, y: 0 } // Allocates each call
40
+ delta.x = body.vx * dt
41
+ delta.y = body.vy * dt
42
+ body.x += delta.x
43
+ body.y += delta.y
44
+ }
45
+ }
46
+
47
+ // FAST: Reuse allocation
48
+ const delta = { x: 0, y: 0 }
49
+ function updatePositions(bodies: Body[]) {
50
+ for (let i = 0; i < bodies.length; i++) {
51
+ const body = bodies[i]
52
+ delta.x = body.vx * dt
53
+ delta.y = body.vy * dt
54
+ body.x += delta.x
55
+ body.y += delta.y
56
+ }
57
+ }
58
+ ```
59
+
60
+ **Techniques:**
61
+ - Cache frequently-used global functions in local variables for fast lookup
62
+ - Use numeric for-loops (`for (let i = 0; i < arr.length; i++)`) instead of for-of
63
+ - Avoid for-of and for-in iterators that generate overhead in Lua
64
+ - Pre-allocate arrays when final size is known to avoid dynamic growth
65
+ - Minimize table allocations in hot paths (frequently-called functions)
66
+ - Store module-level constants in locals within functions that use them
67
+ - Profile hot paths and focus optimization on frequently-executed code
68
+ - Use LuaJIT-friendly patterns: early allocation, numeric indices, minimal lookups
@@ -0,0 +1,60 @@
1
+ # stable-tables: Stable Table Patterns
2
+
3
+ **Guideline:** Define all table fields upfront to enable LuaJIT optimizations.
4
+
5
+ **Rationale:** LuaJIT performs best with constant table shapes. Adding fields dynamically causes deoptimization. Pre-allocating fields enables optimal JIT compilation.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // SLOW: Dynamic property addition (deoptimizes JIT)
10
+ const entity = { x: 0, y: 0 }
11
+ entity.vx = 1 // Added after creation - bad for JIT
12
+ entity.vy = 1 // Another dynamic addition
13
+ entity.id = 123 // Yet another - very slow
14
+
15
+ // FAST: All fields defined upfront
16
+ interface Entity {
17
+ readonly x: number
18
+ readonly y: number
19
+ readonly vx: number
20
+ readonly vy: number
21
+ readonly id: number
22
+ }
23
+
24
+ function createEntity(x: number, y: number, id: number): Entity {
25
+ return {
26
+ x: x,
27
+ y: y,
28
+ vx: 0, // All fields initialized
29
+ vy: 0,
30
+ id: id
31
+ }
32
+ }
33
+
34
+ // SLOW: Variable-sized arrays
35
+ const buffers: number[][] = []
36
+ function addData(id: number, data: number[]) {
37
+ buffers[id] = data // Variable size - bad for JIT
38
+ }
39
+
40
+ // FAST: Pre-allocated arrays
41
+ const maxEntities = 1000
42
+ const posX = new Array<number>(maxEntities) // Fixed size
43
+ const posY = new Array<number>(maxEntities)
44
+ const velocities: number[][] = new Array(maxEntities)
45
+
46
+ for (let i = 0; i < maxEntities; i++) {
47
+ posX[i] = 0
48
+ posY[i] = 0
49
+ velocities[i] = [0, 0] // Stable sub-arrays
50
+ }
51
+ ```
52
+
53
+ **Techniques:**
54
+ - Define complete interfaces with all properties and types upfront
55
+ - Initialize all fields in factory functions to establish table shape
56
+ - Pre-allocate arrays with known sizes to avoid dynamic growth
57
+ - Avoid dynamically adding properties after creation (hurts JIT)
58
+ - Use `readonly` modifiers to signal immutability and stability
59
+ - Create factory functions that set all fields in one operation
60
+ - Keep table structure consistent across all instances of a type
@@ -0,0 +1,46 @@
1
+ # tsconfig: TypeScript Configuration for TSTL
2
+
3
+ **Guideline:** Configure TypeScript with strict mode and TSTL settings for optimal Lua generation.
4
+
5
+ **Rationale:** Strict options catch errors early and generate predictable Lua. TSTL settings control targeting, libraries, and debugging.
6
+
7
+ **Example:**
8
+ ```json
9
+ {
10
+ "compilerOptions": {
11
+ "strict": true,
12
+ "noImplicitAny": true,
13
+ "strictNullChecks": true,
14
+ "strictFunctionTypes": true,
15
+ "noUnusedLocals": true,
16
+ "noUnusedParameters": true,
17
+ "noImplicitReturns": true,
18
+ "noFallthroughCasesInSwitch": true,
19
+ "target": "ES2020",
20
+ "module": "esnext",
21
+ "declaration": true,
22
+ "declarationMap": true,
23
+ "sourceMap": true,
24
+ "outDir": "./dist",
25
+ "rootDir": "./src",
26
+ "skipLibCheck": true,
27
+ "forceConsistentCasingInFileNames": true
28
+ },
29
+ "tstl": {
30
+ "luaTarget": "JIT",
31
+ "luaLibImport": "require",
32
+ "sourceMapTraceback": true,
33
+ "noHeader": false
34
+ }
35
+ }
36
+ ```
37
+
38
+ **Techniques:**
39
+ - Enable `strict: true` for comprehensive type checking
40
+ - Enable individual strict options: `noImplicitAny`, `strictNullChecks`, `strictFunctionTypes`
41
+ - Enable `noUnusedLocals` and `noUnusedParameters` to catch dead code
42
+ - Enable `noImplicitReturns` to ensure all code paths return
43
+ - Enable `noFallthroughCasesInSwitch` for safer switch statements
44
+ - Set `luaTarget` to appropriate runtime: "JIT" for LuaJIT, "5.3" for Lua 5.3, etc.
45
+ - Set `luaLibImport` to "require" or "inline" for library loading strategy
46
+ - Enable `sourceMapTraceback` for debugging information and stack traces
@@ -0,0 +1,61 @@
1
+ # tstl-decorators: TSTL Decorators and Annotations
2
+
3
+ **Guideline:** Use TSTL-specific decorators and JSDoc annotations to control Lua code generation.
4
+
5
+ **Rationale:** TSTL decorators like `@luaTable` and `@luaIterator` fine-tune generated Lua. Custom decorators bridge TypeScript and Lua idioms.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ /** @luaTable */
10
+ interface Config {
11
+ host: string
12
+ port: number
13
+ debug: boolean
14
+ }
15
+
16
+ /** @luaIterator */
17
+ function* enumerate<T>(arr: T[]): Generator<[number, T]> {
18
+ for (let i = 0; i < arr.length; i++) {
19
+ yield [i, arr[i]]
20
+ }
21
+ }
22
+
23
+ class Vector {
24
+ constructor(public x: number, public y: number) {}
25
+
26
+ // @noSelf means this function doesn't receive 'self' parameter
27
+ /** @noSelf */
28
+ static distance(a: Vector, b: Vector): number {
29
+ const dx = a.x - b.x
30
+ const dy = a.y - b.y
31
+ return Math.sqrt(dx * dx + dy * dy)
32
+ }
33
+
34
+ // Regular method gets self: parameter
35
+ magnitude(): number {
36
+ return Math.sqrt(this.x * this.x + this.y * this.y)
37
+ }
38
+ }
39
+
40
+ // Custom memoization decorator
41
+ function memoize(fn: Function) {
42
+ const cache = new Map()
43
+ return (...args: any[]) => {
44
+ const key = JSON.stringify(args)
45
+ if (cache.has(key)) return cache.get(key)
46
+ const result = fn(...args)
47
+ cache.set(key, result)
48
+ return result
49
+ }
50
+ }
51
+ ```
52
+
53
+ **Techniques:**
54
+ - Use `/** @luaTable */` JSDoc annotation for raw Lua table interfaces
55
+ - Use `/** @luaIterator */` for generator-based iterators
56
+ - Use `/** @noSelf */` for functions that don't use 'self' context
57
+ - Use `/** @pureVirtual */` to mark abstract methods
58
+ - Implement custom decorators for cross-cutting concerns
59
+ - Apply decorators for performance optimizations: memoization, caching
60
+ - Use decorators for logging, debugging, and tracing functionality
61
+ - Apply decorators at method level for fine-grained code generation control
@@ -0,0 +1,79 @@
1
+ # type-safety: Type Safety Patterns
2
+
3
+ **Guideline:** Use strict typing with readonly properties, discriminated unions, and complete annotations.
4
+
5
+ **Rationale:** TypeScript's type system catches errors at compile time and guides TSTL. Patterns like discriminated unions provide type-safe error handling.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // Discriminated union for type-safe results
10
+ type Result<T, E> =
11
+ | { kind: 'ok'; value: T }
12
+ | { kind: 'err'; error: E }
13
+
14
+ namespace Result {
15
+ export function ok<T, E>(value: T): Result<T, E> {
16
+ return { kind: 'ok', value }
17
+ }
18
+
19
+ export function err<T, E>(error: E): Result<T, E> {
20
+ return { kind: 'err', error }
21
+ }
22
+
23
+ export function map<T, U, E>(
24
+ result: Result<T, E>,
25
+ fn: (t: T) => U
26
+ ): Result<U, E> {
27
+ if (result.kind === 'ok') {
28
+ return ok(fn(result.value))
29
+ }
30
+ return result
31
+ }
32
+ }
33
+
34
+ // Readonly properties signal immutability
35
+ interface Position {
36
+ readonly x: number
37
+ readonly y: number
38
+ }
39
+
40
+ interface Entity {
41
+ readonly id: number
42
+ readonly position: Position
43
+ readonly velocity: readonly [number, number] // Readonly tuple
44
+ }
45
+
46
+ // Complete generic types
47
+ type Option<T> = { kind: 'some'; value: T } | { kind: 'none' }
48
+
49
+ namespace Option {
50
+ export function some<T>(value: T): Option<T> {
51
+ return { kind: 'some', value }
52
+ }
53
+
54
+ export function none<T>(): Option<T> {
55
+ return { kind: 'none' }
56
+ }
57
+
58
+ export function getOrElse<T>(opt: Option<T>, def: T): T {
59
+ if (opt.kind === 'some') return opt.value
60
+ return def
61
+ }
62
+ }
63
+
64
+ // Type-safe usage
65
+ const result: Result<number, string> = Result.ok(42)
66
+ if (result.kind === 'ok') {
67
+ console.log(result.value) // Type is number
68
+ }
69
+ ```
70
+
71
+ **Techniques:**
72
+ - Use `readonly` modifiers for immutable properties to signal intent
73
+ - Define complete interfaces with all properties typed explicitly
74
+ - Implement discriminated unions for type-safe variant handling
75
+ - Create namespaces paired with interfaces for factories and utilities
76
+ - Use union types for optional or alternative values
77
+ - Implement generic types for reusable patterns (Result<T, E>, Option<T>)
78
+ - Use factory functions to enforce proper initialization
79
+ - Provide utility functions as namespace members for convenience
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: vitest-guidelines
3
+ description: >-
4
+ Trigger on `.test.ts`, `.spec.ts` files, test blocks. Use when writing Vitest 3+ tests with TypeScript. Apply for type safety in tests, HTTP testing, mocking patterns, test organization. Keywords: Vitest, test, spec, HTTP assertions, mock patterns, type safety, CORS preflight, timestamps, response casting.
5
+ ---
6
+
7
+ # Vitest Testing Guidelines
8
+
9
+ ## Requirements
10
+
11
+ - Vitest ≥ 3, TypeScript ≥ 5.8
12
+
13
+ ## Essentials
14
+
15
+ - **Type safety** - Define response interfaces, cast JSON results, see [reference/type-safety.md](reference/type-safety.md), [reference/json-response-type-safety.md](reference/json-response-type-safety.md)
16
+ - **HTTP testing** - Use HTTP 204 for OPTIONS, assert correct status codes, see [reference/http-testing.md](reference/http-testing.md), [reference/cors-preflight-status-code.md](reference/cors-preflight-status-code.md)
17
+ - **Timestamp testing** - Avoid flaky comparisons, verify existence or add delays, see [reference/timestamp-testing.md](reference/timestamp-testing.md)
18
+ - **Mock patterns** - Use simple type casting instead of complex generics, see [reference/mock-patterns.md](reference/mock-patterns.md)
19
+ - **TypeScript config** - Verify project reference paths match structure, see [reference/typescript-config.md](reference/typescript-config.md), [reference/project-references-path-resolution.md](reference/project-references-path-resolution.md)
20
+ - **Test organization** - Organize by endpoint/feature with nested describe blocks, see [reference/test-organization.md](reference/test-organization.md)
21
+
22
+ ## Progressive disclosure
23
+
24
+ - Read [reference/type-safety.md](reference/type-safety.md) - When test variables lose type information
25
+ - Read [reference/json-response-type-safety.md](reference/json-response-type-safety.md) - When calling res.json() without type assertions
26
+ - Read [reference/http-testing.md](reference/http-testing.md) - When asserting HTTP status codes in API tests
27
+ - Read [reference/cors-preflight-status-code.md](reference/cors-preflight-status-code.md) - When testing CORS OPTIONS requests
28
+ - Read [reference/timestamp-testing.md](reference/timestamp-testing.md) - When tests fail intermittently due to timing
29
+ - Read [reference/mock-patterns.md](reference/mock-patterns.md) - When creating mocks or stubs for tests
30
+ - Read [reference/typescript-config.md](reference/typescript-config.md) - When test files aren't recognized by TypeScript
31
+ - Read [reference/project-references-path-resolution.md](reference/project-references-path-resolution.md) - When imports fail in test files
32
+ - Read [reference/test-organization.md](reference/test-organization.md) - When structuring test suites for large APIs
@@ -0,0 +1,34 @@
1
+ # cors-preflight-status-code: CORS Preflight Status Code Expectations
2
+
3
+ **Guideline:** OPTIONS preflight requests should return HTTP 204 (No Content), not 200 (OK).
4
+
5
+ **Rationale:** HTTP 204 is the correct status code for OPTIONS requests with no response body.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ it("should handle CORS preflight", async () => {
11
+ const res = await app.request("/api/users", {
12
+ method: "OPTIONS",
13
+ headers: {
14
+ Origin: "https://example.com",
15
+ "Access-Control-Request-Method": "POST",
16
+ "Access-Control-Request-Headers": "Content-Type",
17
+ },
18
+ });
19
+
20
+ expect(res.status).toBe(204); // ✅ Correct
21
+ expect(res.headers.get("Access-Control-Allow-Origin")).toBe("*");
22
+ expect(res.headers.get("Access-Control-Allow-Methods")).toContain("POST");
23
+ expect(res.headers.get("Access-Control-Allow-Headers")).toContain(
24
+ "Content-Type",
25
+ );
26
+ });
27
+ ```
28
+
29
+ **Techniques:**
30
+ - Always expect 204 status for OPTIONS requests in tests
31
+ - Verify CORS headers are present (Access-Control-Allow-Origin, etc.)
32
+ - Don't expect a response body from OPTIONS
33
+ - Use the same pattern for all preflight request tests
34
+ - Test both missing and present CORS headers