@schorts/shared-kernel 2.5.9 → 3.0.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/CHANGELOG CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.0.0] - 2025-10-15
9
+
10
+ ### Changed
11
+
12
+ - Update how filters are stored in the `Criteria` to allow multiple filters over one field.
13
+
14
+ ## [2.6.0] - 2025-10-14
15
+
16
+ ### Added
17
+
18
+ - Added `countBy` to `DAO`.
19
+
8
20
  ## [2.5.9] - 2025-10-14
9
21
 
10
22
  ### Fixed
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Criteria = void 0;
4
4
  const exceptions_1 = require("./exceptions");
5
5
  class Criteria {
6
- filters = {};
6
+ filters = [];
7
7
  orders = [];
8
8
  limit;
9
9
  offset;
10
10
  where(field, operator, value) {
11
- this.filters[field] = { value, operator };
11
+ this.filters.push({ field, operator, value });
12
12
  return this;
13
13
  }
14
14
  orderBy(field, direction = "ASC") {
@@ -1 +1 @@
1
- {"version":3,"file":"criteria.js","sourceRoot":"","sources":["../../../src/criteria/criteria.ts"],"names":[],"mappings":";;;AAIA,6CAA6D;AAE7D,MAAa,QAAQ;IACV,OAAO,GAAoC,EAAE,CAAC;IAC9C,MAAM,GAAiB,EAAE,CAAC;IACnC,KAAK,CAAU;IACf,MAAM,CAAU;IAEhB,KAAK,CACH,KAAa,EACb,QAAkB,EAClB,KAAU;QAEV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAa,EACb,YAAuB,KAAK;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,0BAAa,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,2BAAc,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA5CD,4BA4CC"}
1
+ {"version":3,"file":"criteria.js","sourceRoot":"","sources":["../../../src/criteria/criteria.ts"],"names":[],"mappings":";;;AAGA,6CAA6D;AAE7D,MAAa,QAAQ;IACV,OAAO,GAA6D,EAAE,CAAC;IACvE,MAAM,GAAiB,EAAE,CAAC;IACnC,KAAK,CAAU;IACf,MAAM,CAAU;IAEhB,KAAK,CAAC,KAAa,EAAE,QAAkB,EAAE,KAAU;QACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAE9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAa,EACb,YAAuB,KAAK;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,0BAAa,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,2BAAc,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAxCD,4BAwCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/criteria/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAIA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/criteria/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAGA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA6B"}
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Criteria = void 0;
4
4
  const exceptions_1 = require("./exceptions");
5
5
  class Criteria {
6
- filters = {};
6
+ filters = [];
7
7
  orders = [];
8
8
  limit;
9
9
  offset;
10
10
  where(field, operator, value) {
11
- this.filters[field] = { value, operator };
11
+ this.filters.push({ field, operator, value });
12
12
  return this;
13
13
  }
14
14
  orderBy(field, direction = "ASC") {
@@ -1 +1 @@
1
- {"version":3,"file":"criteria.js","sourceRoot":"","sources":["../../../src/criteria/criteria.ts"],"names":[],"mappings":";;;AAIA,6CAA6D;AAE7D,MAAa,QAAQ;IACV,OAAO,GAAoC,EAAE,CAAC;IAC9C,MAAM,GAAiB,EAAE,CAAC;IACnC,KAAK,CAAU;IACf,MAAM,CAAU;IAEhB,KAAK,CACH,KAAa,EACb,QAAkB,EAClB,KAAU;QAEV,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAa,EACb,YAAuB,KAAK;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,0BAAa,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,2BAAc,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA5CD,4BA4CC"}
1
+ {"version":3,"file":"criteria.js","sourceRoot":"","sources":["../../../src/criteria/criteria.ts"],"names":[],"mappings":";;;AAGA,6CAA6D;AAE7D,MAAa,QAAQ;IACV,OAAO,GAA6D,EAAE,CAAC;IACvE,MAAM,GAAiB,EAAE,CAAC;IACnC,KAAK,CAAU;IACf,MAAM,CAAU;IAEhB,KAAK,CAAC,KAAa,EAAE,QAAkB,EAAE,KAAU;QACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAE9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAa,EACb,YAAuB,KAAK;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,0BAAa,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,2BAAc,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAxCD,4BAwCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/criteria/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAIA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/criteria/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAGA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA6B"}
@@ -1,9 +1,12 @@
1
- import { FilterCriterion } from "./filter-criterion";
2
1
  import { Order } from "./order";
3
2
  import { Operator } from "./operator";
4
3
  import { Direction } from "./direction";
5
4
  export declare class Criteria {
6
- readonly filters: Record<string, FilterCriterion>;
5
+ readonly filters: Array<{
6
+ field: string;
7
+ operator: Operator;
8
+ value: any;
9
+ }>;
7
10
  readonly orders: Array<Order>;
8
11
  limit?: number;
9
12
  offset?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../../src/criteria/criteria.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBAAa,QAAQ;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAM;IACvD,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAM;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,KAAK,CACH,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,GAAG,GACT,QAAQ;IAMX,OAAO,CACL,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,SAAiB,GAC3B,QAAQ;IAMX,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAUrC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;CASxC"}
1
+ {"version":3,"file":"criteria.d.ts","sourceRoot":"","sources":["../../../src/criteria/criteria.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBAAa,QAAQ;IACnB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAM;IAChF,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAM;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,QAAQ;IAM9D,OAAO,CACL,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,SAAiB,GAC3B,QAAQ;IAMX,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAUrC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;CASxC"}
@@ -1,6 +1,5 @@
1
1
  export type { Operator } from "./operator";
2
2
  export type { Order } from "./order";
3
- export type { FilterCriterion } from "./filter-criterion";
4
3
  export type { Direction } from "./direction";
5
4
  export { Criteria } from "./criteria";
6
5
  export * from "./exceptions";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/criteria/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/criteria/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,cAAc,CAAC"}
@@ -8,6 +8,7 @@ export interface DAO<Model extends BaseModel, Entity extends BaseEntity<ValueObj
8
8
  findByID(id: Entity["id"]["value"]): Promise<Entity | null>;
9
9
  findOneBy(criteria: Criteria): Promise<Entity | null>;
10
10
  search(criteria: Criteria): Promise<Entity[]>;
11
+ countBy(criteria: Criteria): Promise<number>;
11
12
  create(entity: Entity, uow?: UnitOfWork): Promise<Entity>;
12
13
  update(entity: Entity, uow?: UnitOfWork): Promise<Entity>;
13
14
  delete(entity: Entity, uow?: UnitOfWork): Promise<Entity>;
@@ -1 +1 @@
1
- {"version":3,"file":"dao.d.ts","sourceRoot":"","sources":["../../../src/dao/dao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,GAAG,CAAC,KAAK,SAAS,SAAS,EAAE,MAAM,SAAS,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;IACzF,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5D,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3D"}
1
+ {"version":3,"file":"dao.d.ts","sourceRoot":"","sources":["../../../src/dao/dao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,GAAG,CAAC,KAAK,SAAS,SAAS,EAAE,MAAM,SAAS,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;IACzF,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5D,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schorts/shared-kernel",
3
- "version": "2.5.9",
3
+ "version": "3.0.0",
4
4
  "description": "A modular, type-safe foundation for building expressive, maintainable applications. This package provides core abstractions for domain modeling, HTTP integration, authentication, state management, and more — designed to be framework-agnostic and highly extensible.",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -1,21 +1,16 @@
1
- import { FilterCriterion } from "./filter-criterion";
2
1
  import { Order } from "./order";
3
2
  import { Operator } from "./operator";
4
3
  import { Direction } from "./direction";
5
4
  import { OffsetNotValid, LimitNotValid } from "./exceptions";
6
5
 
7
6
  export class Criteria {
8
- readonly filters: Record<string, FilterCriterion> = {};
7
+ readonly filters: Array<{ field: string; operator: Operator; value: any }> = [];
9
8
  readonly orders: Array<Order> = [];
10
9
  limit?: number;
11
10
  offset?: number;
12
11
 
13
- where(
14
- field: string,
15
- operator: Operator,
16
- value: any,
17
- ): Criteria {
18
- this.filters[field] = { value, operator };
12
+ where(field: string, operator: Operator, value: any): Criteria {
13
+ this.filters.push({ field, operator, value });
19
14
 
20
15
  return this;
21
16
  }
@@ -1,6 +1,5 @@
1
1
  export type { Operator } from "./operator";
2
2
  export type { Order } from "./order";
3
- export type { FilterCriterion } from "./filter-criterion";
4
3
  export type { Direction } from "./direction";
5
4
  export { Criteria } from "./criteria";
6
5
  export * from "./exceptions";
package/src/dao/dao.ts CHANGED
@@ -9,6 +9,7 @@ export interface DAO<Model extends BaseModel, Entity extends BaseEntity<ValueObj
9
9
  findByID(id: Entity["id"]["value"]): Promise<Entity | null>;
10
10
  findOneBy(criteria: Criteria): Promise<Entity | null>;
11
11
  search(criteria: Criteria): Promise<Entity[]>;
12
+ countBy(criteria: Criteria): Promise<number>;
12
13
  create(entity: Entity, uow?: UnitOfWork): Promise<Entity>;
13
14
  update(entity: Entity, uow?: UnitOfWork): Promise<Entity>;
14
15
  delete(entity: Entity, uow?: UnitOfWork): Promise<Entity>;
@@ -1,6 +0,0 @@
1
- import { Operator } from "./operator";
2
-
3
- export type FilterCriterion = {
4
- value: any;
5
- operator: Operator;
6
- }