@juadz/knex 0.3.2 → 0.5.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/babel.config.js +6 -0
- package/build/basic.d.ts +3 -0
- package/build/basic.js +200 -0
- package/build/index.d.ts +3 -0
- package/build/{src/index.js → index.js} +2 -3
- package/build/list.d.ts +6 -0
- package/build/list.js +187 -0
- package/build/list.test.js +119 -0
- package/build/types.d.ts +0 -0
- package/build/types.js +0 -0
- package/package.json +41 -38
- package/src/basic.ts +120 -0
- package/src/index.ts +4 -0
- package/src/list.test.ts +78 -0
- package/src/list.ts +167 -0
- package/src/types.ts +0 -0
- package/tsconfig.json +13 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/build/src/basic.d.ts +0 -5
- package/build/src/basic.js +0 -73
- package/build/src/basic.js.map +0 -1
- package/build/src/index.d.ts +0 -3
- package/build/src/index.js.map +0 -1
- package/build/src/list.d.ts +0 -10
- package/build/src/list.js +0 -91
- package/build/src/list.js.map +0 -1
- package/build/src/list.test.js +0 -68
- package/build/src/list.test.js.map +0 -1
- package/build/src/types.d.ts +0 -5
- package/build/src/types.js +0 -3
- package/build/src/types.js.map +0 -1
- /package/build/{src/list.test.d.ts → list.test.d.ts} +0 -0
package/babel.config.js
ADDED
package/build/basic.d.ts
ADDED
package/build/basic.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
50
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
51
|
+
if (ar || !(i in from)) {
|
|
52
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
53
|
+
ar[i] = from[i];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
57
|
+
};
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.KnexProvider = KnexProvider;
|
|
60
|
+
var list_1 = require("./list");
|
|
61
|
+
function KnexProvider(connection, dataTableName) {
|
|
62
|
+
var _this = this;
|
|
63
|
+
var tableName = dataTableName || null;
|
|
64
|
+
var searchableFields = [];
|
|
65
|
+
var filterableFields = [];
|
|
66
|
+
var sortableFields = [];
|
|
67
|
+
var init = function (sch) { return __awaiter(_this, void 0, void 0, function () {
|
|
68
|
+
return __generator(this, function (_a) {
|
|
69
|
+
if (!tableName) {
|
|
70
|
+
tableName = sch.name;
|
|
71
|
+
}
|
|
72
|
+
searchableFields = Object.entries(sch.flags)
|
|
73
|
+
.filter(function (_a) {
|
|
74
|
+
var _ = _a[0], v = _a[1];
|
|
75
|
+
return v.$search == true;
|
|
76
|
+
})
|
|
77
|
+
.map(function (_a) {
|
|
78
|
+
var k = _a[0], _ = _a[1];
|
|
79
|
+
return k;
|
|
80
|
+
});
|
|
81
|
+
filterableFields = Object.entries(sch.flags)
|
|
82
|
+
.filter(function (_a) {
|
|
83
|
+
var _ = _a[0], v = _a[1];
|
|
84
|
+
return v.$filter == true;
|
|
85
|
+
})
|
|
86
|
+
.map(function (_a) {
|
|
87
|
+
var k = _a[0], _ = _a[1];
|
|
88
|
+
return k;
|
|
89
|
+
});
|
|
90
|
+
sortableFields = Object.entries(sch.flags)
|
|
91
|
+
.filter(function (_a) {
|
|
92
|
+
var _ = _a[0], v = _a[1];
|
|
93
|
+
return v.$sort == true;
|
|
94
|
+
})
|
|
95
|
+
.map(function (_a) {
|
|
96
|
+
var k = _a[0], _ = _a[1];
|
|
97
|
+
return k;
|
|
98
|
+
});
|
|
99
|
+
return [2 /*return*/];
|
|
100
|
+
});
|
|
101
|
+
}); };
|
|
102
|
+
var get = function (id) { return __awaiter(_this, void 0, void 0, function () {
|
|
103
|
+
var c;
|
|
104
|
+
return __generator(this, function (_a) {
|
|
105
|
+
switch (_a.label) {
|
|
106
|
+
case 0: return [4 /*yield*/, connection(tableName)
|
|
107
|
+
.select("*")
|
|
108
|
+
.where("id", id)
|
|
109
|
+
.first()];
|
|
110
|
+
case 1:
|
|
111
|
+
c = _a.sent();
|
|
112
|
+
return [2 /*return*/, c];
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}); };
|
|
116
|
+
var update = function (id, patch) { return __awaiter(_this, void 0, void 0, function () {
|
|
117
|
+
return __generator(this, function (_a) {
|
|
118
|
+
switch (_a.label) {
|
|
119
|
+
case 0: return [4 /*yield*/, connection(tableName).where("id", id).update(patch)];
|
|
120
|
+
case 1:
|
|
121
|
+
_a.sent();
|
|
122
|
+
return [4 /*yield*/, get(id)];
|
|
123
|
+
case 2: return [2 /*return*/, _a.sent()];
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}); };
|
|
127
|
+
var create = function (params_) { return __awaiter(_this, void 0, void 0, function () {
|
|
128
|
+
var params, insertedId, inserted, inserted, insertedData;
|
|
129
|
+
return __generator(this, function (_a) {
|
|
130
|
+
switch (_a.label) {
|
|
131
|
+
case 0:
|
|
132
|
+
params = __assign({}, params_);
|
|
133
|
+
if (!(connection.client.config.client === "sqlite3")) return [3 /*break*/, 2];
|
|
134
|
+
return [4 /*yield*/, connection(tableName)
|
|
135
|
+
.returning("id")
|
|
136
|
+
.insert(__assign({}, params))];
|
|
137
|
+
case 1:
|
|
138
|
+
inserted = _a.sent();
|
|
139
|
+
insertedId = inserted[0].id;
|
|
140
|
+
return [3 /*break*/, 4];
|
|
141
|
+
case 2: return [4 /*yield*/, connection(tableName)
|
|
142
|
+
.returning("id")
|
|
143
|
+
.insert(__assign({}, params))];
|
|
144
|
+
case 3:
|
|
145
|
+
inserted = _a.sent();
|
|
146
|
+
insertedId = inserted[0];
|
|
147
|
+
_a.label = 4;
|
|
148
|
+
case 4: return [4 /*yield*/, get(insertedId)];
|
|
149
|
+
case 5:
|
|
150
|
+
insertedData = _a.sent();
|
|
151
|
+
return [2 /*return*/, insertedData];
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}); };
|
|
155
|
+
var replace = function (id, params_) { return __awaiter(_this, void 0, void 0, function () {
|
|
156
|
+
var params, fields, values, insertedData;
|
|
157
|
+
return __generator(this, function (_a) {
|
|
158
|
+
switch (_a.label) {
|
|
159
|
+
case 0:
|
|
160
|
+
params = __assign({ id: id }, params_);
|
|
161
|
+
fields = [];
|
|
162
|
+
values = [];
|
|
163
|
+
Object.keys(params).forEach(function (f) {
|
|
164
|
+
fields.push("`".concat(f, "`=?"));
|
|
165
|
+
values.push(params[f]);
|
|
166
|
+
});
|
|
167
|
+
return [4 /*yield*/, connection.raw("REPLACE INTO `".concat(tableName, "` SET ").concat(fields.join(", "), " WHERE id=?"), __spreadArray(__spreadArray([], values, true), [
|
|
168
|
+
id, // Ensure the ID is at the end for the WHERE clause
|
|
169
|
+
], false))];
|
|
170
|
+
case 1:
|
|
171
|
+
_a.sent();
|
|
172
|
+
return [4 /*yield*/, get(id)];
|
|
173
|
+
case 2:
|
|
174
|
+
insertedData = _a.sent();
|
|
175
|
+
return [2 /*return*/, insertedData];
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}); };
|
|
179
|
+
var delete_ = function (id) { return __awaiter(_this, void 0, void 0, function () {
|
|
180
|
+
var result;
|
|
181
|
+
return __generator(this, function (_a) {
|
|
182
|
+
switch (_a.label) {
|
|
183
|
+
case 0: return [4 /*yield*/, connection(tableName).where("id", id).delete()];
|
|
184
|
+
case 1:
|
|
185
|
+
result = _a.sent();
|
|
186
|
+
return [2 /*return*/, result];
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}); };
|
|
190
|
+
var list = (0, list_1.KnexQueryList)(connection, tableName, searchableFields, filterableFields, sortableFields);
|
|
191
|
+
return {
|
|
192
|
+
init: init,
|
|
193
|
+
get: get,
|
|
194
|
+
replace: replace,
|
|
195
|
+
update: update,
|
|
196
|
+
create: create,
|
|
197
|
+
delete: delete_,
|
|
198
|
+
list: list,
|
|
199
|
+
};
|
|
200
|
+
}
|
package/build/index.d.ts
ADDED
|
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
|
|
18
|
-
exports.default = basic_1.
|
|
17
|
+
var basic_1 = require("./basic");
|
|
18
|
+
exports.default = basic_1.KnexProvider;
|
|
19
19
|
__exportStar(require("./list"), exports);
|
|
20
|
-
//# sourceMappingURL=index.js.map
|
package/build/list.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { QueryListFunction } from "@juadz/core";
|
|
2
|
+
import { Knex } from "knex";
|
|
3
|
+
export interface KnexQueryBuilder {
|
|
4
|
+
clone: () => Knex;
|
|
5
|
+
}
|
|
6
|
+
export declare function KnexQueryList<T>(knex: Knex, tableName: string, searchableFields: string[], filterableFields: string[], sortableFields: string[]): QueryListFunction<T>;
|
package/build/list.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
exports.KnexQueryList = KnexQueryList;
|
|
54
|
+
var dayjs_1 = __importDefault(require("dayjs"));
|
|
55
|
+
var debug_1 = __importDefault(require("debug"));
|
|
56
|
+
var debug = (0, debug_1.default)("juadz:knex:list");
|
|
57
|
+
function KnexQueryList(knex, tableName, searchableFields, filterableFields, sortableFields) {
|
|
58
|
+
var _this = this;
|
|
59
|
+
return function (params) { return __awaiter(_this, void 0, void 0, function () {
|
|
60
|
+
var query, sql, sorter, data, totalRow, total;
|
|
61
|
+
return __generator(this, function (_a) {
|
|
62
|
+
switch (_a.label) {
|
|
63
|
+
case 0:
|
|
64
|
+
query = knex(tableName);
|
|
65
|
+
if (params.filter.length > 0) {
|
|
66
|
+
debug("Applying filters:", params.filter);
|
|
67
|
+
query.where(function (query) {
|
|
68
|
+
params.filter.forEach(function (f) {
|
|
69
|
+
var field = f.field, op = f.op, value = f.value;
|
|
70
|
+
if ((field === "_search") && op === "=") {
|
|
71
|
+
query.andWhere(function (query) {
|
|
72
|
+
(searchableFields || []).forEach(function (k) {
|
|
73
|
+
query.orWhere(k, 'LIKE', "%".concat("".concat(value).replace(/(["'$%]+)/g, ''), "%"));
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!filterableFields.includes(field)) {
|
|
79
|
+
debug("Field \"".concat(field, "\" is not filterable"));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
var values = [];
|
|
83
|
+
if (Array.isArray(value)) {
|
|
84
|
+
values = value;
|
|
85
|
+
}
|
|
86
|
+
switch (op) {
|
|
87
|
+
case "=":
|
|
88
|
+
query.where(field, value);
|
|
89
|
+
return;
|
|
90
|
+
case "!=":
|
|
91
|
+
query.whereNot(field, value);
|
|
92
|
+
return;
|
|
93
|
+
case ">":
|
|
94
|
+
case ">=":
|
|
95
|
+
case "<":
|
|
96
|
+
case "<=":
|
|
97
|
+
query.where(field, op, value);
|
|
98
|
+
return;
|
|
99
|
+
case "in":
|
|
100
|
+
query.whereIn(field, values);
|
|
101
|
+
return;
|
|
102
|
+
case "!in":
|
|
103
|
+
query.whereNotIn(field, values);
|
|
104
|
+
return;
|
|
105
|
+
case "contains":
|
|
106
|
+
query.whereILike(field, "%".concat(value, "%"));
|
|
107
|
+
return;
|
|
108
|
+
case "!contains":
|
|
109
|
+
query.whereRaw("`".concat(field, "` NOT LIKE ?"), [
|
|
110
|
+
"%".concat(value, "%"),
|
|
111
|
+
]);
|
|
112
|
+
return;
|
|
113
|
+
case "between":
|
|
114
|
+
if (query.client.config.client === "sqlite3") {
|
|
115
|
+
query.whereBetween(field, [
|
|
116
|
+
(0, dayjs_1.default)(values[0]).format("YYYY-MM-DD HH:mm:ss"),
|
|
117
|
+
(0, dayjs_1.default)(values[1]).format("YYYY-MM-DD HH:mm:ss"),
|
|
118
|
+
]);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
query.whereBetween(field, [
|
|
122
|
+
values[0],
|
|
123
|
+
values[1],
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
return;
|
|
127
|
+
case "!between":
|
|
128
|
+
query.whereNotBetween(field, [
|
|
129
|
+
values[0],
|
|
130
|
+
values[1],
|
|
131
|
+
]);
|
|
132
|
+
return;
|
|
133
|
+
case "null":
|
|
134
|
+
query.whereNull(field);
|
|
135
|
+
return;
|
|
136
|
+
case "!null":
|
|
137
|
+
query.whereNotNull(field);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
debug("No filters applied");
|
|
145
|
+
}
|
|
146
|
+
sql = null;
|
|
147
|
+
sorter = params.sort.filter((function (s) {
|
|
148
|
+
var pass = sortableFields.includes(s.field);
|
|
149
|
+
if (!pass) {
|
|
150
|
+
debug("Field \"".concat(s.field, "\" is not sortable"));
|
|
151
|
+
}
|
|
152
|
+
return pass;
|
|
153
|
+
}))
|
|
154
|
+
.map(function (s) { return ({
|
|
155
|
+
column: s.field,
|
|
156
|
+
order: s.direction,
|
|
157
|
+
}); });
|
|
158
|
+
if (process.env.NODE_ENV !== "production") {
|
|
159
|
+
sql = query
|
|
160
|
+
.clone()
|
|
161
|
+
.offset(params.range.offset)
|
|
162
|
+
.limit(params.range.limit)
|
|
163
|
+
.orderBy(sorter)
|
|
164
|
+
.toString();
|
|
165
|
+
debug("SQL Query:", sql);
|
|
166
|
+
}
|
|
167
|
+
return [4 /*yield*/, query
|
|
168
|
+
.clone()
|
|
169
|
+
.offset(params.range.offset)
|
|
170
|
+
.limit(params.range.limit)
|
|
171
|
+
.orderBy(sorter)];
|
|
172
|
+
case 1:
|
|
173
|
+
data = _a.sent();
|
|
174
|
+
debug("Data fetched:", data.length, "rows");
|
|
175
|
+
return [4 /*yield*/, query
|
|
176
|
+
.clone()
|
|
177
|
+
.clearSelect()
|
|
178
|
+
.count("* AS T")];
|
|
179
|
+
case 2:
|
|
180
|
+
totalRow = _a.sent();
|
|
181
|
+
total = totalRow && totalRow.length ? totalRow[0].T : 0;
|
|
182
|
+
debug("Total rows:", total);
|
|
183
|
+
return [2 /*return*/, __assign({ total: total, data: data }, (sql ? { sql: sql } : {}))];
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}); };
|
|
187
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
var list_1 = require("./list");
|
|
43
|
+
var knex_1 = __importDefault(require("knex"));
|
|
44
|
+
var knex;
|
|
45
|
+
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
46
|
+
return __generator(this, function (_a) {
|
|
47
|
+
switch (_a.label) {
|
|
48
|
+
case 0:
|
|
49
|
+
knex = (0, knex_1.default)({
|
|
50
|
+
client: "sqlite3",
|
|
51
|
+
connection: {
|
|
52
|
+
filename: ":memory:",
|
|
53
|
+
},
|
|
54
|
+
useNullAsDefault: true,
|
|
55
|
+
});
|
|
56
|
+
return [4 /*yield*/, knex.schema.createTable("users", function (table) {
|
|
57
|
+
table.increments();
|
|
58
|
+
table.string("name");
|
|
59
|
+
table.string("last_name");
|
|
60
|
+
table.integer("age");
|
|
61
|
+
table.string("tool");
|
|
62
|
+
})];
|
|
63
|
+
case 1:
|
|
64
|
+
_a.sent();
|
|
65
|
+
return [4 /*yield*/, knex("users").insert([
|
|
66
|
+
{ name: "Peter", last_name: "Parker", age: 11, tool: "ruler" },
|
|
67
|
+
{ name: "Mark", last_name: "Olivier", age: 18, tool: "pencil" },
|
|
68
|
+
{ name: "Andre", last_name: "Hudson", age: 18, tool: "pen" },
|
|
69
|
+
{ name: "Tony", last_name: "Oliver", age: 18, tool: "pen" },
|
|
70
|
+
{ name: "Bruce", last_name: "Pedersen", age: 13, tool: "crayon" },
|
|
71
|
+
])];
|
|
72
|
+
case 2:
|
|
73
|
+
_a.sent();
|
|
74
|
+
return [2 /*return*/];
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}); });
|
|
78
|
+
afterAll(function () {
|
|
79
|
+
// The test uses an in-memory SQLite database (:memory:), so /tmp/test.sqlite is never created. Remove or update this cleanup to match the actual test database.
|
|
80
|
+
// unlink('/tmp/test.sqlite', () => {});
|
|
81
|
+
});
|
|
82
|
+
test("KnexQueryList", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
83
|
+
var func, result, r, debug;
|
|
84
|
+
return __generator(this, function (_a) {
|
|
85
|
+
switch (_a.label) {
|
|
86
|
+
case 0:
|
|
87
|
+
func = (0, list_1.KnexQueryList)(knex, "users", ['name', 'lastname'], ['age', 'tool'], ['age']);
|
|
88
|
+
return [4 /*yield*/, func({
|
|
89
|
+
resource: "users",
|
|
90
|
+
range: { offset: 0, limit: 10 },
|
|
91
|
+
sort: [{ field: "age", direction: "ASC" }],
|
|
92
|
+
filter: [
|
|
93
|
+
{ field: "_search", op: "=", value: "Pe" },
|
|
94
|
+
{ field: "age", op: "between", value: [8, 17] },
|
|
95
|
+
{ field: "tool", op: "!in", value: ["pencil", "pen"] },
|
|
96
|
+
],
|
|
97
|
+
})];
|
|
98
|
+
case 1:
|
|
99
|
+
result = _a.sent();
|
|
100
|
+
expect(result.total).toBe(2);
|
|
101
|
+
expect(result.data[0]).toMatchObject({
|
|
102
|
+
name: "Peter",
|
|
103
|
+
last_name: "Parker",
|
|
104
|
+
age: 11,
|
|
105
|
+
tool: "ruler",
|
|
106
|
+
});
|
|
107
|
+
expect(result.data[1]).toMatchObject({
|
|
108
|
+
name: "Bruce",
|
|
109
|
+
last_name: "Pedersen",
|
|
110
|
+
age: 13,
|
|
111
|
+
tool: "crayon",
|
|
112
|
+
});
|
|
113
|
+
r = result;
|
|
114
|
+
debug = r.debug;
|
|
115
|
+
expect(debug).toBe("select * from `users` where ((`name` like '%Pe%' or `last_name` like '%Pe%') and `age` between 8 and 17 and `tool` not in ('pencil', 'pen')) order by `age` ASC limit 10");
|
|
116
|
+
return [2 /*return*/];
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}); });
|
package/build/types.d.ts
ADDED
|
File without changes
|
package/build/types.js
ADDED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,53 +1,56 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juadz/knex",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
5
|
-
"main": "build/
|
|
6
|
-
"types": "build/
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Juadz: Rapid restful API development",
|
|
5
|
+
"main": "build/index.js",
|
|
6
|
+
"types": "build/index.d.ts",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=12.0.0"
|
|
9
|
+
},
|
|
7
10
|
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
8
12
|
"test": "jest .",
|
|
9
|
-
"lint": "
|
|
10
|
-
"clean": "gts clean",
|
|
13
|
+
"lint": "eslint . --ext .ts",
|
|
11
14
|
"compile": "tsc",
|
|
12
|
-
"fix": "
|
|
15
|
+
"fix": "eslint . --ext .ts --fix",
|
|
13
16
|
"prepare": "yarn run compile",
|
|
14
17
|
"pretest": "yarn run compile",
|
|
15
18
|
"posttest": "yarn run lint"
|
|
16
19
|
},
|
|
17
|
-
"author": "
|
|
18
|
-
"license": "MIT",
|
|
20
|
+
"author": "hereblur",
|
|
19
21
|
"repository": {
|
|
20
22
|
"type": "git",
|
|
21
|
-
"url": "
|
|
22
|
-
},
|
|
23
|
-
"files": [
|
|
24
|
-
"build/**/*"
|
|
25
|
-
],
|
|
26
|
-
"peerDependencies": {
|
|
27
|
-
"@juadz/core": "^0.3.9",
|
|
28
|
-
"knex": "^2.2.0"
|
|
23
|
+
"url": "github.com/hereblur/juadz-core.git"
|
|
29
24
|
},
|
|
25
|
+
"license": "MIT",
|
|
30
26
|
"devDependencies": {
|
|
31
|
-
"@babel/core": "^7.
|
|
32
|
-
"@babel/preset-env": "^7.
|
|
33
|
-
"@babel/preset-typescript": "^7.
|
|
34
|
-
"@
|
|
35
|
-
"@types/jest": "^
|
|
36
|
-
"@types/
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"jest": "^
|
|
45
|
-
"knex": "^
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
27
|
+
"@babel/core": "^7.26.7",
|
|
28
|
+
"@babel/preset-env": "^7.26.7",
|
|
29
|
+
"@babel/preset-typescript": "^7.26.0",
|
|
30
|
+
"@types/debug": "^4.1.12",
|
|
31
|
+
"@types/jest": "^29.5.14",
|
|
32
|
+
"@types/node": "^22.7.5",
|
|
33
|
+
"@typescript-eslint/eslint-plugin": "^8.36.0",
|
|
34
|
+
"@typescript-eslint/parser": "^8.36.0",
|
|
35
|
+
"dayjs": "^1.11.13",
|
|
36
|
+
"debug": "^4.4.0",
|
|
37
|
+
"eslint": "^9.30.1",
|
|
38
|
+
"eslint-config-prettier": "^10.1.5",
|
|
39
|
+
"eslint-plugin-prettier": "^5.5.1",
|
|
40
|
+
"jest": "^29.7.0",
|
|
41
|
+
"knex": "^3.1.0",
|
|
42
|
+
"mysql2": "^3.14.1",
|
|
43
|
+
"prettier": "^3.6.2",
|
|
44
|
+
"sqlite": "^5.1.1",
|
|
45
|
+
"tsc": "^2.0.4",
|
|
46
|
+
"typescript": "^5.6.3",
|
|
47
|
+
"zod": "^4",
|
|
48
|
+
"@juadz/core": "^0.5.0"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"debug": "^4.4.0",
|
|
52
|
+
"zod": "^4",
|
|
53
|
+
"@juadz/core": "^0.5.0"
|
|
49
54
|
},
|
|
50
|
-
"dependencies": {
|
|
51
|
-
"@juadz/core": "^0.3.0"
|
|
52
|
-
}
|
|
55
|
+
"dependencies": {}
|
|
53
56
|
}
|