@breadstone-infrastructure/prisma-seeds 0.0.231

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 (252) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +21 -0
  3. package/README.md +284 -0
  4. package/ai/AISeedGenerator.d.ts +127 -0
  5. package/ai/AISeedGenerator.d.ts.map +1 -0
  6. package/ai/AISeedGenerator.js +438 -0
  7. package/ai/AISeedGenerator.js.map +1 -0
  8. package/ai/AISeedTypes.d.ts +138 -0
  9. package/ai/AISeedTypes.d.ts.map +1 -0
  10. package/ai/AISeedTypes.js +3 -0
  11. package/ai/AISeedTypes.js.map +1 -0
  12. package/ai/PrismaModelAnalyzer.d.ts +36 -0
  13. package/ai/PrismaModelAnalyzer.d.ts.map +1 -0
  14. package/ai/PrismaModelAnalyzer.js +110 -0
  15. package/ai/PrismaModelAnalyzer.js.map +1 -0
  16. package/ai/PrismaTypeSchemaGenerator.d.ts +38 -0
  17. package/ai/PrismaTypeSchemaGenerator.d.ts.map +1 -0
  18. package/ai/PrismaTypeSchemaGenerator.js +71 -0
  19. package/ai/PrismaTypeSchemaGenerator.js.map +1 -0
  20. package/ai/createAISeeder.d.ts +11 -0
  21. package/ai/createAISeeder.d.ts.map +1 -0
  22. package/ai/createAISeeder.js +72 -0
  23. package/ai/createAISeeder.js.map +1 -0
  24. package/ai/index.d.ts +6 -0
  25. package/ai/index.d.ts.map +1 -0
  26. package/ai/index.js +5 -0
  27. package/ai/index.js.map +1 -0
  28. package/assets/AssetManager.d.ts +213 -0
  29. package/assets/AssetManager.d.ts.map +1 -0
  30. package/assets/AssetManager.js +460 -0
  31. package/assets/AssetManager.js.map +1 -0
  32. package/assets/IImageTransformOptions.d.ts +42 -0
  33. package/assets/IImageTransformOptions.d.ts.map +1 -0
  34. package/assets/IImageTransformOptions.js +22 -0
  35. package/assets/IImageTransformOptions.js.map +1 -0
  36. package/assets/adapters/BlobAdapterFactory.d.ts +21 -0
  37. package/assets/adapters/BlobAdapterFactory.d.ts.map +1 -0
  38. package/assets/adapters/BlobAdapterFactory.js +3 -0
  39. package/assets/adapters/BlobAdapterFactory.js.map +1 -0
  40. package/assets/adapters/CloudflareR2BlobAdapter.d.ts +97 -0
  41. package/assets/adapters/CloudflareR2BlobAdapter.d.ts.map +1 -0
  42. package/assets/adapters/CloudflareR2BlobAdapter.js +265 -0
  43. package/assets/adapters/CloudflareR2BlobAdapter.js.map +1 -0
  44. package/assets/adapters/EmptyBlobAdapter.d.ts +42 -0
  45. package/assets/adapters/EmptyBlobAdapter.d.ts.map +1 -0
  46. package/assets/adapters/EmptyBlobAdapter.js +65 -0
  47. package/assets/adapters/EmptyBlobAdapter.js.map +1 -0
  48. package/assets/adapters/LocalFileAdapter.d.ts +34 -0
  49. package/assets/adapters/LocalFileAdapter.d.ts.map +1 -0
  50. package/assets/adapters/LocalFileAdapter.js +74 -0
  51. package/assets/adapters/LocalFileAdapter.js.map +1 -0
  52. package/assets/adapters/VercelBlobAdapter.d.ts +73 -0
  53. package/assets/adapters/VercelBlobAdapter.d.ts.map +1 -0
  54. package/assets/adapters/VercelBlobAdapter.js +168 -0
  55. package/assets/adapters/VercelBlobAdapter.js.map +1 -0
  56. package/assets/adapters/abstracts/BlobAdapterBase.d.ts +62 -0
  57. package/assets/adapters/abstracts/BlobAdapterBase.d.ts.map +1 -0
  58. package/assets/adapters/abstracts/BlobAdapterBase.js +58 -0
  59. package/assets/adapters/abstracts/BlobAdapterBase.js.map +1 -0
  60. package/assets/adapters/abstracts/HttpBlobAdapterBase.d.ts +43 -0
  61. package/assets/adapters/abstracts/HttpBlobAdapterBase.d.ts.map +1 -0
  62. package/assets/adapters/abstracts/HttpBlobAdapterBase.js +88 -0
  63. package/assets/adapters/abstracts/HttpBlobAdapterBase.js.map +1 -0
  64. package/assets/adapters/createBlobAdapter.d.ts +47 -0
  65. package/assets/adapters/createBlobAdapter.d.ts.map +1 -0
  66. package/assets/adapters/createBlobAdapter.js +63 -0
  67. package/assets/adapters/createBlobAdapter.js.map +1 -0
  68. package/assets/adapters/index.d.ts +11 -0
  69. package/assets/adapters/index.d.ts.map +1 -0
  70. package/assets/adapters/index.js +7 -0
  71. package/assets/adapters/index.js.map +1 -0
  72. package/assets/adapters/interfaces/IBlobAdapter.d.ts +41 -0
  73. package/assets/adapters/interfaces/IBlobAdapter.d.ts.map +1 -0
  74. package/assets/adapters/interfaces/IBlobAdapter.js +3 -0
  75. package/assets/adapters/interfaces/IBlobAdapter.js.map +1 -0
  76. package/assets/adapters/interfaces/IBlobAdapterConfig.d.ts +16 -0
  77. package/assets/adapters/interfaces/IBlobAdapterConfig.d.ts.map +1 -0
  78. package/assets/adapters/interfaces/IBlobAdapterConfig.js +2 -0
  79. package/assets/adapters/interfaces/IBlobAdapterConfig.js.map +1 -0
  80. package/assets/adapters/interfaces/IBlobUploadResult.d.ts +24 -0
  81. package/assets/adapters/interfaces/IBlobUploadResult.d.ts.map +1 -0
  82. package/assets/adapters/interfaces/IBlobUploadResult.js +2 -0
  83. package/assets/adapters/interfaces/IBlobUploadResult.js.map +1 -0
  84. package/base/BaseSeeder.d.ts +21 -0
  85. package/base/BaseSeeder.d.ts.map +1 -0
  86. package/base/BaseSeeder.js +45 -0
  87. package/base/BaseSeeder.js.map +1 -0
  88. package/base/functionalSeeder.d.ts +31 -0
  89. package/base/functionalSeeder.d.ts.map +1 -0
  90. package/base/functionalSeeder.js +33 -0
  91. package/base/functionalSeeder.js.map +1 -0
  92. package/cli/Cli.d.ts +2 -0
  93. package/cli/Cli.d.ts.map +1 -0
  94. package/cli/Cli.js +32 -0
  95. package/cli/Cli.js.map +1 -0
  96. package/cli/CliArgs.d.ts +2 -0
  97. package/cli/CliArgs.d.ts.map +1 -0
  98. package/cli/CliArgs.js +133 -0
  99. package/cli/CliArgs.js.map +1 -0
  100. package/cli/CliArgsConfig.d.ts +2 -0
  101. package/cli/CliArgsConfig.d.ts.map +1 -0
  102. package/cli/CliArgsConfig.js +15 -0
  103. package/cli/CliArgsConfig.js.map +1 -0
  104. package/cli/CliRun.d.ts +2 -0
  105. package/cli/CliRun.d.ts.map +1 -0
  106. package/cli/CliRun.js +34 -0
  107. package/cli/CliRun.js.map +1 -0
  108. package/cli/commands/SeedCommand.d.ts +2 -0
  109. package/cli/commands/SeedCommand.d.ts.map +1 -0
  110. package/cli/commands/SeedCommand.js +73 -0
  111. package/cli/commands/SeedCommand.js.map +1 -0
  112. package/cli/commands/SeedCommandArgsConfig.d.ts +2 -0
  113. package/cli/commands/SeedCommandArgsConfig.d.ts.map +1 -0
  114. package/cli/commands/SeedCommandArgsConfig.js +31 -0
  115. package/cli/commands/SeedCommandArgsConfig.js.map +1 -0
  116. package/cli/seed.d.ts +2 -0
  117. package/cli/seed.d.ts.map +1 -0
  118. package/cli/seed.js +42 -0
  119. package/cli/seed.js.map +1 -0
  120. package/config/IAssetConfig.d.ts +36 -0
  121. package/config/IAssetConfig.d.ts.map +1 -0
  122. package/config/IAssetConfig.js +3 -0
  123. package/config/IAssetConfig.js.map +1 -0
  124. package/config/IComposedSeedConfig.d.ts +32 -0
  125. package/config/IComposedSeedConfig.d.ts.map +1 -0
  126. package/config/IComposedSeedConfig.js +3 -0
  127. package/config/IComposedSeedConfig.js.map +1 -0
  128. package/config/ISeedConfig.d.ts +75 -0
  129. package/config/ISeedConfig.d.ts.map +1 -0
  130. package/config/ISeedConfig.js +3 -0
  131. package/config/ISeedConfig.js.map +1 -0
  132. package/config/ISeedContext.d.ts +92 -0
  133. package/config/ISeedContext.d.ts.map +1 -0
  134. package/config/ISeedContext.js +3 -0
  135. package/config/ISeedContext.js.map +1 -0
  136. package/config/ISeedDefinition.d.ts +38 -0
  137. package/config/ISeedDefinition.d.ts.map +1 -0
  138. package/config/ISeedDefinition.js +3 -0
  139. package/config/ISeedDefinition.js.map +1 -0
  140. package/config/ISeedFactory.d.ts +15 -0
  141. package/config/ISeedFactory.d.ts.map +1 -0
  142. package/config/ISeedFactory.js +3 -0
  143. package/config/ISeedFactory.js.map +1 -0
  144. package/config/ISeedOptions.d.ts +44 -0
  145. package/config/ISeedOptions.d.ts.map +1 -0
  146. package/config/ISeedOptions.js +2 -0
  147. package/config/ISeedOptions.js.map +1 -0
  148. package/config/ISeedResult.d.ts +44 -0
  149. package/config/ISeedResult.d.ts.map +1 -0
  150. package/config/ISeedResult.js +2 -0
  151. package/config/ISeedResult.js.map +1 -0
  152. package/config/ISeeder.d.ts +37 -0
  153. package/config/ISeeder.d.ts.map +1 -0
  154. package/config/ISeeder.js +3 -0
  155. package/config/ISeeder.js.map +1 -0
  156. package/config/createAdapter.d.ts +13 -0
  157. package/config/createAdapter.d.ts.map +1 -0
  158. package/config/createAdapter.js +16 -0
  159. package/config/createAdapter.js.map +1 -0
  160. package/config/createSeed.d.ts +6 -0
  161. package/config/createSeed.d.ts.map +1 -0
  162. package/config/createSeed.js +16 -0
  163. package/config/createSeed.js.map +1 -0
  164. package/config/defineConfig.d.ts +27 -0
  165. package/config/defineConfig.d.ts.map +1 -0
  166. package/config/defineConfig.js +35 -0
  167. package/config/defineConfig.js.map +1 -0
  168. package/discovery/SeedConfigDiscovery.d.ts +16 -0
  169. package/discovery/SeedConfigDiscovery.d.ts.map +1 -0
  170. package/discovery/SeedConfigDiscovery.js +137 -0
  171. package/discovery/SeedConfigDiscovery.js.map +1 -0
  172. package/index.d.ts +32 -0
  173. package/index.d.ts.map +1 -0
  174. package/index.js +32 -0
  175. package/index.js.map +1 -0
  176. package/json/JsonReferenceResolver.d.ts +23 -0
  177. package/json/JsonReferenceResolver.d.ts.map +1 -0
  178. package/json/JsonReferenceResolver.js +99 -0
  179. package/json/JsonReferenceResolver.js.map +1 -0
  180. package/json/JsonSchemaValidator.d.ts +23 -0
  181. package/json/JsonSchemaValidator.d.ts.map +1 -0
  182. package/json/JsonSchemaValidator.js +98 -0
  183. package/json/JsonSchemaValidator.js.map +1 -0
  184. package/json/JsonSeedLoader.d.ts +33 -0
  185. package/json/JsonSeedLoader.d.ts.map +1 -0
  186. package/json/JsonSeedLoader.js +176 -0
  187. package/json/JsonSeedLoader.js.map +1 -0
  188. package/json/JsonSeedTypes.d.ts +204 -0
  189. package/json/JsonSeedTypes.d.ts.map +1 -0
  190. package/json/JsonSeedTypes.js +3 -0
  191. package/json/JsonSeedTypes.js.map +1 -0
  192. package/json/createJsonSeeder.d.ts +13 -0
  193. package/json/createJsonSeeder.d.ts.map +1 -0
  194. package/json/createJsonSeeder.js +240 -0
  195. package/json/createJsonSeeder.js.map +1 -0
  196. package/json/index.d.ts +6 -0
  197. package/json/index.d.ts.map +1 -0
  198. package/json/index.js +7 -0
  199. package/json/index.js.map +1 -0
  200. package/logging/ISeedLogger.d.ts +55 -0
  201. package/logging/ISeedLogger.d.ts.map +1 -0
  202. package/logging/ISeedLogger.js +3 -0
  203. package/logging/ISeedLogger.js.map +1 -0
  204. package/logging/LogLevel.d.ts +30 -0
  205. package/logging/LogLevel.d.ts.map +1 -0
  206. package/logging/LogLevel.js +37 -0
  207. package/logging/LogLevel.js.map +1 -0
  208. package/logging/SeedLogger.d.ts +24 -0
  209. package/logging/SeedLogger.d.ts.map +1 -0
  210. package/logging/SeedLogger.js +94 -0
  211. package/logging/SeedLogger.js.map +1 -0
  212. package/orchestration/SeedOrchestrator.d.ts +30 -0
  213. package/orchestration/SeedOrchestrator.d.ts.map +1 -0
  214. package/orchestration/SeedOrchestrator.js +262 -0
  215. package/orchestration/SeedOrchestrator.js.map +1 -0
  216. package/package.json +27 -0
  217. package/resolvers/EntityResolver.d.ts +43 -0
  218. package/resolvers/EntityResolver.d.ts.map +1 -0
  219. package/resolvers/EntityResolver.js +95 -0
  220. package/resolvers/EntityResolver.js.map +1 -0
  221. package/utils/AssetReferenceResolver.d.ts +49 -0
  222. package/utils/AssetReferenceResolver.d.ts.map +1 -0
  223. package/utils/AssetReferenceResolver.js +62 -0
  224. package/utils/AssetReferenceResolver.js.map +1 -0
  225. package/utils/EntityLookupCache.d.ts +47 -0
  226. package/utils/EntityLookupCache.d.ts.map +1 -0
  227. package/utils/EntityLookupCache.js +64 -0
  228. package/utils/EntityLookupCache.js.map +1 -0
  229. package/utils/ISeedRandom.d.ts +70 -0
  230. package/utils/ISeedRandom.d.ts.map +1 -0
  231. package/utils/ISeedRandom.js +3 -0
  232. package/utils/ISeedRandom.js.map +1 -0
  233. package/utils/LocalizationToolkit.d.ts +125 -0
  234. package/utils/LocalizationToolkit.d.ts.map +1 -0
  235. package/utils/LocalizationToolkit.js +131 -0
  236. package/utils/LocalizationToolkit.js.map +1 -0
  237. package/utils/SeededRandom.d.ts +15 -0
  238. package/utils/SeededRandom.d.ts.map +1 -0
  239. package/utils/SeededRandom.js +56 -0
  240. package/utils/SeededRandom.js.map +1 -0
  241. package/utils/StringArrayToolkit.d.ts +25 -0
  242. package/utils/StringArrayToolkit.d.ts.map +1 -0
  243. package/utils/StringArrayToolkit.js +56 -0
  244. package/utils/StringArrayToolkit.js.map +1 -0
  245. package/utils/StringValueGuard.d.ts +24 -0
  246. package/utils/StringValueGuard.d.ts.map +1 -0
  247. package/utils/StringValueGuard.js +46 -0
  248. package/utils/StringValueGuard.js.map +1 -0
  249. package/utils/WarningCollector.d.ts +40 -0
  250. package/utils/WarningCollector.d.ts.map +1 -0
  251. package/utils/WarningCollector.js +83 -0
  252. package/utils/WarningCollector.js.map +1 -0
