@mytechtoday/augment-extensions 1.7.0 → 2.2.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 (440) hide show
  1. package/README.md +119 -8
  2. package/augment-extensions/coding-standards/bash/CHANGELOG.md +51 -0
  3. package/augment-extensions/coding-standards/bash/metadata.json +21 -0
  4. package/augment-extensions/coding-standards/c/metadata.json +50 -0
  5. package/augment-extensions/coding-standards/css/CHANGELOG.md +51 -0
  6. package/augment-extensions/coding-standards/css/metadata.json +30 -0
  7. package/augment-extensions/coding-standards/go/CHANGELOG.md +51 -0
  8. package/augment-extensions/coding-standards/go/metadata.json +57 -0
  9. package/augment-extensions/coding-standards/html/CHANGELOG.md +51 -0
  10. package/augment-extensions/coding-standards/html/metadata.json +25 -0
  11. package/augment-extensions/coding-standards/html-css-js/CHANGELOG.md +51 -0
  12. package/augment-extensions/coding-standards/html-css-js/metadata.json +40 -0
  13. package/augment-extensions/coding-standards/js/CHANGELOG.md +51 -0
  14. package/augment-extensions/coding-standards/js/metadata.json +37 -0
  15. package/augment-extensions/coding-standards/php/CHANGELOG.md +51 -0
  16. package/augment-extensions/coding-standards/php/metadata.json +35 -0
  17. package/augment-extensions/coding-standards/powershell/CHANGELOG.md +51 -0
  18. package/augment-extensions/coding-standards/powershell/metadata.json +33 -0
  19. package/augment-extensions/coding-standards/python/CHANGELOG.md +51 -0
  20. package/augment-extensions/coding-standards/python/metadata.json +38 -0
  21. package/augment-extensions/coding-standards/react/CHANGELOG.md +51 -0
  22. package/augment-extensions/coding-standards/react/metadata.json +31 -0
  23. package/augment-extensions/coding-standards/typescript/CHANGELOG.md +39 -0
  24. package/augment-extensions/coding-standards/typescript/README.md +248 -19
  25. package/augment-extensions/coding-standards/typescript/VERSION +2 -0
  26. package/augment-extensions/coding-standards/typescript/examples/biome.json +199 -0
  27. package/augment-extensions/coding-standards/typescript/examples/eslint-flat-config.js +166 -0
  28. package/augment-extensions/coding-standards/typescript/examples/monorepo-config/README.md +47 -0
  29. package/augment-extensions/coding-standards/typescript/examples/monorepo-config/package.json +37 -0
  30. package/augment-extensions/coding-standards/typescript/examples/monorepo-config/pnpm-workspace.yaml +5 -0
  31. package/augment-extensions/coding-standards/typescript/examples/monorepo-config/tsconfig.base.json +50 -0
  32. package/augment-extensions/coding-standards/typescript/examples/monorepo-config/turbo.json +47 -0
  33. package/augment-extensions/coding-standards/typescript/examples/vitest-setup.ts +198 -0
  34. package/augment-extensions/coding-standards/typescript/metadata.json +46 -0
  35. package/augment-extensions/coding-standards/typescript/module.json +25 -7
  36. package/augment-extensions/coding-standards/typescript/rules/architecture.md +1096 -0
  37. package/augment-extensions/coding-standards/typescript/rules/error-handling.md +1174 -0
  38. package/augment-extensions/coding-standards/typescript/rules/modern-features.md +625 -0
  39. package/augment-extensions/coding-standards/typescript/rules/monorepo.md +745 -0
  40. package/augment-extensions/coding-standards/typescript/rules/security-performance.md +850 -0
  41. package/augment-extensions/coding-standards/typescript/rules/testing.md +918 -0
  42. package/augment-extensions/coding-standards/typescript/rules/tooling.md +1071 -0
  43. package/augment-extensions/coding-standards/typescript/rules/type-patterns.md +750 -0
  44. package/augment-extensions/domain-rules/api-design/CHANGELOG.md +51 -0
  45. package/augment-extensions/domain-rules/api-design/metadata.json +32 -0
  46. package/augment-extensions/domain-rules/database/CHANGELOG.md +51 -0
  47. package/augment-extensions/domain-rules/database/metadata.json +50 -0
  48. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/CHANGELOG.md +51 -0
  49. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/metadata.json +18 -0
  50. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/CHANGELOG.md +51 -0
  51. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/metadata.json +18 -0
  52. package/augment-extensions/domain-rules/design/color/themes/dracula/CHANGELOG.md +51 -0
  53. package/augment-extensions/domain-rules/design/color/themes/dracula/metadata.json +18 -0
  54. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/CHANGELOG.md +51 -0
  55. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/metadata.json +18 -0
  56. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/CHANGELOG.md +51 -0
  57. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/metadata.json +18 -0
  58. package/augment-extensions/domain-rules/design/color/themes/high-contrast/CHANGELOG.md +51 -0
  59. package/augment-extensions/domain-rules/design/color/themes/high-contrast/metadata.json +18 -0
  60. package/augment-extensions/domain-rules/design/color/themes/monokai/CHANGELOG.md +51 -0
  61. package/augment-extensions/domain-rules/design/color/themes/monokai/metadata.json +18 -0
  62. package/augment-extensions/domain-rules/design/color/themes/nord/CHANGELOG.md +51 -0
  63. package/augment-extensions/domain-rules/design/color/themes/nord/metadata.json +18 -0
  64. package/augment-extensions/domain-rules/design/color/themes/one-dark/CHANGELOG.md +51 -0
  65. package/augment-extensions/domain-rules/design/color/themes/one-dark/metadata.json +18 -0
  66. package/augment-extensions/domain-rules/design/color/themes/one-light/CHANGELOG.md +51 -0
  67. package/augment-extensions/domain-rules/design/color/themes/one-light/metadata.json +18 -0
  68. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/CHANGELOG.md +51 -0
  69. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/metadata.json +18 -0
  70. package/augment-extensions/domain-rules/design/color/themes/solarized-light/CHANGELOG.md +51 -0
  71. package/augment-extensions/domain-rules/design/color/themes/solarized-light/metadata.json +18 -0
  72. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/CHANGELOG.md +51 -0
  73. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/metadata.json +18 -0
  74. package/augment-extensions/domain-rules/mcp/CHANGELOG.md +51 -0
  75. package/augment-extensions/domain-rules/mcp/metadata.json +42 -0
  76. package/augment-extensions/domain-rules/security/CHANGELOG.md +51 -0
  77. package/augment-extensions/domain-rules/security/metadata.json +33 -0
  78. package/augment-extensions/domain-rules/seo-sales-marketing/CHANGELOG.md +51 -0
  79. package/augment-extensions/domain-rules/seo-sales-marketing/metadata.json +40 -0
  80. package/augment-extensions/domain-rules/software-architecture/CHANGELOG.md +51 -0
  81. package/augment-extensions/domain-rules/software-architecture/metadata.json +55 -0
  82. package/augment-extensions/domain-rules/wordpress/CHANGELOG.md +51 -0
  83. package/augment-extensions/domain-rules/wordpress/metadata.json +42 -0
  84. package/augment-extensions/domain-rules/wordpress-plugin/CHANGELOG.md +51 -0
  85. package/augment-extensions/domain-rules/wordpress-plugin/metadata.json +70 -0
  86. package/augment-extensions/examples/design-patterns/CHANGELOG.md +51 -0
  87. package/augment-extensions/examples/design-patterns/metadata.json +29 -0
  88. package/augment-extensions/examples/gutenberg-block-plugin/CHANGELOG.md +51 -0
  89. package/augment-extensions/examples/gutenberg-block-plugin/metadata.json +26 -0
  90. package/augment-extensions/examples/rest-api-plugin/CHANGELOG.md +51 -0
  91. package/augment-extensions/examples/rest-api-plugin/metadata.json +27 -0
  92. package/augment-extensions/examples/woocommerce-extension/CHANGELOG.md +51 -0
  93. package/augment-extensions/examples/woocommerce-extension/metadata.json +27 -0
  94. package/augment-extensions/visual-design/metadata.json +34 -0
  95. package/augment-extensions/workflows/adr-support/CHANGELOG.md +51 -0
  96. package/augment-extensions/workflows/adr-support/metadata.json +41 -0
  97. package/augment-extensions/workflows/beads/CHANGELOG.md +51 -0
  98. package/augment-extensions/workflows/beads/metadata.json +23 -0
  99. package/augment-extensions/workflows/beads-integration/CHANGELOG.md +51 -0
  100. package/augment-extensions/workflows/beads-integration/metadata.json +30 -0
  101. package/augment-extensions/workflows/database/CHANGELOG.md +51 -0
  102. package/augment-extensions/workflows/database/metadata.json +30 -0
  103. package/augment-extensions/workflows/wordpress-plugin/CHANGELOG.md +51 -0
  104. package/augment-extensions/workflows/wordpress-plugin/metadata.json +41 -0
  105. package/augment-extensions/writing-standards/literature/shakespeare/CHANGELOG.md +51 -0
  106. package/augment-extensions/writing-standards/literature/shakespeare/metadata.json +60 -0
  107. package/augment-extensions/writing-standards/screenplay/CHANGELOG.md +51 -0
  108. package/augment-extensions/writing-standards/screenplay/cinematic-styles/CHANGELOG.md +51 -0
  109. package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/CHANGELOG.md +51 -0
  110. package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/metadata.json +24 -0
  111. package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/monty-python/CHANGELOG.md +51 -0
  112. package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/monty-python/metadata.json +24 -0
  113. package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/saturday-night-live/CHANGELOG.md +51 -0
  114. package/augment-extensions/writing-standards/screenplay/cinematic-styles/comedy-formats/saturday-night-live/metadata.json +24 -0
  115. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/CHANGELOG.md +51 -0
  116. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/alfred-hitchcock/CHANGELOG.md +51 -0
  117. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/alfred-hitchcock/metadata.json +24 -0
  118. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/ari-aster/CHANGELOG.md +51 -0
  119. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/ari-aster/metadata.json +24 -0
  120. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/brad-bird/CHANGELOG.md +51 -0
  121. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/brad-bird/metadata.json +24 -0
  122. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/brian-de-palma/CHANGELOG.md +51 -0
  123. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/brian-de-palma/metadata.json +24 -0
  124. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/buster-keaton/CHANGELOG.md +51 -0
  125. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/buster-keaton/metadata.json +24 -0
  126. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/christopher-nolan/CHANGELOG.md +51 -0
  127. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/christopher-nolan/metadata.json +24 -0
  128. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/clint-eastwood/CHANGELOG.md +51 -0
  129. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/clint-eastwood/metadata.json +24 -0
  130. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/coen-brothers/CHANGELOG.md +51 -0
  131. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/coen-brothers/metadata.json +24 -0
  132. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/darren-aronofsky/CHANGELOG.md +51 -0
  133. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/darren-aronofsky/metadata.json +24 -0
  134. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/david-fincher/CHANGELOG.md +51 -0
  135. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/david-fincher/metadata.json +24 -0
  136. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/david-lynch/CHANGELOG.md +51 -0
  137. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/david-lynch/metadata.json +24 -0
  138. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/denis-villeneuve/CHANGELOG.md +51 -0
  139. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/denis-villeneuve/metadata.json +24 -0
  140. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/francis-ford-coppola/CHANGELOG.md +51 -0
  141. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/francis-ford-coppola/metadata.json +24 -0
  142. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/gary-marshall/CHANGELOG.md +51 -0
  143. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/gary-marshall/metadata.json +24 -0
  144. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/george-a-romero/CHANGELOG.md +51 -0
  145. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/george-a-romero/metadata.json +24 -0
  146. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/george-lucas/CHANGELOG.md +51 -0
  147. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/george-lucas/metadata.json +24 -0
  148. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/guillermo-del-toro/CHANGELOG.md +51 -0
  149. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/guillermo-del-toro/metadata.json +24 -0
  150. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/gus-van-sant/CHANGELOG.md +51 -0
  151. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/gus-van-sant/metadata.json +24 -0
  152. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/james-ivory-ismail-merchant/CHANGELOG.md +51 -0
  153. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/james-ivory-ismail-merchant/metadata.json +24 -0
  154. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/jim-jarmusch/CHANGELOG.md +51 -0
  155. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/jim-jarmusch/metadata.json +24 -0
  156. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-carpenter/CHANGELOG.md +51 -0
  157. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-carpenter/metadata.json +24 -0
  158. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-ford/CHANGELOG.md +51 -0
  159. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-ford/metadata.json +24 -0
  160. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-huston/CHANGELOG.md +51 -0
  161. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-huston/metadata.json +24 -0
  162. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-landis/CHANGELOG.md +51 -0
  163. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/john-landis/metadata.json +24 -0
  164. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/jonathan-demme/CHANGELOG.md +51 -0
  165. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/jonathan-demme/metadata.json +24 -0
  166. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/joseph-l-mankiewicz/CHANGELOG.md +51 -0
  167. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/joseph-l-mankiewicz/metadata.json +24 -0
  168. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kathryn-bigelow/CHANGELOG.md +51 -0
  169. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kathryn-bigelow/metadata.json +24 -0
  170. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kelly-reichardt/CHANGELOG.md +51 -0
  171. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kelly-reichardt/metadata.json +24 -0
  172. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kevin-smith/CHANGELOG.md +51 -0
  173. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/kevin-smith/metadata.json +24 -0
  174. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/linda-shayne/CHANGELOG.md +51 -0
  175. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/linda-shayne/metadata.json +24 -0
  176. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/martin-scorsese/CHANGELOG.md +51 -0
  177. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/martin-scorsese/metadata.json +24 -0
  178. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/mel-brooks/CHANGELOG.md +51 -0
  179. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/mel-brooks/metadata.json +24 -0
  180. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/metadata.json +25 -0
  181. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/michael-curtiz/CHANGELOG.md +51 -0
  182. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/michael-curtiz/metadata.json +24 -0
  183. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/michael-mann/CHANGELOG.md +51 -0
  184. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/michael-mann/metadata.json +24 -0
  185. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/mike-nichols/CHANGELOG.md +51 -0
  186. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/mike-nichols/metadata.json +24 -0
  187. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/orson-welles/CHANGELOG.md +51 -0
  188. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/orson-welles/metadata.json +24 -0
  189. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/park-chan-wook/CHANGELOG.md +51 -0
  190. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/park-chan-wook/metadata.json +24 -0
  191. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/paul-thomas-anderson/CHANGELOG.md +51 -0
  192. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/paul-thomas-anderson/metadata.json +24 -0
  193. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/penny-marshall/CHANGELOG.md +51 -0
  194. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/penny-marshall/metadata.json +24 -0
  195. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/peter-bogdanovich/CHANGELOG.md +51 -0
  196. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/peter-bogdanovich/metadata.json +24 -0
  197. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/quentin-tarantino/CHANGELOG.md +51 -0
  198. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/quentin-tarantino/metadata.json +24 -0
  199. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/richard-linklater/CHANGELOG.md +51 -0
  200. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/richard-linklater/metadata.json +24 -0
  201. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/rob-reiner/CHANGELOG.md +51 -0
  202. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/rob-reiner/metadata.json +24 -0
  203. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-altman/CHANGELOG.md +51 -0
  204. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-altman/metadata.json +24 -0
  205. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-eggers/CHANGELOG.md +51 -0
  206. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-eggers/metadata.json +24 -0
  207. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-zemeckis/CHANGELOG.md +51 -0
  208. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/robert-zemeckis/metadata.json +24 -0
  209. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sam-peckinpah/CHANGELOG.md +51 -0
  210. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sam-peckinpah/metadata.json +24 -0
  211. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sidney-lumet/CHANGELOG.md +51 -0
  212. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sidney-lumet/metadata.json +24 -0
  213. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/spike-lee/CHANGELOG.md +51 -0
  214. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/spike-lee/metadata.json +24 -0
  215. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/stanley-donen-gene-kelly/CHANGELOG.md +51 -0
  216. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/stanley-donen-gene-kelly/metadata.json +24 -0
  217. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/stanley-kubrick/CHANGELOG.md +51 -0
  218. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/stanley-kubrick/metadata.json +24 -0
  219. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/steve-martin/CHANGELOG.md +51 -0
  220. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/steve-martin/metadata.json +24 -0
  221. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/steven-spielberg/CHANGELOG.md +51 -0
  222. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/steven-spielberg/metadata.json +24 -0
  223. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sydney-pollack/CHANGELOG.md +51 -0
  224. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/sydney-pollack/metadata.json +24 -0
  225. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/terry-gilliam/CHANGELOG.md +51 -0
  226. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/terry-gilliam/metadata.json +24 -0
  227. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/tim-burton/CHANGELOG.md +51 -0
  228. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/tim-burton/metadata.json +24 -0
  229. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/tobe-hooper/CHANGELOG.md +51 -0
  230. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/tobe-hooper/metadata.json +24 -0
  231. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/wes-anderson/CHANGELOG.md +51 -0
  232. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/wes-anderson/metadata.json +24 -0
  233. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/william-friedkin/CHANGELOG.md +51 -0
  234. package/augment-extensions/writing-standards/screenplay/cinematic-styles/directors/william-friedkin/metadata.json +24 -0
  235. package/augment-extensions/writing-standards/screenplay/cinematic-styles/films/CHANGELOG.md +51 -0
  236. package/augment-extensions/writing-standards/screenplay/cinematic-styles/films/blue-ruin/CHANGELOG.md +51 -0
  237. package/augment-extensions/writing-standards/screenplay/cinematic-styles/films/blue-ruin/metadata.json +24 -0
  238. package/augment-extensions/writing-standards/screenplay/cinematic-styles/films/metadata.json +24 -0
  239. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/CHANGELOG.md +51 -0
  240. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/fast-and-furious/CHANGELOG.md +51 -0
  241. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/fast-and-furious/metadata.json +24 -0
  242. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/harry-potter/CHANGELOG.md +51 -0
  243. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/harry-potter/metadata.json +24 -0
  244. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/james-bond/CHANGELOG.md +51 -0
  245. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/james-bond/metadata.json +24 -0
  246. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/john-wick/CHANGELOG.md +51 -0
  247. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/john-wick/metadata.json +24 -0
  248. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/lord-of-the-rings/CHANGELOG.md +51 -0
  249. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/lord-of-the-rings/metadata.json +24 -0
  250. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/mcu/CHANGELOG.md +51 -0
  251. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/mcu/metadata.json +25 -0
  252. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/metadata.json +25 -0
  253. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/star-trek/CHANGELOG.md +51 -0
  254. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/star-trek/metadata.json +33 -0
  255. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/star-wars/CHANGELOG.md +51 -0
  256. package/augment-extensions/writing-standards/screenplay/cinematic-styles/franchises/star-wars/metadata.json +24 -0
  257. package/augment-extensions/writing-standards/screenplay/cinematic-styles/metadata.json +50 -0
  258. package/augment-extensions/writing-standards/screenplay/cinematic-styles/narrative-theory/CHANGELOG.md +51 -0
  259. package/augment-extensions/writing-standards/screenplay/cinematic-styles/narrative-theory/joseph-campbell/CHANGELOG.md +51 -0
  260. package/augment-extensions/writing-standards/screenplay/cinematic-styles/narrative-theory/joseph-campbell/metadata.json +24 -0
  261. package/augment-extensions/writing-standards/screenplay/cinematic-styles/narrative-theory/metadata.json +24 -0
  262. package/augment-extensions/writing-standards/screenplay/cinematic-styles/producers/CHANGELOG.md +51 -0
  263. package/augment-extensions/writing-standards/screenplay/cinematic-styles/producers/bruckheimer-and-simpson/CHANGELOG.md +51 -0
  264. package/augment-extensions/writing-standards/screenplay/cinematic-styles/producers/bruckheimer-and-simpson/metadata.json +24 -0
  265. package/augment-extensions/writing-standards/screenplay/cinematic-styles/producers/metadata.json +23 -0
  266. package/augment-extensions/writing-standards/screenplay/genres/CHANGELOG.md +51 -0
  267. package/augment-extensions/writing-standards/screenplay/genres/metadata.json +43 -0
  268. package/augment-extensions/writing-standards/screenplay/metadata.json +65 -0
  269. package/augment-extensions/writing-standards/screenplay/styles/CHANGELOG.md +51 -0
  270. package/augment-extensions/writing-standards/screenplay/styles/metadata.json +38 -0
  271. package/augment-extensions/writing-standards/screenplay/themes/CHANGELOG.md +51 -0
  272. package/augment-extensions/writing-standards/screenplay/themes/metadata.json +47 -0
  273. package/cli/dist/__test_health-checker.d.ts +2 -0
  274. package/cli/dist/__test_health-checker.d.ts.map +1 -0
  275. package/cli/dist/__test_health-checker.js +4 -0
  276. package/cli/dist/__test_health-checker.js.map +1 -0
  277. package/cli/dist/__test_template-engine.d.ts +2 -0
  278. package/cli/dist/__test_template-engine.d.ts.map +1 -0
  279. package/cli/dist/__test_template-engine.js +4 -0
  280. package/cli/dist/__test_template-engine.js.map +1 -0
  281. package/cli/dist/cli.js +25 -0
  282. package/cli/dist/cli.js.map +1 -1
  283. package/cli/dist/commands/generate-shot-list/generator/index.d.ts +8 -2
  284. package/cli/dist/commands/generate-shot-list/generator/index.d.ts.map +1 -1
  285. package/cli/dist/commands/generate-shot-list/generator/index.js +28 -3
  286. package/cli/dist/commands/generate-shot-list/generator/index.js.map +1 -1
  287. package/cli/dist/commands/generate-shot-list/generator/types.d.ts +3 -0
  288. package/cli/dist/commands/generate-shot-list/generator/types.d.ts.map +1 -1
  289. package/cli/dist/commands/generate-shot-list/help-text.d.ts +1 -1
  290. package/cli/dist/commands/generate-shot-list/help-text.d.ts.map +1 -1
  291. package/cli/dist/commands/generate-shot-list/help-text.js +48 -5
  292. package/cli/dist/commands/generate-shot-list/help-text.js.map +1 -1
  293. package/cli/dist/commands/generate-shot-list/logger/jsonl-writer.d.ts +11 -1
  294. package/cli/dist/commands/generate-shot-list/logger/jsonl-writer.d.ts.map +1 -1
  295. package/cli/dist/commands/generate-shot-list/logger/jsonl-writer.js +61 -1
  296. package/cli/dist/commands/generate-shot-list/logger/jsonl-writer.js.map +1 -1
  297. package/cli/dist/commands/generate-shot-list/parser/docx-parser.d.ts +29 -0
  298. package/cli/dist/commands/generate-shot-list/parser/docx-parser.d.ts.map +1 -0
  299. package/cli/dist/commands/generate-shot-list/parser/docx-parser.js +111 -0
  300. package/cli/dist/commands/generate-shot-list/parser/docx-parser.js.map +1 -0
  301. package/cli/dist/commands/generate-shot-list/parser/finaldraft-parser.d.ts +18 -0
  302. package/cli/dist/commands/generate-shot-list/parser/finaldraft-parser.d.ts.map +1 -0
  303. package/cli/dist/commands/generate-shot-list/parser/finaldraft-parser.js +184 -0
  304. package/cli/dist/commands/generate-shot-list/parser/finaldraft-parser.js.map +1 -0
  305. package/cli/dist/commands/generate-shot-list/parser/index.d.ts +4 -3
  306. package/cli/dist/commands/generate-shot-list/parser/index.d.ts.map +1 -1
  307. package/cli/dist/commands/generate-shot-list/parser/index.js +54 -3
  308. package/cli/dist/commands/generate-shot-list/parser/index.js.map +1 -1
  309. package/cli/dist/commands/generate-shot-list/parser/pdf-parser.d.ts +24 -0
  310. package/cli/dist/commands/generate-shot-list/parser/pdf-parser.d.ts.map +1 -0
  311. package/cli/dist/commands/generate-shot-list/parser/pdf-parser.js +84 -0
  312. package/cli/dist/commands/generate-shot-list/parser/pdf-parser.js.map +1 -0
  313. package/cli/dist/commands/generate-shot-list/parser/rtf-parser.d.ts +28 -0
  314. package/cli/dist/commands/generate-shot-list/parser/rtf-parser.d.ts.map +1 -0
  315. package/cli/dist/commands/generate-shot-list/parser/rtf-parser.js +143 -0
  316. package/cli/dist/commands/generate-shot-list/parser/rtf-parser.js.map +1 -0
  317. package/cli/dist/commands/generate-shot-list/parser/types.d.ts +9 -6
  318. package/cli/dist/commands/generate-shot-list/parser/types.d.ts.map +1 -1
  319. package/cli/dist/commands/generate-shot-list/parser/types.js.map +1 -1
  320. package/cli/dist/commands/generate-shot-list/style/guideline-parser.d.ts +36 -0
  321. package/cli/dist/commands/generate-shot-list/style/guideline-parser.d.ts.map +1 -0
  322. package/cli/dist/commands/generate-shot-list/style/guideline-parser.js +108 -0
  323. package/cli/dist/commands/generate-shot-list/style/guideline-parser.js.map +1 -0
  324. package/cli/dist/commands/generate-shot-list/style/index.d.ts +39 -0
  325. package/cli/dist/commands/generate-shot-list/style/index.d.ts.map +1 -0
  326. package/cli/dist/commands/generate-shot-list/style/index.js +85 -0
  327. package/cli/dist/commands/generate-shot-list/style/index.js.map +1 -0
  328. package/cli/dist/commands/generate-shot-list/style/style-loader.d.ts +35 -0
  329. package/cli/dist/commands/generate-shot-list/style/style-loader.d.ts.map +1 -0
  330. package/cli/dist/commands/generate-shot-list/style/style-loader.js +178 -0
  331. package/cli/dist/commands/generate-shot-list/style/style-loader.js.map +1 -0
  332. package/cli/dist/commands/generate-shot-list/style/style-merger.d.ts +36 -0
  333. package/cli/dist/commands/generate-shot-list/style/style-merger.d.ts.map +1 -0
  334. package/cli/dist/commands/generate-shot-list/style/style-merger.js +123 -0
  335. package/cli/dist/commands/generate-shot-list/style/style-merger.js.map +1 -0
  336. package/cli/dist/commands/generate-shot-list/style/types.d.ts +105 -0
  337. package/cli/dist/commands/generate-shot-list/style/types.d.ts.map +1 -0
  338. package/cli/dist/commands/generate-shot-list/style/types.js +8 -0
  339. package/cli/dist/commands/generate-shot-list/style/types.js.map +1 -0
  340. package/cli/dist/commands/generate-shot-list.d.ts +1 -0
  341. package/cli/dist/commands/generate-shot-list.d.ts.map +1 -1
  342. package/cli/dist/commands/generate-shot-list.js +44 -1
  343. package/cli/dist/commands/generate-shot-list.js.map +1 -1
  344. package/cli/dist/commands/list.d.ts +1 -0
  345. package/cli/dist/commands/list.d.ts.map +1 -1
  346. package/cli/dist/commands/list.js +21 -5
  347. package/cli/dist/commands/list.js.map +1 -1
  348. package/cli/dist/commands/upgrade.d.ts +15 -0
  349. package/cli/dist/commands/upgrade.d.ts.map +1 -0
  350. package/cli/dist/commands/upgrade.js +229 -0
  351. package/cli/dist/commands/upgrade.js.map +1 -0
  352. package/cli/dist/commands/use.d.ts +15 -0
  353. package/cli/dist/commands/use.d.ts.map +1 -0
  354. package/cli/dist/commands/use.js +180 -0
  355. package/cli/dist/commands/use.js.map +1 -0
  356. package/cli/dist/commands/version-info.d.ts +15 -0
  357. package/cli/dist/commands/version-info.d.ts.map +1 -0
  358. package/cli/dist/commands/version-info.js +194 -0
  359. package/cli/dist/commands/version-info.js.map +1 -0
  360. package/cli/dist/core/compatibility-checker.d.ts +73 -0
  361. package/cli/dist/core/compatibility-checker.d.ts.map +1 -0
  362. package/cli/dist/core/compatibility-checker.js +188 -0
  363. package/cli/dist/core/compatibility-checker.js.map +1 -0
  364. package/cli/dist/core/index.d.ts +9 -0
  365. package/cli/dist/core/index.d.ts.map +1 -0
  366. package/cli/dist/core/index.js +16 -0
  367. package/cli/dist/core/index.js.map +1 -0
  368. package/cli/dist/core/module-loader.d.ts +68 -0
  369. package/cli/dist/core/module-loader.d.ts.map +1 -0
  370. package/cli/dist/core/module-loader.js +137 -0
  371. package/cli/dist/core/module-loader.js.map +1 -0
  372. package/cli/dist/core/version-manager.d.ts +62 -0
  373. package/cli/dist/core/version-manager.d.ts.map +1 -0
  374. package/cli/dist/core/version-manager.js +157 -0
  375. package/cli/dist/core/version-manager.js.map +1 -0
  376. package/cli/dist/core/version-resolver.d.ts +63 -0
  377. package/cli/dist/core/version-resolver.d.ts.map +1 -0
  378. package/cli/dist/core/version-resolver.js +163 -0
  379. package/cli/dist/core/version-resolver.js.map +1 -0
  380. package/cli/dist/gui/app.d.ts +17 -0
  381. package/cli/dist/gui/app.d.ts.map +1 -0
  382. package/cli/dist/gui/app.js +79 -0
  383. package/cli/dist/gui/app.js.map +1 -0
  384. package/cli/dist/gui/components/preview-pane.d.ts +40 -0
  385. package/cli/dist/gui/components/preview-pane.d.ts.map +1 -0
  386. package/cli/dist/gui/components/preview-pane.js +90 -0
  387. package/cli/dist/gui/components/preview-pane.js.map +1 -0
  388. package/cli/dist/gui/components/search-filter.d.ts +26 -0
  389. package/cli/dist/gui/components/search-filter.d.ts.map +1 -0
  390. package/cli/dist/gui/components/search-filter.js +168 -0
  391. package/cli/dist/gui/components/search-filter.js.map +1 -0
  392. package/cli/dist/gui/components/status-bar.d.ts +22 -0
  393. package/cli/dist/gui/components/status-bar.d.ts.map +1 -0
  394. package/cli/dist/gui/components/status-bar.js +58 -0
  395. package/cli/dist/gui/components/status-bar.js.map +1 -0
  396. package/cli/dist/gui/components/tree-navigator.d.ts +30 -0
  397. package/cli/dist/gui/components/tree-navigator.d.ts.map +1 -0
  398. package/cli/dist/gui/components/tree-navigator.js +133 -0
  399. package/cli/dist/gui/components/tree-navigator.js.map +1 -0
  400. package/cli/dist/gui/components/version-selector.d.ts +27 -0
  401. package/cli/dist/gui/components/version-selector.d.ts.map +1 -0
  402. package/cli/dist/gui/components/version-selector.js +110 -0
  403. package/cli/dist/gui/components/version-selector.js.map +1 -0
  404. package/cli/dist/gui/hooks/use-version-loader.d.ts +25 -0
  405. package/cli/dist/gui/hooks/use-version-loader.d.ts.map +1 -0
  406. package/cli/dist/gui/hooks/use-version-loader.js +116 -0
  407. package/cli/dist/gui/hooks/use-version-loader.js.map +1 -0
  408. package/cli/dist/gui/index.d.ts +15 -0
  409. package/cli/dist/gui/index.d.ts.map +1 -0
  410. package/cli/dist/gui/index.js +39 -0
  411. package/cli/dist/gui/index.js.map +1 -0
  412. package/cli/dist/gui/layouts/main-layout.d.ts +14 -0
  413. package/cli/dist/gui/layouts/main-layout.d.ts.map +1 -0
  414. package/cli/dist/gui/layouts/main-layout.js +205 -0
  415. package/cli/dist/gui/layouts/main-layout.js.map +1 -0
  416. package/cli/dist/gui/state/navigation-state.d.ts +39 -0
  417. package/cli/dist/gui/state/navigation-state.d.ts.map +1 -0
  418. package/cli/dist/gui/state/navigation-state.js +151 -0
  419. package/cli/dist/gui/state/navigation-state.js.map +1 -0
  420. package/cli/dist/gui/state/selection-state.d.ts +36 -0
  421. package/cli/dist/gui/state/selection-state.d.ts.map +1 -0
  422. package/cli/dist/gui/state/selection-state.js +132 -0
  423. package/cli/dist/gui/state/selection-state.js.map +1 -0
  424. package/cli/dist/gui/theme.d.ts +50 -0
  425. package/cli/dist/gui/theme.d.ts.map +1 -0
  426. package/cli/dist/gui/theme.js +73 -0
  427. package/cli/dist/gui/theme.js.map +1 -0
  428. package/cli/dist/utils/help.d.ts +13 -0
  429. package/cli/dist/utils/help.d.ts.map +1 -0
  430. package/cli/dist/utils/help.js +137 -0
  431. package/cli/dist/utils/help.js.map +1 -0
  432. package/cli/dist/utils/module-system.d.ts +8 -0
  433. package/cli/dist/utils/module-system.d.ts.map +1 -1
  434. package/cli/dist/utils/module-system.js +38 -3
  435. package/cli/dist/utils/module-system.js.map +1 -1
  436. package/cli/dist/utils/validate-versioning.d.ts +43 -0
  437. package/cli/dist/utils/validate-versioning.d.ts.map +1 -0
  438. package/cli/dist/utils/validate-versioning.js +258 -0
  439. package/cli/dist/utils/validate-versioning.js.map +1 -0
  440. package/package.json +10 -1
