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.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +241 -0
  3. package/dist/src/ai/adapters/anthropic.d.ts +31 -0
  4. package/dist/src/ai/adapters/anthropic.d.ts.map +1 -0
  5. package/dist/src/ai/adapters/anthropic.js +75 -0
  6. package/dist/src/ai/adapters/openai.d.ts +33 -0
  7. package/dist/src/ai/adapters/openai.d.ts.map +1 -0
  8. package/dist/src/ai/adapters/openai.js +120 -0
  9. package/dist/src/ai/adapters/vercel.d.ts +434 -0
  10. package/dist/src/ai/adapters/vercel.d.ts.map +1 -0
  11. package/dist/src/ai/adapters/vercel.js +162 -0
  12. package/dist/src/ai/index.d.ts +492 -0
  13. package/dist/src/ai/index.d.ts.map +1 -0
  14. package/dist/src/ai/index.js +71 -0
  15. package/dist/src/ai/state.d.ts +13 -0
  16. package/dist/src/ai/state.d.ts.map +1 -0
  17. package/dist/src/ai/state.js +215 -0
  18. package/dist/src/ai/tools.d.ts +13 -0
  19. package/dist/src/ai/tools.d.ts.map +1 -0
  20. package/dist/src/ai/tools.js +257 -0
  21. package/dist/src/ai/types.d.ts +196 -0
  22. package/dist/src/ai/types.d.ts.map +1 -0
  23. package/dist/src/ai/types.js +9 -0
  24. package/dist/src/cli.d.ts +3 -0
  25. package/dist/src/cli.d.ts.map +1 -0
  26. package/dist/src/cli.js +540 -0
  27. package/dist/src/core/utils.d.ts +27 -0
  28. package/dist/src/core/utils.d.ts.map +1 -0
  29. package/dist/src/core/utils.js +56 -0
  30. package/dist/src/entity.d.ts +165 -0
  31. package/dist/src/entity.d.ts.map +1 -0
  32. package/dist/src/entity.js +108 -0
  33. package/dist/src/fields.d.ts +207 -0
  34. package/dist/src/fields.d.ts.map +1 -0
  35. package/dist/src/fields.js +291 -0
  36. package/dist/src/generators/erd-ir.d.ts +10 -0
  37. package/dist/src/generators/erd-ir.d.ts.map +1 -0
  38. package/dist/src/generators/erd-ir.js +119 -0
  39. package/dist/src/index.d.ts +51 -0
  40. package/dist/src/index.d.ts.map +1 -0
  41. package/dist/src/index.js +101 -0
  42. package/dist/src/init/dependencies.d.ts +31 -0
  43. package/dist/src/init/dependencies.d.ts.map +1 -0
  44. package/dist/src/init/dependencies.js +101 -0
  45. package/dist/src/init/entity-templates.d.ts +42 -0
  46. package/dist/src/init/entity-templates.d.ts.map +1 -0
  47. package/dist/src/init/entity-templates.js +367 -0
  48. package/dist/src/init/index.d.ts +10 -0
  49. package/dist/src/init/index.d.ts.map +1 -0
  50. package/dist/src/init/index.js +250 -0
  51. package/dist/src/init/prompts.d.ts +11 -0
  52. package/dist/src/init/prompts.d.ts.map +1 -0
  53. package/dist/src/init/prompts.js +275 -0
  54. package/dist/src/init/templates.d.ts +24 -0
  55. package/dist/src/init/templates.d.ts.map +1 -0
  56. package/dist/src/init/templates.js +587 -0
  57. package/dist/src/json/index.d.ts +11 -0
  58. package/dist/src/json/index.d.ts.map +1 -0
  59. package/dist/src/json/index.js +26 -0
  60. package/dist/src/json/parser.d.ts +61 -0
  61. package/dist/src/json/parser.d.ts.map +1 -0
  62. package/dist/src/json/parser.js +309 -0
  63. package/dist/src/json/types.d.ts +275 -0
  64. package/dist/src/json/types.d.ts.map +1 -0
  65. package/dist/src/json/types.js +10 -0
  66. package/dist/src/manifest.d.ts +147 -0
  67. package/dist/src/manifest.d.ts.map +1 -0
  68. package/dist/src/manifest.js +104 -0
  69. package/dist/src/relations.d.ts +96 -0
  70. package/dist/src/relations.d.ts.map +1 -0
  71. package/dist/src/relations.js +108 -0
  72. package/dist/src/source.d.ts +93 -0
  73. package/dist/src/source.d.ts.map +1 -0
  74. package/dist/src/source.js +89 -0
  75. package/dist/src/template/context.d.ts +34 -0
  76. package/dist/src/template/context.d.ts.map +1 -0
  77. package/dist/src/template/context.js +31 -0
  78. package/dist/src/template/index.d.ts +6 -0
  79. package/dist/src/template/index.d.ts.map +1 -0
  80. package/dist/src/template/index.js +12 -0
  81. package/dist/src/template/registry.d.ts +18 -0
  82. package/dist/src/template/registry.d.ts.map +1 -0
  83. package/dist/src/template/registry.js +89 -0
  84. package/dist/src/template/runner.d.ts +9 -0
  85. package/dist/src/template/runner.d.ts.map +1 -0
  86. package/dist/src/template/runner.js +125 -0
  87. package/dist/src/template/types.d.ts +73 -0
  88. package/dist/src/template/types.d.ts.map +1 -0
  89. package/dist/src/template/types.js +3 -0
  90. package/dist/src/templates/nextjs-drizzle-trpc/generators/api.d.ts +22 -0
  91. package/dist/src/templates/nextjs-drizzle-trpc/generators/api.d.ts.map +1 -0
  92. package/dist/src/templates/nextjs-drizzle-trpc/generators/api.js +866 -0
  93. package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.d.ts +20 -0
  94. package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.d.ts.map +1 -0
  95. package/dist/src/templates/nextjs-drizzle-trpc/generators/auth.js +273 -0
  96. package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.d.ts +22 -0
  97. package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.d.ts.map +1 -0
  98. package/dist/src/templates/nextjs-drizzle-trpc/generators/crud-hooks.js +237 -0
  99. package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.d.ts +30 -0
  100. package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.d.ts.map +1 -0
  101. package/dist/src/templates/nextjs-drizzle-trpc/generators/hooks.js +345 -0
  102. package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.d.ts +25 -0
  103. package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.d.ts.map +1 -0
  104. package/dist/src/templates/nextjs-drizzle-trpc/generators/i18n.js +199 -0
  105. package/dist/src/templates/nextjs-drizzle-trpc/generators/index.d.ts +8 -0
  106. package/dist/src/templates/nextjs-drizzle-trpc/generators/index.d.ts.map +1 -0
  107. package/dist/src/templates/nextjs-drizzle-trpc/generators/index.js +18 -0
  108. package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.d.ts +22 -0
  109. package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.d.ts.map +1 -0
  110. package/dist/src/templates/nextjs-drizzle-trpc/generators/schema.js +270 -0
  111. package/dist/src/templates/nextjs-drizzle-trpc/generators/service.d.ts +23 -0
  112. package/dist/src/templates/nextjs-drizzle-trpc/generators/service.d.ts.map +1 -0
  113. package/dist/src/templates/nextjs-drizzle-trpc/generators/service.js +304 -0
  114. package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.d.ts +21 -0
  115. package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.d.ts.map +1 -0
  116. package/dist/src/templates/nextjs-drizzle-trpc/generators/validation.js +248 -0
  117. package/dist/src/templates/nextjs-drizzle-trpc/index.d.ts +30 -0
  118. package/dist/src/templates/nextjs-drizzle-trpc/index.d.ts.map +1 -0
  119. package/dist/src/templates/nextjs-drizzle-trpc/index.js +71 -0
  120. package/dist/src/validation/index.d.ts +71 -0
  121. package/dist/src/validation/index.d.ts.map +1 -0
  122. package/dist/src/validation/index.js +314 -0
  123. 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"}