@slingr/cli 0.0.1

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 (144) hide show
  1. package/README.md +320 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +5 -0
  6. package/dist/commands/cli-build.d.ts +9 -0
  7. package/dist/commands/cli-build.d.ts.map +1 -0
  8. package/dist/commands/cli-build.js +36 -0
  9. package/dist/commands/cli-build.js.map +1 -0
  10. package/dist/commands/create-app.d.ts +20 -0
  11. package/dist/commands/create-app.d.ts.map +1 -0
  12. package/dist/commands/create-app.js +246 -0
  13. package/dist/commands/create-app.js.map +1 -0
  14. package/dist/commands/ds.d.ts +28 -0
  15. package/dist/commands/ds.d.ts.map +1 -0
  16. package/dist/commands/ds.js +529 -0
  17. package/dist/commands/ds.js.map +1 -0
  18. package/dist/commands/gql.d.ts +22 -0
  19. package/dist/commands/gql.d.ts.map +1 -0
  20. package/dist/commands/gql.js +340 -0
  21. package/dist/commands/gql.js.map +1 -0
  22. package/dist/commands/infra/down.d.ts +13 -0
  23. package/dist/commands/infra/down.d.ts.map +1 -0
  24. package/dist/commands/infra/down.js +80 -0
  25. package/dist/commands/infra/down.js.map +1 -0
  26. package/dist/commands/infra/up.d.ts +13 -0
  27. package/dist/commands/infra/up.d.ts.map +1 -0
  28. package/dist/commands/infra/up.js +69 -0
  29. package/dist/commands/infra/up.js.map +1 -0
  30. package/dist/commands/infra/update.d.ts +14 -0
  31. package/dist/commands/infra/update.d.ts.map +1 -0
  32. package/dist/commands/infra/update.js +321 -0
  33. package/dist/commands/infra/update.js.map +1 -0
  34. package/dist/commands/run.d.ts +19 -0
  35. package/dist/commands/run.d.ts.map +1 -0
  36. package/dist/commands/run.js +315 -0
  37. package/dist/commands/run.js.map +1 -0
  38. package/dist/commands/setup.d.ts +18 -0
  39. package/dist/commands/setup.d.ts.map +1 -0
  40. package/dist/commands/setup.js +189 -0
  41. package/dist/commands/setup.js.map +1 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +8 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/projectStructure.d.ts +10 -0
  47. package/dist/projectStructure.d.ts.map +1 -0
  48. package/dist/projectStructure.js +153 -0
  49. package/dist/projectStructure.js.map +1 -0
  50. package/dist/scripts/generate-schema.d.ts +10 -0
  51. package/dist/scripts/generate-schema.d.ts.map +1 -0
  52. package/dist/scripts/generate-schema.js +130 -0
  53. package/dist/scripts/generate-schema.js.map +1 -0
  54. package/dist/scripts/generate-schema.ts +143 -0
  55. package/dist/templates/.github/copilot-instructions.md.template +17 -0
  56. package/dist/templates/config/datasource.ts.template +9 -0
  57. package/dist/templates/config/jest.config.ts +30 -0
  58. package/dist/templates/config/jest.setup.ts +1 -0
  59. package/dist/templates/config/tsconfig.json.template +30 -0
  60. package/dist/templates/dataSources/mysql.ts.template +13 -0
  61. package/dist/templates/dataSources/postgres.ts.template +13 -0
  62. package/dist/templates/dataset-generator-script.ts.template +140 -0
  63. package/dist/templates/datasets/mysql-default/Address.jsonl.template +4 -0
  64. package/dist/templates/datasets/mysql-default/App.jsonl.template +5 -0
  65. package/dist/templates/datasets/mysql-default/Company.jsonl.template +4 -0
  66. package/dist/templates/datasets/mysql-default/Person.jsonl.template +3 -0
  67. package/dist/templates/datasets/postgres-default/Address.jsonl.template +4 -0
  68. package/dist/templates/datasets/postgres-default/App.jsonl.template +5 -0
  69. package/dist/templates/datasets/postgres-default/Company.jsonl.template +4 -0
  70. package/dist/templates/datasets/postgres-default/Person.jsonl.template +3 -0
  71. package/dist/templates/docs/app-description.md.template +34 -0
  72. package/dist/templates/gql/codegen.yml.template +25 -0
  73. package/dist/templates/gql/index.ts.template +24 -0
  74. package/dist/templates/gql/operations.graphql.template +30 -0
  75. package/dist/templates/package.json.template +38 -0
  76. package/dist/templates/prompt-analysis.md.template +111 -0
  77. package/dist/templates/prompt-script-generation.md.template +259 -0
  78. package/dist/templates/src/Address.ts.template +31 -0
  79. package/dist/templates/src/App.ts.template +61 -0
  80. package/dist/templates/src/Company.ts.template +48 -0
  81. package/dist/templates/src/Models.test.ts.template +655 -0
  82. package/dist/templates/src/Person.test.ts.template +289 -0
  83. package/dist/templates/src/Person.ts.template +105 -0
  84. package/dist/templates/src/actions/index.ts.template +12 -0
  85. package/dist/templates/src/index.ts +66 -0
  86. package/dist/templates/src/types/gql.d.ts.template +18 -0
  87. package/dist/templates/vscode/extensions.json +3 -0
  88. package/dist/templates/vscode/settings.json +11 -0
  89. package/dist/utils/datasourceParser.d.ts +12 -0
  90. package/dist/utils/datasourceParser.d.ts.map +1 -0
  91. package/dist/utils/datasourceParser.js +91 -0
  92. package/dist/utils/datasourceParser.js.map +1 -0
  93. package/dist/utils/jsonlLoader.d.ts +140 -0
  94. package/dist/utils/jsonlLoader.d.ts.map +1 -0
  95. package/dist/utils/jsonlLoader.js +583 -0
  96. package/dist/utils/jsonlLoader.js.map +1 -0
  97. package/dist/utils/model-analyzer.d.ts +86 -0
  98. package/dist/utils/model-analyzer.d.ts.map +1 -0
  99. package/dist/utils/model-analyzer.js +458 -0
  100. package/dist/utils/model-analyzer.js.map +1 -0
  101. package/dist/utils/portChecker.d.ts +36 -0
  102. package/dist/utils/portChecker.d.ts.map +1 -0
  103. package/dist/utils/portChecker.js +308 -0
  104. package/dist/utils/portChecker.js.map +1 -0
  105. package/dist/utils/synthetic-data-generator.d.ts +74 -0
  106. package/dist/utils/synthetic-data-generator.d.ts.map +1 -0
  107. package/dist/utils/synthetic-data-generator.js +443 -0
  108. package/dist/utils/synthetic-data-generator.js.map +1 -0
  109. package/oclif.manifest.json +435 -0
  110. package/package.json +118 -0
  111. package/src/templates/.github/copilot-instructions.md.template +17 -0
  112. package/src/templates/config/datasource.ts.template +9 -0
  113. package/src/templates/config/jest.config.ts +30 -0
  114. package/src/templates/config/jest.setup.ts +1 -0
  115. package/src/templates/config/tsconfig.json.template +30 -0
  116. package/src/templates/dataSources/mysql.ts.template +13 -0
  117. package/src/templates/dataSources/postgres.ts.template +13 -0
  118. package/src/templates/dataset-generator-script.ts.template +140 -0
  119. package/src/templates/datasets/mysql-default/Address.jsonl.template +4 -0
  120. package/src/templates/datasets/mysql-default/App.jsonl.template +5 -0
  121. package/src/templates/datasets/mysql-default/Company.jsonl.template +4 -0
  122. package/src/templates/datasets/mysql-default/Person.jsonl.template +3 -0
  123. package/src/templates/datasets/postgres-default/Address.jsonl.template +4 -0
  124. package/src/templates/datasets/postgres-default/App.jsonl.template +5 -0
  125. package/src/templates/datasets/postgres-default/Company.jsonl.template +4 -0
  126. package/src/templates/datasets/postgres-default/Person.jsonl.template +3 -0
  127. package/src/templates/docs/app-description.md.template +34 -0
  128. package/src/templates/gql/codegen.yml.template +25 -0
  129. package/src/templates/gql/index.ts.template +24 -0
  130. package/src/templates/gql/operations.graphql.template +30 -0
  131. package/src/templates/package.json.template +38 -0
  132. package/src/templates/prompt-analysis.md.template +111 -0
  133. package/src/templates/prompt-script-generation.md.template +259 -0
  134. package/src/templates/src/Address.ts.template +31 -0
  135. package/src/templates/src/App.ts.template +61 -0
  136. package/src/templates/src/Company.ts.template +48 -0
  137. package/src/templates/src/Models.test.ts.template +655 -0
  138. package/src/templates/src/Person.test.ts.template +289 -0
  139. package/src/templates/src/Person.ts.template +105 -0
  140. package/src/templates/src/actions/index.ts.template +12 -0
  141. package/src/templates/src/index.ts +66 -0
  142. package/src/templates/src/types/gql.d.ts.template +18 -0
  143. package/src/templates/vscode/extensions.json +3 -0
  144. package/src/templates/vscode/settings.json +11 -0