@@ -0,0 +1,750 @@
1
+ # Advanced Type Patterns
2
+
3
+ Comprehensive guide to advanced TypeScript type patterns for building robust, type-safe applications.
4
+
5
+ ## Table of Contents
6
+ - [Branded Types](#branded-types)
7
+ - [Discriminated Unions](#discriminated-unions)
8
+ - [Type-Level Programming](#type-level-programming)
9
+ - [Opaque Types](#opaque-types)
10
+ - [Recursive Conditional Types](#recursive-conditional-types)
11
+ - [Mapped Types](#mapped-types)
12
+ - [Utility Type Patterns](#utility-type-patterns)
13
+
14
+ ---
15
+
16
+ ## Branded Types
17
+
18
+ Branded types (also called nominal types) prevent accidental mixing of structurally identical types.
19
+
20
+ ### Basic Branded Type
21
+
22
+ ```typescript
23
+ // ✅ Create branded types using unique symbols
24
+ type Brand<K, T> = K & { __brand: T };
25
+
26
+ type UserId = Brand<number, 'UserId'>;
27
+ type ProductId = Brand<number, 'ProductId'>;
28
+ type OrderId = Brand<number, 'OrderId'>;
29
+
30
+ // Helper functions to create branded values
31
+ function createUserId(id: number): UserId {
32
+ return id as UserId;
33
+ }
34
+
35
+ function createProductId(id: number): ProductId {
36
+ return id as ProductId;
37
+ }
38
+
39
+ // Usage
40
+ const userId = createUserId(123);
41
+ const productId = createProductId(456);
42
+
43
+ function getUserById(id: UserId): User {
44
+ // Implementation
45
+ }
46
+
47
+ getUserById(userId); // ✅ OK
48
+ getUserById(productId); // ❌ Error: Argument of type 'ProductId' is not assignable to parameter of type 'UserId'
49
+ getUserById(123); // ❌ Error: Argument of type 'number' is not assignable to parameter of type 'UserId'
50
+ ```
51
+
52
+ ### Email Validation with Branded Types
53
+
54
+ ```typescript
55
+ // ✅ Type-safe email addresses
56
+ type Email = Brand<string, 'Email'>;
57
+
58
+ function createEmail(value: string): Email | null {
59
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
60
+ return emailRegex.test(value) ? (value as Email) : null;
61
+ }
62
+
63
+ function sendEmail(to: Email, subject: string, body: string): void {
64
+ console.log(`Sending email to ${to}`);
65
+ }
66
+
67
+ const email = createEmail('user@example.com');
68
+ if (email) {
69
+ sendEmail(email, 'Hello', 'World'); // ✅ OK
70
+ }
71
+
72
+ sendEmail('invalid@', 'Hello', 'World'); // ❌ Error: Argument of type 'string' is not assignable to parameter of type 'Email'
73
+ ```
74
+
75
+ ### URL Validation
76
+
77
+ ```typescript
78
+ // ✅ Type-safe URLs
79
+ type URL = Brand<string, 'URL'>;
80
+
81
+ function createURL(value: string): URL | null {
82
+ try {
83
+ new globalThis.URL(value);
84
+ return value as URL;
85
+ } catch {
86
+ return null;
87
+ }
88
+ }
89
+
90
+ function fetchData(url: URL): Promise<Response> {
91
+ return fetch(url);
92
+ }
93
+
94
+ const url = createURL('https://api.example.com/users');
95
+ if (url) {
96
+ fetchData(url); // ✅ OK
97
+ }
98
+
99
+ fetchData('not-a-url'); // ❌ Error
100
+ ```
101
+
102
+ ### Positive Numbers
103
+
104
+ ```typescript
105
+ // ✅ Branded type for positive numbers
106
+ type PositiveNumber = Brand<number, 'PositiveNumber'>;
107
+
108
+ function createPositiveNumber(value: number): PositiveNumber | null {
109
+ return value > 0 ? (value as PositiveNumber) : null;
110
+ }
111
+
112
+ function calculateDiscount(price: PositiveNumber, percentage: PositiveNumber): number {
113
+ return price * (percentage / 100);
114
+ }
115
+
116
+ const price = createPositiveNumber(100);
117
+ const discount = createPositiveNumber(10);
118
+
119
+ if (price && discount) {
120
+ calculateDiscount(price, discount); // ✅ OK
121
+ }
122
+
123
+ calculateDiscount(100, 10); // ❌ Error
124
+ calculateDiscount(-50, 10); // ❌ Error (caught at runtime by createPositiveNumber)
125
+ ```
126
+
127
+ ---
128
+
129
+ ## Discriminated Unions
130
+
131
+ Discriminated unions (tagged unions) enable type-safe handling of different variants.
132
+
133
+ ### Basic Discriminated Union
134
+
135
+ ```typescript
136
+ // ✅ Define discriminated union with type field
137
+ type Success<T> = {
138
+ type: 'success';
139
+ data: T;
140
+ };
141
+
142
+ type Error = {
143
+ type: 'error';
144
+ error: string;
145
+ code: number;
146
+ };
147
+
148
+ type Loading = {
149
+ type: 'loading';
150
+ };
151
+
152
+ type Result<T> = Success<T> | Error | Loading;
153
+
154
+ // Type-safe handling
155
+ function handleResult<T>(result: Result<T>): void {
156
+ switch (result.type) {
157
+ case 'success':
158
+ console.log(result.data); // ✅ TypeScript knows result is Success<T>
159
+ break;
160
+ case 'error':
161
+ console.log(result.error, result.code); // ✅ TypeScript knows result is Error
162
+ break;
163
+ case 'loading':
164
+ console.log('Loading...'); // ✅ TypeScript knows result is Loading
165
+ break;
166
+ }
167
+ }
168
+ ```
169
+
170
+ ### API Response Pattern
171
+
172
+ ```typescript
173
+ // ✅ Type-safe API responses
174
+ type ApiSuccess<T> = {
175
+ status: 'success';
176
+ data: T;
177
+ timestamp: Date;
178
+ };
179
+
180
+ type ApiError = {
181
+ status: 'error';
182
+ message: string;
183
+ code: number;
184
+ details?: Record<string, unknown>;
185
+ };
186
+
187
+ type ApiResponse<T> = ApiSuccess<T> | ApiError;
188
+
189
+ async function fetchUser(id: number): Promise<ApiResponse<User>> {
190
+ try {
191
+ const response = await fetch(`/api/users/${id}`);
192
+ const data = await response.json();
193
+ return {
194
+ status: 'success',
195
+ data,
196
+ timestamp: new Date()
197
+ };
198
+ } catch (error) {
199
+ return {
200
+ status: 'error',
201
+ message: error.message,
202
+ code: 500
203
+ };
204
+ }
205
+ }
206
+
207
+ // Usage
208
+ const result = await fetchUser(123);
209
+ if (result.status === 'success') {
210
+ console.log(result.data.name); // ✅ TypeScript knows result is ApiSuccess<User>
211
+ } else {
212
+ console.log(result.message); // ✅ TypeScript knows result is ApiError
213
+ }
214
+ ```
215
+
216
+ ### Form State Management
217
+
218
+ ```typescript
219
+ // ✅ Type-safe form states
220
+ type FormIdle = {
221
+ state: 'idle';
222
+ };
223
+
224
+ type FormSubmitting = {
225
+ state: 'submitting';
226
+ progress: number;
227
+ };
228
+
229
+ type FormSuccess = {
230
+ state: 'success';
231
+ message: string;
232
+ redirectUrl?: string;
233
+ };
234
+
235
+ type FormError = {
236
+ state: 'error';
237
+ errors: Record<string, string[]>;
238
+ canRetry: boolean;
239
+ };
240
+
241
+ type FormState = FormIdle | FormSubmitting | FormSuccess | FormError;
242
+
243
+ function renderForm(formState: FormState) {
244
+ switch (formState.state) {
245
+ case 'idle':
246
+ return '<form>...</form>';
247
+ case 'submitting':
248
+ return `<div>Submitting... ${formState.progress}%</div>`;
249
+ case 'success':
250
+ return `<div>${formState.message}</div>`;
251
+ case 'error':
252
+ return `<div>Errors: ${Object.keys(formState.errors).length}</div>`;
253
+ }
254
+ }
255
+ ```
256
+
257
+ ### Payment Method Pattern
258
+
259
+ ```typescript
260
+ // ✅ Type-safe payment methods
261
+ type CreditCard = {
262
+ type: 'credit_card';
263
+ cardNumber: string;
264
+ expiryDate: string;
265
+ cvv: string;
266
+ };
267
+
268
+ type PayPal = {
269
+ type: 'paypal';
270
+ email: string;
271
+ };
272
+
273
+ type BankTransfer = {
274
+ type: 'bank_transfer';
275
+ accountNumber: string;
276
+ routingNumber: string;
277
+ };
278
+
279
+ type PaymentMethod = CreditCard | PayPal | BankTransfer;
280
+
281
+ function processPayment(method: PaymentMethod, amount: number): void {
282
+ switch (method.type) {
283
+ case 'credit_card':
284
+ console.log(`Charging ${amount} to card ${method.cardNumber}`);
285
+ break;
286
+ case 'paypal':
287
+ console.log(`Charging ${amount} to PayPal account ${method.email}`);
288
+ break;
289
+ case 'bank_transfer':
290
+ console.log(`Transferring ${amount} from account ${method.accountNumber}`);
291
+ break;
292
+ }
293
+ }
294
+ ```
295
+
296
+ ---
297
+
298
+ ## Type-Level Programming
299
+
300
+ Perform computations at the type level using TypeScript's type system.
301
+
302
+ ### Type-Level Arithmetic
303
+
304
+ ```typescript
305
+ // ✅ Type-level number operations
306
+ type Length<T extends readonly unknown[]> = T['length'];
307
+
308
+ type Increment<N extends number> = [unknown, ...Array<N>]['length'];
309
+ type Decrement<N extends number> = Array<N> extends [unknown, ...infer Rest] ? Rest['length'] : 0;
310
+
311
+ type Five = Increment<4>; // Type: 5
312
+ type Three = Decrement<4>; // Type: 3
313
+ ```
314
+
315
+ ### Type-Level String Manipulation
316
+
317
+ ```typescript
318
+ // ✅ Advanced string manipulation
319
+ type Split<S extends string, D extends string> =
320
+ S extends `${infer T}${D}${infer U}`
321
+ ? [T, ...Split<U, D>]
322
+ : [S];
323
+
324
+ type Parts = Split<'hello-world-foo', '-'>; // Type: ["hello", "world", "foo"]
325
+
326
+ type Join<T extends readonly string[], D extends string> =
327
+ T extends readonly [infer F extends string, ...infer R extends readonly string[]]
328
+ ? R extends readonly []
329
+ ? F
330
+ : `${F}${D}${Join<R, D>}`
331
+ : '';
332
+
333
+ type Joined = Join<['hello', 'world', 'foo'], '-'>; // Type: "hello-world-foo"
334
+ ```
335
+
336
+ ### Type-Level Filtering
337
+
338
+ ```typescript
339
+ // ✅ Filter types from union
340
+ type Filter<T, U> = T extends U ? T : never;
341
+
342
+ type Numbers = 1 | 2 | 'a' | 'b' | 3;
343
+ type OnlyNumbers = Filter<Numbers, number>; // Type: 1 | 2 | 3
344
+
345
+ type Exclude<T, U> = T extends U ? never : T;
346
+ type OnlyStrings = Exclude<Numbers, number>; // Type: "a" | "b"
347
+ ```
348
+
349
+ ### Deep Readonly
350
+
351
+ ```typescript
352
+ // ✅ Recursively make all properties readonly
353
+ type DeepReadonly<T> = {
354
+ readonly [P in keyof T]: T[P] extends object
355
+ ? T[P] extends Function
356
+ ? T[P]
357
+ : DeepReadonly<T[P]>
358
+ : T[P];
359
+ };
360
+
361
+ interface Config {
362
+ database: {
363
+ host: string;
364
+ port: number;
365
+ credentials: {
366
+ username: string;
367
+ password: string;
368
+ };
369
+ };
370
+ cache: {
371
+ enabled: boolean;
372
+ ttl: number;
373
+ };
374
+ }
375
+
376
+ type ReadonlyConfig = DeepReadonly<Config>;
377
+ // All nested properties are readonly
378
+ ```
379
+
380
+ ### Deep Partial
381
+
382
+ ```typescript
383
+ // ✅ Recursively make all properties optional
384
+ type DeepPartial<T> = {
385
+ [P in keyof T]?: T[P] extends object
386
+ ? T[P] extends Function
387
+ ? T[P]
388
+ : DeepPartial<T[P]>
389
+ : T[P];
390
+ };
391
+
392
+ type PartialConfig = DeepPartial<Config>;
393
+ // All nested properties are optional
394
+ ```
395
+
396
+ ---
397
+
398
+ ## Opaque Types
399
+
400
+ Opaque types hide implementation details while providing type safety.
401
+
402
+ ### Basic Opaque Type
403
+
404
+ ```typescript
405
+ // ✅ Create opaque type using unique symbol
406
+ declare const opaqueSymbol: unique symbol;
407
+
408
+ type Opaque<K, T> = K & { readonly [opaqueSymbol]: T };
409
+
410
+ type JWT = Opaque<string, 'JWT'>;
411
+ type SessionId = Opaque<string, 'SessionId'>;
412
+
413
+ function createJWT(payload: object): JWT {
414
+ // Implementation
415
+ return 'encoded.jwt.token' as JWT;
416
+ }
417
+
418
+ function verifyJWT(token: JWT): object {
419
+ // Implementation
420
+ return {};
421
+ }
422
+
423
+ const token = createJWT({ userId: 123 });
424
+ verifyJWT(token); // ✅ OK
425
+ verifyJWT('random-string'); // ❌ Error
426
+ ```
427
+
428
+ ### Database ID Pattern
429
+
430
+ ```typescript
431
+ // ✅ Type-safe database IDs
432
+ type DatabaseId<T extends string> = Opaque<string, T>;
433
+
434
+ type UserId = DatabaseId<'User'>;
435
+ type PostId = DatabaseId<'Post'>;
436
+ type CommentId = DatabaseId<'Comment'>;
437
+
438
+ function createUserId(id: string): UserId {
439
+ return id as UserId;
440
+ }
441
+
442
+ function createPostId(id: string): PostId {
443
+ return id as PostId;
444
+ }
445
+
446
+ function getUser(id: UserId): Promise<User> {
447
+ return fetch(`/api/users/${id}`).then(r => r.json());
448
+ }
449
+
450
+ function getPost(id: PostId): Promise<Post> {
451
+ return fetch(`/api/posts/${id}`).then(r => r.json());
452
+ }
453
+
454
+ const userId = createUserId('user-123');
455
+ const postId = createPostId('post-456');
456
+
457
+ getUser(userId); // ✅ OK
458
+ getUser(postId); // ❌ Error: Argument of type 'PostId' is not assignable to parameter of type 'UserId'
459
+ ```
460
+
461
+ ---
462
+
463
+ ## Recursive Conditional Types
464
+
465
+ Build complex type transformations using recursion.
466
+
467
+ ### Deep Flatten
468
+
469
+ ```typescript
470
+ // ✅ Recursively flatten nested arrays
471
+ type Flatten<T> = T extends readonly (infer U)[]
472
+ ? Flatten<U>
473
+ : T;
474
+
475
+ type Nested = [1, [2, [3, [4, 5]]]];
476
+ type Flat = Flatten<Nested>; // Type: 1 | 2 | 3 | 4 | 5
477
+ ```
478
+
479
+ ### Deep Pick
480
+
481
+ ```typescript
482
+ // ✅ Pick nested properties using dot notation
483
+ type DeepPick<T, K extends string> =
484
+ K extends `${infer K1}.${infer K2}`
485
+ ? K1 extends keyof T
486
+ ? { [P in K1]: DeepPick<T[K1], K2> }
487
+ : never
488
+ : K extends keyof T
489
+ ? { [P in K]: T[P] }
490
+ : never;
491
+
492
+ interface User {
493
+ id: number;
494
+ profile: {
495
+ name: string;
496
+ address: {
497
+ street: string;
498
+ city: string;
499
+ country: string;
500
+ };
501
+ };
502
+ }
503
+
504
+ type UserCity = DeepPick<User, 'profile.address.city'>;
505
+ // Type: { profile: { address: { city: string } } }
506
+ ```
507
+
508
+ ### Path to Property
509
+
510
+ ```typescript
511
+ // ✅ Generate all possible paths to properties
512
+ type Paths<T, Prefix extends string = ''> = {
513
+ [K in keyof T]: T[K] extends object
514
+ ? T[K] extends Function
515
+ ? `${Prefix}${K & string}`
516
+ : `${Prefix}${K & string}` | Paths<T[K], `${Prefix}${K & string}.`>
517
+ : `${Prefix}${K & string}`;
518
+ }[keyof T];
519
+
520
+ type UserPaths = Paths<User>;
521
+ // Type: "id" | "profile" | "profile.name" | "profile.address" |
522
+ // "profile.address.street" | "profile.address.city" | "profile.address.country"
523
+ ```
524
+
525
+ ### JSON Serialization
526
+
527
+ ```typescript
528
+ // ✅ Type-safe JSON serialization
529
+ type Serializable<T> = T extends string | number | boolean | null
530
+ ? T
531
+ : T extends Date
532
+ ? string
533
+ : T extends Array<infer U>
534
+ ? Array<Serializable<U>>
535
+ : T extends object
536
+ ? { [K in keyof T]: Serializable<T[K]> }
537
+ : never;
538
+
539
+ interface UserWithDate {
540
+ id: number;
541
+ name: string;
542
+ createdAt: Date;
543
+ metadata: {
544
+ lastLogin: Date;
545
+ preferences: {
546
+ theme: string;
547
+ };
548
+ };
549
+ }
550
+
551
+ type SerializedUser = Serializable<UserWithDate>;
552
+ // Type: {
553
+ // id: number;
554
+ // name: string;
555
+ // createdAt: string; // Date becomes string
556
+ // metadata: {
557
+ // lastLogin: string; // Date becomes string
558
+ // preferences: {
559
+ // theme: string;
560
+ // };
561
+ // };
562
+ // }
563
+ ```
564
+
565
+ ---
566
+
567
+ ## Mapped Types
568
+
569
+ Transform existing types into new types.
570
+
571
+ ### Make Properties Optional
572
+
573
+ ```typescript
574
+ // ✅ Make specific properties optional
575
+ type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
576
+
577
+ interface User {
578
+ id: number;
579
+ name: string;
580
+ email: string;
581
+ phone: string;
582
+ }
583
+
584
+ type UserWithOptionalContact = MakeOptional<User, 'email' | 'phone'>;
585
+ // Type: {
586
+ // id: number;
587
+ // name: string;
588
+ // email?: string;
589
+ // phone?: string;
590
+ // }
591
+ ```
592
+
593
+ ### Make Properties Required
594
+
595
+ ```typescript
596
+ // ✅ Make specific properties required
597
+ type MakeRequired<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;
598
+
599
+ interface PartialUser {
600
+ id?: number;
601
+ name?: string;
602
+ email?: string;
603
+ }
604
+
605
+ type UserWithRequiredId = MakeRequired<PartialUser, 'id'>;
606
+ // Type: {
607
+ // id: number;
608
+ // name?: string;
609
+ // email?: string;
610
+ // }
611
+ ```
612
+
613
+ ### Mutable
614
+
615
+ ```typescript
616
+ // ✅ Remove readonly modifiers
617
+ type Mutable<T> = {
618
+ -readonly [P in keyof T]: T[P];
619
+ };
620
+
621
+ interface ReadonlyUser {
622
+ readonly id: number;
623
+ readonly name: string;
624
+ }
625
+
626
+ type MutableUser = Mutable<ReadonlyUser>;
627
+ // Type: {
628
+ // id: number;
629
+ // name: string;
630
+ // }
631
+ ```
632
+
633
+ ### Nullable
634
+
635
+ ```typescript
636
+ // ✅ Make all properties nullable
637
+ type Nullable<T> = {
638
+ [P in keyof T]: T[P] | null;
639
+ };
640
+
641
+ interface User {
642
+ id: number;
643
+ name: string;
644
+ email: string;
645
+ }
646
+
647
+ type NullableUser = Nullable<User>;
648
+ // Type: {
649
+ // id: number | null;
650
+ // name: string | null;
651
+ // email: string | null;
652
+ // }
653
+ ```
654
+
655
+ ---
656
+
657
+ ## Utility Type Patterns
658
+
659
+ Advanced patterns using TypeScript's built-in utility types.
660
+
661
+ ### Extract Function Parameters
662
+
663
+ ```typescript
664
+ // ✅ Extract parameter types from function
665
+ type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
666
+
667
+ function createUser(name: string, email: string, age: number): User {
668
+ return { id: 1, name, email, age };
669
+ }
670
+
671
+ type CreateUserParams = Parameters<typeof createUser>;
672
+ // Type: [name: string, email: string, age: number]
673
+ ```
674
+
675
+ ### Extract Return Type
676
+
677
+ ```typescript
678
+ // ✅ Extract return type from function
679
+ type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : never;
680
+
681
+ type UserReturnType = ReturnType<typeof createUser>;
682
+ // Type: User
683
+ ```
684
+
685
+ ### Awaited Type
686
+
687
+ ```typescript
688
+ // ✅ Unwrap Promise types
689
+ type Awaited<T> = T extends Promise<infer U> ? Awaited<U> : T;
690
+
691
+ async function fetchUser(): Promise<User> {
692
+ return { id: 1, name: 'Alice', email: 'alice@example.com' };
693
+ }
694
+
695
+ type FetchedUser = Awaited<ReturnType<typeof fetchUser>>;
696
+ // Type: User
697
+ ```
698
+
699
+ ### Constructor Parameters
700
+
701
+ ```typescript
702
+ // ✅ Extract constructor parameter types
703
+ type ConstructorParameters<T extends abstract new (...args: any) => any> =
704
+ T extends abstract new (...args: infer P) => any ? P : never;
705
+
706
+ class User {
707
+ constructor(public name: string, public email: string) {}
708
+ }
709
+
710
+ type UserConstructorParams = ConstructorParameters<typeof User>;
711
+ // Type: [name: string, email: string]
712
+ ```
713
+
714
+ ---
715
+
716
+ ## Best Practices
717
+
718
+ 1. **Use branded types** for domain-specific primitives (IDs, emails, URLs)
719
+ 2. **Leverage discriminated unions** for state management and API responses
720
+ 3. **Apply type-level programming** for complex type transformations
721
+ 4. **Use opaque types** to hide implementation details
722
+ 5. **Employ recursive conditional types** for deep type operations
723
+ 6. **Utilize mapped types** for type transformations
724
+ 7. **Combine patterns** for maximum type safety
725
+ 8. **Document complex types** with comments explaining the pattern
726
+ 9. **Test types** using type assertions and test files
727
+ 10. **Keep types simple** when possible - complexity should serve a purpose
728
+
729
+ ---
730
+
731
+ ## Examples
732
+
733
+ See the `examples/` directory for complete working examples:
734
+ - `examples/branded-types.ts` - Branded type implementations
735
+ - `examples/discriminated-unions.ts` - Union type patterns
736
+ - `examples/type-level-programming.ts` - Advanced type computations
737
+ - `examples/opaque-types.ts` - Opaque type patterns
738
+ - `examples/recursive-types.ts` - Recursive type transformations
739
+
740
+ ---
741
+
742
+ ## References
743
+
744
+ - [TypeScript Handbook - Advanced Types](https://www.typescriptlang.org/docs/handbook/2/types-from-types.html)
745
+ - [TypeScript Deep Dive - Advanced Types](https://basarat.gitbook.io/typescript/type-system)
746
+ - [Type Challenges](https://github.com/type-challenges/type-challenges)
747
+ - [Branded Types in TypeScript](https://egghead.io/blog/using-branded-types-in-typescript)
748
+
749
+
750
+