@planu/cli 0.27.0 → 0.29.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 (273) hide show
  1. package/dist/config/model-routing-rules.json +98 -0
  2. package/dist/config/tool-groups.json +140 -0
  3. package/dist/engine/ai-cost-estimator/core.d.ts +1 -1
  4. package/dist/engine/ai-cost-estimator/core.d.ts.map +1 -1
  5. package/dist/engine/ai-cost-estimator/core.js +3 -167
  6. package/dist/engine/ai-cost-estimator/core.js.map +1 -1
  7. package/dist/engine/ai-cost-estimator/recommender.d.ts +8 -0
  8. package/dist/engine/ai-cost-estimator/recommender.d.ts.map +1 -0
  9. package/dist/engine/ai-cost-estimator/recommender.js +94 -0
  10. package/dist/engine/ai-cost-estimator/recommender.js.map +1 -0
  11. package/dist/engine/ai-cost-estimator/spec-loader.d.ts +13 -0
  12. package/dist/engine/ai-cost-estimator/spec-loader.d.ts.map +1 -0
  13. package/dist/engine/ai-cost-estimator/spec-loader.js +102 -0
  14. package/dist/engine/ai-cost-estimator/spec-loader.js.map +1 -0
  15. package/dist/engine/code-transforms/transform-engine.d.ts +7 -0
  16. package/dist/engine/code-transforms/transform-engine.d.ts.map +1 -0
  17. package/dist/engine/code-transforms/transform-engine.js +67 -0
  18. package/dist/engine/code-transforms/transform-engine.js.map +1 -0
  19. package/dist/engine/code-transforms/typescript/add-error-handling.d.ts +6 -0
  20. package/dist/engine/code-transforms/typescript/add-error-handling.d.ts.map +1 -0
  21. package/dist/engine/code-transforms/typescript/add-error-handling.js +92 -0
  22. package/dist/engine/code-transforms/typescript/add-error-handling.js.map +1 -0
  23. package/dist/engine/code-transforms/typescript/add-jsdoc.d.ts +6 -0
  24. package/dist/engine/code-transforms/typescript/add-jsdoc.d.ts.map +1 -0
  25. package/dist/engine/code-transforms/typescript/add-jsdoc.js +83 -0
  26. package/dist/engine/code-transforms/typescript/add-jsdoc.js.map +1 -0
  27. package/dist/engine/code-transforms/typescript/add-types.d.ts +3 -0
  28. package/dist/engine/code-transforms/typescript/add-types.d.ts.map +1 -0
  29. package/dist/engine/code-transforms/typescript/add-types.js +182 -0
  30. package/dist/engine/code-transforms/typescript/add-types.js.map +1 -0
  31. package/dist/engine/code-transforms/typescript/ast-utils.d.ts +38 -0
  32. package/dist/engine/code-transforms/typescript/ast-utils.d.ts.map +1 -0
  33. package/dist/engine/code-transforms/typescript/ast-utils.js +90 -0
  34. package/dist/engine/code-transforms/typescript/ast-utils.js.map +1 -0
  35. package/dist/engine/code-transforms/typescript/extract-interface.d.ts +6 -0
  36. package/dist/engine/code-transforms/typescript/extract-interface.d.ts.map +1 -0
  37. package/dist/engine/code-transforms/typescript/extract-interface.js +103 -0
  38. package/dist/engine/code-transforms/typescript/extract-interface.js.map +1 -0
  39. package/dist/engine/code-transforms/typescript/modernize-syntax.d.ts +3 -0
  40. package/dist/engine/code-transforms/typescript/modernize-syntax.d.ts.map +1 -0
  41. package/dist/engine/code-transforms/typescript/modernize-syntax.js +213 -0
  42. package/dist/engine/code-transforms/typescript/modernize-syntax.js.map +1 -0
  43. package/dist/engine/code-transforms/typescript/rename-symbol.d.ts +8 -0
  44. package/dist/engine/code-transforms/typescript/rename-symbol.d.ts.map +1 -0
  45. package/dist/engine/code-transforms/typescript/rename-symbol.js +40 -0
  46. package/dist/engine/code-transforms/typescript/rename-symbol.js.map +1 -0
  47. package/dist/engine/focus-tracker.d.ts.map +1 -1
  48. package/dist/engine/focus-tracker.js +1 -0
  49. package/dist/engine/focus-tracker.js.map +1 -1
  50. package/dist/engine/mermaid/core.d.ts +18 -0
  51. package/dist/engine/mermaid/core.d.ts.map +1 -0
  52. package/dist/engine/mermaid/core.js +88 -0
  53. package/dist/engine/mermaid/core.js.map +1 -0
  54. package/dist/engine/mermaid/diagram-generators.d.ts +22 -0
  55. package/dist/engine/mermaid/diagram-generators.d.ts.map +1 -0
  56. package/dist/engine/mermaid/diagram-generators.js +139 -0
  57. package/dist/engine/mermaid/diagram-generators.js.map +1 -0
  58. package/dist/engine/mermaid/helpers.d.ts +8 -0
  59. package/dist/engine/mermaid/helpers.d.ts.map +1 -0
  60. package/dist/engine/mermaid/helpers.js +61 -0
  61. package/dist/engine/mermaid/helpers.js.map +1 -0
  62. package/dist/engine/mermaid-generator.d.ts +2 -37
  63. package/dist/engine/mermaid-generator.d.ts.map +1 -1
  64. package/dist/engine/mermaid-generator.js +4 -276
  65. package/dist/engine/mermaid-generator.js.map +1 -1
  66. package/dist/engine/model-router/complexity-analyzer.d.ts +26 -0
  67. package/dist/engine/model-router/complexity-analyzer.d.ts.map +1 -0
  68. package/dist/engine/model-router/complexity-analyzer.js +182 -0
  69. package/dist/engine/model-router/complexity-analyzer.js.map +1 -0
  70. package/dist/engine/model-router/cost-estimator.d.ts +6 -0
  71. package/dist/engine/model-router/cost-estimator.d.ts.map +1 -0
  72. package/dist/engine/model-router/cost-estimator.js +60 -0
  73. package/dist/engine/model-router/cost-estimator.js.map +1 -0
  74. package/dist/engine/model-router/historical-learner.d.ts +26 -0
  75. package/dist/engine/model-router/historical-learner.d.ts.map +1 -0
  76. package/dist/engine/model-router/historical-learner.js +91 -0
  77. package/dist/engine/model-router/historical-learner.js.map +1 -0
  78. package/dist/engine/model-router/rules-engine.d.ts +13 -0
  79. package/dist/engine/model-router/rules-engine.d.ts.map +1 -0
  80. package/dist/engine/model-router/rules-engine.js +142 -0
  81. package/dist/engine/model-router/rules-engine.js.map +1 -0
  82. package/dist/engine/planu-config-writer.d.ts +2 -2
  83. package/dist/engine/planu-config-writer.d.ts.map +1 -1
  84. package/dist/engine/planu-config-writer.js +4 -6
  85. package/dist/engine/planu-config-writer.js.map +1 -1
  86. package/dist/engine/spec-coverage/criteria-mapper.d.ts +1 -2
  87. package/dist/engine/spec-coverage/criteria-mapper.d.ts.map +1 -1
  88. package/dist/engine/spec-coverage/criteria-mapper.js +4 -203
  89. package/dist/engine/spec-coverage/criteria-mapper.js.map +1 -1
  90. package/dist/engine/spec-coverage/keyword-extractor.d.ts +10 -0
  91. package/dist/engine/spec-coverage/keyword-extractor.d.ts.map +1 -0
  92. package/dist/engine/spec-coverage/keyword-extractor.js +147 -0
  93. package/dist/engine/spec-coverage/keyword-extractor.js.map +1 -0
  94. package/dist/engine/spec-coverage/test-matchers.d.ts +9 -0
  95. package/dist/engine/spec-coverage/test-matchers.d.ts.map +1 -0
  96. package/dist/engine/spec-coverage/test-matchers.js +59 -0
  97. package/dist/engine/spec-coverage/test-matchers.js.map +1 -0
  98. package/dist/engine/spec-migrator.d.ts +17 -0
  99. package/dist/engine/spec-migrator.d.ts.map +1 -0
  100. package/dist/engine/spec-migrator.js +119 -0
  101. package/dist/engine/spec-migrator.js.map +1 -0
  102. package/dist/engine/spec-templates/catalog-extra.d.ts +1 -1
  103. package/dist/engine/spec-templates/catalog-extra.d.ts.map +1 -1
  104. package/dist/engine/spec-templates/catalog-extra.js +8 -363
  105. package/dist/engine/spec-templates/catalog-extra.js.map +1 -1
  106. package/dist/engine/spec-templates/catalog.d.ts.map +1 -1
  107. package/dist/engine/spec-templates/catalog.js +10 -381
  108. package/dist/engine/spec-templates/catalog.js.map +1 -1
  109. package/dist/engine/spec-templates/templates-api-ui.d.ts +6 -0
  110. package/dist/engine/spec-templates/templates-api-ui.d.ts.map +1 -0
  111. package/dist/engine/spec-templates/templates-api-ui.js +188 -0
  112. package/dist/engine/spec-templates/templates-api-ui.js.map +1 -0
  113. package/dist/engine/spec-templates/templates-auth-crud.d.ts +6 -0
  114. package/dist/engine/spec-templates/templates-auth-crud.d.ts.map +1 -0
  115. package/dist/engine/spec-templates/templates-auth-crud.js +198 -0
  116. package/dist/engine/spec-templates/templates-auth-crud.js.map +1 -0
  117. package/dist/engine/spec-templates/templates-data-security.d.ts +6 -0
  118. package/dist/engine/spec-templates/templates-data-security.d.ts.map +1 -0
  119. package/dist/engine/spec-templates/templates-data-security.js +172 -0
  120. package/dist/engine/spec-templates/templates-data-security.js.map +1 -0
  121. package/dist/engine/spec-templates/templates-perf-integration.d.ts +6 -0
  122. package/dist/engine/spec-templates/templates-perf-integration.d.ts.map +1 -0
  123. package/dist/engine/spec-templates/templates-perf-integration.js +199 -0
  124. package/dist/engine/spec-templates/templates-perf-integration.js.map +1 -0
  125. package/dist/engine/tool-groups/context-analyzer.d.ts +11 -0
  126. package/dist/engine/tool-groups/context-analyzer.d.ts.map +1 -0
  127. package/dist/engine/tool-groups/context-analyzer.js +40 -0
  128. package/dist/engine/tool-groups/context-analyzer.js.map +1 -0
  129. package/dist/engine/tool-groups/group-manager.d.ts +35 -0
  130. package/dist/engine/tool-groups/group-manager.d.ts.map +1 -0
  131. package/dist/engine/tool-groups/group-manager.js +201 -0
  132. package/dist/engine/tool-groups/group-manager.js.map +1 -0
  133. package/dist/engine/vector-store/hnsw.d.ts +37 -0
  134. package/dist/engine/vector-store/hnsw.d.ts.map +1 -0
  135. package/dist/engine/vector-store/hnsw.js +294 -0
  136. package/dist/engine/vector-store/hnsw.js.map +1 -0
  137. package/dist/engine/vector-store/similarity.d.ts +21 -0
  138. package/dist/engine/vector-store/similarity.d.ts.map +1 -0
  139. package/dist/engine/vector-store/similarity.js +86 -0
  140. package/dist/engine/vector-store/similarity.js.map +1 -0
  141. package/dist/engine/vector-store/tfidf.d.ts +35 -0
  142. package/dist/engine/vector-store/tfidf.d.ts.map +1 -0
  143. package/dist/engine/vector-store/tfidf.js +255 -0
  144. package/dist/engine/vector-store/tfidf.js.map +1 -0
  145. package/dist/engine/web-fetcher/registry-loader.d.ts.map +1 -1
  146. package/dist/engine/web-fetcher/registry-loader.js +2 -0
  147. package/dist/engine/web-fetcher/registry-loader.js.map +1 -1
  148. package/dist/index.js +19 -0
  149. package/dist/index.js.map +1 -1
  150. package/dist/storage/vector-store/backend-factory.d.ts +9 -0
  151. package/dist/storage/vector-store/backend-factory.d.ts.map +1 -0
  152. package/dist/storage/vector-store/backend-factory.js +33 -0
  153. package/dist/storage/vector-store/backend-factory.js.map +1 -0
  154. package/dist/storage/vector-store/json-fallback.d.ts +21 -0
  155. package/dist/storage/vector-store/json-fallback.d.ts.map +1 -0
  156. package/dist/storage/vector-store/json-fallback.js +85 -0
  157. package/dist/storage/vector-store/json-fallback.js.map +1 -0
  158. package/dist/storage/vector-store/migrator.d.ts +10 -0
  159. package/dist/storage/vector-store/migrator.d.ts.map +1 -0
  160. package/dist/storage/vector-store/migrator.js +139 -0
  161. package/dist/storage/vector-store/migrator.js.map +1 -0
  162. package/dist/storage/vector-store/sqlite-adapter.d.ts +28 -0
  163. package/dist/storage/vector-store/sqlite-adapter.d.ts.map +1 -0
  164. package/dist/storage/vector-store/sqlite-adapter.js +142 -0
  165. package/dist/storage/vector-store/sqlite-adapter.js.map +1 -0
  166. package/dist/tools/create-spec/constitution-validator.d.ts +4 -0
  167. package/dist/tools/create-spec/constitution-validator.d.ts.map +1 -0
  168. package/dist/tools/create-spec/constitution-validator.js +37 -0
  169. package/dist/tools/create-spec/constitution-validator.js.map +1 -0
  170. package/dist/tools/create-spec/post-creation.d.ts +11 -0
  171. package/dist/tools/create-spec/post-creation.d.ts.map +1 -0
  172. package/dist/tools/create-spec/post-creation.js +48 -0
  173. package/dist/tools/create-spec/post-creation.js.map +1 -0
  174. package/dist/tools/create-spec/spec-builder.d.ts +14 -0
  175. package/dist/tools/create-spec/spec-builder.d.ts.map +1 -0
  176. package/dist/tools/create-spec/spec-builder.js +131 -0
  177. package/dist/tools/create-spec/spec-builder.js.map +1 -0
  178. package/dist/tools/create-spec.d.ts.map +1 -1
  179. package/dist/tools/create-spec.js +42 -172
  180. package/dist/tools/create-spec.js.map +1 -1
  181. package/dist/tools/data-governance/audit-handler.d.ts.map +1 -1
  182. package/dist/tools/data-governance/audit-handler.js +1 -0
  183. package/dist/tools/data-governance/audit-handler.js.map +1 -1
  184. package/dist/tools/design-schema.d.ts.map +1 -1
  185. package/dist/tools/design-schema.js +1 -0
  186. package/dist/tools/design-schema.js.map +1 -1
  187. package/dist/tools/init-project/handler.d.ts.map +1 -1
  188. package/dist/tools/init-project/handler.js +48 -14
  189. package/dist/tools/init-project/handler.js.map +1 -1
  190. package/dist/tools/recommend-model-handler.d.ts +8 -0
  191. package/dist/tools/recommend-model-handler.d.ts.map +1 -0
  192. package/dist/tools/recommend-model-handler.js +65 -0
  193. package/dist/tools/recommend-model-handler.js.map +1 -0
  194. package/dist/tools/register-ai-cost-tools.js +1 -1
  195. package/dist/tools/register-ai-cost-tools.js.map +1 -1
  196. package/dist/tools/register-model-tools.d.ts +3 -0
  197. package/dist/tools/register-model-tools.d.ts.map +1 -0
  198. package/dist/tools/register-model-tools.js +50 -0
  199. package/dist/tools/register-model-tools.js.map +1 -0
  200. package/dist/tools/register-search-tools.d.ts +7 -0
  201. package/dist/tools/register-search-tools.d.ts.map +1 -0
  202. package/dist/tools/register-search-tools.js +34 -0
  203. package/dist/tools/register-search-tools.js.map +1 -0
  204. package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
  205. package/dist/tools/register-spec-tools/core-spec-tools.js +0 -4
  206. package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
  207. package/dist/tools/register-tool-groups.d.ts +7 -0
  208. package/dist/tools/register-tool-groups.d.ts.map +1 -0
  209. package/dist/tools/register-tool-groups.js +39 -0
  210. package/dist/tools/register-tool-groups.js.map +1 -0
  211. package/dist/tools/register-transform-tools.d.ts +3 -0
  212. package/dist/tools/register-transform-tools.d.ts.map +1 -0
  213. package/dist/tools/register-transform-tools.js +29 -0
  214. package/dist/tools/register-transform-tools.js.map +1 -0
  215. package/dist/tools/semantic-search-handler.d.ts +7 -0
  216. package/dist/tools/semantic-search-handler.d.ts.map +1 -0
  217. package/dist/tools/semantic-search-handler.js +72 -0
  218. package/dist/tools/semantic-search-handler.js.map +1 -0
  219. package/dist/tools/suggest-tooling/orchestration-generator.js +1 -1
  220. package/dist/tools/suggest-tooling/orchestration-generator.js.map +1 -1
  221. package/dist/tools/tool-group-handler.d.ts +9 -0
  222. package/dist/tools/tool-group-handler.d.ts.map +1 -0
  223. package/dist/tools/tool-group-handler.js +82 -0
  224. package/dist/tools/tool-group-handler.js.map +1 -0
  225. package/dist/tools/transform-code-handler.d.ts +7 -0
  226. package/dist/tools/transform-code-handler.d.ts.map +1 -0
  227. package/dist/tools/transform-code-handler.js +58 -0
  228. package/dist/tools/transform-code-handler.js.map +1 -0
  229. package/dist/types/advanced-framework.d.ts +47 -0
  230. package/dist/types/advanced-framework.d.ts.map +1 -0
  231. package/dist/types/advanced-framework.js +3 -0
  232. package/dist/types/advanced-framework.js.map +1 -0
  233. package/dist/types/code-transforms.d.ts +114 -0
  234. package/dist/types/code-transforms.d.ts.map +1 -0
  235. package/dist/types/code-transforms.js +11 -0
  236. package/dist/types/code-transforms.js.map +1 -0
  237. package/dist/types/css-framework.d.ts +110 -0
  238. package/dist/types/css-framework.d.ts.map +1 -0
  239. package/dist/types/css-framework.js +3 -0
  240. package/dist/types/css-framework.js.map +1 -0
  241. package/dist/types/dashboard.d.ts +77 -0
  242. package/dist/types/dashboard.d.ts.map +1 -0
  243. package/dist/types/dashboard.js +2 -0
  244. package/dist/types/dashboard.js.map +1 -0
  245. package/dist/types/index.d.ts +4 -0
  246. package/dist/types/index.d.ts.map +1 -1
  247. package/dist/types/index.js +4 -0
  248. package/dist/types/index.js.map +1 -1
  249. package/dist/types/model-routing.d.ts +127 -0
  250. package/dist/types/model-routing.d.ts.map +1 -0
  251. package/dist/types/model-routing.js +3 -0
  252. package/dist/types/model-routing.js.map +1 -0
  253. package/dist/types/project/inputs.d.ts +0 -1
  254. package/dist/types/project/inputs.d.ts.map +1 -1
  255. package/dist/types/spec/core.d.ts +28 -1
  256. package/dist/types/spec/core.d.ts.map +1 -1
  257. package/dist/types/spec/inputs.d.ts +9 -6
  258. package/dist/types/spec/inputs.d.ts.map +1 -1
  259. package/dist/types/tool-groups.d.ts +57 -0
  260. package/dist/types/tool-groups.d.ts.map +1 -0
  261. package/dist/types/tool-groups.js +3 -0
  262. package/dist/types/tool-groups.js.map +1 -0
  263. package/dist/types/ui.d.ts +3 -231
  264. package/dist/types/ui.d.ts.map +1 -1
  265. package/dist/types/ui.js +7 -1
  266. package/dist/types/ui.js.map +1 -1
  267. package/dist/types/vector-store.d.ts +137 -0
  268. package/dist/types/vector-store.d.ts.map +1 -0
  269. package/dist/types/vector-store.js +3 -0
  270. package/dist/types/vector-store.js.map +1 -0
  271. package/package.json +1 -1
  272. package/src/config/model-routing-rules.json +98 -0
  273. package/src/config/tool-groups.json +140 -0
