@juadz/knex 0.5.1 → 0.5.2
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/build/basic.d.ts +3 -2
- package/build/basic.js +15 -18
- package/build/list.js +17 -13
- package/build/list.test.js +4 -3
- package/package.json +1 -1
- package/src/basic.ts +25 -23
- package/src/list.test.ts +8 -4
- package/src/list.ts +17 -16
package/build/basic.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { IDataRecord, IDataRepositoryProvider
|
|
1
|
+
import { IDataRecord, IDataRepositoryProvider } from "@juadz/core";
|
|
2
2
|
import { Knex } from "knex";
|
|
3
|
-
|
|
3
|
+
import { output, ZodObject, ZodRawShape } from "zod";
|
|
4
|
+
export declare function KnexProvider<Shape extends ZodRawShape, Schema extends ZodObject<Shape>, T extends IDataRecord = output<Schema> & IDataRecord>(dataTableName: string, schema: Schema, connection: Knex): IDataRepositoryProvider<T>;
|
package/build/basic.js
CHANGED
|
@@ -57,24 +57,20 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
57
57
|
};
|
|
58
58
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
59
|
exports.KnexProvider = KnexProvider;
|
|
60
|
+
var core_1 = require("@juadz/core");
|
|
60
61
|
var list_1 = require("./list");
|
|
61
|
-
function KnexProvider(schema, connection
|
|
62
|
+
function KnexProvider(dataTableName, schema, connection) {
|
|
62
63
|
var _this = this;
|
|
63
|
-
|
|
64
|
-
var
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
var
|
|
68
|
-
.filter(function (v) { return v[1].$filter == true; })
|
|
69
|
-
.map(function (k) { return k[0]; });
|
|
70
|
-
var sortableFields = Object.entries(schema.flags)
|
|
71
|
-
.filter(function (v) { return v[1].$sort == true; })
|
|
72
|
-
.map(function (k) { return k[0]; });
|
|
64
|
+
// schema.name = schema.name || dataTableName;
|
|
65
|
+
var flags = (0, core_1.flagPaths)(schema);
|
|
66
|
+
var searchableFields = flags.$search || [];
|
|
67
|
+
var filterableFields = flags.$filter || [];
|
|
68
|
+
var sortableFields = flags.$sort || [];
|
|
73
69
|
var get = function (id) { return __awaiter(_this, void 0, void 0, function () {
|
|
74
70
|
var c;
|
|
75
71
|
return __generator(this, function (_a) {
|
|
76
72
|
switch (_a.label) {
|
|
77
|
-
case 0: return [4 /*yield*/, connection(
|
|
73
|
+
case 0: return [4 /*yield*/, connection(dataTableName)
|
|
78
74
|
.select("*")
|
|
79
75
|
.where("id", id)
|
|
80
76
|
.first()];
|
|
@@ -87,7 +83,7 @@ function KnexProvider(schema, connection, dataTableName) {
|
|
|
87
83
|
var update = function (id, patch) { return __awaiter(_this, void 0, void 0, function () {
|
|
88
84
|
return __generator(this, function (_a) {
|
|
89
85
|
switch (_a.label) {
|
|
90
|
-
case 0: return [4 /*yield*/, connection(
|
|
86
|
+
case 0: return [4 /*yield*/, connection(dataTableName).where("id", id).update(patch)];
|
|
91
87
|
case 1:
|
|
92
88
|
_a.sent();
|
|
93
89
|
return [4 /*yield*/, get(id)];
|
|
@@ -102,14 +98,14 @@ function KnexProvider(schema, connection, dataTableName) {
|
|
|
102
98
|
case 0:
|
|
103
99
|
params = __assign({}, params_);
|
|
104
100
|
if (!(connection.client.config.client === "sqlite3")) return [3 /*break*/, 2];
|
|
105
|
-
return [4 /*yield*/, connection(
|
|
101
|
+
return [4 /*yield*/, connection(dataTableName)
|
|
106
102
|
.returning("id")
|
|
107
103
|
.insert(__assign({}, params))];
|
|
108
104
|
case 1:
|
|
109
105
|
inserted = _a.sent();
|
|
110
106
|
insertedId = inserted[0].id;
|
|
111
107
|
return [3 /*break*/, 4];
|
|
112
|
-
case 2: return [4 /*yield*/, connection(
|
|
108
|
+
case 2: return [4 /*yield*/, connection(dataTableName)
|
|
113
109
|
.returning("id")
|
|
114
110
|
.insert(__assign({}, params))];
|
|
115
111
|
case 3:
|
|
@@ -135,7 +131,7 @@ function KnexProvider(schema, connection, dataTableName) {
|
|
|
135
131
|
fields.push("`".concat(f, "`=?"));
|
|
136
132
|
values.push(params[f]);
|
|
137
133
|
});
|
|
138
|
-
return [4 /*yield*/, connection.raw("REPLACE INTO `".concat(
|
|
134
|
+
return [4 /*yield*/, connection.raw("REPLACE INTO `".concat(dataTableName, "` SET ").concat(fields.join(", "), " WHERE id=?"), __spreadArray(__spreadArray([], values, true), [
|
|
139
135
|
id, // Ensure the ID is at the end for the WHERE clause
|
|
140
136
|
], false))];
|
|
141
137
|
case 1:
|
|
@@ -151,16 +147,17 @@ function KnexProvider(schema, connection, dataTableName) {
|
|
|
151
147
|
var result;
|
|
152
148
|
return __generator(this, function (_a) {
|
|
153
149
|
switch (_a.label) {
|
|
154
|
-
case 0: return [4 /*yield*/, connection(
|
|
150
|
+
case 0: return [4 /*yield*/, connection(dataTableName).where("id", id).delete()];
|
|
155
151
|
case 1:
|
|
156
152
|
result = _a.sent();
|
|
157
153
|
return [2 /*return*/, result];
|
|
158
154
|
}
|
|
159
155
|
});
|
|
160
156
|
}); };
|
|
161
|
-
var list = (0, list_1.KnexQueryList)(connection,
|
|
157
|
+
var list = (0, list_1.KnexQueryList)(connection, dataTableName, searchableFields, filterableFields, sortableFields);
|
|
162
158
|
return {
|
|
163
159
|
schema: schema,
|
|
160
|
+
name: dataTableName,
|
|
164
161
|
get: get,
|
|
165
162
|
replace: replace,
|
|
166
163
|
update: update,
|
package/build/list.js
CHANGED
|
@@ -51,7 +51,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
51
51
|
};
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
53
|
exports.KnexQueryList = KnexQueryList;
|
|
54
|
-
|
|
54
|
+
// import dayjs from "dayjs";
|
|
55
55
|
var debug_1 = __importDefault(require("debug"));
|
|
56
56
|
var debug = (0, debug_1.default)("juadz:knex:list");
|
|
57
57
|
function KnexQueryList(knex, tableName, searchableFields, filterableFields, sortableFields) {
|
|
@@ -111,18 +111,22 @@ function KnexQueryList(knex, tableName, searchableFields, filterableFields, sort
|
|
|
111
111
|
]);
|
|
112
112
|
return;
|
|
113
113
|
case "between":
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
114
|
+
query.whereBetween(field, [values[0], values[1]]);
|
|
115
|
+
//if (query.client.config.client === "sqlite3") {
|
|
116
|
+
// query.whereBetween(field, [
|
|
117
|
+
// dayjs(values[0]).format(
|
|
118
|
+
// "YYYY-MM-DD HH:mm:ss",
|
|
119
|
+
// ),
|
|
120
|
+
// dayjs(values[1]).format(
|
|
121
|
+
// "YYYY-MM-DD HH:mm:ss",
|
|
122
|
+
// ),
|
|
123
|
+
// ]);
|
|
124
|
+
//} else {
|
|
125
|
+
// query.whereBetween(field, [
|
|
126
|
+
// values[0],
|
|
127
|
+
// values[1],
|
|
128
|
+
// ]);
|
|
129
|
+
//}
|
|
126
130
|
return;
|
|
127
131
|
case "!between":
|
|
128
132
|
query.whereNotBetween(field, [
|
package/build/list.test.js
CHANGED
|
@@ -84,7 +84,7 @@ test("KnexQueryList", function () { return __awaiter(void 0, void 0, void 0, fun
|
|
|
84
84
|
return __generator(this, function (_a) {
|
|
85
85
|
switch (_a.label) {
|
|
86
86
|
case 0:
|
|
87
|
-
func = (0, list_1.KnexQueryList)(knex, "users", ["name", "
|
|
87
|
+
func = (0, list_1.KnexQueryList)(knex, "users", ["name", "last_name"], ["age", "tool"], ["age"]);
|
|
88
88
|
return [4 /*yield*/, func({
|
|
89
89
|
resource: "users",
|
|
90
90
|
range: { offset: 0, limit: 10 },
|
|
@@ -97,6 +97,9 @@ test("KnexQueryList", function () { return __awaiter(void 0, void 0, void 0, fun
|
|
|
97
97
|
})];
|
|
98
98
|
case 1:
|
|
99
99
|
result = _a.sent();
|
|
100
|
+
r = result;
|
|
101
|
+
debug = r.sql;
|
|
102
|
+
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");
|
|
100
103
|
expect(result.total).toBe(2);
|
|
101
104
|
expect(result.data[0]).toMatchObject({
|
|
102
105
|
name: "Peter",
|
|
@@ -110,8 +113,6 @@ test("KnexQueryList", function () { return __awaiter(void 0, void 0, void 0, fun
|
|
|
110
113
|
age: 13,
|
|
111
114
|
tool: "crayon",
|
|
112
115
|
});
|
|
113
|
-
r = result;
|
|
114
|
-
debug = r.debug;
|
|
115
116
|
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
117
|
return [2 /*return*/];
|
|
117
118
|
}
|
package/package.json
CHANGED
package/src/basic.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { IDataRecord, IDataRepositoryProvider
|
|
1
|
+
import { flagPaths, IDataRecord, IDataRepositoryProvider } from "@juadz/core";
|
|
2
2
|
import { Knex } from "knex";
|
|
3
3
|
import { KnexQueryList } from "./list";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
import { output, ZodObject, ZodRawShape } from "zod";
|
|
5
|
+
|
|
6
|
+
export function KnexProvider<
|
|
7
|
+
Shape extends ZodRawShape,
|
|
8
|
+
Schema extends ZodObject<Shape>,
|
|
9
|
+
T extends IDataRecord = output<Schema> & IDataRecord,
|
|
10
|
+
>(
|
|
11
|
+
dataTableName: string,
|
|
12
|
+
schema: Schema,
|
|
7
13
|
connection: Knex,
|
|
8
|
-
dataTableName?: string,
|
|
9
14
|
): IDataRepositoryProvider<T> {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
.filter((v) => v[1].$filter == true)
|
|
17
|
-
.map((k) => k[0]);
|
|
18
|
-
const sortableFields = Object.entries(schema.flags)
|
|
19
|
-
.filter((v) => v[1].$sort == true)
|
|
20
|
-
.map((k) => k[0]);
|
|
15
|
+
// schema.name = schema.name || dataTableName;
|
|
16
|
+
const flags = flagPaths(schema);
|
|
17
|
+
|
|
18
|
+
const searchableFields = flags.$search || [];
|
|
19
|
+
const filterableFields = flags.$filter || [];
|
|
20
|
+
const sortableFields = flags.$sort || [];
|
|
21
21
|
|
|
22
22
|
const get = async (id: string | number) => {
|
|
23
|
-
const c = await connection(
|
|
23
|
+
const c = await connection(dataTableName)
|
|
24
24
|
.select("*")
|
|
25
25
|
.where("id", id)
|
|
26
26
|
.first();
|
|
@@ -29,7 +29,7 @@ export function KnexProvider<T extends IDataRecord>(
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
const update = async (id: string | number, patch: object) => {
|
|
32
|
-
await connection(
|
|
32
|
+
await connection(dataTableName).where("id", id).update(patch);
|
|
33
33
|
|
|
34
34
|
return await get(id);
|
|
35
35
|
};
|
|
@@ -43,7 +43,7 @@ export function KnexProvider<T extends IDataRecord>(
|
|
|
43
43
|
|
|
44
44
|
if (connection.client.config.client === "sqlite3") {
|
|
45
45
|
// SQLite does not support `.returning('id')`
|
|
46
|
-
const inserted = await connection(
|
|
46
|
+
const inserted = await connection(dataTableName)
|
|
47
47
|
.returning("id")
|
|
48
48
|
.insert({
|
|
49
49
|
...params,
|
|
@@ -52,7 +52,7 @@ export function KnexProvider<T extends IDataRecord>(
|
|
|
52
52
|
insertedId = (inserted[0] as unknown as { id: string | number }).id;
|
|
53
53
|
} else {
|
|
54
54
|
// For other SQL clients that support `.returning('id')`
|
|
55
|
-
const inserted = await connection(
|
|
55
|
+
const inserted = await connection(dataTableName)
|
|
56
56
|
.returning("id")
|
|
57
57
|
.insert({
|
|
58
58
|
...params,
|
|
@@ -79,7 +79,7 @@ export function KnexProvider<T extends IDataRecord>(
|
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
await connection.raw(
|
|
82
|
-
`REPLACE INTO \`${
|
|
82
|
+
`REPLACE INTO \`${dataTableName}\` SET ${fields.join(", ")} WHERE id=?`,
|
|
83
83
|
[
|
|
84
84
|
...values,
|
|
85
85
|
id, // Ensure the ID is at the end for the WHERE clause
|
|
@@ -92,14 +92,14 @@ export function KnexProvider<T extends IDataRecord>(
|
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
const delete_ = async (id: string | number) => {
|
|
95
|
-
const result = await connection(
|
|
95
|
+
const result = await connection(dataTableName).where("id", id).delete();
|
|
96
96
|
|
|
97
97
|
return result;
|
|
98
98
|
};
|
|
99
99
|
|
|
100
100
|
const list = KnexQueryList(
|
|
101
101
|
connection,
|
|
102
|
-
|
|
102
|
+
dataTableName,
|
|
103
103
|
searchableFields,
|
|
104
104
|
filterableFields,
|
|
105
105
|
sortableFields,
|
|
@@ -107,6 +107,8 @@ export function KnexProvider<T extends IDataRecord>(
|
|
|
107
107
|
|
|
108
108
|
return {
|
|
109
109
|
schema,
|
|
110
|
+
name: dataTableName,
|
|
111
|
+
|
|
110
112
|
get,
|
|
111
113
|
replace,
|
|
112
114
|
update,
|
package/src/list.test.ts
CHANGED
|
@@ -42,7 +42,7 @@ test("KnexQueryList", async () => {
|
|
|
42
42
|
const func = KnexQueryList(
|
|
43
43
|
knex,
|
|
44
44
|
"users",
|
|
45
|
-
["name", "
|
|
45
|
+
["name", "last_name"],
|
|
46
46
|
["age", "tool"],
|
|
47
47
|
["age"],
|
|
48
48
|
);
|
|
@@ -57,6 +57,12 @@ test("KnexQueryList", async () => {
|
|
|
57
57
|
{ field: "tool", op: "!in", value: ["pencil", "pen"] },
|
|
58
58
|
],
|
|
59
59
|
});
|
|
60
|
+
const r = result as unknown;
|
|
61
|
+
const { sql: debug } = r as DebugObj;
|
|
62
|
+
|
|
63
|
+
expect(debug).toBe(
|
|
64
|
+
"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",
|
|
65
|
+
);
|
|
60
66
|
|
|
61
67
|
expect(result.total).toBe(2);
|
|
62
68
|
expect(result.data[0]).toMatchObject({
|
|
@@ -72,13 +78,11 @@ test("KnexQueryList", async () => {
|
|
|
72
78
|
tool: "crayon",
|
|
73
79
|
});
|
|
74
80
|
|
|
75
|
-
const r = result as unknown;
|
|
76
|
-
const { debug } = r as DebugObj;
|
|
77
81
|
expect(debug).toBe(
|
|
78
82
|
"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",
|
|
79
83
|
);
|
|
80
84
|
});
|
|
81
85
|
|
|
82
86
|
interface DebugObj {
|
|
83
|
-
|
|
87
|
+
sql: string;
|
|
84
88
|
}
|
package/src/list.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { QueryListParam, QueryFilter, QueryListFunction } from "@juadz/core";
|
|
2
2
|
|
|
3
3
|
import { Knex } from "knex";
|
|
4
|
-
import dayjs from "dayjs";
|
|
4
|
+
// import dayjs from "dayjs";
|
|
5
5
|
import Debug from "debug";
|
|
6
6
|
|
|
7
7
|
const debug = Debug("juadz:knex:list");
|
|
@@ -80,21 +80,22 @@ export function KnexQueryList<T>(
|
|
|
80
80
|
]);
|
|
81
81
|
return;
|
|
82
82
|
case "between":
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
83
|
+
query.whereBetween(field, [values[0], values[1]]);
|
|
84
|
+
//if (query.client.config.client === "sqlite3") {
|
|
85
|
+
// query.whereBetween(field, [
|
|
86
|
+
// dayjs(values[0]).format(
|
|
87
|
+
// "YYYY-MM-DD HH:mm:ss",
|
|
88
|
+
// ),
|
|
89
|
+
// dayjs(values[1]).format(
|
|
90
|
+
// "YYYY-MM-DD HH:mm:ss",
|
|
91
|
+
// ),
|
|
92
|
+
// ]);
|
|
93
|
+
//} else {
|
|
94
|
+
// query.whereBetween(field, [
|
|
95
|
+
// values[0],
|
|
96
|
+
// values[1],
|
|
97
|
+
// ]);
|
|
98
|
+
//}
|
|
98
99
|
|
|
99
100
|
return;
|
|
100
101
|
case "!between":
|