@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
@@ -0,0 +1,366 @@
1
+ /**
2
+ * Field Prompts Module
3
+ *
4
+ * Interactive prompts for collecting field definitions using @clack/prompts.
5
+ * Features an interactive menu-driven workflow with add/edit/remove capabilities.
6
+ */
7
+ import * as p from '@clack/prompts';
8
+ import pc from 'picocolors';
9
+ import { confirmCancel, confirmFieldsComplete, confirmRemoveField, handleTemplateConflicts, promptMainMenu, selectAndApplyTemplate, selectField, showFieldAdded, showFieldRemoved, showFieldUpdated, showTemplateApplied, } from './actions.js';
10
+ import { clearAndDisplay, displayEnumPreview } from './display.js';
11
+ import { FIELD_TYPES, parseEnumValues, validateEnumName, validateEnumValues, validateFieldName, } from './types.js';
12
+ /**
13
+ * Collect field definitions interactively from the user
14
+ * Uses a menu-driven workflow with add/edit/remove capabilities
15
+ */
16
+ export async function collectFields(options) {
17
+ const { resourceName } = options;
18
+ const fields = [];
19
+ const existingNames = new Set();
20
+ // Main interactive loop
21
+ while (true) {
22
+ // Display current state
23
+ clearAndDisplay(fields, resourceName);
24
+ // Prompt for action
25
+ const action = await promptMainMenu(fields.length);
26
+ if (p.isCancel(action)) {
27
+ const shouldCancel = await confirmCancel();
28
+ if (shouldCancel) {
29
+ p.cancel('Field definition cancelled.');
30
+ return { fields: [], cancelled: true };
31
+ }
32
+ continue;
33
+ }
34
+ // Handle action
35
+ switch (action) {
36
+ case 'add': {
37
+ const result = await collectSingleField(existingNames, fields.length + 1);
38
+ if (result.cancelled)
39
+ continue;
40
+ if (result.field) {
41
+ fields.push(result.field);
42
+ existingNames.add(result.field.name);
43
+ showFieldAdded(result.field);
44
+ await pause(600);
45
+ }
46
+ break;
47
+ }
48
+ case 'edit': {
49
+ const fieldIndex = await selectField(fields, 'edit');
50
+ if (fieldIndex === null)
51
+ continue;
52
+ const field = fields[fieldIndex];
53
+ const edited = await editField(field, existingNames);
54
+ if (edited) {
55
+ existingNames.delete(field.name);
56
+ fields[fieldIndex] = edited;
57
+ existingNames.add(edited.name);
58
+ showFieldUpdated(edited);
59
+ await pause(600);
60
+ }
61
+ break;
62
+ }
63
+ case 'remove': {
64
+ const fieldIndex = await selectField(fields, 'remove');
65
+ if (fieldIndex === null)
66
+ continue;
67
+ const field = fields[fieldIndex];
68
+ const confirmed = await confirmRemoveField(field);
69
+ if (confirmed) {
70
+ fields.splice(fieldIndex, 1);
71
+ existingNames.delete(field.name);
72
+ showFieldRemoved(field.name);
73
+ await pause(600);
74
+ }
75
+ break;
76
+ }
77
+ case 'template': {
78
+ const templateFields = await selectAndApplyTemplate();
79
+ if (!templateFields)
80
+ continue;
81
+ // Handle conflicts
82
+ const fieldsToAdd = await handleTemplateConflicts(templateFields, existingNames);
83
+ if (!fieldsToAdd || fieldsToAdd.length === 0)
84
+ continue;
85
+ // Add non-conflicting fields
86
+ for (const field of fieldsToAdd) {
87
+ fields.push(field);
88
+ existingNames.add(field.name);
89
+ }
90
+ showTemplateApplied(fieldsToAdd.length, 'Template');
91
+ await pause(800);
92
+ break;
93
+ }
94
+ case 'skip': {
95
+ const confirmed = await p.confirm({
96
+ message: 'Generate skeleton without custom fields?',
97
+ initialValue: true,
98
+ });
99
+ if (p.isCancel(confirmed) || !confirmed)
100
+ continue;
101
+ p.outro(pc.dim('Generating skeleton...'));
102
+ return { fields: [], cancelled: false };
103
+ }
104
+ case 'done': {
105
+ clearAndDisplay(fields, resourceName);
106
+ const confirmed = await confirmFieldsComplete(fields);
107
+ if (confirmed) {
108
+ p.outro(pc.green('Fields confirmed!'));
109
+ return { fields, cancelled: false };
110
+ }
111
+ break;
112
+ }
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Collect a single field definition
118
+ */
119
+ async function collectSingleField(existingNames, fieldNumber, prefill) {
120
+ console.log();
121
+ console.log(pc.bold(pc.cyan(prefill ? `Edit Field: ${prefill.name}` : `Field #${fieldNumber}`)));
122
+ // 1. Get field name
123
+ const nameResult = await p.text({
124
+ message: 'Field name (camelCase)',
125
+ placeholder: 'e.g., title, authorId, isPublished',
126
+ initialValue: prefill?.name ?? '',
127
+ validate: (value) => {
128
+ const trimmed = value.trim();
129
+ const error = validateFieldName(trimmed);
130
+ if (error)
131
+ return error;
132
+ // Allow same name if editing, otherwise check for duplicates
133
+ if (prefill?.name !== trimmed && existingNames.has(trimmed)) {
134
+ return `Field "${trimmed}" already exists`;
135
+ }
136
+ return undefined;
137
+ },
138
+ });
139
+ if (p.isCancel(nameResult)) {
140
+ return { field: null, cancelled: true };
141
+ }
142
+ const fieldName = nameResult.trim();
143
+ // 2. Get field type
144
+ const typeOptions = FIELD_TYPES.map((t) => ({
145
+ value: t.type,
146
+ label: t.label,
147
+ hint: t.description,
148
+ }));
149
+ const typeResult = await p.select({
150
+ message: 'Field type',
151
+ options: typeOptions,
152
+ initialValue: prefill?.type,
153
+ });
154
+ if (p.isCancel(typeResult)) {
155
+ return { field: null, cancelled: true };
156
+ }
157
+ const fieldType = typeResult;
158
+ // 3. Get field attributes
159
+ const attributesResult = await collectFieldAttributes(fieldType, prefill?.attributes);
160
+ if (attributesResult.cancelled) {
161
+ return { field: null, cancelled: true };
162
+ }
163
+ // 4. Get enum definition if needed
164
+ let enumDef;
165
+ if (fieldType === 'enum') {
166
+ const enumResult = await collectEnumDefinition(fieldName, prefill?.enumDef);
167
+ if (enumResult.cancelled) {
168
+ return { field: null, cancelled: true };
169
+ }
170
+ enumDef = enumResult.enumDef;
171
+ }
172
+ return {
173
+ field: {
174
+ name: fieldName,
175
+ type: fieldType,
176
+ attributes: attributesResult.attributes,
177
+ enumDef,
178
+ },
179
+ cancelled: false,
180
+ };
181
+ }
182
+ /**
183
+ * Edit an existing field
184
+ */
185
+ async function editField(field, existingNames) {
186
+ const result = await collectSingleField(existingNames, 0, field);
187
+ if (result.cancelled || !result.field) {
188
+ return null;
189
+ }
190
+ return result.field;
191
+ }
192
+ /**
193
+ * Collect field attributes (optional, unique, default)
194
+ */
195
+ async function collectFieldAttributes(fieldType, prefill) {
196
+ // Build options based on field type
197
+ const options = [
198
+ { value: 'optional', label: 'Optional', hint: 'Field can be null' },
199
+ { value: 'unique', label: 'Unique', hint: 'Values must be unique' },
200
+ ];
201
+ // Only show default option for certain types
202
+ if (['string', 'text', 'int', 'float', 'boolean'].includes(fieldType)) {
203
+ options.push({ value: 'hasDefault', label: 'Has default value' });
204
+ }
205
+ // Determine initial values from prefill
206
+ const initialValues = [];
207
+ if (prefill?.optional)
208
+ initialValues.push('optional');
209
+ if (prefill?.unique)
210
+ initialValues.push('unique');
211
+ if (prefill?.hasDefault)
212
+ initialValues.push('hasDefault');
213
+ const selectedResult = await p.multiselect({
214
+ message: 'Field attributes (space to toggle, enter to confirm)',
215
+ options,
216
+ required: false,
217
+ initialValues: initialValues.length > 0 ? initialValues : undefined,
218
+ });
219
+ if (p.isCancel(selectedResult)) {
220
+ return {
221
+ attributes: { optional: false, unique: false, hasDefault: false },
222
+ cancelled: true,
223
+ };
224
+ }
225
+ const selected = selectedResult;
226
+ const attributes = {
227
+ optional: selected.includes('optional'),
228
+ unique: selected.includes('unique'),
229
+ hasDefault: selected.includes('hasDefault'),
230
+ };
231
+ // If has default, ask for the value
232
+ if (attributes.hasDefault) {
233
+ const defaultResult = await collectDefaultValue(fieldType, prefill?.defaultValue);
234
+ if (defaultResult.cancelled) {
235
+ return { attributes, cancelled: true };
236
+ }
237
+ attributes.defaultValue = defaultResult.value;
238
+ }
239
+ return { attributes, cancelled: false };
240
+ }
241
+ /**
242
+ * Collect default value based on field type
243
+ */
244
+ async function collectDefaultValue(fieldType, prefill) {
245
+ if (fieldType === 'boolean') {
246
+ const result = await p.select({
247
+ message: 'Default value',
248
+ options: [
249
+ { value: 'true', label: 'true' },
250
+ { value: 'false', label: 'false' },
251
+ ],
252
+ initialValue: prefill ?? 'false',
253
+ });
254
+ if (p.isCancel(result)) {
255
+ return { value: '', cancelled: true };
256
+ }
257
+ return { value: result, cancelled: false };
258
+ }
259
+ const placeholder = getDefaultPlaceholder(fieldType);
260
+ const result = await p.text({
261
+ message: 'Default value',
262
+ placeholder,
263
+ initialValue: prefill ?? '',
264
+ validate: (value) => {
265
+ if (!value.trim())
266
+ return 'Default value is required';
267
+ return validateDefaultValue(fieldType, value.trim());
268
+ },
269
+ });
270
+ if (p.isCancel(result)) {
271
+ return { value: '', cancelled: true };
272
+ }
273
+ return { value: result.trim(), cancelled: false };
274
+ }
275
+ /**
276
+ * Get placeholder text for default value input
277
+ */
278
+ function getDefaultPlaceholder(fieldType) {
279
+ switch (fieldType) {
280
+ case 'string':
281
+ case 'text':
282
+ return 'e.g., "default text"';
283
+ case 'int':
284
+ return 'e.g., 0';
285
+ case 'float':
286
+ return 'e.g., 0.0';
287
+ default:
288
+ return '';
289
+ }
290
+ }
291
+ /**
292
+ * Validate default value based on field type
293
+ */
294
+ function validateDefaultValue(fieldType, value) {
295
+ switch (fieldType) {
296
+ case 'int':
297
+ if (!/^-?\d+$/.test(value)) {
298
+ return 'Must be a valid integer';
299
+ }
300
+ break;
301
+ case 'float':
302
+ if (!/^-?\d+(\.\d+)?$/.test(value)) {
303
+ return 'Must be a valid number';
304
+ }
305
+ break;
306
+ }
307
+ return undefined;
308
+ }
309
+ /**
310
+ * Collect enum type name and values with preview
311
+ */
312
+ async function collectEnumDefinition(fieldName, prefill) {
313
+ // Suggest enum name based on field name
314
+ const suggestedName = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
315
+ const nameResult = await p.text({
316
+ message: 'Enum type name (PascalCase)',
317
+ placeholder: suggestedName,
318
+ initialValue: prefill?.name ?? suggestedName,
319
+ validate: validateEnumName,
320
+ });
321
+ if (p.isCancel(nameResult)) {
322
+ return { enumDef: undefined, cancelled: true };
323
+ }
324
+ const enumName = nameResult.trim();
325
+ const valuesResult = await p.text({
326
+ message: 'Enum values (comma-separated, will be converted to UPPER_CASE)',
327
+ placeholder: 'e.g., draft, published, archived',
328
+ initialValue: prefill?.values?.join(', ') ?? '',
329
+ validate: (value) => {
330
+ const parsed = parseEnumValues(value);
331
+ return validateEnumValues(parsed);
332
+ },
333
+ });
334
+ if (p.isCancel(valuesResult)) {
335
+ return { enumDef: undefined, cancelled: true };
336
+ }
337
+ const enumValues = parseEnumValues(valuesResult);
338
+ // Show preview
339
+ displayEnumPreview(enumName, enumValues);
340
+ // Confirm enum
341
+ const confirmResult = await p.confirm({
342
+ message: 'Looks good?',
343
+ initialValue: true,
344
+ });
345
+ if (p.isCancel(confirmResult) || !confirmResult) {
346
+ // Allow re-entry
347
+ return collectEnumDefinition(fieldName, { name: enumName, values: enumValues });
348
+ }
349
+ return {
350
+ enumDef: {
351
+ name: enumName,
352
+ values: enumValues,
353
+ },
354
+ cancelled: false,
355
+ };
356
+ }
357
+ // ============================================================================
358
+ // Helpers
359
+ // ============================================================================
360
+ /**
361
+ * Brief pause for user feedback
362
+ */
363
+ async function pause(ms) {
364
+ return new Promise((resolve) => setTimeout(resolve, ms));
365
+ }
366
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/generators/fields/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Field Templates for Quick Resource Generation
3
+ *
4
+ * Pre-built field configurations for common use cases.
5
+ * Templates provide a quick way to add multiple related fields at once.
6
+ */
7
+ import type { FieldDefinition } from './types.js';
8
+ /**
9
+ * A field template containing pre-configured fields
10
+ */
11
+ export interface FieldTemplate {
12
+ /** Unique identifier for the template */
13
+ id: string;
14
+ /** Display name shown in the menu */
15
+ name: string;
16
+ /** Short description of what the template provides */
17
+ description: string;
18
+ /** Pre-configured fields included in this template */
19
+ fields: FieldDefinition[];
20
+ }
21
+ /**
22
+ * All available field templates
23
+ */
24
+ export declare const FIELD_TEMPLATES: readonly FieldTemplate[];
25
+ /**
26
+ * Get a template by its ID
27
+ */
28
+ export declare function getTemplate(id: string): FieldTemplate | undefined;
29
+ /**
30
+ * Format a template for display in a select prompt
31
+ */
32
+ export declare function formatTemplateOption(template: FieldTemplate): {
33
+ value: string;
34
+ label: string;
35
+ hint: string;
36
+ };
37
+ /**
38
+ * Get all templates formatted for select prompt options
39
+ */
40
+ export declare function getTemplateOptions(): Array<{
41
+ value: string;
42
+ label: string;
43
+ hint: string;
44
+ }>;
45
+ /**
46
+ * Clone template fields (deep copy to avoid mutations)
47
+ */
48
+ export declare function cloneTemplateFields(template: FieldTemplate): FieldDefinition[];
49
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/generators/fields/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAMlD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAwLD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAK1C,CAAC;AAMX;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEjE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAMA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAE1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,eAAe,EAAE,CAS9E"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Field Templates for Quick Resource Generation
3
+ *
4
+ * Pre-built field configurations for common use cases.
5
+ * Templates provide a quick way to add multiple related fields at once.
6
+ */
7
+ // ============================================================================
8
+ // Built-in Templates
9
+ // ============================================================================
10
+ /**
11
+ * Blog Post template - common fields for blog posts
12
+ */
13
+ const blogPostTemplate = {
14
+ id: 'blog-post',
15
+ name: 'Blog Post Fields',
16
+ description: 'title, slug, content, excerpt, publishedAt, status',
17
+ fields: [
18
+ {
19
+ name: 'title',
20
+ type: 'string',
21
+ attributes: { optional: false, unique: false, hasDefault: false },
22
+ },
23
+ {
24
+ name: 'slug',
25
+ type: 'string',
26
+ attributes: { optional: false, unique: true, hasDefault: false },
27
+ },
28
+ {
29
+ name: 'content',
30
+ type: 'text',
31
+ attributes: { optional: false, unique: false, hasDefault: false },
32
+ },
33
+ {
34
+ name: 'excerpt',
35
+ type: 'text',
36
+ attributes: { optional: true, unique: false, hasDefault: false },
37
+ },
38
+ {
39
+ name: 'publishedAt',
40
+ type: 'datetime',
41
+ attributes: { optional: true, unique: false, hasDefault: false },
42
+ },
43
+ {
44
+ name: 'status',
45
+ type: 'enum',
46
+ attributes: { optional: false, unique: false, hasDefault: true, defaultValue: 'DRAFT' },
47
+ enumDef: { name: 'PostStatus', values: ['DRAFT', 'PUBLISHED', 'ARCHIVED'] },
48
+ },
49
+ ],
50
+ };
51
+ /**
52
+ * User Profile template - basic user profile fields
53
+ */
54
+ const userProfileTemplate = {
55
+ id: 'user-profile',
56
+ name: 'User Profile Fields',
57
+ description: 'name, email, username, bio, avatar, emailVerified',
58
+ fields: [
59
+ {
60
+ name: 'name',
61
+ type: 'string',
62
+ attributes: { optional: false, unique: false, hasDefault: false },
63
+ },
64
+ {
65
+ name: 'email',
66
+ type: 'string',
67
+ attributes: { optional: false, unique: true, hasDefault: false },
68
+ },
69
+ {
70
+ name: 'username',
71
+ type: 'string',
72
+ attributes: { optional: false, unique: true, hasDefault: false },
73
+ },
74
+ {
75
+ name: 'bio',
76
+ type: 'text',
77
+ attributes: { optional: true, unique: false, hasDefault: false },
78
+ },
79
+ {
80
+ name: 'avatar',
81
+ type: 'string',
82
+ attributes: { optional: true, unique: false, hasDefault: false },
83
+ },
84
+ {
85
+ name: 'emailVerified',
86
+ type: 'boolean',
87
+ attributes: { optional: false, unique: false, hasDefault: true, defaultValue: 'false' },
88
+ },
89
+ ],
90
+ };
91
+ /**
92
+ * Product template - e-commerce product fields
93
+ */
94
+ const productTemplate = {
95
+ id: 'product',
96
+ name: 'Product Fields',
97
+ description: 'name, description, sku, price, inStock, stockQuantity',
98
+ fields: [
99
+ {
100
+ name: 'name',
101
+ type: 'string',
102
+ attributes: { optional: false, unique: false, hasDefault: false },
103
+ },
104
+ {
105
+ name: 'description',
106
+ type: 'text',
107
+ attributes: { optional: false, unique: false, hasDefault: false },
108
+ },
109
+ {
110
+ name: 'sku',
111
+ type: 'string',
112
+ attributes: { optional: false, unique: true, hasDefault: false },
113
+ },
114
+ {
115
+ name: 'price',
116
+ type: 'float',
117
+ attributes: { optional: false, unique: false, hasDefault: false },
118
+ },
119
+ {
120
+ name: 'compareAtPrice',
121
+ type: 'float',
122
+ attributes: { optional: true, unique: false, hasDefault: false },
123
+ },
124
+ {
125
+ name: 'inStock',
126
+ type: 'boolean',
127
+ attributes: { optional: false, unique: false, hasDefault: true, defaultValue: 'true' },
128
+ },
129
+ {
130
+ name: 'stockQuantity',
131
+ type: 'int',
132
+ attributes: { optional: false, unique: false, hasDefault: true, defaultValue: '0' },
133
+ },
134
+ ],
135
+ };
136
+ /**
137
+ * Order template - e-commerce order fields
138
+ */
139
+ const orderTemplate = {
140
+ id: 'order',
141
+ name: 'E-commerce Order Fields',
142
+ description: 'orderNumber, total, subtotal, tax, shippingAddress, status',
143
+ fields: [
144
+ {
145
+ name: 'orderNumber',
146
+ type: 'string',
147
+ attributes: { optional: false, unique: true, hasDefault: false },
148
+ },
149
+ {
150
+ name: 'total',
151
+ type: 'float',
152
+ attributes: { optional: false, unique: false, hasDefault: false },
153
+ },
154
+ {
155
+ name: 'subtotal',
156
+ type: 'float',
157
+ attributes: { optional: false, unique: false, hasDefault: false },
158
+ },
159
+ {
160
+ name: 'tax',
161
+ type: 'float',
162
+ attributes: { optional: false, unique: false, hasDefault: false },
163
+ },
164
+ {
165
+ name: 'shippingAddress',
166
+ type: 'json',
167
+ attributes: { optional: false, unique: false, hasDefault: false },
168
+ },
169
+ {
170
+ name: 'status',
171
+ type: 'enum',
172
+ attributes: { optional: false, unique: false, hasDefault: true, defaultValue: 'PENDING' },
173
+ enumDef: {
174
+ name: 'OrderStatus',
175
+ values: ['PENDING', 'PROCESSING', 'SHIPPED', 'DELIVERED', 'CANCELLED'],
176
+ },
177
+ },
178
+ ],
179
+ };
180
+ // ============================================================================
181
+ // Template Registry
182
+ // ============================================================================
183
+ /**
184
+ * All available field templates
185
+ */
186
+ export const FIELD_TEMPLATES = [
187
+ blogPostTemplate,
188
+ userProfileTemplate,
189
+ productTemplate,
190
+ orderTemplate,
191
+ ];
192
+ // ============================================================================
193
+ // Template Functions
194
+ // ============================================================================
195
+ /**
196
+ * Get a template by its ID
197
+ */
198
+ export function getTemplate(id) {
199
+ return FIELD_TEMPLATES.find((t) => t.id === id);
200
+ }
201
+ /**
202
+ * Format a template for display in a select prompt
203
+ */
204
+ export function formatTemplateOption(template) {
205
+ return {
206
+ value: template.id,
207
+ label: template.name,
208
+ hint: template.description,
209
+ };
210
+ }
211
+ /**
212
+ * Get all templates formatted for select prompt options
213
+ */
214
+ export function getTemplateOptions() {
215
+ return FIELD_TEMPLATES.map(formatTemplateOption);
216
+ }
217
+ /**
218
+ * Clone template fields (deep copy to avoid mutations)
219
+ */
220
+ export function cloneTemplateFields(template) {
221
+ return template.fields.map((field) => ({
222
+ name: field.name,
223
+ type: field.type,
224
+ attributes: { ...field.attributes },
225
+ enumDef: field.enumDef
226
+ ? { name: field.enumDef.name, values: [...field.enumDef.values] }
227
+ : undefined,
228
+ }));
229
+ }
230
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/generators/fields/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,gBAAgB,GAAkB;IACtC,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,oDAAoD;IACjE,MAAM,EAAE;QACN;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE;YACvF,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE;SAC5E;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAkB;IACzC,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,mDAAmD;IAChE,MAAM,EAAE;QACN;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE;SACxF;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,eAAe,GAAkB;IACrC,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,uDAAuD;IACpE,MAAM,EAAE;QACN;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE;SACvF;QACD;YACE,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE;SACpF;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,aAAa,GAAkB;IACnC,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE,4DAA4D;IACzE,MAAM,EAAE;QACN;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;SACjE;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAClE;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE;YACzF,OAAO,EAAE;gBACP,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC;aACvE;SACF;KACF;CACF,CAAC;AAEF,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,gBAAgB;IAChB,mBAAmB;IACnB,eAAe;IACf,aAAa;CACL,CAAC;AAEX,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAuB;IAK1D,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,EAAE;QAClB,KAAK,EAAE,QAAQ,CAAC,IAAI;QACpB,IAAI,EAAE,QAAQ,CAAC,WAAW;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAuB;IACzD,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE;QACnC,OAAO,EAAE,KAAK,CAAC,OAAO;YACpB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACjE,CAAC,CAAC,SAAS;KACd,CAAC,CAAC,CAAC;AACN,CAAC"}