nitrostack 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +227 -0
  2. package/CONTRIBUTING.md +182 -0
  3. package/LICENSE +201 -0
  4. package/LICENSE_URLS_UPDATE_COMPLETE.md +388 -0
  5. package/NOTICE +153 -0
  6. package/README.md +571 -0
  7. package/dist/auth/api-key.d.ts +118 -0
  8. package/dist/auth/api-key.d.ts.map +1 -0
  9. package/dist/auth/api-key.js +168 -0
  10. package/dist/auth/api-key.js.map +1 -0
  11. package/dist/auth/client.d.ts +151 -0
  12. package/dist/auth/client.d.ts.map +1 -0
  13. package/dist/auth/client.js +330 -0
  14. package/dist/auth/client.js.map +1 -0
  15. package/dist/auth/index.d.ts +30 -0
  16. package/dist/auth/index.d.ts.map +1 -0
  17. package/dist/auth/index.js +43 -0
  18. package/dist/auth/index.js.map +1 -0
  19. package/dist/auth/middleware.d.ts +95 -0
  20. package/dist/auth/middleware.d.ts.map +1 -0
  21. package/dist/auth/middleware.js +260 -0
  22. package/dist/auth/middleware.js.map +1 -0
  23. package/dist/auth/pkce.d.ts +53 -0
  24. package/dist/auth/pkce.d.ts.map +1 -0
  25. package/dist/auth/pkce.js +105 -0
  26. package/dist/auth/pkce.js.map +1 -0
  27. package/dist/auth/quick-setup.d.ts +94 -0
  28. package/dist/auth/quick-setup.d.ts.map +1 -0
  29. package/dist/auth/quick-setup.js +210 -0
  30. package/dist/auth/quick-setup.js.map +1 -0
  31. package/dist/auth/server-integration.d.ts +97 -0
  32. package/dist/auth/server-integration.d.ts.map +1 -0
  33. package/dist/auth/server-integration.js +182 -0
  34. package/dist/auth/server-integration.js.map +1 -0
  35. package/dist/auth/server-metadata.d.ts +51 -0
  36. package/dist/auth/server-metadata.d.ts.map +1 -0
  37. package/dist/auth/server-metadata.js +106 -0
  38. package/dist/auth/server-metadata.js.map +1 -0
  39. package/dist/auth/simple-jwt.d.ts +88 -0
  40. package/dist/auth/simple-jwt.d.ts.map +1 -0
  41. package/dist/auth/simple-jwt.js +152 -0
  42. package/dist/auth/simple-jwt.js.map +1 -0
  43. package/dist/auth/token-store.d.ts +104 -0
  44. package/dist/auth/token-store.d.ts.map +1 -0
  45. package/dist/auth/token-store.js +205 -0
  46. package/dist/auth/token-store.js.map +1 -0
  47. package/dist/auth/token-validation.d.ts +47 -0
  48. package/dist/auth/token-validation.d.ts.map +1 -0
  49. package/dist/auth/token-validation.js +237 -0
  50. package/dist/auth/token-validation.js.map +1 -0
  51. package/dist/auth/types.d.ts +215 -0
  52. package/dist/auth/types.d.ts.map +1 -0
  53. package/dist/auth/types.js +6 -0
  54. package/dist/auth/types.js.map +1 -0
  55. package/dist/cli/commands/build.d.ts +6 -0
  56. package/dist/cli/commands/build.d.ts.map +1 -0
  57. package/dist/cli/commands/build.js +104 -0
  58. package/dist/cli/commands/build.js.map +1 -0
  59. package/dist/cli/commands/dev.d.ts +7 -0
  60. package/dist/cli/commands/dev.d.ts.map +1 -0
  61. package/dist/cli/commands/dev.js +312 -0
  62. package/dist/cli/commands/dev.js.map +1 -0
  63. package/dist/cli/commands/generate-types.d.ts +8 -0
  64. package/dist/cli/commands/generate-types.d.ts.map +1 -0
  65. package/dist/cli/commands/generate-types.js +220 -0
  66. package/dist/cli/commands/generate-types.js.map +1 -0
  67. package/dist/cli/commands/generate.d.ts +5 -0
  68. package/dist/cli/commands/generate.d.ts.map +1 -0
  69. package/dist/cli/commands/generate.js +365 -0
  70. package/dist/cli/commands/generate.js.map +1 -0
  71. package/dist/cli/commands/init.d.ts +7 -0
  72. package/dist/cli/commands/init.d.ts.map +1 -0
  73. package/dist/cli/commands/init.js +365 -0
  74. package/dist/cli/commands/init.js.map +1 -0
  75. package/dist/cli/commands/start.d.ts +6 -0
  76. package/dist/cli/commands/start.d.ts.map +1 -0
  77. package/dist/cli/commands/start.js +61 -0
  78. package/dist/cli/commands/start.js.map +1 -0
  79. package/dist/cli/index.d.ts +3 -0
  80. package/dist/cli/index.d.ts.map +1 -0
  81. package/dist/cli/index.js +47 -0
  82. package/dist/cli/index.js.map +1 -0
  83. package/dist/cli/mcp-dev-wrapper.d.ts +3 -0
  84. package/dist/cli/mcp-dev-wrapper.d.ts.map +1 -0
  85. package/dist/cli/mcp-dev-wrapper.js +116 -0
  86. package/dist/cli/mcp-dev-wrapper.js.map +1 -0
  87. package/dist/core/apikey-module.d.ts +69 -0
  88. package/dist/core/apikey-module.d.ts.map +1 -0
  89. package/dist/core/apikey-module.js +114 -0
  90. package/dist/core/apikey-module.js.map +1 -0
  91. package/dist/core/app-decorator.d.ts +58 -0
  92. package/dist/core/app-decorator.d.ts.map +1 -0
  93. package/dist/core/app-decorator.js +261 -0
  94. package/dist/core/app-decorator.js.map +1 -0
  95. package/dist/core/builders.d.ts +38 -0
  96. package/dist/core/builders.d.ts.map +1 -0
  97. package/dist/core/builders.js +129 -0
  98. package/dist/core/builders.js.map +1 -0
  99. package/dist/core/component.d.ts +105 -0
  100. package/dist/core/component.d.ts.map +1 -0
  101. package/dist/core/component.js +182 -0
  102. package/dist/core/component.js.map +1 -0
  103. package/dist/core/config-module.d.ts +55 -0
  104. package/dist/core/config-module.d.ts.map +1 -0
  105. package/dist/core/config-module.js +94 -0
  106. package/dist/core/config-module.js.map +1 -0
  107. package/dist/core/decorators/cache.decorator.d.ts +61 -0
  108. package/dist/core/decorators/cache.decorator.d.ts.map +1 -0
  109. package/dist/core/decorators/cache.decorator.js +115 -0
  110. package/dist/core/decorators/cache.decorator.js.map +1 -0
  111. package/dist/core/decorators/health-check.decorator.d.ts +80 -0
  112. package/dist/core/decorators/health-check.decorator.d.ts.map +1 -0
  113. package/dist/core/decorators/health-check.decorator.js +153 -0
  114. package/dist/core/decorators/health-check.decorator.js.map +1 -0
  115. package/dist/core/decorators/rate-limit.decorator.d.ts +62 -0
  116. package/dist/core/decorators/rate-limit.decorator.d.ts.map +1 -0
  117. package/dist/core/decorators/rate-limit.decorator.js +129 -0
  118. package/dist/core/decorators/rate-limit.decorator.js.map +1 -0
  119. package/dist/core/decorators.d.ts +151 -0
  120. package/dist/core/decorators.d.ts.map +1 -0
  121. package/dist/core/decorators.js +142 -0
  122. package/dist/core/decorators.js.map +1 -0
  123. package/dist/core/di/container.d.ts +42 -0
  124. package/dist/core/di/container.d.ts.map +1 -0
  125. package/dist/core/di/container.js +76 -0
  126. package/dist/core/di/container.js.map +1 -0
  127. package/dist/core/di/injectable.decorator.d.ts +35 -0
  128. package/dist/core/di/injectable.decorator.d.ts.map +1 -0
  129. package/dist/core/di/injectable.decorator.js +57 -0
  130. package/dist/core/di/injectable.decorator.js.map +1 -0
  131. package/dist/core/errors.d.ts +54 -0
  132. package/dist/core/errors.d.ts.map +1 -0
  133. package/dist/core/errors.js +87 -0
  134. package/dist/core/errors.js.map +1 -0
  135. package/dist/core/events/event-emitter.d.ts +50 -0
  136. package/dist/core/events/event-emitter.d.ts.map +1 -0
  137. package/dist/core/events/event-emitter.js +94 -0
  138. package/dist/core/events/event-emitter.js.map +1 -0
  139. package/dist/core/events/event.decorator.d.ts +48 -0
  140. package/dist/core/events/event.decorator.d.ts.map +1 -0
  141. package/dist/core/events/event.decorator.js +68 -0
  142. package/dist/core/events/event.decorator.js.map +1 -0
  143. package/dist/core/filters/exception-filter.decorator.d.ts +40 -0
  144. package/dist/core/filters/exception-filter.decorator.d.ts.map +1 -0
  145. package/dist/core/filters/exception-filter.decorator.js +54 -0
  146. package/dist/core/filters/exception-filter.decorator.js.map +1 -0
  147. package/dist/core/filters/exception-filter.interface.d.ts +30 -0
  148. package/dist/core/filters/exception-filter.interface.d.ts.map +1 -0
  149. package/dist/core/filters/exception-filter.interface.js +2 -0
  150. package/dist/core/filters/exception-filter.interface.js.map +1 -0
  151. package/dist/core/guards/apikey.guard.d.ts +22 -0
  152. package/dist/core/guards/apikey.guard.d.ts.map +1 -0
  153. package/dist/core/guards/apikey.guard.js +11 -0
  154. package/dist/core/guards/apikey.guard.js.map +1 -0
  155. package/dist/core/guards/guard.interface.d.ts +18 -0
  156. package/dist/core/guards/guard.interface.d.ts.map +1 -0
  157. package/dist/core/guards/guard.interface.js +2 -0
  158. package/dist/core/guards/guard.interface.js.map +1 -0
  159. package/dist/core/guards/jwt.guard.d.ts +18 -0
  160. package/dist/core/guards/jwt.guard.d.ts.map +1 -0
  161. package/dist/core/guards/jwt.guard.js +2 -0
  162. package/dist/core/guards/jwt.guard.js.map +1 -0
  163. package/dist/core/guards/oauth.guard.d.ts +35 -0
  164. package/dist/core/guards/oauth.guard.d.ts.map +1 -0
  165. package/dist/core/guards/oauth.guard.js +2 -0
  166. package/dist/core/guards/oauth.guard.js.map +1 -0
  167. package/dist/core/guards/use-guards.decorator.d.ts +25 -0
  168. package/dist/core/guards/use-guards.decorator.d.ts.map +1 -0
  169. package/dist/core/guards/use-guards.decorator.js +32 -0
  170. package/dist/core/guards/use-guards.decorator.js.map +1 -0
  171. package/dist/core/health/health-checks.resource.d.ts +14 -0
  172. package/dist/core/health/health-checks.resource.d.ts.map +1 -0
  173. package/dist/core/health/health-checks.resource.js +29 -0
  174. package/dist/core/health/health-checks.resource.js.map +1 -0
  175. package/dist/core/index.d.ts +55 -0
  176. package/dist/core/index.d.ts.map +1 -0
  177. package/dist/core/index.js +57 -0
  178. package/dist/core/index.js.map +1 -0
  179. package/dist/core/interceptors/interceptor.decorator.d.ts +37 -0
  180. package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -0
  181. package/dist/core/interceptors/interceptor.decorator.js +51 -0
  182. package/dist/core/interceptors/interceptor.decorator.js.map +1 -0
  183. package/dist/core/interceptors/interceptor.interface.d.ts +31 -0
  184. package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -0
  185. package/dist/core/interceptors/interceptor.interface.js +2 -0
  186. package/dist/core/interceptors/interceptor.interface.js.map +1 -0
  187. package/dist/core/jwt-module.d.ts +51 -0
  188. package/dist/core/jwt-module.d.ts.map +1 -0
  189. package/dist/core/jwt-module.js +52 -0
  190. package/dist/core/jwt-module.js.map +1 -0
  191. package/dist/core/logger.d.ts +18 -0
  192. package/dist/core/logger.d.ts.map +1 -0
  193. package/dist/core/logger.js +51 -0
  194. package/dist/core/logger.js.map +1 -0
  195. package/dist/core/middleware/middleware.decorator.d.ts +39 -0
  196. package/dist/core/middleware/middleware.decorator.d.ts.map +1 -0
  197. package/dist/core/middleware/middleware.decorator.js +53 -0
  198. package/dist/core/middleware/middleware.decorator.js.map +1 -0
  199. package/dist/core/middleware/middleware.interface.d.ts +29 -0
  200. package/dist/core/middleware/middleware.interface.d.ts.map +1 -0
  201. package/dist/core/middleware/middleware.interface.js +2 -0
  202. package/dist/core/middleware/middleware.interface.js.map +1 -0
  203. package/dist/core/module.d.ts +74 -0
  204. package/dist/core/module.d.ts.map +1 -0
  205. package/dist/core/module.js +82 -0
  206. package/dist/core/module.js.map +1 -0
  207. package/dist/core/oauth-module.d.ts +144 -0
  208. package/dist/core/oauth-module.d.ts.map +1 -0
  209. package/dist/core/oauth-module.js +190 -0
  210. package/dist/core/oauth-module.js.map +1 -0
  211. package/dist/core/pipes/pipe.decorator.d.ts +55 -0
  212. package/dist/core/pipes/pipe.decorator.d.ts.map +1 -0
  213. package/dist/core/pipes/pipe.decorator.js +85 -0
  214. package/dist/core/pipes/pipe.decorator.js.map +1 -0
  215. package/dist/core/pipes/pipe.interface.d.ts +36 -0
  216. package/dist/core/pipes/pipe.interface.d.ts.map +1 -0
  217. package/dist/core/pipes/pipe.interface.js +2 -0
  218. package/dist/core/pipes/pipe.interface.js.map +1 -0
  219. package/dist/core/prompt.d.ts +37 -0
  220. package/dist/core/prompt.d.ts.map +1 -0
  221. package/dist/core/prompt.js +76 -0
  222. package/dist/core/prompt.js.map +1 -0
  223. package/dist/core/resource.d.ts +42 -0
  224. package/dist/core/resource.d.ts.map +1 -0
  225. package/dist/core/resource.js +90 -0
  226. package/dist/core/resource.js.map +1 -0
  227. package/dist/core/server.d.ts +72 -0
  228. package/dist/core/server.d.ts.map +1 -0
  229. package/dist/core/server.js +406 -0
  230. package/dist/core/server.js.map +1 -0
  231. package/dist/core/tool.d.ts +78 -0
  232. package/dist/core/tool.d.ts.map +1 -0
  233. package/dist/core/tool.js +190 -0
  234. package/dist/core/tool.js.map +1 -0
  235. package/dist/core/transports/http-server.d.ts +102 -0
  236. package/dist/core/transports/http-server.d.ts.map +1 -0
  237. package/dist/core/transports/http-server.js +265 -0
  238. package/dist/core/transports/http-server.js.map +1 -0
  239. package/dist/core/types.d.ts +123 -0
  240. package/dist/core/types.d.ts.map +1 -0
  241. package/dist/core/types.js +2 -0
  242. package/dist/core/types.js.map +1 -0
  243. package/dist/core/widgets/widget-examples.resource.d.ts +17 -0
  244. package/dist/core/widgets/widget-examples.resource.d.ts.map +1 -0
  245. package/dist/core/widgets/widget-examples.resource.js +28 -0
  246. package/dist/core/widgets/widget-examples.resource.js.map +1 -0
  247. package/dist/core/widgets/widget-registry.d.ts +56 -0
  248. package/dist/core/widgets/widget-registry.d.ts.map +1 -0
  249. package/dist/core/widgets/widget-registry.js +75 -0
  250. package/dist/core/widgets/widget-registry.js.map +1 -0
  251. package/dist/testing/index.d.ts +82 -0
  252. package/dist/testing/index.d.ts.map +1 -0
  253. package/dist/testing/index.js +164 -0
  254. package/dist/testing/index.js.map +1 -0
  255. package/dist/ui-next/index.d.ts +31 -0
  256. package/dist/ui-next/index.d.ts.map +1 -0
  257. package/dist/ui-next/index.js +687 -0
  258. package/dist/ui-next/index.js.map +1 -0
  259. package/dist/widgets/index.d.ts +9 -0
  260. package/dist/widgets/index.d.ts.map +1 -0
  261. package/dist/widgets/index.js +9 -0
  262. package/dist/widgets/index.js.map +1 -0
  263. package/dist/widgets/metadata.d.ts +53 -0
  264. package/dist/widgets/metadata.d.ts.map +1 -0
  265. package/dist/widgets/metadata.js +29 -0
  266. package/dist/widgets/metadata.js.map +1 -0
  267. package/dist/widgets/withToolData.d.ts +19 -0
  268. package/dist/widgets/withToolData.d.ts.map +1 -0
  269. package/dist/widgets/withToolData.js +240 -0
  270. package/dist/widgets/withToolData.js.map +1 -0
  271. package/jest.config.js +21 -0
  272. package/package.json +108 -0
  273. package/templates/typescript-auth/AI_AGENT_CLI_REFERENCE.md +702 -0
  274. package/templates/typescript-auth/AI_AGENT_SDK_REFERENCE.md +1260 -0
  275. package/templates/typescript-auth/README.md +400 -0
  276. package/templates/typescript-auth/package.json +44 -0
  277. package/templates/typescript-auth-api-key/AI_AGENT_CLI_REFERENCE.md +701 -0
  278. package/templates/typescript-auth-api-key/AI_AGENT_SDK_REFERENCE.md +1260 -0
  279. package/templates/typescript-auth-api-key/README.md +483 -0
  280. package/templates/typescript-auth-api-key/package-lock.json +124 -0
  281. package/templates/typescript-auth-api-key/package.json +29 -0
  282. package/templates/typescript-oauth/AI_AGENT_CLI_REFERENCE.md +701 -0
  283. package/templates/typescript-oauth/AI_AGENT_SDK_REFERENCE.md +1260 -0
  284. package/templates/typescript-oauth/OAUTH_SETUP.md +406 -0
  285. package/templates/typescript-oauth/README.md +350 -0
  286. package/templates/typescript-oauth/package.json +30 -0
  287. package/templates/typescript-starter/AI_AGENT_CLI_REFERENCE.md +701 -0
  288. package/templates/typescript-starter/AI_AGENT_SDK_REFERENCE.md +1260 -0
  289. package/templates/typescript-starter/README.md +312 -0
  290. package/templates/typescript-starter/package.json +32 -0
