@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,240 @@
1
+ // #region Imports
2
+ import { dirname } from 'node:path';
3
+ import { Path } from '@breadstone-infrastructure/utilities';
4
+ import { createFunctionalSeeder } from '../base/functionalSeeder.js';
5
+ import { JsonSeedLoader } from './JsonSeedLoader.js';
6
+ import { JsonReferenceResolver } from './JsonReferenceResolver.js';
7
+ // #endregion
8
+ /**
9
+ * Create a JSON-based seeder that loads data from JSON files.
10
+ *
11
+ * @public
12
+ * @template TJson The type of the JSON data
13
+ * @template TPrisma The type of the Prisma input
14
+ * @param config JSON seed configuration
15
+ * @returns A functional seeder that uses JSON files
16
+ */
17
+ export function createJsonSeeder(config) {
18
+ const resolveBasePath = (seedContext) => {
19
+ if (seedContext.seedConfigPath) {
20
+ return dirname(seedContext.seedConfigPath);
21
+ }
22
+ return process.cwd();
23
+ };
24
+ return createFunctionalSeeder({
25
+ name: config.name,
26
+ run: async (context, utilities) => {
27
+ const loader = new JsonSeedLoader(context.logger);
28
+ const basePath = resolveBasePath(context);
29
+ const wrapperKeys = config.wrapperKey
30
+ ? Array.isArray(config.wrapperKey)
31
+ ? config.wrapperKey
32
+ : [config.wrapperKey]
33
+ : undefined;
34
+ const loadOptions = wrapperKeys && wrapperKeys.length > 0 ? { wrapperKeys } : undefined;
35
+ context.logger.info(`Loading JSON data from: ${JSON.stringify(config.sources)}`);
36
+ const validationResult = config.schema
37
+ ? await loader.loadWithSchema(config.sources, config.schema, basePath, loadOptions)
38
+ : {
39
+ isValid: true,
40
+ errors: [],
41
+ data: await loader.load(config.sources, basePath, loadOptions)
42
+ };
43
+ if (!validationResult.isValid) {
44
+ context.logger.error(`JSON validation failed: ${validationResult.errors.join(', ')}`);
45
+ return utilities.createSeedResult(0, 0, validationResult.errors);
46
+ }
47
+ let items = validationResult.data;
48
+ if (!Array.isArray(items)) {
49
+ items = [items];
50
+ }
51
+ context.logger.info(`Loaded ${items.length} items from JSON files`);
52
+ // Resolve references if configured
53
+ if (config.references) {
54
+ const resolver = new JsonReferenceResolver(config.references);
55
+ items = (await resolver.resolve(items, context));
56
+ context.logger.debug('Resolved all references');
57
+ }
58
+ // Apply mapper pre-processing FIRST
59
+ if (config.mapper?.preProcess) {
60
+ items = await Promise.all(items.map((item) => {
61
+ if (config.mapper?.preProcess) {
62
+ return config.mapper.preProcess(item, context);
63
+ }
64
+ return item;
65
+ }));
66
+ }
67
+ // Store unique field values by index AFTER preprocessing
68
+ const uniqueFieldsByIndex = [];
69
+ if (config.upsert) {
70
+ const uniqueFields = Array.isArray(config.upsert.uniqueFields)
71
+ ? config.upsert.uniqueFields
72
+ : [config.upsert.uniqueFields];
73
+ for (let idx = 0; idx < items.length; idx++) {
74
+ const item = items[idx];
75
+ const metadata = {};
76
+ for (const field of uniqueFields) {
77
+ metadata[field] = item[field];
78
+ }
79
+ uniqueFieldsByIndex.push(metadata);
80
+ }
81
+ } // Persist to database
82
+ const { result, duration } = await utilities.measureExecutionTime(async () => {
83
+ let created = 0;
84
+ let updated = 0;
85
+ const errors = [];
86
+ const modelName = config.model.charAt(0).toLowerCase() + config.model.slice(1);
87
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
88
+ const prismaRecord = context.prisma;
89
+ const modelDelegate = prismaRecord[modelName];
90
+ if (!modelDelegate) {
91
+ throw new Error(`Prisma model "${config.model}" not found`);
92
+ }
93
+ const batchSize = config.batch?.size ?? items.length; // Process all items at once if no batch size specified
94
+ const useTransaction = config.batch?.useTransaction ?? false;
95
+ for (let i = 0; i < items.length; i += batchSize) {
96
+ const batch = items.slice(i, i + batchSize);
97
+ const processBatch = async () => {
98
+ for (let batchIndex = 0; batchIndex < batch.length; batchIndex++) {
99
+ const item = batch[batchIndex];
100
+ const itemIndex = i + batchIndex;
101
+ try {
102
+ // Handle upsert or create
103
+ if (config.upsert) {
104
+ const uniqueFields = Array.isArray(config.upsert.uniqueFields)
105
+ ? config.upsert.uniqueFields
106
+ : [config.upsert.uniqueFields];
107
+ // Build where clause from preserved original unique fields by index
108
+ const whereClause = {};
109
+ const originalFields = uniqueFieldsByIndex[itemIndex];
110
+ if (originalFields) {
111
+ Object.assign(whereClause, originalFields);
112
+ }
113
+ else {
114
+ for (const field of uniqueFields) {
115
+ whereClause[field] = item[field];
116
+ }
117
+ }
118
+ // Map to Prisma input after building where clause
119
+ const createInput = config.mapper
120
+ ? await config.mapper.mapToCreate(item, context)
121
+ : item;
122
+ const existing = await modelDelegate.findFirst({
123
+ where: whereClause
124
+ });
125
+ if (existing && config.upsert.updateExisting) {
126
+ const updateInput = config.mapper?.mapToUpdate
127
+ ? await config.mapper.mapToUpdate(item, existing, context)
128
+ : createInput;
129
+ // Use id if available and not null, otherwise use compound format for composite keys
130
+ let updateWhere;
131
+ if (existing.id !== undefined && existing.id !== null) {
132
+ updateWhere = { id: existing.id };
133
+ }
134
+ else if (uniqueFields.length > 1) {
135
+ // Composite key: format as fieldA_fieldB: { fieldA, fieldB }
136
+ const compoundKey = uniqueFields.join('_');
137
+ updateWhere = { [compoundKey]: whereClause };
138
+ }
139
+ else {
140
+ updateWhere = whereClause;
141
+ }
142
+ await modelDelegate.update({
143
+ where: updateWhere,
144
+ data: updateInput
145
+ });
146
+ updated += 1;
147
+ }
148
+ else if (!existing) {
149
+ await modelDelegate.create({
150
+ data: createInput
151
+ });
152
+ created += 1;
153
+ }
154
+ }
155
+ else {
156
+ // No upsert, just create - map input here
157
+ const createInput = config.mapper
158
+ ? await config.mapper.mapToCreate(item, context)
159
+ : item;
160
+ await modelDelegate.create({
161
+ data: createInput
162
+ });
163
+ created += 1;
164
+ }
165
+ }
166
+ catch (error) {
167
+ const errorMsg = `Failed to process item: ${error}`;
168
+ context.logger.error(errorMsg);
169
+ errors.push(errorMsg);
170
+ }
171
+ }
172
+ };
173
+ if (useTransaction) {
174
+ await context.prisma.$transaction(async () => {
175
+ await processBatch();
176
+ });
177
+ }
178
+ else {
179
+ await processBatch();
180
+ }
181
+ }
182
+ return {
183
+ created,
184
+ updated,
185
+ errors
186
+ };
187
+ });
188
+ if (result.created > 0 || result.updated > 0) {
189
+ context.logger.summary(`${result.created} created, ${result.updated} updated (${duration}ms)`);
190
+ }
191
+ // Log warning summary if any warnings were collected
192
+ if (context.warnings?.hasWarnings()) {
193
+ context.warnings.logSummary(5); // Show top 5 unique warnings
194
+ }
195
+ return utilities.createSeedResult(result.created + result.updated, duration, result.errors, [], {
196
+ created: result.created,
197
+ updated: result.updated
198
+ });
199
+ },
200
+ validate: async (context) => {
201
+ if (!config.enabled) {
202
+ return true;
203
+ }
204
+ // Check if model exists
205
+ const modelName = config.model.charAt(0).toLowerCase() + config.model.slice(1);
206
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
207
+ const prismaRecord = context.prisma;
208
+ const modelDelegate = prismaRecord[modelName];
209
+ if (!modelDelegate) {
210
+ context.logger.warn(`Prisma model "${config.model}" not found`);
211
+ return false;
212
+ }
213
+ // Check if source files exist
214
+ const basePath = resolveBasePath(context);
215
+ const sources = Array.isArray(config.sources) ? config.sources : [config.sources];
216
+ for (const source of sources) {
217
+ const absoluteSource = Path.isAbsolute(source) ? source : Path.resolve(basePath, source);
218
+ const files = Path.glob(absoluteSource);
219
+ if (files.length === 0) {
220
+ context.logger.warn(`No JSON files found matching: ${source}`);
221
+ return false;
222
+ }
223
+ }
224
+ return true;
225
+ },
226
+ cleanup: async (context) => {
227
+ if (config.enabled) {
228
+ const modelName = config.model.charAt(0).toLowerCase() + config.model.slice(1);
229
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
230
+ const prismaRecord = context.prisma;
231
+ const modelDelegate = prismaRecord[modelName];
232
+ if (modelDelegate) {
233
+ context.logger.debug(`Cleaning up JSON-seeded ${config.model} data...`);
234
+ await modelDelegate.deleteMany({});
235
+ }
236
+ }
237
+ }
238
+ });
239
+ }
240
+ //# sourceMappingURL=createJsonSeeder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createJsonSeeder.js","sourceRoot":"","sources":["../../src/json/createJsonSeeder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { IJsonSeedConfig, IJsonSeedMapper, IJsonReferenceConfig, IJsonReferenceResolver, IJsonValidationResult, IJsonSeedLoadOptions } from './JsonSeedTypes.js';
2
+ export { JsonSeedLoader } from './JsonSeedLoader.js';
3
+ export { JsonSchemaValidator } from './JsonSchemaValidator.js';
4
+ export { JsonReferenceResolver } from './JsonReferenceResolver.js';
5
+ export { createJsonSeeder } from './createJsonSeeder.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/json/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACR,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
package/json/index.js ADDED
@@ -0,0 +1,7 @@
1
+ // #region Exports
2
+ export { JsonSeedLoader } from './JsonSeedLoader.js';
3
+ export { JsonSchemaValidator } from './JsonSchemaValidator.js';
4
+ export { JsonReferenceResolver } from './JsonReferenceResolver.js';
5
+ export { createJsonSeeder } from './createJsonSeeder.js';
6
+ // #endregion
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/json/index.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAUlB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,aAAa"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Logger interface for seeding operations.
3
+ *
4
+ * @public
5
+ */
6
+ export interface ISeedLogger {
7
+ /**
8
+ * Log an informational message.
9
+ *
10
+ * @param message The message to log.
11
+ */
12
+ info(message: string): void;
13
+ /**
14
+ * Log a warning message.
15
+ *
16
+ * @param message The message to log.
17
+ */
18
+ warn(message: string): void;
19
+ /**
20
+ * Log an error message.
21
+ *
22
+ * @param message The message to log.
23
+ */
24
+ error(message: string): void;
25
+ /**
26
+ * Log a debug message.
27
+ *
28
+ * @param message The message to log.
29
+ */
30
+ debug(message: string): void;
31
+ /**
32
+ * Start a log group with a title.
33
+ * Subsequent logs will be indented until endGroup() is called.
34
+ *
35
+ * @param title The group title.
36
+ */
37
+ startGroup(title: string): void;
38
+ /**
39
+ * End the current log group and restore previous indentation.
40
+ */
41
+ endGroup(): void;
42
+ /**
43
+ * Log a success message.
44
+ *
45
+ * @param message The message to log.
46
+ */
47
+ success(message: string): void;
48
+ /**
49
+ * Log a summary line (typically used for aggregated information).
50
+ *
51
+ * @param message The message to log.
52
+ */
53
+ summary(message: string): void;
54
+ }
55
+ //# sourceMappingURL=ISeedLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISeedLogger.d.ts","sourceRoot":"","sources":["../../src/logging/ISeedLogger.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAIxB;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,QAAQ,IAAI,IAAI,CAAC;IAEjB;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAIlC"}
@@ -0,0 +1,3 @@
1
+ /* eslint-disable no-unused-vars */
2
+ export {};
3
+ //# sourceMappingURL=ISeedLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISeedLogger.js","sourceRoot":"","sources":["../../src/logging/ISeedLogger.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Available log types.
3
+ *
4
+ * @public
5
+ */
6
+ export type LogType = 'error' | 'warn' | 'info' | 'debug' | 'success' | 'summary';
7
+ /**
8
+ * Log level configuration.
9
+ * Defines which log types should be displayed.
10
+ *
11
+ * @public
12
+ */
13
+ export type LogLevel = LogType | 'silent';
14
+ /**
15
+ * Default log level.
16
+ *
17
+ * @public
18
+ */
19
+ export declare const DEFAULT_LOG_LEVEL: LogLevel;
20
+ /**
21
+ * Check if a log type should be displayed based on the configured log level.
22
+ *
23
+ * @param logType The type of log message
24
+ * @param configuredLevel The configured log level
25
+ * @returns True if the log should be displayed
26
+ *
27
+ * @public
28
+ */
29
+ export declare function shouldLog(logType: LogType, configuredLevel: LogLevel): boolean;
30
+ //# sourceMappingURL=LogLevel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogLevel.d.ts","sourceRoot":"","sources":["../../src/logging/LogLevel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAElF;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAiB,CAAC;AAgBlD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,GAAG,OAAO,CAS9E"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Default log level.
3
+ *
4
+ * @public
5
+ */
6
+ export const DEFAULT_LOG_LEVEL = 'info';
7
+ /**
8
+ * Log level hierarchy (lower number = higher priority).
9
+ *
10
+ * @internal
11
+ */
12
+ export const LOG_LEVEL_PRIORITY = {
13
+ error: 0,
14
+ warn: 1,
15
+ info: 2,
16
+ success: 2,
17
+ summary: 2,
18
+ debug: 3
19
+ };
20
+ /**
21
+ * Check if a log type should be displayed based on the configured log level.
22
+ *
23
+ * @param logType The type of log message
24
+ * @param configuredLevel The configured log level
25
+ * @returns True if the log should be displayed
26
+ *
27
+ * @public
28
+ */
29
+ export function shouldLog(logType, configuredLevel) {
30
+ if (configuredLevel === 'silent') {
31
+ return false;
32
+ }
33
+ const configuredPriority = LOG_LEVEL_PRIORITY[configuredLevel];
34
+ const logTypePriority = LOG_LEVEL_PRIORITY[logType];
35
+ return logTypePriority <= configuredPriority;
36
+ }
37
+ //# sourceMappingURL=LogLevel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogLevel.js","sourceRoot":"","sources":["../../src/logging/LogLevel.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAa,MAAM,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA4B;IACvD,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;CACX,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,OAAgB,EAAE,eAAyB;IACjE,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,eAA0B,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAEpD,OAAO,eAAe,IAAI,kBAAkB,CAAC;AACjD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ISeedLogger } from './ISeedLogger.js';
2
+ import { ConsoleLogger } from '@breadstone-infrastructure/utilities';
3
+ import type { LogLevel } from './LogLevel.js';
4
+ /**
5
+ * The `SeedLogger` class with support for grouped/hierarchical logging.
6
+ *
7
+ * @public
8
+ */
9
+ export declare class SeedLogger extends ConsoleLogger implements ISeedLogger {
10
+ private _groupStack;
11
+ private _isGroupActive;
12
+ private readonly _logLevel;
13
+ constructor(logLevel?: LogLevel);
14
+ info(message: string): void;
15
+ warn(message: string): void;
16
+ error(message: string): void;
17
+ debug(message: string): void;
18
+ success(message: string): void;
19
+ summary(message: string): void;
20
+ startGroup(title: string): void;
21
+ endGroup(): void;
22
+ private _getIndent;
23
+ }
24
+ //# sourceMappingURL=SeedLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeedLogger.d.ts","sourceRoot":"","sources":["../../src/logging/SeedLogger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAQ,aAAa,EAA8G,MAAM,sCAAsC,CAAC;AACvL,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,aAAc,YAAW,WAAW;IAIhE,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;gBAMlB,QAAQ,GAAE,QAA4B;IASzC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQrC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ9B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ9B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgB/B,QAAQ,IAAI,IAAI;IAUvB,OAAO,CAAC,UAAU;CAWrB"}
@@ -0,0 +1,94 @@
1
+ // #region Imports
2
+ import { blue, ConsoleLogger, magenta, red, yellow, t, bgBlue, bgYellow, bgRed, bgMagenta, bold, white, black, green, bgGreen, gray, dim } from '@breadstone-infrastructure/utilities';
3
+ import { DEFAULT_LOG_LEVEL, shouldLog } from './LogLevel.js';
4
+ // #endregion
5
+ /**
6
+ * The `SeedLogger` class with support for grouped/hierarchical logging.
7
+ *
8
+ * @public
9
+ */
10
+ export class SeedLogger extends ConsoleLogger {
11
+ // #region Fields
12
+ _groupStack = [];
13
+ _isGroupActive = false;
14
+ _logLevel;
15
+ // #endregion
16
+ // #region Ctor
17
+ constructor(logLevel = DEFAULT_LOG_LEVEL) {
18
+ super();
19
+ this._logLevel = logLevel;
20
+ }
21
+ // #endregion
22
+ // #region Methods
23
+ info(message) {
24
+ if (!shouldLog('info', this._logLevel)) {
25
+ return;
26
+ }
27
+ const indent = this._getIndent();
28
+ super.info(t `${indent}${bgBlue(bold(white(' info ')))} ${blue(message)}`);
29
+ }
30
+ warn(message) {
31
+ if (!shouldLog('warn', this._logLevel)) {
32
+ return;
33
+ }
34
+ const indent = this._getIndent();
35
+ super.warn(t `${indent}${bgYellow(bold(black(' warn ')))} ${yellow(message)}`);
36
+ }
37
+ error(message) {
38
+ if (!shouldLog('error', this._logLevel)) {
39
+ return;
40
+ }
41
+ const indent = this._getIndent();
42
+ super.error(t `${indent}${bgRed(bold(black(' error ')))} ${red(message)}`);
43
+ }
44
+ debug(message) {
45
+ if (!shouldLog('debug', this._logLevel)) {
46
+ return;
47
+ }
48
+ const indent = this._getIndent();
49
+ super.debug(t `${indent}${bgMagenta(bold(black(' debug ')))} ${magenta(message)}`);
50
+ }
51
+ success(message) {
52
+ if (!shouldLog('success', this._logLevel)) {
53
+ return;
54
+ }
55
+ const indent = this._getIndent();
56
+ super.info(t `${indent}${bgGreen(bold(black(' ✓ ')))} ${green(message)}`);
57
+ }
58
+ summary(message) {
59
+ if (!shouldLog('summary', this._logLevel)) {
60
+ return;
61
+ }
62
+ const indent = this._getIndent();
63
+ super.info(t `${indent}${dim(gray(' ╰─'))} ${gray(message)}`);
64
+ }
65
+ startGroup(title) {
66
+ if (!shouldLog('info', this._logLevel)) {
67
+ // Still track group stack even if not logging
68
+ this._groupStack.push(title);
69
+ this._isGroupActive = true;
70
+ return;
71
+ }
72
+ const indent = this._getIndent();
73
+ this._groupStack.push(title);
74
+ this._isGroupActive = true;
75
+ const prefix = this._groupStack.length === 1 ? '┌' : '├';
76
+ super.info(t `${indent}${dim(gray(` ${prefix}─`))} ${bold(white(title))}`);
77
+ }
78
+ endGroup() {
79
+ if (this._groupStack.length > 0) {
80
+ this._groupStack.pop();
81
+ }
82
+ if (this._groupStack.length === 0) {
83
+ this._isGroupActive = false;
84
+ }
85
+ }
86
+ _getIndent() {
87
+ if (this._groupStack.length === 0) {
88
+ return ' ';
89
+ }
90
+ // Each group level adds 2 spaces of indentation
91
+ return ' ' + ' '.repeat(this._groupStack.length);
92
+ }
93
+ }
94
+ //# sourceMappingURL=SeedLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeedLogger.js","sourceRoot":"","sources":["../../src/logging/SeedLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ISeedOptions } from '../config/ISeedOptions.js';
2
+ import type { ISeedResult } from '../config/ISeedResult.js';
3
+ export interface ISeedOrchestrationResult {
4
+ readonly success: boolean;
5
+ readonly totalItemsCreated: number;
6
+ readonly totalDuration: number;
7
+ readonly seedResults: Array<{
8
+ readonly name: string;
9
+ readonly result: ISeedResult;
10
+ }>;
11
+ readonly errors: string[];
12
+ }
13
+ export declare class SeedOrchestrator {
14
+ private readonly _discovery;
15
+ private _logger;
16
+ constructor();
17
+ /**
18
+ * @description Discovers seed configs and merges runtime options.
19
+ * Config file `options` are the defaults, NX executor overrides take priority.
20
+ * This follows the Vite pattern: config file is primary, executor options override.
21
+ */
22
+ executeWithOverrides(rootPath: string, overrides: Partial<ISeedOptions>): Promise<ISeedOrchestrationResult>;
23
+ /**
24
+ * @description Runs seeding with explicit options (no config file merging).
25
+ */
26
+ execute(rootPath: string, options: ISeedOptions): Promise<ISeedOrchestrationResult>;
27
+ private _executeWithComposedConfig;
28
+ private createContext;
29
+ }
30
+ //# sourceMappingURL=SeedOrchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeedOrchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestration/SeedOrchestrator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAU5D,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;KAChC,CAAC,CAAC;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,OAAO,CAAc;;IAgB7B;;;;OAIG;IACU,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAmBxH;;OAEG;IACU,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,wBAAwB,CAAC;YASlF,0BAA0B;YA8G1B,aAAa;CAkJ9B"}