@flusys/nestjs-core 1.1.0-beta → 1.1.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.
Files changed (58) hide show
  1. package/README.md +505 -63
  2. package/cjs/config/env-config.service.js +1 -1
  3. package/cjs/docs/docs.config.js +77 -3
  4. package/cjs/docs/index.js +0 -1
  5. package/cjs/interfaces/base-entity.interface.js +5 -3
  6. package/cjs/interfaces/database.interface.js +1 -3
  7. package/cjs/migration/datasource.factory.js +1 -3
  8. package/cjs/migration/index.js +0 -12
  9. package/cjs/migration/migration.cli.js +1 -17
  10. package/cjs/migration/migration.runner.js +37 -65
  11. package/cjs/seeders/base-seeder.js +6 -25
  12. package/cjs/seeders/cli.js +65 -172
  13. package/cjs/seeders/data-generator.js +110 -142
  14. package/cjs/seeders/entity-reader.js +0 -17
  15. package/cjs/seeders/field-patterns.js +176 -0
  16. package/cjs/seeders/index.js +16 -8
  17. package/cjs/seeders/seed-config.js +9 -48
  18. package/cjs/seeders/seed-runner.js +8 -14
  19. package/cjs/utils/datasource-config.builder.js +2 -14
  20. package/docs/docs.config.d.ts +7 -0
  21. package/docs/index.d.ts +0 -1
  22. package/fesm/config/env-config.service.js +1 -1
  23. package/fesm/docs/docs.config.js +68 -0
  24. package/fesm/docs/index.js +0 -1
  25. package/fesm/interfaces/app-config.interfaces.js +1 -3
  26. package/fesm/interfaces/base-entity.interface.js +5 -5
  27. package/fesm/interfaces/database.interface.js +1 -5
  28. package/fesm/migration/cli.js +1 -20
  29. package/fesm/migration/datasource.factory.js +3 -20
  30. package/fesm/migration/index.js +0 -14
  31. package/fesm/migration/migration.cli.js +1 -17
  32. package/fesm/migration/migration.runner.js +43 -132
  33. package/fesm/seeders/base-seeder.js +7 -51
  34. package/fesm/seeders/cli.js +65 -182
  35. package/fesm/seeders/data-generator.js +110 -149
  36. package/fesm/seeders/entity-reader.js +0 -17
  37. package/fesm/seeders/field-patterns.js +147 -0
  38. package/fesm/seeders/index.js +3 -7
  39. package/fesm/seeders/seed-config.js +9 -59
  40. package/fesm/seeders/seed-runner.js +8 -14
  41. package/fesm/utils/datasource-config.builder.js +2 -13
  42. package/interfaces/app-config.interfaces.d.ts +1 -0
  43. package/interfaces/base-entity.interface.d.ts +3 -0
  44. package/interfaces/database.interface.d.ts +1 -0
  45. package/package.json +2 -2
  46. package/seeders/data-generator.d.ts +1 -1
  47. package/seeders/entity-reader.d.ts +0 -1
  48. package/seeders/field-patterns.d.ts +12 -0
  49. package/seeders/index.d.ts +3 -3
  50. package/seeders/seed-config.d.ts +1 -0
  51. package/seeders/seed-runner.d.ts +1 -0
  52. package/utils/datasource-config.builder.d.ts +0 -1
  53. package/cjs/docs/docs.setup.js +0 -14
  54. package/cjs/seeders/template-generator.js +0 -297
  55. package/docs/docs.setup.d.ts +0 -3
  56. package/fesm/docs/docs.setup.js +0 -4
  57. package/fesm/seeders/template-generator.js +0 -257
  58. package/seeders/template-generator.d.ts +0 -16
@@ -9,27 +9,23 @@ Object.defineProperty(exports, "DataGenerator", {
9
9
  }
10
10
  });
11
11
  const _faker = require("@faker-js/faker");
