@veloxts/cli 0.4.14 → 0.6.23

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 (203) hide show
  1. package/README.md +2 -48
  2. package/dist/cli.d.ts +5 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +7 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/dev.d.ts.map +1 -1
  7. package/dist/commands/dev.js +71 -7
  8. package/dist/commands/dev.js.map +1 -1
  9. package/dist/commands/introspect.d.ts +16 -0
  10. package/dist/commands/introspect.d.ts.map +1 -0
  11. package/dist/commands/introspect.js +559 -0
  12. package/dist/commands/introspect.js.map +1 -0
  13. package/dist/commands/make.d.ts.map +1 -1
  14. package/dist/commands/make.js +18 -8
  15. package/dist/commands/make.js.map +1 -1
  16. package/dist/commands/procedures.d.ts.map +1 -1
  17. package/dist/commands/procedures.js +16 -0
  18. package/dist/commands/procedures.js.map +1 -1
  19. package/dist/dev/error-parser.d.ts.map +1 -1
  20. package/dist/dev/error-parser.js +24 -8
  21. package/dist/dev/error-parser.js.map +1 -1
  22. package/dist/dev/hmr-runner.d.ts.map +1 -1
  23. package/dist/dev/hmr-runner.js +6 -1
  24. package/dist/dev/hmr-runner.js.map +1 -1
  25. package/dist/dev/index.d.ts +3 -3
  26. package/dist/dev/index.d.ts.map +1 -1
  27. package/dist/dev/index.js +3 -3
  28. package/dist/dev/index.js.map +1 -1
  29. package/dist/dev/reload-reporter.d.ts +2 -2
  30. package/dist/dev/reload-reporter.d.ts.map +1 -1
  31. package/dist/dev/reload-reporter.js +2 -2
  32. package/dist/dev/reload-reporter.js.map +1 -1
  33. package/dist/errors/catalog.d.ts +48 -0
  34. package/dist/errors/catalog.d.ts.map +1 -0
  35. package/dist/errors/catalog.js +421 -0
  36. package/dist/errors/catalog.js.map +1 -0
  37. package/dist/errors/index.d.ts +26 -0
  38. package/dist/errors/index.d.ts.map +1 -0
  39. package/dist/errors/index.js +28 -0
  40. package/dist/errors/index.js.map +1 -0
  41. package/dist/errors/velox-error.d.ts +122 -0
  42. package/dist/errors/velox-error.d.ts.map +1 -0
  43. package/dist/errors/velox-error.js +216 -0
  44. package/dist/errors/velox-error.js.map +1 -0
  45. package/dist/generators/base.d.ts.map +1 -1
  46. package/dist/generators/base.js +26 -0
  47. package/dist/generators/base.js.map +1 -1
  48. package/dist/generators/fields/__tests__/helpers.d.ts +66 -0
  49. package/dist/generators/fields/__tests__/helpers.d.ts.map +1 -0
  50. package/dist/generators/fields/__tests__/helpers.js +142 -0
  51. package/dist/generators/fields/__tests__/helpers.js.map +1 -0
  52. package/dist/generators/fields/actions.d.ts +58 -0
  53. package/dist/generators/fields/actions.d.ts.map +1 -0
  54. package/dist/generators/fields/actions.js +230 -0
  55. package/dist/generators/fields/actions.js.map +1 -0
  56. package/dist/generators/fields/display.d.ts +28 -0
  57. package/dist/generators/fields/display.d.ts.map +1 -0
  58. package/dist/generators/fields/display.js +214 -0
  59. package/dist/generators/fields/display.js.map +1 -0
  60. package/dist/generators/fields/index.d.ts +12 -0
  61. package/dist/generators/fields/index.d.ts.map +1 -0
  62. package/dist/generators/fields/index.js +12 -0
  63. package/dist/generators/fields/index.js.map +1 -0
  64. package/dist/generators/fields/prompts.d.ts +31 -0
  65. package/dist/generators/fields/prompts.d.ts.map +1 -0
  66. package/dist/generators/fields/prompts.js +366 -0
  67. package/dist/generators/fields/prompts.js.map +1 -0
  68. package/dist/generators/fields/templates.d.ts +49 -0
  69. package/dist/generators/fields/templates.d.ts.map +1 -0
  70. package/dist/generators/fields/templates.js +230 -0
  71. package/dist/generators/fields/templates.js.map +1 -0
  72. package/dist/generators/fields/types.d.ts +95 -0
  73. package/dist/generators/fields/types.d.ts.map +1 -0
  74. package/dist/generators/fields/types.js +150 -0
  75. package/dist/generators/fields/types.js.map +1 -0
  76. package/dist/generators/generators/action.d.ts +37 -0
  77. package/dist/generators/generators/action.d.ts.map +1 -0
  78. package/dist/generators/generators/action.js +109 -0
  79. package/dist/generators/generators/action.js.map +1 -0
  80. package/dist/generators/generators/exception.d.ts +38 -0
  81. package/dist/generators/generators/exception.d.ts.map +1 -0
  82. package/dist/generators/generators/exception.js +109 -0
  83. package/dist/generators/generators/exception.js.map +1 -0
  84. package/dist/generators/generators/guard.d.ts +38 -0
  85. package/dist/generators/generators/guard.d.ts.map +1 -0
  86. package/dist/generators/generators/guard.js +109 -0
  87. package/dist/generators/generators/guard.js.map +1 -0
  88. package/dist/generators/generators/index.d.ts +8 -0
  89. package/dist/generators/generators/index.d.ts.map +1 -1
  90. package/dist/generators/generators/index.js +27 -0
  91. package/dist/generators/generators/index.js.map +1 -1
  92. package/dist/generators/generators/layout.d.ts +36 -0
  93. package/dist/generators/generators/layout.d.ts.map +1 -0
  94. package/dist/generators/generators/layout.js +111 -0
  95. package/dist/generators/generators/layout.js.map +1 -0
  96. package/dist/generators/generators/middleware.d.ts +38 -0
  97. package/dist/generators/generators/middleware.d.ts.map +1 -0
  98. package/dist/generators/generators/middleware.js +109 -0
  99. package/dist/generators/generators/middleware.js.map +1 -0
  100. package/dist/generators/generators/model.d.ts +16 -4
  101. package/dist/generators/generators/model.d.ts.map +1 -1
  102. package/dist/generators/generators/model.js +88 -7
  103. package/dist/generators/generators/model.js.map +1 -1
  104. package/dist/generators/generators/page.d.ts +36 -0
  105. package/dist/generators/generators/page.d.ts.map +1 -0
  106. package/dist/generators/generators/page.js +112 -0
  107. package/dist/generators/generators/page.js.map +1 -0
  108. package/dist/generators/generators/policy.d.ts +37 -0
  109. package/dist/generators/generators/policy.d.ts.map +1 -0
  110. package/dist/generators/generators/policy.js +100 -0
  111. package/dist/generators/generators/policy.js.map +1 -0
  112. package/dist/generators/generators/resource.d.ts +42 -4
  113. package/dist/generators/generators/resource.d.ts.map +1 -1
  114. package/dist/generators/generators/resource.js +450 -9
  115. package/dist/generators/generators/resource.js.map +1 -1
  116. package/dist/generators/generators/service.d.ts +38 -0
  117. package/dist/generators/generators/service.d.ts.map +1 -0
  118. package/dist/generators/generators/service.js +109 -0
  119. package/dist/generators/generators/service.js.map +1 -0
  120. package/dist/generators/registry.d.ts.map +1 -1
  121. package/dist/generators/registry.js +10 -1
  122. package/dist/generators/registry.js.map +1 -1
  123. package/dist/generators/templates/action.d.ts +28 -0
  124. package/dist/generators/templates/action.d.ts.map +1 -0
  125. package/dist/generators/templates/action.js +359 -0
  126. package/dist/generators/templates/action.js.map +1 -0
  127. package/dist/generators/templates/exception.d.ts +26 -0
  128. package/dist/generators/templates/exception.d.ts.map +1 -0
  129. package/dist/generators/templates/exception.js +671 -0
  130. package/dist/generators/templates/exception.js.map +1 -0
  131. package/dist/generators/templates/guard.d.ts +26 -0
  132. package/dist/generators/templates/guard.d.ts.map +1 -0
  133. package/dist/generators/templates/guard.js +555 -0
  134. package/dist/generators/templates/guard.js.map +1 -0
  135. package/dist/generators/templates/layout.d.ts +28 -0
  136. package/dist/generators/templates/layout.d.ts.map +1 -0
  137. package/dist/generators/templates/layout.js +147 -0
  138. package/dist/generators/templates/layout.js.map +1 -0
  139. package/dist/generators/templates/middleware.d.ts +26 -0
  140. package/dist/generators/templates/middleware.d.ts.map +1 -0
  141. package/dist/generators/templates/middleware.js +411 -0
  142. package/dist/generators/templates/middleware.js.map +1 -0
  143. package/dist/generators/templates/model.d.ts +3 -0
  144. package/dist/generators/templates/model.d.ts.map +1 -1
  145. package/dist/generators/templates/model.js +183 -28
  146. package/dist/generators/templates/model.js.map +1 -1
  147. package/dist/generators/templates/page.d.ts +36 -0
  148. package/dist/generators/templates/page.d.ts.map +1 -0
  149. package/dist/generators/templates/page.js +147 -0
  150. package/dist/generators/templates/page.js.map +1 -0
  151. package/dist/generators/templates/policy.d.ts +24 -0
  152. package/dist/generators/templates/policy.d.ts.map +1 -0
  153. package/dist/generators/templates/policy.js +499 -0
  154. package/dist/generators/templates/policy.js.map +1 -0
  155. package/dist/generators/templates/resource.d.ts +65 -0
  156. package/dist/generators/templates/resource.d.ts.map +1 -1
  157. package/dist/generators/templates/resource.js +228 -43
  158. package/dist/generators/templates/resource.js.map +1 -1
  159. package/dist/generators/templates/service.d.ts +26 -0
  160. package/dist/generators/templates/service.d.ts.map +1 -0
  161. package/dist/generators/templates/service.js +511 -0
  162. package/dist/generators/templates/service.js.map +1 -0
  163. package/dist/generators/types.d.ts +26 -14
  164. package/dist/generators/types.d.ts.map +1 -1
  165. package/dist/generators/types.js +8 -25
  166. package/dist/generators/types.js.map +1 -1
  167. package/dist/generators/utils/ast-helpers.d.ts +147 -0
  168. package/dist/generators/utils/ast-helpers.d.ts.map +1 -0
  169. package/dist/generators/utils/ast-helpers.js +350 -0
  170. package/dist/generators/utils/ast-helpers.js.map +1 -0
  171. package/dist/generators/utils/prisma-migration.d.ts +59 -0
  172. package/dist/generators/utils/prisma-migration.d.ts.map +1 -0
  173. package/dist/generators/utils/prisma-migration.js +161 -0
  174. package/dist/generators/utils/prisma-migration.js.map +1 -0
  175. package/dist/generators/utils/prisma-schema.d.ts +97 -0
  176. package/dist/generators/utils/prisma-schema.d.ts.map +1 -0
  177. package/dist/generators/utils/prisma-schema.js +235 -0
  178. package/dist/generators/utils/prisma-schema.js.map +1 -0
  179. package/dist/generators/utils/router-integration.d.ts +70 -0
  180. package/dist/generators/utils/router-integration.d.ts.map +1 -0
  181. package/dist/generators/utils/router-integration.js +305 -0
  182. package/dist/generators/utils/router-integration.js.map +1 -0
  183. package/dist/generators/utils/snapshot.d.ts +93 -0
  184. package/dist/generators/utils/snapshot.d.ts.map +1 -0
  185. package/dist/generators/utils/snapshot.js +178 -0
  186. package/dist/generators/utils/snapshot.js.map +1 -0
  187. package/dist/index.d.ts +6 -0
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +6 -0
  190. package/dist/index.js.map +1 -1
  191. package/dist/seeding/errors.d.ts +11 -24
  192. package/dist/seeding/errors.d.ts.map +1 -1
  193. package/dist/seeding/errors.js +11 -50
  194. package/dist/seeding/errors.js.map +1 -1
  195. package/dist/utils/paths.d.ts +19 -0
  196. package/dist/utils/paths.d.ts.map +1 -1
  197. package/dist/utils/paths.js +45 -0
  198. package/dist/utils/paths.js.map +1 -1
  199. package/dist/utils/schema-patterns.d.ts +26 -0
  200. package/dist/utils/schema-patterns.d.ts.map +1 -0
  201. package/dist/utils/schema-patterns.js +40 -0
  202. package/dist/utils/schema-patterns.js.map +1 -0
  203. package/package.json +12 -10
