jcc-express-mvc 1.8.21 → 1.8.22

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.
@@ -3,6 +3,6 @@ export declare class Auth {
3
3
  user(): Record<string, any>;
4
4
  isAuthenticated(): boolean;
5
5
  isGuest(): boolean;
6
- check(): () => boolean;
6
+ check(): boolean;
7
7
  }
8
8
  //# sourceMappingURL=Auth.d.ts.map
package/lib/Auth/Auth.js CHANGED
@@ -16,7 +16,7 @@ class Auth {
16
16
  return request().user ? false : true;
17
17
  }
18
18
  check() {
19
- return this.isAuthenticated;
19
+ return this.isAuthenticated();
20
20
  }
21
21
  }
22
22
  exports.Auth = Auth;
@@ -68,7 +68,7 @@ class AuthMiddleware {
68
68
  const token = req.cookies.auth_token;
69
69
  if (token) {
70
70
  if (!req.get("Referer")) {
71
- if (req.previousUrls[0] == req.url) {
71
+ if (req.previousUrls?.length >= 2 && req.previousUrls[0] === req.url) {
72
72
  return res.redirect(303, req.previousUrls[1]);
73
73
  }
74
74
  else {
@@ -18,5 +18,6 @@ export declare class RedisDriver implements CacheDriver {
18
18
  many(keys: string[]): Promise<Record<string, any>>;
19
19
  putMany(values: Record<string, any>, seconds?: number): Promise<void>;
20
20
  has(key: string): Promise<boolean>;
21
+ disconnect(): Promise<void>;
21
22
  }
22
23
  //# sourceMappingURL=RedisDriver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Cache/RedisDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAWK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAM5C,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAYlD,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAKzC"}
1
+ {"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Cache/RedisDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAWK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAM5C,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAYlD,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAKlC"}
@@ -84,5 +84,10 @@ class RedisDriver {
84
84
  const exists = await this.client.exists(key);
85
85
  return exists > 0;
86
86
  }
87
+ async disconnect() {
88
+ if (this.client.isOpen) {
89
+ await this.client.quit();
90
+ }
91
+ }
87
92
  }
88
93
  exports.RedisDriver = RedisDriver;
@@ -1 +1 @@
1
- {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Event/Event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,qBAAa,KAAK;IAKJ,OAAO,CAAC,GAAG;IAJvB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,EAAE,CAAa;gBAEH,GAAG,EAAE,WAAW;IAIpC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG;IAwBnB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG;IAoBjE;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,GAAG;CAM1B"}
1
+ {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Event/Event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,qBAAa,KAAK;IAKJ,OAAO,CAAC,GAAG;IAJvB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,EAAE,CAAa;gBAEH,GAAG,EAAE,WAAW;IAIpC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG;IAwBnB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG;IAwBjE;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,GAAG;CAM1B"}
@@ -49,12 +49,17 @@ class Event {
49
49
  if (!this.emitter.listenerCount(eventName)) {
50
50
  this.emitter.on(eventName, async (eventInstance) => {
51
51
  for (const listenerClass of this.listeners[eventName]) {
52
- const listener = this.app.make(listenerClass);
53
- if (!method) {
54
- await listener.handle(eventInstance);
52
+ try {
53
+ const listener = this.app.make(listenerClass);
54
+ if (!method) {
55
+ await listener.handle(eventInstance);
56
+ }
57
+ else {
58
+ await this.app.callMethod(listener, method);
59
+ }
55
60
  }
56
- else {
57
- this.app.callMethod(listener, method);
61
+ catch (err) {
62
+ console.error(`Event listener error for [${eventName}]:`, err);
58
63
  }
59
64
  }
60
65
  });
@@ -1,4 +1,5 @@
1
1
  import { Knex } from "knex";
2
+ import { AsyncLocalStorage } from "async_hooks";
2
3
  import { AggregateInput, JoinCallback, SubJoinCallback, WhereInput } from "./Types";
3
4
  import { type CursorPagination, type SimplePagination } from "./Interfaces";
4
5
  import type { Request } from "express";
@@ -12,15 +13,9 @@ export declare class Builder {
12
13
  eagerLoad: Record<string, Function | null>;
13
14
  softDelete: boolean;
14
15
  withoutEvents: boolean;
15
- private static activeTransaction;
16
+ static txStorage: AsyncLocalStorage<Knex.Transaction<any, any[]> | null>;
16
17
  constructor();
17
- /**
18
- * Get the active transaction if one exists
19
- */
20
18
  static getActiveTransaction(): Knex.Transaction | null;
21
- /**
22
- * Set the active transaction context
23
- */
24
19
  static setActiveTransaction(trx: Knex.Transaction | null): void;
25
20
  withTrashed(): this;
26
21
  onlyTrashed(): this;
@@ -1 +1 @@
1
- {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Builder.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Builder = void 0;
4
+ const async_hooks_1 = require("async_hooks");
4
5
  const Database_1 = require("./Database");
5
6
  const utils_1 = require("./utils");
6
7
  const ModelEvent_1 = require("./Event/ModelEvent");
@@ -12,20 +13,13 @@ class Builder {
12
13
  this.eagerLoad = {};
13
14
  this.softDelete = true; // Default to true (filtering out deleted), set to false to include deleted
14
15
  this.withoutEvents = false;
15
- // If there's an active transaction, use it; otherwise use the default connection
16
- this.db = Builder.activeTransaction || Database_1.Database.connect();
16
+ this.db = Builder.getActiveTransaction() || Database_1.Database.connect();
17
17
  }
18
- /**
19
- * Get the active transaction if one exists
20
- */
21
18
  static getActiveTransaction() {
22
- return Builder.activeTransaction;
19
+ return Builder.txStorage.getStore() ?? null;
23
20
  }
24
- /**
25
- * Set the active transaction context
26
- */
27
21
  static setActiveTransaction(trx) {
28
- Builder.activeTransaction = trx;
22
+ // no-op: kept for backward compatibility; use txStorage.run() internally
29
23
  }
30
24
  withTrashed() {
31
25
  this.softDelete = false;
@@ -297,15 +291,15 @@ class Builder {
297
291
  // JSON path handling
298
292
  if (isJson) {
299
293
  if (method === "orWhere") {
300
- this.orWhereJson(column, operator, value || "");
294
+ this.orWhereJson(column, operator, value ?? "");
301
295
  }
302
296
  else {
303
- this.whereJson(column, operator, value || "");
297
+ this.whereJson(column, operator, value ?? "");
304
298
  }
305
299
  return this;
306
300
  }
307
301
  // Three-argument form: where(column, operator, value)
308
- this.getQueryBuilder()[method](column, operator, value || "");
302
+ this.getQueryBuilder()[method](column, operator, value ?? "");
309
303
  return this;
310
304
  }
311
305
  whereNull(column) {
@@ -386,7 +380,7 @@ class Builder {
386
380
  return this;
387
381
  }
388
382
  havingNotIn(column, values) {
389
- this.getQueryBuilder().havingIn(column, values);
383
+ this.getQueryBuilder().havingNotIn(column, values);
390
384
  return this;
391
385
  }
392
386
  havingNull(column) {
@@ -509,14 +503,13 @@ class Builder {
509
503
  applyJoin(type, table, columnOrCallback, operator, column2) {
510
504
  const qb = this.getQueryBuilder();
511
505
  const self = this;
512
- //
513
506
  if (typeof columnOrCallback === "function") {
514
- qb.join(table, function () {
507
+ qb[type](table, function () {
515
508
  columnOrCallback(self.applyJoinHelper(this));
516
509
  });
517
510
  }
518
511
  else if (operator && column2) {
519
- qb.join(table, columnOrCallback, operator, column2);
512
+ qb[type](table, columnOrCallback, operator, column2);
520
513
  }
521
514
  else {
522
515
  throw new Error(`Invalid ${type} parameters`);
@@ -812,17 +805,14 @@ class Builder {
812
805
  */
813
806
  async cursorPaginate(request, perPage = 15, column, direction = "asc") {
814
807
  const per = Number(perPage);
815
- const col = column ??
816
- (this.model ? new this.model().primaryKey : "id");
808
+ const col = column ?? (this.model ? new this.model().primaryKey : "id");
817
809
  const raw = request.query.cursor;
818
810
  const cursorParam = raw === undefined || raw === null
819
811
  ? ""
820
812
  : Array.isArray(raw)
821
813
  ? String(raw[0])
822
814
  : String(raw);
823
- const cursorVal = cursorParam === ""
824
- ? undefined
825
- : utils_1.Utils.decodeCursorValue(cursorParam);
815
+ const cursorVal = cursorParam === "" ? undefined : utils_1.Utils.decodeCursorValue(cursorParam);
826
816
  let q = this.clone().orderBy(col, direction);
827
817
  if (cursorVal !== undefined) {
828
818
  if (direction === "asc") {
@@ -1161,45 +1151,10 @@ class Builder {
1161
1151
  * });
1162
1152
  */
1163
1153
  async transaction(cb) {
1164
- const originalDb = this.db;
1165
- const originalQB = this.queryBuilder;
1166
- const originalTransaction = Builder.activeTransaction;
1167
- try {
1168
- return await this.db.transaction(async (trx) => {
1169
- // Set the active transaction context FIRST so all new Builder instances use it
1170
- Builder.setActiveTransaction(trx);
1171
- // Update this instance to use the transaction
1172
- this.db = trx;
1173
- this.queryBuilder = trx.queryBuilder().from(this.tableName);
1174
- try {
1175
- // Execute callback - all queries inside will use the transaction
1176
- const result = await cb();
1177
- // Knex automatically commits if we reach here
1178
- return result;
1179
- }
1180
- catch (error) {
1181
- // Knex will automatically rollback on error
1182
- throw error;
1183
- }
1184
- finally {
1185
- // Clear the transaction context after callback completes
1186
- Builder.setActiveTransaction(null);
1187
- }
1188
- });
1189
- }
1190
- catch (error) {
1191
- // Knex automatically rolls back on error, re-throw the error
1192
- throw error;
1193
- }
1194
- finally {
1195
- // Always restore the original database connection and query builder
1196
- this.db = originalDb;
1197
- this.queryBuilder = originalQB;
1198
- // Ensure transaction context is cleared (safety net)
1199
- Builder.setActiveTransaction(originalTransaction);
1200
- }
1154
+ const knex = Builder.getActiveTransaction() || Database_1.Database.connect();
1155
+ return knex.transaction((trx) => Builder.txStorage.run(trx, cb));
1201
1156
  }
1202
1157
  }
1203
1158
  exports.Builder = Builder;
1204
- // Static transaction context - shared across all Builder instances
1205
- Builder.activeTransaction = null;
1159
+ // Per-async-context transaction storage safe for concurrent requests
1160
+ Builder.txStorage = new async_hooks_1.AsyncLocalStorage();
@@ -35,7 +35,7 @@ class Database {
35
35
  return this.instance;
36
36
  }
37
37
  catch (error) {
38
- throw "error";
38
+ throw error;
39
39
  }
40
40
  }
41
41
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Mail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,MAAM,CAAC,SAAS,CAAc;IACtC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAgB;IAC1C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAgB;IAE3C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,IAAI;IAOrC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI;IAK3C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI;WAK/B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;CAQ5C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Mail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,MAAM,CAAC,SAAS,CAAc;IACtC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAgB;IAC1C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAgB;IAE3C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,IAAI;IAQrC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI;IAK3C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI;WAK/B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;CAe5C"}
package/lib/Mail/index.js CHANGED
@@ -49,7 +49,10 @@ Object.defineProperty(exports, "Address", { enumerable: true, get: function () {
49
49
  */
50
50
  class Mail {
51
51
  static to(email) {
52
+ // Reset chain state so each call starts fresh
52
53
  this.recipient = email;
54
+ this.ccRecipient = [];
55
+ this.bccRecipient = [];
53
56
  return this;
54
57
  }
55
58
  static cc(...emails) {
@@ -65,7 +68,15 @@ class Mail {
65
68
  .cc(...this.ccRecipient)
66
69
  .bcc(...this.bccRecipient);
67
70
  const payload = mailer instanceof Mailable_1.Mailable ? await mailer.toMailer() : mailer;
68
- return manager.send(payload);
71
+ try {
72
+ return await manager.send(payload);
73
+ }
74
+ finally {
75
+ // Clear state after send so stale data never leaks to the next call
76
+ this.recipient = "";
77
+ this.ccRecipient = [];
78
+ this.bccRecipient = [];
79
+ }
69
80
  }
70
81
  }
71
82
  exports.Mail = Mail;
@@ -7,7 +7,7 @@ class FormRequest {
7
7
  constructor(req) {
8
8
  this.req = req;
9
9
  this.user = req?.user;
10
- if (this.authorize()) {
10
+ if (!this.authorize()) {
11
11
  throw new AuthorizationException_1.AuthorizationException("This action is unauthorized.");
12
12
  }
13
13
  }
@@ -8,9 +8,10 @@ import { AppRequest, AppResponse } from "../Interface";
8
8
  export declare class HttpResponse {
9
9
  private request;
10
10
  private response;
11
+ private reqUrls;
11
12
  constructor(request: AppRequest, response: AppResponse);
12
13
  /**
13
- * Tracks visited URLs and stores them in the reqUrls array.
14
+ * Tracks visited URLs per-request instance.
14
15
  * Excludes "/favicon.ico" and "/js/app.js" from tracking.
15
16
  */
16
17
  protected visitedUrls(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Response/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGvD;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,QAAQ,CAAc;gBAClB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;IAYtD;;;OAGG;IACH,SAAS,CAAC,WAAW;IAerB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,IAAI;CAQb"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Response/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEvD;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;IAYtD;;;OAGG;IACH,SAAS,CAAC,WAAW;IAerB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,IAAI;CAQb"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpResponse = void 0;
4
- const reqUrls = [];
5
4
  /**
6
5
  * Initializes a Response object.
7
6
  * This class manages the response behavior, including tracking visited URLs and handling redirection.
@@ -10,6 +9,7 @@ const reqUrls = [];
10
9
  */
11
10
  class HttpResponse {
12
11
  constructor(request, response) {
12
+ this.reqUrls = [];
13
13
  this.request = request;
14
14
  this.response = response;
15
15
  this.visitedUrls();
@@ -20,19 +20,19 @@ class HttpResponse {
20
20
  response.redirectBack = () => this.redirectBack();
21
21
  }
22
22
  /**
23
- * Tracks visited URLs and stores them in the reqUrls array.
23
+ * Tracks visited URLs per-request instance.
24
24
  * Excludes "/favicon.ico" and "/js/app.js" from tracking.
25
25
  */
26
26
  visitedUrls() {
27
27
  if (this.request.originalUrl !== "/favicon.ico" &&
28
28
  this.request.originalUrl !== "/js/app.js" &&
29
29
  !this.request.originalUrl.includes("com.chrome.devtools")) {
30
- if (reqUrls.length > 1) {
31
- reqUrls.pop();
30
+ if (this.reqUrls.length > 1) {
31
+ this.reqUrls.pop();
32
32
  }
33
- reqUrls.unshift(this.request.originalUrl);
33
+ this.reqUrls.unshift(this.request.originalUrl);
34
34
  }
35
- this.request.previousUrls = reqUrls;
35
+ this.request.previousUrls = this.reqUrls;
36
36
  return;
37
37
  }
38
38
  /**
@@ -40,11 +40,8 @@ class HttpResponse {
40
40
  * If there are no previous URLs, redirects to the current URL.
41
41
  */
42
42
  redirectBack() {
43
- const backUrl = this.request.get("Referer") || reqUrls[0] || "/";
43
+ const backUrl = this.request.get("Referer") || this.reqUrls[0] || "/";
44
44
  return this.response.redirect(303, backUrl);
45
- // return reqUrls.length > 0 && reqUrls[1]
46
- // ? this.response.redirect(303, reqUrls[1])
47
- // : this.response.redirect(303, reqUrls[0]);
48
45
  }
49
46
  with(message, type) {
50
47
  if (this.request.jccSession) {
@@ -1 +1 @@
1
- {"version":3,"file":"RedisSession.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Session/RedisSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA6BzD,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAmB;IAOzD,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAgBnD,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAeV,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
1
+ {"version":3,"file":"RedisSession.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Session/RedisSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA6BzD,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAmB;IASzD,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAgBnD,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAeV,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
@@ -20,7 +20,9 @@ class RedisSessionStore {
20
20
  const createClient = loadRedisCreateClient();
21
21
  this.client = createClient({ url: redisUrl });
22
22
  this.prefix = prefix;
23
- void this.client.connect();
23
+ this.client.connect().catch((err) => {
24
+ console.error("RedisSessionStore: failed to connect to Redis:", err);
25
+ });
24
26
  }
25
27
  getKey(sessionId) {
26
28
  return `${this.prefix}${sessionId}`;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Templating-engine/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Templating-engine/index.ts"],"names":[],"mappings":"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"}
@@ -553,8 +553,12 @@ class TemplatingEngine extends engineHelper_1.EngineHelpers {
553
553
  return this.parser(beforMatch + result + afterMatch, param);
554
554
  }
555
555
  inertia(content, match, param = this.option) {
556
- const props = this.escapeJsonForHtml(JSON.stringify(param.inertia));
557
- const interiaContent = param?.ssrBody || `<div id="app" data-page='${props}'></div>`;
556
+ const json = JSON.stringify(param.inertia)
557
+ .replace(/&/g, "\\u0026")
558
+ .replace(/</g, "\\u003c")
559
+ .replace(/>/g, "\\u003e");
560
+ const interiaContent = param?.ssrBody ||
561
+ `<script data-page="app" type="application/json">${json}<\/script><div id="app"></div>`;
558
562
  const { beforMatch, afterMatch } = this.content(content, match);
559
563
  return this.parser(beforMatch + interiaContent + afterMatch, param);
560
564
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MakesHttpRequests.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Testing/Concerns/MakesHttpRequests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC;gBAEf,GAAG,EAAE,WAAW;IAI5B;;OAEG;IACU,GAAG,CACd,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACU,IAAI,CACf,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACU,GAAG,CACd,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACU,KAAK,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACU,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;cACa,IAAI,CAClB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAU,EAChB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;CA4CzB"}
1
+ {"version":3,"file":"MakesHttpRequests.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Testing/Concerns/MakesHttpRequests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC;gBAEf,GAAG,EAAE,WAAW;IAI5B;;OAEG;IACU,GAAG,CACd,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACU,IAAI,CACf,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACU,GAAG,CACd,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACU,KAAK,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACU,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;cACa,IAAI,CAClB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAU,EAChB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;CA8CzB"}
@@ -55,6 +55,7 @@ class MakesHttpRequests {
55
55
  // Here we will use a simple implementation that starts the app on a random port.
56
56
  return new Promise((resolve, reject) => {
57
57
  const server = http_1.default.createServer(expressApp);
58
+ server.on("error", (err) => reject(err));
58
59
  server.listen(0, async () => {
59
60
  const port = server.address().port;
60
61
  const baseUrl = `http://localhost:${port}`;
@@ -68,6 +69,7 @@ class MakesHttpRequests {
68
69
  method,
69
70
  headers: finalHeaders,
70
71
  body,
72
+ signal: AbortSignal.timeout(10000),
71
73
  });
72
74
  const responseData = await response.text();
73
75
  let parsedData;
@@ -13,14 +13,25 @@ export declare abstract class TestCase {
13
13
  constructor();
14
14
  /**
15
15
  * Set up the test environment.
16
- * This should be called before each test (e.g., in beforeEach).
16
+ * Call in beforeEach.
17
17
  */
18
18
  setUp(): Promise<void>;
19
19
  /**
20
20
  * Clean up the test environment.
21
- * This should be called after each test (e.g., in afterEach).
21
+ * Call in afterEach.
22
22
  */
23
23
  tearDown(): Promise<void>;
24
+ /**
25
+ * Run a test body inside a database transaction that is rolled back
26
+ * after the callback completes — keeps the database clean between tests.
27
+ *
28
+ * @example
29
+ * it("creates a user", () => this.withTransaction(async () => {
30
+ * await User.create({ name: "Alice" });
31
+ * await this.assertDatabaseHas("users", { name: "Alice" });
32
+ * }));
33
+ */
34
+ withTransaction<T>(cb: () => Promise<T>): Promise<T>;
24
35
  /**
25
36
  * Create the application instance for the test.
26
37
  * This must be implemented by the user to return their app instance.
@@ -1 +1 @@
1
- {"version":3,"file":"TestCase.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Testing/TestCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;;GAGG;AACH,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAClC,SAAS,CAAC,EAAE,EAAE,qBAAqB,CAAC;;IASpC;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC;IAI/C,GAAG,CACd,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIX,IAAI,CACf,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIX,GAAG,CACd,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIX,KAAK,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIX,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAMX,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;IAIH,qBAAqB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;IAIH,mBAAmB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAIH,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}
1
+ {"version":3,"file":"TestCase.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Testing/TestCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C;;;GAGG;AACH,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAClC,SAAS,CAAC,EAAE,EAAE,qBAAqB,CAAC;;IAQpC;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC;;;;;;;;;OASG;IACU,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAkBjE;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC;IAI/C,GAAG,CACd,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIX,IAAI,CACf,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIX,GAAG,CACd,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIX,KAAK,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAIX,MAAM,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,GAAQ,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,OAAO,CAAC,YAAY,CAAC;IAMX,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;IAIH,qBAAqB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC;IAIH,mBAAmB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAIH,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}
@@ -4,35 +4,59 @@ exports.TestCase = void 0;
4
4
  const MakesHttpRequests_1 = require("./Concerns/MakesHttpRequests");
5
5
  const InteractsWithDatabase_1 = require("./Concerns/InteractsWithDatabase");
6
6
  const Database_1 = require("../Jcc-eloquent/lib/Database");
7
+ const Builder_1 = require("../Jcc-eloquent/lib/Builder");
7
8
  /**
8
9
  * The base class for all tests in the application.
9
10
  * Provides Laravel-like testing capabilities.
10
11
  */
11
12
  class TestCase {
12
13
  constructor() {
13
- // These will be initialized in setUp
14
14
  this.app = null;
15
15
  this.http = null;
16
16
  this.db = null;
17
17
  }
18
18
  /**
19
19
  * Set up the test environment.
20
- * This should be called before each test (e.g., in beforeEach).
20
+ * Call in beforeEach.
21
21
  */
22
22
  async setUp() {
23
23
  this.app = await this.createApplication();
24
24
  this.http = new MakesHttpRequests_1.MakesHttpRequests(this.app);
25
25
  this.db = new InteractsWithDatabase_1.InteractsWithDatabase();
26
- // Ensure database is connected
27
26
  Database_1.Database.connect();
28
27
  }
29
28
  /**
30
29
  * Clean up the test environment.
31
- * This should be called after each test (e.g., in afterEach).
30
+ * Call in afterEach.
32
31
  */
33
32
  async tearDown() {
34
33
  await Database_1.Database.disconnect();
35
- // Additional cleanup if needed
34
+ }
35
+ /**
36
+ * Run a test body inside a database transaction that is rolled back
37
+ * after the callback completes — keeps the database clean between tests.
38
+ *
39
+ * @example
40
+ * it("creates a user", () => this.withTransaction(async () => {
41
+ * await User.create({ name: "Alice" });
42
+ * await this.assertDatabaseHas("users", { name: "Alice" });
43
+ * }));
44
+ */
45
+ async withTransaction(cb) {
46
+ const knex = Database_1.Database.connect();
47
+ return new Promise((resolve, reject) => {
48
+ knex.transaction((trx) => Builder_1.Builder.txStorage.run(trx, async () => {
49
+ try {
50
+ const result = await cb();
51
+ await trx.rollback(); // always roll back to keep DB clean
52
+ resolve(result);
53
+ }
54
+ catch (err) {
55
+ await trx.rollback();
56
+ reject(err);
57
+ }
58
+ })).catch(reject);
59
+ });
36
60
  }
37
61
  // --- HTTP Helpers ---
38
62
  async get(uri, headers = {}) {
@@ -26,16 +26,32 @@ export declare class TestResponse {
26
26
  * Assert that the response has a 404 Not Found status code.
27
27
  */
28
28
  assertNotFound(): this;
29
+ /**
30
+ * Assert that the response has a 401 Unauthorized status code.
31
+ */
32
+ assertUnauthorized(): this;
29
33
  /**
30
34
  * Assert that the response has a 422 Unprocessable Entity status code.
31
35
  */
32
36
  assertUnprocessable(): this;
33
37
  /**
34
- * Assert that the response has the given JSON data.
38
+ * Assert that the response has a 204 No Content status code.
39
+ */
40
+ assertNoContent(): this;
41
+ /**
42
+ * Assert that the response redirected to the given URI.
43
+ */
44
+ assertRedirect(uri?: string): this;
45
+ /**
46
+ * Assert that the response contains the given header with optional value.
47
+ */
48
+ assertHeader(name: string, value?: string): this;
49
+ /**
50
+ * Assert that the response JSON exactly matches the given data.
35
51
  */
36
52
  assertJson(data: any): this;
37
53
  /**
38
- * Assert that the response JSON contains the given fragment.
54
+ * Assert that the response JSON contains the given key/value subset.
39
55
  */
40
56
  assertJsonFragment(data: any): this;
41
57
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TestResponse.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Testing/TestResponse.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,YAAY;IAEd,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;gBADT,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,GAAG;IAGlB;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASzC;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;OAEG;IACI,aAAa,IAAI,IAAI;IAI5B;;OAEG;IACI,eAAe,IAAI,IAAI;IAI9B;;OAEG;IACI,cAAc,IAAI,IAAI;IAI7B;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAIlC;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAelC;;OAEG;IACI,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAY1C;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUrC;;OAEG;IACI,IAAI,IAAI,GAAG;IAIlB;;OAEG;IACI,IAAI,IAAI,MAAM;CAKtB"}
1
+ {"version":3,"file":"TestResponse.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Testing/TestResponse.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,YAAY;IAEd,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;gBADT,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,GAAG;IAGlB;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASzC;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;OAEG;IACI,aAAa,IAAI,IAAI;IAI5B;;OAEG;IACI,eAAe,IAAI,IAAI;IAI9B;;OAEG;IACI,cAAc,IAAI,IAAI;IAI7B;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAIjC;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAIlC;;OAEG;IACI,eAAe,IAAI,IAAI;IAI9B;;OAEG;IACI,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAmBzC;;OAEG;IACI,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAWvD;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAWlC;;OAEG;IACI,kBAAkB,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAa1C;;OAEG;IACI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUrC;;OAEG;IACI,IAAI,IAAI,GAAG;IAIlB;;OAEG;IACI,IAAI,IAAI,MAAM;CAKtB"}
@@ -45,6 +45,12 @@ class TestResponse {
45
45
  assertNotFound() {
46
46
  return this.assertStatus(404);
47
47
  }
48
+ /**
49
+ * Assert that the response has a 401 Unauthorized status code.
50
+ */
51
+ assertUnauthorized() {
52
+ return this.assertStatus(401);
53
+ }
48
54
  /**
49
55
  * Assert that the response has a 422 Unprocessable Entity status code.
50
56
  */
@@ -52,24 +58,54 @@ class TestResponse {
52
58
  return this.assertStatus(422);
53
59
  }
54
60
  /**
55
- * Assert that the response has the given JSON data.
61
+ * Assert that the response has a 204 No Content status code.
62
+ */
63
+ assertNoContent() {
64
+ return this.assertStatus(204);
65
+ }
66
+ /**
67
+ * Assert that the response redirected to the given URI.
68
+ */
69
+ assertRedirect(uri) {
70
+ const status = this.response.statusCode || this.response.status;
71
+ (0, node_assert_1.default)(status >= 300 && status < 400, `Expected a redirect response but received status ${status}.`);
72
+ if (uri) {
73
+ const location = this.response.headers?.get
74
+ ? this.response.headers.get("location")
75
+ : this.response.headers?.location;
76
+ node_assert_1.default.strictEqual(location, uri, `Expected redirect to [${uri}] but got [${location}].`);
77
+ }
78
+ return this;
79
+ }
80
+ /**
81
+ * Assert that the response contains the given header with optional value.
82
+ */
83
+ assertHeader(name, value) {
84
+ const header = this.response.headers?.get
85
+ ? this.response.headers.get(name.toLowerCase())
86
+ : this.response.headers?.[name.toLowerCase()];
87
+ (0, node_assert_1.default)(header !== undefined && header !== null, `Expected header [${name}] to be present.`);
88
+ if (value !== undefined) {
89
+ node_assert_1.default.strictEqual(header, value, `Expected header [${name}] to be [${value}] but got [${header}].`);
90
+ }
91
+ return this;
92
+ }
93
+ /**
94
+ * Assert that the response JSON exactly matches the given data.
56
95
  */
57
96
  assertJson(data) {
58
97
  const actual = typeof this.data === "string" ? JSON.parse(this.data) : this.data;
59
- for (const key in data) {
60
- node_assert_1.default.deepStrictEqual(actual[key], data[key], `JSON key [${key}] does not match. Expected: ${JSON.stringify(data[key])}, Actual: ${JSON.stringify(actual[key])}`);
61
- }
98
+ node_assert_1.default.deepStrictEqual(actual, data, `JSON response does not match. Expected: ${JSON.stringify(data)}, Actual: ${JSON.stringify(actual)}`);
62
99
  return this;
63
100
  }
64
101
  /**
65
- * Assert that the response JSON contains the given fragment.
102
+ * Assert that the response JSON contains the given key/value subset.
66
103
  */
67
104
  assertJsonFragment(data) {
68
105
  const actual = typeof this.data === "string" ? JSON.parse(this.data) : this.data;
69
- // Simple subset check
70
- Object.keys(data).forEach((key) => {
71
- node_assert_1.default.deepStrictEqual(actual[key], data[key]);
72
- });
106
+ for (const key in data) {
107
+ node_assert_1.default.deepStrictEqual(actual[key], data[key], `JSON key [${key}] does not match. Expected: ${JSON.stringify(data[key])}, Actual: ${JSON.stringify(actual[key])}`);
108
+ }
73
109
  return this;
74
110
  }
75
111
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jcc-express-mvc",
3
- "version": "1.8.21",
3
+ "version": "1.8.22",
4
4
  "description": "express mvc structure",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",