@modularizer/plat 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/README.md +574 -0
  2. package/bin/z2.js +5 -0
  3. package/dist/args/coerce.d.ts +54 -0
  4. package/dist/args/coerce.d.ts.map +1 -0
  5. package/dist/args/coerce.js +236 -0
  6. package/dist/args/coerce.js.map +1 -0
  7. package/dist/args/index.d.ts +2 -0
  8. package/dist/args/index.d.ts.map +1 -0
  9. package/dist/args/index.js +2 -0
  10. package/dist/args/index.js.map +1 -0
  11. package/dist/args/scalars.d.ts +87 -0
  12. package/dist/args/scalars.d.ts.map +1 -0
  13. package/dist/args/scalars.js +22 -0
  14. package/dist/args/scalars.js.map +1 -0
  15. package/dist/args/validate.d.ts +23 -0
  16. package/dist/args/validate.d.ts.map +1 -0
  17. package/dist/args/validate.js +185 -0
  18. package/dist/args/validate.js.map +1 -0
  19. package/dist/args/z2.d.ts +27 -0
  20. package/dist/args/z2.d.ts.map +1 -0
  21. package/dist/args/z2.js +24 -0
  22. package/dist/args/z2.js.map +1 -0
  23. package/dist/cli/commands/api-proxy.d.ts +9 -0
  24. package/dist/cli/commands/api-proxy.d.ts.map +1 -0
  25. package/dist/cli/commands/api-proxy.js +292 -0
  26. package/dist/cli/commands/api-proxy.js.map +1 -0
  27. package/dist/cli/commands/env.d.ts +32 -0
  28. package/dist/cli/commands/env.d.ts.map +1 -0
  29. package/dist/cli/commands/env.js +157 -0
  30. package/dist/cli/commands/env.js.map +1 -0
  31. package/dist/cli/commands/gen.d.ts +2 -0
  32. package/dist/cli/commands/gen.d.ts.map +1 -0
  33. package/dist/cli/commands/gen.js +88 -0
  34. package/dist/cli/commands/gen.js.map +1 -0
  35. package/dist/cli/commands/init-project.d.ts +9 -0
  36. package/dist/cli/commands/init-project.d.ts.map +1 -0
  37. package/dist/cli/commands/init-project.js +143 -0
  38. package/dist/cli/commands/init-project.js.map +1 -0
  39. package/dist/cli/commands/jwt-cmd.d.ts +10 -0
  40. package/dist/cli/commands/jwt-cmd.d.ts.map +1 -0
  41. package/dist/cli/commands/jwt-cmd.js +33 -0
  42. package/dist/cli/commands/jwt-cmd.js.map +1 -0
  43. package/dist/cli/commands/run.d.ts +5 -0
  44. package/dist/cli/commands/run.d.ts.map +1 -0
  45. package/dist/cli/commands/run.js +31 -0
  46. package/dist/cli/commands/run.js.map +1 -0
  47. package/dist/cli/commands/serve.d.ts +2 -0
  48. package/dist/cli/commands/serve.d.ts.map +1 -0
  49. package/dist/cli/commands/serve.js +43 -0
  50. package/dist/cli/commands/serve.js.map +1 -0
  51. package/dist/cli/commands/watch.d.ts +5 -0
  52. package/dist/cli/commands/watch.d.ts.map +1 -0
  53. package/dist/cli/commands/watch.js +119 -0
  54. package/dist/cli/commands/watch.js.map +1 -0
  55. package/dist/cli/index.d.ts +11 -0
  56. package/dist/cli/index.d.ts.map +1 -0
  57. package/dist/cli/index.js +11 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/jwt-helper.d.ts +32 -0
  60. package/dist/cli/jwt-helper.d.ts.map +1 -0
  61. package/dist/cli/jwt-helper.js +84 -0
  62. package/dist/cli/jwt-helper.js.map +1 -0
  63. package/dist/cli/proxy.d.ts +40 -0
  64. package/dist/cli/proxy.d.ts.map +1 -0
  65. package/dist/cli/proxy.js +171 -0
  66. package/dist/cli/proxy.js.map +1 -0
  67. package/dist/cli/runtime.d.ts +17 -0
  68. package/dist/cli/runtime.d.ts.map +1 -0
  69. package/dist/cli/runtime.js +286 -0
  70. package/dist/cli/runtime.js.map +1 -0
  71. package/dist/cli/spec-source.d.ts +13 -0
  72. package/dist/cli/spec-source.d.ts.map +1 -0
  73. package/dist/cli/spec-source.js +207 -0
  74. package/dist/cli/spec-source.js.map +1 -0
  75. package/dist/cli/z2.d.ts +7 -0
  76. package/dist/cli/z2.d.ts.map +1 -0
  77. package/dist/cli/z2.js +93 -0
  78. package/dist/cli/z2.js.map +1 -0
  79. package/dist/client/file-transport-plugin.d.ts +25 -0
  80. package/dist/client/file-transport-plugin.d.ts.map +1 -0
  81. package/dist/client/file-transport-plugin.js +80 -0
  82. package/dist/client/file-transport-plugin.js.map +1 -0
  83. package/dist/client/http-transport-plugin.d.ts +27 -0
  84. package/dist/client/http-transport-plugin.d.ts.map +1 -0
  85. package/dist/client/http-transport-plugin.js +48 -0
  86. package/dist/client/http-transport-plugin.js.map +1 -0
  87. package/dist/client/index.d.ts +6 -0
  88. package/dist/client/index.d.ts.map +1 -0
  89. package/dist/client/index.js +6 -0
  90. package/dist/client/index.js.map +1 -0
  91. package/dist/client/openapi-client.d.ts +332 -0
  92. package/dist/client/openapi-client.d.ts.map +1 -0
  93. package/dist/client/openapi-client.js +879 -0
  94. package/dist/client/openapi-client.js.map +1 -0
  95. package/dist/client/proxy.d.ts +5 -0
  96. package/dist/client/proxy.d.ts.map +1 -0
  97. package/dist/client/proxy.js +353 -0
  98. package/dist/client/proxy.js.map +1 -0
  99. package/dist/client/request-builder.d.ts +4 -0
  100. package/dist/client/request-builder.d.ts.map +1 -0
  101. package/dist/client/request-builder.js +88 -0
  102. package/dist/client/request-builder.js.map +1 -0
  103. package/dist/client/rpc-transport-plugin.d.ts +17 -0
  104. package/dist/client/rpc-transport-plugin.d.ts.map +1 -0
  105. package/dist/client/rpc-transport-plugin.js +69 -0
  106. package/dist/client/rpc-transport-plugin.js.map +1 -0
  107. package/dist/client/tools.d.ts +69 -0
  108. package/dist/client/tools.d.ts.map +1 -0
  109. package/dist/client/tools.js +122 -0
  110. package/dist/client/tools.js.map +1 -0
  111. package/dist/client/transport-plugin.d.ts +62 -0
  112. package/dist/client/transport-plugin.d.ts.map +1 -0
  113. package/dist/client/transport-plugin.js +40 -0
  114. package/dist/client/transport-plugin.js.map +1 -0
  115. package/dist/index.d.ts +9 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +8 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/logging.d.ts +9 -0
  120. package/dist/logging.d.ts.map +1 -0
  121. package/dist/logging.js +29 -0
  122. package/dist/logging.js.map +1 -0
  123. package/dist/rpc.d.ts +39 -0
  124. package/dist/rpc.d.ts.map +1 -0
  125. package/dist/rpc.js +2 -0
  126. package/dist/rpc.js.map +1 -0
  127. package/dist/server/auth/index.d.ts +4 -0
  128. package/dist/server/auth/index.d.ts.map +1 -0
  129. package/dist/server/auth/index.js +2 -0
  130. package/dist/server/auth/index.js.map +1 -0
  131. package/dist/server/auth/jwt.d.ts +27 -0
  132. package/dist/server/auth/jwt.d.ts.map +1 -0
  133. package/dist/server/auth/jwt.js +95 -0
  134. package/dist/server/auth/jwt.js.map +1 -0
  135. package/dist/server/cache/index.d.ts +2 -0
  136. package/dist/server/cache/index.d.ts.map +1 -0
  137. package/dist/server/cache/index.js +2 -0
  138. package/dist/server/cache/index.js.map +1 -0
  139. package/dist/server/cache/utils.d.ts +30 -0
  140. package/dist/server/cache/utils.d.ts.map +1 -0
  141. package/dist/server/cache/utils.js +116 -0
  142. package/dist/server/cache/utils.js.map +1 -0
  143. package/dist/server/call-sessions.d.ts +50 -0
  144. package/dist/server/call-sessions.d.ts.map +1 -0
  145. package/dist/server/call-sessions.js +90 -0
  146. package/dist/server/call-sessions.js.map +1 -0
  147. package/dist/server/config/bucket.d.ts +9 -0
  148. package/dist/server/config/bucket.d.ts.map +1 -0
  149. package/dist/server/config/bucket.js +57 -0
  150. package/dist/server/config/bucket.js.map +1 -0
  151. package/dist/server/config/defaults.d.ts +3 -0
  152. package/dist/server/config/defaults.d.ts.map +1 -0
  153. package/dist/server/config/defaults.js +29 -0
  154. package/dist/server/config/defaults.js.map +1 -0
  155. package/dist/server/config/index.d.ts +5 -0
  156. package/dist/server/config/index.d.ts.map +1 -0
  157. package/dist/server/config/index.js +5 -0
  158. package/dist/server/config/index.js.map +1 -0
  159. package/dist/server/config/logger.d.ts +3 -0
  160. package/dist/server/config/logger.d.ts.map +1 -0
  161. package/dist/server/config/logger.js +2 -0
  162. package/dist/server/config/logger.js.map +1 -0
  163. package/dist/server/config/types.d.ts +198 -0
  164. package/dist/server/config/types.d.ts.map +1 -0
  165. package/dist/server/config/types.js +2 -0
  166. package/dist/server/config/types.js.map +1 -0
  167. package/dist/server/core.d.ts +42 -0
  168. package/dist/server/core.d.ts.map +1 -0
  169. package/dist/server/core.js +202 -0
  170. package/dist/server/core.js.map +1 -0
  171. package/dist/server/env.d.ts +39 -0
  172. package/dist/server/env.d.ts.map +1 -0
  173. package/dist/server/env.js +66 -0
  174. package/dist/server/env.js.map +1 -0
  175. package/dist/server/file-queue-protocol-plugin.d.ts +7 -0
  176. package/dist/server/file-queue-protocol-plugin.d.ts.map +1 -0
  177. package/dist/server/file-queue-protocol-plugin.js +150 -0
  178. package/dist/server/file-queue-protocol-plugin.js.map +1 -0
  179. package/dist/server/file-queue.d.ts +25 -0
  180. package/dist/server/file-queue.d.ts.map +1 -0
  181. package/dist/server/file-queue.js +2 -0
  182. package/dist/server/file-queue.js.map +1 -0
  183. package/dist/server/help.d.ts +19 -0
  184. package/dist/server/help.d.ts.map +1 -0
  185. package/dist/server/help.js +91 -0
  186. package/dist/server/help.js.map +1 -0
  187. package/dist/server/index.d.ts +29 -0
  188. package/dist/server/index.d.ts.map +1 -0
  189. package/dist/server/index.js +29 -0
  190. package/dist/server/index.js.map +1 -0
  191. package/dist/server/operation-registry.d.ts +9 -0
  192. package/dist/server/operation-registry.d.ts.map +1 -0
  193. package/dist/server/operation-registry.js +16 -0
  194. package/dist/server/operation-registry.js.map +1 -0
  195. package/dist/server/param-aliases.d.ts +40 -0
  196. package/dist/server/param-aliases.d.ts.map +1 -0
  197. package/dist/server/param-aliases.js +112 -0
  198. package/dist/server/param-aliases.js.map +1 -0
  199. package/dist/server/protocol-plugin.d.ts +72 -0
  200. package/dist/server/protocol-plugin.d.ts.map +1 -0
  201. package/dist/server/protocol-plugin.js +2 -0
  202. package/dist/server/protocol-plugin.js.map +1 -0
  203. package/dist/server/rate-limit/index.d.ts +2 -0
  204. package/dist/server/rate-limit/index.d.ts.map +1 -0
  205. package/dist/server/rate-limit/index.js +2 -0
  206. package/dist/server/rate-limit/index.js.map +1 -0
  207. package/dist/server/rate-limit/utils.d.ts +27 -0
  208. package/dist/server/rate-limit/utils.d.ts.map +1 -0
  209. package/dist/server/rate-limit/utils.js +126 -0
  210. package/dist/server/rate-limit/utils.js.map +1 -0
  211. package/dist/server/routing.d.ts +39 -0
  212. package/dist/server/routing.d.ts.map +1 -0
  213. package/dist/server/routing.js +70 -0
  214. package/dist/server/routing.js.map +1 -0
  215. package/dist/server/rpc-protocol-plugin.d.ts +12 -0
  216. package/dist/server/rpc-protocol-plugin.d.ts.map +1 -0
  217. package/dist/server/rpc-protocol-plugin.js +134 -0
  218. package/dist/server/rpc-protocol-plugin.js.map +1 -0
  219. package/dist/server/server.d.ts +143 -0
  220. package/dist/server/server.d.ts.map +1 -0
  221. package/dist/server/server.js +1161 -0
  222. package/dist/server/server.js.map +1 -0
  223. package/dist/server/token-limit/index.d.ts +2 -0
  224. package/dist/server/token-limit/index.d.ts.map +1 -0
  225. package/dist/server/token-limit/index.js +2 -0
  226. package/dist/server/token-limit/index.js.map +1 -0
  227. package/dist/server/token-limit/utils.d.ts +44 -0
  228. package/dist/server/token-limit/utils.d.ts.map +1 -0
  229. package/dist/server/token-limit/utils.js +260 -0
  230. package/dist/server/token-limit/utils.js.map +1 -0
  231. package/dist/server/tools.d.ts +51 -0
  232. package/dist/server/tools.d.ts.map +1 -0
  233. package/dist/server/tools.js +225 -0
  234. package/dist/server/tools.js.map +1 -0
  235. package/dist/server/transports.d.ts +25 -0
  236. package/dist/server/transports.d.ts.map +1 -0
  237. package/dist/server/transports.js +2 -0
  238. package/dist/server/transports.js.map +1 -0
  239. package/dist/spec/decorators.d.ts +41 -0
  240. package/dist/spec/decorators.d.ts.map +1 -0
  241. package/dist/spec/decorators.js +93 -0
  242. package/dist/spec/decorators.js.map +1 -0
  243. package/dist/spec/index.d.ts +3 -0
  244. package/dist/spec/index.d.ts.map +1 -0
  245. package/dist/spec/index.js +3 -0
  246. package/dist/spec/index.js.map +1 -0
  247. package/dist/spec/metadata.d.ts +5 -0
  248. package/dist/spec/metadata.d.ts.map +1 -0
  249. package/dist/spec/metadata.js +37 -0
  250. package/dist/spec/metadata.js.map +1 -0
  251. package/dist/types/client.d.ts +81 -0
  252. package/dist/types/client.d.ts.map +1 -0
  253. package/dist/types/client.js +14 -0
  254. package/dist/types/client.js.map +1 -0
  255. package/dist/types/endpoints.d.ts +76 -0
  256. package/dist/types/endpoints.d.ts.map +1 -0
  257. package/dist/types/endpoints.js +2 -0
  258. package/dist/types/endpoints.js.map +1 -0
  259. package/dist/types/errors.d.ts +86 -0
  260. package/dist/types/errors.d.ts.map +1 -0
  261. package/dist/types/errors.js +153 -0
  262. package/dist/types/errors.js.map +1 -0
  263. package/dist/types/http.d.ts +80 -0
  264. package/dist/types/http.d.ts.map +1 -0
  265. package/dist/types/http.js +61 -0
  266. package/dist/types/http.js.map +1 -0
  267. package/dist/types/index.d.ts +9 -0
  268. package/dist/types/index.d.ts.map +1 -0
  269. package/dist/types/index.js +9 -0
  270. package/dist/types/index.js.map +1 -0
  271. package/dist/types/openapi.d.ts +220 -0
  272. package/dist/types/openapi.d.ts.map +1 -0
  273. package/dist/types/openapi.js +11 -0
  274. package/dist/types/openapi.js.map +1 -0
  275. package/dist/types/opts.d.ts +46 -0
  276. package/dist/types/opts.d.ts.map +1 -0
  277. package/dist/types/opts.js +2 -0
  278. package/dist/types/opts.js.map +1 -0
  279. package/dist/types/plugins.d.ts +93 -0
  280. package/dist/types/plugins.d.ts.map +1 -0
  281. package/dist/types/plugins.js +5 -0
  282. package/dist/types/plugins.js.map +1 -0
  283. package/dist/types/tools.d.ts +52 -0
  284. package/dist/types/tools.d.ts.map +1 -0
  285. package/dist/types/tools.js +2 -0
  286. package/dist/types/tools.js.map +1 -0
  287. package/package.json +84 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Initialize plat guidance in user's project