@@ -13,11 +13,11 @@
13
13
  * velox m model Order --crud --paginated # With pagination
14
14
  * velox m model Article --soft-delete # With soft delete support
15
15
  */
16
+ import * as p from '@clack/prompts';
16
17
  import { BaseGenerator } from '../base.js';
18
+ import { collectFields } from '../fields/index.js';
17
19
  import { generateModelFiles, getModelInstructions } from '../templates/model.js';
18
- // ============================================================================
19
- // Generator Implementation
20
- // ============================================================================
20
+ import { deriveEntityNames } from '../utils/naming.js';
21
21
  /**
22
22
  * Model generator - creates Prisma model, Zod schema, and procedures
23
23
  */
@@ -69,6 +69,19 @@ Examples:
69
69
  type: 'boolean',
70
70
  default: true,
71
71
  },
72
+ {
73
+ name: 'interactive',
74
+ short: 'i',
75
+ description: 'Interactively define fields',
76
+ type: 'boolean',
77
+ default: false,
78
+ },
79
+ {
80
+ name: 'skip-fields',
81
+ description: 'Skip field prompts (generate skeleton only)',
82
+ type: 'boolean',
83
+ default: false,
84
+ },
72
85
  ];
73
86
  /**
74
87
  * Validate and transform raw options
@@ -79,15 +92,62 @@ Examples:
79
92
  paginated: Boolean(raw.paginated ?? false),
80
93
  softDelete: Boolean(raw['soft-delete'] ?? raw.softDelete ?? false),
81
94
  timestamps: Boolean(raw.timestamps ?? true),
95
+ interactive: Boolean(raw.interactive ?? false),
96
+ skipFields: Boolean(raw['skip-fields'] ?? raw.skipFields ?? false),
82
97
  };
83
98
  }
84
99
  /**
85
- * Generate model files
100
+ * Generate model files with optional interactive field collection
86
101
  */
