@cubis/foundry 0.3.34 → 0.3.36

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 (594) hide show
  1. package/README.md +56 -11
  2. package/bin/cubis.js +2824 -966
  3. package/mcp/.dockerignore +5 -0
  4. package/mcp/Dockerfile +19 -0
  5. package/mcp/README.md +550 -11
  6. package/mcp/config.json +18 -0
  7. package/mcp/dist/index.d.ts +1 -0
  8. package/mcp/dist/index.js +1488 -0
  9. package/mcp/package.json +36 -0
  10. package/mcp/src/cbxConfig/index.ts +23 -0
  11. package/mcp/src/cbxConfig/paths.ts +45 -0
  12. package/mcp/src/cbxConfig/reader.ts +149 -0
  13. package/mcp/src/cbxConfig/readerWriter.test.ts +147 -0
  14. package/mcp/src/cbxConfig/serviceConfig.test.ts +42 -0
  15. package/mcp/src/cbxConfig/serviceConfig.ts +157 -0
  16. package/mcp/src/cbxConfig/types.ts +44 -0
  17. package/mcp/src/cbxConfig/writer.ts +90 -0
  18. package/mcp/src/config/index.test.ts +81 -0
  19. package/mcp/src/config/index.ts +45 -0
  20. package/mcp/src/config/schema.ts +55 -0
  21. package/mcp/src/gateway/catalog.ts +37 -0
  22. package/mcp/src/gateway/config.ts +247 -0
  23. package/mcp/src/gateway/manager.ts +255 -0
  24. package/mcp/src/gateway/types.ts +54 -0
  25. package/mcp/src/gateway/upstreamClient.ts +80 -0
  26. package/mcp/src/index.ts +211 -0
  27. package/mcp/src/server.ts +219 -0
  28. package/mcp/src/tools/configTools.test.ts +166 -0
  29. package/mcp/src/tools/future/README.md +21 -0
  30. package/mcp/src/tools/future/index.ts +8 -0
  31. package/mcp/src/tools/index.ts +76 -0
  32. package/mcp/src/tools/mcpGateway.ts +44 -0
  33. package/mcp/src/tools/postmanGetMode.ts +82 -0
  34. package/mcp/src/tools/postmanGetStatus.ts +65 -0
  35. package/mcp/src/tools/postmanModes.ts +28 -0
  36. package/mcp/src/tools/postmanSetMode.ts +71 -0
  37. package/mcp/src/tools/skillBrowseCategory.ts +54 -0
  38. package/mcp/src/tools/skillGet.ts +43 -0
  39. package/mcp/src/tools/skillListCategories.ts +40 -0
  40. package/mcp/src/tools/skillSearch.ts +72 -0
  41. package/mcp/src/tools/skillTools.test.ts +126 -0
  42. package/mcp/src/tools/stitchGetMode.ts +58 -0
  43. package/mcp/src/tools/stitchGetStatus.ts +70 -0
  44. package/mcp/src/tools/stitchSetProfile.ts +82 -0
  45. package/mcp/src/transports/stdio.ts +9 -0
  46. package/mcp/src/transports/streamableHttp.ts +43 -0
  47. package/mcp/src/upstream/passthrough.ts +273 -0
  48. package/mcp/src/utils/errors.ts +38 -0
  49. package/mcp/src/utils/logger.ts +63 -0
  50. package/mcp/src/vault/manifest.test.ts +126 -0
  51. package/mcp/src/vault/manifest.ts +99 -0
  52. package/mcp/src/vault/scanner.test.ts +70 -0
  53. package/mcp/src/vault/scanner.ts +145 -0
  54. package/mcp/src/vault/types.ts +21 -0
  55. package/package.json +9 -2
  56. package/workflows/scripts/generate-powers.mjs +27 -18
  57. package/workflows/skills/postman/SKILL.md +11 -12
  58. package/workflows/skills/skills_index.json +11 -93
  59. package/workflows/skills/stitch/SKILL.md +17 -0
  60. package/workflows/workflows/agent-environment-setup/manifest.json +0 -24
  61. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/nextjs-react-expert/SKILL.md +1 -1
  62. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/SKILL.md +9 -232
  63. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/skills_index.json +0 -102
  64. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/stitch/SKILL.md +17 -0
  65. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/nextjs-react-expert/SKILL.md +1 -1
  66. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/SKILL.md +9 -232
  67. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/skills_index.json +0 -102
  68. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/stitch/SKILL.md +17 -0
  69. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/nextjs-react-expert/SKILL.md +1 -1
  70. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/SKILL.md +9 -232
  71. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/skills_index.json +0 -102
  72. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/stitch/SKILL.md +17 -0
  73. package/mcp/catalogs/default.json +0 -14
  74. package/mcp/powers/atlassian-mcp/POWER.md +0 -91
  75. package/mcp/powers/atlassian-mcp/SKILL.md +0 -88
  76. package/mcp/powers/atlassian-mcp/steering/authentication-patterns.md +0 -520
  77. package/mcp/powers/atlassian-mcp/steering/common-workflows.md +0 -660
  78. package/mcp/powers/atlassian-mcp/steering/confluence-operations.md +0 -528
  79. package/mcp/powers/atlassian-mcp/steering/jira-queries.md +0 -421
  80. package/mcp/powers/atlassian-mcp/steering/mcp-server-setup.md +0 -292
  81. package/mcp/powers/building-mcp-server-on-cloudflare/POWER.md +0 -261
  82. package/mcp/powers/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  83. package/mcp/powers/building-mcp-server-on-cloudflare/steering/examples.md +0 -115
  84. package/mcp/powers/building-mcp-server-on-cloudflare/steering/oauth-setup.md +0 -338
  85. package/mcp/powers/building-mcp-server-on-cloudflare/steering/troubleshooting.md +0 -317
  86. package/mcp/powers/datadog-automation/POWER.md +0 -238
  87. package/mcp/powers/datadog-automation/SKILL.md +0 -235
  88. package/mcp/powers/github-automation/POWER.md +0 -230
  89. package/mcp/powers/github-automation/SKILL.md +0 -227
  90. package/mcp/powers/mcp-builder/LICENSE.txt +0 -202
  91. package/mcp/powers/mcp-builder/POWER.md +0 -179
  92. package/mcp/powers/mcp-builder/SKILL.md +0 -176
  93. package/mcp/powers/mcp-builder/reference/evaluation.md +0 -602
  94. package/mcp/powers/mcp-builder/reference/mcp_best_practices.md +0 -915
  95. package/mcp/powers/mcp-builder/reference/node_mcp_server.md +0 -916
  96. package/mcp/powers/mcp-builder/reference/python_mcp_server.md +0 -752
  97. package/mcp/powers/mcp-builder/scripts/connections.py +0 -151
  98. package/mcp/powers/mcp-builder/scripts/evaluation.py +0 -373
  99. package/mcp/powers/mcp-builder/scripts/example_evaluation.xml +0 -22
  100. package/mcp/powers/mcp-builder/scripts/requirements.txt +0 -2
  101. package/mcp/powers/mcp-developer/POWER.md +0 -88
  102. package/mcp/powers/mcp-developer/SKILL.md +0 -85
  103. package/mcp/powers/mcp-developer/steering/protocol.md +0 -244
  104. package/mcp/powers/mcp-developer/steering/python-sdk.md +0 -367
  105. package/mcp/powers/mcp-developer/steering/resources.md +0 -554
  106. package/mcp/powers/mcp-developer/steering/tools.md +0 -480
  107. package/mcp/powers/mcp-developer/steering/typescript-sdk.md +0 -350
  108. package/mcp/powers/postman/POWER.md +0 -243
  109. package/mcp/powers/postman/SKILL.md +0 -240
  110. package/mcp/powers/postman/flutter-expert/POWER.md +0 -89
  111. package/mcp/powers/postman/flutter-expert/SKILL.md +0 -77
  112. package/mcp/powers/postman/flutter-expert/steering/bloc-state.md +0 -259
  113. package/mcp/powers/postman/flutter-expert/steering/engineering-principles.md +0 -82
  114. package/mcp/powers/postman/flutter-expert/steering/gorouter-navigation.md +0 -157
  115. package/mcp/powers/postman/flutter-expert/steering/performance.md +0 -99
  116. package/mcp/powers/postman/flutter-expert/steering/project-structure.md +0 -77
  117. package/mcp/powers/postman/flutter-expert/steering/riverpod-state.md +0 -404
  118. package/mcp/powers/postman/flutter-expert/steering/widget-patterns.md +0 -123
  119. package/mcp/powers/postman/flutter-security-reviewer/POWER.md +0 -204
  120. package/mcp/powers/postman/flutter-security-reviewer/SKILL.md +0 -180
  121. package/mcp/powers/postman/flutter-security-reviewer/steering/log_redaction.md +0 -17
  122. package/mcp/powers/postman/flutter-security-reviewer/steering/network_hardening.md +0 -13
  123. package/mcp/powers/postman/flutter-security-reviewer/steering/secret-scanning.md +0 -123
  124. package/mcp/powers/postman/flutter-security-reviewer/steering/secure_storage_policy.md +0 -16
  125. package/mcp/powers/postman/flutter-security-reviewer/steering/vulnerability-patterns.md +0 -189
  126. package/mcp/powers/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  127. package/mcp/powers/postman/flutter-test-master/POWER.md +0 -527
  128. package/mcp/powers/postman/flutter-test-master/SKILL.md +0 -513
  129. package/mcp/powers/postman/flutter-test-master/steering/golden-testing.md +0 -444
  130. package/mcp/powers/postman/flutter-test-master/steering/integration-testing.md +0 -688
  131. package/mcp/powers/postman/flutter-test-master/steering/property-testing.md +0 -408
  132. package/mcp/powers/postman/flutter-test-master/steering/riverpod-testing.md +0 -606
  133. package/mcp/powers/postman/flutter-test-master/steering/test-utilities.md +0 -566
  134. package/mcp/powers/postman/flutter-test-master/steering/unit-testing.md +0 -511
  135. package/mcp/powers/postman/flutter-test-master/steering/widget-testing.md +0 -601
  136. package/mcp/powers/postman/git-commit/POWER.md +0 -47
  137. package/mcp/powers/postman/git-commit/SKILL.md +0 -46
  138. package/mcp/powers/postman/gorouter-restoration/POWER.md +0 -227
  139. package/mcp/powers/postman/gorouter-restoration/SKILL.md +0 -217
  140. package/mcp/powers/postman/gorouter-restoration/steering/guard_patterns.md +0 -14
  141. package/mcp/powers/postman/gorouter-restoration/steering/tab_preservation.md +0 -12
  142. package/mcp/powers/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  143. package/mcp/powers/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  144. package/mcp/powers/postman/mcp.json +0 -11
  145. package/mcp/powers/postman/microservices-architect/POWER.md +0 -109
  146. package/mcp/powers/postman/microservices-architect/SKILL.md +0 -93
  147. package/mcp/powers/postman/microservices-architect/steering/communication.md +0 -499
  148. package/mcp/powers/postman/microservices-architect/steering/data.md +0 -721
  149. package/mcp/powers/postman/microservices-architect/steering/decomposition.md +0 -344
  150. package/mcp/powers/postman/microservices-architect/steering/observability.md +0 -805
  151. package/mcp/powers/postman/microservices-architect/steering/patterns.md +0 -603
  152. package/mcp/powers/postman/nestjs-expert/POWER.md +0 -130
  153. package/mcp/powers/postman/nestjs-expert/SKILL.md +0 -114
  154. package/mcp/powers/postman/nestjs-expert/steering/authentication.md +0 -461
  155. package/mcp/powers/postman/nestjs-expert/steering/controllers-routing.md +0 -114
  156. package/mcp/powers/postman/nestjs-expert/steering/dtos-validation.md +0 -156
  157. package/mcp/powers/postman/nestjs-expert/steering/migration-from-express.md +0 -1240
  158. package/mcp/powers/postman/nestjs-expert/steering/secure-sessions.md +0 -56
  159. package/mcp/powers/postman/nestjs-expert/steering/services-di.md +0 -143
  160. package/mcp/powers/postman/nestjs-expert/steering/strangler-fig-pattern.md +0 -47
  161. package/mcp/powers/postman/nestjs-expert/steering/testing-patterns.md +0 -189
  162. package/mcp/powers/postman/oneup-design/POWER.md +0 -72
  163. package/mcp/powers/postman/oneup-design/SKILL.md +0 -71
  164. package/mcp/powers/postman/oneup-design/steering/colors.md +0 -41
  165. package/mcp/powers/postman/oneup-design/steering/components.md +0 -53
  166. package/mcp/powers/postman/oneup-design/steering/spacing.md +0 -84
  167. package/mcp/powers/postman/openapi-docs/POWER.md +0 -78
  168. package/mcp/powers/postman/openapi-docs/SKILL.md +0 -68
  169. package/mcp/powers/postman/openapi-docs/steering/crud-templates.md +0 -43
  170. package/mcp/powers/postman/openapi-docs/steering/framework-express.md +0 -19
  171. package/mcp/powers/postman/openapi-docs/steering/framework-fastapi.md +0 -20
  172. package/mcp/powers/postman/openapi-docs/steering/framework-nestjs.md +0 -20
  173. package/mcp/powers/postman/openapi-docs/steering/framework-raw-openapi.md +0 -14
  174. package/mcp/powers/postman/openapi-docs/steering/openapi-checklist.md +0 -33
  175. package/mcp/powers/postman/openapi-docs/steering/stoplight-ui.md +0 -21
  176. package/mcp/powers/postman/steering/steering.md +0 -26
  177. package/mcp/powers/sentry-automation/POWER.md +0 -235
  178. package/mcp/powers/sentry-automation/SKILL.md +0 -232
  179. package/mcp/skills/atlassian-mcp/SKILL.md +0 -88
  180. package/mcp/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  181. package/mcp/skills/atlassian-mcp/references/common-workflows.md +0 -660
  182. package/mcp/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  183. package/mcp/skills/atlassian-mcp/references/jira-queries.md +0 -421
  184. package/mcp/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  185. package/mcp/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  186. package/mcp/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  187. package/mcp/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  188. package/mcp/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  189. package/mcp/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  190. package/mcp/skills/datadog-automation/SKILL.md +0 -235
  191. package/mcp/skills/github-automation/SKILL.md +0 -227
  192. package/mcp/skills/mcp-builder/LICENSE.txt +0 -202
  193. package/mcp/skills/mcp-builder/SKILL.md +0 -176
  194. package/mcp/skills/mcp-builder/reference/evaluation.md +0 -602
  195. package/mcp/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  196. package/mcp/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  197. package/mcp/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  198. package/mcp/skills/mcp-builder/scripts/connections.py +0 -151
  199. package/mcp/skills/mcp-builder/scripts/evaluation.py +0 -373
  200. package/mcp/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  201. package/mcp/skills/mcp-builder/scripts/requirements.txt +0 -2
  202. package/mcp/skills/mcp-developer/SKILL.md +0 -85
  203. package/mcp/skills/mcp-developer/references/protocol.md +0 -244
  204. package/mcp/skills/mcp-developer/references/python-sdk.md +0 -367
  205. package/mcp/skills/mcp-developer/references/resources.md +0 -554
  206. package/mcp/skills/mcp-developer/references/tools.md +0 -480
  207. package/mcp/skills/mcp-developer/references/typescript-sdk.md +0 -350
  208. package/mcp/skills/postman/POWER.md +0 -242
  209. package/mcp/skills/postman/SKILL.md +0 -240
  210. package/mcp/skills/postman/flutter-expert/POWER.md +0 -89
  211. package/mcp/skills/postman/flutter-expert/SKILL.md +0 -77
  212. package/mcp/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  213. package/mcp/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  214. package/mcp/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  215. package/mcp/skills/postman/flutter-expert/references/performance.md +0 -99
  216. package/mcp/skills/postman/flutter-expert/references/project-structure.md +0 -77
  217. package/mcp/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  218. package/mcp/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  219. package/mcp/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  220. package/mcp/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  221. package/mcp/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  222. package/mcp/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  223. package/mcp/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  224. package/mcp/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  225. package/mcp/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  226. package/mcp/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  227. package/mcp/skills/postman/flutter-test-master/POWER.md +0 -527
  228. package/mcp/skills/postman/flutter-test-master/SKILL.md +0 -513
  229. package/mcp/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  230. package/mcp/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  231. package/mcp/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  232. package/mcp/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  233. package/mcp/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  234. package/mcp/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  235. package/mcp/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  236. package/mcp/skills/postman/git-commit/POWER.md +0 -47
  237. package/mcp/skills/postman/git-commit/SKILL.md +0 -46
  238. package/mcp/skills/postman/gorouter-restoration/POWER.md +0 -227
  239. package/mcp/skills/postman/gorouter-restoration/SKILL.md +0 -217
  240. package/mcp/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  241. package/mcp/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  242. package/mcp/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  243. package/mcp/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  244. package/mcp/skills/postman/mcp.json +0 -11
  245. package/mcp/skills/postman/microservices-architect/POWER.md +0 -109
  246. package/mcp/skills/postman/microservices-architect/SKILL.md +0 -93
  247. package/mcp/skills/postman/microservices-architect/references/communication.md +0 -499
  248. package/mcp/skills/postman/microservices-architect/references/data.md +0 -721
  249. package/mcp/skills/postman/microservices-architect/references/decomposition.md +0 -344
  250. package/mcp/skills/postman/microservices-architect/references/observability.md +0 -805
  251. package/mcp/skills/postman/microservices-architect/references/patterns.md +0 -603
  252. package/mcp/skills/postman/nestjs-expert/POWER.md +0 -130
  253. package/mcp/skills/postman/nestjs-expert/SKILL.md +0 -114
  254. package/mcp/skills/postman/nestjs-expert/references/authentication.md +0 -461
  255. package/mcp/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  256. package/mcp/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  257. package/mcp/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  258. package/mcp/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  259. package/mcp/skills/postman/nestjs-expert/references/services-di.md +0 -143
  260. package/mcp/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  261. package/mcp/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  262. package/mcp/skills/postman/oneup-design/POWER.md +0 -72
  263. package/mcp/skills/postman/oneup-design/SKILL.md +0 -71
  264. package/mcp/skills/postman/oneup-design/references/colors.md +0 -41
  265. package/mcp/skills/postman/oneup-design/references/components.md +0 -53
  266. package/mcp/skills/postman/oneup-design/references/spacing.md +0 -84
  267. package/mcp/skills/postman/openapi-docs/POWER.md +0 -78
  268. package/mcp/skills/postman/openapi-docs/SKILL.md +0 -68
  269. package/mcp/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  270. package/mcp/skills/postman/openapi-docs/references/framework-express.md +0 -19
  271. package/mcp/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  272. package/mcp/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  273. package/mcp/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  274. package/mcp/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  275. package/mcp/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  276. package/mcp/skills/postman/references/steering.md +0 -26
  277. package/mcp/skills/sentry-automation/SKILL.md +0 -232
  278. package/workflows/powers/atlassian-mcp/POWER.md +0 -21
  279. package/workflows/powers/atlassian-mcp/SKILL.md +0 -18
  280. package/workflows/powers/building-mcp-server-on-cloudflare/POWER.md +0 -21
  281. package/workflows/powers/building-mcp-server-on-cloudflare/SKILL.md +0 -18
  282. package/workflows/powers/datadog-automation/POWER.md +0 -21
  283. package/workflows/powers/datadog-automation/SKILL.md +0 -18
  284. package/workflows/powers/github-automation/POWER.md +0 -21
  285. package/workflows/powers/github-automation/SKILL.md +0 -18
  286. package/workflows/powers/mcp-builder/POWER.md +0 -21
  287. package/workflows/powers/mcp-builder/SKILL.md +0 -18
  288. package/workflows/powers/mcp-developer/POWER.md +0 -21
  289. package/workflows/powers/mcp-developer/SKILL.md +0 -18
  290. package/workflows/powers/postman/POWER.md +0 -21
  291. package/workflows/powers/postman/SKILL.md +0 -18
  292. package/workflows/powers/sentry-automation/POWER.md +0 -21
  293. package/workflows/powers/sentry-automation/SKILL.md +0 -18
  294. package/workflows/skills/atlassian-mcp/SKILL.md +0 -18
  295. package/workflows/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -18
  296. package/workflows/skills/datadog-automation/SKILL.md +0 -18
  297. package/workflows/skills/github-automation/SKILL.md +0 -18
  298. package/workflows/skills/mcp-builder/SKILL.md +0 -18
  299. package/workflows/skills/mcp-developer/SKILL.md +0 -18
  300. package/workflows/skills/sentry-automation/SKILL.md +0 -18
  301. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/SKILL.md +0 -88
  302. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  303. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/common-workflows.md +0 -660
  304. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  305. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/jira-queries.md +0 -421
  306. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  307. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  308. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  309. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  310. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  311. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  312. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/datadog-automation/SKILL.md +0 -235
  313. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/github-automation/SKILL.md +0 -227
  314. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/LICENSE.txt +0 -202
  315. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/SKILL.md +0 -176
  316. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/evaluation.md +0 -602
  317. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  318. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  319. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  320. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/connections.py +0 -151
  321. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/evaluation.py +0 -373
  322. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  323. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/requirements.txt +0 -2
  324. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/SKILL.md +0 -85
  325. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/protocol.md +0 -244
  326. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/python-sdk.md +0 -367
  327. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/resources.md +0 -554
  328. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/tools.md +0 -480
  329. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/typescript-sdk.md +0 -350
  330. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/POWER.md +0 -242
  331. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/POWER.md +0 -89
  332. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/SKILL.md +0 -77
  333. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  334. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  335. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  336. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/performance.md +0 -99
  337. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/project-structure.md +0 -77
  338. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  339. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  340. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  341. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  342. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  343. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  344. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  345. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  346. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  347. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  348. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/POWER.md +0 -527
  349. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/SKILL.md +0 -513
  350. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  351. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  352. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  353. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  354. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  355. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  356. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  357. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/git-commit/POWER.md +0 -47
  358. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/git-commit/SKILL.md +0 -46
  359. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/POWER.md +0 -227
  360. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/SKILL.md +0 -217
  361. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  362. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  363. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  364. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  365. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/mcp.json +0 -11
  366. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/POWER.md +0 -109
  367. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/SKILL.md +0 -93
  368. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/communication.md +0 -499
  369. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/data.md +0 -721
  370. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/decomposition.md +0 -344
  371. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/observability.md +0 -805
  372. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/patterns.md +0 -603
  373. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/POWER.md +0 -130
  374. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/SKILL.md +0 -114
  375. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/authentication.md +0 -461
  376. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  377. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  378. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  379. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  380. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/services-di.md +0 -143
  381. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  382. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  383. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/POWER.md +0 -72
  384. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/SKILL.md +0 -71
  385. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/colors.md +0 -41
  386. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/components.md +0 -53
  387. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/spacing.md +0 -84
  388. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/POWER.md +0 -78
  389. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/SKILL.md +0 -68
  390. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  391. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-express.md +0 -19
  392. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  393. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  394. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  395. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  396. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  397. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/references/steering.md +0 -26
  398. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/sentry-automation/SKILL.md +0 -232
  399. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/SKILL.md +0 -88
  400. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  401. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/common-workflows.md +0 -660
  402. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  403. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/jira-queries.md +0 -421
  404. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  405. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  406. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  407. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  408. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  409. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  410. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/datadog-automation/SKILL.md +0 -235
  411. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/github-automation/SKILL.md +0 -227
  412. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/LICENSE.txt +0 -202
  413. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/SKILL.md +0 -176
  414. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/evaluation.md +0 -602
  415. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  416. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  417. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  418. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/connections.py +0 -151
  419. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/evaluation.py +0 -373
  420. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  421. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/requirements.txt +0 -2
  422. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/SKILL.md +0 -85
  423. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/protocol.md +0 -244
  424. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/python-sdk.md +0 -367
  425. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/resources.md +0 -554
  426. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/tools.md +0 -480
  427. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/typescript-sdk.md +0 -350
  428. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/POWER.md +0 -242
  429. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/POWER.md +0 -89
  430. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/SKILL.md +0 -77
  431. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  432. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  433. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  434. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/performance.md +0 -99
  435. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/project-structure.md +0 -77
  436. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  437. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  438. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  439. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  440. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  441. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  442. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  443. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  444. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  445. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  446. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/POWER.md +0 -527
  447. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/SKILL.md +0 -513
  448. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  449. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  450. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  451. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  452. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  453. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  454. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  455. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/git-commit/POWER.md +0 -47
  456. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/git-commit/SKILL.md +0 -46
  457. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/POWER.md +0 -227
  458. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/SKILL.md +0 -217
  459. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  460. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  461. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  462. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  463. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/mcp.json +0 -11
  464. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/POWER.md +0 -109
  465. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/SKILL.md +0 -93
  466. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/communication.md +0 -499
  467. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/data.md +0 -721
  468. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/decomposition.md +0 -344
  469. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/observability.md +0 -805
  470. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/patterns.md +0 -603
  471. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/POWER.md +0 -130
  472. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/SKILL.md +0 -114
  473. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/authentication.md +0 -461
  474. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  475. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  476. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  477. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  478. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/services-di.md +0 -143
  479. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  480. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  481. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/POWER.md +0 -72
  482. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/SKILL.md +0 -71
  483. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/colors.md +0 -41
  484. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/components.md +0 -53
  485. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/spacing.md +0 -84
  486. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/POWER.md +0 -78
  487. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/SKILL.md +0 -68
  488. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  489. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-express.md +0 -19
  490. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  491. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  492. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  493. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  494. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  495. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/references/steering.md +0 -26
  496. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/sentry-automation/SKILL.md +0 -232
  497. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/SKILL.md +0 -88
  498. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  499. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/common-workflows.md +0 -660
  500. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  501. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/jira-queries.md +0 -421
  502. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  503. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  504. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  505. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  506. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  507. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  508. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/datadog-automation/SKILL.md +0 -235
  509. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/github-automation/SKILL.md +0 -227
  510. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/LICENSE.txt +0 -202
  511. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/SKILL.md +0 -176
  512. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/evaluation.md +0 -602
  513. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  514. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  515. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  516. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/connections.py +0 -151
  517. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/evaluation.py +0 -373
  518. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  519. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/requirements.txt +0 -2
  520. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/SKILL.md +0 -85
  521. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/protocol.md +0 -244
  522. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/python-sdk.md +0 -367
  523. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/resources.md +0 -554
  524. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/tools.md +0 -480
  525. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/typescript-sdk.md +0 -350
  526. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/POWER.md +0 -242
  527. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/POWER.md +0 -89
  528. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/SKILL.md +0 -77
  529. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  530. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  531. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  532. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/performance.md +0 -99
  533. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/project-structure.md +0 -77
  534. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  535. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  536. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  537. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  538. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  539. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  540. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  541. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  542. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  543. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  544. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/POWER.md +0 -527
  545. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/SKILL.md +0 -513
  546. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  547. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  548. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  549. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  550. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  551. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  552. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  553. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/git-commit/POWER.md +0 -47
  554. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/git-commit/SKILL.md +0 -46
  555. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/POWER.md +0 -227
  556. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/SKILL.md +0 -217
  557. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  558. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  559. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  560. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  561. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/mcp.json +0 -11
  562. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/POWER.md +0 -109
  563. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/SKILL.md +0 -93
  564. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/communication.md +0 -499
  565. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/data.md +0 -721
  566. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/decomposition.md +0 -344
  567. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/observability.md +0 -805
  568. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/patterns.md +0 -603
  569. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/POWER.md +0 -130
  570. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/SKILL.md +0 -114
  571. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/authentication.md +0 -461
  572. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  573. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  574. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  575. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  576. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/services-di.md +0 -143
  577. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  578. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  579. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/POWER.md +0 -72
  580. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/SKILL.md +0 -71
  581. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/colors.md +0 -41
  582. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/components.md +0 -53
  583. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/spacing.md +0 -84
  584. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/POWER.md +0 -78
  585. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/SKILL.md +0 -68
  586. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  587. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-express.md +0 -19
  588. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  589. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  590. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  591. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  592. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  593. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/references/steering.md +0 -26
  594. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/sentry-automation/SKILL.md +0 -232
