@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,24 @@
1
+ # performance: Performance Optimization
2
+
3
+ **Guideline:** Minimize draw calls with InstancedMesh; use LOD for distance; dispose unused; reuse geometry/materials; profile before optimizing.
4
+
5
+ **Rationale:** GPU efficiency depends on draw calls and memory; InstancedMesh renders 1000+ copies in one call vs. 1000 separate meshes.
6
+
7
+ **Example:**
8
+ ```javascript
9
+ const mesh = new THREE.InstancedMesh(geometry, material, 1000);
10
+ for (let i = 0; i < 1000; i++) {
11
+ dummy.position.set(...);
12
+ dummy.updateMatrix();
13
+ mesh.setMatrixAt(i, dummy.matrix);
14
+ }
15
+ mesh.instanceMatrix.needsUpdate = true;
16
+ ```
17
+
18
+ **Techniques:**
19
+ - InstancedMesh: Render thousands of copies in one draw call (vs. 1000 draw calls)
20
+ - LOD (Level of Detail): High detail near (0-50), medium mid-range (50-200), low far (200+)
21
+ - Merge geometries: Combine static meshes with BufferGeometryUtils.mergeGeometries()
22
+ - Memory: Dispose geometry/material/texture; reuse between meshes; unload offscreen
23
+ - Rendering: Shadow map 1024×1024; limit lights to 3-5; prefer alphaTest over transparency
24
+ - Profiling: `renderer.info.render.calls` (target <1000), `renderer.info.memory`
@@ -0,0 +1,36 @@
1
+ # filename: physics-vr
2
+
3
+ **Guideline:** Use Rapier (or Cannon-es) for physics; sync physics bodies to meshes each frame; use `renderer.setAnimationLoop()` for WebXR.
4
+
5
+ **Rationale:** Three.js has no built-in physics; external engines require frame-based sync. WebXR requires specific animation loop API.
6
+
7
+ **Example:**
8
+ ```javascript
9
+ // Physics setup
10
+ const world = new RAPIER.World(new RAPIER.Vector3(0, -9.81, 0));
11
+ const bodyDesc = RAPIER.RigidBodyDesc.dynamic().setTranslation(0, 10, 0);
12
+ const body = world.createRigidBody(bodyDesc);
13
+ const shape = RAPIER.ColliderDesc.cuboid(0.5, 0.5, 0.5);
14
+ world.createCollider(shape, body);
15
+
16
+ // Sync loop
17
+ function animate() {
18
+ world.step();
19
+ const {x, y, z} = body.translation();
20
+ const {x: qx, y: qy, z: qz, w: qw} = body.rotation();
21
+ mesh.position.set(x, y, z);
22
+ mesh.quaternion.set(qx, qy, qz, qw);
23
+ renderer.render(scene, camera);
24
+ }
25
+ renderer.setAnimationLoop(animate);
26
+ ```
27
+
28
+ **Techniques:**
29
+ - Physics engines: Rapier (recommended), Cannon-es, Oimo; create world with gravity
30
+ - Bodies: RigidBodyDesc dynamic/static/kinematic; add shapes (colliders)
31
+ - Forces: `.applyForce()`, `.applyImpulse()`, `.setLinvel()`, `.setAngvel()`
32
+ - Raycasting: `world.castRay()` for hit detection with physics bodies
33
+ - WebXR setup: `renderer.xr.enabled = true`; `renderer.setAnimationLoop(animate)` (not requestAnimationFrame)
34
+ - XR input: `renderer.xr.getController(0/1)` for controllers; listen to 'select'/'squeeze' events
35
+ - AR hit testing: `frame.getHitTestResults()` returns positions to place objects
36
+ - VR comfort: Minimize latency, avoid sudden motions; limit physics timestep to ≤16.67ms
@@ -0,0 +1,26 @@
1
+ # postprocessing: Post-Processing Effects
2
+
3
+ **Guideline:** Use EffectComposer to chain passes (RenderPass→effects→screen); render to intermediate targets for complex pipelines.
4
+
5
+ **Rationale:** Post-processing applies cinematic effects (bloom, grain, color grading) after rendering without modifying materials.
6
+
7
+ **Example:**
8
+ ```javascript
9
+ const composer = new EffectComposer(renderer);
10
+ composer.addPass(new RenderPass(scene, camera));
11
+ composer.addPass(new UnrealBloomPass(
12
+ new THREE.Vector2(w, h),
13
+ 1.5, // Strength
14
+ 0.4, // Radius
15
+ 0.85 // Threshold
16
+ ));
17
+ function animate() { composer.render(); }
18
+ ```
19
+
20
+ **Techniques:**
21
+ - UnrealBloomPass: Glow on emissive materials; adjust threshold for control
22
+ - FilmPass: Grain/noise effect with intensity and grayscale toggle
23
+ - ShaderPass: Custom fragment shader effects with uniforms for animation
24
+ - WebGLRenderTarget: Intermediate render passes for multi-stage pipelines
25
+ - Color grading: ShaderPass with saturation/brightness uniforms
26
+ - Performance: Bloom expensive; SSAO slow; half-res passes for efficiency; only final pass sets renderToScreen
@@ -0,0 +1,26 @@
1
+ # scene-fundamentals: Scene, Renderer, and Core Concepts
2
+
3
+ **Guideline:** Configure Scene/Renderer; use Object3D hierarchy with proper dispose patterns; animate with setAnimationLoop and delta time.
4
+
5
+ **Rationale:** Proper setup ensures memory safety, correct rendering, and frame-rate independence; improper disposal causes memory leaks.
6
+
7
+ **Example:**
8
+ ```javascript
9
+ const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
10
+ renderer.outputColorSpace = THREE.SRGBColorSpace;
11
+ renderer.shadowMap.enabled = true;
12
+ const clock = new THREE.Clock();
13
+ renderer.setAnimationLoop(() => {
14
+ const delta = clock.getDelta();
15
+ mesh.rotation.y += delta * 0.5;
16
+ renderer.render(scene, camera);
17
+ });
18
+ ```
19
+
20
+ **Techniques:**
21
+ - Renderer config: antialias, alpha (transparency), outputColorSpace (sRGB), toneMaps, shadowMap
22
+ - Scene setup: background (color/texture), environment map (PBR), fog, traverse()
23
+ - Object3D: position/rotation/scale, add/remove, visible (hide without disposal), layers, userData
24
+ - Dispose order: geometry → texture → material → renderer (prevents memory leaks)
25
+ - Animation: Use setAnimationLoop() not requestAnimationFrame (WebXR); use delta for frame-rate independence
26
+ - Coordinate system: Right-handed (+X right, +Y up, +Z toward viewer); helpers for debugging
@@ -0,0 +1,28 @@
1
+ # filename: shaders
2
+
3
+ **Guideline:** Use ShaderMaterial with uniforms for parameter control; modify built-in shaders via `onBeforeCompile`; move expensive calculations to vertex shader.
4
+
5
+ **Rationale:** Custom shaders enable advanced effects; uniform updates avoid recompilation; vertex-side calculations reduce fragment shader load.
6
+
7
+ **Example:**
8
+ ```javascript
9
+ const material = new THREE.ShaderMaterial({
10
+ uniforms: { time: { value: 0 } },
11
+ vertexShader: `varying vec2 vUv;
12
+ void main() {
13
+ vUv = uv;
14
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
15
+ }`,
16
+ fragmentShader: `varying vec2 vUv;
17
+ void main() { gl_FragColor = vec4(vUv, 1.0, 1.0); }`
18
+ });
19
+ material.uniforms.time.value = clock.getElapsedTime();
20
+ ```
21
+
22
+ **Techniques:**
23
+ - Uniform types: float, vec2/vec3, Color, sampler2D (texture), Matrix4, arrays
24
+ - Varyings: Pass data vertex→fragment (vUv, vNormal, vWorldPos)
25
+ - Built-in matrices: modelMatrix, modelViewMatrix, projectionMatrix, normalMatrix auto-provided
26
+ - onBeforeCompile: Inject into Three.js shaders using `#include <begin_vertex>` injection points
27
+ - GLSL math: `mix()`, `step()`, `smoothstep()`, `dot()`, `normalize()`, `cross()`
28
+ - Performance: Use `lowp/mediump` precision; minimize branching; move expensive ops to vertex shader
@@ -0,0 +1,21 @@
1
+ # textures: Texture Loading and Configuration
2
+
3
+ **Guideline:** Set correct color space per texture type (sRGB for colors, no color space for data), use power-of-2 dimensions, enable mipmaps.
4
+
5
+ **Rationale:** Color space errors cause washed-out/dark rendering; mipmaps ensure quality at distance; compression saves VRAM.
6
+
7
+ **Example:**
8
+ ```javascript
9
+ const colorTex = loader.load('albedo.jpg');
10
+ colorTex.colorSpace = THREE.SRGBColorSpace;
11
+ const normalTex = loader.load('normal.jpg');
12
+ normalTex.colorSpace = THREE.NoColorSpace; // Data, not color
13
+ ```
14
+
15
+ **Techniques:**
16
+ - Color spaces: sRGB for color/albedo/emissive, NoColorSpace for normal/roughness/metalness/displacement/AO
17
+ - Mipmaps: Auto-generate for most textures; disable for canvas/video (dynamic updates)
18
+ - Wrapping: RepeatWrapping or MirroredRepeatWrapping for tiling; ClampToEdgeWrapping default
19
+ - Filtering: LinearMipmapLinearFilter (smooth, quality), NearestFilter (pixelated retro)
20
+ - Anisotropy: `.anisotropy = renderer.capabilities.getMaxAnisotropy()` for sharp distant angles
21
+ - Compression: KTX2 (best modern), WebP (browser support), Data Textures (procedural)
@@ -0,0 +1,34 @@
1
+ # filename: webgpu
2
+
3
+ **Guideline:** Use WebGPU for compute shaders and modern GPU features; call `await renderer.init()` before rendering; use TSL for cross-renderer materials.
4
+
5
+ **Rationale:** WebGPU provides lower CPU overhead, compute shaders, native Metal/DirectX support; async init required for GPU device setup.
6
+
7
+ **Example:**
8
+ ```javascript
9
+ import * as THREE from 'three/webgpu';
10
+
11
+ const renderer = new THREE.WebGPURenderer({antialias: true});
12
+ renderer.setSize(w, h);
13
+ await renderer.init(); // Required async init
14
+
15
+ const scene = new THREE.Scene();
16
+ const material = new THREE.MeshStandardNodeMaterial({
17
+ color: vec3(1.0, 0.0, 0.0)
18
+ });
19
+ const mesh = new THREE.Mesh(geometry, material);
20
+ scene.add(mesh);
21
+ renderer.render(scene, camera);
22
+ ```
23
+
24
+ **Techniques:**
25
+ - Setup: `new THREE.WebGPURenderer()` + `await renderer.init()`; async required for device
26
+ - Fallback: Check `navigator.gpu` before creating; fall back to WebGL if unavailable
27
+ - Compute shaders: `Fn([args], returnType)` defines GPU-side computation; `renderer.compute()` executes
28
+ - Storage: `storageTexture()` and `storageBuffer()` for read/write GPU data
29
+ - TSL materials: Work with both WebGL (→GLSL) and WebGPU (→WGSL) automatically
30
+ - Performance: Lower CPU overhead, better batching, native driver support vs WebGL
31
+ - Debugging: `renderer.info`, `renderer.getDevice()` for device limits/features
32
+ - Limitations: Chrome 113+, Firefox Nightly, Safari TP; no polyfill; mobile support limited
33
+ - Migration: Change import from `'three'` to `'three/webgpu'`; add async init; use TSL for shaders
34
+ - Tips: Use compute for physics/particles; minimize CPU↔GPU transfers; batch similar operations
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: typescript-guidelines
3
+ description: >-
4
+ Trigger on `.ts` files with Node.js/ESM patterns. Use when writing TypeScript code for Node.js ESM projects. Apply for async functions, module imports, type safety, linting. Keywords: TypeScript, ESM, strict mode, async/await, Zod, type inference, avoid barrel exports, process.env, template literals, numeric separators.
5
+ ---
6
+
7
+ # TypeScript Coding Guidelines
8
+
9
+ ## Requirements
10
+
11
+ - Node.js ESM, TypeScript ≥ 5.8, Vitest ≥ 3, Zod ≥ 4.
12
+
13
+ ## Essentials
14
+
15
+ - **Strict mode** - Enable strict flags, avoid `@ts-ignore` without comment+issue
16
+ - **Type safety** - Explicit public types, `unknown` over `any`, derive from generated types
17
+ - **Imports** - Named ESM imports, `import type` for types, direct from source, see [reference/avoid-barrel-exports.md](reference/avoid-barrel-exports.md), [reference/avoid-reexports.md](reference/avoid-reexports.md)
18
+ - **Async/await** - Handle errors explicitly, only use `async` with `await`, see [reference/async-without-await.md](reference/async-without-await.md), [reference/unnecessary-async-keywords.md](reference/unnecessary-async-keywords.md)
19
+ - **Immutability** - Use `const`/`readonly` where possible
20
+ - **Validation** - Zod for I/O boundaries, infer types from schemas
21
+ - **Linting** - Never suppress with eslint-disable, fix root causes, see [reference/avoid-eslint-disable.md](reference/avoid-eslint-disable.md)
22
+ - **Template literals** - Convert numbers with `String(value)`, see [reference/template-literals-require-string-conversion.md](reference/template-literals-require-string-conversion.md)
23
+ - **Numeric literals** - Use underscores in large numbers (`30_000`), see [reference/numeric-separator-enforcement.md](reference/numeric-separator-enforcement.md)
24
+ - **Method references** - Keep object references to maintain `this` binding, see [reference/unbound-method-references.md](reference/unbound-method-references.md)
25
+ - **Environment** - Use dot notation for `process.env` access, see [reference/env-access-bracket-notation.md](reference/env-access-bracket-notation.md)
26
+
27
+ ## Progressive disclosure
28
+
29
+ - Read [reference/async-without-await.md](reference/async-without-await.md) - When seeing async functions that don't use await
30
+ - Read [reference/unnecessary-async-keywords.md](reference/unnecessary-async-keywords.md) - When simplifying synchronous controller functions
31
+ - Read [reference/avoid-eslint-disable.md](reference/avoid-eslint-disable.md) - When tempted to suppress linting warnings
32
+ - Read [reference/template-literals-require-string-conversion.md](reference/template-literals-require-string-conversion.md) - When inserting numbers in template literals
33
+ - Read [reference/numeric-separator-enforcement.md](reference/numeric-separator-enforcement.md) - When writing large numeric literals
34
+ - Read [reference/unbound-method-references.md](reference/unbound-method-references.md) - When passing methods as callbacks or references
35
+ - Read [reference/avoid-barrel-exports.md](reference/avoid-barrel-exports.md) - When creating or importing from index.ts files
36
+ - Read [reference/avoid-reexports.md](reference/avoid-reexports.md) - When organizing module exports
37
+ - Read [reference/env-access-bracket-notation.md](reference/env-access-bracket-notation.md) - When accessing process.env variables
@@ -0,0 +1,32 @@
1
+ # async-without-await: Only Use Async When Function Contains Await
2
+
3
+ **Guideline:** Only use `async` when function contains `await` or must return Promise.
4
+
5
+ **Rationale:** Unnecessary `async` adds overhead and misleads readers about async behavior.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ❌ Bad: async without await
11
+ const middleware = async (c, next) => {
12
+ c.set("user", getUser());
13
+ };
14
+
15
+ // ✅ Good: Remove async
16
+ const middleware = (c, next) => {
17
+ c.set("user", getUser());
18
+ };
19
+
20
+ // ✅ Good: Return Promise explicitly if needed
21
+ const middleware = (c, next) => {
22
+ c.set("user", getUser());
23
+ return Promise.resolve();
24
+ };
25
+ ```
26
+
27
+ **Techniques:**
28
+ - Review each `async` function for `await` expressions
29
+ - Remove `async` keyword if no `await` found
30
+ - Return `Promise.resolve()` explicitly if signature requires Promise
31
+ - Run ESLint to find @typescript-eslint/require-await violations
32
+ - Verify function behavior unchanged after removal
@@ -0,0 +1,25 @@
1
+ # avoid-barrel-exports: Import Directly from Specific Files
2
+
3
+ **Guideline:** Avoid `index.ts` barrel exports in subdirectories; import directly from specific files.
4
+
5
+ **Rationale:** Subdirectory barrels add indirection, obscure source, and cause circular dependency issues.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ✅ Good: Direct imports, no index.ts
11
+ import {authMiddleware} from "./middlewares/jwt.js";
12
+ import {csrfProtection} from "./middlewares/csrf.js";
13
+
14
+ // ❌ Bad: Subdirectory barrel exports
15
+ // src/middlewares/index.ts
16
+ export {authMiddleware} from "./jwt.js";
17
+ export {csrfProtection} from "./csrf.js";
18
+ ```
19
+
20
+ **Techniques:**
21
+ - Remove `index.ts` from subdirectories (middlewares, utils, services, controllers)
22
+ - Update imports to specific files directly
23
+ - Use IDE refactoring tools to update all imports automatically
24
+ - Run tests to verify no broken imports
25
+ - Never create new subdirectory barrel exports
@@ -0,0 +1,28 @@
1
+ # avoid-eslint-disable: Never Suppress Warnings - Fix Root Causes
2
+
3
+ **Guideline:** Never use `eslint-disable`, `@ts-ignore`, or `any` types; fix root causes instead.
4
+
5
+ **Rationale:** Suppressing warnings hides architectural issues and creates technical debt.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ❌ WRONG: Suppress error
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ itemsRouter.openapi(listItemsRoute, itemsController.listItems as any);
13
+
14
+ // ✅ CORRECT: Fix type mismatch
15
+ itemsRouter.openapi(listItemsRoute, (c) => {
16
+ const {page, limit} = c.req.valid("query");
17
+ const {items, total} = itemsService.listItems(page, limit);
18
+ return c.json({items, pagination: {page, limit, total}}, 200);
19
+ });
20
+ ```
21
+
22
+ **Techniques:**
23
+ - Read error message carefully and understand what it indicates
24
+ - Research framework documentation and TypeScript behavior
25
+ - Refactor code to align with type expectations
26
+ - Never use `any`, `@ts-ignore`, or `eslint-disable` comments
27
+ - Verify fix resolves issue completely with type checking
28
+ - Run tests after refactoring to ensure correctness
@@ -0,0 +1,26 @@
1
+ # avoid-reexports: Import from Source Packages Directly
2
+
3
+ **Guideline:** Import directly from source packages, don't re-export external utilities through your modules.
4
+
5
+ **Rationale:** Re-exports obscure code origin and complicate dependency understanding.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ❌ Bad: Re-export from shared packages
11
+ // src/middlewares/jwt.ts
12
+ export {getUserId, type JwtContext} from "@acme/shared-utils";
13
+
14
+ // ✅ Good: Import directly from source
15
+ import {getUserId, type JwtContext} from "@acme/shared-utils";
16
+
17
+ // src/middlewares/jwt.ts - only local exports
18
+ ```
19
+
20
+ **Techniques:**
21
+ - Identify files re-exporting from external/shared packages
22
+ - Remove re-export statements from module exports
23
+ - Update consuming code to import directly from source packages
24
+ - Use IDE find-and-replace for bulk import updates
25
+ - Verify imports resolve correctly with type checking
26
+ - Run tests to ensure behavior unchanged
@@ -0,0 +1,29 @@
1
+ # env-access-bracket-notation: Use Dot Notation for process.env
2
+
3
+ **Guideline:** Use dot notation for `process.env` (not bracket notation) unless dynamic or special chars.
4
+
5
+ **Rationale:** Dot notation is more idiomatic and improves readability.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ❌ Bad: Bracket notation for static
11
+ const secret = process.env["JWT_SECRET"];
12
+
13
+ // ✅ Good: Dot notation for static
14
+ const secret = process.env.JWT_SECRET;
15
+
16
+ // OK: Bracket for dynamic keys
17
+ const configKey = "MY_VAR";
18
+ const value = process.env[configKey];
19
+
20
+ // OK: Bracket for special characters
21
+ const value = process.env["MY-VAR-WITH-DASHES"];
22
+ ```
23
+
24
+ **Techniques:**
25
+ - Replace all `process.env["VAR"]` with `process.env.VAR` for static keys
26
+ - Keep bracket notation only for dynamic keys or special characters
27
+ - Run ESLint to find @typescript-eslint/dot-notation violations
28
+ - Verify runtime behavior unchanged after conversion
29
+ - Update all affected import statements and config files
@@ -0,0 +1,30 @@
1
+ # numeric-separator-enforcement: Use Underscores in Large Numbers
2
+
3
+ **Guideline:** Use underscores in large numeric literals (e.g., `30_000`) for improved readability.
4
+
5
+ **Rationale:** Numeric separators improve readability and prevent misreading similar values.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ❌ Bad: Hard to read
11
+ const timeout = 30000;
12
+ const secondsPerDay = 86400;
13
+ const maxUsers = 1000000;
14
+
15
+ // ✅ Good: Clear and readable
16
+ const timeout = 30_000;
17
+ const secondsPerDay = 86_400;
18
+ const maxUsers = 1_000_000;
19
+
20
+ // OK: Smaller numbers don't need separators
21
+ const smallTimeout = 5000;
22
+ const port = 3000;
23
+ ```
24
+
25
+ **Techniques:**
26
+ - Add underscores for numbers >= 10_000 grouped by thousands
27
+ - Do not add separators for smaller numbers (< 10_000)
28
+ - Run ESLint to find numeric-separators-style violations
29
+ - Use consistent grouping by thousands (e.g., 1_000_000 not 100_0000)
30
+ - Verify numeric values are correct after adding separators
@@ -0,0 +1,26 @@
1
+ # template-literals-require-string-conversion: Explicitly Convert Numbers in Template Literals
2
+
3
+ **Guideline:** Explicitly convert numbers to strings in templates using `String(value)`, not implicit coercion.
4
+
5
+ **Rationale:** Explicit conversion is clearer and avoids relying on implicit type coercion.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ❌ Bad: Implicit number coercion
11
+ const port = 3000;
12
+ console.log(`Server running on port: ${port}`);
13
+
14
+ // ✅ Good: Explicit string conversion
15
+ const port = 3000;
16
+ console.log(`Server running on port: ${String(port)}`);
17
+
18
+ throw new Error(`Timeout after ${String(5000)}ms`);
19
+ ```
20
+
21
+ **Techniques:**
22
+ - Wrap numeric values in `String()` when using template literals
23
+ - Apply to all primitive types in templates (numbers, booleans)
24
+ - Run ESLint to find @typescript-eslint/restrict-template-expressions violations
25
+ - Replace `` `text: ${value}` `` with `` `text: ${String(value)}` ``
26
+ - Verify tests pass after adding explicit conversions
@@ -0,0 +1,32 @@
1
+ # unbound-method-references: Keep Object References for Method Calls
2
+
3
+ **Guideline:** Keep object reference when calling methods, don't destructure them.
4
+
5
+ **Rationale:** Destructuring methods breaks `this` binding and causes runtime errors.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ❌ Bad: Destructuring breaks this
11
+ const {injectWebSocket} = createNodeWebSocket({app});
12
+ injectWebSocket(server); // May fail
13
+
14
+ // ✅ Good: Keep object reference
15
+ const wsHelpers = createNodeWebSocket({app});
16
+ wsHelpers.injectWebSocket(server); // Maintains this binding
17
+
18
+ // ❌ Bad: DOM API destructuring
19
+ const {addEventListener} = document;
20
+ addEventListener("click", handler); // Fails
21
+
22
+ // ✅ Good: Use object reference
23
+ document.addEventListener("click", handler);
24
+ ```
25
+
26
+ **Techniques:**
27
+ - Never destructure methods: avoid `const {method} = object`
28
+ - Keep object reference: `const helpers = object`
29
+ - Call methods on object: `helpers.method()`
30
+ - Use object reference for DOM API calls
31
+ - Run ESLint to find @typescript-eslint/unbound-method violations
32
+ - Refactor destructured methods to keep object references
@@ -0,0 +1,37 @@
1
+ # unnecessary-async-keywords: Remove Async Keyword Without Await Usage
2
+
3
+ **Guideline:** Remove `async` from functions that don't use `await`; frameworks allow returning Promises directly.
4
+
5
+ **Rationale:** Unnecessary `async` adds overhead and creates false async expectations.
6
+
7
+ **Example:**
8
+
9
+ ```typescript
10
+ // ❌ Bad: async without await
11
+ async function getUser(id: string) {
12
+ return database.users.find(id);
13
+ }
14
+
15
+ // ✅ Good: Remove async, return Promise directly
16
+ function getUser(id: string) {
17
+ return database.users.find(id);
18
+ }
19
+
20
+ // ❌ Bad: Hono handler with async, no await
21
+ app.get("/users", async (c) => {
22
+ return c.json(getUsers());
23
+ });
24
+
25
+ // ✅ Good: Remove async
26
+ app.get("/users", (c) => {
27
+ return c.json(getUsers());
28
+ });
29
+ ```
30
+
31
+ **Techniques:**
32
+ - Run ESLint to find @typescript-eslint/require-await violations
33
+ - Remove `async` keyword for each flagged function
34
+ - Verify return types still match (Promises ok without `async`)
35
+ - Return Promise directly without `async` wrapper
36
+ - Run tests to ensure behavior unchanged
37
+ - Commit with clear explanation of changes
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: typescript-to-lua-guidelines
3
+ description: >-
4
+ Trigger on `.ts` files in game/scripting dirs with TSTL config. Use when transpiling TypeScript to Lua with TSTL 1.24+. Apply for game scripting, clean Lua output, multi-return functions. Keywords: TSTL, TypeScript-to-Lua, namespaces, LuaMultiReturn, decorators, stable tables, coroutines, Lua interop.
5
+ ---
6
+
7
+ # TypeScript-to-Lua Coding Guidelines
8
+
9
+ ## Requirements
10
+
11
+ - TSTL ≥ 1.24; TS strict mode; Lua ≥ 5.3 / LuaJIT 2.1.
12
+
13
+ ## Essentials
14
+
15
+ - **Code organization** - Favor namespaces/functions over classes for clean Lua output, see [reference/namespaces-vs-classes.md](reference/namespaces-vs-classes.md), [reference/function-patterns.md](reference/function-patterns.md)
16
+ - **Performance** - Keep tables stable, design for Lua GC and coroutines, see [reference/stable-tables.md](reference/stable-tables.md), [reference/coroutine-patterns.md](reference/coroutine-patterns.md)
17
+ - **TSTL features** - Use LuaMultiReturn, decorators when beneficial, see [reference/multi-return-functions.md](reference/multi-return-functions.md), [reference/tstl-decorators.md](reference/tstl-decorators.md)
18
+ - **Optimization** - Avoid heavy TypeScript features, see [reference/avoiding-heavy-features.md](reference/avoiding-heavy-features.md), [reference/performance-tips.md](reference/performance-tips.md)
19
+
20
+ ## Progressive disclosure
21
+
22
+ - Read [reference/namespaces-vs-classes.md](reference/namespaces-vs-classes.md) - When choosing code organization for clean Lua output
23
+ - Read [reference/multi-return-functions.md](reference/multi-return-functions.md) - When implementing Lua-style multiple return values
24
+ - Read [reference/function-patterns.md](reference/function-patterns.md) - When defining functions that transpile cleanly
25
+ - Read [reference/module-organization.md](reference/module-organization.md) - When structuring TSTL projects or exports
26
+ - Read [reference/stable-tables.md](reference/stable-tables.md) - When optimizing for Lua GC or JIT performance
27
+ - Read [reference/coroutine-patterns.md](reference/coroutine-patterns.md) - When implementing cooperative multitasking
28
+ - Read [reference/lua-interop.md](reference/lua-interop.md) - When calling Lua code from TypeScript
29
+ - Read [reference/tstl-decorators.md](reference/tstl-decorators.md) - When using TSTL-specific decorators
30
+ - Read [reference/performance-tips.md](reference/performance-tips.md) - When generated Lua code is slow or bloated
31
+ - Read [reference/type-safety.md](reference/type-safety.md) - When maintaining types across TS/Lua boundary
32
+ - Read [reference/avoiding-heavy-features.md](reference/avoiding-heavy-features.md) - When transpiled output is unexpectedly large
33
+ - Read [reference/tsconfig.md](reference/tsconfig.md) - When configuring TSTL compiler options
@@ -0,0 +1,41 @@
1
+ # avoiding-heavy-features: Avoiding Heavy TypeScript Features
2
+
3
+ **Guideline:** Avoid complex inheritance, async/await, and heavy OOP patterns that bloat Lua output.
4
+
5
+ **Rationale:** Complex features require substantial runtime support and generate verbose Lua. Simpler patterns align with Lua's lightweight nature.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // AVOID: Heavy inheritance
10
+ class Entity { move() {} }
11
+ class GameObject extends Entity { render() {} }
12
+ class Enemy extends GameObject { attack() {} }
13
+
14
+ // PREFER: Composition with namespaces
15
+ namespace Physics {
16
+ export interface Body { x: number; y: number }
17
+ export function move(b: Body, dx: number) { b.x += dx }
18
+ }
19
+
20
+ namespace Rendering {
21
+ export function render(b: Body) { /* draw */ }
22
+ }
23
+
24
+ // AVOID: async/await
25
+ async function loadData() { return await fetch() }
26
+
27
+ // PREFER: Generators (become coroutines in Lua)
28
+ function* loadData() {
29
+ const data = yield fetchAsync()
30
+ return data
31
+ }
32
+ ```
33
+
34
+ **Techniques:**
35
+ - Use composition patterns instead of inheritance to keep Lua output lightweight
36
+ - Replace async/await with callback functions or coroutines (not supported in Lua)
37
+ - Prefer interfaces and namespaces for code organization over class-based designs
38
+ - Design data structures as plain objects without methods or properties
39
+ - Use function* generators for cooperative multitasking instead of async APIs
40
+ - Keep class hierarchies shallow, prefer interfaces for type contracts
41
+ - Avoid decorators and complex OOP patterns that require runtime support
@@ -0,0 +1,49 @@
1
+ # coroutine-patterns: Coroutine-Friendly Patterns
2
+
3
+ **Guideline:** Design generators for seamless Lua coroutine integration without runtime overhead.
4
+
5
+ **Rationale:** Lua coroutines provide cooperative multitasking naturally. TypeScript generators compile to coroutines, enabling timers, sequences, and state machines.
6
+
7
+ **Example:**
8
+ ```typescript
9
+ // Timer using generator/coroutine
10
+ function* timer(seconds: number): Generator<void, void> {
11
+ let elapsed = 0
12
+ while (elapsed < seconds) {
13
+ const delta = yield // Receives delta-time from Lua
14
+ elapsed += delta
15
+ }
16
+ }
17
+
18
+ // Animation sequence
19
+ function* animatePosition(
20
+ target: { x: number },
21
+ endX: number,
22
+ duration: number
23
+ ): Generator<void, boolean> {
24
+ let elapsed = 0
25
+ const startX = target.x
26
+ while (elapsed < duration) {
27
+ const delta = yield
28
+ elapsed += delta
29
+ const progress = elapsed / duration
30
+ target.x = startX + (endX - startX) * progress
31
+ }
32
+ return true
33
+ }
34
+
35
+ // Chaining coroutines
36
+ function* sequence(): Generator<void, void> {
37
+ yield* timer(2) // Wait 2 seconds
38
+ yield* animatePosition(obj, 100, 1) // Animate 1 second
39
+ }
40
+ ```
41
+
42
+ **Techniques:**
43
+ - Use `function*` syntax to define generators that compile to Lua coroutines
44
+ - Yield control points with `yield` to pause execution and allow other tasks
45
+ - Accept delta-time as yield result to measure elapsed time accurately
46
+ - Return final values after completion to signal coroutine success or results
47
+ - Chain generators with `yield*` to compose coroutines without overhead
48
+ - Type generators as `Generator<YieldType, ReturnType>`
49
+ - Use for implementing timers, animations, state machines, and task sequences