@villedemontreal/utils-knex 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +236 -0
- package/dist/src/config/configs.d.ts +19 -0
- package/dist/src/config/configs.d.ts.map +1 -0
- package/dist/src/config/configs.js +27 -0
- package/dist/src/config/configs.js.map +1 -0
- package/dist/src/config/constants.d.ts +21 -0
- package/dist/src/config/constants.d.ts.map +1 -0
- package/dist/src/config/constants.js +21 -0
- package/dist/src/config/constants.js.map +1 -0
- package/dist/src/config/init.d.ts +16 -0
- package/dist/src/config/init.d.ts.map +1 -0
- package/dist/src/config/init.js +33 -0
- package/dist/src/config/init.js.map +1 -0
- package/dist/src/databaseContext.d.ts +9 -0
- package/dist/src/databaseContext.d.ts.map +1 -0
- package/dist/src/databaseContext.js +3 -0
- package/dist/src/databaseContext.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +26 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/knexUtils.d.ts +134 -0
- package/dist/src/knexUtils.d.ts.map +1 -0
- package/dist/src/knexUtils.js +349 -0
- package/dist/src/knexUtils.js.map +1 -0
- package/dist/src/knexUtils.test.d.ts +2 -0
- package/dist/src/knexUtils.test.d.ts.map +1 -0
- package/dist/src/knexUtils.test.js +897 -0
- package/dist/src/knexUtils.test.js.map +1 -0
- package/dist/src/transactionManager.d.ts +34 -0
- package/dist/src/transactionManager.d.ts.map +1 -0
- package/dist/src/transactionManager.js +75 -0
- package/dist/src/transactionManager.js.map +1 -0
- package/dist/src/transactionManager.test.d.ts +10 -0
- package/dist/src/transactionManager.test.d.ts.map +1 -0
- package/dist/src/transactionManager.test.js +255 -0
- package/dist/src/transactionManager.test.js.map +1 -0
- package/dist/src/utils/logger.d.ts +12 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +53 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/testingConfigurations.d.ts +9 -0
- package/dist/src/utils/testingConfigurations.d.ts.map +1 -0
- package/dist/src/utils/testingConfigurations.js +16 -0
- package/dist/src/utils/testingConfigurations.js.map +1 -0
- package/dist/testing/testClient.d.ts +15 -0
- package/dist/testing/testClient.d.ts.map +1 -0
- package/dist/testing/testClient.js +55 -0
- package/dist/testing/testClient.js.map +1 -0
- package/dist/testing/testRepo.d.ts +8 -0
- package/dist/testing/testRepo.d.ts.map +1 -0
- package/dist/testing/testRepo.js +31 -0
- package/dist/testing/testRepo.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +76 -0
- package/src/config/configs.ts +34 -0
- package/src/config/constants.ts +33 -0
- package/src/config/init.ts +33 -0
- package/src/databaseContext.ts +9 -0
- package/src/index.ts +9 -0
- package/src/knexUtils.test.ts +1526 -0
- package/src/knexUtils.ts +459 -0
- package/src/transactionManager.test.ts +302 -0
- package/src/transactionManager.ts +94 -0
- package/src/utils/logger.ts +60 -0
- package/src/utils/testingConfigurations.ts +13 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.knexUtils = exports.KnexUtils = void 0;
|
|
4
|
+
// ==========================================
|
|
5
|
+
// Knex utilities
|
|
6
|
+
//
|
|
7
|
+
// Ok in test files
|
|
8
|
+
// tslint:disable:no-string-literal
|
|
9
|
+
// ==========================================
|
|
10
|
+
const general_utils_1 = require("@villedemontreal/general-utils");
|
|
11
|
+
const bluebird_1 = require("bluebird");
|
|
12
|
+
const knex_1 = require("knex");
|
|
13
|
+
const _ = require("lodash");
|
|
14
|
+
const sinon = require("sinon");
|
|
15
|
+
const uuid_1 = require("uuid");
|
|
16
|
+
const logger_1 = require("./utils/logger");
|
|
17
|
+
const logger = (0, logger_1.createLogger)('knexUtils');
|
|
18
|
+
/**
|
|
19
|
+
* Knex utilities
|
|
20
|
+
*/
|
|
21
|
+
class KnexUtils {
|
|
22
|
+
constructor() {
|
|
23
|
+
/**
|
|
24
|
+
* Creates a mocked Knex client, linked to a dummy database.
|
|
25
|
+
* The client allows you to define stubs that will simulate
|
|
26
|
+
* the result from the DB.
|
|
27
|
+
*
|
|
28
|
+
* Useful for testing!
|
|
29
|
+
*/
|
|
30
|
+
this.createKnexMockedClient = async () => {
|
|
31
|
+
const knexMockedClient = (0, knex_1.default)({
|
|
32
|
+
client: 'sqlite',
|
|
33
|
+
connection: {
|
|
34
|
+
filename: './mydb.sqlite',
|
|
35
|
+
},
|
|
36
|
+
useNullAsDefault: true,
|
|
37
|
+
});
|
|
38
|
+
// ==========================================
|
|
39
|
+
// We add stubs that will allow to change the
|
|
40
|
+
// mocked result of a query.
|
|
41
|
+
// ==========================================
|
|
42
|
+
knexMockedClient.resultStub = sinon.stub();
|
|
43
|
+
knexMockedClient.resultStub.returns([]);
|
|
44
|
+
knexMockedClient.totalCountStub = sinon.stub();
|
|
45
|
+
knexMockedClient.totalCountStub.returns(0);
|
|
46
|
+
knexMockedClient.beforeQuerySpy = sinon.spy();
|
|
47
|
+
// ==========================================
|
|
48
|
+
// Returns a dummy connection object
|
|
49
|
+
// ==========================================
|
|
50
|
+
knexMockedClient.client.acquireConnection = () => {
|
|
51
|
+
// ==========================================
|
|
52
|
+
// We have to use a BlueBird Promise because
|
|
53
|
+
// this is what Knex is expecting and some functions
|
|
54
|
+
// specific to BlueBird promises are called.
|
|
55
|
+
// ==========================================
|
|
56
|
+
const promiseLike = new bluebird_1.Promise((resolve, reject) => {
|
|
57
|
+
resolve({
|
|
58
|
+
// The "__knexUid" property is required by Knex
|
|
59
|
+
__knexUid: (0, uuid_1.v4)(),
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
return promiseLike;
|
|
63
|
+
};
|
|
64
|
+
// ==========================================
|
|
65
|
+
// Called when the query is actually executed
|
|
66
|
+
// by Knex. We simply return the values from
|
|
67
|
+
// our stubs!
|
|
68
|
+
// ==========================================
|
|
69
|
+
knexMockedClient.client.query = (knexUuid, builder) => {
|
|
70
|
+
// The spy...
|
|
71
|
+
knexMockedClient.beforeQuerySpy(builder);
|
|
72
|
+
// ==========================================
|
|
73
|
+
// Query for the "totalCount" part of our "paginate()"
|
|
74
|
+
// function... We return the value from the
|
|
75
|
+
// *totalCount stub*.
|
|
76
|
+
// ==========================================
|
|
77
|
+
if (builder.options && builder.options[KnexUtils.TOTAL_COUNT_BUILDER_OPTION_NAME]) {
|
|
78
|
+
const theResult = knexMockedClient.totalCountStub();
|
|
79
|
+
const resultRow = {};
|
|
80
|
+
resultRow[KnexUtils.KNEX_TOTAL_COUNT_QUERY_COLUMN_NAME] = theResult;
|
|
81
|
+
return Promise.resolve(resultRow);
|
|
82
|
+
}
|
|
83
|
+
// ==========================================
|
|
84
|
+
// Regular query
|
|
85
|
+
// ==========================================
|
|
86
|
+
// The stub....
|
|
87
|
+
const result = knexMockedClient.resultStub();
|
|
88
|
+
return Promise.resolve(result);
|
|
89
|
+
};
|
|
90
|
+
// ==========================================
|
|
91
|
+
// Called by Knex to transform the result returned
|
|
92
|
+
// by the DB. We return our mocked result as is...
|
|
93
|
+
// ==========================================
|
|
94
|
+
knexMockedClient.client.processResponse = (obj, runner) => {
|
|
95
|
+
return obj;
|
|
96
|
+
};
|
|
97
|
+
// ==========================================
|
|
98
|
+
// When using a transaction, a new "client"
|
|
99
|
+
// is created. We replace it by our mocked client.
|
|
100
|
+
// ==========================================
|
|
101
|
+
knexMockedClient['context'].transaction = (transactionScope, config) => {
|
|
102
|
+
return transactionScope !== null ? transactionScope(knexMockedClient) : undefined;
|
|
103
|
+
};
|
|
104
|
+
return knexMockedClient;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Takes a Knex.QueryBuilder, which is the object created
|
|
109
|
+
* when defining a Knex query, an returns the rows total count.
|
|
110
|
+
*
|
|
111
|
+
* This function is useful when you already have a SELECT Knex query,
|
|
112
|
+
* but you only need the rows total count instead of the rows themselves!
|
|
113
|
+
*
|
|
114
|
+
* Warning!! This function only works with SELECT queries, and
|
|
115
|
+
* may fail in some untested complex situations... It only has
|
|
116
|
+
* been tested with simple select/from/where/orderBy queries.
|
|
117
|
+
*
|
|
118
|
+
* Example :
|
|
119
|
+
*
|
|
120
|
+
* const queryBuilder = client
|
|
121
|
+
* .from(BOOKS_TABLE_NAME)
|
|
122
|
+
* .orderBy("author");
|
|
123
|
+
*
|
|
124
|
+
* ... and then, instead of executing the query, by using
|
|
125
|
+
* "then()" or "await", you pass the builder to the
|
|
126
|
+
* "totalCount()" function :
|
|
127
|
+
*
|
|
128
|
+
* let totalCount: number = await knexUtils.totalCount(client, queryBuilder);
|
|
129
|
+
*
|
|
130
|
+
*/
|
|
131
|
+
async totalCount(knex, selectBuilder) {
|
|
132
|
+
const result = await this.paginateOrTotalCount(knex, selectBuilder, -1, -1, true);
|
|
133
|
+
return result.paging.totalCount;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Takes a Knex.QueryBuilder, which is the object created
|
|
137
|
+
* when defining a Knex query, a limit and a current
|
|
138
|
+
* page, then return a IPaginatedResult.
|
|
139
|
+
*
|
|
140
|
+
* In other words, instead of executing the query you
|
|
141
|
+
* are building with Knex directly, you pass the unsent
|
|
142
|
+
* builder to this function and you get :
|
|
143
|
+
* - Pagination for your query
|
|
144
|
+
* - The total number of elements your query would return if it
|
|
145
|
+
* wasn't paginated.
|
|
146
|
+
*
|
|
147
|
+
* Warning!! This function only works with SELECT queries, and
|
|
148
|
+
* may fail in some untested complex situations... It only has
|
|
149
|
+
* been tested with simple select/from/where/orderBy queries.
|
|
150
|
+
*
|
|
151
|
+
* If this function fails for one of your query, you'll have to
|
|
152
|
+
* duplicate the code of that query to make two separate queries :
|
|
153
|
+
* one for the rows only and one for the total count only.
|
|
154
|
+
*
|
|
155
|
+
* For example, to get 3 items starting at offset 9 :
|
|
156
|
+
*
|
|
157
|
+
* const paginatedResult = await knexUtils.paginate(
|
|
158
|
+
* client,
|
|
159
|
+
* client
|
|
160
|
+
* .select("id", "author", "title")
|
|
161
|
+
* .from(BOOKS_TABLE_NAME)
|
|
162
|
+
* .orderBy("author"),
|
|
163
|
+
* 9, 3);
|
|
164
|
+
*/
|
|
165
|
+
async paginate(knex, selectBuilder, offset, limit) {
|
|
166
|
+
const result = await this.paginateOrTotalCount(knex, selectBuilder, offset, limit);
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* For Oracle.
|
|
171
|
+
* Wraps a column name (or a "?") with LOWER or with a CONVERT function
|
|
172
|
+
* which will strip accents.
|
|
173
|
+
*/
|
|
174
|
+
wrapWithOracleModificationkeywords(columnNameOrInterrogationMark, isConvert, isLower) {
|
|
175
|
+
if (isConvert && isLower) {
|
|
176
|
+
return `LOWER(CONVERT(${columnNameOrInterrogationMark}, 'US7ASCII', 'WE8ISO8859P1'))`;
|
|
177
|
+
}
|
|
178
|
+
if (isConvert) {
|
|
179
|
+
return `CONVERT(${columnNameOrInterrogationMark}, 'US7ASCII', 'WE8ISO8859P1')`;
|
|
180
|
+
}
|
|
181
|
+
if (isLower) {
|
|
182
|
+
return `LOWER(${columnNameOrInterrogationMark})`;
|
|
183
|
+
}
|
|
184
|
+
return columnNameOrInterrogationMark;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* For Oracle.
|
|
188
|
+
* Adds a LIKE clause, where the values can be compared lowercased (isLower), by removing the
|
|
189
|
+
* accents first (isConvert), and where the "val" can starts or ends with a "*" wildcard.
|
|
190
|
+
*/
|
|
191
|
+
addOracleLikeClause(queryBuilder, columnName, val, isConvert, isLower) {
|
|
192
|
+
let valClean = val;
|
|
193
|
+
let wildcardPrefix = '';
|
|
194
|
+
let wildcardSuffix = '';
|
|
195
|
+
if (val.startsWith('*')) {
|
|
196
|
+
wildcardPrefix = "'%' || ";
|
|
197
|
+
valClean = _.trimStart(valClean, '*');
|
|
198
|
+
}
|
|
199
|
+
if (valClean.endsWith('*')) {
|
|
200
|
+
wildcardSuffix = " || '%'";
|
|
201
|
+
valClean = _.trimEnd(valClean, '*');
|
|
202
|
+
}
|
|
203
|
+
let queryBuilderClean = queryBuilder;
|
|
204
|
+
if (wildcardPrefix === '' && wildcardSuffix === '' && !isConvert && !isLower) {
|
|
205
|
+
queryBuilderClean = queryBuilderClean.where(columnName, valClean);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
const clause = `${this.wrapWithOracleModificationkeywords(columnName, isConvert, isLower)} LIKE ${wildcardPrefix}${this.wrapWithOracleModificationkeywords('?', isConvert, isLower)}${wildcardSuffix}`;
|
|
209
|
+
queryBuilderClean = queryBuilderClean.whereRaw(clause, valClean);
|
|
210
|
+
}
|
|
211
|
+
return queryBuilderClean;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* For SQL Server.
|
|
215
|
+
* Wraps a column name (or a "?") with LOWER and/or with a CAST function
|
|
216
|
+
* which will strip accents.
|
|
217
|
+
*/
|
|
218
|
+
wrapWithSqlServerModificationKeywords(columnNameOrInterrogationMark, isConvert, isLower) {
|
|
219
|
+
if (!isLower && !isConvert) {
|
|
220
|
+
return columnNameOrInterrogationMark;
|
|
221
|
+
}
|
|
222
|
+
if (isLower && !isConvert) {
|
|
223
|
+
return `LOWER(${columnNameOrInterrogationMark})`;
|
|
224
|
+
}
|
|
225
|
+
// ==========================================
|
|
226
|
+
// There is no magic method in SQL Server to strip accents.
|
|
227
|
+
// This is the best I found : https://stackoverflow.com/a/3578644/843699
|
|
228
|
+
// ... I added "œ" and "æ" management too, which don't work with the
|
|
229
|
+
// Stack Overflow trick.
|
|
230
|
+
// ==========================================
|
|
231
|
+
const cast = `CAST(` +
|
|
232
|
+
`REPLACE(REPLACE(REPLACE(REPLACE(${columnNameOrInterrogationMark}, 'œ', 'oe'), 'Œ', 'OE'), 'æ', 'ae'), 'Æ', 'AE')` +
|
|
233
|
+
`AS VARCHAR(max)) COLLATE SQL_Latin1_General_Cp1251_CS_AS`;
|
|
234
|
+
if (!isLower) {
|
|
235
|
+
return cast;
|
|
236
|
+
}
|
|
237
|
+
return `LOWER(${cast})`;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* For SQL Server.
|
|
241
|
+
* Adds a LIKE clause, where the values can be compared lowercased (lower), by removing the
|
|
242
|
+
* accents first (removeAccent), and where the "val" can starts or ends with a "*" wildcard
|
|
243
|
+
* (acceptWildcard).
|
|
244
|
+
*/
|
|
245
|
+
addSqlServerLikeClause(queryBuilder, columnName, val, acceptWildcard, removeAccents, lower) {
|
|
246
|
+
let valClean = val;
|
|
247
|
+
let wildcardPrefix = '';
|
|
248
|
+
let wildcardSuffix = '';
|
|
249
|
+
if (acceptWildcard) {
|
|
250
|
+
if (val.startsWith('*')) {
|
|
251
|
+
wildcardPrefix = "'%' + ";
|
|
252
|
+
valClean = _.trimStart(valClean, '*');
|
|
253
|
+
}
|
|
254
|
+
if (valClean.endsWith('*')) {
|
|
255
|
+
wildcardSuffix = " + '%'";
|
|
256
|
+
valClean = _.trimEnd(valClean, '*');
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
let queryBuilderClean = queryBuilder;
|
|
260
|
+
if (wildcardPrefix === '' && wildcardSuffix === '' && !removeAccents && !lower) {
|
|
261
|
+
queryBuilderClean = queryBuilderClean.where(columnName, valClean);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
const clause = `${this.wrapWithSqlServerModificationKeywords(columnName, removeAccents, lower)} LIKE ${wildcardPrefix}${this.wrapWithSqlServerModificationKeywords('?', removeAccents, lower)}${wildcardSuffix}`;
|
|
265
|
+
queryBuilderClean = queryBuilderClean.whereRaw(clause, valClean);
|
|
266
|
+
}
|
|
267
|
+
return queryBuilderClean;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* @param totalCountOnly if true, only the request to get the total count will
|
|
271
|
+
* be made and an empty array will be returned as the rows.
|
|
272
|
+
*/
|
|
273
|
+
async paginateOrTotalCount(knex, selectBuilder, offset, limit, totalCountOnly = false) {
|
|
274
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
275
|
+
if (!selectBuilder) {
|
|
276
|
+
throw new Error('A Knex SELECT query builder is required.');
|
|
277
|
+
}
|
|
278
|
+
if (selectBuilder['_method'] !== 'select') {
|
|
279
|
+
throw new Error("The 'paginate()' and 'totalCount()' functions are only available on a SELECT query builder!");
|
|
280
|
+
}
|
|
281
|
+
let offsetClean = offset;
|
|
282
|
+
if (!general_utils_1.utils.isIntegerValue(offsetClean, true, true)) {
|
|
283
|
+
logger.debug(`Invalid offset "${offsetClean}", 0 will be used instead`);
|
|
284
|
+
offsetClean = 0;
|
|
285
|
+
}
|
|
286
|
+
offsetClean = Number(offsetClean);
|
|
287
|
+
let limitClean = limit;
|
|
288
|
+
if (!general_utils_1.utils.isIntegerValue(limitClean, true, false)) {
|
|
289
|
+
logger.debug(`Invalid limit "${limitClean}", 1 will be used instead`);
|
|
290
|
+
limitClean = 1;
|
|
291
|
+
}
|
|
292
|
+
limitClean = Number(limitClean);
|
|
293
|
+
// ==========================================
|
|
294
|
+
// We wrap the original select query in a
|
|
295
|
+
// "count()" query. We also add an option to this
|
|
296
|
+
// new query so we can later know this is the "totalCount"
|
|
297
|
+
// generated query.
|
|
298
|
+
// ==========================================
|
|
299
|
+
let countBuilder = knex.count(`* AS ${KnexUtils.KNEX_TOTAL_COUNT_QUERY_COLUMN_NAME}`);
|
|
300
|
+
const options = {};
|
|
301
|
+
options[KnexUtils.TOTAL_COUNT_BUILDER_OPTION_NAME] = true;
|
|
302
|
+
countBuilder = countBuilder.options(options);
|
|
303
|
+
// ==========================================
|
|
304
|
+
// For the subquery, we clone the
|
|
305
|
+
// original query but remove the "order by"
|
|
306
|
+
// clause, the limit and the offset.
|
|
307
|
+
// ==========================================
|
|
308
|
+
const countBuilderSubSelect = selectBuilder.clone();
|
|
309
|
+
delete countBuilderSubSelect['_single'].offset;
|
|
310
|
+
delete countBuilderSubSelect['_single'].limit;
|
|
311
|
+
if (countBuilderSubSelect['_statements']) {
|
|
312
|
+
const totalCountStatements = [];
|
|
313
|
+
for (const statement of countBuilderSubSelect['_statements']) {
|
|
314
|
+
if (statement.grouping !== 'order') {
|
|
315
|
+
totalCountStatements.push(statement);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
countBuilderSubSelect['_statements'] = totalCountStatements;
|
|
319
|
+
}
|
|
320
|
+
countBuilder = countBuilder.from(countBuilderSubSelect.as('_knexSub'));
|
|
321
|
+
// ==========================================
|
|
322
|
+
// Are we simply interested in the total count,
|
|
323
|
+
// or the actual rows too?
|
|
324
|
+
// We do not use something like Promise.all() to
|
|
325
|
+
// run both queries because of :
|
|
326
|
+
// https://github.com/tediousjs/node-mssql/issues/491
|
|
327
|
+
// ==========================================
|
|
328
|
+
const rs = await countBuilder.first();
|
|
329
|
+
const totalCount = Number(rs[KnexUtils.KNEX_TOTAL_COUNT_QUERY_COLUMN_NAME]);
|
|
330
|
+
let rows;
|
|
331
|
+
if (!totalCountOnly) {
|
|
332
|
+
rows = await selectBuilder.offset(offsetClean).limit(limitClean);
|
|
333
|
+
}
|
|
334
|
+
const result = {
|
|
335
|
+
items: rows,
|
|
336
|
+
paging: {
|
|
337
|
+
totalCount,
|
|
338
|
+
limit: limitClean,
|
|
339
|
+
offset: offsetClean,
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
return result;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
exports.KnexUtils = KnexUtils;
|
|
346
|
+
KnexUtils.KNEX_TOTAL_COUNT_QUERY_COLUMN_NAME = 'count';
|
|
347
|
+
KnexUtils.TOTAL_COUNT_BUILDER_OPTION_NAME = 'isTotalCountBuilder';
|
|
348
|
+
exports.knexUtils = new KnexUtils();
|
|
349
|
+
//# sourceMappingURL=knexUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knexUtils.js","sourceRoot":"","sources":["../../src/knexUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knexUtils.test.d.ts","sourceRoot":"","sources":["../../src/knexUtils.test.ts"],"names":[],"mappings":""}
|