@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.
- package/README.md +320 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +5 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +5 -0
- package/dist/commands/cli-build.d.ts +9 -0
- package/dist/commands/cli-build.d.ts.map +1 -0
- package/dist/commands/cli-build.js +36 -0
- package/dist/commands/cli-build.js.map +1 -0
- package/dist/commands/create-app.d.ts +20 -0
- package/dist/commands/create-app.d.ts.map +1 -0
- package/dist/commands/create-app.js +246 -0
- package/dist/commands/create-app.js.map +1 -0
- package/dist/commands/ds.d.ts +28 -0
- package/dist/commands/ds.d.ts.map +1 -0
- package/dist/commands/ds.js +529 -0
- package/dist/commands/ds.js.map +1 -0
- package/dist/commands/gql.d.ts +22 -0
- package/dist/commands/gql.d.ts.map +1 -0
- package/dist/commands/gql.js +340 -0
- package/dist/commands/gql.js.map +1 -0
- package/dist/commands/infra/down.d.ts +13 -0
- package/dist/commands/infra/down.d.ts.map +1 -0
- package/dist/commands/infra/down.js +80 -0
- package/dist/commands/infra/down.js.map +1 -0
- package/dist/commands/infra/up.d.ts +13 -0
- package/dist/commands/infra/up.d.ts.map +1 -0
- package/dist/commands/infra/up.js +69 -0
- package/dist/commands/infra/up.js.map +1 -0
- package/dist/commands/infra/update.d.ts +14 -0
- package/dist/commands/infra/update.d.ts.map +1 -0
- package/dist/commands/infra/update.js +321 -0
- package/dist/commands/infra/update.js.map +1 -0
- package/dist/commands/run.d.ts +19 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +315 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/setup.d.ts +18 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +189 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/projectStructure.d.ts +10 -0
- package/dist/projectStructure.d.ts.map +1 -0
- package/dist/projectStructure.js +153 -0
- package/dist/projectStructure.js.map +1 -0
- package/dist/scripts/generate-schema.d.ts +10 -0
- package/dist/scripts/generate-schema.d.ts.map +1 -0
- package/dist/scripts/generate-schema.js +130 -0
- package/dist/scripts/generate-schema.js.map +1 -0
- package/dist/scripts/generate-schema.ts +143 -0
- package/dist/templates/.github/copilot-instructions.md.template +17 -0
- package/dist/templates/config/datasource.ts.template +9 -0
- package/dist/templates/config/jest.config.ts +30 -0
- package/dist/templates/config/jest.setup.ts +1 -0
- package/dist/templates/config/tsconfig.json.template +30 -0
- package/dist/templates/dataSources/mysql.ts.template +13 -0
- package/dist/templates/dataSources/postgres.ts.template +13 -0
- package/dist/templates/dataset-generator-script.ts.template +140 -0
- package/dist/templates/datasets/mysql-default/Address.jsonl.template +4 -0
- package/dist/templates/datasets/mysql-default/App.jsonl.template +5 -0
- package/dist/templates/datasets/mysql-default/Company.jsonl.template +4 -0
- package/dist/templates/datasets/mysql-default/Person.jsonl.template +3 -0
- package/dist/templates/datasets/postgres-default/Address.jsonl.template +4 -0
- package/dist/templates/datasets/postgres-default/App.jsonl.template +5 -0
- package/dist/templates/datasets/postgres-default/Company.jsonl.template +4 -0
- package/dist/templates/datasets/postgres-default/Person.jsonl.template +3 -0
- package/dist/templates/docs/app-description.md.template +34 -0
- package/dist/templates/gql/codegen.yml.template +25 -0
- package/dist/templates/gql/index.ts.template +24 -0
- package/dist/templates/gql/operations.graphql.template +30 -0
- package/dist/templates/package.json.template +38 -0
- package/dist/templates/prompt-analysis.md.template +111 -0
- package/dist/templates/prompt-script-generation.md.template +259 -0
- package/dist/templates/src/Address.ts.template +31 -0
- package/dist/templates/src/App.ts.template +61 -0
- package/dist/templates/src/Company.ts.template +48 -0
- package/dist/templates/src/Models.test.ts.template +655 -0
- package/dist/templates/src/Person.test.ts.template +289 -0
- package/dist/templates/src/Person.ts.template +105 -0
- package/dist/templates/src/actions/index.ts.template +12 -0
- package/dist/templates/src/index.ts +66 -0
- package/dist/templates/src/types/gql.d.ts.template +18 -0
- package/dist/templates/vscode/extensions.json +3 -0
- package/dist/templates/vscode/settings.json +11 -0
- package/dist/utils/datasourceParser.d.ts +12 -0
- package/dist/utils/datasourceParser.d.ts.map +1 -0
- package/dist/utils/datasourceParser.js +91 -0
- package/dist/utils/datasourceParser.js.map +1 -0
- package/dist/utils/jsonlLoader.d.ts +140 -0
- package/dist/utils/jsonlLoader.d.ts.map +1 -0
- package/dist/utils/jsonlLoader.js +583 -0
- package/dist/utils/jsonlLoader.js.map +1 -0
- package/dist/utils/model-analyzer.d.ts +86 -0
- package/dist/utils/model-analyzer.d.ts.map +1 -0
- package/dist/utils/model-analyzer.js +458 -0
- package/dist/utils/model-analyzer.js.map +1 -0
- package/dist/utils/portChecker.d.ts +36 -0
- package/dist/utils/portChecker.d.ts.map +1 -0
- package/dist/utils/portChecker.js +308 -0
- package/dist/utils/portChecker.js.map +1 -0
- package/dist/utils/synthetic-data-generator.d.ts +74 -0
- package/dist/utils/synthetic-data-generator.d.ts.map +1 -0
- package/dist/utils/synthetic-data-generator.js +443 -0
- package/dist/utils/synthetic-data-generator.js.map +1 -0
- package/oclif.manifest.json +435 -0
- package/package.json +118 -0
- package/src/templates/.github/copilot-instructions.md.template +17 -0
- package/src/templates/config/datasource.ts.template +9 -0
- package/src/templates/config/jest.config.ts +30 -0
- package/src/templates/config/jest.setup.ts +1 -0
- package/src/templates/config/tsconfig.json.template +30 -0
- package/src/templates/dataSources/mysql.ts.template +13 -0
- package/src/templates/dataSources/postgres.ts.template +13 -0
- package/src/templates/dataset-generator-script.ts.template +140 -0
- package/src/templates/datasets/mysql-default/Address.jsonl.template +4 -0
- package/src/templates/datasets/mysql-default/App.jsonl.template +5 -0
- package/src/templates/datasets/mysql-default/Company.jsonl.template +4 -0
- package/src/templates/datasets/mysql-default/Person.jsonl.template +3 -0
- package/src/templates/datasets/postgres-default/Address.jsonl.template +4 -0
- package/src/templates/datasets/postgres-default/App.jsonl.template +5 -0
- package/src/templates/datasets/postgres-default/Company.jsonl.template +4 -0
- package/src/templates/datasets/postgres-default/Person.jsonl.template +3 -0
- package/src/templates/docs/app-description.md.template +34 -0
- package/src/templates/gql/codegen.yml.template +25 -0
- package/src/templates/gql/index.ts.template +24 -0
- package/src/templates/gql/operations.graphql.template +30 -0
- package/src/templates/package.json.template +38 -0
- package/src/templates/prompt-analysis.md.template +111 -0
- package/src/templates/prompt-script-generation.md.template +259 -0
- package/src/templates/src/Address.ts.template +31 -0
- package/src/templates/src/App.ts.template +61 -0
- package/src/templates/src/Company.ts.template +48 -0
- package/src/templates/src/Models.test.ts.template +655 -0
- package/src/templates/src/Person.test.ts.template +289 -0
- package/src/templates/src/Person.ts.template +105 -0
- package/src/templates/src/actions/index.ts.template +12 -0
- package/src/templates/src/index.ts +66 -0
- package/src/templates/src/types/gql.d.ts.template +18 -0
- package/src/templates/vscode/extensions.json +3 -0
- 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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"}
|