12
+ const _fieldpatterns = require("./field-patterns");
12
13
  let DataGenerator = class DataGenerator {
13
14
  /**
14
15
  * Generate value for a single column based on its metadata
15
16
  */ generateValue(column) {
16
- // Skip generated fields
17
- if (column.isGenerated) {
18
- return undefined;
19
- }
17
+ if (column.isGenerated) return undefined;
20
18
  // Handle nullable fields (50% chance of null)
21
- if (column.isNullable && _faker.faker.datatype.boolean()) {
22
- return null;
23
- }
19
+ if (column.isNullable && _faker.faker.datatype.boolean()) return null;
24
20
  // Check for enum
25
21
  if (column.enum && column.enum.length > 0) {
26
22
  return _faker.faker.helpers.arrayElement(column.enum);
27
23
  }
28
- // Generate based on column name pattern
29
- const nameLower = column.propertyName.toLowerCase();
30
- const value = this.generateByName(nameLower, column);
31
- if (value !== undefined) {
32
- return value;
24
+ // Generate based on field pattern
25
+ const pattern = (0, _fieldpatterns.detectFieldPattern)(column);
26
+ if (pattern) {
27
+ const value = this.generateByPattern(pattern, column);
28
+ if (value !== undefined) return value;
33
29
  }
34
30
  // Generate based on column type
35
31
  return this.generateByType(column);
@@ -47,143 +43,122 @@ let DataGenerator = class DataGenerator {
47
43
  return entity;
48
44
  }
49
45
  /**
50
- * Generate value based on column name patterns
51
- */ generateByName(nameLower, column) {
52
- // Identity fields (skip, handled by database)
53
- if ([
54
- 'id',
55
- 'createdat',
56
- 'updatedat',
57
- 'deletedat'
58
- ].includes(nameLower)) {
59
- return undefined;
60
- }
61
- // Audit fields (skip, handled by interceptors)
62
- if ([
63
- 'createdbyid',
64
- 'updatedbyid',
65
- 'deletedbyid'
66
- ].includes(nameLower)) {
67
- return null;
68
- }
69
- // Name fields
70
- if (nameLower.includes('firstname')) return _faker.faker.person.firstName();
71
- if (nameLower.includes('lastname')) return _faker.faker.person.lastName();
72
- if (nameLower.includes('fullname') || nameLower === 'name') {
73
- return _faker.faker.person.fullName();
74
- }
75
- // Contact fields
76
- if (nameLower.includes('email')) return _faker.faker.internet.email().toLowerCase();
77
- if (nameLower.includes('phone')) return _faker.faker.phone.number();
78
- if (nameLower.includes('mobile')) return _faker.faker.phone.number();
79
- // Location fields
80
- if (nameLower.includes('address')) return _faker.faker.location.streetAddress();
81
- if (nameLower.includes('street')) return _faker.faker.location.street();
82
- if (nameLower.includes('city')) return _faker.faker.location.city();
83
- if (nameLower.includes('state')) return _faker.faker.location.state();
84
- if (nameLower.includes('country')) return _faker.faker.location.country();
85
- if (nameLower.includes('zipcode') || nameLower.includes('postalcode')) {
86
- return _faker.faker.location.zipCode();
87
- }
88
- // URL/Web fields
89
- if (nameLower.includes('url')) return _faker.faker.internet.url();
90
- if (nameLower.includes('website')) return _faker.faker.internet.url();
91
- if (nameLower.includes('domain')) return _faker.faker.internet.domainName();
92
- if (nameLower.includes('slug')) {
93
- return _faker.faker.helpers.slugify(_faker.faker.lorem.words(3)).toLowerCase();
94
- }
95
- // Text fields
96
- if (nameLower.includes('description')) return _faker.faker.lorem.paragraph();
97
- if (nameLower.includes('summary')) return _faker.faker.lorem.sentence();
98
- if (nameLower.includes('content')) return _faker.faker.lorem.paragraphs(3);
99
- if (nameLower.includes('title')) return _faker.faker.lorem.sentence();
100
- // User fields
101
- if (nameLower.includes('username')) return _faker.faker.internet.username();
102
- if (nameLower.includes('password')) return '$2b$12$dummy.hashed.password.value'; // Dummy bcrypt hash
103
- // Status/Active fields
104
- if (nameLower.includes('isactive')) return _faker.faker.datatype.boolean();
105
- if (nameLower.includes('isenabled')) return _faker.faker.datatype.boolean();
106
- if (nameLower.includes('ispublic')) return _faker.faker.datatype.boolean();
107
- if (nameLower.includes('isverified')) return _faker.faker.datatype.boolean();
108
- // Date fields
109
- if (nameLower.includes('birthdate') || nameLower.includes('dateofbirth')) {
110
- return _faker.faker.date.birthdate({
111
- min: 18,
112
- max: 80,
113
- mode: 'age'
114
- });
115
- }
116
- if (nameLower.includes('expiresat') || nameLower.includes('expirydate')) {
117
- return _faker.faker.date.future();
118
- }
119
- if (nameLower.includes('verifiedat')) {
120
- return _faker.faker.datatype.boolean() ? _faker.faker.date.recent() : null;
121
- }
122
- // Serial/Order fields
123
- if (nameLower.includes('serial') || nameLower.includes('order')) {
124
- return _faker.faker.number.int({
125
- min: 1,
126
- max: 100
127
- });
128
- }
129
- // Company/Organization
130
- if (nameLower.includes('company') && !nameLower.includes('id')) {
131
- return _faker.faker.company.name();
46
+ * Generate value based on detected field pattern
47
+ */ generateByPattern(pattern, column) {
48
+ switch(pattern){
49
+ case 'skip':
50
+ return undefined;
51
+ case 'null':
52
+ return null;
53
+ case 'boolean':
54
+ return _faker.faker.datatype.boolean();
55
+ case 'token':
56
+ return _faker.faker.string.alphanumeric((0, _fieldpatterns.getTokenLength)(column));
57
+ case 'firstName':
58
+ return _faker.faker.person.firstName();
59
+ case 'lastName':
60
+ return _faker.faker.person.lastName();
61
+ case 'fullName':
62
+ return _faker.faker.person.fullName();
63
+ case 'email':
64
+ return _faker.faker.internet.email().toLowerCase();
65
+ case 'phone':
66
+ return _faker.faker.phone.number();
67
+ case 'address':
68
+ return _faker.faker.location.streetAddress();
69
+ case 'street':
70
+ return _faker.faker.location.street();
71
+ case 'city':
72
+ return _faker.faker.location.city();
73
+ case 'state':
74
+ return _faker.faker.location.state();
75
+ case 'country':
76
+ return _faker.faker.location.country();
77
+ case 'zipCode':
78
+ return _faker.faker.location.zipCode();
79
+ case 'url':
80
+ return _faker.faker.internet.url();
81
+ case 'domain':
82
+ return _faker.faker.internet.domainName();
83
+ case 'slug':
84
+ return _faker.faker.helpers.slugify(_faker.faker.lorem.words(3)).toLowerCase();
85
+ case 'description':
86
+ return _faker.faker.lorem.paragraph();
87
+ case 'summary':
88
+ return _faker.faker.lorem.sentence();
89
+ case 'content':
90
+ return _faker.faker.lorem.paragraphs(3);
91
+ case 'title':
92
+ return _faker.faker.lorem.sentence();
93
+ case 'username':
94
+ return _faker.faker.internet.username();
95
+ case 'password':
96
+ return '$2b$12$dummy.hashed.password.value';
97
+ case 'birthdate':
98
+ return _faker.faker.date.birthdate({
99
+ min: 18,
100
+ max: 80,
101
+ mode: 'age'
102
+ });
103
+ case 'futureDate':
104
+ return _faker.faker.date.future();
105
+ case 'recentDateOrNull':
106
+ return _faker.faker.datatype.boolean() ? _faker.faker.date.recent() : null;
107
+ case 'serial':
108
+ return _faker.faker.number.int({
109
+ min: 1,
110
+ max: 100
111
+ });
112
+ case 'company':
113
+ return _faker.faker.company.name();
114
+ case 'emailProvider':
115
+ return _faker.faker.helpers.arrayElement([
116
+ 'smtp',
117
+ 'sendgrid',
118
+ 'mailgun',
119
+ 'ses',
120
+ 'postmark'
121
+ ]);
122
+ case 'formAccessType':
123
+ return _faker.faker.helpers.arrayElement([
124
+ 'public',
125
+ 'authenticated',
126
+ 'permission'
127
+ ]);
128
+ default:
129
+ return undefined;
132
130
  }
133
- return undefined;
134
131
  }
135
132
  /**
136
133
  * Generate value based on column type
137
134
  */ generateByType(column) {
138
- const type = column.type.toLowerCase();
139
- switch(type){
140
- // String types
141
- case 'varchar':
142
- case 'character varying':
143
- case 'text':
135
+ const category = (0, _fieldpatterns.detectTypeCategory)(column.type);
136
+ switch(category){
144
137
  case 'string':
145
138
  return this.generateString(column);
146
- // Number types
147
- case 'int':
148
139
  case 'integer':
149
- case 'smallint':
150
- case 'bigint':
151
140
  return _faker.faker.number.int({
152
141
  min: 1,
153
142
  max: 1000
154
143
  });
155
144
  case 'decimal':
156
- case 'numeric':
157
- case 'float':
158
- case 'double':
159
- case 'real':
160
145
  return _faker.faker.number.float({
161
146
  min: 0,
162
147
  max: 10000,
163
148
  fractionDigits: column.scale || 2
164
149
  });
165
- // Boolean
166
150
  case 'boolean':
167
- case 'bool':
168
151
  return _faker.faker.datatype.boolean();
169
- // Date/Time
170
152
  case 'date':
171
- return _faker.faker.date.recent({
172
- days: 30
173
- });
174
153
  case 'timestamp':
175
- case 'datetime':
176
154
  return _faker.faker.date.recent({
177
155
  days: 30
178
156
  });
179
157
  case 'time':
180
158
  return _faker.faker.date.recent().toTimeString().split(' ')[0];
181
- // UUID
182
159
  case 'uuid':
183
160
  return _faker.faker.string.uuid();
184
- // JSON
185
161
  case 'json':
186
- case 'jsonb':
187
162
  return {
188
163
  key1: _faker.faker.lorem.word(),
189
164
  key2: _faker.faker.number.int({
@@ -191,13 +166,11 @@ let DataGenerator = class DataGenerator {
191
166
  max: 100
192
167
  })
193
168
  };
194
- // Array
195
169
  case 'array':
196
170
  return [
197
171
  _faker.faker.lorem.word(),
198
172
  _faker.faker.lorem.word()
199
173
  ];
200
- // Default
201
174
  default:
202
175
  return _faker.faker.lorem.word();
203
176
  }
@@ -206,42 +179,37 @@ let DataGenerator = class DataGenerator {
206
179
  * Generate string value respecting length constraints
207
180
  */ generateString(column) {
208
181
  const maxLength = typeof column.length === 'number' ? column.length : 255;
209
- if (maxLength <= 50) {
210
- return _faker.faker.lorem.word().substring(0, maxLength);
211
- } else if (maxLength <= 255) {
212
- return _faker.faker.lorem.sentence().substring(0, maxLength);
213
- } else {
214
- return _faker.faker.lorem.paragraph().substring(0, maxLength);
182
+ const category = (0, _fieldpatterns.getStringLengthCategory)(column.length);
183
+ switch(category){
184
+ case 'word':
185
+ return _faker.faker.lorem.word().substring(0, maxLength);
186
+ case 'sentence':
187
+ return _faker.faker.lorem.sentence().substring(0, maxLength);
188
+ case 'paragraph':
189
+ return _faker.faker.lorem.paragraph().substring(0, maxLength);
215
190
  }
216
191
  }
217
192
  /**
218
193
  * Generate related entity ID (for foreign keys)
219
- * @param relatedEntities Array of entities to pick from
220
194
  */ generateRelationId(relatedEntities) {
221
- if (relatedEntities.length === 0) {
222
- return null;
223
- }
195
+ if (relatedEntities.length === 0) return null;
224
196
  return _faker.faker.helpers.arrayElement(relatedEntities).id;
225
197
  }
226
198
  /**
227
199
  * Generate multiple related entity IDs (for many-to-many)
228
- * @param relatedEntities Array of entities to pick from
229
- * @param min Minimum number of relations
230
- * @param max Maximum number of relations
231
200
  */ generateRelationIds(relatedEntities, min = 1, max = 3) {
232
- if (relatedEntities.length === 0) {
233
- return [];
234
- }
201
+ if (relatedEntities.length === 0) return [];
235
202
  const count = _faker.faker.number.int({
236
203
  min,
237
204
  max: Math.min(max, relatedEntities.length)
238
205
  });
239
- const selected = _faker.faker.helpers.arrayElements(relatedEntities, count);
240
- return selected.map((e)=>e.id);
206
+ return _faker.faker.helpers.arrayElements(relatedEntities, count).map((e)=>e.id);
241
207
  }
242
208
  constructor(locale = 'en'){
243
- // Note: faker v8+ uses faker.locale instead of setLocale
244
- // For v8+: faker.locale = locale;
245
- // Locale is set globally, not needed for basic usage
209
+ _faker.faker.setDefaultRefDate(new Date());
210
+ if (locale !== 'en') {
211
+ // @ts-expect-error - faker locale property access
212
+ _faker.faker.locale = locale;
213
+ }
246
214
  }
247
215
  };
@@ -53,23 +53,6 @@ let EntityReader = class EntityReader {
53
53
  return this.topologicalSort(graph);
54
54
  }
55
55
  /**
56
- * Check if entity has required columns populated
57
- * Used to determine if entity is ready for seeding
58
- */ hasRequiredDependencies(entityName, dataSource) {
59
- const info = this.getEntityInfo(entityName);
60
- for (const relation of info.relations){
61
- if (!relation.isNullable && relation.type === 'many-to-one') {
62
- const targetRepo = dataSource.getRepository(relation.targetEntity);
63
- if (targetRepo) {
64
- // Check if target entity has data
65
- // Note: This is a simplified check, actual implementation may need async
66
- return true;
67
- }
68
- }
69
- }
70
- return true;
71
- }
72
- /**
73
56
  * Find entity metadata by name or table name
74
57
  */ findEntityMetadata(entityName) {
75
58
  return this.getAllEntities().find((e)=>e.name === entityName || e.tableName === entityName);
@@ -0,0 +1,176 @@
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
+ return undefined;
124
+ }
125
+ function detectTypeCategory(type) {
126
+ const typeLower = type.toLowerCase();
127
+ if ([
128
+ 'varchar',
129
+ 'character varying',
130
+ 'text',
131
+ 'string'
132
+ ].includes(typeLower)) return 'string';
133
+ if ([
134
+ 'int',
135
+ 'integer',
136
+ 'smallint',
137
+ 'bigint'
138
+ ].includes(typeLower)) return 'integer';
139
+ if ([
140
+ 'decimal',
141
+ 'numeric',
142
+ 'float',
143
+ 'double',
144
+ 'real'
145
+ ].includes(typeLower)) return 'decimal';
146
+ if ([
147
+ 'boolean',
148
+ 'bool'
149
+ ].includes(typeLower)) return 'boolean';
150
+ if (typeLower === 'date') return 'date';
151
+ if ([
152
+ 'timestamp',
153
+ 'datetime'
154
+ ].includes(typeLower)) return 'timestamp';
155
+ if (typeLower === 'time') return 'time';
156
+ if (typeLower === 'uuid') return 'uuid';
157
+ if ([
158
+ 'json',
159
+ 'jsonb'
160
+ ].includes(typeLower)) return 'json';
161
+ if (typeLower === 'array') return 'array';
162
+ return 'unknown';
163
+ }
164
+ function getStringLengthCategory(length) {
165
+ const maxLength = typeof length === 'number' ? length : 255;
166
+ if (maxLength <= 50) return 'word';
167
+ if (maxLength <= 255) return 'sentence';
168
+ return 'paragraph';
169
+ }
170
+ function isSystemField(fieldName) {
171
+ return SYSTEM_FIELDS.includes(fieldName);
172
+ }
173
+ function getTokenLength(column) {
174
+ const maxLength = typeof column.length === 'number' ? column.length : 64;
175
+ return Math.min(maxLength, 32);
176
+ }
@@ -1,8 +1,4 @@
1
- /**
2
- * Seed System Exports
3
- *
4
- * Public API for seed data generation system.
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -43,21 +39,33 @@ _export(exports, {
43
39
  get ISeederLogger () {
44
40
  return _seedrunner.ISeederLogger;
45
41
  },
42
+ get SYSTEM_FIELDS () {
43
+ return _fieldpatterns.SYSTEM_FIELDS;
44
+ },
46
45
  get SeedRunner () {
47
46
  return _seedrunner.SeedRunner;
48
47
  },
49
- get TemplateGenerator () {
50
- return _templategenerator.TemplateGenerator;
48
+ get configureSeedConfig () {
49
+ return _seedconfig.configureSeedConfig;
51
50
  },
52
51
  get defaultLogger () {
53
52
  return _seedrunner.defaultLogger;
54
53
  },
54
+ get detectFieldPattern () {
55
+ return _fieldpatterns.detectFieldPattern;
56
+ },
57
+ get detectTypeCategory () {
58
+ return _fieldpatterns.detectTypeCategory;
59
+ },
55
60
  get getEntityCount () {
56
61
  return _seedconfig.getEntityCount;
57
62
  },
58
63
  get getSeedingOrder () {
59
64
  return _seedconfig.getSeedingOrder;
60
65
  },
66
+ get isSystemField () {
67
+ return _fieldpatterns.isSystemField;
68
+ },
61
69
  get runSeedCli () {
62
70
  return _cli.runSeedCli;
63
71
  },
@@ -71,7 +79,7 @@ _export(exports, {
71
79
  const _baseseeder = require("./base-seeder");
72
80
  const _entityreader = require("./entity-reader");
73
81
  const _datagenerator = require("./data-generator");
74
- const _templategenerator = require("./template-generator");
75
82
  const _seedrunner = require("./seed-runner");
76
83
  const _seedconfig = require("./seed-config");
84
+ const _fieldpatterns = require("./field-patterns");
77
85
  const _cli = require("./cli");