@juadz/knex 0.5.0 → 0.5.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/build/basic.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { IDataRecord, IDataRepositoryProvider } from "@juadz/core";
1
+ import { IDataRecord, IDataRepositoryProvider, Schema } from "@juadz/core";
2
2
  import { Knex } from "knex";
3
- export declare function KnexProvider<T extends IDataRecord>(connection: Knex, dataTableName?: string): IDataRepositoryProvider<T>;
3
+ export declare function KnexProvider<T extends IDataRecord>(schema: Schema<T>, connection: Knex, dataTableName?: string): IDataRepositoryProvider<T>;
package/build/basic.js CHANGED
@@ -58,47 +58,18 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
58
58
  Object.defineProperty(exports, "__esModule", { value: true });
59
59
  exports.KnexProvider = KnexProvider;
60
60
  var list_1 = require("./list");
61
- function KnexProvider(connection, dataTableName) {
61
+ function KnexProvider(schema, connection, dataTableName) {
62
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
- }); };
63
+ var tableName = dataTableName || schema.name;
64
+ var searchableFields = Object.entries(schema.flags)
65
+ .filter(function (v) { return v[1].$search == true; })
66
+ .map(function (k) { return k[0]; });
67
+ var filterableFields = Object.entries(schema.flags)
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]; });
102
73
  var get = function (id) { return __awaiter(_this, void 0, void 0, function () {
103
74
  var c;
104
75
  return __generator(this, function (_a) {
@@ -189,7 +160,7 @@ function KnexProvider(connection, dataTableName) {
189
160
  }); };
190
161
  var list = (0, list_1.KnexQueryList)(connection, tableName, searchableFields, filterableFields, sortableFields);
191
162
  return {
192
- init: init,
163
+ schema: schema,
193
164
  get: get,
194
165
  replace: replace,
195
166
  update: update,
package/build/list.js CHANGED
@@ -67,10 +67,10 @@ function KnexQueryList(knex, tableName, searchableFields, filterableFields, sort
67
67
  query.where(function (query) {
68
68
  params.filter.forEach(function (f) {
69
69
  var field = f.field, op = f.op, value = f.value;
70
- if ((field === "_search") && op === "=") {
70
+ if (field === "_search" && op === "=") {
71
71
  query.andWhere(function (query) {
72
72
  (searchableFields || []).forEach(function (k) {
73
- query.orWhere(k, 'LIKE', "%".concat("".concat(value).replace(/(["'$%]+)/g, ''), "%"));
73
+ query.orWhere(k, "LIKE", "%".concat("".concat(value).replace(/(["'$%]+)/g, ""), "%"));
74
74
  });
75
75
  });
76
76
  return;
@@ -144,13 +144,14 @@ function KnexQueryList(knex, tableName, searchableFields, filterableFields, sort
144
144
  debug("No filters applied");
145
145
  }
146
146
  sql = null;
147
- sorter = params.sort.filter((function (s) {
147
+ sorter = params.sort
148
+ .filter(function (s) {
148
149
  var pass = sortableFields.includes(s.field);
149
150
  if (!pass) {
150
151
  debug("Field \"".concat(s.field, "\" is not sortable"));
151
152
  }
152
153
  return pass;
153
- }))
154
+ })
154
155
  .map(function (s) { return ({
155
156
  column: s.field,
156
157
  order: s.direction,
@@ -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', 'lastname'], ['age', 'tool'], ['age']);
87
+ func = (0, list_1.KnexQueryList)(knex, "users", ["name", "lastname"], ["age", "tool"], ["age"]);
88
88
  return [4 /*yield*/, func({
89
89
  resource: "users",
90
90
  range: { offset: 0, limit: 10 },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juadz/knex",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Juadz: Rapid restful API development",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -27,6 +27,7 @@
27
27
  "@babel/core": "^7.26.7",
28
28
  "@babel/preset-env": "^7.26.7",
29
29
  "@babel/preset-typescript": "^7.26.0",
30
+ "@juadz/core": "^0.5.0",
30
31
  "@types/debug": "^4.1.12",
31
32
  "@types/jest": "^29.5.14",
32
33
  "@types/node": "^22.7.5",
@@ -44,13 +45,12 @@
44
45
  "sqlite": "^5.1.1",
45
46
  "tsc": "^2.0.4",
46
47
  "typescript": "^5.6.3",
47
- "zod": "^4",
48
- "@juadz/core": "^0.5.0"
48
+ "zod": "^4"
49
49
  },
50
50
  "peerDependencies": {
51
+ "@juadz/core": "^0.5.0",
51
52
  "debug": "^4.4.0",
52
- "zod": "^4",
53
- "@juadz/core": "^0.5.0"
53
+ "zod": "^4"
54
54
  },
55
55
  "dependencies": {}
56
56
  }
package/src/basic.ts CHANGED
@@ -3,30 +3,21 @@ import { Knex } from "knex";
3
3
  import { KnexQueryList } from "./list";
4
4
 
5
5
  export function KnexProvider<T extends IDataRecord>(
6
+ schema: Schema<T>,
6
7
  connection: Knex,
7
8
  dataTableName?: string,
8
9
  ): IDataRepositoryProvider<T> {
9
-
10
- let tableName = dataTableName || null;
11
- let searchableFields: Array<string> = [];
12
- let filterableFields: Array<string> = [];
13
- let sortableFields: Array<string> = [];
14
-
15
- const init = async (sch: Schema<T>) => {
16
- if (!tableName) {
17
- tableName = sch.name;
18
- }
19
-
20
- searchableFields = Object.entries(sch.flags)
21
- .filter(([_, v]) => v.$search == true)
22
- .map(([k, _]) => k);
23
- filterableFields = Object.entries(sch.flags)
24
- .filter(([_, v]) => v.$filter == true)
25
- .map(([k, _]) => k);
26
- sortableFields = Object.entries(sch.flags)
27
- .filter(([_, v]) => v.$sort == true)
28
- .map(([k, _]) => k);
29
- }
10
+ const tableName = dataTableName || schema.name;
11
+
12
+ const searchableFields = Object.entries(schema.flags)
13
+ .filter((v) => v[1].$search == true)
14
+ .map((k) => k[0]);
15
+ const filterableFields = Object.entries(schema.flags)
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]);
30
21
 
31
22
  const get = async (id: string | number) => {
32
23
  const c = await connection(tableName)
@@ -59,7 +50,7 @@ export function KnexProvider<T extends IDataRecord>(
59
50
  });
60
51
 
61
52
  insertedId = (inserted[0] as unknown as { id: string | number }).id;
62
- } else {
53
+ } else {
63
54
  // For other SQL clients that support `.returning('id')`
64
55
  const inserted = await connection(tableName)
65
56
  .returning("id")
@@ -106,10 +97,16 @@ export function KnexProvider<T extends IDataRecord>(
106
97
  return result;
107
98
  };
108
99
 
109
- const list = KnexQueryList(connection, tableName, searchableFields, filterableFields, sortableFields);
100
+ const list = KnexQueryList(
101
+ connection,
102
+ tableName,
103
+ searchableFields,
104
+ filterableFields,
105
+ sortableFields,
106
+ );
110
107
 
111
108
  return {
112
- init,
109
+ schema,
113
110
  get,
114
111
  replace,
115
112
  update,
package/src/list.test.ts CHANGED
@@ -39,7 +39,13 @@ afterAll(() => {
39
39
  });
40
40
 
41
41
  test("KnexQueryList", async () => {
42
- const func = KnexQueryList(knex, "users", ['name', 'lastname'], ['age', 'tool'], ['age']);
42
+ const func = KnexQueryList(
43
+ knex,
44
+ "users",
45
+ ["name", "lastname"],
46
+ ["age", "tool"],
47
+ ["age"],
48
+ );
43
49
 
44
50
  const result: QueryListResults<unknown> = await func({
45
51
  resource: "users",
package/src/list.ts CHANGED
@@ -18,7 +18,7 @@ export function KnexQueryList<T>(
18
18
  knex: Knex,
19
19
  tableName: string,
20
20
  searchableFields: string[],
21
- filterableFields: string[],
21
+ filterableFields: string[],
22
22
  sortableFields: string[],
23
23
  ): QueryListFunction<T> {
24
24
  return async (params: QueryListParam) => {
@@ -29,16 +29,15 @@ export function KnexQueryList<T>(
29
29
  query.where((query: Knex) => {
30
30
  params.filter.forEach((f: QueryFilter) => {
31
31
  const { field, op, value } = f;
32
- if ((field === "_search") && op === "=") {
32
+ if (field === "_search" && op === "=") {
33
33
  query.andWhere((query: Knex) => {
34
-
35
- (searchableFields || []).forEach(k => {
36
- query.orWhere(
37
- k as string,
38
- 'LIKE',
39
- `%${`${value}`.replace(/(["'$%]+)/g, '')}%`
40
- );
41
- });
34
+ (searchableFields || []).forEach((k) => {
35
+ query.orWhere(
36
+ k as string,
37
+ "LIKE",
38
+ `%${`${value}`.replace(/(["'$%]+)/g, "")}%`,
39
+ );
40
+ });
42
41
  });
43
42
  return;
44
43
  }
@@ -119,18 +118,18 @@ export function KnexQueryList<T>(
119
118
 
120
119
  let sql = null;
121
120
 
122
- const sorter = params.sort.filter((s => {
123
- const pass = sortableFields.includes(s.field);
124
- if (!pass) {
125
- debug(`Field "${s.field}" is not sortable`);
126
- }
127
- return pass;
128
- }))
129
- .map((s) => ({
130
- column: s.field,
131
- order: s.direction,
132
- }));
133
-
121
+ const sorter = params.sort
122
+ .filter((s) => {
123
+ const pass = sortableFields.includes(s.field);
124
+ if (!pass) {
125
+ debug(`Field "${s.field}" is not sortable`);
126
+ }
127
+ return pass;
128
+ })
129
+ .map((s) => ({
130
+ column: s.field,
131
+ order: s.direction,
132
+ }));
134
133
 
135
134
  if (process.env.NODE_ENV !== "production") {
136
135
  sql = query
@@ -142,7 +141,6 @@ export function KnexQueryList<T>(
142
141
  debug("SQL Query:", sql);
143
142
  }
144
143
 
145
-
146
144
  const data = await query
147
145
  .clone()
148
146
  .offset(params.range.offset)