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,309 @@
1
+ "use strict";
2
+ /**
3
+ * JSON Parser - converts JSON manifest to IR
4
+ *
5
+ * @module json/parser
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.parseFieldJSON = parseFieldJSON;
42
+ exports.parseRelationJSON = parseRelationJSON;
43
+ exports.parseExternalSourceJSON = parseExternalSourceJSON;
44
+ exports.parseProtectedJSON = parseProtectedJSON;
45
+ exports.parseHooksJSON = parseHooksJSON;
46
+ exports.parseEntityJSON = parseEntityJSON;
47
+ exports.parseManifestJSON = parseManifestJSON;
48
+ exports.loadManifestFromJSONFile = loadManifestFromJSONFile;
49
+ const manifest_1 = require("../manifest");
50
+ /**
51
+ * Parse a JSON field definition to FieldConfig
52
+ */
53
+ function parseFieldJSON(field) {
54
+ const validations = [];
55
+ // Text validations
56
+ if (field.min !== undefined) {
57
+ // For text fields, min/max are length validations
58
+ // For number fields, they are value validations
59
+ if (field.type === 'text') {
60
+ validations.push({ type: 'minLength', value: field.min });
61
+ }
62
+ else if (field.type === 'number') {
63
+ validations.push({ type: 'min', value: field.min });
64
+ }
65
+ }
66
+ if (field.max !== undefined) {
67
+ if (field.type === 'text') {
68
+ validations.push({ type: 'maxLength', value: field.max });
69
+ }
70
+ else if (field.type === 'number') {
71
+ validations.push({ type: 'max', value: field.max });
72
+ }
73
+ }
74
+ if (field.email)
75
+ validations.push({ type: 'email' });
76
+ if (field.url)
77
+ validations.push({ type: 'url' });
78
+ if (field.regex)
79
+ validations.push({ type: 'regex', value: field.regex });
80
+ if (field.oneOf)
81
+ validations.push({ type: 'oneOf', value: field.oneOf });
82
+ if (field.trim)
83
+ validations.push({ type: 'trim' });
84
+ if (field.lowercase)
85
+ validations.push({ type: 'lowercase' });
86
+ if (field.uppercase)
87
+ validations.push({ type: 'uppercase' });
88
+ // Number validations
89
+ if (field.integer)
90
+ validations.push({ type: 'integer' });
91
+ if (field.positive)
92
+ validations.push({ type: 'positive' });
93
+ // Determine required status
94
+ // Default is true (required) unless optional is true or required is explicitly false
95
+ const required = field.optional === true ? false : (field.required !== false);
96
+ return {
97
+ type: field.type,
98
+ required,
99
+ unique: field.unique || false,
100
+ default: field.default,
101
+ label: field.label,
102
+ validations,
103
+ };
104
+ }
105
+ /**
106
+ * Parse a JSON relation definition to RelationConfig
107
+ */
108
+ function parseRelationJSON(relation) {
109
+ return {
110
+ type: relation.type,
111
+ entity: relation.entity,
112
+ field: relation.field,
113
+ };
114
+ }
115
+ /**
116
+ * Parse a JSON external source to ExternalSourceConfig
117
+ */
118
+ function parseExternalSourceJSON(source) {
119
+ let auth;
120
+ if (source.auth) {
121
+ auth = {
122
+ type: source.auth.type,
123
+ header: source.auth.header || (source.auth.type === 'api-key' ? 'X-API-Key' : 'Authorization'),
124
+ };
125
+ }
126
+ return {
127
+ type: 'external',
128
+ baseUrl: source.baseUrl,
129
+ pathPrefix: source.pathPrefix || '',
130
+ resourceName: source.resourceName,
131
+ endpoints: {
132
+ list: source.override?.list || '',
133
+ get: source.override?.get || '',
134
+ create: source.override?.create || '',
135
+ update: source.override?.update || '',
136
+ delete: source.override?.delete || '',
137
+ },
138
+ auth,
139
+ };
140
+ }
141
+ /**
142
+ * Parse a JSON protected option to ProtectedIR
143
+ */
144
+ function parseProtectedJSON(option) {
145
+ const allPublic = { list: false, get: false, create: false, update: false, remove: false };
146
+ const allProtected = { list: true, get: true, create: true, update: true, remove: true };
147
+ const writeProtected = { list: false, get: false, create: true, update: true, remove: true };
148
+ if (option === undefined || option === false)
149
+ return allPublic;
150
+ if (option === true || option === 'all')
151
+ return allProtected;
152
+ if (option === 'write')
153
+ return writeProtected;
154
+ // Granular config - merge with allPublic defaults
155
+ return { ...allPublic, ...option };
156
+ }
157
+ /**
158
+ * Parse a JSON hooks option to HooksIR
159
+ */
160
+ function parseHooksJSON(option) {
161
+ const noHooks = {
162
+ beforeCreate: false,
163
+ afterCreate: false,
164
+ beforeUpdate: false,
165
+ afterUpdate: false,
166
+ beforeRemove: false,
167
+ afterRemove: false,
168
+ };
169
+ const allHooks = {
170
+ beforeCreate: true,
171
+ afterCreate: true,
172
+ beforeUpdate: true,
173
+ afterUpdate: true,
174
+ beforeRemove: true,
175
+ afterRemove: true,
176
+ };
177
+ if (option === undefined || option === false)
178
+ return noHooks;
179
+ if (option === true)
180
+ return allHooks;
181
+ // Granular config - merge with noHooks defaults
182
+ return { ...noHooks, ...option };
183
+ }
184
+ /**
185
+ * Parse a JSON entity definition to EntityIR
186
+ */
187
+ function parseEntityJSON(entity) {
188
+ // Parse fields
189
+ const fields = {};
190
+ for (const [fieldName, field] of Object.entries(entity.fields)) {
191
+ fields[fieldName] = parseFieldJSON(field);
192
+ }
193
+ // Parse relations
194
+ const relations = {};
195
+ if (entity.relations) {
196
+ for (const [relationName, relation] of Object.entries(entity.relations)) {
197
+ relations[relationName] = parseRelationJSON(relation);
198
+ }
199
+ }
200
+ // Parse behaviors with defaults
201
+ const behaviors = {
202
+ timestamps: entity.behaviors?.timestamps !== false, // default true
203
+ softDelete: entity.behaviors?.softDelete || false,
204
+ audit: entity.behaviors?.audit || false,
205
+ };
206
+ // Parse source if present
207
+ let source;
208
+ if (entity.source) {
209
+ source = parseExternalSourceJSON(entity.source);
210
+ }
211
+ return {
212
+ name: entity.name,
213
+ fields,
214
+ relations,
215
+ behaviors,
216
+ auth: entity.auth || false,
217
+ protected: parseProtectedJSON(entity.protected),
218
+ source,
219
+ hooks: parseHooksJSON(entity.hooks),
220
+ };
221
+ }
222
+ /**
223
+ * Parse a JSON manifest to ManifestIR
224
+ *
225
+ * @param json - JSON manifest object or string
226
+ * @returns Compiled ManifestIR
227
+ * @throws Error if JSON is invalid or validation fails
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * const manifest = parseManifestJSON({
232
+ * entities: [
233
+ * { name: 'User', fields: { email: { type: 'text', email: true } } }
234
+ * ],
235
+ * database: { type: 'sqlite', file: './app.db' }
236
+ * })
237
+ * ```
238
+ */
239
+ function parseManifestJSON(json) {
240
+ // Parse string if needed
241
+ const manifest = typeof json === 'string' ? JSON.parse(json) : json;
242
+ // Normalize mode
243
+ const mode = (0, manifest_1.normalizeMode)(manifest.mode);
244
+ // Validate: full mode requires database
245
+ if (mode.type === 'full' && !manifest.database) {
246
+ throw new Error(`Mode 'full' requires database configuration.\n` +
247
+ `Fix: Add database config or use mode: 'headless' for frontend-only projects.`);
248
+ }
249
+ // Parse entities
250
+ const entities = manifest.entities.map(parseEntityJSON);
251
+ // Parse global source if present
252
+ let source;
253
+ if (manifest.source) {
254
+ source = parseExternalSourceJSON(manifest.source);
255
+ }
256
+ return {
257
+ template: manifest.template,
258
+ mode,
259
+ entities,
260
+ source,
261
+ database: manifest.database,
262
+ auth: {
263
+ enabled: manifest.auth?.enabled || false,
264
+ adapter: manifest.auth?.adapter || 'drizzle',
265
+ providers: manifest.auth?.providers || [],
266
+ sessionStrategy: manifest.auth?.sessionStrategy || 'jwt',
267
+ },
268
+ i18n: {
269
+ languages: manifest.i18n?.languages || ['en'],
270
+ defaultLanguage: manifest.i18n?.defaultLanguage || 'en',
271
+ outputDir: manifest.i18n?.outputDir || './messages',
272
+ },
273
+ observability: {
274
+ logging: {
275
+ enabled: manifest.observability?.logging?.enabled || false,
276
+ level: manifest.observability?.logging?.level || 'info',
277
+ format: manifest.observability?.logging?.format || 'json',
278
+ },
279
+ telemetry: {
280
+ enabled: manifest.observability?.telemetry?.enabled || false,
281
+ events: manifest.observability?.telemetry?.events || [],
282
+ },
283
+ audit: {
284
+ enabled: manifest.observability?.audit?.enabled || false,
285
+ entity: manifest.observability?.audit?.entity,
286
+ },
287
+ },
288
+ tenancy: {
289
+ enabled: manifest.tenancy?.enabled || false,
290
+ field: manifest.tenancy?.field || 'organizationId',
291
+ },
292
+ defaults: {
293
+ timestamps: manifest.defaults?.timestamps !== false, // default true
294
+ softDelete: manifest.defaults?.softDelete || false,
295
+ audit: manifest.defaults?.audit || false,
296
+ },
297
+ };
298
+ }
299
+ /**
300
+ * Load manifest from a JSON file
301
+ *
302
+ * @param filePath - Path to JSON file
303
+ * @returns Compiled ManifestIR
304
+ */
305
+ async function loadManifestFromJSONFile(filePath) {
306
+ const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
307
+ const content = await fs.readFile(filePath, 'utf-8');
308
+ return parseManifestJSON(content);
309
+ }
@@ -0,0 +1,275 @@
1
+ /**
2
+ * JSON Schema Types for AI Agent Input
3
+ *
4
+ * These types define the JSON format that AI agents can use to generate
5
+ * archetype manifests without writing TypeScript code.
6
+ *
7
+ * @module json/types
8
+ */
9
+ /**
10
+ * JSON representation of a field definition
11
+ */
12
+ export interface FieldJSON {
13
+ /** Field type */
14
+ type: 'text' | 'number' | 'boolean' | 'date';
15
+ /** Mark field as required (default: true) */
16
+ required?: boolean;
17
+ /** Mark field as optional (shorthand for required: false) */
18
+ optional?: boolean;
19
+ /** Add unique constraint */
20
+ unique?: boolean;
21
+ /** Default value for the field */
22
+ default?: unknown;
23
+ /** Display label for the field */
24
+ label?: string;
25
+ /** Minimum length for text fields */
26
+ min?: number;
27
+ /** Maximum length for text fields */
28
+ max?: number;
29
+ /** Validate as email format */
30
+ email?: boolean;
31
+ /** Validate as URL format */
32
+ url?: boolean;
33
+ /** Validate against regex pattern (as string) */
34
+ regex?: string;
35
+ /** Enum: value must be one of these */
36
+ oneOf?: string[];
37
+ /** Trim whitespace */
38
+ trim?: boolean;
39
+ /** Convert to lowercase */
40
+ lowercase?: boolean;
41
+ /** Convert to uppercase */
42
+ uppercase?: boolean;
43
+ /** Must be integer */
44
+ integer?: boolean;
45
+ /** Must be positive */
46
+ positive?: boolean;
47
+ }
48
+ /**
49
+ * JSON representation of a relation definition
50
+ */
51
+ export interface RelationJSON {
52
+ /** Relation type */
53
+ type: 'hasOne' | 'hasMany' | 'belongsToMany';
54
+ /** Target entity name */
55
+ entity: string;
56
+ /** Custom foreign key field name */
57
+ field?: string;
58
+ }
59
+ /**
60
+ * Entity behaviors configuration
61
+ */
62
+ export interface BehaviorsJSON {
63
+ /** Add createdAt and updatedAt timestamps (default: true) */
64
+ timestamps?: boolean;
65
+ /** Use soft delete instead of hard delete (default: false) */
66
+ softDelete?: boolean;
67
+ /** Enable audit logging (default: false) */
68
+ audit?: boolean;
69
+ }
70
+ /**
71
+ * Granular protection configuration per CRUD operation
72
+ */
73
+ export interface ProtectedConfigJSON {
74
+ list?: boolean;
75
+ get?: boolean;
76
+ create?: boolean;
77
+ update?: boolean;
78
+ remove?: boolean;
79
+ }
80
+ /**
81
+ * Protection option - shorthand or granular
82
+ * - false: all public (default)
83
+ * - true or 'all': all operations require auth
84
+ * - 'write': list/get public, create/update/remove protected
85
+ * - object: granular control per operation
86
+ */
87
+ export type ProtectedJSON = boolean | 'write' | 'all' | ProtectedConfigJSON;
88
+ /**
89
+ * External source auth configuration
90
+ */
91
+ export interface ExternalAuthJSON {
92
+ type: 'bearer' | 'api-key';
93
+ /** Custom header name (default: 'Authorization' for bearer, 'X-API-Key' for api-key) */
94
+ header?: string;
95
+ }
96
+ /**
97
+ * External source endpoint overrides
98
+ */
99
+ export interface EndpointOverrideJSON {
100
+ /** e.g., 'GET /catalog/search' */
101
+ list?: string;
102
+ /** e.g., 'GET /items/:sku' */
103
+ get?: string;
104
+ /** e.g., 'POST /items' */
105
+ create?: string;
106
+ /** e.g., 'PUT /items/:id' */
107
+ update?: string;
108
+ /** e.g., 'DELETE /items/:id' */
109
+ delete?: string;
110
+ }
111
+ /**
112
+ * External API source configuration
113
+ */
114
+ export interface ExternalSourceJSON {
115
+ /** Base URL - supports 'env:VARIABLE_NAME' syntax */
116
+ baseUrl: string;
117
+ /** Path prefix like '/v1' or '/api' */
118
+ pathPrefix?: string;
119
+ /** Override auto-pluralization (e.g., 'product' instead of 'products') */
120
+ resourceName?: string;
121
+ /** Override specific endpoints */
122
+ override?: EndpointOverrideJSON;
123
+ /** Auth configuration */
124
+ auth?: ExternalAuthJSON;
125
+ }
126
+ /**
127
+ * JSON representation of an entity definition
128
+ */
129
+ export interface EntityJSON {
130
+ /** Entity name in PascalCase */
131
+ name: string;
132
+ /** Field definitions */
133
+ fields: Record<string, FieldJSON>;
134
+ /** Relation definitions */
135
+ relations?: Record<string, RelationJSON>;
136
+ /** Entity behaviors */
137
+ behaviors?: BehaviorsJSON;
138
+ /** Mark as auth entity for next-auth integration */
139
+ auth?: boolean;
140
+ /** Protection level for CRUD operations */
141
+ protected?: ProtectedJSON;
142
+ /** External API source (overrides manifest source) */
143
+ source?: ExternalSourceJSON;
144
+ /** CRUD hooks configuration */
145
+ hooks?: boolean | HooksJSON;
146
+ }
147
+ /**
148
+ * Hooks configuration for JSON input
149
+ */
150
+ export interface HooksJSON {
151
+ beforeCreate?: boolean;
152
+ afterCreate?: boolean;
153
+ beforeUpdate?: boolean;
154
+ afterUpdate?: boolean;
155
+ beforeRemove?: boolean;
156
+ afterRemove?: boolean;
157
+ }
158
+ /**
159
+ * Database configuration
160
+ */
161
+ export interface DatabaseJSON {
162
+ /** Database type */
163
+ type: 'sqlite' | 'postgres' | 'mysql';
164
+ /** SQLite file path (for SQLite only) */
165
+ file?: string;
166
+ /** Connection URL (for PostgreSQL/MySQL) */
167
+ url?: string;
168
+ }
169
+ /**
170
+ * Auth configuration
171
+ */
172
+ export interface AuthJSON {
173
+ enabled: boolean;
174
+ adapter?: 'drizzle';
175
+ providers?: ('credentials' | 'google' | 'github' | 'discord')[];
176
+ sessionStrategy?: 'jwt' | 'database';
177
+ }
178
+ /**
179
+ * i18n configuration
180
+ */
181
+ export interface I18nJSON {
182
+ languages: string[];
183
+ defaultLanguage: string;
184
+ outputDir?: string;
185
+ }
186
+ /**
187
+ * Logging configuration
188
+ */
189
+ export interface LoggingJSON {
190
+ enabled: boolean;
191
+ level?: 'debug' | 'info' | 'warn' | 'error';
192
+ format?: 'json' | 'pretty';
193
+ }
194
+ /**
195
+ * Telemetry configuration
196
+ */
197
+ export interface TelemetryJSON {
198
+ enabled: boolean;
199
+ events?: ('create' | 'update' | 'remove')[];
200
+ }
201
+ /**
202
+ * Audit configuration
203
+ */
204
+ export interface AuditJSON {
205
+ enabled: boolean;
206
+ entity?: string;
207
+ }
208
+ /**
209
+ * Observability configuration
210
+ */
211
+ export interface ObservabilityJSON {
212
+ logging?: LoggingJSON;
213
+ telemetry?: TelemetryJSON;
214
+ audit?: AuditJSON;
215
+ }
216
+ /**
217
+ * Tenancy configuration
218
+ */
219
+ export interface TenancyJSON {
220
+ enabled: boolean;
221
+ /** Field to filter by (e.g., 'organizationId') */
222
+ field: string;
223
+ }
224
+ /**
225
+ * Default behaviors for all entities
226
+ */
227
+ export interface DefaultsJSON {
228
+ timestamps?: boolean;
229
+ softDelete?: boolean;
230
+ audit?: boolean;
231
+ }
232
+ /**
233
+ * JSON representation of a manifest/config
234
+ *
235
+ * This is the main type that AI agents should generate.
236
+ *
237
+ * @example
238
+ * ```json
239
+ * {
240
+ * "entities": [
241
+ * {
242
+ * "name": "User",
243
+ * "fields": {
244
+ * "email": { "type": "text", "email": true, "unique": true },
245
+ * "name": { "type": "text" }
246
+ * }
247
+ * }
248
+ * ],
249
+ * "database": { "type": "sqlite", "file": "./app.db" }
250
+ * }
251
+ * ```
252
+ */
253
+ export interface ManifestJSON {
254
+ /** Entity definitions */
255
+ entities: EntityJSON[];
256
+ /** Template ID (e.g., 'nextjs-drizzle-trpc') */
257
+ template?: string;
258
+ /** Generation mode */
259
+ mode?: 'full' | 'headless' | 'api-only';
260
+ /** Database configuration (required for 'full' mode) */
261
+ database?: DatabaseJSON;
262
+ /** Global default source for all entities */
263
+ source?: ExternalSourceJSON;
264
+ /** Authentication configuration */
265
+ auth?: AuthJSON;
266
+ /** Internationalization configuration */
267
+ i18n?: I18nJSON;
268
+ /** Observability configuration */
269
+ observability?: ObservabilityJSON;
270
+ /** Multi-tenancy configuration */
271
+ tenancy?: TenancyJSON;
272
+ /** Default behaviors for all entities */
273
+ defaults?: DefaultsJSON;
274
+ }
275
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/json/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * JSON Schema Types for AI Agent Input
4
+ *
5
+ * These types define the JSON format that AI agents can use to generate
6
+ * archetype manifests without writing TypeScript code.
7
+ *
8
+ * @module json/types
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });