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,101 @@
1
+ "use strict";
2
+ // Configuration types and dependencies for archetype init
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.headlessDependencies = exports.authDependencies = exports.databaseDependencies = exports.coreDevDependencies = exports.coreDependencies = void 0;
5
+ exports.getDependencies = getDependencies;
6
+ exports.getRecommendedConfig = getRecommendedConfig;
7
+ // Core dependencies (always installed)
8
+ exports.coreDependencies = [
9
+ '@trpc/server',
10
+ '@trpc/client',
11
+ '@trpc/react-query',
12
+ '@tanstack/react-query',
13
+ 'drizzle-orm',
14
+ 'zod',
15
+ 'react-hook-form',
16
+ '@hookform/resolvers',
17
+ ];
18
+ // Dev dependencies (always installed)
19
+ exports.coreDevDependencies = [
20
+ 'drizzle-kit',
21
+ ];
22
+ // Database-specific dependencies
23
+ exports.databaseDependencies = {
24
+ sqlite: {
25
+ deps: ['better-sqlite3'],
26
+ devDeps: ['@types/better-sqlite3'],
27
+ },
28
+ postgres: {
29
+ deps: ['postgres'],
30
+ devDeps: [],
31
+ },
32
+ mysql: {
33
+ deps: ['mysql2'],
34
+ devDeps: [],
35
+ },
36
+ };
37
+ // Auth dependencies (next-auth v5)
38
+ exports.authDependencies = {
39
+ deps: ['next-auth@beta', '@auth/drizzle-adapter'],
40
+ devDeps: [],
41
+ };
42
+ // Headless mode dependencies (no DB, external APIs)
43
+ exports.headlessDependencies = [
44
+ '@trpc/server',
45
+ '@trpc/client',
46
+ '@trpc/react-query',
47
+ '@tanstack/react-query',
48
+ 'zod',
49
+ 'react-hook-form',
50
+ '@hookform/resolvers',
51
+ ];
52
+ // Get all dependencies for a given config
53
+ function getDependencies(config) {
54
+ // Headless mode - no database deps
55
+ if (config.mode === 'headless') {
56
+ const deps = [...exports.headlessDependencies];
57
+ const devDeps = [];
58
+ // Add auth deps if enabled
59
+ if (config.auth) {
60
+ deps.push(...exports.authDependencies.deps);
61
+ devDeps.push(...exports.authDependencies.devDeps);
62
+ }
63
+ return { deps, devDeps };
64
+ }
65
+ // Full mode - include database deps
66
+ const deps = [...exports.coreDependencies];
67
+ const devDeps = [...exports.coreDevDependencies];
68
+ // Add database-specific deps
69
+ if (config.database) {
70
+ const dbDeps = exports.databaseDependencies[config.database];
71
+ deps.push(...dbDeps.deps);
72
+ devDeps.push(...dbDeps.devDeps);
73
+ }
74
+ // Add auth deps if enabled
75
+ if (config.auth) {
76
+ deps.push(...exports.authDependencies.deps);
77
+ devDeps.push(...exports.authDependencies.devDeps);
78
+ }
79
+ return { deps, devDeps };
80
+ }
81
+ // Get recommended config - template comes from registry
82
+ function getRecommendedConfig(templateId, mode = 'full') {
83
+ if (mode === 'headless') {
84
+ return {
85
+ template: templateId,
86
+ mode: 'headless',
87
+ externalApiUrl: 'env:API_URL',
88
+ auth: false,
89
+ i18n: null,
90
+ includeExamples: true,
91
+ };
92
+ }
93
+ return {
94
+ template: templateId,
95
+ mode: 'full',
96
+ database: 'sqlite',
97
+ auth: false,
98
+ i18n: null,
99
+ includeExamples: true,
100
+ };
101
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pre-built entity templates for common use cases
3
+ * Users can copy-paste these to get started quickly
4
+ */
5
+ export interface EntityTemplate {
6
+ id: string;
7
+ name: string;
8
+ description: string;
9
+ entities: Array<{
10
+ filename: string;
11
+ code: string;
12
+ }>;
13
+ }
14
+ /**
15
+ * SaaS Multi-Tenant Template
16
+ * Perfect for: Team collaboration apps, project management, SaaS products
17
+ */
18
+ export declare const saasTemplate: EntityTemplate;
19
+ /**
20
+ * E-commerce Template
21
+ * Perfect for: Online stores, marketplaces, product catalogs
22
+ */
23
+ export declare const ecommerceTemplate: EntityTemplate;
24
+ /**
25
+ * Blog/CMS Template
26
+ * Perfect for: Blogs, news sites, content platforms
27
+ */
28
+ export declare const blogTemplate: EntityTemplate;
29
+ /**
30
+ * Task Management Template
31
+ * Perfect for: Todo apps, project management, kanban boards
32
+ */
33
+ export declare const taskTemplate: EntityTemplate;
34
+ /**
35
+ * All available templates
36
+ */
37
+ export declare const entityTemplates: EntityTemplate[];
38
+ /**
39
+ * Get template by ID
40
+ */
41
+ export declare function getEntityTemplate(id: string): EntityTemplate | undefined;
42
+ //# sourceMappingURL=entity-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-templates.d.ts","sourceRoot":"","sources":["../../../src/init/entity-templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACpD;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,cAuE1B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAoG/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,cA2E1B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,cA8E1B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,EAK3C,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAExE"}
@@ -0,0 +1,367 @@
1
+ "use strict";
2
+ /**
3
+ * Pre-built entity templates for common use cases
4
+ * Users can copy-paste these to get started quickly
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.entityTemplates = exports.taskTemplate = exports.blogTemplate = exports.ecommerceTemplate = exports.saasTemplate = void 0;
8
+ exports.getEntityTemplate = getEntityTemplate;
9
+ /**
10
+ * SaaS Multi-Tenant Template
11
+ * Perfect for: Team collaboration apps, project management, SaaS products
12
+ */
13
+ exports.saasTemplate = {
14
+ id: 'saas',
15
+ name: 'SaaS Multi-Tenant',
16
+ description: 'Workspace, Team, Member entities with role-based permissions',
17
+ entities: [
18
+ {
19
+ filename: 'workspace.ts',
20
+ code: `import { defineEntity, text, enumField, hasMany } from 'archetype-engine'
21
+
22
+ export const Workspace = defineEntity('Workspace', {
23
+ fields: {
24
+ name: text().required().min(2).max(100).label('Workspace Name'),
25
+ slug: text().required().unique().regex(/^[a-z0-9-]+$/).label('URL Slug'),
26
+ plan: enumField(['free', 'pro', 'enterprise'] as const).default('free').label('Plan'),
27
+ status: enumField(['active', 'suspended', 'cancelled'] as const).default('active'),
28
+ },
29
+ relations: {
30
+ members: hasMany('Member'),
31
+ teams: hasMany('Team'),
32
+ },
33
+ behaviors: {
34
+ timestamps: true,
35
+ softDelete: true,
36
+ },
37
+ protected: 'all',
38
+ })
39
+ `
40
+ },
41
+ {
42
+ filename: 'team.ts',
43
+ code: `import { defineEntity, text, hasOne, hasMany } from 'archetype-engine'
44
+
45
+ export const Team = defineEntity('Team', {
46
+ fields: {
47
+ name: text().required().min(2).max(100).label('Team Name'),
48
+ description: text().optional().max(500).label('Description'),
49
+ },
50
+ relations: {
51
+ workspace: hasOne('Workspace'),
52
+ members: hasMany('Member'),
53
+ },
54
+ behaviors: {
55
+ timestamps: true,
56
+ },
57
+ protected: 'write',
58
+ })
59
+ `
60
+ },
61
+ {
62
+ filename: 'member.ts',
63
+ code: `import { defineEntity, text, enumField, hasOne } from 'archetype-engine'
64
+
65
+ export const Member = defineEntity('Member', {
66
+ fields: {
67
+ email: text().required().email().label('Email'),
68
+ name: text().required().min(2).max(100).label('Name'),
69
+ role: enumField(['owner', 'admin', 'member', 'guest'] as const).default('member').label('Role'),
70
+ status: enumField(['active', 'invited', 'suspended'] as const).default('invited'),
71
+ },
72
+ relations: {
73
+ workspace: hasOne('Workspace'),
74
+ team: hasOne('Team'),
75
+ },
76
+ behaviors: {
77
+ timestamps: true,
78
+ },
79
+ protected: 'all',
80
+ })
81
+ `
82
+ },
83
+ ],
84
+ };
85
+ /**
86
+ * E-commerce Template
87
+ * Perfect for: Online stores, marketplaces, product catalogs
88
+ */
89
+ exports.ecommerceTemplate = {
90
+ id: 'ecommerce',
91
+ name: 'E-commerce',
92
+ description: 'Product, Order, Customer entities with inventory tracking',
93
+ entities: [
94
+ {
95
+ filename: 'product.ts',
96
+ code: `import { defineEntity, text, number, boolean, hasMany } from 'archetype-engine'
97
+
98
+ export const Product = defineEntity('Product', {
99
+ fields: {
100
+ sku: text().required().unique().label('SKU'),
101
+ name: text().required().min(1).max(200).label('Product Name'),
102
+ description: text().optional().max(2000).label('Description'),
103
+ price: number().required().positive().label('Price'),
104
+ compareAtPrice: number().optional().positive().label('Compare at Price'),
105
+ stock: number().required().integer().min(0).default(0).label('Stock'),
106
+ isActive: boolean().default(true).label('Active'),
107
+ isFeatured: boolean().default(false).label('Featured'),
108
+ },
109
+ relations: {
110
+ orderItems: hasMany('OrderItem'),
111
+ },
112
+ behaviors: {
113
+ timestamps: true,
114
+ softDelete: true,
115
+ },
116
+ protected: 'write',
117
+ })
118
+ `
119
+ },
120
+ {
121
+ filename: 'customer.ts',
122
+ code: `import { defineEntity, text, hasMany } from 'archetype-engine'
123
+
124
+ export const Customer = defineEntity('Customer', {
125
+ fields: {
126
+ email: text().required().email().unique().label('Email'),
127
+ firstName: text().required().min(1).max(100).label('First Name'),
128
+ lastName: text().required().min(1).max(100).label('Last Name'),
129
+ phone: text().optional().label('Phone'),
130
+ },
131
+ relations: {
132
+ orders: hasMany('Order'),
133
+ },
134
+ behaviors: {
135
+ timestamps: true,
136
+ },
137
+ protected: 'all',
138
+ })
139
+ `
140
+ },
141
+ {
142
+ filename: 'order.ts',
143
+ code: `import { defineEntity, text, number, enumField, hasOne, hasMany } from 'archetype-engine'
144
+
145
+ export const Order = defineEntity('Order', {
146
+ fields: {
147
+ orderNumber: text().required().unique().label('Order Number'),
148
+ status: enumField(['pending', 'paid', 'processing', 'shipped', 'delivered', 'cancelled'] as const)
149
+ .default('pending')
150
+ .label('Status'),
151
+ subtotal: number().required().positive().label('Subtotal'),
152
+ tax: number().required().min(0).default(0).label('Tax'),
153
+ shipping: number().required().min(0).default(0).label('Shipping'),
154
+ total: number().required().positive().label('Total'),
155
+ },
156
+ relations: {
157
+ customer: hasOne('Customer'),
158
+ items: hasMany('OrderItem'),
159
+ },
160
+ behaviors: {
161
+ timestamps: true,
162
+ },
163
+ protected: 'all',
164
+ })
165
+ `
166
+ },
167
+ {
168
+ filename: 'order-item.ts',
169
+ code: `import { defineEntity, number, hasOne } from 'archetype-engine'
170
+
171
+ export const OrderItem = defineEntity('OrderItem', {
172
+ fields: {
173
+ quantity: number().required().integer().min(1).label('Quantity'),
174
+ unitPrice: number().required().positive().label('Unit Price'),
175
+ total: number().required().positive().label('Total'),
176
+ },
177
+ relations: {
178
+ order: hasOne('Order'),
179
+ product: hasOne('Product'),
180
+ },
181
+ behaviors: {
182
+ timestamps: true,
183
+ },
184
+ protected: 'all',
185
+ })
186
+ `
187
+ },
188
+ ],
189
+ };
190
+ /**
191
+ * Blog/CMS Template
192
+ * Perfect for: Blogs, news sites, content platforms
193
+ */
194
+ exports.blogTemplate = {
195
+ id: 'blog',
196
+ name: 'Blog/CMS',
197
+ description: 'Post, Author, Comment entities for content management',
198
+ entities: [
199
+ {
200
+ filename: 'author.ts',
201
+ code: `import { defineEntity, text, hasMany } from 'archetype-engine'
202
+
203
+ export const Author = defineEntity('Author', {
204
+ fields: {
205
+ email: text().required().email().unique().label('Email'),
206
+ name: text().required().min(2).max(100).label('Name'),
207
+ bio: text().optional().max(500).label('Bio'),
208
+ avatar: text().optional().url().label('Avatar URL'),
209
+ },
210
+ relations: {
211
+ posts: hasMany('Post'),
212
+ },
213
+ behaviors: {
214
+ timestamps: true,
215
+ },
216
+ protected: 'write',
217
+ })
218
+ `
219
+ },
220
+ {
221
+ filename: 'post.ts',
222
+ code: `import { defineEntity, text, boolean, date, enumField, hasOne, hasMany } from 'archetype-engine'
223
+
224
+ export const Post = defineEntity('Post', {
225
+ fields: {
226
+ title: text().required().min(1).max(200).label('Title'),
227
+ slug: text().required().unique().regex(/^[a-z0-9-]+$/).label('URL Slug'),
228
+ excerpt: text().optional().max(500).label('Excerpt'),
229
+ content: text().required().label('Content'),
230
+ status: enumField(['draft', 'published', 'archived'] as const).default('draft').label('Status'),
231
+ publishedAt: date().optional().label('Published Date'),
232
+ featured: boolean().default(false).label('Featured'),
233
+ },
234
+ relations: {
235
+ author: hasOne('Author'),
236
+ comments: hasMany('Comment'),
237
+ },
238
+ behaviors: {
239
+ timestamps: true,
240
+ softDelete: true,
241
+ },
242
+ protected: 'write',
243
+ })
244
+ `
245
+ },
246
+ {
247
+ filename: 'comment.ts',
248
+ code: `import { defineEntity, text, boolean, hasOne } from 'archetype-engine'
249
+
250
+ export const Comment = defineEntity('Comment', {
251
+ fields: {
252
+ content: text().required().min(1).max(2000).label('Comment'),
253
+ authorName: text().required().min(2).max(100).label('Name'),
254
+ authorEmail: text().required().email().label('Email'),
255
+ isApproved: boolean().default(false).label('Approved'),
256
+ },
257
+ relations: {
258
+ post: hasOne('Post'),
259
+ },
260
+ behaviors: {
261
+ timestamps: true,
262
+ softDelete: true,
263
+ },
264
+ protected: 'write',
265
+ })
266
+ `
267
+ },
268
+ ],
269
+ };
270
+ /**
271
+ * Task Management Template
272
+ * Perfect for: Todo apps, project management, kanban boards
273
+ */
274
+ exports.taskTemplate = {
275
+ id: 'task',
276
+ name: 'Task Management',
277
+ description: 'Project, Task, Label entities for productivity apps',
278
+ entities: [
279
+ {
280
+ filename: 'project.ts',
281
+ code: `import { defineEntity, text, enumField, hasMany } from 'archetype-engine'
282
+
283
+ export const Project = defineEntity('Project', {
284
+ fields: {
285
+ name: text().required().min(2).max(100).label('Project Name'),
286
+ description: text().optional().max(500).label('Description'),
287
+ status: enumField(['active', 'on-hold', 'completed', 'archived'] as const)
288
+ .default('active')
289
+ .label('Status'),
290
+ color: text().optional().regex(/^#[0-9A-Fa-f]{6}$/).label('Color'),
291
+ },
292
+ relations: {
293
+ tasks: hasMany('Task'),
294
+ },
295
+ behaviors: {
296
+ timestamps: true,
297
+ softDelete: true,
298
+ },
299
+ protected: 'write',
300
+ })
301
+ `
302
+ },
303
+ {
304
+ filename: 'task.ts',
305
+ code: `import { defineEntity, text, boolean, date, enumField, hasOne, belongsToMany } from 'archetype-engine'
306
+
307
+ export const Task = defineEntity('Task', {
308
+ fields: {
309
+ title: text().required().min(1).max(200).label('Title'),
310
+ description: text().optional().max(2000).label('Description'),
311
+ status: enumField(['todo', 'in-progress', 'review', 'done'] as const)
312
+ .default('todo')
313
+ .label('Status'),
314
+ priority: enumField(['low', 'medium', 'high', 'urgent'] as const)
315
+ .default('medium')
316
+ .label('Priority'),
317
+ completed: boolean().default(false).label('Completed'),
318
+ dueDate: date().optional().label('Due Date'),
319
+ },
320
+ relations: {
321
+ project: hasOne('Project'),
322
+ labels: belongsToMany('Label'),
323
+ },
324
+ behaviors: {
325
+ timestamps: true,
326
+ softDelete: true,
327
+ },
328
+ protected: 'write',
329
+ })
330
+ `
331
+ },
332
+ {
333
+ filename: 'label.ts',
334
+ code: `import { defineEntity, text, belongsToMany } from 'archetype-engine'
335
+
336
+ export const Label = defineEntity('Label', {
337
+ fields: {
338
+ name: text().required().min(1).max(50).label('Label Name'),
339
+ color: text().optional().regex(/^#[0-9A-Fa-f]{6}$/).label('Color'),
340
+ },
341
+ relations: {
342
+ tasks: belongsToMany('Task'),
343
+ },
344
+ behaviors: {
345
+ timestamps: true,
346
+ },
347
+ protected: 'write',
348
+ })
349
+ `
350
+ },
351
+ ],
352
+ };
353
+ /**
354
+ * All available templates
355
+ */
356
+ exports.entityTemplates = [
357
+ exports.saasTemplate,
358
+ exports.ecommerceTemplate,
359
+ exports.blogTemplate,
360
+ exports.taskTemplate,
361
+ ];
362
+ /**
363
+ * Get template by ID
364
+ */
365
+ function getEntityTemplate(id) {
366
+ return exports.entityTemplates.find(t => t.id === id);
367
+ }
@@ -0,0 +1,10 @@
1
+ export interface InitOptions {
2
+ yes?: boolean;
3
+ headless?: boolean;
4
+ template?: string;
5
+ directory?: string;
6
+ }
7
+ export declare function init(options?: InitOptions): Promise<void>;
8
+ export { getRecommendedConfig } from './dependencies';
9
+ export type { InitConfig } from './dependencies';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/init/index.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DnE;AAwLD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA"}