@@ -0,0 +1,365 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ /**
4
+ * Generator templates
5
+ */
6
+ const TEMPLATES = {
7
+ middleware: (name) => `import { Middleware, MiddlewareInterface, ExecutionContext } from 'nitrostack';
8
+
9
+ /**
10
+ * ${name}
11
+ *
12
+ * TODO: Add description
13
+ */
14
+ @Middleware()
15
+ export class ${name} implements MiddlewareInterface {
16
+ async use(context: ExecutionContext, next: () => Promise<any>) {
17
+ // Before handler
18
+ console.log(\`[\${context.toolName}] Started\`);
19
+
20
+ const result = await next();
21
+
22
+ // After handler
23
+ console.log(\`[\${context.toolName}] Completed\`);
24
+
25
+ return result;
26
+ }
27
+ }
28
+ `,
29
+ interceptor: (name) => `import { Interceptor, InterceptorInterface, ExecutionContext } from 'nitrostack';
30
+
31
+ /**
32
+ * ${name}
33
+ *
34
+ * TODO: Add description
35
+ */
36
+ @Interceptor()
37
+ export class ${name} implements InterceptorInterface {
38
+ async intercept(context: ExecutionContext, next: () => Promise<any>) {
39
+ const result = await next();
40
+
41
+ // Transform response
42
+ return {
43
+ success: true,
44
+ data: result,
45
+ timestamp: new Date().toISOString(),
46
+ };
47
+ }
48
+ }
49
+ `,
50
+ pipe: (name) => `import { Pipe, PipeInterface, ArgumentMetadata } from 'nitrostack';
51
+
52
+ /**
53
+ * ${name}
54
+ *
55
+ * TODO: Add description
56
+ */
57
+ @Pipe()
58
+ export class ${name} implements PipeInterface {
59
+ transform(value: any, metadata: ArgumentMetadata) {
60
+ // Validate
61
+ if (!value) {
62
+ throw new Error('Value is required');
63
+ }
64
+
65
+ // Transform
66
+ return value;
67
+ }
68
+ }
69
+ `,
70
+ filter: (name) => `import { ExceptionFilter, ExceptionFilterInterface, ExecutionContext } from 'nitrostack';
71
+
72
+ /**
73
+ * ${name}
74
+ *
75
+ * TODO: Add description
76
+ */
77
+ @ExceptionFilter()
78
+ export class ${name} implements ExceptionFilterInterface {
79
+ catch(exception: any, context: ExecutionContext) {
80
+ context.logger.error('Exception caught', {
81
+ tool: context.toolName,
82
+ error: exception.message,
83
+ });
84
+
85
+ return {
86
+ error: true,
87
+ message: exception.message,
88
+ timestamp: new Date().toISOString(),
89
+ };
90
+ }
91
+ }
92
+ `,
93
+ service: (name) => `import { Injectable } from 'nitrostack';
94
+
95
+ /**
96
+ * ${name}
97
+ *
98
+ * TODO: Add description
99
+ */
100
+ @Injectable()
101
+ export class ${name} {
102
+ // Add your service methods here
103
+
104
+ async findOne(id: string): Promise<any> {
105
+ // TODO: Implement
106
+ return { id };
107
+ }
108
+
109
+ async findAll(): Promise<any[]> {
110
+ // TODO: Implement
111
+ return [];
112
+ }
113
+
114
+ async create(data: any): Promise<any> {
115
+ // TODO: Implement
116
+ return { id: '1', ...data };
117
+ }
118
+
119
+ async update(id: string, data: any): Promise<any> {
120
+ // TODO: Implement
121
+ return { id, ...data };
122
+ }
123
+
124
+ async delete(id: string): Promise<void> {
125
+ // TODO: Implement
126
+ }
127
+ }
128
+ `,
129
+ guard: (name) => `import { Guard, ExecutionContext } from 'nitrostack';
130
+
131
+ /**
132
+ * ${name}
133
+ *
134
+ * TODO: Add description
135
+ */
136
+ export class ${name} implements Guard {
137
+ async canActivate(context: ExecutionContext): Promise<boolean> {
138
+ // TODO: Implement your guard logic
139
+
140
+ // Example: Check if user has required role
141
+ const userRole = context.auth?.role;
142
+
143
+ if (!userRole) {
144
+ throw new Error('Authentication required');
145
+ }
146
+
147
+ // Check role
148
+ if (userRole !== 'admin') {
149
+ throw new Error('Insufficient permissions');
150
+ }
151
+
152
+ return true;
153
+ }
154
+ }
155
+ `,
156
+ health: (name) => `import { HealthCheck, HealthCheckInterface, HealthCheckResult } from 'nitrostack';
157
+
158
+ /**
159
+ * ${name}
160
+ *
161
+ * TODO: Add description
162
+ */
163
+ @HealthCheck({
164
+ name: '${name.toLowerCase().replace(/healthcheck$/, '').replace(/health$/, '')}',
165
+ description: 'TODO: Add description',
166
+ interval: 30 // Check every 30 seconds
167
+ })
168
+ export class ${name} implements HealthCheckInterface {
169
+ async check(): Promise<HealthCheckResult> {
170
+ try {
171
+ // TODO: Implement health check logic
172
+
173
+ return {
174
+ status: 'up',
175
+ message: 'Service is healthy',
176
+ };
177
+ } catch (error: any) {
178
+ return {
179
+ status: 'down',
180
+ message: 'Service is down',
181
+ details: error.message,
182
+ };
183
+ }
184
+ }
185
+ }
186
+ `,
187
+ module: (name) => `import { Module } from 'nitrostack';
188
+ import { ${name}Tools } from './${name.toLowerCase()}.tools.js';
189
+ import { ${name}Resources } from './${name.toLowerCase()}.resources.js';
190
+ import { ${name}Prompts } from './${name.toLowerCase()}.prompts.js';
191
+
192
+ @Module({
193
+ name: '${name.toLowerCase()}',
194
+ description: 'TODO: Add description',
195
+ controllers: [${name}Tools, ${name}Resources, ${name}Prompts],
196
+ })
197
+ export class ${name}Module {}
198
+ `,
199
+ tools: (name) => `import { ToolDecorator as Tool, z, ExecutionContext, Injectable } from 'nitrostack';
200
+
201
+ /**
202
+ * ${name} Tools
203
+ *
204
+ * TODO: Add description
205
+ */
206
+ @Injectable()
207
+ export class ${name}Tools {
208
+ @Tool({
209
+ name: '${name.toLowerCase()}_example',
210
+ description: 'TODO: Add description',
211
+ inputSchema: z.object({
212
+ id: z.string().describe('ID parameter'),
213
+ }),
214
+ })
215
+ async exampleTool(input: any, context: ExecutionContext) {
216
+ // TODO: Implement tool logic
217
+ return { id: input.id, result: 'success' };
218
+ }
219
+ }
220
+ `,
221
+ resources: (name) => `import { ResourceDecorator as Resource, ExecutionContext } from 'nitrostack';
222
+
223
+ /**
224
+ * ${name} Resources
225
+ *
226
+ * TODO: Add description
227
+ */
228
+ export class ${name}Resources {
229
+ @Resource({
230
+ uri: '${name.toLowerCase()}://example',
231
+ name: 'Example Resource',
232
+ description: 'TODO: Add description',
233
+ mimeType: 'application/json',
234
+ })
235
+ async exampleResource(context: ExecutionContext) {
236
+ // TODO: Implement resource logic
237
+ return {
238
+ type: 'text' as const,
239
+ text: JSON.stringify({ example: 'data' }, null, 2),
240
+ };
241
+ }
242
+ }
243
+ `,
244
+ prompts: (name) => `import { PromptDecorator as Prompt, ExecutionContext } from 'nitrostack';
245
+
246
+ /**
247
+ * ${name} Prompts
248
+ *
249
+ * TODO: Add description
250
+ */
251
+ export class ${name}Prompts {
252
+ @Prompt({
253
+ name: '${name.toLowerCase()}-help',
254
+ description: 'TODO: Add description',
255
+ })
256
+ async helpPrompt(args: any, context: ExecutionContext) {
257
+ return [
258
+ {
259
+ role: 'user' as const,
260
+ content: {
261
+ type: 'text' as const,
262
+ text: 'TODO: Add prompt content',
263
+ },
264
+ },
265
+ ];
266
+ }
267
+ }
268
+ `,
269
+ };
270
+ /**
271
+ * Get file path for generated file
272
+ */
273
+ function getFilePath(type, name, module) {
274
+ const basePath = process.cwd();
275
+ if (module) {
276
+ return path.join(basePath, 'src', 'modules', module, `${module}.${type}.ts`);
277
+ }
278
+ const dirMap = {
279
+ middleware: 'middleware',
280
+ interceptor: 'interceptors',
281
+ pipe: 'pipes',
282
+ filter: 'filters',
283
+ service: 'services',
284
+ guard: 'guards',
285
+ health: 'health',
286
+ };
287
+ const dir = dirMap[type] || type;
288
+ const fileName = name.toLowerCase().replace(/\s+/g, '-') + '.ts';
289
+ return path.join(basePath, 'src', dir, fileName);
290
+ }
291
+ /**
292
+ * Generate command
293
+ */
294
+ export async function generate(type, name, options = {}) {
295
+ // Special case for types generation (no name required, different workflow)
296
+ if (type === 'types') {
297
+ const { generateTypes } = await import('./generate-types.js');
298
+ await generateTypes(options);
299
+ return;
300
+ }
301
+ // Validate type
302
+ const validTypes = Object.keys(TEMPLATES);
303
+ if (!validTypes.includes(type)) {
304
+ console.error(`Invalid type: ${type}`);
305
+ console.log(`Valid types: ${validTypes.join(', ')}, types`);
306
+ process.exit(1);
307
+ }
308
+ // Get template
309
+ const template = TEMPLATES[type](name);
310
+ // Determine file path
311
+ let filePath;
312
+ if (type === 'module' || type === 'tools' || type === 'resources' || type === 'prompts') {
313
+ const moduleName = options.module || name.toLowerCase();
314
+ filePath = getFilePath(type, name, moduleName);
315
+ // Create module directory if it doesn't exist
316
+ const moduleDir = path.dirname(filePath);
317
+ if (!fs.existsSync(moduleDir)) {
318
+ fs.mkdirSync(moduleDir, { recursive: true });
319
+ }
320
+ }
321
+ else {
322
+ filePath = getFilePath(type, name);
323
+ // Create directory if it doesn't exist
324
+ const dir = path.dirname(filePath);
325
+ if (!fs.existsSync(dir)) {
326
+ fs.mkdirSync(dir, { recursive: true });
327
+ }
328
+ }
329
+ // Check if file already exists
330
+ if (fs.existsSync(filePath) && !options.force) {
331
+ console.error(`File already exists: ${filePath}`);
332
+ console.log('Use --force to overwrite');
333
+ process.exit(1);
334
+ }
335
+ // Write file
336
+ fs.writeFileSync(filePath, template, 'utf-8');
337
+ console.log(`āœ… Generated ${type}: ${filePath}`);
338
+ // If generating a module, create all related files
339
+ if (type === 'module' && !options.skipRelated) {
340
+ const moduleName = name;
341
+ const moduleDir = path.dirname(filePath);
342
+ // Generate tools, resources, prompts
343
+ const toolsPath = path.join(moduleDir, `${name.toLowerCase()}.tools.ts`);
344
+ const resourcesPath = path.join(moduleDir, `${name.toLowerCase()}.resources.ts`);
345
+ const promptsPath = path.join(moduleDir, `${name.toLowerCase()}.prompts.ts`);
346
+ if (!fs.existsSync(toolsPath)) {
347
+ fs.writeFileSync(toolsPath, TEMPLATES.tools(moduleName), 'utf-8');
348
+ console.log(`āœ… Generated tools: ${toolsPath}`);
349
+ }
350
+ if (!fs.existsSync(resourcesPath)) {
351
+ fs.writeFileSync(resourcesPath, TEMPLATES.resources(moduleName), 'utf-8');
352
+ console.log(`āœ… Generated resources: ${resourcesPath}`);
353
+ }
354
+ if (!fs.existsSync(promptsPath)) {
355
+ fs.writeFileSync(promptsPath, TEMPLATES.prompts(moduleName), 'utf-8');
356
+ console.log(`āœ… Generated prompts: ${promptsPath}`);
357
+ }
358
+ }
359
+ console.log('\nšŸŽ‰ Generation complete!');
360
+ console.log('\nNext steps:');
361
+ console.log('1. Open the generated file and implement the TODOs');
362
+ console.log('2. Register the component in your module');
363
+ console.log('3. Build and test your changes');
364
+ }
365
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface InitOptions {
2
+ template: string;
3
+ skipInstall?: boolean;
4
+ }
5
+ export declare function initCommand(projectName: string | undefined, options: InitOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgDA,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,iBA0NtF"}