87
102
  async generate(config) {
88
- const context = this.createContext(config);
89
- // Generate all model files
90
- const files = generateModelFiles(context);
103
+ const { interactive, skipFields } = config.options;
104
+ // Collect fields interactively if not skipped and in interactive mode
105
+ let fields = [];
106
+ if (interactive && !skipFields && !config.dryRun) {
107
+ const fieldResult = await this.collectFieldsInteractively(config.entityName);
108
+ if (fieldResult.cancelled) {
109
+ // User cancelled - return empty output
110
+ return {
111
+ files: [],
112
+ postInstructions: 'Operation cancelled by user.',
113
+ };
114
+ }
115
+ fields = fieldResult.fields;
116
+ // Field collection already shows summary and confirms with user
117
+ }
118
+ // Build template options (without CLI-only flags)
119
+ const templateOptions = {
120
+ crud: config.options.crud,
121
+ paginated: config.options.paginated,
122
+ softDelete: config.options.softDelete,
123
+ timestamps: config.options.timestamps,
124
+ fields,
125
+ };
126
+ // Create context with template options
127
+ const context = {
128
+ entity: deriveEntityNames(config.entityName),
129
+ project: config.project,
130
+ options: templateOptions,
131
+ };
132
+ // Show spinner during actual file generation
133
+ // Only show if we're in interactive mode (we collected fields or user opted to skip)
134
+ const showSpinner = interactive && !skipFields && !config.dryRun;
135
+ let files;
136
+ if (showSpinner) {
137
+ const s = p.spinner();
138
+ s.start('Scaffolding model...');
139
+ try {
140
+ files = generateModelFiles(context);
141
+ s.stop(`Scaffolded ${files.length} file(s)`);
142
+ }
143
+ catch (err) {
144
+ s.stop('Scaffolding failed');
145
+ throw err;
146
+ }
147
+ }
148
+ else {
149
+ files = generateModelFiles(context);
150
+ }
91
151
  // Generate post-creation instructions
92
152
  const postInstructions = getModelInstructions(context);
93
153
  return {
@@ -95,6 +155,27 @@ Examples:
95
155
  postInstructions,
96
156
  };
97
157
  }