@@ -1,386 +1,15 @@
1
1
  // engine/spec-templates/catalog.ts — Built-in template catalog (language-agnostic).
2
2
  // Each template is framework/language agnostic: no TypeScript-specific terms.
3
- // Templates 6-8 (data, security, performance) live in catalog-extra.ts to keep file size ≤500L.
3
+ // Templates are defined in dedicated files and assembled here.
4
+ import { AUTH_JWT_TEMPLATE, CRUD_ENTITY_TEMPLATE } from './templates-auth-crud.js';
5
+ import { REST_API_ENDPOINT_TEMPLATE, UI_FORM_TEMPLATE } from './templates-api-ui.js';
4
6
  import { EXTRA_TEMPLATES } from './catalog-extra.js';
5
- /** Full catalog of built-in spec templates (core entries — templates 1–5). */
6
- const CORE_TEMPLATES = [
7
- {
8
- id: 'auth-jwt',
9
- name: 'JWT Authentication',
10
- category: 'auth',
11
- description: 'User authentication flow with JWT tokens: login, logout, refresh, and guards.',
12
- tags: ['auth', 'jwt', 'security', 'session'],
13
- variables: [
14
- {
15
- key: 'EntityName',
16
- label: 'Entity name',
17
- description: 'The name of the authenticated entity (User, Admin, Member…)',
18
- example: 'User',
19
- required: true,
20
- },
21
- {
22
- key: 'TokenExpiry',
23
- label: 'Token expiry',
24
- description: 'JWT access token expiry duration',
25
- example: '15 minutes',
26
- required: false,
27
- defaultValue: '15 minutes',
28
- },
29
- ],
30
- huTemplate: `# HU: JWT Authentication for {{EntityName}}
31
-
32
- ## User Story
33
- As a {{EntityName}}, I want to securely authenticate with JWT tokens so that my session is stateless and protected.
34
-
35
- ## Acceptance Criteria
36
-
37
- ### AC-1: Login endpoint
38
- - [ ] POST /auth/login accepts credentials and returns access + refresh tokens
39
- - [ ] Access token expires after {{TokenExpiry}}
40
- - [ ] Refresh token stored server-side and rotated on each use
41
- - [ ] Failed login returns 401 with no sensitive detail
42
-
43
- ### AC-2: Protected route guard
44
- - [ ] Every protected endpoint validates the Bearer token
45
- - [ ] Expired or invalid tokens return 401
46
- - [ ] Tampered tokens are rejected and logged
47
-
48
- ### AC-3: Token refresh
49
- - [ ] POST /auth/refresh issues new access token given a valid refresh token
50
- - [ ] Refresh token is single-use (rotation strategy)
51
-
52
- ### AC-4: Logout
53
- - [ ] POST /auth/logout invalidates the refresh token server-side
54
- - [ ] Client-side storage is cleared by the caller
55
-
56
- ### AC-5: Security requirements
57
- - [ ] Passwords stored as salted hash (bcrypt or Argon2 equivalent)
58
- - [ ] HTTPS enforced in production
59
- - [ ] Rate limiting on /auth/login (max 5 requests/minute per IP)
60
- - [ ] Brute-force protection with account lockout after N failures
61
-
62
- ## Out of Scope
63
- - OAuth2 / SSO providers (create separate spec)
64
- - Multi-factor authentication (create separate spec)
65
- `,
66
- fichaTecnicaTemplate: `# FICHA TÉCNICA: JWT Authentication for {{EntityName}}
67
-
68
- ## Affected Files
69
- - auth/login handler
70
- - auth/refresh handler
71
- - auth/logout handler
72
- - auth/middleware (token guard)
73
- - storage/token-store (refresh token persistence)
74
- - config/auth-config (token secrets, expiry settings)
75
-
76
- ## Types / Entities
77
- - \`{{EntityName}}\`: id, email, passwordHash, createdAt
78
- - \`AuthTokenPair\`: accessToken, refreshToken, expiresIn
79
- - \`RefreshTokenRecord\`: token, entityId, expiresAt, usedAt
80
-
81
- ## Risks
82
- - Token secret exposure → rotate secrets without downtime (risk: high)
83
- - Refresh token replay attack → single-use rotation required
84
- - Brute force on login → rate limiting + lockout required
85
-
86
- ## Estimation (rough)
87
- - Dev: 8–16 hours
88
- - Review: 2–4 hours
89
- - Difficulty: 3/5
90
- `,
91
- progressTemplate: `# PROGRESS: JWT Authentication for {{EntityName}}
92
-
93
- ## Status: draft
94
-
95
- ## Criteria
96
- - [ ] AC-1: Login endpoint
97
- - [ ] AC-2: Protected route guard
98
- - [ ] AC-3: Token refresh
99
- - [ ] AC-4: Logout
100
- - [ ] AC-5: Security requirements
101
- `,
102
- },
103
- {
104
- id: 'crud-entity',
105
- name: 'CRUD Entity',
106
- category: 'crud',
107
- description: 'Full Create/Read/Update/Delete lifecycle for any data entity.',
108
- tags: ['crud', 'rest', 'api', 'database'],
109
- variables: [
110
- {
111
- key: 'EntityName',
112
- label: 'Entity name',
113
- description: 'Name of the entity (singular, PascalCase)',
114
- example: 'Product',
115
- required: true,
116
- },
117
- {
118
- key: 'EntityPlural',
119
- label: 'Entity plural',
120
- description: 'Plural form of the entity name',
121
- example: 'Products',
122
- required: true,
123
- },
124
- ],
125
- huTemplate: `# HU: CRUD for {{EntityName}}
126
-
127
- ## User Story
128
- As a user, I want to create, view, update and delete {{EntityPlural}} so that I can manage them effectively.
129
-
130
- ## Acceptance Criteria
131
-
132
- ### AC-1: Create {{EntityName}}
133
- - [ ] POST /{{EntityPlural}} accepts valid payload and persists the entity
134
- - [ ] Duplicate detection where applicable
135
- - [ ] Returns the created entity with generated ID and timestamps
136
-
137
- ### AC-2: List {{EntityPlural}}
138
- - [ ] GET /{{EntityPlural}} returns paginated list
139
- - [ ] Supports filtering and sorting by key fields
140
- - [ ] Empty list returns 200 with empty array (not 404)
141
-
142
- ### AC-3: Get single {{EntityName}}
143
- - [ ] GET /{{EntityPlural}}/:id returns the entity or 404
144
- - [ ] Soft-deleted entities return 404
145
-
146
- ### AC-4: Update {{EntityName}}
147
- - [ ] PATCH /{{EntityPlural}}/:id applies partial update
148
- - [ ] PUT /{{EntityPlural}}/:id replaces the full entity
149
- - [ ] Returns updated entity on success
150
-
151
- ### AC-5: Delete {{EntityName}}
152
- - [ ] DELETE /{{EntityPlural}}/:id performs soft delete by default
153
- - [ ] Hard delete available as a privileged action
154
- - [ ] Returns 204 No Content on success
155
-
156
- ### AC-6: Validation
157
- - [ ] All inputs validated at the API boundary
158
- - [ ] Invalid fields return 422 with per-field error messages
159
- `,
160
- fichaTecnicaTemplate: `# FICHA TÉCNICA: CRUD for {{EntityName}}
161
-
162
- ## Affected Files
163
- - handlers/{{EntityPlural}}/create
164
- - handlers/{{EntityPlural}}/list
165
- - handlers/{{EntityPlural}}/get
166
- - handlers/{{EntityPlural}}/update
167
- - handlers/{{EntityPlural}}/delete
168
- - storage/{{EntityPlural}}-repository
169
- - types/{{EntityName}}
170
-
171
- ## Types / Entities
172
- - \`{{EntityName}}\`: id, createdAt, updatedAt, deletedAt (nullable)
173
- - \`Create{{EntityName}}Input\`: entity fields (validated)
174
- - \`Update{{EntityName}}Input\`: partial entity fields
175
- - \`List{{EntityPlural}}Query\`: page, limit, sortBy, order, filters
176
-
177
- ## Risks
178
- - Missing soft-delete → data loss risk
179
- - Unbounded list without pagination → performance risk
180
- - Missing input validation → injection risk
181
-
182
- ## Estimation (rough)
183
- - Dev: 6–12 hours
184
- - Review: 1–3 hours
185
- - Difficulty: 2/5
186
- `,
187
- progressTemplate: `# PROGRESS: CRUD for {{EntityName}}
188
-
189
- ## Status: draft
190
-
191
- ## Criteria
192
- - [ ] AC-1: Create {{EntityName}}
193
- - [ ] AC-2: List {{EntityPlural}}
194
- - [ ] AC-3: Get single {{EntityName}}
195
- - [ ] AC-4: Update {{EntityName}}
196
- - [ ] AC-5: Delete {{EntityName}}
197
- - [ ] AC-6: Validation
198
- `,
199
- },
200
- {
201
- id: 'rest-api-endpoint',
202
- name: 'REST API Endpoint',
203
- category: 'api',
204
- description: 'A single REST endpoint with validation, error handling, and documentation.',
205
- tags: ['api', 'rest', 'endpoint', 'openapi'],
206
- variables: [
207
- {
208
- key: 'EndpointName',
209
- label: 'Endpoint name',
210
- description: 'Short descriptive name for this endpoint',
211
- example: 'Submit Order',
212
- required: true,
213
- },
214
- {
215
- key: 'HttpMethod',
216
- label: 'HTTP Method',
217
- description: 'HTTP method: GET, POST, PUT, PATCH, DELETE',
218
- example: 'POST',
219
- required: true,
220
- },
221
- {
222
- key: 'Path',
223
- label: 'URL path',
224
- description: 'The URL path for this endpoint',
225
- example: '/orders/submit',
226
- required: true,
227
- },
228
- ],
229
- huTemplate: `# HU: REST API Endpoint — {{EndpointName}}
230
-
231
- ## User Story
232
- As an API consumer, I want a reliable {{HttpMethod}} {{Path}} endpoint so that I can {{EndpointName}} without client-side workarounds.
233
-
234
- ## Acceptance Criteria
235
-
236
- ### AC-1: Request validation
237
- - [ ] Input schema validated at the boundary
238
- - [ ] Invalid requests return 422 with structured error messages
239
- - [ ] Content-Type header checked when applicable
240
-
241
- ### AC-2: Core business logic
242
- - [ ] {{EndpointName}} logic is encapsulated in a dedicated use-case function
243
- - [ ] Side effects (emails, notifications, jobs) are isolated and testable
244
-
245
- ### AC-3: Response contract
246
- - [ ] Success response follows the API response envelope convention
247
- - [ ] HTTP status codes match the operation semantics
248
- - [ ] Response schema is documented (OpenAPI or equivalent)
249
-
250
- ### AC-4: Error handling
251
- - [ ] All error paths return structured JSON (not stack traces)
252
- - [ ] 404 returned for missing resources
253
- - [ ] 409 returned for conflicts
254
- - [ ] 500 never leaks internal details
255
-
256
- ### AC-5: Idempotency (if applicable)
257
- - [ ] Idempotency key header supported for non-idempotent operations
258
- - [ ] Duplicate requests handled gracefully
259
-
260
- ### AC-6: Observability
261
- - [ ] Endpoint logged with method, path, status, latency
262
- - [ ] Errors reported to the monitoring system
263
- `,
264
- fichaTecnicaTemplate: `# FICHA TÉCNICA: REST API Endpoint — {{EndpointName}}
265
-
266
- ## Affected Files
267
- - handlers/{{Path}} (route handler)
268
- - use-cases/{{EndpointName}} (business logic)
269
- - validators/{{EndpointName}}-input
270
- - openapi/paths/{{Path}} (documentation)
271
-
272
- ## Types / Entities
273
- - \`{{EndpointName}}Input\`: validated request payload
274
- - \`{{EndpointName}}Output\`: response body shape
275
- - \`ApiError\`: code, message, details[]
276
-
277
- ## Risks
278
- - Missing idempotency for mutation → duplicate side effects
279
- - Unbounded response size → add pagination or field projection
280
- - Missing auth guard → unauthorized access
281
-
282
- ## Estimation (rough)
283
- - Dev: 4–8 hours
284
- - Review: 1–2 hours
285
- - Difficulty: 2/5
286
- `,
287
- progressTemplate: `# PROGRESS: REST API Endpoint — {{EndpointName}}
288
-
289
- ## Status: draft
290
-
291
- ## Criteria
292
- - [ ] AC-1: Request validation
293
- - [ ] AC-2: Core business logic
294
- - [ ] AC-3: Response contract
295
- - [ ] AC-4: Error handling
296
- - [ ] AC-5: Idempotency
297
- - [ ] AC-6: Observability
298
- `,
299
- },
300
- {
301
- id: 'ui-form',
302
- name: 'UI Form',
303
- category: 'ui',
304
- description: 'Interactive form with validation, error display, and accessibility.',
305
- tags: ['ui', 'form', 'ux', 'accessibility', 'validation'],
306
- variables: [
307
- {
308
- key: 'FormName',
309
- label: 'Form name',
310
- description: 'Name of the form (e.g. Registration, Checkout, Contact)',
311
- example: 'Registration',
312
- required: true,
313
- },
314
- ],
315
- huTemplate: `# HU: {{FormName}} Form
316
-
317
- ## User Story
318
- As a user, I want to fill out the {{FormName}} form with clear guidance so that I can complete the action without confusion.
319
-
320
- ## Acceptance Criteria
321
-
322
- ### AC-1: Field validation
323
- - [ ] Required fields marked visually
324
- - [ ] Validation runs on blur and on submit
325
- - [ ] Error messages appear adjacent to invalid fields
326
- - [ ] Valid fields show positive feedback
327
-
328
- ### AC-2: Submit behavior
329
- - [ ] Form is disabled (loading state) during submission
330
- - [ ] Success state shown after successful submission
331
- - [ ] Errors from the API are displayed inline
332
-
333
- ### AC-3: Accessibility
334
- - [ ] All inputs have visible labels
335
- - [ ] Error messages linked via aria-describedby
336
- - [ ] Form navigable via keyboard (Tab, Enter, Escape)
337
- - [ ] Screen reader announces validation errors
338
-
339
- ### AC-4: Responsive design
340
- - [ ] Form renders correctly on mobile, tablet, and desktop
341
- - [ ] Touch targets meet minimum size (44×44 px)
342
-
343
- ### AC-5: Reset and cancel
344
- - [ ] Reset clears all fields and removes error state
345
- - [ ] Cancel navigates away without data loss warning if form is pristine
346
- - [ ] Cancel shows confirmation dialog if form has unsaved changes
347
- `,
348
- fichaTecnicaTemplate: `# FICHA TÉCNICA: {{FormName}} Form
349
-
350
- ## Affected Files
351
- - components/{{FormName}}Form
352
- - hooks/use{{FormName}}Form (form state, validation)
353
- - api/{{FormName}}-client (submission)
354
- - i18n/{{FormName}}-form.json (strings)
355
-
356
- ## Types / Entities
357
- - \`{{FormName}}FormValues\`: all field values
358
- - \`{{FormName}}FormErrors\`: per-field error messages
359
- - \`{{FormName}}FormState\`: idle | submitting | success | error
360
-
361
- ## Risks
362
- - Missing server-side validation mirror → inconsistent UX
363
- - Missing loading state → double submissions
364
- - Missing ARIA attributes → accessibility failures
365
-
366
- ## Estimation (rough)
367
- - Dev: 4–10 hours
368
- - Review: 1–2 hours
369
- - Difficulty: 2/5
370
- `,
371
- progressTemplate: `# PROGRESS: {{FormName}} Form
372
-
373
- ## Status: draft
374
-
375
- ## Criteria
376
- - [ ] AC-1: Field validation
377
- - [ ] AC-2: Submit behavior
378
- - [ ] AC-3: Accessibility
379
- - [ ] AC-4: Responsive design
380
- - [ ] AC-5: Reset and cancel
381
- `,
382
- },
383
- ];
384
7
  /** Full catalog of built-in spec templates (core + extra). */
