@flusys/nestjs-core 1.0.0-rc → 2.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.
@@ -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,108 @@ 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
+ default:
115
+ return undefined;
132
116
  }
133
- return undefined;
134
117
  }
135
118
  /**
136
119
  * Generate value based on column type
137
120
  */ generateByType(column) {
138
- const type = column.type.toLowerCase();
139
- switch(type){
140
- // String types
141
- case 'varchar':
142
- case 'character varying':
143
- case 'text':
121
+ const category = (0, _fieldpatterns.detectTypeCategory)(column.type);
122
+ switch(category){
144
123
  case 'string':
145
124
  return this.generateString(column);
146
- // Number types
147
- case 'int':
148
125
  case 'integer':
149
- case 'smallint':
150
- case 'bigint':
151
126
  return _faker.faker.number.int({
152
127
  min: 1,
153
128
  max: 1000
154
129
  });
155
130
  case 'decimal':
156
- case 'numeric':
157
- case 'float':
158
- case 'double':
159
- case 'real':
160
131
  return _faker.faker.number.float({
161
132
  min: 0,
162
133
  max: 10000,
163
134
  fractionDigits: column.scale || 2
164
135
  });
165
- // Boolean
166
136
  case 'boolean':
167
- case 'bool':
168
137
  return _faker.faker.datatype.boolean();
169
- // Date/Time
170
138
  case 'date':
171
- return _faker.faker.date.recent({
172
- days: 30
173
- });
174
139
  case 'timestamp':
175
- case 'datetime':
176
140
  return _faker.faker.date.recent({
177
141
  days: 30
178
142
  });
179
143
  case 'time':
180
144
  return _faker.faker.date.recent().toTimeString().split(' ')[0];
181
- // UUID
182
145
  case 'uuid':
183
146
  return _faker.faker.string.uuid();
184
- // JSON
185
147
  case 'json':
186
- case 'jsonb':
187
148
  return {
188
149
  key1: _faker.faker.lorem.word(),
189
150
  key2: _faker.faker.number.int({
@@ -191,13 +152,11 @@ let DataGenerator = class DataGenerator {
191
152
  max: 100
192
153
  })
193
154
  };
194
- // Array
195
155
  case 'array':
196
156
  return [
197
157
  _faker.faker.lorem.word(),
198
158
  _faker.faker.lorem.word()
199
159
  ];
200
- // Default
201
160
  default:
202
161
  return _faker.faker.lorem.word();
203
162
  }
@@ -206,38 +165,31 @@ let DataGenerator = class DataGenerator {
206
165
  * Generate string value respecting length constraints
207
166
  */ generateString(column) {
208
167
  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);
168
+ const category = (0, _fieldpatterns.getStringLengthCategory)(column.length);
169
+ switch(category){
170
+ case 'word':
171
+ return _faker.faker.lorem.word().substring(0, maxLength);
172
+ case 'sentence':
173
+ return _faker.faker.lorem.sentence().substring(0, maxLength);
174
+ case 'paragraph':
175
+ return _faker.faker.lorem.paragraph().substring(0, maxLength);
215
176
  }
216
177
  }
217
178
  /**
218
179
  * Generate related entity ID (for foreign keys)
219
- * @param relatedEntities Array of entities to pick from
220
180
  */ generateRelationId(relatedEntities) {
221
- if (relatedEntities.length === 0) {
222
- return null;
223
- }
181
+ if (relatedEntities.length === 0) return null;
224
182
  return _faker.faker.helpers.arrayElement(relatedEntities).id;
225
183
  }
226
184
  /**
227
185
  * 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
186
  */ generateRelationIds(relatedEntities, min = 1, max = 3) {
232
- if (relatedEntities.length === 0) {
233
- return [];
234
- }
187
+ if (relatedEntities.length === 0) return [];
235
188
  const count = _faker.faker.number.int({
236
189
  min,
237
190
  max: Math.min(max, relatedEntities.length)
238
191
  });
239
- const selected = _faker.faker.helpers.arrayElements(relatedEntities, count);
240
- return selected.map((e)=>e.id);
192
+ return _faker.faker.helpers.arrayElements(relatedEntities, count).map((e)=>e.id);
241
193
  }
242
194
  constructor(locale = 'en'){
243
195
  _faker.faker.setDefaultRefDate(new Date());
@@ -0,0 +1,172 @@
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
+ return undefined;
120
+ }
121
+ function detectTypeCategory(type) {
122
+ const typeLower = type.toLowerCase();
123
+ if ([
124
+ 'varchar',
125
+ 'character varying',
126
+ 'text',
127
+ 'string'
128
+ ].includes(typeLower)) return 'string';
129
+ if ([
130
+ 'int',
131
+ 'integer',
132
+ 'smallint',
133
+ 'bigint'
134
+ ].includes(typeLower)) return 'integer';
135
+ if ([
136
+ 'decimal',
137
+ 'numeric',
138
+ 'float',
139
+ 'double',
140
+ 'real'
141
+ ].includes(typeLower)) return 'decimal';
142
+ if ([
143
+ 'boolean',
144
+ 'bool'
145
+ ].includes(typeLower)) return 'boolean';
146
+ if (typeLower === 'date') return 'date';
147
+ if ([
148
+ 'timestamp',
149
+ 'datetime'
150
+ ].includes(typeLower)) return 'timestamp';
151
+ if (typeLower === 'time') return 'time';
152
+ if (typeLower === 'uuid') return 'uuid';
153
+ if ([
154
+ 'json',
155
+ 'jsonb'
156
+ ].includes(typeLower)) return 'json';
157
+ if (typeLower === 'array') return 'array';
158
+ return 'unknown';
159
+ }
160
+ function getStringLengthCategory(length) {
161
+ const maxLength = typeof length === 'number' ? length : 255;
162
+ if (maxLength <= 50) return 'word';
163
+ if (maxLength <= 255) return 'sentence';
164
+ return 'paragraph';
165
+ }
166
+ function isSystemField(fieldName) {
167
+ return SYSTEM_FIELDS.includes(fieldName);
168
+ }
169
+ function getTokenLength(column) {
170
+ const maxLength = typeof column.length === 'number' ? column.length : 64;
171
+ return Math.min(maxLength, 32);
172
+ }
@@ -39,24 +39,33 @@ _export(exports, {
39
39
  get ISeederLogger () {
40
40
  return _seedrunner.ISeederLogger;
41
41
  },
42
+ get SYSTEM_FIELDS () {
43
+ return _fieldpatterns.SYSTEM_FIELDS;
44
+ },
42
45
  get SeedRunner () {
43
46
  return _seedrunner.SeedRunner;
44
47
  },
45
- get TemplateGenerator () {
46
- return _templategenerator.TemplateGenerator;
47
- },
48
48
  get configureSeedConfig () {
49
49
  return _seedconfig.configureSeedConfig;
50
50
  },
51
51
  get defaultLogger () {
52
52
  return _seedrunner.defaultLogger;
53
53
  },
54
+ get detectFieldPattern () {
55
+ return _fieldpatterns.detectFieldPattern;
56
+ },
57
+ get detectTypeCategory () {
58
+ return _fieldpatterns.detectTypeCategory;
59
+ },
54
60
  get getEntityCount () {
55
61
  return _seedconfig.getEntityCount;
56
62
  },
57
63
  get getSeedingOrder () {
58
64
  return _seedconfig.getSeedingOrder;
59
65
  },
66
+ get isSystemField () {
67
+ return _fieldpatterns.isSystemField;
68
+ },
60
69
  get runSeedCli () {
61
70
  return _cli.runSeedCli;
62
71
  },
@@ -70,7 +79,7 @@ _export(exports, {
70
79
  const _baseseeder = require("./base-seeder");
71
80
  const _entityreader = require("./entity-reader");
72
81
  const _datagenerator = require("./data-generator");
73
- const _templategenerator = require("./template-generator");
74
82
  const _seedrunner = require("./seed-runner");
75
83
  const _seedconfig = require("./seed-config");
84
+ const _fieldpatterns = require("./field-patterns");
76
85
  const _cli = require("./cli");
@@ -58,6 +58,12 @@ let SeedRunner = class SeedRunner {
58
58
  */ hasCustomSeeder(entityName) {
59
59
  return this.customSeeders.has(entityName);
60
60
  }
61
+ getSeeder(entityName, entity, dataSource, entityInfo, batchSize) {
62
+ if (this.customSeeders.has(entityName)) {
63
+ return this.customSeeders.get(entityName);
64
+ }
65
+ return new GenericSeeder(dataSource, entity, this.dataGenerator, entityInfo, batchSize);
66
+ }
61
67
  /**
62
68
  * Run seeds for all entities
63
69
  * @param options Seeding options
@@ -122,13 +128,7 @@ let SeedRunner = class SeedRunner {
122
128
  if (!entity) {
123
129
  throw new Error(`Entity ${entityName} not found`);
124
130
  }
125
- // Get seeder (custom or generic)
126
- let seeder;
127
- if (this.customSeeders.has(entityName)) {
128
- seeder = this.customSeeders.get(entityName);
129
- } else {
130
- seeder = new GenericSeeder(queryRunner.manager.connection, entity, this.dataGenerator, entityInfo, options.batchSize);
131
- }
131
+ const seeder = this.getSeeder(entityName, entity, queryRunner.manager.connection, entityInfo, options.batchSize);
132
132
  // Dry run mode - preview without executing
133
133
  if (options.dryRun) {
134
134
  const count = options.count ?? (0, _seedconfig.getEntityCount)(entityName);
@@ -200,13 +200,7 @@ let SeedRunner = class SeedRunner {
200
200
  if (!entity) {
201
201
  throw new Error(`Entity ${entityName} not found`);
202
202
  }
203
- // Use custom seeder if available, otherwise generic
204
- let seeder;
205
- if (this.customSeeders.has(entityName)) {
206
- seeder = this.customSeeders.get(entityName);
207
- } else {
208
- seeder = new GenericSeeder(this.dataSource, entity, this.dataGenerator, this.entityReader.getEntityInfo(entityName));
209
- }
203
+ const seeder = this.getSeeder(entityName, entity, this.dataSource, this.entityReader.getEntityInfo(entityName));
210
204
  const countBefore = await seeder.count(true);
211
205
  // Skip if already empty
212
206
  if (countBefore === 0) {
@@ -14,6 +14,11 @@ export interface IQueryParameterExclusion {
14
14
  method?: string;
15
15
  parameters: string[];
16
16
  }
17
+ export interface IExampleExclusion {
18
+ pathPattern: string;
19
+ method?: string;
20
+ examples: string[];
21
+ }
17
22
  export interface IModuleSwaggerOptions {
18
23
  modules?: Type<unknown>[];
19
24
  title: string;
@@ -25,5 +30,7 @@ export interface IModuleSwaggerOptions {
25
30
  excludeTags?: string[];
26
31
  excludeSchemaProperties?: ISchemaPropertyExclusion[];
27
32
  excludeQueryParameters?: IQueryParameterExclusion[];
33
+ excludeExamples?: IExampleExclusion[];
28
34
  }
29
35
  export declare function setupModuleSwaggerDocs(app: INestApplication, configs: IModuleSwaggerOptions[]): void;
36
+ export declare function setupSwaggerDocs(app: INestApplication, ...modules: IModuleSwaggerOptions[]): void;
package/docs/index.d.ts CHANGED
@@ -1,2 +1 @@
1
1
  export * from './docs.config';
2
- export * from './docs.setup';