158
+ /**
159
+ * Collect fields interactively from user
160
+ */
161
+ async collectFieldsInteractively(entityName) {
162
+ // Ask if user wants to define fields
163
+ const wantFields = await p.confirm({
164
+ message: `Do you want to define fields for ${entityName}?`,
165
+ initialValue: true,
166
+ });
167
+ if (p.isCancel(wantFields)) {
168
+ return { fields: [], cancelled: true };
169
+ }
170
+ if (!wantFields) {
171
+ return { fields: [], cancelled: false };
172
+ }
173
+ // Collect fields
174
+ return collectFields({
175
+ resourceName: entityName,
176
+ minFields: 0,
177
+ });
178
+ }
98
179
  }
99
180
  // ============================================================================
100
181
  // Export
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/generators/generators/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAqB,MAAM,uBAAuB,CAAC;AAQpG,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,aAA2B;IACpD,QAAQ,GAAsB;QACrC,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,iEAAiE;QAC9E,eAAe,EAAE;;;;;;;;;;;CAWpB;QACG,OAAO,EAAE,CAAC,GAAG,CAAC;QACd,QAAQ,EAAE,UAAU;KACrB,CAAC;IAEO,OAAO,GAAmC;QACjD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,8CAA8C;YAC3D,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,qDAAqD;YAClE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,2CAA2C;YACxD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,2CAA2C;YACxD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;SACd;KACF,CAAC;IAEF;;OAEG;IACH,eAAe,CAAC,GAA4B;QAC1C,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;YAChC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC;YAC1C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC;YAClE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAqC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE3C,2BAA2B;QAC3B,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE1C,sCAAsC;QACtC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEvD,OAAO;YACL,KAAK;YACL,gBAAgB;SACjB,CAAC;IACJ,CAAC;CACF;AAED,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/generators/generators/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Page Generator
3
+ *
4
+ * Scaffolds RSC page files for VeloxTS full-stack applications.
5
+ *
6
+ * Usage:
7
+ * velox make page <name> [options]
8
+ *
9
+ * Examples:
10
+ * velox make page home # Simple server component page
11
+ * velox make page dashboard --client # Client component with interactivity
12
+ * velox make page users --loading # Include loading skeleton
13
+ */
14
+ import { BaseGenerator } from '../base.js';
15
+ import { type PageOptions } from '../templates/page.js';
16
+ import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
17
+ /**
18
+ * Page generator - creates RSC page files
19
+ */
20
+ export declare class PageGenerator extends BaseGenerator<PageOptions> {
21
+ readonly metadata: GeneratorMetadata;
22
+ readonly options: ReadonlyArray<GeneratorOption>;
23
+ /**
24
+ * Validate and transform raw options
25
+ */
26
+ validateOptions(raw: Record<string, unknown>): PageOptions;
27
+ /**
28
+ * Generate page files
29
+ */
30
+ generate(config: GeneratorConfig<PageOptions>): Promise<GeneratorOutput>;
31
+ }
32
+ /**
33
+ * Factory function for creating a PageGenerator instance
34
+ */
35
+ export declare function createPageGenerator(): PageGenerator;
36
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAIL,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAOrB;;GAEG;AACH,qBAAa,aAAc,SAAQ,aAAa,CAAC,WAAW,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAiBlC;IAEF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAsB9C;IAEF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW;IAQ1D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAmC/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Page Generator
3
+ *
4
+ * Scaffolds RSC page files for VeloxTS full-stack applications.
5
+ *
6
+ * Usage:
7
+ * velox make page <name> [options]
8
+ *
9
+ * Examples:
10
+ * velox make page home # Simple server component page
11
+ * velox make page dashboard --client # Client component with interactivity
12
+ * velox make page users --loading # Include loading skeleton
13
+ */
14
+ import { BaseGenerator } from '../base.js';
15
+ import { getPageInstructions, getPagePath, loadingTemplate, pageTemplate, } from '../templates/page.js';
16
+ import { GeneratorError, GeneratorErrorCode } from '../types.js';
17
+ // ============================================================================
18
+ // Generator Implementation
19
+ // ============================================================================
20
+ /**
21
+ * Page generator - creates RSC page files
22
+ */
23
+ export class PageGenerator extends BaseGenerator {
24
+ metadata = {
25
+ name: 'page',
26
+ description: 'Generate an RSC page component',
27
+ longDescription: `
28
+ Scaffold a React Server Component page for VeloxTS full-stack applications.
29
+
30
+ By default, creates a server component that renders on the server.
31
+ Use --client for interactive components that hydrate on the client.
32
+ Use --loading to include a loading skeleton for React Suspense.
33
+
34
+ Examples:
35
+ velox make page home # Simple server component page
36
+ velox make page dashboard --client # Client component with interactivity
37
+ velox make page users --loading # Include loading skeleton
38
+ `,
39
+ aliases: ['pg'],
40
+ category: 'resource',
41
+ };
42
+ options = [
43
+ {
44
+ name: 'client',
45
+ short: 'c',
46
+ description: 'Generate a client component with "use client" directive',
47
+ type: 'boolean',
48
+ default: false,
49
+ },
50
+ {
51
+ name: 'loading',
52
+ short: 'l',
53
+ description: 'Include a loading skeleton component',
54
+ type: 'boolean',
55
+ default: false,
56
+ },
57
+ {
58
+ name: 'fetch',
59
+ short: 'f',
60
+ description: 'Include data fetching example',
61
+ type: 'boolean',
62
+ default: false,
63
+ },
64
+ ];
65
+ /**
66
+ * Validate and transform raw options
67
+ */
68
+ validateOptions(raw) {
69
+ return {
70
+ client: Boolean(raw.client ?? false),
71
+ loading: Boolean(raw.loading ?? false),
72
+ fetch: Boolean(raw.fetch ?? false),
73
+ };
74
+ }
75
+ /**
76
+ * Generate page files
77
+ */
78
+ async generate(config) {
79
+ // Check if this is a full-stack project
80
+ if (config.project.projectType !== 'fullstack') {
81
+ throw new GeneratorError(GeneratorErrorCode.PROJECT_STRUCTURE, 'Page generator requires a full-stack VeloxTS project.', 'Create a full-stack project with: npx create-velox-app my-app --full-stack');
82
+ }
83
+ const context = this.createContext(config);
84
+ const files = [];
85
+ // Generate main page file
86
+ const pageContent = pageTemplate(context);
87
+ files.push({
88
+ path: getPagePath(config.entityName, config.project),
89
+ content: pageContent,
90
+ });
91
+ // Generate loading file if requested
92
+ if (config.options.loading) {
93
+ const loadingContent = loadingTemplate(context);
94
+ files.push({
95
+ path: getPagePath('_loading', config.project),
96
+ content: loadingContent,
97
+ skipIfExists: true, // Don't overwrite existing loading file
98
+ });
99
+ }
100
+ return {
101
+ files,
102
+ postInstructions: getPageInstructions(config.entityName, config.options),
103
+ };
104
+ }
105
+ }
106
+ /**
107
+ * Factory function for creating a PageGenerator instance
108
+ */
109
+ export function createPageGenerator() {
110
+ return new PageGenerator();
111
+ }
112
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/generators/generators/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,eAAe,EAEf,YAAY,GACb,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjE,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,aAA0B;IAClD,QAAQ,GAAsB;QACrC,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,gCAAgC;QAC7C,eAAe,EAAE;;;;;;;;;;;CAWpB;QACG,OAAO,EAAE,CAAC,IAAI,CAAC;QACf,QAAQ,EAAE,UAAU;KACrB,CAAC;IAEO,OAAO,GAAmC;QACjD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,yDAAyD;YACtE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,sCAAsC;YACnD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,+BAA+B;YAC5C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;KACF,CAAC;IAEF;;OAEG;IACH,eAAe,CAAC,GAA4B;QAC1C,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;YACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC;YACtC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;SACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAoC;QACjD,wCAAwC;QACxC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YAC/C,MAAM,IAAI,cAAc,CACtB,kBAAkB,CAAC,iBAAiB,EACpC,uDAAuD,EACvD,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,0BAA0B;QAC1B,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;YACpD,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;QAEH,qCAAqC;QACrC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;gBAC7C,OAAO,EAAE,cAAc;gBACvB,YAAY,EAAE,IAAI,EAAE,wCAAwC;aAC7D,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,KAAK;YACL,gBAAgB,EAAE,mBAAmB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;SACzE,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Policy Generator
3
+ *
4
+ * Scaffolds authorization policy files for VeloxTS applications.
5
+ *
6
+ * Usage:
7
+ * velox make policy <name> [options]
8
+ *
9
+ * Examples:
10
+ * velox make policy post # Simple policy
11
+ * velox make policy article --crud # CRUD policy class
12
+ * velox make policy document --resource # Resource-based ABAC
13
+ * velox make policy comment --soft # Include soft delete policies
14
+ */
15
+ import { BaseGenerator } from '../base.js';
16
+ import { type PolicyOptions } from '../templates/policy.js';
17
+ import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
18
+ /**
19
+ * Policy generator - creates authorization policy files
20
+ */
21
+ export declare class PolicyGenerator extends BaseGenerator<PolicyOptions> {
22
+ readonly metadata: GeneratorMetadata;
23
+ readonly options: ReadonlyArray<GeneratorOption>;
24
+ /**
25
+ * Validate and transform raw options
26
+ */
27
+ validateOptions(raw: Record<string, unknown>): PolicyOptions;
28
+ /**
29
+ * Generate policy files
30
+ */
31
+ generate(config: GeneratorConfig<PolicyOptions>): Promise<GeneratorOutput>;
32
+ }
33
+ /**
34
+ * Factory function for creating a PolicyGenerator instance
35
+ */
36
+ export declare function createPolicyGenerator(): PolicyGenerator;
37
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa,CAAC,aAAa,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAkBlC;IAEF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAsB9C;IAEF;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa;IAQ5D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CAgBjF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Policy Generator
3
+ *
4
+ * Scaffolds authorization policy files for VeloxTS applications.
5
+ *
6
+ * Usage:
7
+ * velox make policy <name> [options]
8
+ *
9
+ * Examples:
10
+ * velox make policy post # Simple policy
11
+ * velox make policy article --crud # CRUD policy class
12
+ * velox make policy document --resource # Resource-based ABAC
13
+ * velox make policy comment --soft # Include soft delete policies
14
+ */
15
+ import { BaseGenerator } from '../base.js';
16
+ import { getPolicyInstructions, getPolicyPath, policyTemplate, } from '../templates/policy.js';
17
+ // ============================================================================
18
+ // Generator Implementation
19
+ // ============================================================================
20
+ /**
21
+ * Policy generator - creates authorization policy files
22
+ */
23
+ export class PolicyGenerator extends BaseGenerator {
24
+ metadata = {
25
+ name: 'policy',
26
+ description: 'Generate authorization policy definitions',
27
+ longDescription: `
28
+ Scaffold authorization policies for VeloxTS applications.
29
+
30
+ Policies centralize authorization logic for resources, making it
31
+ easier to maintain and test access control rules separately from
32
+ business logic.
33
+
34
+ Examples:
35
+ velox make policy post # Simple policy
36
+ velox make policy article --crud # CRUD policy class
37
+ velox make policy document --resource # Resource-based ABAC
38
+ velox make policy comment --soft # Include soft delete policies
39
+ `,
40
+ aliases: ['pol', 'auth'],
41
+ category: 'auth',
42
+ };
43
+ options = [
44
+ {
45
+ name: 'crud',
46
+ short: 'c',
47
+ description: 'Generate CRUD policy class',
48
+ type: 'boolean',
49
+ default: false,
50
+ },
51
+ {
52
+ name: 'resource',
53
+ short: 'r',
54
+ description: 'Generate resource-based ABAC policy',
55
+ type: 'boolean',
56
+ default: false,
57
+ },
58
+ {
59
+ name: 'soft',
60
+ short: 's',
61
+ description: 'Include soft delete policies',
62
+ type: 'boolean',
63
+ default: false,
64
+ },
65
+ ];
66
+ /**
67
+ * Validate and transform raw options
68
+ */
69
+ validateOptions(raw) {
70
+ return {
71
+ crud: Boolean(raw.crud ?? false),
72
+ resource: Boolean(raw.resource ?? false),
73
+ softDelete: Boolean(raw.soft ?? false),
74
+ };
75
+ }
76
+ /**
77
+ * Generate policy files
78
+ */
79
+ async generate(config) {
80
+ const context = this.createContext(config);
81
+ const files = [];
82
+ // Generate policy file
83
+ const policyContent = policyTemplate(context);
84
+ files.push({
85
+ path: getPolicyPath(config.entityName, config.project),
86
+ content: policyContent,
87
+ });
88
+ return {
89
+ files,
90
+ postInstructions: getPolicyInstructions(config.entityName, config.options),
91
+ };
92
+ }
93
+ }
94
+ /**
95
+ * Factory function for creating a PolicyGenerator instance
96
+ */
97
+ export function createPolicyGenerator() {
98
+ return new PolicyGenerator();
99
+ }
100
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/generators/generators/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,aAAa,EAEb,cAAc,GACf,MAAM,wBAAwB,CAAC;AAShC,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAA4B;IACtD,QAAQ,GAAsB;QACrC,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,2CAA2C;QACxD,eAAe,EAAE;;;;;;;;;;;;CAYpB;QACG,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM;KACjB,CAAC;IAEO,OAAO,GAAmC;QACjD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,4BAA4B;YACzC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,qCAAqC;YAClD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,WAAW,EAAE,8BAA8B;YAC3C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACf;KACF,CAAC;IAEF;;OAEG;IACH,eAAe,CAAC,GAA4B;QAC1C,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;YAChC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC;YACxC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;SACvC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAsC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,uBAAuB;QACvB,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;YACtD,OAAO,EAAE,aAAa;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,gBAAgB,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC;SAC3E,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,eAAe,EAAE,CAAC;AAC/B,CAAC"}
@@ -3,27 +3,65 @@
3
3
  *