@@ -1,1240 +0,0 @@
1
- # Express to NestJS Migration Guide
2
-
3
- > Reference for: NestJS Expert
4
- > Load when: Express migration, Express to NestJS, converting Express app, porting Node.js API, migrating from Express, rewriting Express application
5
-
6
- ---
7
-
8
- ## When to Use This Guide
9
-
10
- **Use when:**
11
- - Migrating existing Express.js applications to NestJS
12
- - Modernizing legacy Node.js APIs with structured architecture
13
- - Adding TypeScript and dependency injection to Express codebases
14
- - Scaling Express applications requiring better organization
15
- - Team needs enforced architectural patterns and conventions
16
- - Application complexity justifies framework overhead
17
-
18
- **When NOT to Use:**
19
-
20
- - Simple CRUD APIs with < 10 endpoints (Express may be sufficient)
21
- - Serverless functions requiring minimal cold start time
22
- - Prototypes or MVPs where speed > structure
23
- - Team lacks TypeScript experience and timeline is tight
24
- - Performance-critical microservices where framework overhead matters
25
- - Projects with unique architectural requirements conflicting with NestJS patterns
26
-
27
- ---
28
-
29
- ## Concept Mapping: Express → NestJS
30
-
31
- | Express Concept | NestJS Equivalent | Key Difference |
32
- |----------------|-------------------|----------------|
33
- | `app.get('/path', handler)` | `@Get('/path')` decorator | Declarative vs imperative |
34
- | Middleware functions | Guards, Interceptors, Pipes | Specialized by purpose |
35
- | `req.params`, `req.body` | `@Param()`, `@Body()` decorators | Automatic injection |
36
- | Manual `require()` | Dependency Injection | IoC container managed |
37
- | `express.Router()` | Controller classes | Object-oriented grouping |
38
- | `app.use(express.json())` | Built-in body parsing | Automatic configuration |
39
- | Error handling middleware | Exception Filters | Class-based with inheritance |
40
- | `app.listen(3000)` | `NestFactory.create()` | Bootstrap pattern |
41
- | Custom validation | `class-validator` pipes | Decorator-based validation |
42
- | Manual service instances | Provider registration | Singleton by default |
43
-
44
- ---
45
-
46
- ## Architecture Comparison
47
-
48
- ### Express Application Structure
49
-
50
- ```
51
- src/
52
- ├── routes/
53
- │ ├── users.js
54
- │ └── posts.js
55
- ├── controllers/
56
- │ ├── userController.js
57
- │ └── postController.js
58
- ├── services/
59
- │ ├── userService.js
60
- │ └── postService.js
61
- ├── middleware/
62
- │ ├── auth.js
63
- │ └── errorHandler.js
64
- └── app.js
65
- ```
66
-
67
- ### NestJS Application Structure
68
-
69
- ```
70
- src/
71
- ├── users/
72
- │ ├── users.controller.ts
73
- │ ├── users.service.ts
74
- │ ├── users.module.ts
75
- │ ├── dto/
76
- │ │ ├── create-user.dto.ts
77
- │ │ └── update-user.dto.ts
78
- │ └── entities/
79
- │ └── user.entity.ts
80
- ├── posts/
81
- │ ├── posts.controller.ts
82
- │ ├── posts.service.ts
83
- │ └── posts.module.ts
84
- ├── common/
85
- │ ├── guards/
86
- │ ├── interceptors/
87
- │ └── filters/
88
- ├── app.module.ts
89
- └── main.ts
90
- ```
91
-
92
- ---
93
-
94
- ## Migration Pattern: Route Handler → Controller
95
-
96
- ### Before: Express Route Handler
97
-
98
- ```typescript
99
- // routes/users.js
100
- const express = require('express');
101
- const router = express.Router();
102
- const UserService = require('../services/userService');
103
-
104
- const userService = new UserService();
105
-
106
- router.get('/', async (req, res, next) => {
107
- try {
108
- const page = parseInt(req.query.page) || 1;
109
- const limit = parseInt(req.query.limit) || 10;
110
-
111
- const users = await userService.findAll(page, limit);
112
- res.json({
113
- success: true,
114
- data: users,
115
- page,
116
- limit
117
- });
118
- } catch (error) {
119
- next(error);
120
- }
121
- });
122
-
123
- router.get('/:id', async (req, res, next) => {
124
- try {
125
- const user = await userService.findById(req.params.id);
126
- if (!user) {
127
- return res.status(404).json({
128
- success: false,
129
- message: 'User not found'
130
- });
131
- }
132
- res.json({ success: true, data: user });
133
- } catch (error) {
134
- next(error);
135
- }
136
- });
137
-
138
- router.post('/', async (req, res, next) => {
139
- try {
140
- const { email, name } = req.body;
141
-
142
- // Manual validation
143
- if (!email || !name) {
144
- return res.status(400).json({
145
- success: false,
146
- message: 'Email and name are required'
147
- });
148
- }
149
-
150
- const user = await userService.create({ email, name });
151
- res.status(201).json({ success: true, data: user });
152
- } catch (error) {
153
- next(error);
154
- }
155
- });
156
-
157
- module.exports = router;
158
- ```
159
-
160
- ### After: NestJS Controller
161
-
162
- ```typescript
163
- // users/dto/create-user.dto.ts
164
- import { IsEmail, IsNotEmpty, IsString, MinLength } from 'class-validator';
165
-
166
- export class CreateUserDto {
167
- @IsEmail()
168
- @IsNotEmpty()
169
- email: string;
170
-
171
- @IsString()
172
- @MinLength(2)
173
- name: string;
174
- }
175
-
176
- // users/dto/pagination-query.dto.ts
177
- import { IsOptional, IsInt, Min, Max } from 'class-validator';
178
- import { Type } from 'class-transformer';
179
-
180
- export class PaginationQueryDto {
181
- @IsOptional()
182
- @Type(() => Number)
183
- @IsInt()
184
- @Min(1)
185
- page?: number = 1;
186
-
187
- @IsOptional()
188
- @Type(() => Number)
189
- @IsInt()
190
- @Min(1)
191
- @Max(100)
192
- limit?: number = 10;
193
- }
194
-
195
- // users/users.controller.ts
196
- import {
197
- Controller,
198
- Get,
199
- Post,
200
- Body,
201
- Param,
202
- Query,
203
- HttpCode,
204
- HttpStatus,
205
- ParseIntPipe,
206
- } from '@nestjs/common';
207
- import { UsersService } from './users.service';
208
- import { CreateUserDto } from './dto/create-user.dto';
209
- import { PaginationQueryDto } from './dto/pagination-query.dto';
210
-
211
- @Controller('users')
212
- export class UsersController {
213
- constructor(private readonly usersService: UsersService) {}
214
-
215
- @Get()
216
- async findAll(@Query() query: PaginationQueryDto) {
217
- const users = await this.usersService.findAll(query.page, query.limit);
218
- return {
219
- success: true,
220
- data: users,
221
- page: query.page,
222
- limit: query.limit,
223
- };
224
- }
225
-
226
- @Get(':id')
227
- async findOne(@Param('id', ParseIntPipe) id: number) {
228
- const user = await this.usersService.findById(id);
229
- return { success: true, data: user };
230
- }
231
-
232
- @Post()
233
- @HttpCode(HttpStatus.CREATED)
234
- async create(@Body() createUserDto: CreateUserDto) {
235
- const user = await this.usersService.create(createUserDto);
236
- return { success: true, data: user };
237
- }
238
- }
239
- ```
240
-
241
- ---
242
-
243
- ## Migration Pattern: Middleware → Guards/Interceptors
244
-
245
- ### Before: Express Authentication Middleware
246
-
247
- ```typescript
248
- // middleware/auth.js
249
- const jwt = require('jsonwebtoken');
250
-
251
- function authMiddleware(req, res, next) {
252
- const token = req.headers.authorization?.split(' ')[1];
253
-
254
- if (!token) {
255
- return res.status(401).json({
256
- success: false,
257
- message: 'No token provided'
258
- });
259
- }
260
-
261
- try {
262
- const decoded = jwt.verify(token, process.env.JWT_SECRET);
263
- req.user = decoded;
264
- next();
265
- } catch (error) {
266
- return res.status(401).json({
267
- success: false,
268
- message: 'Invalid token'
269
- });
270
- }
271
- }
272
-
273
- // Usage in routes
274
- router.get('/profile', authMiddleware, async (req, res) => {
275
- const user = await userService.findById(req.user.id);
276
- res.json({ success: true, data: user });
277
- });
278
- ```
279
-
280
- ### After: NestJS Guard
281
-
282
- ```typescript
283
- // common/guards/jwt-auth.guard.ts
284
- import {
285
- Injectable,
286
- CanActivate,
287
- ExecutionContext,
288
- UnauthorizedException,
289
- } from '@nestjs/common';
290
- import { JwtService } from '@nestjs/jwt';
291
- import { Request } from 'express';
292
-
293
- @Injectable()
294
- export class JwtAuthGuard implements CanActivate {
295
- constructor(private jwtService: JwtService) {}
296
-
297
- async canActivate(context: ExecutionContext): Promise<boolean> {
298
- const request = context.switchToHttp().getRequest<Request>();
299
- const token = this.extractTokenFromHeader(request);
300
-
301
- if (!token) {
302
- throw new UnauthorizedException('No token provided');
303
- }
304
-
305
- try {
306
- const payload = await this.jwtService.verifyAsync(token);
307
- request['user'] = payload;
308
- } catch {
309
- throw new UnauthorizedException('Invalid token');
310
- }
311
-
312
- return true;
313
- }
314
-
315
- private extractTokenFromHeader(request: Request): string | undefined {
316
- const [type, token] = request.headers.authorization?.split(' ') ?? [];
317
- return type === 'Bearer' ? token : undefined;
318
- }
319
- }
320
-
321
- // Usage in controller
322
- import { UseGuards } from '@nestjs/common';
323
- import { JwtAuthGuard } from '../common/guards/jwt-auth.guard';
324
-
325
- @Controller('users')
326
- export class UsersController {
327
- @Get('profile')
328
- @UseGuards(JwtAuthGuard)
329
- async getProfile(@Request() req) {
330
- return this.usersService.findById(req.user.id);
331
- }
332
- }
333
- ```
334
-
335
- ### Before: Express Logging Middleware
336
-
337
- ```typescript
338
- // middleware/logger.js
339
- function loggerMiddleware(req, res, next) {
340
- const start = Date.now();
341
-
342
- res.on('finish', () => {
343
- const duration = Date.now() - start;
344
- console.log(`${req.method} ${req.path} - ${res.statusCode} - ${duration}ms`);
345
- });
346
-
347
- next();
348
- }
349
-
350
- // app.js
351
- app.use(loggerMiddleware);
352
- ```
353
-
354
- ### After: NestJS Interceptor
355
-
356
- ```typescript
357
- // common/interceptors/logging.interceptor.ts
358
- import {
359
- Injectable,
360
- NestInterceptor,
361
- ExecutionContext,
362
- CallHandler,
363
- Logger,
364
- } from '@nestjs/common';
365
- import { Observable } from 'rxjs';
366
- import { tap } from 'rxjs/operators';
367
-
368
- @Injectable()
369
- export class LoggingInterceptor implements NestInterceptor {
370
- private readonly logger = new Logger(LoggingInterceptor.name);
371
-
372
- intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
373
- const request = context.switchToHttp().getRequest();
374
- const { method, url } = request;
375
- const start = Date.now();
376
-
377
- return next.handle().pipe(
378
- tap(() => {
379
- const response = context.switchToHttp().getResponse();
380
- const duration = Date.now() - start;
381
- this.logger.log(
382
- `${method} ${url} - ${response.statusCode} - ${duration}ms`,
383
- );
384
- }),
385
- );
386
- }
387
- }
388
-
389
- // main.ts - Apply globally
390
- import { NestFactory } from '@nestjs/core';
391
- import { AppModule } from './app.module';
392
- import { LoggingInterceptor } from './common/interceptors/logging.interceptor';
393
-
394
- async function bootstrap() {
395
- const app = await NestFactory.create(AppModule);
396
- app.useGlobalInterceptors(new LoggingInterceptor());
397
- await app.listen(3000);
398
- }
399
- bootstrap();
400
- ```
401
-
402
- ---
403
-
404
- ## Migration Pattern: Dependency Injection
405
-
406
- ### Before: Express Manual Instantiation
407
-
408
- ```typescript
409
- // services/userService.js
410
- const UserRepository = require('../repositories/userRepository');
411
- const EmailService = require('./emailService');
412
-
413
- class UserService {
414
- constructor() {
415
- this.userRepository = new UserRepository();
416
- this.emailService = new EmailService();
417
- }
418
-
419
- async create(userData) {
420
- const user = await this.userRepository.create(userData);
421
- await this.emailService.sendWelcomeEmail(user.email);
422
- return user;
423
- }
424
- }
425
-
426
- module.exports = UserService;
427
-
428
- // controllers/userController.js
429
- const UserService = require('../services/userService');
430
- const userService = new UserService();
431
-
432
- async function createUser(req, res) {
433
- const user = await userService.create(req.body);
434
- res.json({ success: true, data: user });
435
- }
436
- ```
437
-
438
- ### After: NestJS Dependency Injection
439
-
440
- ```typescript
441
- // users/users.repository.ts
442
- import { Injectable } from '@nestjs/common';
443
- import { InjectRepository } from '@nestjs/typeorm';
444
- import { Repository } from 'typeorm';
445
- import { User } from './entities/user.entity';
446
-
447
- @Injectable()
448
- export class UsersRepository {
449
- constructor(
450
- @InjectRepository(User)
451
- private readonly repository: Repository<User>,
452
- ) {}
453
-
454
- async create(userData: Partial<User>): Promise<User> {
455
- const user = this.repository.create(userData);
456
- return this.repository.save(user);
457
- }
458
-
459
- async findById(id: number): Promise<User | null> {
460
- return this.repository.findOne({ where: { id } });
461
- }
462
- }
463
-
464
- // email/email.service.ts
465
- import { Injectable, Logger } from '@nestjs/common';
466
-
467
- @Injectable()
468
- export class EmailService {
469
- private readonly logger = new Logger(EmailService.name);
470
-
471
- async sendWelcomeEmail(email: string): Promise<void> {
472
- this.logger.log(`Sending welcome email to ${email}`);
473
- // Email sending logic
474
- }
475
- }
476
-
477
- // users/users.service.ts
478
- import { Injectable, NotFoundException } from '@nestjs/common';
479
- import { UsersRepository } from './users.repository';
480
- import { EmailService } from '../email/email.service';
481
- import { CreateUserDto } from './dto/create-user.dto';
482
- import { User } from './entities/user.entity';
483
-
484
- @Injectable()
485
- export class UsersService {
486
- constructor(
487
- private readonly usersRepository: UsersRepository,
488
- private readonly emailService: EmailService,
489
- ) {}
490
-
491
- async create(createUserDto: CreateUserDto): Promise<User> {
492
- const user = await this.usersRepository.create(createUserDto);
493
- await this.emailService.sendWelcomeEmail(user.email);
494
- return user;
495
- }
496
-
497
- async findById(id: number): Promise<User> {
498
- const user = await this.usersRepository.findById(id);
499
- if (!user) {
500
- throw new NotFoundException(`User with ID ${id} not found`);
501
- }
502
- return user;
503
- }
504
- }
505
-
506
- // users/users.module.ts
507
- import { Module } from '@nestjs/common';
508
- import { TypeOrmModule } from '@nestjs/typeorm';
509
- import { UsersController } from './users.controller';
510
- import { UsersService } from './users.service';
511
- import { UsersRepository } from './users.repository';
512
- import { User } from './entities/user.entity';
513
- import { EmailModule } from '../email/email.module';
514
-
515
- @Module({
516
- imports: [TypeOrmModule.forFeature([User]), EmailModule],
517
- controllers: [UsersController],
518
- providers: [UsersService, UsersRepository],
519
- exports: [UsersService],
520
- })
521
- export class UsersModule {}
522
- ```
523
-
524
- ---
525
-
526
- ## Migration Pattern: Error Handling
527
-
528
- ### Before: Express Error Middleware
529
-
530
- ```typescript
531
- // middleware/errorHandler.js
532
- function errorHandler(err, req, res, next) {
533
- console.error(err.stack);
534
-
535
- if (err.name === 'ValidationError') {
536
- return res.status(400).json({
537
- success: false,
538
- message: 'Validation failed',
539
- errors: err.errors
540
- });
541
- }
542
-
543
- if (err.name === 'UnauthorizedError') {
544
- return res.status(401).json({
545
- success: false,
546
- message: 'Unauthorized'
547
- });
548
- }
549
-
550
- res.status(500).json({
551
- success: false,
552
- message: 'Internal server error'
553
- });
554
- }
555
-
556
- // app.js
557
- app.use(errorHandler);
558
- ```
559
-
560
- ### After: NestJS Exception Filter
561
-
562
- ```typescript
563
- // common/filters/http-exception.filter.ts
564
- import {
565
- ExceptionFilter,
566
- Catch,
567
- ArgumentsHost,
568
- HttpException,
569
- HttpStatus,
570
- Logger,
571
- } from '@nestjs/common';
572
- import { Request, Response } from 'express';
573
-
574
- @Catch()
575
- export class HttpExceptionFilter implements ExceptionFilter {
576
- private readonly logger = new Logger(HttpExceptionFilter.name);
577
-
578
- catch(exception: unknown, host: ArgumentsHost) {
579
- const ctx = host.switchToHttp();
580
- const response = ctx.getResponse<Response>();
581
- const request = ctx.getRequest<Request>();
582
-
583
- let status = HttpStatus.INTERNAL_SERVER_ERROR;
584
- let message = 'Internal server error';
585
- let errors: any = undefined;
586
-
587
- if (exception instanceof HttpException) {
588
- status = exception.getStatus();
589
- const exceptionResponse = exception.getResponse();
590
-
591
- if (typeof exceptionResponse === 'object') {
592
- message = (exceptionResponse as any).message || message;
593
- errors = (exceptionResponse as any).errors;
594
- } else {
595
- message = exceptionResponse;
596
- }
597
- } else if (exception instanceof Error) {
598
- message = exception.message;
599
- this.logger.error(exception.stack);
600
- }
601
-
602
- response.status(status).json({
603
- success: false,
604
- statusCode: status,
605
- message,
606
- errors,
607
- timestamp: new Date().toISOString(),
608
- path: request.url,
609
- });
610
- }
611
- }
612
-
613
- // main.ts
614
- import { NestFactory } from '@nestjs/core';
615
- import { AppModule } from './app.module';
616
- import { HttpExceptionFilter } from './common/filters/http-exception.filter';
617
-
618
- async function bootstrap() {
619
- const app = await NestFactory.create(AppModule);
620
- app.useGlobalFilters(new HttpExceptionFilter());
621
- await app.listen(3000);
622
- }
623
- bootstrap();
624
- ```
625
-
626
- ---
627
-
628
- ## Migration Pattern: Validation
629
-
630
- ### Before: Express with express-validator
631
-
632
- ```typescript
633
- // routes/users.js
634
- const { body, validationResult } = require('express-validator');
635
-
636
- router.post(
637
- '/',
638
- [
639
- body('email').isEmail().normalizeEmail(),
640
- body('name').trim().isLength({ min: 2, max: 50 }),
641
- body('age').optional().isInt({ min: 0, max: 120 }),
642
- ],
643
- async (req, res, next) => {
644
- const errors = validationResult(req);
645
- if (!errors.isEmpty()) {
646
- return res.status(400).json({
647
- success: false,
648
- errors: errors.array()
649
- });
650
- }
651
-
652
- try {
653
- const user = await userService.create(req.body);
654
- res.status(201).json({ success: true, data: user });
655
- } catch (error) {
656
- next(error);
657
- }
658
- }
659
- );
660
- ```
661
-
662
- ### After: NestJS with class-validator
663
-
664
- ```typescript
665
- // users/dto/create-user.dto.ts
666
- import {
667
- IsEmail,
668
- IsNotEmpty,
669
- IsString,
670
- MinLength,
671
- MaxLength,
672
- IsOptional,
673
- IsInt,
674
- Min,
675
- Max,
676
- } from 'class-validator';
677
- import { Transform } from 'class-transformer';
678
-
679
- export class CreateUserDto {
680
- @IsEmail()
681
- @IsNotEmpty()
682
- @Transform(({ value }) => value.toLowerCase().trim())
683
- email: string;
684
-
685
- @IsString()
686
- @MinLength(2)
687
- @MaxLength(50)
688
- @Transform(({ value }) => value.trim())
689
- name: string;
690
-
691
- @IsOptional()
692
- @IsInt()
693
- @Min(0)
694
- @Max(120)
695
- age?: number;
696
- }
697
-
698
- // users/users.controller.ts
699
- import { Controller, Post, Body, ValidationPipe } from '@nestjs/common';
700
- import { UsersService } from './users.service';
701
- import { CreateUserDto } from './dto/create-user.dto';
702
-
703
- @Controller('users')
704
- export class UsersController {
705
- constructor(private readonly usersService: UsersService) {}
706
-
707
- @Post()
708
- async create(@Body(ValidationPipe) createUserDto: CreateUserDto) {
709
- const user = await this.usersService.create(createUserDto);
710
- return { success: true, data: user };
711
- }
712
- }
713
-
714
- // main.ts - Global validation pipe
715
- import { ValidationPipe } from '@nestjs/common';
716
-
717
- async function bootstrap() {
718
- const app = await NestFactory.create(AppModule);
719
- app.useGlobalPipes(
720
- new ValidationPipe({
721
- whitelist: true, // Strip non-whitelisted properties
722
- forbidNonWhitelisted: true, // Throw error for non-whitelisted
723
- transform: true, // Auto-transform payloads to DTO instances
724
- transformOptions: {
725
- enableImplicitConversion: true,
726
- },
727
- }),
728
- );
729
- await app.listen(3000);
730
- }
731
- ```
732
-
733
- ---
734
-
735
- ## Migration Pattern: Testing
736
-
737
- ### Before: Express with Mocha/Chai
738
-
739
- ```typescript
740
- // test/users.test.js
741
- const request = require('supertest');
742
- const { expect } = require('chai');
743
- const app = require('../src/app');
744
-
745
- describe('Users API', () => {
746
- describe('POST /users', () => {
747
- it('should create a new user', async () => {
748
- const userData = {
749
- email: 'test@example.com',
750
- name: 'Test User'
751
- };
752
-
753
- const response = await request(app)
754
- .post('/users')
755
- .send(userData)
756
- .expect(201);
757
-
758
- expect(response.body.success).to.be.true;
759
- expect(response.body.data).to.have.property('id');
760
- expect(response.body.data.email).to.equal(userData.email);
761
- });
762
-
763
- it('should return 400 for invalid email', async () => {
764
- const response = await request(app)
765
- .post('/users')
766
- .send({ email: 'invalid', name: 'Test' })
767
- .expect(400);
768
-
769
- expect(response.body.success).to.be.false;
770
- });
771
- });
772
- });
773
- ```
774
-
775
- ### After: NestJS with Jest
776
-
777
- ```typescript
778
- // users/users.controller.spec.ts
779
- import { Test, TestingModule } from '@nestjs/testing';
780
- import { UsersController } from './users.controller';
781
- import { UsersService } from './users.service';
782
- import { CreateUserDto } from './dto/create-user.dto';
783
-
784
- describe('UsersController', () => {
785
- let controller: UsersController;
786
- let service: UsersService;
787
-
788
- const mockUsersService = {
789
- create: jest.fn(),
790
- findById: jest.fn(),
791
- findAll: jest.fn(),
792
- };
793
-
794
- beforeEach(async () => {
795
- const module: TestingModule = await Test.createTestingModule({
796
- controllers: [UsersController],
797
- providers: [
798
- {
799
- provide: UsersService,
800
- useValue: mockUsersService,
801
- },
802
- ],
803
- }).compile();
804
-
805
- controller = module.get<UsersController>(UsersController);
806
- service = module.get<UsersService>(UsersService);
807
- });
808
-
809
- afterEach(() => {
810
- jest.clearAllMocks();
811
- });
812
-
813
- describe('create', () => {
814
- it('should create a new user', async () => {
815
- const createUserDto: CreateUserDto = {
816
- email: 'test@example.com',
817
- name: 'Test User',
818
- };
819
-
820
- const expectedUser = {
821
- id: 1,
822
- ...createUserDto,
823
- createdAt: new Date(),
824
- };
825
-
826
- mockUsersService.create.mockResolvedValue(expectedUser);
827
-
828
- const result = await controller.create(createUserDto);
829
-
830
- expect(result.success).toBe(true);
831
- expect(result.data).toEqual(expectedUser);
832
- expect(service.create).toHaveBeenCalledWith(createUserDto);
833
- expect(service.create).toHaveBeenCalledTimes(1);
834
- });
835
- });
836
-
837
- describe('findOne', () => {
838
- it('should return a user by id', async () => {
839
- const userId = 1;
840
- const expectedUser = {
841
- id: userId,
842
- email: 'test@example.com',
843
- name: 'Test User',
844
- };
845
-
846
- mockUsersService.findById.mockResolvedValue(expectedUser);
847
-
848
- const result = await controller.findOne(userId);
849
-
850
- expect(result.data).toEqual(expectedUser);
851
- expect(service.findById).toHaveBeenCalledWith(userId);
852
- });
853
- });
854
- });
855
-
856
- // users/users.service.spec.ts
857
- import { Test, TestingModule } from '@nestjs/testing';
858
- import { NotFoundException } from '@nestjs/common';
859
- import { UsersService } from './users.service';
860
- import { UsersRepository } from './users.repository';
861
- import { EmailService } from '../email/email.service';
862
-
863
- describe('UsersService', () => {
864
- let service: UsersService;
865
- let repository: UsersRepository;
866
- let emailService: EmailService;
867
-
868
- const mockUsersRepository = {
869
- create: jest.fn(),
870
- findById: jest.fn(),
871
- };
872
-
873
- const mockEmailService = {
874
- sendWelcomeEmail: jest.fn(),
875
- };
876
-
877
- beforeEach(async () => {
878
- const module: TestingModule = await Test.createTestingModule({
879
- providers: [
880
- UsersService,
881
- {
882
- provide: UsersRepository,
883
- useValue: mockUsersRepository,
884
- },
885
- {
886
- provide: EmailService,
887
- useValue: mockEmailService,
888
- },
889
- ],
890
- }).compile();
891
-
892
- service = module.get<UsersService>(UsersService);
893
- repository = module.get<UsersRepository>(UsersRepository);
894
- emailService = module.get<EmailService>(EmailService);
895
- });
896
-
897
- describe('create', () => {
898
- it('should create user and send welcome email', async () => {
899
- const createUserDto = {
900
- email: 'test@example.com',
901
- name: 'Test User',
902
- };
903
-
904
- const createdUser = { id: 1, ...createUserDto };
905
-
906
- mockUsersRepository.create.mockResolvedValue(createdUser);
907
- mockEmailService.sendWelcomeEmail.mockResolvedValue(undefined);
908
-
909
- const result = await service.create(createUserDto);
910
-
911
- expect(result).toEqual(createdUser);
912
- expect(repository.create).toHaveBeenCalledWith(createUserDto);
913
- expect(emailService.sendWelcomeEmail).toHaveBeenCalledWith(
914
- createUserDto.email,
915
- );
916
- });
917
- });
918
-
919
- describe('findById', () => {
920
- it('should throw NotFoundException when user not found', async () => {
921
- mockUsersRepository.findById.mockResolvedValue(null);
922
-
923
- await expect(service.findById(999)).rejects.toThrow(NotFoundException);
924
- await expect(service.findById(999)).rejects.toThrow(
925
- 'User with ID 999 not found',
926
- );
927
- });
928
- });
929
- });
930
-
931
- // E2E Testing
932
- // test/users.e2e-spec.ts
933
- import { Test, TestingModule } from '@nestjs/testing';
934
- import { INestApplication, ValidationPipe } from '@nestjs/common';
935
- import * as request from 'supertest';
936
- import { AppModule } from '../src/app.module';
937
-
938
- describe('UsersController (e2e)', () => {
939
- let app: INestApplication;
940
-
941
- beforeAll(async () => {
942
- const moduleFixture: TestingModule = await Test.createTestingModule({
943
- imports: [AppModule],
944
- }).compile();
945
-
946
- app = moduleFixture.createNestApplication();
947
- app.useGlobalPipes(new ValidationPipe());
948
- await app.init();
949
- });
950
-
951
- afterAll(async () => {
952
- await app.close();
953
- });
954
-
955
- describe('/users (POST)', () => {
956
- it('should create a new user', () => {
957
- return request(app.getHttpServer())
958
- .post('/users')
959
- .send({
960
- email: 'test@example.com',
961
- name: 'Test User',
962
- })
963
- .expect(201)
964
- .expect((res) => {
965
- expect(res.body.success).toBe(true);
966
- expect(res.body.data).toHaveProperty('id');
967
- expect(res.body.data.email).toBe('test@example.com');
968
- });
969
- });
970
-
971
- it('should return 400 for invalid email', () => {
972
- return request(app.getHttpServer())
973
- .post('/users')
974
- .send({
975
- email: 'invalid-email',
976
- name: 'Test',
977
- })
978
- .expect(400);
979
- });
980
- });
981
- });
982
- ```
983
-
984
- ---
985
-
986
- ## Incremental Migration Strategy
987
-
988
- ### Strategy 1: Strangler Fig Pattern (Recommended)
989
-
990
- Gradually replace Express routes with NestJS while both run simultaneously.
991
-
992
- **Cross-reference:** See `references/strangler-fig-pattern.md` for detailed implementation.
993
-
994
- ```typescript
995
- // main.ts - Running both Express and NestJS
996
- import { NestFactory } from '@nestjs/core';
997
- import { AppModule } from './app.module';
998
- import * as express from 'express';
999
- import { expressApp } from './legacy/express-app';
1000
-
1001
- async function bootstrap() {
1002
- const nestApp = await NestFactory.create(AppModule);
1003
-
1004
- // Proxy middleware to route between NestJS and Express
1005
- const app = express();
1006
-
1007
- // NestJS routes (new implementation)
1008
- app.use('/api/v2', nestApp.getHttpAdapter().getInstance());
1009
-
1010
- // Express routes (legacy)
1011
- app.use('/api', expressApp);
1012
-
1013
- await app.listen(3000);
1014
- }
1015
- bootstrap();
1016
- ```
1017
-
1018
- **Migration steps:**
1019
- 1. Set up NestJS alongside Express
1020
- 2. Migrate one module at a time to NestJS
1021
- 3. Route new endpoints to NestJS, old to Express
1022
- 4. Update frontend/clients to use new endpoints
1023
- 5. Remove Express routes once fully migrated
1024
- 6. Decommission Express app
1025
-
1026
- ### Strategy 2: Module-by-Module Migration
1027
-
1028
- Migrate complete feature modules sequentially.
1029
-
1030
- ```
1031
- Phase 1: Authentication (Week 1-2)
1032
- - Migrate auth middleware → Guards
1033
- - Migrate JWT handling → @nestjs/jwt
1034
- - Test authentication flows
1035
- - Deploy with feature flag
1036
-
1037
- Phase 2: Users Module (Week 3-4)
1038
- - Migrate user routes → Controllers
1039
- - Migrate user service → Providers
1040
- - Add validation with DTOs
1041
- - Write tests
1042
-
1043
- Phase 3: Posts Module (Week 5-6)
1044
- ...
1045
- ```
1046
-
1047
- ### Strategy 3: Adapter Pattern for Gradual DI Migration
1048
-
1049
- Wrap Express services in NestJS providers during transition.
1050
-
1051
- ```typescript
1052
- // Adapter for legacy Express service
1053
- import { Injectable } from '@nestjs/common';
1054
- const LegacyUserService = require('../legacy/services/userService');
1055
-
1056
- @Injectable()
1057
- export class UserServiceAdapter {
1058
- private legacyService = new LegacyUserService();
1059
-
1060
- async findAll(): Promise<any[]> {
1061
- return this.legacyService.findAll();
1062
- }
1063
-
1064
- async create(data: any): Promise<any> {
1065
- return this.legacyService.create(data);
1066
- }
1067
- }
1068
-
1069
- // Use in NestJS controller while migrating
1070
- @Controller('users')
1071
- export class UsersController {
1072
- constructor(private readonly userService: UserServiceAdapter) {}
1073
-
1074
- @Get()
1075
- async findAll() {
1076
- return this.userService.findAll();
1077
- }
1078
- }
1079
- ```
1080
-
1081
- ---
1082
-
1083
- ## Common Pitfalls
1084
-
1085
- ### 1. Over-engineering Simple Applications
1086
-
1087
- **Problem:** Migrating a 500-line Express app to full NestJS with modules, DTOs, repositories, guards, etc.
1088
-
1089
- **Solution:** Evaluate if NestJS complexity is justified. Consider keeping simple APIs in Express.
1090
-
1091
- ### 2. Not Understanding Dependency Injection Lifecycle
1092
-
1093
- **Problem:**
1094
- ```typescript
1095
- // WRONG - Creates new instance, bypassing DI
1096
- @Injectable()
1097
- export class UsersService {
1098
- constructor() {
1099
- this.emailService = new EmailService(); // Don't do this!
1100
- }
1101
- }
1102
- ```
1103
-
1104
- **Solution:**
1105
- ```typescript
1106
- // CORRECT - Let NestJS inject dependencies
1107
- @Injectable()
1108
- export class UsersService {
1109
- constructor(private readonly emailService: EmailService) {}
1110
- }
1111
- ```
1112
-
1113
- ### 3. Mixing Middleware and Guards Incorrectly
1114
-
1115
- **Problem:** Using Express middleware for authentication instead of Guards, losing NestJS benefits.
1116
-
1117
- **Solution:** Use Guards for authentication/authorization, Interceptors for logging/transformation, Middleware only for Express-specific needs.
1118
-
1119
- ### 4. Ignoring Validation Pipes
1120
-
1121
- **Problem:** Manual validation in controllers like Express.
1122
-
1123
- ```typescript
1124
- // WRONG - Manual validation
1125
- @Post()
1126
- async create(@Body() body: any) {
1127
- if (!body.email) {
1128
- throw new BadRequestException('Email required');
1129
- }
1130
- // ...
1131
- }
1132
- ```
1133
-
1134
- **Solution:**
1135
- ```typescript
1136
- // CORRECT - Use DTOs with class-validator
1137
- @Post()
1138
- async create(@Body() createUserDto: CreateUserDto) {
1139
- // Validation happens automatically
1140
- return this.usersService.create(createUserDto);
1141
- }
1142
- ```
1143
-
1144
- ### 5. Not Leveraging Module Imports/Exports
1145
-
1146
- **Problem:** Circular dependencies and tightly coupled modules.
1147
-
1148
- **Solution:** Properly structure module imports/exports. Use forwardRef() for circular dependencies.
1149
-
1150
- ```typescript
1151
- @Module({
1152
- imports: [TypeOrmModule.forFeature([User]), EmailModule],
1153
- providers: [UsersService, UsersRepository],
1154
- exports: [UsersService], // Export for other modules
1155
- })
1156
- export class UsersModule {}
1157
- ```
1158
-
1159
- ### 6. Forgetting to Enable CORS
1160
-
1161
- **Problem:** CORS working in Express but failing in NestJS.
1162
-
1163
- **Solution:**
1164
- ```typescript
1165
- // main.ts
1166
- const app = await NestFactory.create(AppModule);
1167
- app.enableCors({
1168
- origin: process.env.ALLOWED_ORIGINS?.split(','),
1169
- credentials: true,
1170
- });
1171
- ```
1172
-
1173
- ### 7. Incorrect Exception Handling
1174
-
1175
- **Problem:** Using Express error middleware patterns.
1176
-
1177
- **Solution:** Use NestJS built-in exceptions and filters.
1178
-
1179
- ```typescript
1180
- // Throw NestJS exceptions
1181
- throw new NotFoundException('User not found');
1182
- throw new BadRequestException('Invalid input');
1183
- throw new UnauthorizedException('Invalid credentials');
1184
- ```
1185
-
1186
- ### 8. Not Configuring ValidationPipe Globally
1187
-
1188
- **Problem:** Validation inconsistent across endpoints.
1189
-
1190
- **Solution:**
1191
- ```typescript
1192
- // main.ts
1193
- app.useGlobalPipes(
1194
- new ValidationPipe({
1195
- whitelist: true,
1196
- forbidNonWhitelisted: true,
1197
- transform: true,
1198
- }),
1199
- );
1200
- ```
1201
-
1202
- ---
1203
-
1204
- ## Migration Checklist
1205
-
1206
- **Pre-Migration:**
1207
- - [ ] Audit existing Express codebase structure
1208
- - [ ] Document all routes and dependencies
1209
- - [ ] Identify shared services and utilities
1210
- - [ ] Plan module boundaries
1211
- - [ ] Set up NestJS project structure
1212
-
1213
- **During Migration:**
1214
- - [ ] Migrate DTOs and validation rules
1215
- - [ ] Convert route handlers to controllers
1216
- - [ ] Refactor services for dependency injection
1217
- - [ ] Implement guards for authentication
1218
- - [ ] Create interceptors for cross-cutting concerns
1219
- - [ ] Add exception filters
1220
- - [ ] Write unit tests for each component
1221
- - [ ] Write e2e tests for critical flows
1222
-
1223
- **Post-Migration:**
1224
- - [ ] Performance testing and optimization
1225
- - [ ] Update API documentation
1226
- - [ ] Configure logging and monitoring
1227
- - [ ] Set up CI/CD for NestJS
1228
- - [ ] Train team on NestJS patterns
1229
- - [ ] Remove Express dependencies
1230
- - [ ] Refactor for NestJS best practices
1231
-
1232
- ---
1233
-
1234
- ## Additional Resources
1235
-
1236
- - NestJS Official Documentation: https://docs.nestjs.com
1237
- - NestJS Migration Guide: https://docs.nestjs.com/migration-guide
1238
- - class-validator Decorators: https://github.com/typestack/class-validator
1239
- - TypeORM with NestJS: https://docs.nestjs.com/techniques/database
1240
- - Testing Guide: https://docs.nestjs.com/fundamentals/testing