3
+ * Injects/upserts AGENTS.md and CLAUDE.md
4
+ */
5
+ /**
6
+ * Inject or upsert guidance files into user's project
7
+ */
8
+ export declare function initProject(cwd: string): void;
9
+ //# sourceMappingURL=init-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init-project.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqGH;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAuC7C"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Initialize plat guidance in user's project
3
+ * Injects/upserts AGENTS.md and CLAUDE.md
4
+ */
5
+ import fs from 'fs';
6
+ import path from 'path';
7
+ const AGENTS_TEMPLATE = `# AGENTS.md - Guide for AI Developers
8
+
9
+ **This file is for Claude and other AI agents working on this plat project.**
10
+
11
+ ## Quick Reference
12
+
13
+ - **Never duplicate types** - Use Zod schemas, reference with \`typeof Schema\`
14
+ - **Always use generated client** - Never fetch() directly
15
+ - **Always use RouteContext** - Never req.user, use ctx.auth
16
+ - **Controllers are abstract** - Implementations extend and implement
17
+ - **Run gen after changes** - \`npm run gen\`
18
+
19
+ ## Zero Tolerance Rules
20
+
21
+ ❌ Don't import types between server/client - One schema, two places
22
+ ❌ Don't make fetch calls - Use generated \`createClientProxy()\`
23
+ ❌ Don't use req.X - Everything comes from ctx
24
+ ❌ Don't add validation twice - Zod does it all
25
+ ❌ Don't define types twice - Define in Zod once
26
+
27
+ ## The Pattern
28
+
29
+ 1. **api.ts**: Define abstract @Controller with Zod schemas
30
+ 2. **controllers.ts**: Implement handlers, use ctx for everything
31
+ 3. **npm run gen**: Generate client, OpenAPI, CLI
32
+ 4. **Use everywhere**: Generated client is your API
33
+
34
+ ## See Full Guide
35
+
36
+ For comprehensive guidance, read:
37
+ - \`node_modules/plat/AGENTS.md\` - Complete AI guide
38
+ - \`node_modules/plat/PATTERNS.md\` - Every pattern with examples
39
+
40
+ ## Ask Before Deviating
41
+
42
+ If you're about to:
43
+ - Create a custom HTTP client
44
+ - Define types outside Zod
45
+ - Use fetch() directly
46
+ - Pass data through middleware
47
+
48
+ **STOP.** These are anti-patterns. Check AGENTS.md.
49
+ `;
50
+ const CLAUDE_TEMPLATE = `# CLAUDE.md - plat Framework Guidance
51
+
52
+ This project uses plat. When you work on APIs, follow these rules.
53
+
54
+ ## Immediate Rules
55
+
56
+ 1. **Schemas first** - Define in \`api.ts\` with Zod
57
+ 2. **Abstract controllers** - Methods are contracts
58
+ 3. **Run code gen** - \`npm run gen\` after API changes
59
+ 4. **Use generated client** - Not fetch()
60
+ 5. **Context not req** - \`ctx.auth\`, \`ctx.cache\`, \`ctx.rateLimit\`
61
+
62
+ ## If You're About to Write Code
63
+
64
+ ### Adding an endpoint?
65
+ 1. Add abstract method to @Controller in api.ts
66
+ 2. Implement in controller
67
+ 3. Run \`npm run gen\`
68
+ 4. Tests use generated client
69
+
70
+ ### Using authentication?
71
+ - \`{ auth: 'jwt' }\` in route options
72
+ - Access via \`ctx.auth?.user\`
73
+ - NOT \`req.user\`
74
+
75
+ ### Using cache?
76
+ - Add \`cache: { key: ':route', ttl: 300 }\`
77
+ - Check \`ctx.cache?.hit\` in handler
78
+ - Response cached automatically
79
+
80
+ ### Making client calls?
81
+ - Only use \`createClientProxy(YourApi, { baseUrl, token })\`
82
+ - NOT fetch(), axios, or custom clients
83
+ - Generated client handles serialization, validation
84
+
85
+ ## See These Files
86
+
87
+ - \`api.ts\` - All controllers and schemas (source of truth)
88
+ - \`controllers.ts\` - Handler implementations
89
+ - \`node_modules/plat/AGENTS.md\` - Full AI guide
90
+ - \`node_modules/plat/PATTERNS.md\` - Copy-paste patterns
91
+
92
+ ## Emergency Check
93
+
94
+ Before commit, verify:
95
+ - [ ] No \`fetch()\` calls in app code
96
+ - [ ] No type definitions outside Zod schemas
97
+ - [ ] All data passing through function params or ctx
98
+ - [ ] Client uses generated proxy
99
+ - [ ] \`npm run gen\` has been run
100
+ `;
101
+ /**
102
+ * Inject or upsert guidance files into user's project
103
+ */
104
+ export function initProject(cwd) {
105
+ try {
106
+ const agentsPath = path.join(cwd, 'AGENTS.md');
107
+ const claudePath = path.join(cwd, 'CLAUDE.md');
108
+ // Write AGENTS.md
109
+ if (fs.existsSync(agentsPath)) {
110
+ console.log('📄 AGENTS.md already exists (not overwriting)');
111
+ }
112
+ else {
113
+ fs.writeFileSync(agentsPath, AGENTS_TEMPLATE);
114
+ console.log('✅ Created AGENTS.md');
115
+ }
116
+ // Write CLAUDE.md
117
+ if (fs.existsSync(claudePath)) {
118
+ console.log('📄 CLAUDE.md already exists (not overwriting)');
119
+ }
120
+ else {
121
+ fs.writeFileSync(claudePath, CLAUDE_TEMPLATE);
122
+ console.log('✅ Created CLAUDE.md');
123
+ }
124
+ console.log('');
125
+ console.log('🤖 AI Agent Guidance Installed');
126
+ console.log('');
127
+ console.log('These files help Claude and other AI understand plat:');
128
+ console.log(' - AGENTS.md - Complete AI developer guide');
129
+ console.log(' - CLAUDE.md - This project\'s plat patterns');
130
+ console.log('');
131
+ console.log('Claude will read these automatically in future sessions.');
132
+ console.log('');
133
+ // Also initialize .env
134
+ console.log('Setting up environment...');
135
+ const { envUpsert } = require('./env');
136
+ envUpsert(cwd);
137
+ }
138
+ catch (error) {
139
+ console.error('❌ Error initializing project:', error.message);
140
+ process.exit(1);
141
+ }
142
+ }
143
+ //# sourceMappingURL=init-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/cli/commands/init-project.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CvB,CAAA;AAED,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDvB,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QAE9C,kBAAkB;QAClB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAA;QAC9D,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;YAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QACpC,CAAC;QAED,kBAAkB;QAClB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAA;QAC9D,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;YAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QACpC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;QACpE,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAA;QAC7D,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;QACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEf,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;QACxC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QACtC,SAAS,CAAC,GAAG,CAAC,CAAA;IAChB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * JWT command for token generation
3
+ * Wrapper around jwt-helper functionality
4
+ */
5
+ /**
6
+ * Generate JWT token from CLI arguments
7
+ * Usage: plat jwt generate --user-id=1 --role=admin
8
+ */
9
+ export declare function jwtGenerate(cwd: string, args: string[]): Promise<void>;
10
+ //# sourceMappingURL=jwt-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/jwt-cmd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * JWT command for token generation
3
+ * Wrapper around jwt-helper functionality
4
+ */
5
+ import dotenv from 'dotenv';
6
+ import path from 'path';
7
+ import { generateJwtFromCliArgs, getAuthHeader } from '../jwt-helper';
8
+ /**
9
+ * Generate JWT token from CLI arguments
10
+ * Usage: plat jwt generate --user-id=1 --role=admin
11
+ */
12
+ export async function jwtGenerate(cwd, args) {
13
+ try {
14
+ // Load .env from cwd
15
+ const envPath = path.join(cwd, '.env');
16
+ dotenv.config({ path: envPath });
17
+ // Generate token
18
+ const token = generateJwtFromCliArgs(args);
19
+ console.log('✅ JWT token generated successfully');
20
+ console.log('');
21
+ console.log('Token:');
22
+ console.log(token);
23
+ console.log('');
24
+ console.log('Usage in curl request:');
25
+ const baseUrl = process.env.API_BASE_URL || process.env.BASE_URL || 'http://localhost:3000';
26
+ console.log(` curl -H "Authorization: ${getAuthHeader(token)}" ${baseUrl}/api/orders`);
27
+ }
28
+ catch (error) {
29
+ console.error('❌ Error:', error.message);
30
+ process.exit(1);
31
+ }
32
+ }
33
+ //# sourceMappingURL=jwt-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/jwt-cmd.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAErE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,IAAc;IAC3D,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAEhC,iBAAiB;QACjB,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAA;QAE1C,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,uBAAuB,CAAA;QAC3F,OAAO,CAAC,GAAG,CACT,6BAA6B,aAAa,CAAC,KAAK,CAAC,KAAK,OAAO,aAAa,CAC3E,CAAA;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * plat run [--src <file-or-url>] <command> [--key=value ...]
3
+ */
4
+ export declare function runOpenApi(cwd: string, argv?: string[]): Promise<void>;
5
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhF"}
@@ -0,0 +1,31 @@
1
+ import { runCli } from '../runtime';
2
+ import { getArgValue, getFirstPositionalArg, hasDirectorySpec, isUrl, loadSpecSource, looksLikeHost, stripFirstPositionalArg, stripOption } from '../spec-source';
3
+ /**
4
+ * plat run [--src <file-or-url>] <command> [--key=value ...]
5
+ */
6
+ export async function runOpenApi(cwd, argv = []) {
7
+ const explicitSrc = getArgValue(argv, '--src');
8
+ const positionalSrc = explicitSrc ? undefined : await inferPositionalSource(argv, cwd);
9
+ const src = explicitSrc ?? positionalSrc;
10
+ const withoutSrcFlag = stripOption(argv, '--src');
11
+ const passthrough = positionalSrc ? stripFirstPositionalArg(withoutSrcFlag) : withoutSrcFlag;
12
+ const { spec, baseUrl } = await loadSpecSource(src, cwd);
13
+ await runCli(spec, passthrough, { baseUrl });
14
+ }
15
+ async function inferPositionalSource(argv, cwd) {
16
+ const candidate = getFirstPositionalArg(argv);
17
+ if (!candidate)
18
+ return undefined;
19
+ if (isUrl(candidate))
20
+ return candidate;
21
+ if (/\.(json|ya?ml)$/i.test(candidate))
22
+ return candidate;
23
+ if (looksLikeHost(candidate))
24
+ return candidate;
25
+ if (candidate.includes('/') || candidate.includes('\\'))
26
+ return candidate;
27
+ if (await hasDirectorySpec(candidate, cwd))
28
+ return candidate;
29
+ return undefined;
30
+ }
31
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjK;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,OAAiB,EAAE;IAC/D,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtF,MAAM,GAAG,GAAG,WAAW,IAAI,aAAa,CAAA;IACxC,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACjD,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAA;IAC5F,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACxD,MAAM,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,IAAc,EAAE,GAAW;IAC9D,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAA;IAChC,IAAI,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IACtC,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IACxD,IAAI,aAAa,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IACzE,IAAI,MAAM,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAC5D,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function serveControllers(cwd: string, argv?: string[]): void;
2
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAWA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,IAAI,CA+BvE"}
@@ -0,0 +1,43 @@
1
+ import { execSync } from 'child_process';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = path.dirname(__filename);
6
+ function scriptDir() {
7
+ return path.resolve(__dirname, '../../..', 'scripts');
8
+ }
9
+ export function serveControllers(cwd, argv = []) {
10
+ const scriptPath = path.join(scriptDir(), 'serve-glob.ts');
11
+ const args = [];
12
+ let sawSrc = false;
13
+ for (let i = 0; i < argv.length; i++) {
14
+ const arg = argv[i];
15
+ if (!arg?.startsWith('--'))
16
+ continue;
17
+ if (['--src', '--port', '--host', '--cors', '--openapi'].includes(arg)) {
18
+ if (arg === '--src')
19
+ sawSrc = true;
20
+ args.push(arg);
21
+ if (argv[i + 1] && !argv[i + 1].startsWith('--')) {
22
+ args.push(argv[i + 1]);
23
+ i += 1;
24
+ }
25
+ continue;
26
+ }
27
+ if (['--src', '--port', '--host', '--cors', '--openapi'].some((flag) => arg.startsWith(`${flag}=`))) {
28
+ if (arg.startsWith('--src='))
29
+ sawSrc = true;
30
+ args.push(arg);
31
+ }
32
+ }
33
+ if (!sawSrc) {
34
+ const positional = argv.find((arg) => arg && !arg.startsWith('--'));
35
+ if (positional)
36
+ args.push('--src', positional);
37
+ }
38
+ execSync(`npx tsx "${scriptPath}" ${args.map((arg) => `"${arg}"`).join(' ')}`.trim(), {
39
+ cwd,
40
+ stdio: 'inherit',
41
+ });
42
+ }
43
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAE1C,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAAiB,EAAE;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,CAAA;IAC1D,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC;YAAE,SAAQ;QACpC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvE,IAAI,GAAG,KAAK,OAAO;gBAAE,MAAM,GAAG,IAAI,CAAA;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACd,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAA;gBACvB,CAAC,IAAI,CAAC,CAAA;YACR,CAAC;YACD,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACpG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,MAAM,GAAG,IAAI,CAAA;YAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QACnE,IAAI,UAAU;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;IAChD,CAAC;IAED,QAAQ,CAAC,YAAY,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;QACpF,GAAG;QACH,KAAK,EAAE,SAAS;KACjB,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Watch *.api.ts files and regenerate on changes
3
+ */
4
+ export declare function watch(cwd: string): void;
5
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AA6FA;;GAEG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiDvC"}
@@ -0,0 +1,119 @@
1
+ import chokidar from 'chokidar';
2
+ import { execSync } from 'child_process';
3
+ import path from 'path';
4
+ const state = {
5
+ currentProcess: null,
6
+ lastChangeTime: 0,
7
+ isRunning: false,
8
+ pendingRun: false,
9
+ };
10
+ const DEBOUNCE_MS = 300;
11
+ /**
12
+ * Run the gen command
13
+ */
14
+ function runGen(cwd) {
15
+ return new Promise((resolve, reject) => {
16
+ try {
17
+ console.log('🔄 Running npm run gen...');
18
+ const startTime = Date.now();
19
+ execSync('npm run gen', {
20
+ cwd,
21
+ stdio: 'inherit',
22
+ });
23
+ const duration = Date.now() - startTime;
24
+ console.log(`✅ Gen completed in ${duration}ms`);
25
+ resolve();
26
+ }
27
+ catch (error) {
28
+ console.error('❌ Gen failed:', error.message);
29
+ reject(error);
30
+ }
31
+ });
32
+ }
33
+ /**
34
+ * Schedule a gen run with debouncing and restart logic
35
+ */
36
+ function scheduleGen(cwd) {
37
+ state.pendingRun = true;
38
+ // Clear any existing debounce
39
+ if (state.currentProcess) {
40
+ clearTimeout(state.currentProcess);
41
+ }
42
+ // Set debounce timer
43
+ state.currentProcess = setTimeout(() => {
44
+ state.currentProcess = null;
45
+ // If we're already running, just mark pending
46
+ if (state.isRunning) {
47
+ console.log('📝 Change detected (queued for restart)');
48
+ return;
49
+ }
50
+ // Run gen
51
+ state.isRunning = true;
52
+ state.pendingRun = false;
53
+ runGen(cwd)
54
+ .then(() => {
55
+ state.isRunning = false;
56
+ // If there were changes while running, restart
57
+ if (state.pendingRun) {
58
+ state.pendingRun = false;
59
+ console.log('🔄 Restarting gen due to new changes...');
60
+ scheduleGen(cwd);
61
+ }
62
+ })
63
+ .catch((error) => {
64
+ state.isRunning = false;
65
+ console.error('Error during gen:', error);
66
+ // Continue watching even after error
67
+ if (state.pendingRun) {
68
+ state.pendingRun = false;
69
+ scheduleGen(cwd);
70
+ }
71
+ });
72
+ }, DEBOUNCE_MS);
73
+ }
74
+ /**
75
+ * Watch *.api.ts files and regenerate on changes
76
+ */
77
+ export function watch(cwd) {
78
+ console.log('👁️ Watching for *.api.ts changes...');
79
+ console.log(`📁 Watching: ${cwd}`);
80
+ console.log('⌛ Press Ctrl+C to stop');
81
+ console.log('');
82
+ // Watch for .api.ts files
83
+ const watcher = chokidar.watch('**/*.api.ts', {
84
+ cwd,
85
+ ignored: /node_modules/,
86
+ persistent: true,
87
+ ignoreInitial: true,
88
+ awaitWriteFinish: {
89
+ stabilityThreshold: 200,
90
+ pollInterval: 100,
91
+ },
92
+ });
93
+ watcher.on('change', (filePath) => {
94
+ const fullPath = path.join(cwd, filePath);
95
+ console.log(`📝 Changed: ${filePath}`);
96
+ scheduleGen(cwd);
97
+ });
98
+ watcher.on('add', (filePath) => {
99
+ console.log(`➕ Added: ${filePath}`);
100
+ scheduleGen(cwd);
101
+ });
102
+ watcher.on('unlink', (filePath) => {
103
+ console.log(`🗑️ Deleted: ${filePath}`);
104
+ scheduleGen(cwd);
105
+ });
106
+ watcher.on('error', (error) => {
107
+ console.error('❌ Watcher error:', error);
108
+ });
109
+ // Handle graceful shutdown
110
+ process.on('SIGINT', () => {
111
+ console.log('\n\n👋 Stopping watcher...');
112
+ watcher.close();
113
+ if (state.currentProcess) {
114
+ clearTimeout(state.currentProcess);
115
+ }
116
+ process.exit(0);
117
+ });
118
+ }
119
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export * from './runtime';
2
+ export * from './proxy';
3
+ export * from './jwt-helper';
4
+ export * from './commands/env';
5
+ export * from './commands/gen';
6
+ export * from './commands/api-proxy';
7
+ export * from './commands/jwt-cmd';
8
+ export * from './commands/init-project';
9
+ export * from './commands/watch';
10
+ export * from './commands/run';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,11 @@
1
+ export * from './runtime';
2
+ export * from './proxy';
3
+ export * from './jwt-helper';
4
+ export * from './commands/env';
5
+ export * from './commands/gen';
6
+ export * from './commands/api-proxy';
7
+ export * from './commands/jwt-cmd';
8
+ export * from './commands/init-project';
9
+ export * from './commands/watch';
10
+ export * from './commands/run';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * JWT Helper for CLI tool
3
+ * Enables CLI to generate and use JWT tokens for authentication
4
+ */
5
+ export interface JwtPayload {
6
+ [key: string]: any;
7
+ }
8
+ /**
9
+ * Generate a JWT token from CLI arguments
10
+ * Usage: plat-jwt --user-id=123 --role=admin
11
+ */
12
+ export declare function generateJwtFromCliArgs(args: string[]): string;
13
+ /**
14
+ * Create an auth header value for API requests
15
+ */
16
+ export declare function getAuthHeader(token: string): string;
17
+ /**
18
+ * Get JWT credentials from environment
19
+ * Returns null if JWT_SECRET is not set
20
+ */
21
+ export declare function getJwtCredentials(): {
22
+ secret: string;
23
+ expiresIn: string;
24
+ } | null;
25
+ /**
26
+ * Parse and validate a JWT token (basic validation)
27
+ */
28
+ export declare function parseJwtToken(token: string): {
29
+ header: any;
30
+ payload: any;
31
+ } | null;
32
+ //# sourceMappingURL=jwt-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-helper.d.ts","sourceRoot":"","sources":["../../src/cli/jwt-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAiC7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,IAAI,CAUP;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,GAAG,IAAI,CAiBjF"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * JWT Helper for CLI tool
3
+ * Enables CLI to generate and use JWT tokens for authentication
4
+ */
5
+ import dotenv from 'dotenv';
6
+ import { signToken } from '../server/auth/jwt';
7
+ // Load .env file
8
+ dotenv.config();
9
+ /**
10
+ * Generate a JWT token from CLI arguments
11
+ * Usage: plat-jwt --user-id=123 --role=admin
12
+ */
13
+ export function generateJwtFromCliArgs(args) {
14
+ const secret = process.env.JWT_SECRET;
15
+ if (!secret) {
16
+ throw new Error('JWT_SECRET environment variable is not set. ' +
17
+ 'Please set JWT_SECRET in your .env file or environment.');
18
+ }
19
+ // Parse arguments into payload
20
+ const payload = {};
21
+ for (const arg of args) {
22
+ if (arg.startsWith('--')) {
23
+ const parts = arg.slice(2).split('=');
24
+ const key = parts[0];
25
+ if (!key)
26
+ continue; // Skip if no key
27
+ const value = parts.slice(1).join('='); // In case value contains '='
28
+ if (!value) {
29
+ payload[key] = true;
30
+ }
31
+ else {
32
+ // Try to parse as JSON, otherwise treat as string
33
+ try {
34
+ payload[key] = JSON.parse(value);
35
+ }
36
+ catch {
37
+ payload[key] = value;
38
+ }
39
+ }
40
+ }
41
+ }
42
+ const expiresIn = process.env.JWT_EXPIRES_IN || '24h';
43
+ return signToken(payload, { secret, expiresIn });
44
+ }
45
+ /**
46
+ * Create an auth header value for API requests
47
+ */
48
+ export function getAuthHeader(token) {
49
+ return `Bearer ${token}`;
50
+ }
51
+ /**
52
+ * Get JWT credentials from environment
53
+ * Returns null if JWT_SECRET is not set
54
+ */
55
+ export function getJwtCredentials() {
56
+ const secret = process.env.JWT_SECRET;
57
+ if (!secret) {
58
+ return null;
59
+ }
60
+ return {
61
+ secret,
62
+ expiresIn: process.env.JWT_EXPIRES_IN || '24h',
63
+ };
64
+ }
65
+ /**
66
+ * Parse and validate a JWT token (basic validation)
67
+ */
68
+ export function parseJwtToken(token) {
69
+ try {
70
+ const parts = token.split('.');
71
+ if (parts.length !== 3 || !parts[0] || !parts[1]) {
72
+ return null;
73
+ }
74
+ const headerStr = Buffer.from(parts[0], 'base64').toString('utf-8');
75
+ const payloadStr = Buffer.from(parts[1], 'base64').toString('utf-8');
76
+ const header = JSON.parse(headerStr);
77
+ const payload = JSON.parse(payloadStr);
78
+ return { header, payload };
79
+ }
80
+ catch {
81
+ return null;
82
+ }
83
+ }
84
+ //# sourceMappingURL=jwt-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-helper.js","sourceRoot":"","sources":["../../src/cli/jwt-helper.ts"],"names":[],"mappings":"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"}