4
4
  * Generates a complete resource with model, schema, procedures, and tests.
5
5
  * This is the "full stack" generator for quickly scaffolding new entities.
6
+ *
7
+ * Features:
8
+ * - Auto-injects Prisma models into schema.prisma
9
+ * - Auto-registers procedures in detected router pattern
10
+ * - Optional automatic Prisma migration
11
+ * - Snapshot/rollback for safe file operations
6
12
  */
7
13
  import { BaseGenerator } from '../base.js';
8
14
  import { type ResourceOptions } from '../templates/resource.js';
9
15
  import type { GeneratorConfig, GeneratorMetadata, GeneratorOption, GeneratorOutput } from '../types.js';
16
+ /**
17
+ * CLI options including interactive flags and auto-registration (extends ResourceOptions for template)
18
+ */
19
+ interface ResourceCliOptions extends ResourceOptions {
20
+ interactive: boolean;
21
+ skipFields: boolean;
22
+ skipRegistration: boolean;
23
+ skipMigration: boolean;
24
+ autoMigrate: boolean;
25
+ }
10
26
  /**
11
27
  * Resource generator implementation
12
28
  */
13
- export declare class ResourceGenerator extends BaseGenerator<ResourceOptions> {
29
+ export declare class ResourceGenerator extends BaseGenerator<ResourceCliOptions> {
14
30
  readonly metadata: GeneratorMetadata;
15
31
  readonly options: ReadonlyArray<GeneratorOption>;
16
32
  /**
17
33
  * Validate resource-specific options
18
34
  */
19
- validateOptions(rawOptions: Record<string, unknown>): ResourceOptions;
35
+ validateOptions(rawOptions: Record<string, unknown>): ResourceCliOptions;
36
+ /**
37
+ * Generate resource files with optional interactive field collection
38
+ * and automatic Prisma/router integration
39
+ */
40
+ generate(config: GeneratorConfig<ResourceCliOptions>): Promise<GeneratorOutput>;
41
+ /**
42
+ * Perform auto-registration of Prisma model and procedures
43
+ */
44
+ private performAutoRegistration;
45
+ /**
46
+ * Inject Prisma model into schema.prisma
47
+ */
48
+ private injectPrismaModel;
49
+ /**
50
+ * Register procedures in router
51
+ */
52
+ private registerInRouter;
53
+ /**
54
+ * Build post-instructions based on what was auto-done
55
+ */
56
+ private buildPostInstructions;
20
57
  /**
21
- * Generate resource files
58
+ * Collect fields interactively from user
22
59
  */
23
- generate(config: GeneratorConfig<ResourceOptions>): Promise<GeneratorOutput>;
60
+ private collectFieldsInteractively;
24
61
  }
25
62
  /**
26
63
  * Create a new resource generator instance
27
64
  */
28
65
  export declare function createResourceGenerator(): ResourceGenerator;
66
+ export {};
29
67
  //# sourceMappingURL=resource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/resource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAgFrB;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,eAAe,CAAC;IACnE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAY;IAChD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAW;IAE3D;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe;IAarE;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;CASnF;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/generators/generators/resource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AA0IrB;;GAEG;AACH,UAAU,kBAAmB,SAAQ,eAAe;IAClD,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IAEpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;CACtB;AAkBD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,kBAAkB,CAAC;IACtE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAY;IAChD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAW;IAE3D;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB;IAmBxE;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IA6FrF;;OAEG;YACW,uBAAuB;IAiFrC;;OAEG;YACW,iBAAiB;IAyE/B;;OAEG;YACW,gBAAgB;IAkF9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkH7B;;OAEG;YACW,0BAA0B;CAuBzC;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D"}