@flusys/nestjs-core 4.1.1 → 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.
@@ -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
- }
@@ -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
- }