@@ -0,0 +1,438 @@
1
+ /* eslint-disable no-unused-vars */
2
+ // #region Imports
3
+ import { z } from 'zod';
4
+ import { PrismaModelAnalyzer } from './PrismaModelAnalyzer.js';
5
+ import { SeedLogger } from '../logging/SeedLogger.js';
6
+ // #endregion
7
+ /**
8
+ * AI-powered seed generator that uses LLMs to generate realistic test data.
9
+ *
10
+ * @public
11
+ */
12
+ export class AISeedGenerator {
13
+ _prisma;
14
+ // #region Fields
15
+ _modelAnalyzer;
16
+ _logger = new SeedLogger();
17
+ // #endregion
18
+ // #region Ctor
19
+ constructor(_prisma) {
20
+ this._prisma = _prisma;
21
+ this._modelAnalyzer = new PrismaModelAnalyzer(_prisma);
22
+ }
23
+ // #endregion
24
+ // #region Methods
25
+ /**
26
+ * Generate entities using AI based on configuration.
27
+ *
28
+ * @public
29
+ * @template T The type of the entity to be generated
30
+ * @param config AI seed configuration
31
+ * @param context Seed context with Prisma client and logger
32
+ * @param utilities Utilities for seeding operations
33
+ * @returns Result of the seeding operation
34
+ */
35
+ async generateEntities(config, context, utilities) {
36
+ if (!config.enabled) {
37
+ context.logger.info(`AI generation disabled for ${config.schema.modelName}`);
38
+ return utilities.createSeedResult(0, 0);
39
+ }
40
+ const { result: generatedEntities, duration } = await utilities.measureExecutionTime(async () => {
41
+ // 1. Analyze the Prisma model
42
+ const executionContext = await this._modelAnalyzer.analyzeModel(config.schema.modelName);
43
+ // 2. Prepare chunking configuration
44
+ const chunkSize = this.resolveChunkSize(config);
45
+ const totalCount = config.generation.count;
46
+ const totalChunks = Math.max(1, Math.ceil(totalCount / chunkSize));
47
+ const uniqueFieldTracker = this.initializeUniqueFieldTracker(config, executionContext);
48
+ const aggregatedEntities = new Array();
49
+ this._logger.info(`Preparing AI generation in ${totalChunks} chunk(s) with a maximum of ${chunkSize} entities per request.`);
50
+ for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) {
51
+ const remaining = totalCount - aggregatedEntities.length;
52
+ if (remaining <= 0) {
53
+ break;
54
+ }
55
+ const requestedCount = Math.min(chunkSize, remaining);
56
+ this._logger.debug(`Starting AI generation chunk ${chunkIndex + 1}/${totalChunks} targeting ${requestedCount} entities.`);
57
+ // 3. Generate AI prompt for the current chunk
58
+ const prompt = this.buildPrompt(config, executionContext, requestedCount, chunkIndex + 1, totalChunks);
59
+ // 4. Call AI to generate entities
60
+ const aiResult = await this.callAI(config, prompt, requestedCount);
61
+ // 5. Validate and transform data
62
+ const validatedData = this.validateAndTransform(aiResult, config, requestedCount, uniqueFieldTracker);
63
+ aggregatedEntities.push(...validatedData);
64
+ this._logger.info(`Chunk ${chunkIndex + 1}/${totalChunks} produced ${validatedData.length} valid entit${validatedData.length === 1 ? 'y' : 'ies'}.`);
65
+ }
66
+ if (aggregatedEntities.length < totalCount) {
67
+ this._logger.warn(`Requested ${totalCount} entit${totalCount === 1 ? 'y' : 'ies'} but only ${aggregatedEntities.length} valid entit${aggregatedEntities.length === 1 ? 'y was' : 'ies were'} generated.`);
68
+ }
69
+ // 6. Save to database
70
+ const savedEntities = await this.saveEntities(aggregatedEntities.slice(0, totalCount), config, context);
71
+ return savedEntities;
72
+ });
73
+ context.logger.info(`AI generated ${generatedEntities.length} ${config.schema.modelName} entities`);
74
+ return utilities.createSeedResult(generatedEntities.length, duration);
75
+ }
76
+ /**
77
+ * Build a comprehensive prompt for AI generation.
78
+ *
79
+ * @private
80
+ * @template T The type of the entity to be generated
81
+ * @param config AI seed configuration
82
+ * @param executionContext Execution context with model schema and existing data
83
+ * @returns The constructed prompt string
84
+ */
85
+ buildPrompt(config, executionContext, requestedCount, chunkIndex, totalChunks) {
86
+ const { generation, schema } = config;
87
+ if (config.promptTemplate) {
88
+ return this.interpolateTemplate(config.promptTemplate, {
89
+ config,
90
+ executionContext,
91
+ chunk: {
92
+ current: chunkIndex,
93
+ total: totalChunks,
94
+ count: requestedCount
95
+ }
96
+ });
97
+ }
98
+ // Build default prompt
99
+ let prompt = `Generate ${requestedCount} realistic ${schema.modelName} entities for a fitness/nutrition application.\n\n`;
100
+ if (totalChunks > 1) {
101
+ prompt += `This is chunk ${chunkIndex} of ${totalChunks} to fulfil a total request of ${generation.count} entities. Avoid duplicating entries from earlier chunks and respect uniqueness constraints.\n\n`;
102
+ }
103
+ // Add context description
104
+ prompt += `Context: ${generation.description}\n\n`;
105
+ // Add schema information
106
+ prompt += 'Schema requirements:\n';
107
+ const fields = Object.entries(executionContext.modelSchema);
108
+ for (const [fieldName, fieldInfo] of fields) {
109
+ const info = fieldInfo;
110
+ prompt += `- ${fieldName}: ${info.type}${info.isRequired ? ' (required)' : ' (optional)'}${info.isUnique ? ' (must be unique)' : ''}\n`;
111
+ }
112
+ prompt += '\n';
113
+ // Add constraints
114
+ if (generation.constraints.length > 0) {
115
+ prompt += 'Constraints:\n';
116
+ for (const constraint of generation.constraints) {
117
+ prompt += `- ${constraint}\n`;
118
+ }
119
+ prompt += '\n';
120
+ }
121
+ // Add uniqueness requirements
122
+ if (generation.uniqueFields.length > 0) {
123
+ prompt += 'Unique fields (must not duplicate existing data):\n';
124
+ for (const field of generation.uniqueFields) {
125
+ const existingValues = this.getExistingFieldValues(executionContext.existingData, field);
126
+ prompt += `- ${field}: avoid [${existingValues.slice(0, 10).join(', ')}${existingValues.length > 10 ? '...' : ''}]\n`;
127
+ }
128
+ prompt += '\n';
129
+ }
130
+ // Add relationship context
131
+ if (generation.relationships.length > 0 && Object.keys(executionContext.relatedData).length > 0) {
132
+ prompt += 'Related data for references:\n';
133
+ for (const [modelName, data] of Object.entries(executionContext.relatedData)) {
134
+ const sampleIds = data.slice(0, 5).map((item) => item.id);
135
+ prompt += `- ${modelName} IDs: [${sampleIds.join(', ')}${data.length > 5 ? '...' : ''}]\n`;
136
+ }
137
+ prompt += '\n';
138
+ }
139
+ prompt += `Generate an array of ${requestedCount} objects that match this schema. `;
140
+ prompt += 'Ensure all data is realistic, diverse, and follows the constraints. ';
141
+ prompt += 'Return only valid JSON data.';
142
+ return prompt;
143
+ }
144
+ /**
145
+ * Call AI service to generate data.
146
+ *
147
+ * @private
148
+ * @template T The type of the entity to be generated
149
+ * @param config AI seed configuration
150
+ * @param prompt The prompt string to send to the AI
151
+ * @returns Array of generated objects
152
+ */
153
+ async callAI(config, prompt, requestedCount) {
154
+ const provider = this.createAIProvider(config.provider);
155
+ // Get or create Zod schema
156
+ const entitySchema = this.getZodSchema(config);
157
+ const minimumCount = Math.max(1, requestedCount);
158
+ const arraySchema = z.array(entitySchema)
159
+ .min(minimumCount)
160
+ .max(minimumCount * 2);
161
+ try {
162
+ // Dynamic import will be available when AI SDK is installed
163
+ const { generateObject } = await import('ai');
164
+ const result = await generateObject({
165
+ model: provider,
166
+ schema: arraySchema,
167
+ prompt: prompt
168
+ });
169
+ return result.object;
170
+ }
171
+ catch (error) {
172
+ throw new Error(`AI generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
173
+ }
174
+ }
175
+ resolveChunkSize(config) {
176
+ const { count, chunkSize } = config.generation;
177
+ if (chunkSize === undefined) {
178
+ return count;
179
+ }
180
+ const normalizedSize = Math.max(1, Math.floor(chunkSize));
181
+ return Math.min(normalizedSize, Math.max(1, count));
182
+ }
183
+ initializeUniqueFieldTracker(config, executionContext) {
184
+ const uniqueFields = config.generation.uniqueFields ?? [];
185
+ if (uniqueFields.length === 0) {
186
+ return undefined;
187
+ }
188
+ const tracker = new Map();
189
+ for (const field of uniqueFields) {
190
+ tracker.set(field, new Set());
191
+ }
192
+ const shouldIncludeExisting = config.generation.includeExistingData ?? true;
193
+ const existingDataSource = shouldIncludeExisting ? executionContext.existingData ?? [] : [];
194
+ for (const entry of existingDataSource) {
195
+ this.registerUniqueFieldValues(tracker, entry, uniqueFields);
196
+ }
197
+ return tracker;
198
+ }
199
+ hasDuplicateUniqueField(item, tracker, uniqueFields) {
200
+ if (item === null || typeof item !== 'object') {
201
+ return false;
202
+ }
203
+ const record = item;
204
+ for (const field of uniqueFields) {
205
+ const set = tracker.get(field);
206
+ if (!set) {
207
+ continue;
208
+ }
209
+ const normalizedValue = this.extractUniqueFieldValue(record[field]);
210
+ if (normalizedValue !== undefined && set.has(normalizedValue)) {
211
+ return true;
212
+ }
213
+ }
214
+ return false;
215
+ }
216
+ registerUniqueFieldValues(tracker, item, uniqueFields) {
217
+ if (item === null || typeof item !== 'object') {
218
+ return;
219
+ }
220
+ const record = item;
221
+ for (const field of uniqueFields) {
222
+ const set = tracker.get(field);
223
+ if (!set) {
224
+ continue;
225
+ }
226
+ const normalizedValue = this.extractUniqueFieldValue(record[field]);
227
+ if (normalizedValue !== undefined) {
228
+ set.add(normalizedValue);
229
+ }
230
+ }
231
+ }
232
+ extractUniqueFieldValue(value) {
233
+ if (value === null || value === undefined) {
234
+ return undefined;
235
+ }
236
+ if (value instanceof Date) {
237
+ return value.toISOString();
238
+ }
239
+ if (typeof value === 'object') {
240
+ try {
241
+ return JSON.stringify(value);
242
+ }
243
+ catch {
244
+ return undefined;
245
+ }
246
+ }
247
+ return String(value);
248
+ }
249
+ /**
250
+ * Create AI provider based on configuration.
251
+ *
252
+ * @private
253
+ * @param provider The AI provider name
254
+ * @returns The corresponding environment variable key
255
+ */
256
+ createAIProvider(providerConfig) {
257
+ switch (providerConfig.provider) {
258
+ case 'openai': {
259
+ // Dynamic import to avoid dependency issues if not used
260
+ const { openai } = require('@ai-sdk/openai');
261
+ return openai(providerConfig.model, {
262
+ apiKey: providerConfig.apiKey || process.env['OPENAI_API_KEY'],
263
+ ...providerConfig.options
264
+ });
265
+ }
266
+ case 'anthropic': {
267
+ const { anthropic } = require('@ai-sdk/anthropic');
268
+ return anthropic(providerConfig.model, {
269
+ apiKey: providerConfig.apiKey || process.env['ANTHROPIC_API_KEY'],
270
+ ...providerConfig.options
271
+ });
272
+ }
273
+ case 'google': {
274
+ const { google } = require('@ai-sdk/google');
275
+ return google(providerConfig.model, {
276
+ apiKey: providerConfig.apiKey || process.env['GOOGLE_API_KEY'],
277
+ ...providerConfig.options
278
+ });
279
+ }
280
+ default:
281
+ throw new Error(`Unsupported AI provider: ${providerConfig.provider}`);
282
+ }
283
+ }
284
+ /**
285
+ * Validate generated data and apply transformations.
286
+ *
287
+ * @private
288
+ * @template T The type of the entity to be generated
289
+ * @param data The raw generated data from AI
290
+ * @param config AI seed configuration
291
+ * @returns Array of validated and transformed entities
292
+ */
293
+ validateAndTransform(data, config, limit, uniqueFieldTracker) {
294
+ const validatedData = new Array();
295
+ const zodSchema = this.getZodSchema(config);
296
+ const uniqueFields = config.generation.uniqueFields ?? [];
297
+ for (const item of data) {
298
+ try {
299
+ // Validate with Zod schema
300
+ const validated = zodSchema.parse(item);
301
+ // Apply transformer if provided
302
+ const transformed = config.schema.transformer
303
+ ? config.schema.transformer(validated)
304
+ : validated;
305
+ if (uniqueFieldTracker && uniqueFields.length > 0) {
306
+ if (this.hasDuplicateUniqueField(transformed, uniqueFieldTracker, uniqueFields)) {
307
+ this._logger.warn('Duplicate detected for configured unique fields. Skipping generated item.');
308
+ continue;
309
+ }
310
+ this.registerUniqueFieldValues(uniqueFieldTracker, transformed, uniqueFields);
311
+ }
312
+ validatedData.push(transformed);
313
+ }
314
+ catch (error) {
315
+ // Log validation errors but continue with other items
316
+ this._logger.warn(`Validation failed for generated item: ${error}`);
317
+ }
318
+ if (validatedData.length >= limit) {
319
+ break;
320
+ }
321
+ }
322
+ return validatedData;
323
+ }
324
+ /**
325
+ * Save generated entities to database.
326
+ *
327
+ * @private
328
+ * @template T The type of the entity to be generated
329
+ * @param entities The array of entities to save
330
+ * @param config AI seed configuration
331
+ * @param context Seed context with Prisma client and logger
332
+ * @returns The saved entities
333
+ */
334
+ async saveEntities(entities, config, context) {
335
+ const modelName = this.toCamelCase(config.schema.modelName);
336
+ const modelDelegate = this._prisma[modelName];
337
+ if (!modelDelegate) {
338
+ throw new Error(`Model ${config.schema.modelName} not found in Prisma client`);
339
+ }
340
+ // Use transaction for consistency
341
+ return await this._prisma.$transaction(entities.map((entity) => modelDelegate.create({ data: entity })));
342
+ }
343
+ /**
344
+ * Get existing values for a field to avoid duplicates.
345
+ *
346
+ * @private
347
+ * @param existingData The existing data array
348
+ * @param fieldName The field name to extract values from
349
+ * @returns Array of existing values for the specified field
350
+ */
351
+ getExistingFieldValues(existingData, fieldName) {
352
+ return existingData
353
+ .map((item) => item?.[fieldName])
354
+ .filter((value) => value !== null && value !== undefined)
355
+ .map((value) => String(value));
356
+ }
357
+ /**
358
+ * Interpolate template with variables.
359
+ *
360
+ * @private
361
+ * @template T The type of the entity to be generated
362
+ * @param template The template string with placeholders
363
+ * @param variables Variables to replace in the template
364
+ * @returns The interpolated string
365
+ */
366
+ interpolateTemplate(template, variables) {
367
+ // Simple template interpolation - can be enhanced with a proper template engine
368
+ let result = template;
369
+ const chunkInfo = variables.chunk;
370
+ // Replace common variables
371
+ result = result.replace(/\{\{count\}\}/g, String(chunkInfo?.count ?? variables.config.generation.count));
372
+ result = result.replace(/\{\{totalCount\}\}/g, String(variables.config.generation.count));
373
+ result = result.replace(/\{\{chunkIndex\}\}/g, String(chunkInfo?.current ?? 1));
374
+ result = result.replace(/\{\{chunkTotal\}\}/g, String(chunkInfo?.total ?? 1));
375
+ result = result.replace(/\{\{modelName\}\}/g, variables.config.schema.modelName);
376
+ result = result.replace(/\{\{description\}\}/g, variables.config.generation.description);
377
+ return result;
378
+ }
379
+ /**
380
+ * Convert model name to camelCase for Prisma client access.
381
+ *
382
+ * @private
383
+ * @param modelName The Prisma model name
384
+ * @returns The camelCased model name
385
+ */
386
+ toCamelCase(modelName) {
387
+ return modelName.charAt(0).toLowerCase() + modelName.slice(1);
388
+ }
389
+ /**
390
+ * Get or create Zod schema from config.
391
+ *
392
+ * @private
393
+ * @template T The type of the entity to be generated
394
+ * @param config AI seed configuration
395
+ * @returns Zod schema for validating generated entities
396
+ */
397
+ getZodSchema(config) {
398
+ if (config.schema.zodSchema) {
399
+ // Use provided Zod schema
400
+ return config.schema.zodSchema;
401
+ }
402
+ else {
403
+ // Auto-generate basic schema for common Prisma patterns
404
+ return this.generateBasicPrismaSchema(config.schema.modelName);
405
+ }
406
+ }
407
+ /**
408
+ * Generate a basic Zod schema for common Prisma model patterns.
409
+ *
410
+ * @private
411
+ * @template T The type of the entity to be generated
412
+ * @param config AI seed configuration
413
+ * @returns Zod schema for validating generated entities
414
+ */
415
+ generateBasicPrismaSchema(modelName) {
416
+ // Create a flexible schema that accepts common Prisma fields
417
+ const schema = z.object({
418
+ id: z.string().cuid()
419
+ .optional(),
420
+ createdAt: z.date().optional(),
421
+ updatedAt: z.date().optional(),
422
+ // Common fields based on model name patterns
423
+ ...modelName.toLowerCase() === 'user'
424
+ ? {
425
+ email: z.string().email()
426
+ .optional(),
427
+ username: z.string().optional(),
428
+ firstName: z.string().optional(),
429
+ lastName: z.string().optional(),
430
+ name: z.string().optional()
431
+ }
432
+ : {}
433
+ // Allow any additional fields for flexibility
434
+ }).passthrough();
435
+ return schema;
436
+ }
437
+ }
438
+ //# sourceMappingURL=AISeedGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AISeedGenerator.js","sourceRoot":"","sources":["../../src/ai/AISeedGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ import type { z } from 'zod';
2
+ /**
3
+ * AI provider configuration for seed generation.
4
+ *
5
+ * @public
6
+ */
7
+ export interface IAIProviderConfig {
8
+ /**
9
+ * The AI provider to use.
10
+ */
11
+ readonly provider: 'openai' | 'anthropic' | 'google' | 'custom';
12
+ /**
13
+ * The model to use for generation.
14
+ */
15
+ readonly model: string;
16
+ /**
17
+ * API key or configuration for the provider.
18
+ * Can be environment variable name or direct config.
19
+ */
20
+ readonly apiKey?: string;
21
+ /**
22
+ * Additional provider-specific options.
23
+ */
24
+ readonly options?: Record<string, unknown>;
25
+ }
26
+ /**
27
+ * Context and constraints for AI generation.
28
+ *
29
+ * @public
30
+ */
31
+ export interface IAIGenerationContext {
32
+ /**
33
+ * Human-readable description of what data should be generated.
34
+ * Example: "Generate realistic user profiles for a fitness app"
35
+ */
36
+ readonly description: string;
37
+ /**
38
+ * Specific constraints and requirements.
39
+ * Example: ["unique email addresses", "realistic names", "varied ages 18-80"]
40
+ */
41
+ readonly constraints: readonly string[];
42
+ /**
43
+ * Fields that must be unique across all generated entities.
44
+ */
45
+ readonly uniqueFields: readonly string[];
46
+ /**
47
+ * Relationships to consider when generating data.
48
+ * Example: ["userId must reference existing users"]
49
+ */
50
+ readonly relationships: readonly string[];
51
+ /**
52
+ * Number of entities to generate.
53
+ */
54
+ readonly count: number;
55
+ /**
56
+ * Maximum number of entities to request per AI call.
57
+ * Enables sequential chunking to respect token limits of the provider.
58
+ */
59
+ readonly chunkSize?: number;
60
+ /**
61
+ * Whether to include existing data context for uniqueness validation.
62
+ */
63
+ readonly includeExistingData?: boolean;
64
+ }
65
+ /**
66
+ * Schema configuration for AI generation.
67
+ * Uses Prisma model type directly - no external dependencies needed in seed configs.
68
+ *
69
+ * @public
70
+ */
71
+ export interface IAISeedSchema<T = unknown> {
72
+ /**
73
+ * Prisma model name this schema corresponds to.
74
+ */
75
+ readonly modelName: string;
76
+ /**
77
+ * Zod schema for validation - can be constructed using PrismaTypeSchemaGenerator.
78
+ * Pass undefined to auto-generate a basic schema based on common Prisma patterns.
79
+ */
80
+ readonly zodSchema?: z.ZodSchema<T>;
81
+ /**
82
+ * Optional transformer to convert generated data to Prisma input format.
83
+ * Receives the AI-generated data and returns data suitable for Prisma.create()
84
+ */
85
+ readonly transformer?: (data: T) => unknown;
86
+ }
87
+ /**
88
+ * Complete AI configuration for a seed.
89
+ *
90
+ * @public
91
+ */
92
+ export interface IAISeedConfig<T = unknown> {
93
+ /**
94
+ * Whether AI generation is enabled for this seed.
95
+ */
96
+ readonly enabled: boolean;
97
+ /**
98
+ * AI provider configuration.
99
+ */
100
+ readonly provider: IAIProviderConfig;
101
+ /**
102
+ * Generation context and constraints.
103
+ */
104
+ readonly generation: IAIGenerationContext;
105
+ /**
106
+ * Schema for validation and type safety.
107
+ */
108
+ readonly schema: IAISeedSchema<T>;
109
+ /**
110
+ * Optional custom prompt template.
111
+ * If not provided, a default template based on schema and context will be used.
112
+ */
113
+ readonly promptTemplate?: string;
114
+ }
115
+ /**
116
+ * Context provided to AI seeders during execution.
117
+ *
118
+ * @public
119
+ */
120
+ export interface IAISeedExecutionContext {
121
+ /**
122
+ * Prisma model schema information.
123
+ */
124
+ readonly modelSchema: Record<string, unknown>;
125
+ /**
126
+ * Existing data in the model for uniqueness checking.
127
+ */
128
+ readonly existingData: readonly unknown[];
129
+ /**
130
+ * Related data from other models.
131
+ */
132
+ readonly relatedData: Record<string, readonly unknown[]>;
133
+ /**
134
+ * Database constraints and indexes.
135
+ */
136
+ readonly constraints: Record<string, unknown>;
137
+ }
138
+ //# sourceMappingURL=AISeedTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AISeedTypes.d.ts","sourceRoot":"","sources":["../../src/ai/AISeedTypes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAI7B;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAE9B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAEhE;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAE9C;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IAEjC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAEzC;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAE1C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAE1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IAEtC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;CAE/C;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IAEtC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAE1C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAElC;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAEpC;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IAEpC;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,SAAS,OAAO,EAAE,CAAC;IAE1C;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;IAEzD;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAEjD"}
@@ -0,0 +1,3 @@
1
+ /* eslint-disable no-unused-vars */
2
+ export {};
3
+ //# sourceMappingURL=AISeedTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AISeedTypes.js","sourceRoot":"","sources":["../../src/ai/AISeedTypes.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
@@ -0,0 +1,36 @@
1
+ import type { PrismaClient } from '@prisma/client';
2
+ import type { IAISeedExecutionContext } from './AISeedTypes.js';
3
+ /**
4
+ * Service for analyzing Prisma models and providing context for AI generation.
5
+ *
6
+ * @public
7
+ */
8
+ export declare class PrismaModelAnalyzer {
9
+ private readonly _prisma;
10
+ constructor(_prisma: PrismaClient);
11
+ /**
12
+ * Analyze a Prisma model and extract schema information.
13
+ */
14
+ analyzeModel(modelName: string): Promise<IAISeedExecutionContext>;
15
+ /**
16
+ * Extract the schema definition for a Prisma model.
17
+ */
18
+ private _extractModelSchema;
19
+ /**
20
+ * Get existing data for uniqueness validation.
21
+ */
22
+ private _getExistingData;
23
+ /**
24
+ * Get related data from other models that this model references.
25
+ */
26
+ private _getRelatedData;
27
+ /**
28
+ * Get database constraints for the model.
29
+ */
30
+ private _getModelConstraints;
31
+ /**
32
+ * Convert model name to camelCase for Prisma client access.
33
+ */
34
+ private _toCamelCase;
35
+ }
36
+ //# sourceMappingURL=PrismaModelAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrismaModelAnalyzer.d.ts","sourceRoot":"","sources":["../../src/ai/PrismaModelAnalyzer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAIhE;;;;GAIG;AACH,qBAAa,mBAAmB;IAKxB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY;IAO1C;;OAEG;IACU,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAc9E;;OAEG;YACW,mBAAmB;IAajC;;OAEG;YACW,gBAAgB;IAkB9B;;OAEG;YACW,eAAe;IA0B7B;;OAEG;YACW,oBAAoB;IAUlC;;OAEG;IACH,OAAO,CAAC,YAAY;CAMvB"}