archetype-engine 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +241 -0
- package/dist/src/ai/adapters/anthropic.d.ts +31 -0
- package/dist/src/ai/adapters/anthropic.d.ts.map +1 -0
- package/dist/src/ai/adapters/anthropic.js +75 -0
- package/dist/src/ai/adapters/openai.d.ts +33 -0
- package/dist/src/ai/adapters/openai.d.ts.map +1 -0
- package/dist/src/ai/adapters/openai.js +120 -0
- package/dist/src/ai/adapters/vercel.d.ts +434 -0
- package/dist/src/ai/adapters/vercel.d.ts.map +1 -0
- package/dist/src/ai/adapters/vercel.js +162 -0
- package/dist/src/ai/index.d.ts +492 -0
- package/dist/src/ai/index.d.ts.map +1 -0
- package/dist/src/ai/index.js +71 -0
- package/dist/src/ai/state.d.ts +13 -0
- package/dist/src/ai/state.d.ts.map +1 -0
- package/dist/src/ai/state.js +215 -0
- package/dist/src/ai/tools.d.ts +13 -0
- package/dist/src/ai/tools.d.ts.map +1 -0
- package/dist/src/ai/tools.js +257 -0
- package/dist/src/ai/types.d.ts +196 -0
- package/dist/src/ai/types.d.ts.map +1 -0
- package/dist/src/ai/types.js +9 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +540 -0
- package/dist/src/core/utils.d.ts +27 -0
- package/dist/src/core/utils.d.ts.map +1 -0
- package/dist/src/core/utils.js +56 -0
- package/dist/src/entity.d.ts +165 -0
- package/dist/src/entity.d.ts.map +1 -0
- package/dist/src/entity.js +108 -0
- package/dist/src/fields.d.ts +207 -0
- package/dist/src/fields.d.ts.map +1 -0
- package/dist/src/fields.js +291 -0
- package/dist/src/generators/erd-ir.d.ts +10 -0
- package/dist/src/generators/erd-ir.d.ts.map +1 -0
- package/dist/src/generators/erd-ir.js +119 -0
- package/dist/src/index.d.ts +51 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +101 -0
- package/dist/src/init/dependencies.d.ts +31 -0
- package/dist/src/init/dependencies.d.ts.map +1 -0
- package/dist/src/init/dependencies.js +101 -0
- package/dist/src/init/entity-templates.d.ts +42 -0
- package/dist/src/init/entity-templates.d.ts.map +1 -0
- package/dist/src/init/entity-templates.js +367 -0
- package/dist/src/init/index.d.ts +10 -0
- package/dist/src/init/index.d.ts.map +1 -0
- package/dist/src/init/index.js +250 -0
- package/dist/src/init/prompts.d.ts +11 -0
- package/dist/src/init/prompts.d.ts.map +1 -0
- package/dist/src/init/prompts.js +275 -0
- package/dist/src/init/templates.d.ts +24 -0
- package/dist/src/init/templates.d.ts.map +1 -0
- package/dist/src/init/templates.js +587 -0
- package/dist/src/json/index.d.ts +11 -0
- package/dist/src/json/index.d.ts.map +1 -0
- package/dist/src/json/index.js +26 -0
- package/dist/src/json/parser.d.ts +61 -0
- package/dist/src/json/parser.d.ts.map +1 -0
- package/dist/src/json/parser.js +309 -0
- package/dist/src/json/types.d.ts +275 -0
- package/dist/src/json/types.d.ts.map +1 -0
- package/dist/src/json/types.js +10 -0
- package/dist/src/manifest.d.ts +147 -0
- package/dist/src/manifest.d.ts.map +1 -0
- package/dist/src/manifest.js +104 -0
- package/dist/src/relations.d.ts +96 -0
- package/dist/src/relations.d.ts.map +1 -0
- package/dist/src/relations.js +108 -0
- package/dist/src/source.d.ts +93 -0
- package/dist/src/source.d.ts.map +1 -0
- package/dist/src/source.js +89 -0
- package/dist/src/template/context.d.ts +34 -0
- package/dist/src/template/context.d.ts.map +1 -0
- package/dist/src/template/context.js +31 -0
- package/dist/src/template/index.d.ts +6 -0
- package/dist/src/template/index.d.ts.map +1 -0
- package/dist/src/template/index.js +12 -0
- package/dist/src/template/registry.d.ts +18 -0
- package/dist/src/template/registry.d.ts.map +1 -0
- package/dist/src/template/registry.js +89 -0
- package/dist/src/template/runner.d.ts +9 -0
- package/dist/src/template/runner.d.ts.map +1 -0
- package/dist/src/template/runner.js +125 -0
- package/dist/src/template/types.d.ts +73 -0
- package/dist/src/template/types.d.ts.map +1 -0
- package/dist/src/template/types.js +3 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/api.d.ts +22 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/api.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/api.js +866 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.d.ts +20 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.js +273 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.d.ts +22 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.js +237 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.d.ts +30 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.js +345 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.d.ts +25 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.js +199 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/index.d.ts +8 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/index.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/index.js +18 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.d.ts +22 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.js +270 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/service.d.ts +23 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/service.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/service.js +304 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.d.ts +21 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.js +248 -0
- package/dist/src/templates/nextjs-drizzle-trpc/index.d.ts +30 -0
- package/dist/src/templates/nextjs-drizzle-trpc/index.d.ts.map +1 -0
- package/dist/src/templates/nextjs-drizzle-trpc/index.js +71 -0
- package/dist/src/validation/index.d.ts +71 -0
- package/dist/src/validation/index.d.ts.map +1 -0
- package/dist/src/validation/index.js +314 -0
- package/package.json +86 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Field builders for entity definitions
|
|
4
|
+
*
|
|
5
|
+
* Each method returns a new immutable object (functional programming pattern).
|
|
6
|
+
* Chain methods to build field configurations fluently.
|
|
7
|
+
*
|
|
8
|
+
* @module fields
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.text = text;
|
|
12
|
+
exports.number = number;
|
|
13
|
+
exports.boolean = boolean;
|
|
14
|
+
exports.date = date;
|
|
15
|
+
exports.enumField = enumField;
|
|
16
|
+
exports.computed = computed;
|
|
17
|
+
// Builder implementations
|
|
18
|
+
function createTextFieldBuilder(config) {
|
|
19
|
+
return {
|
|
20
|
+
_config: config,
|
|
21
|
+
required: () => createTextFieldBuilder({ ...config, required: true }),
|
|
22
|
+
optional: () => createTextFieldBuilder({ ...config, required: false }),
|
|
23
|
+
unique: () => createTextFieldBuilder({ ...config, unique: true }),
|
|
24
|
+
default: (value) => createTextFieldBuilder({ ...config, default: value }),
|
|
25
|
+
label: (value) => createTextFieldBuilder({ ...config, label: value }),
|
|
26
|
+
min: (value) => createTextFieldBuilder({
|
|
27
|
+
...config,
|
|
28
|
+
validations: [...config.validations, { type: 'minLength', value }]
|
|
29
|
+
}),
|
|
30
|
+
max: (value) => createTextFieldBuilder({
|
|
31
|
+
...config,
|
|
32
|
+
validations: [...config.validations, { type: 'maxLength', value }]
|
|
33
|
+
}),
|
|
34
|
+
length: (value) => createTextFieldBuilder({
|
|
35
|
+
...config,
|
|
36
|
+
validations: [...config.validations, { type: 'minLength', value }, { type: 'maxLength', value }]
|
|
37
|
+
}),
|
|
38
|
+
email: () => createTextFieldBuilder({
|
|
39
|
+
...config,
|
|
40
|
+
validations: [...config.validations, { type: 'email' }]
|
|
41
|
+
}),
|
|
42
|
+
url: () => createTextFieldBuilder({
|
|
43
|
+
...config,
|
|
44
|
+
validations: [...config.validations, { type: 'url' }]
|
|
45
|
+
}),
|
|
46
|
+
regex: (pattern) => createTextFieldBuilder({
|
|
47
|
+
...config,
|
|
48
|
+
validations: [...config.validations, { type: 'regex', value: pattern.source }]
|
|
49
|
+
}),
|
|
50
|
+
oneOf: (values) => createTextFieldBuilder({
|
|
51
|
+
...config,
|
|
52
|
+
validations: [...config.validations, { type: 'oneOf', value: values }]
|
|
53
|
+
}),
|
|
54
|
+
trim: () => createTextFieldBuilder({
|
|
55
|
+
...config,
|
|
56
|
+
validations: [...config.validations, { type: 'trim' }]
|
|
57
|
+
}),
|
|
58
|
+
lowercase: () => createTextFieldBuilder({
|
|
59
|
+
...config,
|
|
60
|
+
validations: [...config.validations, { type: 'lowercase' }]
|
|
61
|
+
}),
|
|
62
|
+
uppercase: () => createTextFieldBuilder({
|
|
63
|
+
...config,
|
|
64
|
+
validations: [...config.validations, { type: 'uppercase' }]
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function createNumberFieldBuilder(config) {
|
|
69
|
+
return {
|
|
70
|
+
_config: config,
|
|
71
|
+
required: () => createNumberFieldBuilder({ ...config, required: true }),
|
|
72
|
+
optional: () => createNumberFieldBuilder({ ...config, required: false }),
|
|
73
|
+
unique: () => createNumberFieldBuilder({ ...config, unique: true }),
|
|
74
|
+
default: (value) => createNumberFieldBuilder({ ...config, default: value }),
|
|
75
|
+
label: (value) => createNumberFieldBuilder({ ...config, label: value }),
|
|
76
|
+
min: (value) => createNumberFieldBuilder({
|
|
77
|
+
...config,
|
|
78
|
+
validations: [...config.validations, { type: 'min', value }]
|
|
79
|
+
}),
|
|
80
|
+
max: (value) => createNumberFieldBuilder({
|
|
81
|
+
...config,
|
|
82
|
+
validations: [...config.validations, { type: 'max', value }]
|
|
83
|
+
}),
|
|
84
|
+
integer: () => createNumberFieldBuilder({
|
|
85
|
+
...config,
|
|
86
|
+
validations: [...config.validations, { type: 'integer' }]
|
|
87
|
+
}),
|
|
88
|
+
positive: () => createNumberFieldBuilder({
|
|
89
|
+
...config,
|
|
90
|
+
validations: [...config.validations, { type: 'positive' }]
|
|
91
|
+
}),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function createBooleanFieldBuilder(config) {
|
|
95
|
+
return {
|
|
96
|
+
_config: config,
|
|
97
|
+
required: () => createBooleanFieldBuilder({ ...config, required: true }),
|
|
98
|
+
optional: () => createBooleanFieldBuilder({ ...config, required: false }),
|
|
99
|
+
unique: () => createBooleanFieldBuilder({ ...config, unique: true }),
|
|
100
|
+
default: (value) => createBooleanFieldBuilder({ ...config, default: value }),
|
|
101
|
+
label: (value) => createBooleanFieldBuilder({ ...config, label: value }),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function createDateFieldBuilder(config) {
|
|
105
|
+
return {
|
|
106
|
+
_config: config,
|
|
107
|
+
required: () => createDateFieldBuilder({ ...config, required: true }),
|
|
108
|
+
optional: () => createDateFieldBuilder({ ...config, required: false }),
|
|
109
|
+
unique: () => createDateFieldBuilder({ ...config, unique: true }),
|
|
110
|
+
default: (value) => createDateFieldBuilder({ ...config, default: value }),
|
|
111
|
+
label: (value) => createDateFieldBuilder({ ...config, label: value }),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function createEnumFieldBuilder(config) {
|
|
115
|
+
return {
|
|
116
|
+
_config: config,
|
|
117
|
+
required: () => createEnumFieldBuilder({ ...config, required: true }),
|
|
118
|
+
optional: () => createEnumFieldBuilder({ ...config, required: false }),
|
|
119
|
+
unique: () => createEnumFieldBuilder({ ...config, unique: true }),
|
|
120
|
+
default: (value) => createEnumFieldBuilder({ ...config, default: value }),
|
|
121
|
+
label: (value) => createEnumFieldBuilder({ ...config, label: value }),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create a text field builder
|
|
126
|
+
*
|
|
127
|
+
* @returns TextFieldBuilder with chainable methods
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* text()
|
|
132
|
+
* .required()
|
|
133
|
+
* .unique()
|
|
134
|
+
* .email()
|
|
135
|
+
* .min(5).max(255)
|
|
136
|
+
* .trim()
|
|
137
|
+
* .lowercase()
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
function text() {
|
|
141
|
+
return createTextFieldBuilder({
|
|
142
|
+
type: 'text',
|
|
143
|
+
required: false,
|
|
144
|
+
unique: false,
|
|
145
|
+
validations: []
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create a number field builder
|
|
150
|
+
*
|
|
151
|
+
* @returns NumberFieldBuilder with chainable methods
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* number()
|
|
156
|
+
* .required()
|
|
157
|
+
* .min(0).max(100)
|
|
158
|
+
* .integer()
|
|
159
|
+
* .positive()
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
function number() {
|
|
163
|
+
return createNumberFieldBuilder({
|
|
164
|
+
type: 'number',
|
|
165
|
+
required: false,
|
|
166
|
+
unique: false,
|
|
167
|
+
validations: []
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create a boolean field builder
|
|
172
|
+
*
|
|
173
|
+
* @returns BooleanFieldBuilder with chainable methods
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* boolean().default(false)
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
function boolean() {
|
|
181
|
+
return createBooleanFieldBuilder({
|
|
182
|
+
type: 'boolean',
|
|
183
|
+
required: false,
|
|
184
|
+
unique: false,
|
|
185
|
+
validations: []
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Create a date field builder
|
|
190
|
+
*
|
|
191
|
+
* @returns DateFieldBuilder with chainable methods
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* date().default('now')
|
|
196
|
+
* date().required()
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
function date() {
|
|
200
|
+
return createDateFieldBuilder({
|
|
201
|
+
type: 'date',
|
|
202
|
+
required: false,
|
|
203
|
+
unique: false,
|
|
204
|
+
validations: []
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Create an enum field builder with type-safe values
|
|
209
|
+
*
|
|
210
|
+
* Enum fields create native database enum types (PostgreSQL) or
|
|
211
|
+
* CHECK constraints (SQLite/MySQL) and generate proper Zod enums.
|
|
212
|
+
*
|
|
213
|
+
* @param values - Array of allowed string values (use `as const` for type safety)
|
|
214
|
+
* @returns EnumFieldBuilder with chainable methods
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* // Basic enum
|
|
219
|
+
* status: enumField(['draft', 'published', 'archived'])
|
|
220
|
+
*
|
|
221
|
+
* // With type safety (recommended)
|
|
222
|
+
* status: enumField(['draft', 'published', 'archived'] as const)
|
|
223
|
+
* .required()
|
|
224
|
+
* .default('draft')
|
|
225
|
+
*
|
|
226
|
+
* // Order status with default
|
|
227
|
+
* orderStatus: enumField(['pending', 'processing', 'shipped', 'delivered'] as const)
|
|
228
|
+
* .required()
|
|
229
|
+
* .default('pending')
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
function enumField(values) {
|
|
233
|
+
return createEnumFieldBuilder({
|
|
234
|
+
type: 'enum',
|
|
235
|
+
required: false,
|
|
236
|
+
unique: false,
|
|
237
|
+
validations: [],
|
|
238
|
+
enumValues: values,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function createComputedFieldBuilder(config) {
|
|
242
|
+
return {
|
|
243
|
+
_config: config,
|
|
244
|
+
label: (value) => createComputedFieldBuilder({ ...config, label: value }),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Create a computed/virtual field
|
|
249
|
+
*
|
|
250
|
+
* Computed fields are derived from other fields at runtime.
|
|
251
|
+
* They are included in API responses but excluded from create/update inputs.
|
|
252
|
+
* They are NOT stored in the database.
|
|
253
|
+
*
|
|
254
|
+
* @param options - Configuration for the computed field
|
|
255
|
+
* @returns ComputedFieldBuilder
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* ```typescript
|
|
259
|
+
* // Full name from first + last
|
|
260
|
+
* fullName: computed({
|
|
261
|
+
* type: 'text',
|
|
262
|
+
* from: ['firstName', 'lastName'],
|
|
263
|
+
* get: '`${firstName} ${lastName}`'
|
|
264
|
+
* })
|
|
265
|
+
*
|
|
266
|
+
* // Total price
|
|
267
|
+
* totalPrice: computed({
|
|
268
|
+
* type: 'number',
|
|
269
|
+
* from: ['price', 'quantity'],
|
|
270
|
+
* get: 'price * quantity'
|
|
271
|
+
* })
|
|
272
|
+
*
|
|
273
|
+
* // Stock status
|
|
274
|
+
* inStock: computed({
|
|
275
|
+
* type: 'boolean',
|
|
276
|
+
* from: ['quantity'],
|
|
277
|
+
* get: 'quantity > 0'
|
|
278
|
+
* })
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
function computed(options) {
|
|
282
|
+
return createComputedFieldBuilder({
|
|
283
|
+
type: 'computed',
|
|
284
|
+
returnType: options.type,
|
|
285
|
+
sourceFields: options.from,
|
|
286
|
+
expression: options.get,
|
|
287
|
+
required: false,
|
|
288
|
+
unique: false,
|
|
289
|
+
validations: [],
|
|
290
|
+
});
|
|
291
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ManifestIR } from '../manifest';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a Mermaid ERD diagram from the manifest IR.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateERDFromIR(manifest: ManifestIR): string;
|
|
6
|
+
/**
|
|
7
|
+
* Generate and save the ERD to a file.
|
|
8
|
+
*/
|
|
9
|
+
export declare function saveERDFromIR(manifest: ManifestIR, outputPath?: string): void;
|
|
10
|
+
//# sourceMappingURL=erd-ir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erd-ir.d.ts","sourceRoot":"","sources":["../../../src/generators/erd-ir.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAyC9D;AAiCD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EACpB,UAAU,GAAE,MAA2B,GACtC,IAAI,CAUN"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateERDFromIR = generateERDFromIR;
|
|
37
|
+
exports.saveERDFromIR = saveERDFromIR;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
/**
|
|
40
|
+
* Generate a Mermaid ERD diagram from the manifest IR.
|
|
41
|
+
*/
|
|
42
|
+
function generateERDFromIR(manifest) {
|
|
43
|
+
const lines = ['erDiagram'];
|
|
44
|
+
for (const entity of manifest.entities) {
|
|
45
|
+
// Entity block
|
|
46
|
+
lines.push(` ${entity.name} {`);
|
|
47
|
+
lines.push(` string id PK`);
|
|
48
|
+
// Fields
|
|
49
|
+
for (const [name, config] of Object.entries(entity.fields)) {
|
|
50
|
+
const type = mapFieldType(config.type);
|
|
51
|
+
const constraints = [];
|
|
52
|
+
if (config.required)
|
|
53
|
+
constraints.push('required');
|
|
54
|
+
if (config.unique)
|
|
55
|
+
constraints.push('unique');
|
|
56
|
+
const annotation = constraints.length > 0 ? `"${constraints.join(', ')}"` : '';
|
|
57
|
+
lines.push(` ${type} ${name} ${annotation}`.trimEnd());
|
|
58
|
+
}
|
|
59
|
+
// Add timestamps if enabled
|
|
60
|
+
if (entity.behaviors.timestamps) {
|
|
61
|
+
lines.push(` string createdAt`);
|
|
62
|
+
lines.push(` string updatedAt`);
|
|
63
|
+
}
|
|
64
|
+
// Add soft delete field if enabled
|
|
65
|
+
if (entity.behaviors.softDelete) {
|
|
66
|
+
lines.push(` string deletedAt`);
|
|
67
|
+
}
|
|
68
|
+
lines.push(` }`);
|
|
69
|
+
}
|
|
70
|
+
// Relations
|
|
71
|
+
for (const entity of manifest.entities) {
|
|
72
|
+
for (const [relName, rel] of Object.entries(entity.relations)) {
|
|
73
|
+
const symbol = getRelationSymbol(rel.type);
|
|
74
|
+
lines.push(` ${entity.name} ${symbol} ${rel.entity} : ${relName}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return lines.join('\n');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Map internal field types to Mermaid ERD types.
|
|
81
|
+
*/
|
|
82
|
+
function mapFieldType(type) {
|
|
83
|
+
switch (type) {
|
|
84
|
+
case 'text':
|
|
85
|
+
return 'string';
|
|
86
|
+
case 'number':
|
|
87
|
+
return 'int'; // Mermaid uses int/float, we default to int
|
|
88
|
+
case 'boolean':
|
|
89
|
+
return 'boolean';
|
|
90
|
+
case 'date':
|
|
91
|
+
return 'datetime';
|
|
92
|
+
default:
|
|
93
|
+
return 'string';
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function getRelationSymbol(type) {
|
|
97
|
+
switch (type) {
|
|
98
|
+
case 'hasOne':
|
|
99
|
+
return '||--||';
|
|
100
|
+
case 'hasMany':
|
|
101
|
+
return '||--o{';
|
|
102
|
+
case 'belongsToMany':
|
|
103
|
+
return '}o--o{';
|
|
104
|
+
default:
|
|
105
|
+
return '--';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Generate and save the ERD to a file.
|
|
110
|
+
*/
|
|
111
|
+
function saveERDFromIR(manifest, outputPath = 'generated/erd.md') {
|
|
112
|
+
const erd = generateERDFromIR(manifest);
|
|
113
|
+
const content = `# Entity Relationship Diagram\n\n\`\`\`mermaid\n${erd}\n\`\`\`\n`;
|
|
114
|
+
const dir = outputPath.substring(0, outputPath.lastIndexOf('/'));
|
|
115
|
+
if (!fs.existsSync(dir)) {
|
|
116
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
117
|
+
}
|
|
118
|
+
fs.writeFileSync(outputPath, content);
|
|
119
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archetype Engine - Main API
|
|
3
|
+
*
|
|
4
|
+
* This is the primary interface most users need.
|
|
5
|
+
* For advanced usage (templates, JSON parsing, AI tools), see namespace exports below.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export { defineEntity } from './entity';
|
|
10
|
+
export type { EntityDefinition, EntityBehaviors } from './entity';
|
|
11
|
+
export { defineManifest, defineConfig } from './manifest';
|
|
12
|
+
export type { ManifestDefinition } from './manifest';
|
|
13
|
+
export { text, number, boolean, date, enumField, computed } from './fields';
|
|
14
|
+
export type { FieldBuilder, ComputedOptions } from './fields';
|
|
15
|
+
export { hasOne, hasMany, belongsToMany } from './relations';
|
|
16
|
+
export type { RelationBuilder, RelationType } from './relations';
|
|
17
|
+
export { external } from './source';
|
|
18
|
+
export type { ExternalSourceConfig } from './source';
|
|
19
|
+
export type { ProtectedShorthand, ProtectedConfig, ProtectedOption, HooksConfig, } from './entity';
|
|
20
|
+
export type { ModeConfig, DatabaseConfig, AuthConfig, I18nConfig, ObservabilityConfig, TenancyConfig, DefaultBehaviors, } from './manifest';
|
|
21
|
+
export type { TextFieldBuilder, NumberFieldBuilder, BooleanFieldBuilder, DateFieldBuilder, EnumFieldBuilder, ComputedFieldBuilder, Validation, } from './fields';
|
|
22
|
+
export { resolveEndpoints } from './source';
|
|
23
|
+
export type { ExternalSourceOptions, DatabaseSourceConfig, SourceConfig, } from './source';
|
|
24
|
+
/**
|
|
25
|
+
* Internal IR (Intermediate Representation) types
|
|
26
|
+
* Use these when building tools that consume compiled entities/manifests
|
|
27
|
+
*/
|
|
28
|
+
export type { EntityIR, ProtectedIR, HooksIR } from './entity';
|
|
29
|
+
export type { ManifestIR } from './manifest';
|
|
30
|
+
export { normalizeMode } from './manifest';
|
|
31
|
+
/**
|
|
32
|
+
* Template system
|
|
33
|
+
* For building custom code generators
|
|
34
|
+
*/
|
|
35
|
+
export { getTemplate, listTemplates, hasTemplate, runTemplate, createContext } from './template';
|
|
36
|
+
export type { Template, Generator, GeneratedFile, TemplateConfig } from './template/types';
|
|
37
|
+
/**
|
|
38
|
+
* JSON parser & validation
|
|
39
|
+
* For AI agents and JSON-based configuration
|
|
40
|
+
*/
|
|
41
|
+
export * as json from './json';
|
|
42
|
+
export { validateManifest, ValidationCodes } from './validation';
|
|
43
|
+
export type { ValidationError, ValidationResult } from './validation';
|
|
44
|
+
/**
|
|
45
|
+
* AI tools
|
|
46
|
+
* For building AI-powered app builders
|
|
47
|
+
* Also available via: import { ... } from 'archetype-engine/ai'
|
|
48
|
+
*/
|
|
49
|
+
export { createManifestBuilder, aiTools } from './ai';
|
|
50
|
+
export type { ManifestBuilder, ToolResult } from './ai/types';
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAGjE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAGpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC3E,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG7D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC5D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAGhE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAOpD,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,WAAW,GACZ,MAAM,UAAU,CAAA;AAGjB,YAAY,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAGnB,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,GACX,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC3C,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,GACb,MAAM,UAAU,CAAA;AAMjB;;;GAGG;AACH,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C;;;GAGG;AACH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAChG,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE1F;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAChE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAErE;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACrD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Archetype Engine - Main API
|
|
4
|
+
*
|
|
5
|
+
* This is the primary interface most users need.
|
|
6
|
+
* For advanced usage (templates, JSON parsing, AI tools), see namespace exports below.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.aiTools = exports.createManifestBuilder = exports.ValidationCodes = exports.validateManifest = exports.json = exports.createContext = exports.runTemplate = exports.hasTemplate = exports.listTemplates = exports.getTemplate = exports.normalizeMode = exports.resolveEndpoints = exports.external = exports.belongsToMany = exports.hasMany = exports.hasOne = exports.computed = exports.enumField = exports.date = exports.boolean = exports.number = exports.text = exports.defineConfig = exports.defineManifest = exports.defineEntity = void 0;
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// PRIMARY API - Use these in archetype.config.ts
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// Entity definition
|
|
49
|
+
var entity_1 = require("./entity");
|
|
50
|
+
Object.defineProperty(exports, "defineEntity", { enumerable: true, get: function () { return entity_1.defineEntity; } });
|
|
51
|
+
// Manifest/Config definition
|
|
52
|
+
var manifest_1 = require("./manifest");
|
|
53
|
+
Object.defineProperty(exports, "defineManifest", { enumerable: true, get: function () { return manifest_1.defineManifest; } });
|
|
54
|
+
Object.defineProperty(exports, "defineConfig", { enumerable: true, get: function () { return manifest_1.defineConfig; } });
|
|
55
|
+
// Field builders
|
|
56
|
+
var fields_1 = require("./fields");
|
|
57
|
+
Object.defineProperty(exports, "text", { enumerable: true, get: function () { return fields_1.text; } });
|
|
58
|
+
Object.defineProperty(exports, "number", { enumerable: true, get: function () { return fields_1.number; } });
|
|
59
|
+
Object.defineProperty(exports, "boolean", { enumerable: true, get: function () { return fields_1.boolean; } });
|
|
60
|
+
Object.defineProperty(exports, "date", { enumerable: true, get: function () { return fields_1.date; } });
|
|
61
|
+
Object.defineProperty(exports, "enumField", { enumerable: true, get: function () { return fields_1.enumField; } });
|
|
62
|
+
Object.defineProperty(exports, "computed", { enumerable: true, get: function () { return fields_1.computed; } });
|
|
63
|
+
// Relation builders
|
|
64
|
+
var relations_1 = require("./relations");
|
|
65
|
+
Object.defineProperty(exports, "hasOne", { enumerable: true, get: function () { return relations_1.hasOne; } });
|
|
66
|
+
Object.defineProperty(exports, "hasMany", { enumerable: true, get: function () { return relations_1.hasMany; } });
|
|
67
|
+
Object.defineProperty(exports, "belongsToMany", { enumerable: true, get: function () { return relations_1.belongsToMany; } });
|
|
68
|
+
// External API source
|
|
69
|
+
var source_1 = require("./source");
|
|
70
|
+
Object.defineProperty(exports, "external", { enumerable: true, get: function () { return source_1.external; } });
|
|
71
|
+
// Source configuration
|
|
72
|
+
var source_2 = require("./source");
|
|
73
|
+
Object.defineProperty(exports, "resolveEndpoints", { enumerable: true, get: function () { return source_2.resolveEndpoints; } });
|
|
74
|
+
var manifest_2 = require("./manifest");
|
|
75
|
+
Object.defineProperty(exports, "normalizeMode", { enumerable: true, get: function () { return manifest_2.normalizeMode; } });
|
|
76
|
+
/**
|
|
77
|
+
* Template system
|
|
78
|
+
* For building custom code generators
|
|
79
|
+
*/
|
|
80
|
+
var template_1 = require("./template");
|
|
81
|
+
Object.defineProperty(exports, "getTemplate", { enumerable: true, get: function () { return template_1.getTemplate; } });
|
|
82
|
+
Object.defineProperty(exports, "listTemplates", { enumerable: true, get: function () { return template_1.listTemplates; } });
|
|
83
|
+
Object.defineProperty(exports, "hasTemplate", { enumerable: true, get: function () { return template_1.hasTemplate; } });
|
|
84
|
+
Object.defineProperty(exports, "runTemplate", { enumerable: true, get: function () { return template_1.runTemplate; } });
|
|
85
|
+
Object.defineProperty(exports, "createContext", { enumerable: true, get: function () { return template_1.createContext; } });
|
|
86
|
+
/**
|
|
87
|
+
* JSON parser & validation
|
|
88
|
+
* For AI agents and JSON-based configuration
|
|
89
|
+
*/
|
|
90
|
+
exports.json = __importStar(require("./json"));
|
|
91
|
+
var validation_1 = require("./validation");
|
|
92
|
+
Object.defineProperty(exports, "validateManifest", { enumerable: true, get: function () { return validation_1.validateManifest; } });
|
|
93
|
+
Object.defineProperty(exports, "ValidationCodes", { enumerable: true, get: function () { return validation_1.ValidationCodes; } });
|
|
94
|
+
/**
|
|
95
|
+
* AI tools
|
|
96
|
+
* For building AI-powered app builders
|
|
97
|
+
* Also available via: import { ... } from 'archetype-engine/ai'
|
|
98
|
+
*/
|
|
99
|
+
var ai_1 = require("./ai");
|
|
100
|
+
Object.defineProperty(exports, "createManifestBuilder", { enumerable: true, get: function () { return ai_1.createManifestBuilder; } });
|
|
101
|
+
Object.defineProperty(exports, "aiTools", { enumerable: true, get: function () { return ai_1.aiTools; } });
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type DatabaseType = 'sqlite' | 'postgres' | 'mysql';
|
|
2
|
+
export type ModeType = 'full' | 'headless';
|
|
3
|
+
export type AuthProvider = 'credentials' | 'google' | 'github' | 'discord';
|
|
4
|
+
export interface InitConfig {
|
|
5
|
+
template: string;
|
|
6
|
+
mode: ModeType;
|
|
7
|
+
database?: DatabaseType;
|
|
8
|
+
externalApiUrl?: string;
|
|
9
|
+
auth: boolean;
|
|
10
|
+
authProviders?: AuthProvider[];
|
|
11
|
+
i18n: string[] | null;
|
|
12
|
+
includeExamples: boolean;
|
|
13
|
+
entityTemplate?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const coreDependencies: string[];
|
|
16
|
+
export declare const coreDevDependencies: string[];
|
|
17
|
+
export declare const databaseDependencies: Record<DatabaseType, {
|
|
18
|
+
deps: string[];
|
|
19
|
+
devDeps: string[];
|
|
20
|
+
}>;
|
|
21
|
+
export declare const authDependencies: {
|
|
22
|
+
deps: string[];
|
|
23
|
+
devDeps: never[];
|
|
24
|
+
};
|
|
25
|
+
export declare const headlessDependencies: string[];
|
|
26
|
+
export declare function getDependencies(config: InitConfig): {
|
|
27
|
+
deps: string[];
|
|
28
|
+
devDeps: string[];
|
|
29
|
+
};
|
|
30
|
+
export declare function getRecommendedConfig(templateId: string, mode?: ModeType): InitConfig;
|
|
31
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../../src/init/dependencies.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAA;AAC1D,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;AAC1C,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE1E,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;IAC9B,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACrB,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAGD,eAAO,MAAM,gBAAgB,UAS5B,CAAA;AAGD,eAAO,MAAM,mBAAmB,UAE/B,CAAA;AAGD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAa5F,CAAA;AAGD,eAAO,MAAM,gBAAgB;;;CAG5B,CAAA;AAGD,eAAO,MAAM,oBAAoB,UAQhC,CAAA;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAiCzF;AAGD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,QAAiB,GAAG,UAAU,CAoB5F"}
|