@flusys/nestjs-core 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -580
- package/cjs/config/env-config.service.js +11 -8
- package/cjs/docs/docs.config.js +20 -0
- package/cjs/index.js +0 -1
- package/config/env-config.service.d.ts +2 -1
- package/docs/docs.config.d.ts +1 -0
- package/fesm/config/env-config.service.js +11 -8
- package/fesm/docs/docs.config.js +20 -0
- package/fesm/index.js +0 -2
- package/index.d.ts +0 -1
- package/interfaces/base-entity.interface.d.ts +0 -3
- package/package.json +1 -1
- package/cjs/seeders/base-seeder.js +0 -76
- package/cjs/seeders/cli.js +0 -291
- package/cjs/seeders/data-generator.js +0 -226
- package/cjs/seeders/entity-reader.js +0 -129
- package/cjs/seeders/field-patterns.js +0 -182
- package/cjs/seeders/index.js +0 -85
- package/cjs/seeders/seed-config.js +0 -62
- package/cjs/seeders/seed-runner.js +0 -281
- package/fesm/seeders/base-seeder.js +0 -66
- package/fesm/seeders/cli.js +0 -249
- package/fesm/seeders/data-generator.js +0 -216
- package/fesm/seeders/entity-reader.js +0 -119
- package/fesm/seeders/field-patterns.js +0 -143
- package/fesm/seeders/index.js +0 -7
- package/fesm/seeders/seed-config.js +0 -35
- package/fesm/seeders/seed-runner.js +0 -263
- package/seeders/base-seeder.d.ts +0 -14
- package/seeders/cli.d.ts +0 -3
- package/seeders/data-generator.d.ts +0 -15
- package/seeders/entity-reader.d.ts +0 -44
- package/seeders/field-patterns.d.ts +0 -12
- package/seeders/index.d.ts +0 -7
- package/seeders/seed-config.d.ts +0 -12
- package/seeders/seed-runner.d.ts +0 -48
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "DataGenerator", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return DataGenerator;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _faker = require("@faker-js/faker");
|
|
12
|
-
const _fieldpatterns = require("./field-patterns");
|
|
13
|
-
let DataGenerator = class DataGenerator {
|
|
14
|
-
generateValue(column) {
|
|
15
|
-
if (column.isGenerated) return undefined;
|
|
16
|
-
// Handle nullable fields (50% chance of null)
|
|
17
|
-
if (column.isNullable && _faker.faker.datatype.boolean()) return null;
|
|
18
|
-
// Check for enum
|
|
19
|
-
if (column.enum && column.enum.length > 0) {
|
|
20
|
-
return _faker.faker.helpers.arrayElement(column.enum);
|
|
21
|
-
}
|
|
22
|
-
// Generate based on field pattern
|
|
23
|
-
const pattern = (0, _fieldpatterns.detectFieldPattern)(column);
|
|
24
|
-
if (pattern) {
|
|
25
|
-
const value = this.generateByPattern(pattern, column);
|
|
26
|
-
if (value !== undefined) return value;
|
|
27
|
-
}
|
|
28
|
-
// Generate based on column type
|
|
29
|
-
return this.generateByType(column);
|
|
30
|
-
}
|
|
31
|
-
generateEntity(columns) {
|
|
32
|
-
const entity = {};
|
|
33
|
-
for (const column of columns){
|
|
34
|
-
const value = this.generateValue(column);
|
|
35
|
-
if (value !== undefined) {
|
|
36
|
-
entity[column.propertyName] = value;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return entity;
|
|
40
|
-
}
|
|
41
|
-
generateByPattern(pattern, column) {
|
|
42
|
-
switch(pattern){
|
|
43
|
-
case 'skip':
|
|
44
|
-
return undefined;
|
|
45
|
-
case 'null':
|
|
46
|
-
return null;
|
|
47
|
-
case 'boolean':
|
|
48
|
-
return _faker.faker.datatype.boolean();
|
|
49
|
-
case 'token':
|
|
50
|
-
return _faker.faker.string.alphanumeric((0, _fieldpatterns.getTokenLength)(column));
|
|
51
|
-
case 'firstName':
|
|
52
|
-
return _faker.faker.person.firstName();
|
|
53
|
-
case 'lastName':
|
|
54
|
-
return _faker.faker.person.lastName();
|
|
55
|
-
case 'fullName':
|
|
56
|
-
return _faker.faker.person.fullName();
|
|
57
|
-
case 'email':
|
|
58
|
-
return _faker.faker.internet.email().toLowerCase();
|
|
59
|
-
case 'phone':
|
|
60
|
-
return _faker.faker.phone.number();
|
|
61
|
-
case 'address':
|
|
62
|
-
return _faker.faker.location.streetAddress();
|
|
63
|
-
case 'street':
|
|
64
|
-
return _faker.faker.location.street();
|
|
65
|
-
case 'city':
|
|
66
|
-
return _faker.faker.location.city();
|
|
67
|
-
case 'state':
|
|
68
|
-
return _faker.faker.location.state();
|
|
69
|
-
case 'country':
|
|
70
|
-
return _faker.faker.location.country();
|
|
71
|
-
case 'zipCode':
|
|
72
|
-
return _faker.faker.location.zipCode();
|
|
73
|
-
case 'url':
|
|
74
|
-
return _faker.faker.internet.url();
|
|
75
|
-
case 'domain':
|
|
76
|
-
return _faker.faker.internet.domainName();
|
|
77
|
-
case 'slug':
|
|
78
|
-
return _faker.faker.helpers.slugify(_faker.faker.lorem.words(3)).toLowerCase();
|
|
79
|
-
case 'description':
|
|
80
|
-
return _faker.faker.lorem.paragraph();
|
|
81
|
-
case 'summary':
|
|
82
|
-
return _faker.faker.lorem.sentence();
|
|
83
|
-
case 'content':
|
|
84
|
-
return _faker.faker.lorem.paragraphs(3);
|
|
85
|
-
case 'title':
|
|
86
|
-
return _faker.faker.lorem.sentence();
|
|
87
|
-
case 'username':
|
|
88
|
-
return _faker.faker.internet.username();
|
|
89
|
-
case 'password':
|
|
90
|
-
return '$2b$12$dummy.hashed.password.value';
|
|
91
|
-
case 'birthdate':
|
|
92
|
-
return _faker.faker.date.birthdate({
|
|
93
|
-
min: 18,
|
|
94
|
-
max: 80,
|
|
95
|
-
mode: 'age'
|
|
96
|
-
});
|
|
97
|
-
case 'futureDate':
|
|
98
|
-
return _faker.faker.date.future();
|
|
99
|
-
case 'recentDateOrNull':
|
|
100
|
-
return _faker.faker.datatype.boolean() ? _faker.faker.date.recent() : null;
|
|
101
|
-
case 'serial':
|
|
102
|
-
return _faker.faker.number.int({
|
|
103
|
-
min: 1,
|
|
104
|
-
max: 100
|
|
105
|
-
});
|
|
106
|
-
case 'company':
|
|
107
|
-
return _faker.faker.company.name();
|
|
108
|
-
case 'emailProvider':
|
|
109
|
-
return _faker.faker.helpers.arrayElement([
|
|
110
|
-
'smtp',
|
|
111
|
-
'sendgrid',
|
|
112
|
-
'mailgun',
|
|
113
|
-
'ses',
|
|
114
|
-
'postmark'
|
|
115
|
-
]);
|
|
116
|
-
case 'formAccessType':
|
|
117
|
-
return _faker.faker.helpers.arrayElement([
|
|
118
|
-
'public',
|
|
119
|
-
'authenticated',
|
|
120
|
-
'permission'
|
|
121
|
-
]);
|
|
122
|
-
case 'notificationType':
|
|
123
|
-
return _faker.faker.helpers.arrayElement([
|
|
124
|
-
'INFO',
|
|
125
|
-
'SUCCESS',
|
|
126
|
-
'WARNING',
|
|
127
|
-
'ERROR'
|
|
128
|
-
]);
|
|
129
|
-
case 'languageCode':
|
|
130
|
-
return _faker.faker.helpers.arrayElement([
|
|
131
|
-
'en',
|
|
132
|
-
'ar',
|
|
133
|
-
'bn',
|
|
134
|
-
'es',
|
|
135
|
-
'fr',
|
|
136
|
-
'de',
|
|
137
|
-
'zh',
|
|
138
|
-
'ja',
|
|
139
|
-
'ko',
|
|
140
|
-
'hi'
|
|
141
|
-
]);
|
|
142
|
-
case 'languageDirection':
|
|
143
|
-
return _faker.faker.helpers.arrayElement([
|
|
144
|
-
'ltr',
|
|
145
|
-
'rtl'
|
|
146
|
-
]);
|
|
147
|
-
default:
|
|
148
|
-
return undefined;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
generateByType(column) {
|
|
152
|
-
const category = (0, _fieldpatterns.detectTypeCategory)(column.type);
|
|
153
|
-
switch(category){
|
|
154
|
-
case 'string':
|
|
155
|
-
return this.generateString(column);
|
|
156
|
-
case 'integer':
|
|
157
|
-
return _faker.faker.number.int({
|
|
158
|
-
min: 1,
|
|
159
|
-
max: 1000
|
|
160
|
-
});
|
|
161
|
-
case 'decimal':
|
|
162
|
-
return _faker.faker.number.float({
|
|
163
|
-
min: 0,
|
|
164
|
-
max: 10000,
|
|
165
|
-
fractionDigits: column.scale || 2
|
|
166
|
-
});
|
|
167
|
-
case 'boolean':
|
|
168
|
-
return _faker.faker.datatype.boolean();
|
|
169
|
-
case 'date':
|
|
170
|
-
case 'timestamp':
|
|
171
|
-
return _faker.faker.date.recent({
|
|
172
|
-
days: 30
|
|
173
|
-
});
|
|
174
|
-
case 'time':
|
|
175
|
-
return _faker.faker.date.recent().toTimeString().split(' ')[0];
|
|
176
|
-
case 'uuid':
|
|
177
|
-
return _faker.faker.string.uuid();
|
|
178
|
-
case 'json':
|
|
179
|
-
return {
|
|
180
|
-
key1: _faker.faker.lorem.word(),
|
|
181
|
-
key2: _faker.faker.number.int({
|
|
182
|
-
min: 1,
|
|
183
|
-
max: 100
|
|
184
|
-
})
|
|
185
|
-
};
|
|
186
|
-
case 'array':
|
|
187
|
-
return [
|
|
188
|
-
_faker.faker.lorem.word(),
|
|
189
|
-
_faker.faker.lorem.word()
|
|
190
|
-
];
|
|
191
|
-
default:
|
|
192
|
-
return _faker.faker.lorem.word();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
generateString(column) {
|
|
196
|
-
const maxLength = typeof column.length === 'number' ? column.length : 255;
|
|
197
|
-
const category = (0, _fieldpatterns.getStringLengthCategory)(column.length);
|
|
198
|
-
switch(category){
|
|
199
|
-
case 'word':
|
|
200
|
-
return _faker.faker.lorem.word().substring(0, maxLength);
|
|
201
|
-
case 'sentence':
|
|
202
|
-
return _faker.faker.lorem.sentence().substring(0, maxLength);
|
|
203
|
-
case 'paragraph':
|
|
204
|
-
return _faker.faker.lorem.paragraph().substring(0, maxLength);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
generateRelationId(relatedEntities) {
|
|
208
|
-
if (relatedEntities.length === 0) return null;
|
|
209
|
-
return _faker.faker.helpers.arrayElement(relatedEntities).id;
|
|
210
|
-
}
|
|
211
|
-
generateRelationIds(relatedEntities, min = 1, max = 3) {
|
|
212
|
-
if (relatedEntities.length === 0) return [];
|
|
213
|
-
const count = _faker.faker.number.int({
|
|
214
|
-
min,
|
|
215
|
-
max: Math.min(max, relatedEntities.length)
|
|
216
|
-
});
|
|
217
|
-
return _faker.faker.helpers.arrayElements(relatedEntities, count).map((e)=>e.id);
|
|
218
|
-
}
|
|
219
|
-
constructor(locale = 'en'){
|
|
220
|
-
_faker.faker.setDefaultRefDate(new Date());
|
|
221
|
-
if (locale !== 'en') {
|
|
222
|
-
// @ts-expect-error - faker locale property access
|
|
223
|
-
_faker.faker.locale = locale;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
};
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "EntityReader", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return EntityReader;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
function _define_property(obj, key, value) {
|
|
12
|
-
if (key in obj) {
|
|
13
|
-
Object.defineProperty(obj, key, {
|
|
14
|
-
value: value,
|
|
15
|
-
enumerable: true,
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true
|
|
18
|
-
});
|
|
19
|
-
} else {
|
|
20
|
-
obj[key] = value;
|
|
21
|
-
}
|
|
22
|
-
return obj;
|
|
23
|
-
}
|
|
24
|
-
let EntityReader = class EntityReader {
|
|
25
|
-
getAllEntities() {
|
|
26
|
-
return this.dataSource.entityMetadatas;
|
|
27
|
-
}
|
|
28
|
-
getEntityInfo(entityName) {
|
|
29
|
-
const metadata = this.findEntityMetadata(entityName);
|
|
30
|
-
if (!metadata) {
|
|
31
|
-
throw new Error(`Entity ${entityName} not found in DataSource`);
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
name: metadata.name,
|
|
35
|
-
tableName: metadata.tableName,
|
|
36
|
-
columns: this.extractColumns(metadata),
|
|
37
|
-
relations: this.extractRelations(metadata),
|
|
38
|
-
hasSoftDelete: metadata.deleteDateColumn !== undefined,
|
|
39
|
-
hasCompany: this.hasCompanyColumn(metadata)
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
getSeedingOrder(skipEntities = []) {
|
|
43
|
-
const entities = this.getAllEntities().filter((e)=>!skipEntities.includes(e.name) && !skipEntities.includes(e.tableName));
|
|
44
|
-
const graph = this.buildDependencyGraph(entities);
|
|
45
|
-
return this.topologicalSort(graph);
|
|
46
|
-
}
|
|
47
|
-
findEntityMetadata(entityName) {
|
|
48
|
-
return this.getAllEntities().find((e)=>e.name === entityName || e.tableName === entityName);
|
|
49
|
-
}
|
|
50
|
-
extractColumns(metadata) {
|
|
51
|
-
return metadata.columns.map((col)=>({
|
|
52
|
-
name: col.databaseName,
|
|
53
|
-
propertyName: col.propertyName,
|
|
54
|
-
type: this.getColumnTypeString(col.type),
|
|
55
|
-
length: col.length,
|
|
56
|
-
isNullable: col.isNullable,
|
|
57
|
-
isUnique: 'isUnique' in col ? col.isUnique === true : false,
|
|
58
|
-
isPrimary: col.isPrimary,
|
|
59
|
-
isGenerated: col.isGenerated,
|
|
60
|
-
default: col.default,
|
|
61
|
-
enum: col.enum ? Object.values(col.enum) : undefined,
|
|
62
|
-
precision: col.precision ?? undefined,
|
|
63
|
-
scale: col.scale ?? undefined
|
|
64
|
-
}));
|
|
65
|
-
}
|
|
66
|
-
extractRelations(metadata) {
|
|
67
|
-
return metadata.relations.map((rel)=>({
|
|
68
|
-
propertyName: rel.propertyName,
|
|
69
|
-
type: rel.relationType,
|
|
70
|
-
targetEntity: rel.inverseEntityMetadata.name,
|
|
71
|
-
isNullable: rel.isNullable,
|
|
72
|
-
joinColumnName: rel.joinColumns?.[0]?.databaseName
|
|
73
|
-
}));
|
|
74
|
-
}
|
|
75
|
-
hasCompanyColumn(metadata) {
|
|
76
|
-
return metadata.columns.some((col)=>col.propertyName === 'companyId' || col.databaseName === 'company_id');
|
|
77
|
-
}
|
|
78
|
-
getColumnTypeString(type) {
|
|
79
|
-
if (typeof type === 'string') {
|
|
80
|
-
return type;
|
|
81
|
-
}
|
|
82
|
-
if (typeof type === 'function') {
|
|
83
|
-
return type.name.toLowerCase();
|
|
84
|
-
}
|
|
85
|
-
return 'unknown';
|
|
86
|
-
}
|
|
87
|
-
buildDependencyGraph(entities) {
|
|
88
|
-
const graph = new Map();
|
|
89
|
-
for (const entity of entities){
|
|
90
|
-
const dependencies = [];
|
|
91
|
-
for (const relation of entity.relations){
|
|
92
|
-
if (relation.relationType === 'many-to-one' && !relation.isNullable) {
|
|
93
|
-
dependencies.push(relation.inverseEntityMetadata.name);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
graph.set(entity.name, dependencies);
|
|
97
|
-
}
|
|
98
|
-
return graph;
|
|
99
|
-
}
|
|
100
|
-
topologicalSort(graph) {
|
|
101
|
-
const sorted = [];
|
|
102
|
-
const visited = new Set();
|
|
103
|
-
const visiting = new Set();
|
|
104
|
-
const visit = (node)=>{
|
|
105
|
-
if (visited.has(node)) return;
|
|
106
|
-
if (visiting.has(node)) {
|
|
107
|
-
throw new Error(`Circular dependency detected involving ${node}`);
|
|
108
|
-
}
|
|
109
|
-
visiting.add(node);
|
|
110
|
-
const dependencies = graph.get(node) || [];
|
|
111
|
-
for (const dep of dependencies){
|
|
112
|
-
if (graph.has(dep)) {
|
|
113
|
-
visit(dep);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
visiting.delete(node);
|
|
117
|
-
visited.add(node);
|
|
118
|
-
sorted.push(node);
|
|
119
|
-
};
|
|
120
|
-
for (const node of graph.keys()){
|
|
121
|
-
visit(node);
|
|
122
|
-
}
|
|
123
|
-
return sorted;
|
|
124
|
-
}
|
|
125
|
-
constructor(dataSource){
|
|
126
|
-
_define_property(this, "dataSource", void 0);
|
|
127
|
-
this.dataSource = dataSource;
|
|
128
|
-
}
|
|
129
|
-
};
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get AUDIT_FIELDS () {
|
|
13
|
-
return AUDIT_FIELDS;
|
|
14
|
-
},
|
|
15
|
-
get BOOLEAN_KEYWORDS () {
|
|
16
|
-
return BOOLEAN_KEYWORDS;
|
|
17
|
-
},
|
|
18
|
-
get IDENTITY_FIELDS () {
|
|
19
|
-
return IDENTITY_FIELDS;
|
|
20
|
-
},
|
|
21
|
-
get SYSTEM_FIELDS () {
|
|
22
|
-
return SYSTEM_FIELDS;
|
|
23
|
-
},
|
|
24
|
-
get detectFieldPattern () {
|
|
25
|
-
return detectFieldPattern;
|
|
26
|
-
},
|
|
27
|
-
get detectTypeCategory () {
|
|
28
|
-
return detectTypeCategory;
|
|
29
|
-
},
|
|
30
|
-
get getStringLengthCategory () {
|
|
31
|
-
return getStringLengthCategory;
|
|
32
|
-
},
|
|
33
|
-
get getTokenLength () {
|
|
34
|
-
return getTokenLength;
|
|
35
|
-
},
|
|
36
|
-
get isSystemField () {
|
|
37
|
-
return isSystemField;
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
const SYSTEM_FIELDS = [
|
|
41
|
-
'id',
|
|
42
|
-
'createdAt',
|
|
43
|
-
'updatedAt',
|
|
44
|
-
'deletedAt',
|
|
45
|
-
'createdById',
|
|
46
|
-
'updatedById',
|
|
47
|
-
'deletedById'
|
|
48
|
-
];
|
|
49
|
-
const AUDIT_FIELDS = [
|
|
50
|
-
'createdbyid',
|
|
51
|
-
'updatedbyid',
|
|
52
|
-
'deletedbyid'
|
|
53
|
-
];
|
|
54
|
-
const IDENTITY_FIELDS = [
|
|
55
|
-
'id',
|
|
56
|
-
'createdat',
|
|
57
|
-
'updatedat',
|
|
58
|
-
'deletedat'
|
|
59
|
-
];
|
|
60
|
-
const BOOLEAN_KEYWORDS = [
|
|
61
|
-
'verified',
|
|
62
|
-
'active',
|
|
63
|
-
'enabled',
|
|
64
|
-
'public',
|
|
65
|
-
'readonly',
|
|
66
|
-
'valid'
|
|
67
|
-
];
|
|
68
|
-
function detectFieldPattern(column) {
|
|
69
|
-
const nameLower = column.propertyName.toLowerCase();
|
|
70
|
-
const typeLower = column.type.toLowerCase();
|
|
71
|
-
// Identity fields (skip)
|
|
72
|
-
if (IDENTITY_FIELDS.includes(nameLower)) return 'skip';
|
|
73
|
-
// Audit fields (null)
|
|
74
|
-
if (AUDIT_FIELDS.includes(nameLower)) return 'null';
|
|
75
|
-
// Boolean fields with specific keywords
|
|
76
|
-
if ((typeLower === 'boolean' || typeLower === 'bool') && BOOLEAN_KEYWORDS.some((k)=>nameLower.includes(k))) {
|
|
77
|
-
return 'boolean';
|
|
78
|
-
}
|
|
79
|
-
// Token fields
|
|
80
|
-
if (nameLower.includes('token')) return 'token';
|
|
81
|
-
// Name fields
|
|
82
|
-
if (nameLower.includes('firstname')) return 'firstName';
|
|
83
|
-
if (nameLower.includes('lastname')) return 'lastName';
|
|
84
|
-
if (nameLower.includes('fullname') || nameLower === 'name') return 'fullName';
|
|
85
|
-
// Contact fields
|
|
86
|
-
if (nameLower.includes('email') && typeLower !== 'boolean') return 'email';
|
|
87
|
-
if (nameLower.includes('phone') || nameLower.includes('mobile')) return 'phone';
|
|
88
|
-
// Location fields
|
|
89
|
-
if (nameLower.includes('address')) return 'address';
|
|
90
|
-
if (nameLower.includes('street')) return 'street';
|
|
91
|
-
if (nameLower.includes('city')) return 'city';
|
|
92
|
-
if (nameLower.includes('state')) return 'state';
|
|
93
|
-
if (nameLower.includes('country')) return 'country';
|
|
94
|
-
if (nameLower.includes('zipcode') || nameLower.includes('postalcode')) return 'zipCode';
|
|
95
|
-
// URL/Web fields
|
|
96
|
-
if (nameLower.includes('url') || nameLower.includes('website')) return 'url';
|
|
97
|
-
if (nameLower.includes('domain')) return 'domain';
|
|
98
|
-
if (nameLower.includes('slug')) return 'slug';
|
|
99
|
-
// Text fields
|
|
100
|
-
if (nameLower.includes('description')) return 'description';
|
|
101
|
-
if (nameLower.includes('summary')) return 'summary';
|
|
102
|
-
if (nameLower.includes('content')) return 'content';
|
|
103
|
-
if (nameLower.includes('title')) return 'title';
|
|
104
|
-
// User fields
|
|
105
|
-
if (nameLower.includes('username')) return 'username';
|
|
106
|
-
if (nameLower.includes('password')) return 'password';
|
|
107
|
-
// Boolean status fields (fallback)
|
|
108
|
-
if (nameLower.includes('isactive') || nameLower.includes('isenabled') || nameLower.includes('ispublic') || nameLower.includes('isverified')) {
|
|
109
|
-
return 'boolean';
|
|
110
|
-
}
|
|
111
|
-
// Date fields
|
|
112
|
-
if (nameLower.includes('birthdate') || nameLower.includes('dateofbirth')) return 'birthdate';
|
|
113
|
-
if (nameLower.includes('expiresat') || nameLower.includes('expirydate')) return 'futureDate';
|
|
114
|
-
if (nameLower.includes('verifiedat')) return 'recentDateOrNull';
|
|
115
|
-
// Serial/Order fields
|
|
116
|
-
if (nameLower.includes('serial') || nameLower.includes('order')) return 'serial';
|
|
117
|
-
// Company
|
|
118
|
-
if (nameLower.includes('company') && !nameLower.includes('id')) return 'company';
|
|
119
|
-
// Email provider type
|
|
120
|
-
if (nameLower === 'provider' || nameLower === 'emailprovider') return 'emailProvider';
|
|
121
|
-
// Form access type
|
|
122
|
-
if (nameLower === 'accesstype' || nameLower === 'access_type') return 'formAccessType';
|
|
123
|
-
// Notification type (short varchar for type fields)
|
|
124
|
-
if (nameLower === 'type') return 'notificationType';
|
|
125
|
-
// Language code (short varchar for language codes like 'en', 'ar', 'bn')
|
|
126
|
-
if (nameLower === 'code') return 'languageCode';
|
|
127
|
-
// Language direction (ltr/rtl)
|
|
128
|
-
if (nameLower === 'direction') return 'languageDirection';
|
|
129
|
-
return undefined;
|
|
130
|
-
}
|
|
131
|
-
function detectTypeCategory(type) {
|
|
132
|
-
const typeLower = type.toLowerCase();
|
|
133
|
-
if ([
|
|
134
|
-
'varchar',
|
|
135
|
-
'character varying',
|
|
136
|
-
'text',
|
|
137
|
-
'string'
|
|
138
|
-
].includes(typeLower)) return 'string';
|
|
139
|
-
if ([
|
|
140
|
-
'int',
|
|
141
|
-
'integer',
|
|
142
|
-
'smallint',
|
|
143
|
-
'bigint'
|
|
144
|
-
].includes(typeLower)) return 'integer';
|
|
145
|
-
if ([
|
|
146
|
-
'decimal',
|
|
147
|
-
'numeric',
|
|
148
|
-
'float',
|
|
149
|
-
'double',
|
|
150
|
-
'real'
|
|
151
|
-
].includes(typeLower)) return 'decimal';
|
|
152
|
-
if ([
|
|
153
|
-
'boolean',
|
|
154
|
-
'bool'
|
|
155
|
-
].includes(typeLower)) return 'boolean';
|
|
156
|
-
if (typeLower === 'date') return 'date';
|
|
157
|
-
if ([
|
|
158
|
-
'timestamp',
|
|
159
|
-
'datetime'
|
|
160
|
-
].includes(typeLower)) return 'timestamp';
|
|
161
|
-
if (typeLower === 'time') return 'time';
|
|
162
|
-
if (typeLower === 'uuid') return 'uuid';
|
|
163
|
-
if ([
|
|
164
|
-
'json',
|
|
165
|
-
'jsonb'
|
|
166
|
-
].includes(typeLower)) return 'json';
|
|
167
|
-
if (typeLower === 'array') return 'array';
|
|
168
|
-
return 'unknown';
|
|
169
|
-
}
|
|
170
|
-
function getStringLengthCategory(length) {
|
|
171
|
-
const maxLength = typeof length === 'number' ? length : 255;
|
|
172
|
-
if (maxLength <= 50) return 'word';
|
|
173
|
-
if (maxLength <= 255) return 'sentence';
|
|
174
|
-
return 'paragraph';
|
|
175
|
-
}
|
|
176
|
-
function isSystemField(fieldName) {
|
|
177
|
-
return SYSTEM_FIELDS.includes(fieldName);
|
|
178
|
-
}
|
|
179
|
-
function getTokenLength(column) {
|
|
180
|
-
const maxLength = typeof column.length === 'number' ? column.length : 64;
|
|
181
|
-
return Math.min(maxLength, 32);
|
|
182
|
-
}
|
package/cjs/seeders/index.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get BaseSeeder () {
|
|
13
|
-
return _baseseeder.BaseSeeder;
|
|
14
|
-
},
|
|
15
|
-
get DataGenerator () {
|
|
16
|
-
return _datagenerator.DataGenerator;
|
|
17
|
-
},
|
|
18
|
-
get EntityReader () {
|
|
19
|
-
return _entityreader.EntityReader;
|
|
20
|
-
},
|
|
21
|
-
get IColumnInfo () {
|
|
22
|
-
return _entityreader.IColumnInfo;
|
|
23
|
-
},
|
|
24
|
-
get IEntityInfo () {
|
|
25
|
-
return _entityreader.IEntityInfo;
|
|
26
|
-
},
|
|
27
|
-
get IRelationInfo () {
|
|
28
|
-
return _entityreader.IRelationInfo;
|
|
29
|
-
},
|
|
30
|
-
get ISeedConfig () {
|
|
31
|
-
return _seedconfig.ISeedConfig;
|
|
32
|
-
},
|
|
33
|
-
get ISeedOptions () {
|
|
34
|
-
return _seedrunner.ISeedOptions;
|
|
35
|
-
},
|
|
36
|
-
get ISeedResult () {
|
|
37
|
-
return _seedrunner.ISeedResult;
|
|
38
|
-
},
|
|
39
|
-
get ISeederLogger () {
|
|
40
|
-
return _seedrunner.ISeederLogger;
|
|
41
|
-
},
|
|
42
|
-
get SYSTEM_FIELDS () {
|
|
43
|
-
return _fieldpatterns.SYSTEM_FIELDS;
|
|
44
|
-
},
|
|
45
|
-
get SeedRunner () {
|
|
46
|
-
return _seedrunner.SeedRunner;
|
|
47
|
-
},
|
|
48
|
-
get configureSeedConfig () {
|
|
49
|
-
return _seedconfig.configureSeedConfig;
|
|
50
|
-
},
|
|
51
|
-
get defaultLogger () {
|
|
52
|
-
return _seedrunner.defaultLogger;
|
|
53
|
-
},
|
|
54
|
-
get detectFieldPattern () {
|
|
55
|
-
return _fieldpatterns.detectFieldPattern;
|
|
56
|
-
},
|
|
57
|
-
get detectTypeCategory () {
|
|
58
|
-
return _fieldpatterns.detectTypeCategory;
|
|
59
|
-
},
|
|
60
|
-
get getEntityCount () {
|
|
61
|
-
return _seedconfig.getEntityCount;
|
|
62
|
-
},
|
|
63
|
-
get getSeedingOrder () {
|
|
64
|
-
return _seedconfig.getSeedingOrder;
|
|
65
|
-
},
|
|
66
|
-
get isSystemField () {
|
|
67
|
-
return _fieldpatterns.isSystemField;
|
|
68
|
-
},
|
|
69
|
-
get runSeedCli () {
|
|
70
|
-
return _cli.runSeedCli;
|
|
71
|
-
},
|
|
72
|
-
get seedConfig () {
|
|
73
|
-
return _seedconfig.seedConfig;
|
|
74
|
-
},
|
|
75
|
-
get shouldSkipEntity () {
|
|
76
|
-
return _seedconfig.shouldSkipEntity;
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
const _baseseeder = require("./base-seeder");
|
|
80
|
-
const _entityreader = require("./entity-reader");
|
|
81
|
-
const _datagenerator = require("./data-generator");
|
|
82
|
-
const _seedrunner = require("./seed-runner");
|
|
83
|
-
const _seedconfig = require("./seed-config");
|
|
84
|
-
const _fieldpatterns = require("./field-patterns");
|
|
85
|
-
const _cli = require("./cli");
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get configureSeedConfig () {
|
|
13
|
-
return configureSeedConfig;
|
|
14
|
-
},
|
|
15
|
-
get getEntityCount () {
|
|
16
|
-
return getEntityCount;
|
|
17
|
-
},
|
|
18
|
-
get getSeedingOrder () {
|
|
19
|
-
return getSeedingOrder;
|
|
20
|
-
},
|
|
21
|
-
get seedConfig () {
|
|
22
|
-
return seedConfig;
|
|
23
|
-
},
|
|
24
|
-
get shouldSkipEntity () {
|
|
25
|
-
return shouldSkipEntity;
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
const seedConfig = {
|
|
29
|
-
counts: {},
|
|
30
|
-
order: [],
|
|
31
|
-
skipEntities: [
|
|
32
|
-
'migrations',
|
|
33
|
-
'typeorm_metadata',
|
|
34
|
-
'Migration',
|
|
35
|
-
'Typeorm_Metadata'
|
|
36
|
-
],
|
|
37
|
-
locale: 'en',
|
|
38
|
-
respectSoftDelete: true
|
|
39
|
-
};
|
|
40
|
-
function configureSeedConfig(config) {
|
|
41
|
-
Object.assign(seedConfig, config);
|
|
42
|
-
}
|
|
43
|
-
function getEntityCount(entityName, config = seedConfig) {
|
|
44
|
-
return config.counts[entityName] || 10;
|
|
45
|
-
}
|
|
46
|
-
function shouldSkipEntity(entityName, config = seedConfig) {
|
|
47
|
-
return config.skipEntities.some((skip)=>skip.toLowerCase() === entityName.toLowerCase());
|
|
48
|
-
}
|
|
49
|
-
function getSeedingOrder(availableEntities, config = seedConfig) {
|
|
50
|
-
const ordered = [];
|
|
51
|
-
for (const entityName of config.order){
|
|
52
|
-
if (availableEntities.includes(entityName) && !shouldSkipEntity(entityName, config)) {
|
|
53
|
-
ordered.push(entityName);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
for (const entityName of availableEntities){
|
|
57
|
-
if (!ordered.includes(entityName) && !shouldSkipEntity(entityName, config)) {
|
|
58
|
-
ordered.push(entityName);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return ordered;
|
|
62
|
-
}
|