@rsdk/db.typeorm 5.11.0-next.3 → 5.11.0-next.5

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,16 @@
1
+ import type { FindOptionsOrder } from 'typeorm';
2
+ type OrderNormalizedType = 'ASC' | 'DESC';
3
+ type OrderNullsNormalizedType = 'FIRST' | 'LAST';
4
+ type OrderWithNullsNormalizedType = {
5
+ direction?: OrderNormalizedType | undefined;
6
+ nulls?: OrderNullsNormalizedType | undefined;
7
+ };
8
+ type FlatNormalizedType = OrderNormalizedType | OrderWithNullsNormalizedType;
9
+ /**
10
+ * Метод для "разглаживания" сортировки в запросах для получения простой структуры сортировки.
11
+ * @param obj - исходные условия сортировки
12
+ * @param concatenator - символ-соединитель для условий
13
+ * @returns Запись в формате "Ключ - Значение (ASC или DESC)"
14
+ */
15
+ export declare function flatOrder(obj: Record<string, FindOptionsOrder<unknown>>, concatenator?: string): Record<string, FlatNormalizedType>;
16
+ export {};
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flatOrder = flatOrder;
4
+ const DIRECTION_SET = new Set(['ASC', 'DESC', 'asc', 'desc']);
5
+ const NULLS_SET = new Set(['FIRST', 'LAST', 'first', 'last']);
6
+ const SCHEMA = {
7
+ direction: DIRECTION_SET,
8
+ nulls: NULLS_SET,
9
+ };
10
+ /**
11
+ * Метод для "разглаживания" сортировки в запросах для получения простой структуры сортировки.
12
+ * @param obj - исходные условия сортировки
13
+ * @param concatenator - символ-соединитель для условий
14
+ * @returns Запись в формате "Ключ - Значение (ASC или DESC)"
15
+ */
16
+ function flatOrder(obj, concatenator = '.') {
17
+ return Object.entries(obj).reduce((acc, [key, value]) => {
18
+ if (typeof value !== 'object') {
19
+ acc[key] = castOrderValue(value);
20
+ return acc;
21
+ }
22
+ if (Object.entries(value).every(([key, val]) => !!SCHEMA[key] && SCHEMA[key].has(val))) {
23
+ const validated = value;
24
+ acc[key] = {};
25
+ if (validated.direction) {
26
+ acc[key].direction = castOrderValue(validated.direction);
27
+ }
28
+ if (validated.nulls) {
29
+ acc[key].nulls = castNullsValue(validated.nulls);
30
+ }
31
+ return acc;
32
+ }
33
+ const flattenedChild = flatOrder(value, concatenator);
34
+ return {
35
+ ...acc,
36
+ ...Object.fromEntries(Object.keys(flattenedChild).map((childKey) => [
37
+ `${key}${concatenator}${childKey}`,
38
+ flattenedChild[childKey],
39
+ ])),
40
+ };
41
+ }, {});
42
+ }
43
+ function castOrderValue(value) {
44
+ switch (value) {
45
+ case 1:
46
+ case 'ASC':
47
+ case 'asc':
48
+ return 'ASC';
49
+ case 'desc':
50
+ case 'DESC':
51
+ case -1:
52
+ return 'DESC';
53
+ default:
54
+ throw new Error('Got unexpected value for cast');
55
+ }
56
+ }
57
+ function castNullsValue(value) {
58
+ switch (value) {
59
+ case 'FIRST':
60
+ case 'first':
61
+ return 'FIRST';
62
+ case 'LAST':
63
+ case 'last':
64
+ return 'LAST';
65
+ default:
66
+ throw new Error('Got unexpected value for cast');
67
+ }
68
+ }
69
+ //# sourceMappingURL=flat-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flat-order.js","sourceRoot":"","sources":["../src/flat-order.ts"],"names":[],"mappings":";;AA2BA,8BA2CC;AA1DD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,GAAoC;IAC9C,SAAS,EAAE,aAAa;IACxB,KAAK,EAAE,SAAS;CACjB,CAAC;AAIF;;;;;GAKG;AACH,SAAgB,SAAS,CACvB,GAA8C,EAC9C,YAAY,GAAG,GAAG;IAElB,OAAO,MAAM,CAAC,OAAO,CAA4B,GAAG,CAAC,CAAC,MAAM,CAC1D,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IACE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CACzB,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAa,CAAC,CAChE,EACD,CAAC;YACD,MAAM,SAAS,GAAG,KAAqC,CAAC;YAExD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACd,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACxB,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBACpB,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;YAED,OAAO,GAAG,CAAC;QACb,CAAC;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAEtD,OAAO;YACL,GAAG,GAAG;YACN,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC5C,GAAG,GAAG,GAAG,YAAY,GAAG,QAAQ,EAAE;gBAClC,cAAc,CAAC,QAAQ,CAAC;aACzB,CAAC,CACH;SACF,CAAC;IACJ,CAAC,EACD,EAAwC,CACzC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAA4B;IAClD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,CAAC,CAAC;QACP,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,KAAK,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,CAAC,CAAC;YACL,OAAO,MAAM,CAAC;QAChB;YACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAqB;IAC3C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export { TypeOrmPlugin } from './typeorm.plugin';
4
4
  export { IsolationLevel } from './types';