385
- export const BUILT_IN_TEMPLATES = [...CORE_TEMPLATES, ...EXTRA_TEMPLATES];
8
+ export const BUILT_IN_TEMPLATES = [
9
+ AUTH_JWT_TEMPLATE,
10
+ CRUD_ENTITY_TEMPLATE,
11
+ REST_API_ENDPOINT_TEMPLATE,
12
+ UI_FORM_TEMPLATE,
13
+ ...EXTRA_TEMPLATES,
14
+ ];
386
15
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/catalog.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,8EAA8E;AAC9E,+DAA+D;AAG/D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,iBAAiB;IACjB,oBAAoB;IACpB,0BAA0B;IAC1B,gBAAgB;IAChB,GAAG,eAAe;CACnB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SpecTemplateEntry } from '../../types/spec-templates.js';
2
+ /** REST API endpoint spec template. */
3
+ export declare const REST_API_ENDPOINT_TEMPLATE: SpecTemplateEntry;
4
+ /** UI Form spec template. */
5
+ export declare const UI_FORM_TEMPLATE: SpecTemplateEntry;
6
+ //# sourceMappingURL=templates-api-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-api-ui.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-api-ui.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,uCAAuC;AACvC,eAAO,MAAM,0BAA0B,EAAE,iBAmGxC,CAAC;AAEF,6BAA6B;AAC7B,eAAO,MAAM,gBAAgB,EAAE,iBAkF9B,CAAC"}
@@ -0,0 +1,188 @@
1
+ // engine/spec-templates/templates-api-ui.ts — REST API endpoint + UI form templates.
2
+ // Extracted from catalog.ts to keep file sizes within limits.
3
+ /** REST API endpoint spec template. */
4
+ export const REST_API_ENDPOINT_TEMPLATE = {
5
+ id: 'rest-api-endpoint',
6
+ name: 'REST API Endpoint',
7
+ category: 'api',
8
+ description: 'A single REST endpoint with validation, error handling, and documentation.',
9
+ tags: ['api', 'rest', 'endpoint', 'openapi'],
10
+ variables: [
11
+ {
12
+ key: 'EndpointName',
13
+ label: 'Endpoint name',
14
+ description: 'Short descriptive name for this endpoint',
15
+ example: 'Submit Order',
16
+ required: true,
17
+ },
18
+ {
19
+ key: 'HttpMethod',
20
+ label: 'HTTP Method',
21
+ description: 'HTTP method: GET, POST, PUT, PATCH, DELETE',
22
+ example: 'POST',
23
+ required: true,
24
+ },
25
+ {
26
+ key: 'Path',
27
+ label: 'URL path',
28
+ description: 'The URL path for this endpoint',
29
+ example: '/orders/submit',
30
+ required: true,
31
+ },
32
+ ],
33
+ huTemplate: `# HU: REST API Endpoint — {{EndpointName}}
34
+
35
+ ## User Story
36
+ As an API consumer, I want a reliable {{HttpMethod}} {{Path}} endpoint so that I can {{EndpointName}} without client-side workarounds.
37
+
38
+ ## Acceptance Criteria
39
+
40
+ ### AC-1: Request validation
41
+ - [ ] Input schema validated at the boundary
42
+ - [ ] Invalid requests return 422 with structured error messages
43
+ - [ ] Content-Type header checked when applicable
44
+
45
+ ### AC-2: Core business logic
46
+ - [ ] {{EndpointName}} logic is encapsulated in a dedicated use-case function
47
+ - [ ] Side effects (emails, notifications, jobs) are isolated and testable
48
+
49
+ ### AC-3: Response contract
50
+ - [ ] Success response follows the API response envelope convention
51
+ - [ ] HTTP status codes match the operation semantics
52
+ - [ ] Response schema is documented (OpenAPI or equivalent)
53
+
54
+ ### AC-4: Error handling
55
+ - [ ] All error paths return structured JSON (not stack traces)
56
+ - [ ] 404 returned for missing resources
57
+ - [ ] 409 returned for conflicts
58
+ - [ ] 500 never leaks internal details
59
+
60
+ ### AC-5: Idempotency (if applicable)
61
+ - [ ] Idempotency key header supported for non-idempotent operations
62
+ - [ ] Duplicate requests handled gracefully
63
+
64
+ ### AC-6: Observability
65
+ - [ ] Endpoint logged with method, path, status, latency
66
+ - [ ] Errors reported to the monitoring system
67
+ `,
68
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: REST API Endpoint — {{EndpointName}}
69
+
70
+ ## Affected Files
71
+ - handlers/{{Path}} (route handler)
72
+ - use-cases/{{EndpointName}} (business logic)
73
+ - validators/{{EndpointName}}-input
74
+ - openapi/paths/{{Path}} (documentation)
75
+
76
+ ## Types / Entities
77
+ - \`{{EndpointName}}Input\`: validated request payload
78
+ - \`{{EndpointName}}Output\`: response body shape
79
+ - \`ApiError\`: code, message, details[]
80
+
81
+ ## Risks
82
+ - Missing idempotency for mutation → duplicate side effects
83
+ - Unbounded response size → add pagination or field projection
84
+ - Missing auth guard → unauthorized access
85
+
86
+ ## Estimation (rough)
87
+ - Dev: 4–8 hours
88
+ - Review: 1–2 hours
89
+ - Difficulty: 2/5
90
+ `,
91
+ progressTemplate: `# PROGRESS: REST API Endpoint — {{EndpointName}}
92
+
93
+ ## Status: draft
94
+
95
+ ## Criteria
96
+ - [ ] AC-1: Request validation
97
+ - [ ] AC-2: Core business logic
98
+ - [ ] AC-3: Response contract
99
+ - [ ] AC-4: Error handling
100
+ - [ ] AC-5: Idempotency
101
+ - [ ] AC-6: Observability
102
+ `,
103
+ };
104
+ /** UI Form spec template. */
105
+ export const UI_FORM_TEMPLATE = {
106
+ id: 'ui-form',
107
+ name: 'UI Form',
108
+ category: 'ui',
109
+ description: 'Interactive form with validation, error display, and accessibility.',
110
+ tags: ['ui', 'form', 'ux', 'accessibility', 'validation'],
111
+ variables: [
112
+ {
113
+ key: 'FormName',
114
+ label: 'Form name',
115
+ description: 'Name of the form (e.g. Registration, Checkout, Contact)',
116
+ example: 'Registration',
117
+ required: true,
118
+ },
119
+ ],
120
+ huTemplate: `# HU: {{FormName}} Form
121
+
122
+ ## User Story
123
+ As a user, I want to fill out the {{FormName}} form with clear guidance so that I can complete the action without confusion.
124
+
125
+ ## Acceptance Criteria
126
+
127
+ ### AC-1: Field validation
128
+ - [ ] Required fields marked visually
129
+ - [ ] Validation runs on blur and on submit
130
+ - [ ] Error messages appear adjacent to invalid fields
131
+ - [ ] Valid fields show positive feedback
132
+
133
+ ### AC-2: Submit behavior
134
+ - [ ] Form is disabled (loading state) during submission
135
+ - [ ] Success state shown after successful submission
136
+ - [ ] Errors from the API are displayed inline
137
+
138
+ ### AC-3: Accessibility
139
+ - [ ] All inputs have visible labels
140
+ - [ ] Error messages linked via aria-describedby
141
+ - [ ] Form navigable via keyboard (Tab, Enter, Escape)
142
+ - [ ] Screen reader announces validation errors
143
+
144
+ ### AC-4: Responsive design
145
+ - [ ] Form renders correctly on mobile, tablet, and desktop
146
+ - [ ] Touch targets meet minimum size (44×44 px)
147
+
148
+ ### AC-5: Reset and cancel
149
+ - [ ] Reset clears all fields and removes error state
150
+ - [ ] Cancel navigates away without data loss warning if form is pristine
151
+ - [ ] Cancel shows confirmation dialog if form has unsaved changes
152
+ `,
153
+ fichaTecnicaTemplate: `# FICHA TÉCNICA: {{FormName}} Form
154
+
155
+ ## Affected Files
156
+ - components/{{FormName}}Form
157
+ - hooks/use{{FormName}}Form (form state, validation)
158
+ - api/{{FormName}}-client (submission)
159
+ - i18n/{{FormName}}-form.json (strings)
160
+
161
+ ## Types / Entities
162
+ - \`{{FormName}}FormValues\`: all field values
163
+ - \`{{FormName}}FormErrors\`: per-field error messages
164
+ - \`{{FormName}}FormState\`: idle | submitting | success | error
165
+
166
+ ## Risks
167
+ - Missing server-side validation mirror → inconsistent UX
168
+ - Missing loading state → double submissions
169
+ - Missing ARIA attributes → accessibility failures
170
+
171
+ ## Estimation (rough)
172
+ - Dev: 4–10 hours
173
+ - Review: 1–2 hours
174
+ - Difficulty: 2/5
175
+ `,
176
+ progressTemplate: `# PROGRESS: {{FormName}} Form
177
+
178
+ ## Status: draft
179
+
180
+ ## Criteria
181
+ - [ ] AC-1: Field validation
182
+ - [ ] AC-2: Submit behavior
183
+ - [ ] AC-3: Accessibility
184
+ - [ ] AC-4: Responsive design
185
+ - [ ] AC-5: Reset and cancel
186
+ `,
187
+ };
188
+ //# sourceMappingURL=templates-api-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-api-ui.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-api-ui.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,8DAA8D;AAI9D,uCAAuC;AACvC,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,mBAAmB;IACzB,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,4EAA4E;IACzF,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;IAC5C,SAAS,EAAE;QACT;YACE,GAAG,EAAE,cAAc;YACnB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,4CAA4C;YACzD,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,gCAAgC;YAC7C,OAAO,EAAE,gBAAgB;YACzB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBvB;IACC,gBAAgB,EAAE;;;;;;;;;;;CAWnB;CACA,CAAC;AAEF,6BAA6B;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,qEAAqE;IAClF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC;IACzD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,yDAAyD;YACtE,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;CAsBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SpecTemplateEntry } from '../../types/spec-templates.js';
2
+ /** JWT Authentication spec template. */
3
+ export declare const AUTH_JWT_TEMPLATE: SpecTemplateEntry;
4
+ /** CRUD Entity spec template. */
5
+ export declare const CRUD_ENTITY_TEMPLATE: SpecTemplateEntry;
6
+ //# sourceMappingURL=templates-auth-crud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates-auth-crud.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-auth-crud.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,EAAE,iBA+F/B,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,oBAAoB,EAAE,iBAgGlC,CAAC"}