@juadz/knex 0.3.1 → 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.
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ presets: [
3
+ ['@babel/preset-env', {targets: {node: 'current'}}],
4
+ '@babel/preset-typescript',
5
+ ],
6
+ };
@@ -0,0 +1,3 @@
1
+ import { IDataRecord, IDataRepositoryProvider } from "@juadz/core";
2
+ import { Knex } from "knex";
3
+ export declare function KnexProvider<T extends IDataRecord>(connection: Knex, dataTableName?: string): IDataRepositoryProvider<T>;
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
+ }
@@ -0,0 +1,3 @@
1
+ import { KnexProvider } from "./basic";
2
+ export default KnexProvider;
3
+ export * from "./list";
@@ -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
- const basic_1 = require("./basic");
18
- exports.default = basic_1.SimpleKnexConnection;
17
+ var basic_1 = require("./basic");
18
+ exports.default = basic_1.KnexProvider;
19
19
  __exportStar(require("./list"), exports);
20
- //# sourceMappingURL=index.js.map
@@ -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
+ }); });
File without changes
package/build/types.js ADDED
File without changes
package/package.json CHANGED
@@ -1,50 +1,56 @@
1
1
  {
2
2
  "name": "@juadz/knex",
3
- "version": "0.3.1",
4
- "description": "Use Knex as datalayer's for Juadz.",
5
- "main": "build/src/index.js",
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
+ },
6
10
  "scripts": {
11
+ "build": "tsc",
7
12
  "test": "jest .",
8
- "lint": "gts lint",
9
- "clean": "gts clean",
13
+ "lint": "eslint . --ext .ts",
10
14
  "compile": "tsc",
11
- "fix": "gts fix",
15
+ "fix": "eslint . --ext .ts --fix",
12
16
  "prepare": "yarn run compile",
13
17
  "pretest": "yarn run compile",
14
18
  "posttest": "yarn run lint"
15
19
  },
16
- "author": "Supasak Sutha",
17
- "license": "MIT",
20
+ "author": "hereblur",
18
21
  "repository": {
19
22
  "type": "git",
20
- "url": "https://github.com/hereblur/juadz-knex"
21
- },
22
- "files": [
23
- "build/**/*"
24
- ],
25
- "peerDependencies": {
26
- "@juadz/core": "^0.1.2",
27
- "ajv": "^8.11.0",
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.18.10",
32
- "@babel/preset-env": "^7.18.10",
33
- "@babel/preset-typescript": "^7.18.6",
34
- "@types/jest": "^28.1.6",
35
- "@types/jsonwebtoken": "^8.5.9",
36
- "@types/memory-cache": "^0.2.2",
37
- "@types/node": "^18.6.4",
38
- "@types/rimraf": "^3.0.2",
39
- "babel-jest": "^28.1.3",
40
- "gts": "^3.1.0",
41
- "jest": "^28.1.3",
42
- "knex": "^2.2.0",
43
- "redis": "^4.2.0",
44
- "sqlite3": "^5.0.11",
45
- "typescript": "^4.7.4"
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"
46
54
  },
47
- "dependencies": {
48
- "@juadz/core": "^0.3.0"
49
- }
55
+ "dependencies": {}
50
56
  }