5
5
  export { OverrideEntity } from './metadata/override-entity.decorator';
6
6
  export { TypeOrmEntity } from './metadata/typeorm-entity.decorator';
7
+ export { flatOrder } from './flat-order';
7
8
  export declare const Runner: TransactionRunner<import("./types").IsolationLevel, import("./internal/context").TypeOrmContext>;
8
9
  export declare const Transactional: (payload?: {
9
10
  isolation?: import("./types").IsolationLevel;
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Transactional = exports.Runner = exports.TypeOrmEntity = exports.OverrideEntity = exports.IsolationLevel = exports.TypeOrmPlugin = exports.DataSourceExtractor = void 0;
3
+ exports.Transactional = exports.Runner = exports.flatOrder = exports.TypeOrmEntity = exports.OverrideEntity = exports.IsolationLevel = exports.TypeOrmPlugin = exports.DataSourceExtractor = void 0;
4
4
  const db_1 = require("@rsdk/db");
5
5
  const strategy_1 = require("./internal/strategy");
6
6
  var data_source_extractor_1 = require("./data-source-extractor");
@@ -13,6 +13,8 @@ var override_entity_decorator_1 = require("./metadata/override-entity.decorator"
13
13
  Object.defineProperty(exports, "OverrideEntity", { enumerable: true, get: function () { return override_entity_decorator_1.OverrideEntity; } });
14
14
  var typeorm_entity_decorator_1 = require("./metadata/typeorm-entity.decorator");
15
15
  Object.defineProperty(exports, "TypeOrmEntity", { enumerable: true, get: function () { return typeorm_entity_decorator_1.TypeOrmEntity; } });
16
+ var flat_order_1 = require("./flat-order");
17
+ Object.defineProperty(exports, "flatOrder", { enumerable: true, get: function () { return flat_order_1.flatOrder; } });
16
18
  exports.Runner = new db_1.TransactionRunner(new strategy_1.TypeOrmTransactionalStrategy());
17
19
  exports.Transactional = exports.Runner.Transactional.bind(exports.Runner);
18
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAE7C,kDAAmE;AAEnE,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAE5B,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AACvB,kFAAsE;AAA7D,2HAAA,cAAc,OAAA;AACvB,gFAAoE;AAA3D,yHAAA,aAAa,OAAA;AAET,QAAA,MAAM,GAAG,IAAI,sBAAiB,CAAC,IAAI,uCAA4B,EAAE,CAAC,CAAC;AACnE,QAAA,aAAa,GAAG,cAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAE7C,kDAAmE;AAEnE,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAE5B,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,iCAAyC;AAAhC,uGAAA,cAAc,OAAA;AACvB,kFAAsE;AAA7D,2HAAA,cAAc,OAAA;AACvB,gFAAoE;AAA3D,yHAAA,aAAa,OAAA;AACtB,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAEL,QAAA,MAAM,GAAG,IAAI,sBAAiB,CAAC,IAAI,uCAA4B,EAAE,CAAC,CAAC;AACnE,QAAA,aAAa,GAAG,cAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAM,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/db.typeorm",
3
- "version": "5.11.0-next.3",
3
+ "version": "5.11.0-next.5",
4
4
  "description": "TypeOrm module for platform",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -28,5 +28,5 @@
28
28
  "rxjs": "^7.1.0",
29
29
  "typeorm": "^0.3.12"
30
30
  },
31
- "gitHead": "aa43c0b62a5a8fb72694f3d9112ab19960e30265"
31
+ "gitHead": "d4dd4adcfcfd2e334917b11d2867806014886f1d"
32
32
  }
@@ -0,0 +1,99 @@
1
+ import type { FindOptionsOrder, FindOptionsOrderValue } from 'typeorm';
2
+
3
+ type OrderNullsType = 'FIRST' | 'LAST' | 'first' | 'last';
4
+
5
+ type OrderNormalizedType = 'ASC' | 'DESC';
6
+ type OrderNullsNormalizedType = 'FIRST' | 'LAST';
7
+
8
+ type OrderWithNullsNormalizedType = {
9
+ direction?: OrderNormalizedType | undefined;
10
+ nulls?: OrderNullsNormalizedType | undefined;
11
+ };
12
+
13
+ const DIRECTION_SET = new Set(['ASC', 'DESC', 'asc', 'desc']);
14
+ const NULLS_SET = new Set(['FIRST', 'LAST', 'first', 'last']);
15
+ const SCHEMA: { [key: string]: Set<unknown> } = {
16
+ direction: DIRECTION_SET,
17
+ nulls: NULLS_SET,
18
+ };
19
+
20
+ type FlatNormalizedType = OrderNormalizedType | OrderWithNullsNormalizedType;
21
+
22
+ /**
23
+ * Метод для "разглаживания" сортировки в запросах для получения простой структуры сортировки.
24
+ * @param obj - исходные условия сортировки
25
+ * @param concatenator - символ-соединитель для условий
26
+ * @returns Запись в формате "Ключ - Значение (ASC или DESC)"
27
+ */
28
+ export function flatOrder(
29
+ obj: Record<string, FindOptionsOrder<unknown>>,
30
+ concatenator = '.',
31
+ ): Record<string, FlatNormalizedType> {
32
+ return Object.entries<FindOptionsOrder<unknown>>(obj).reduce(
33
+ (acc, [key, value]) => {
34
+ if (typeof value !== 'object') {
35
+ acc[key] = castOrderValue(value);
36
+ return acc;
37
+ }
38
+
39
+ if (
40
+ Object.entries(value).every(
41
+ ([key, val]) => !!SCHEMA[key] && SCHEMA[key].has(val as string),
42
+ )
43
+ ) {
44
+ const validated = value as OrderWithNullsNormalizedType;
45
+
46
+ acc[key] = {};
47
+ if (validated.direction) {
48
+ acc[key].direction = castOrderValue(validated.direction);
49
+ }
50
+ if (validated.nulls) {
51
+ acc[key].nulls = castNullsValue(validated.nulls);
52
+ }
53
+
54
+ return acc;
55
+ }
56
+
57
+ const flattenedChild = flatOrder(value, concatenator);
58
+
59
+ return {
60
+ ...acc,
61
+ ...Object.fromEntries(
62
+ Object.keys(flattenedChild).map((childKey) => [
63
+ `${key}${concatenator}${childKey}`,
64
+ flattenedChild[childKey],
65
+ ]),
66
+ ),
67
+ };
68
+ },
69
+ {} as Record<string, FlatNormalizedType>,
70
+ );
71
+ }
72
+
73
+ function castOrderValue(value: FindOptionsOrderValue): OrderNormalizedType {
74
+ switch (value) {
75
+ case 1:
76
+ case 'ASC':
77
+ case 'asc':
78
+ return 'ASC';
79
+ case 'desc':
80
+ case 'DESC':
81
+ case -1:
82
+ return 'DESC';
83
+ default:
84
+ throw new Error('Got unexpected value for cast');
85
+ }
86
+ }
87
+
88
+ function castNullsValue(value: OrderNullsType): OrderNullsNormalizedType {
89
+ switch (value) {
90
+ case 'FIRST':
91
+ case 'first':
92
+ return 'FIRST';
93
+ case 'LAST':
94
+ case 'last':
95
+ return 'LAST';
96
+ default:
97
+ throw new Error('Got unexpected value for cast');
98
+ }
99
+ }
package/src/index.ts CHANGED
@@ -8,6 +8,7 @@ export { TypeOrmPlugin } from './typeorm.plugin';
8
8
  export { IsolationLevel } from './types';
9
9
  export { OverrideEntity } from './metadata/override-entity.decorator';
10
10
  export { TypeOrmEntity } from './metadata/typeorm-entity.decorator';
11
+ export { flatOrder } from './flat-order';
11
12
 
12
13
  export const Runner = new TransactionRunner(new TypeOrmTransactionalStrategy());
13
14
  export const Transactional = Runner.Transactional.bind(Runner);