@@ -0,0 +1,443 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SyntheticDataGenerator = void 0;
4
+ const faker_1 = require("@faker-js/faker");
5
+ class SyntheticDataGenerator {
6
+ options;
7
+ generatedData = new Map();
8
+ constructor(options = {}) {
9
+ this.options = {
10
+ count: options.count || 10,
11
+ locale: options.locale || 'en',
12
+ seed: options.seed || Math.floor(Math.random() * 1000),
13
+ relationships: options.relationships || false,
14
+ verbose: options.verbose || false,
15
+ };
16
+ // Set faker seed for consistent results
17
+ faker_1.faker.seed(this.options.seed);
18
+ }
19
+ /**
20
+ * Generate synthetic datasets for multiple models
21
+ */
22
+ async generateDatasets(models, outputDir, datasetName) {
23
+ const results = [];
24
+ if (this.options.verbose) {
25
+ console.log(`🎯 Generating ${this.options.count} records for each of ${models.length} models`);
26
+ }
27
+ // Sort models by dependencies (models with relationships should come after their dependencies)
28
+ const sortedModels = this.sortModelsByDependencies(models);
29
+ for (const model of sortedModels) {
30
+ if (this.options.verbose) {
31
+ console.log(`📝 Generating data for ${model.name}...`);
32
+ }
33
+ const records = await this.generateRecordsForModel(model, models);
34
+ // Store generated records for reference by other models
35
+ this.generatedData.set(model.name, records);
36
+ const filePath = `${outputDir}/${model.dataSource}-${datasetName}/${model.name}.jsonl`;
37
+ results.push({
38
+ modelName: model.name,
39
+ records,
40
+ filePath,
41
+ });
42
+ if (this.options.verbose) {
43
+ console.log(`✅ Generated ${records.length} records for ${model.name}`);
44
+ }
45
+ }
46
+ return results;
47
+ }
48
+ /**
49
+ * Generate records for a single model using Faker
50
+ */
51
+ async generateRecordsForModel(model, allModels) {
52
+ // Use Faker to generate realistic data
53
+ const records = this.generateRecordsWithFaker(model, allModels);
54
+ return records;
55
+ }
56
+ /**
57
+ * Generate records using Faker
58
+ */
59
+ generateRecordsWithFaker(model, allModels) {
60
+ const records = [];
61
+ if (this.options.verbose) {
62
+ console.log(`📋 Fields detected for ${model.name}: ${model.fields.map(f => `${f.name}(${f.type})`).join(', ')}`);
63
+ }
64
+ for (let i = 0; i < this.options.count; i++) {
65
+ const record = {};
66
+ for (const field of model.fields) {
67
+ // Skip fields that are not available
68
+ if (field.available === false) {
69
+ continue;
70
+ }
71
+ // Always include ID fields, even if auto-generated, to maintain referential integrity
72
+ if (field.primaryKey) {
73
+ record[field.name] = faker_1.faker.string.uuid();
74
+ continue;
75
+ }
76
+ record[field.name] = this.generateFieldValue(field, model, allModels);
77
+ }
78
+ records.push(record);
79
+ }
80
+ return records;
81
+ }
82
+ /**
83
+ * Generate a value for a specific field using Faker
84
+ */
85
+ generateFieldValue(field, model, allModels) {
86
+ // Handle required logic
87
+ const isRequired = this.evaluateRequired(field, model);
88
+ // Handle availability logic
89
+ const isAvailable = this.evaluateAvailable(field, model);
90
+ if (!isAvailable) {
91
+ return undefined;
92
+ }
93
+ // Generate null values for non-required fields sometimes
94
+ if (!isRequired && Math.random() < 0.2) {
95
+ return null;
96
+ }
97
+ // Handle relationship fields
98
+ if (field.isRelationship) {
99
+ return this.generateRelationshipValue(field, allModels);
100
+ }
101
+ // Handle composition types (legacy support)
102
+ if (field.type.startsWith('composition:')) {
103
+ const compositionType = field.type.replace('composition:', '');
104
+ return this.generateObjectFromModel(compositionType, allModels, 0);
105
+ }
106
+ // Handle specific field names that need special generation
107
+ if (field.name === 'age') {
108
+ return faker_1.faker.number.int({ min: 18, max: 85 });
109
+ }
110
+ if (field.name === 'version' && field.type === 'text') {
111
+ // Generate version in format AA.BB.CC
112
+ const major = faker_1.faker.number.int({ min: 10, max: 99 });
113
+ const minor = faker_1.faker.number.int({ min: 10, max: 99 });
114
+ const patch = faker_1.faker.number.int({ min: 10, max: 99 });
115
+ return `${major}.${minor}.${patch}`;
116
+ }
117
+ switch (field.type.toLowerCase()) {
118
+ case 'uuid':
119
+ return field.generated ? undefined : faker_1.faker.string.uuid();
120
+ case 'text':
121
+ return this.generateTextValue(field);
122
+ case 'email':
123
+ return faker_1.faker.internet.email();
124
+ case 'integer':
125
+ return this.generateIntegerValue(field);
126
+ case 'float':
127
+ case 'decimal':
128
+ return this.generateFloatValue(field);
129
+ case 'boolean':
130
+ return faker_1.faker.datatype.boolean();
131
+ case 'date':
132
+ return faker_1.faker.date.past().toISOString();
133
+ case 'html':
134
+ return `<p>${faker_1.faker.lorem.sentence()}</p>`;
135
+ default:
136
+ return faker_1.faker.lorem.word();
137
+ }
138
+ }
139
+ /**
140
+ * Generate a relationship value (reference, composition, or shared composition)
141
+ */
142
+ generateRelationshipValue(field, allModels) {
143
+ if (this.options.verbose) {
144
+ console.log(`🔗 Generating relationship ${field.name} (${field.relationshipType}) -> ${field.relatedModel}`);
145
+ console.log(`📊 Available cached data: ${Array.from(this.generatedData.keys()).join(', ')}`);
146
+ }
147
+ switch (field.relationshipType) {
148
+ case 'composition':
149
+ case 'sharedComposition':
150
+ // For compositions, generate embedded object based on related model
151
+ return this.generateObjectFromModel(field.relatedModel, allModels);
152
+ case 'reference':
153
+ // For references, try to reuse existing generated data
154
+ if (field.relatedModel && this.generatedData.has(field.relatedModel)) {
155
+ const existingRecords = this.generatedData.get(field.relatedModel);
156
+ if (existingRecords.length > 0) {
157
+ // Randomly select an existing record
158
+ const randomIndex = Math.floor(Math.random() * existingRecords.length);
159
+ const selectedRecord = existingRecords[randomIndex];
160
+ if (this.options.verbose) {
161
+ console.log(`✅ Reusing existing ${field.relatedModel} record: ${selectedRecord.name || selectedRecord.id || 'unnamed'}`);
162
+ }
163
+ return selectedRecord;
164
+ }
165
+ }
166
+ if (this.options.verbose) {
167
+ console.log(`⚠️ No existing ${field.relatedModel} records found, generating new object`);
168
+ }
169
+ // Fallback: generate new object if no existing data available
170
+ return this.generateObjectFromModel(field.relatedModel, allModels, 0);
171
+ default:
172
+ // Unknown relationship type, fallback to basic object
173
+ return {
174
+ id: faker_1.faker.string.uuid(),
175
+ name: faker_1.faker.lorem.words(2),
176
+ };
177
+ }
178
+ }
179
+ /**
180
+ * Generate an object dynamically based on model metadata
181
+ */
182
+ generateObjectFromModel(modelName, allModels, depth = 0) {
183
+ // Prevent infinite recursion by limiting depth
184
+ const MAX_DEPTH = 2;
185
+ if (!modelName) {
186
+ return {
187
+ id: faker_1.faker.string.uuid(),
188
+ name: faker_1.faker.lorem.words(2),
189
+ };
190
+ }
191
+ // Find the model metadata
192
+ const targetModel = allModels.find(m => m.name === modelName);
193
+ if (!targetModel) {
194
+ // Fallback for unknown models - use generic structure
195
+ return {
196
+ id: faker_1.faker.string.uuid(),
197
+ name: faker_1.faker.lorem.words(2),
198
+ };
199
+ }
200
+ // Generate object based on model's fields
201
+ const obj = {};
202
+ for (const field of targetModel.fields) {
203
+ // Skip unavailable fields
204
+ if (field.available === false) {
205
+ continue;
206
+ }
207
+ // Always include ID fields for referential integrity
208
+ if (field.primaryKey) {
209
+ obj[field.name] = faker_1.faker.string.uuid();
210
+ continue;
211
+ }
212
+ // Avoid infinite recursion by limiting relationship depth
213
+ if (field.isRelationship) {
214
+ if (depth >= MAX_DEPTH) {
215
+ // At max depth, just include the ID
216
+ obj[field.name] = {
217
+ id: faker_1.faker.string.uuid(),
218
+ };
219
+ }
220
+ else {
221
+ // Recursively generate nested object
222
+ obj[field.name] = this.generateObjectFromModel(field.relatedModel, allModels, depth + 1);
223
+ }
224
+ }
225
+ else {
226
+ // Generate regular field value
227
+ obj[field.name] = this.generateSimpleFieldValue(field);
228
+ }
229
+ }
230
+ return obj;
231
+ }
232
+ /**
233
+ * Generate a simple field value without relationships to avoid recursion
234
+ */
235
+ generateSimpleFieldValue(field) {
236
+ // Handle specific field names that need special generation
237
+ if (field.name === 'age') {
238
+ return faker_1.faker.number.int({ min: 18, max: 85 });
239
+ }
240
+ if (field.name === 'version' && field.type === 'text') {
241
+ // Generate version in format AA.BB.CC
242
+ const major = faker_1.faker.number.int({ min: 10, max: 99 });
243
+ const minor = faker_1.faker.number.int({ min: 10, max: 99 });
244
+ const patch = faker_1.faker.number.int({ min: 10, max: 99 });
245
+ return `${major}.${minor}.${patch}`;
246
+ }
247
+ switch (field.type.toLowerCase()) {
248
+ case 'uuid':
249
+ return field.generated ? undefined : faker_1.faker.string.uuid();
250
+ case 'text':
251
+ return this.generateTextValue(field);
252
+ case 'email':
253
+ return faker_1.faker.internet.email();
254
+ case 'integer':
255
+ return this.generateIntegerValue(field);
256
+ case 'float':
257
+ case 'decimal':
258
+ return this.generateFloatValue(field);
259
+ case 'boolean':
260
+ return faker_1.faker.datatype.boolean();
261
+ case 'date':
262
+ return faker_1.faker.date.past().toISOString();
263
+ case 'html':
264
+ return `<p>${faker_1.faker.lorem.sentence()}</p>`;
265
+ default:
266
+ return faker_1.faker.lorem.word();
267
+ }
268
+ }
269
+ /**
270
+ * Generate text value respecting constraints
271
+ */
272
+ generateTextValue(field) {
273
+ let text;
274
+ // Generate based on field name hints
275
+ const fieldName = field.name.toLowerCase();
276
+ if (fieldName.includes('name')) {
277
+ if (fieldName.includes('first')) {
278
+ text = faker_1.faker.person.firstName();
279
+ }
280
+ else if (fieldName.includes('last')) {
281
+ text = faker_1.faker.person.lastName();
282
+ }
283
+ else if (fieldName.includes('company')) {
284
+ text = faker_1.faker.company.name();
285
+ }
286
+ else {
287
+ text = faker_1.faker.person.fullName();
288
+ }
289
+ }
290
+ else if (fieldName.includes('phone')) {
291
+ text = faker_1.faker.phone.number();
292
+ }
293
+ else if (fieldName.includes('address')) {
294
+ text = faker_1.faker.location.streetAddress();
295
+ }
296
+ else if (fieldName.includes('city')) {
297
+ text = faker_1.faker.location.city();
298
+ }
299
+ else if (fieldName.includes('country')) {
300
+ text = faker_1.faker.location.country();
301
+ }
302
+ else {
303
+ text = faker_1.faker.lorem.words(Math.floor(Math.random() * 3) + 1);
304
+ }
305
+ // Apply length constraints
306
+ if (field.minLength || field.maxLength) {
307
+ const minLen = field.minLength || 1;
308
+ const maxLen = field.maxLength || 100;
309
+ if (text.length < minLen) {
310
+ text = text.padEnd(minLen, 'x');
311
+ }
312
+ else if (text.length > maxLen) {
313
+ text = text.substring(0, maxLen);
314
+ }
315
+ }
316
+ // Apply regex constraints (basic validation)
317
+ if (field.regex) {
318
+ try {
319
+ const regex = new RegExp(field.regex);
320
+ if (!regex.test(text)) {
321
+ // Simple fallback for common patterns
322
+ if (field.regex.includes('[a-zA-Z]')) {
323
+ text = faker_1.faker.lorem.word().substring(0, field.maxLength || 10);
324
+ }
325
+ }
326
+ }
327
+ catch (error) {
328
+ // Ignore regex parsing errors
329
+ }
330
+ }
331
+ return text;
332
+ }
333
+ /**
334
+ * Generate integer value respecting constraints
335
+ */
336
+ generateIntegerValue(field) {
337
+ const min = field.min || 0;
338
+ const max = field.max || 100;
339
+ // Special handling for age field
340
+ if (field.name.toLowerCase().includes('age')) {
341
+ return faker_1.faker.number.int({ min: 1, max: 120 });
342
+ }
343
+ return faker_1.faker.number.int({ min, max });
344
+ }
345
+ /**
346
+ * Generate float value respecting constraints
347
+ */
348
+ generateFloatValue(field) {
349
+ const min = field.min || 0;
350
+ const max = field.max || 1000;
351
+ const precision = field.precision || 10;
352
+ const scale = field.scale || 2;
353
+ const value = faker_1.faker.number.float({ min, max, precision: Math.pow(10, -scale) });
354
+ return parseFloat(value.toFixed(scale));
355
+ }
356
+ /**
357
+ * Evaluate required field condition
358
+ */
359
+ evaluateRequired(field, model) {
360
+ if (typeof field.required === 'boolean') {
361
+ return field.required;
362
+ }
363
+ if (typeof field.required === 'string') {
364
+ // Simple evaluation for age-based requirements
365
+ if (field.required.includes('age < 18')) {
366
+ // This is a simplification - in real implementation you'd parse the function
367
+ return Math.random() < 0.3; // 30% chance of being under 18
368
+ }
369
+ }
370
+ return false;
371
+ }
372
+ /**
373
+ * Evaluate available field condition
374
+ */
375
+ evaluateAvailable(field, model) {
376
+ if (field.available === false) {
377
+ return false;
378
+ }
379
+ if (typeof field.available === 'boolean') {
380
+ return field.available;
381
+ }
382
+ if (typeof field.available === 'string') {
383
+ // Simple evaluation for age-based availability
384
+ if (field.available.includes('age >= 18')) {
385
+ return Math.random() < 0.7; // 70% chance of being 18 or older
386
+ }
387
+ }
388
+ return true;
389
+ }
390
+ /**
391
+ * Sort models by dependencies to handle relationships properly
392
+ */
393
+ sortModelsByDependencies(models) {
394
+ // Create a map of model dependencies
395
+ const dependencyMap = new Map();
396
+ models.forEach(model => {
397
+ const dependencies = [];
398
+ model.fields.forEach(field => {
399
+ if (field.isRelationship && field.relationshipType === 'reference' && field.relatedModel) {
400
+ dependencies.push(field.relatedModel);
401
+ }
402
+ });
403
+ dependencyMap.set(model.name, dependencies);
404
+ });
405
+ // Topological sort to order models by dependencies
406
+ const sorted = [];
407
+ const visited = new Set();
408
+ const temp = new Set();
409
+ const visit = (modelName) => {
410
+ if (temp.has(modelName)) {
411
+ // Circular dependency detected, just continue
412
+ return;
413
+ }
414
+ if (visited.has(modelName)) {
415
+ return;
416
+ }
417
+ temp.add(modelName);
418
+ const dependencies = dependencyMap.get(modelName) || [];
419
+ dependencies.forEach(dep => {
420
+ if (models.find(m => m.name === dep)) {
421
+ visit(dep);
422
+ }
423
+ });
424
+ temp.delete(modelName);
425
+ visited.add(modelName);
426
+ const model = models.find(m => m.name === modelName);
427
+ if (model) {
428
+ sorted.push(model);
429
+ }
430
+ };
431
+ models.forEach(model => {
432
+ if (!visited.has(model.name)) {
433
+ visit(model.name);
434
+ }
435
+ });
436
+ if (this.options.verbose) {
437
+ console.log(`📋 Dependency-sorted models: ${sorted.map(m => m.name).join(' → ')}`);
438
+ }
439
+ return sorted;
440
+ }
441
+ }
442
+ exports.SyntheticDataGenerator = SyntheticDataGenerator;
443
+ //# sourceMappingURL=synthetic-data-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthetic-data-generator.js","sourceRoot":"","sources":["../../src/utils/synthetic-data-generator.ts"],"names":[],"mappings":"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"}