mahameru 0.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/README.md +28 -0
- package/dist/api.error.cjs +107 -0
- package/dist/api.error.cjs.map +1 -0
- package/dist/api.error.d.cts +65 -0
- package/dist/api.error.d.ts +65 -0
- package/dist/api.error.js +83 -0
- package/dist/api.error.js.map +1 -0
- package/dist/base-class/base.controller.cjs +148 -0
- package/dist/base-class/base.controller.cjs.map +1 -0
- package/dist/base-class/base.controller.d.cts +38 -0
- package/dist/base-class/base.controller.d.ts +38 -0
- package/dist/base-class/base.controller.js +126 -0
- package/dist/base-class/base.controller.js.map +1 -0
- package/dist/base-class/base.entity.cjs +79 -0
- package/dist/base-class/base.entity.cjs.map +1 -0
- package/dist/base-class/base.entity.d.cts +8 -0
- package/dist/base-class/base.entity.d.ts +8 -0
- package/dist/base-class/base.entity.js +57 -0
- package/dist/base-class/base.entity.js.map +1 -0
- package/dist/base-class/base.model.cjs +204 -0
- package/dist/base-class/base.model.cjs.map +1 -0
- package/dist/base-class/base.model.d.cts +68 -0
- package/dist/base-class/base.model.d.ts +68 -0
- package/dist/base-class/base.model.js +182 -0
- package/dist/base-class/base.model.js.map +1 -0
- package/dist/base-class/base.service.cjs +37 -0
- package/dist/base-class/base.service.cjs.map +1 -0
- package/dist/base-class/base.service.d.cts +5 -0
- package/dist/base-class/base.service.d.ts +5 -0
- package/dist/base-class/base.service.js +15 -0
- package/dist/base-class/base.service.js.map +1 -0
- package/dist/base-class/index.cjs +392 -0
- package/dist/base-class/index.cjs.map +1 -0
- package/dist/base-class/index.d.cts +6 -0
- package/dist/base-class/index.d.ts +6 -0
- package/dist/base-class/index.js +365 -0
- package/dist/base-class/index.js.map +1 -0
- package/dist/cli/index.cjs +706 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +3 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +681 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/scripts/on-build.cjs +56 -0
- package/dist/cli/scripts/on-build.cjs.map +1 -0
- package/dist/cli/scripts/on-build.d.cts +3 -0
- package/dist/cli/scripts/on-build.d.ts +3 -0
- package/dist/cli/scripts/on-build.js +28 -0
- package/dist/cli/scripts/on-build.js.map +1 -0
- package/dist/cli/scripts/on-dev.cjs +483 -0
- package/dist/cli/scripts/on-dev.cjs.map +1 -0
- package/dist/cli/scripts/on-dev.d.cts +5 -0
- package/dist/cli/scripts/on-dev.d.ts +5 -0
- package/dist/cli/scripts/on-dev.js +449 -0
- package/dist/cli/scripts/on-dev.js.map +1 -0
- package/dist/cli/scripts/on-init.cjs +96 -0
- package/dist/cli/scripts/on-init.cjs.map +1 -0
- package/dist/cli/scripts/on-init.d.cts +3 -0
- package/dist/cli/scripts/on-init.d.ts +3 -0
- package/dist/cli/scripts/on-init.js +68 -0
- package/dist/cli/scripts/on-init.js.map +1 -0
- package/dist/cli/scripts/on-start.cjs +55 -0
- package/dist/cli/scripts/on-start.cjs.map +1 -0
- package/dist/cli/scripts/on-start.d.cts +3 -0
- package/dist/cli/scripts/on-start.d.ts +3 -0
- package/dist/cli/scripts/on-start.js +27 -0
- package/dist/cli/scripts/on-start.js.map +1 -0
- package/dist/client.cjs +405 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.cts +7 -0
- package/dist/client.d.ts +7 -0
- package/dist/client.js +371 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.cjs +51 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +7 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.js +16 -0
- package/dist/constants.js.map +1 -0
- package/dist/database/column/index.cjs +34 -0
- package/dist/database/column/index.cjs.map +1 -0
- package/dist/database/column/index.d.cts +2 -0
- package/dist/database/column/index.d.ts +2 -0
- package/dist/database/column/index.js +8 -0
- package/dist/database/column/index.js.map +1 -0
- package/dist/database/index.cjs +83 -0
- package/dist/database/index.cjs.map +1 -0
- package/dist/database/index.d.cts +2 -0
- package/dist/database/index.d.ts +2 -0
- package/dist/database/index.js +60 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/snake-naming-strategy.class.cjs +78 -0
- package/dist/database/snake-naming-strategy.class.cjs.map +1 -0
- package/dist/database/snake-naming-strategy.class.d.cts +16 -0
- package/dist/database/snake-naming-strategy.class.d.ts +16 -0
- package/dist/database/snake-naming-strategy.class.js +56 -0
- package/dist/database/snake-naming-strategy.class.js.map +1 -0
- package/dist/error.cjs +46 -0
- package/dist/error.cjs.map +1 -0
- package/dist/error.d.cts +10 -0
- package/dist/error.d.ts +10 -0
- package/dist/error.js +28 -0
- package/dist/error.js.map +1 -0
- package/dist/express/app.cjs +233 -0
- package/dist/express/app.cjs.map +1 -0
- package/dist/express/app.d.cts +16 -0
- package/dist/express/app.d.ts +16 -0
- package/dist/express/app.js +205 -0
- package/dist/express/app.js.map +1 -0
- package/dist/express/index.cjs +239 -0
- package/dist/express/index.cjs.map +1 -0
- package/dist/express/index.d.cts +3 -0
- package/dist/express/index.d.ts +3 -0
- package/dist/express/index.js +205 -0
- package/dist/express/index.js.map +1 -0
- package/dist/express/middleware/cors.middleware.cjs +54 -0
- package/dist/express/middleware/cors.middleware.cjs.map +1 -0
- package/dist/express/middleware/cors.middleware.d.cts +9 -0
- package/dist/express/middleware/cors.middleware.d.ts +9 -0
- package/dist/express/middleware/cors.middleware.js +26 -0
- package/dist/express/middleware/cors.middleware.js.map +1 -0
- package/dist/express/middleware/error.middleware.cjs +136 -0
- package/dist/express/middleware/error.middleware.cjs.map +1 -0
- package/dist/express/middleware/error.middleware.d.cts +5 -0
- package/dist/express/middleware/error.middleware.d.ts +5 -0
- package/dist/express/middleware/error.middleware.js +116 -0
- package/dist/express/middleware/error.middleware.js.map +1 -0
- package/dist/express/middleware/filter.middleware.cjs +38 -0
- package/dist/express/middleware/filter.middleware.cjs.map +1 -0
- package/dist/express/middleware/filter.middleware.d.cts +5 -0
- package/dist/express/middleware/filter.middleware.d.ts +5 -0
- package/dist/express/middleware/filter.middleware.js +20 -0
- package/dist/express/middleware/filter.middleware.js.map +1 -0
- package/dist/express/middleware/index.cjs +206 -0
- package/dist/express/middleware/index.cjs.map +1 -0
- package/dist/express/middleware/index.d.cts +19 -0
- package/dist/express/middleware/index.d.ts +19 -0
- package/dist/express/middleware/index.js +169 -0
- package/dist/express/middleware/index.js.map +1 -0
- package/dist/express/middleware/not-found.middleware.cjs +79 -0
- package/dist/express/middleware/not-found.middleware.cjs.map +1 -0
- package/dist/express/middleware/not-found.middleware.d.cts +5 -0
- package/dist/express/middleware/not-found.middleware.d.ts +5 -0
- package/dist/express/middleware/not-found.middleware.js +59 -0
- package/dist/express/middleware/not-found.middleware.js.map +1 -0
- package/dist/generator.cjs +258 -0
- package/dist/generator.cjs.map +1 -0
- package/dist/generator.d.cts +10 -0
- package/dist/generator.d.ts +10 -0
- package/dist/generator.js +220 -0
- package/dist/generator.js.map +1 -0
- package/dist/http.cjs +82 -0
- package/dist/http.cjs.map +1 -0
- package/dist/http.d.cts +11 -0
- package/dist/http.d.ts +11 -0
- package/dist/http.js +64 -0
- package/dist/http.js.map +1 -0
- package/dist/index.cjs +831 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +19 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +783 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/create-env-file.cjs +69 -0
- package/dist/lib/create-env-file.cjs.map +1 -0
- package/dist/lib/create-env-file.d.cts +3 -0
- package/dist/lib/create-env-file.d.ts +3 -0
- package/dist/lib/create-env-file.js +31 -0
- package/dist/lib/create-env-file.js.map +1 -0
- package/dist/lib/helper.cjs +94 -0
- package/dist/lib/helper.cjs.map +1 -0
- package/dist/lib/helper.d.cts +13 -0
- package/dist/lib/helper.d.ts +13 -0
- package/dist/lib/helper.js +62 -0
- package/dist/lib/helper.js.map +1 -0
- package/dist/lib/model.generator.cjs +212 -0
- package/dist/lib/model.generator.cjs.map +1 -0
- package/dist/lib/model.generator.d.cts +29 -0
- package/dist/lib/model.generator.d.ts +29 -0
- package/dist/lib/model.generator.js +174 -0
- package/dist/lib/model.generator.js.map +1 -0
- package/dist/lib/pre-init-dev-script.cjs +336 -0
- package/dist/lib/pre-init-dev-script.cjs.map +1 -0
- package/dist/lib/pre-init-dev-script.d.cts +2 -0
- package/dist/lib/pre-init-dev-script.d.ts +2 -0
- package/dist/lib/pre-init-dev-script.js +311 -0
- package/dist/lib/pre-init-dev-script.js.map +1 -0
- package/dist/mahameru.cjs +397 -0
- package/dist/mahameru.cjs.map +1 -0
- package/dist/mahameru.d.cts +78 -0
- package/dist/mahameru.d.ts +78 -0
- package/dist/mahameru.js +359 -0
- package/dist/mahameru.js.map +1 -0
- package/dist/request.cjs +35 -0
- package/dist/request.cjs.map +1 -0
- package/dist/request.d.cts +4 -0
- package/dist/request.d.ts +4 -0
- package/dist/request.js +13 -0
- package/dist/request.js.map +1 -0
- package/dist/response.cjs +35 -0
- package/dist/response.cjs.map +1 -0
- package/dist/response.d.cts +4 -0
- package/dist/response.d.ts +4 -0
- package/dist/response.js +13 -0
- package/dist/response.js.map +1 -0
- package/dist/types.cjs +1 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +2 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/import-dynamic-module.cjs +34 -0
- package/dist/utils/import-dynamic-module.cjs.map +1 -0
- package/dist/utils/import-dynamic-module.d.cts +3 -0
- package/dist/utils/import-dynamic-module.d.ts +3 -0
- package/dist/utils/import-dynamic-module.js +12 -0
- package/dist/utils/import-dynamic-module.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/base-class/base.controller.ts
|
|
5
|
+
var BaseController = class {
|
|
6
|
+
static {
|
|
7
|
+
__name(this, "BaseController");
|
|
8
|
+
}
|
|
9
|
+
defaultLimit = 10;
|
|
10
|
+
maxLimit = 100;
|
|
11
|
+
defaultOffset = 0;
|
|
12
|
+
defaultSortBy = "createdAt";
|
|
13
|
+
defaultSortDirection = "ASC";
|
|
14
|
+
allowedSortFields = [];
|
|
15
|
+
constructor(options) {
|
|
16
|
+
if (options) {
|
|
17
|
+
if (options.defaultLimit !== void 0) {
|
|
18
|
+
this.defaultLimit = options.defaultLimit;
|
|
19
|
+
}
|
|
20
|
+
if (options.maxLimit !== void 0) {
|
|
21
|
+
this.maxLimit = options.maxLimit;
|
|
22
|
+
}
|
|
23
|
+
if (options.defaultOffset !== void 0) {
|
|
24
|
+
this.defaultOffset = options.defaultOffset;
|
|
25
|
+
}
|
|
26
|
+
if (options.defaultSortBy !== void 0) {
|
|
27
|
+
this.defaultSortBy = options.defaultSortBy;
|
|
28
|
+
}
|
|
29
|
+
if (options.defaultSortDirection !== void 0) {
|
|
30
|
+
this.defaultSortDirection = options.defaultSortDirection;
|
|
31
|
+
}
|
|
32
|
+
if (options.allowedSortFields !== void 0) {
|
|
33
|
+
this.allowedSortFields = [
|
|
34
|
+
...new Set(options.allowedSortFields)
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
parseListQuery = /* @__PURE__ */ __name((request) => {
|
|
40
|
+
const { query: rawQuery, limit: rawLimit, offset: rawOffset, sortBy: rawSortBy, sortDirection: rawSortDirection } = request.query;
|
|
41
|
+
return {
|
|
42
|
+
query: this.parseQuery(rawQuery),
|
|
43
|
+
limit: this.parseLimit(rawLimit),
|
|
44
|
+
offset: this.parseOffset(rawOffset),
|
|
45
|
+
sortBy: this.parseSortBy(rawSortBy),
|
|
46
|
+
sortDirection: this.parseSortDirection(rawSortDirection)
|
|
47
|
+
};
|
|
48
|
+
}, "parseListQuery");
|
|
49
|
+
//@ts-ignore
|
|
50
|
+
parseTypeORMFindManyOptions(rawQuery) {
|
|
51
|
+
try {
|
|
52
|
+
if (typeof rawQuery === "string" && rawQuery.trim().length > 0) {
|
|
53
|
+
const result = JSON.parse(rawQuery);
|
|
54
|
+
if ("where" in result && typeof result.where === "object" && result.where !== null || "relations" in result && typeof result.relations === "object" && result.relations !== null || "order" in result && typeof result.order === "object" || "select" in result && typeof result.select === "object" || "take" in result || "skip" in result) {
|
|
55
|
+
if ("take" in result) result.take = parseInt(result.take);
|
|
56
|
+
if ("skip" in result) result.skip = parseInt(result.skip);
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
} catch {
|
|
61
|
+
return void 0;
|
|
62
|
+
}
|
|
63
|
+
return void 0;
|
|
64
|
+
}
|
|
65
|
+
parseQuery(rawQuery) {
|
|
66
|
+
if (Array.isArray(rawQuery)) {
|
|
67
|
+
rawQuery = rawQuery[0];
|
|
68
|
+
}
|
|
69
|
+
if (typeof rawQuery !== "string" || rawQuery.trim().length === 0) {
|
|
70
|
+
return void 0;
|
|
71
|
+
}
|
|
72
|
+
return rawQuery;
|
|
73
|
+
}
|
|
74
|
+
parseLimit(rawLimit) {
|
|
75
|
+
const parsed = this.parseInteger(rawLimit);
|
|
76
|
+
if (parsed === null || parsed < 1) {
|
|
77
|
+
return this.defaultLimit;
|
|
78
|
+
}
|
|
79
|
+
return Math.min(parsed, this.maxLimit);
|
|
80
|
+
}
|
|
81
|
+
parseOffset(rawOffset) {
|
|
82
|
+
const parsed = this.parseInteger(rawOffset);
|
|
83
|
+
if (parsed === null || parsed < 0) {
|
|
84
|
+
return this.defaultOffset;
|
|
85
|
+
}
|
|
86
|
+
return parsed;
|
|
87
|
+
}
|
|
88
|
+
parseSortBy(rawSortBy) {
|
|
89
|
+
if (Array.isArray(rawSortBy)) {
|
|
90
|
+
rawSortBy = rawSortBy[0];
|
|
91
|
+
}
|
|
92
|
+
if (typeof rawSortBy !== "string") {
|
|
93
|
+
return this.defaultSortBy;
|
|
94
|
+
}
|
|
95
|
+
if (!this.allowedSortFields.includes(rawSortBy)) {
|
|
96
|
+
return this.defaultSortBy;
|
|
97
|
+
}
|
|
98
|
+
return rawSortBy;
|
|
99
|
+
}
|
|
100
|
+
parseSortDirection(rawSortDirection) {
|
|
101
|
+
if (Array.isArray(rawSortDirection)) {
|
|
102
|
+
rawSortDirection = rawSortDirection[0];
|
|
103
|
+
}
|
|
104
|
+
if (typeof rawSortDirection !== "string") {
|
|
105
|
+
return this.defaultSortDirection;
|
|
106
|
+
}
|
|
107
|
+
return rawSortDirection.toLowerCase() === "desc" ? "DESC" : "ASC";
|
|
108
|
+
}
|
|
109
|
+
parseInteger(value) {
|
|
110
|
+
if (Array.isArray(value)) {
|
|
111
|
+
value = value[0];
|
|
112
|
+
}
|
|
113
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const numberValue = Number(value);
|
|
117
|
+
if (!Number.isFinite(numberValue)) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return Math.floor(numberValue);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
export {
|
|
124
|
+
BaseController
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=base.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/base-class/base.controller.ts"],"sourcesContent":["import type { FindManyOptions } from 'typeorm'\r\nimport type { Request } from \"express\"\r\nimport type { BaseEntity } from \"./base.entity.js\"\r\n\r\ntype BaseControllerOptions<T> = {\r\n defaultLimit?: number\r\n maxLimit?: number\r\n defaultOffset?: number\r\n defaultSortBy?: keyof T\r\n defaultSortDirection?: 'ASC' | 'DESC'\r\n allowedSortFields?: (keyof T)[]\r\n}\r\n\r\nexport type SortDirection = \"ASC\" | \"DESC\"\r\n\r\nexport type ParsedListQuery<T> = {\r\n query: string | undefined;\r\n limit: number;\r\n offset: number;\r\n sortBy: keyof T | keyof BaseEntity;\r\n sortDirection: SortDirection\r\n}\r\n\r\nexport class BaseController<T> {\r\n private defaultLimit = 10\r\n private maxLimit = 100\r\n private defaultOffset = 0\r\n private defaultSortBy: keyof T | keyof BaseEntity = 'createdAt'\r\n private defaultSortDirection: 'ASC' | 'DESC' = 'ASC'\r\n private allowedSortFields: (keyof T)[] = []\r\n\r\n constructor(options?: BaseControllerOptions<T>) {\r\n if (options) {\r\n if (options.defaultLimit !== undefined) {\r\n this.defaultLimit = options.defaultLimit\r\n }\r\n\r\n if (options.maxLimit !== undefined) {\r\n this.maxLimit = options.maxLimit\r\n }\r\n\r\n if (options.defaultOffset !== undefined) {\r\n this.defaultOffset = options.defaultOffset\r\n }\r\n\r\n if (options.defaultSortBy !== undefined) {\r\n this.defaultSortBy = options.defaultSortBy\r\n }\r\n\r\n if (options.defaultSortDirection !== undefined) {\r\n this.defaultSortDirection = options.defaultSortDirection\r\n }\r\n\r\n if (options.allowedSortFields !== undefined) {\r\n this.allowedSortFields = [...new Set(options.allowedSortFields)]\r\n }\r\n }\r\n }\r\n\r\n parseListQuery = (request: Request): ParsedListQuery<T> => {\r\n const { query: rawQuery, limit: rawLimit, offset: rawOffset, sortBy: rawSortBy, sortDirection: rawSortDirection } = request.query\r\n\r\n return {\r\n query: this.parseQuery(rawQuery),\r\n limit: this.parseLimit(rawLimit),\r\n offset: this.parseOffset(rawOffset),\r\n sortBy: this.parseSortBy(rawSortBy),\r\n sortDirection: this.parseSortDirection(rawSortDirection)\r\n }\r\n }\r\n\r\n //@ts-ignore\r\n private parseTypeORMFindManyOptions(rawQuery: unknown): FindManyOptions<T> | undefined {\r\n try {\r\n if (typeof rawQuery === 'string' && rawQuery.trim().length > 0) {\r\n const result = JSON.parse(rawQuery)\r\n\r\n if (\r\n \"where\" in result && typeof result.where === 'object' && result.where !== null ||\r\n \"relations\" in result && typeof result.relations === 'object' && result.relations !== null ||\r\n \"order\" in result && typeof result.order === 'object' ||\r\n \"select\" in result && typeof result.select === 'object' ||\r\n \"take\" in result ||\r\n \"skip\" in result\r\n ) {\r\n if (\"take\" in result)\r\n result.take = parseInt(result.take)\r\n\r\n if (\"skip\" in result)\r\n result.skip = parseInt(result.skip)\r\n\r\n return result as FindManyOptions<T>\r\n }\r\n }\r\n } catch {\r\n return undefined\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n private parseQuery(rawQuery: unknown): string | undefined {\r\n if (Array.isArray(rawQuery)) {\r\n rawQuery = rawQuery[0]\r\n }\r\n\r\n if (typeof rawQuery !== 'string' || rawQuery.trim().length === 0) {\r\n return undefined\r\n }\r\n\r\n return rawQuery\r\n }\r\n\r\n private parseLimit(rawLimit: unknown): number {\r\n const parsed = this.parseInteger(rawLimit)\r\n\r\n if (parsed === null || parsed < 1) {\r\n return this.defaultLimit\r\n }\r\n\r\n return Math.min(parsed, this.maxLimit)\r\n }\r\n\r\n private parseOffset(rawOffset: unknown): number {\r\n const parsed = this.parseInteger(rawOffset)\r\n\r\n if (parsed === null || parsed < 0) {\r\n return this.defaultOffset\r\n }\r\n\r\n return parsed\r\n }\r\n\r\n private parseSortBy(rawSortBy: unknown): keyof T | keyof BaseEntity {\r\n if (Array.isArray(rawSortBy)) {\r\n rawSortBy = rawSortBy[0]\r\n }\r\n\r\n if (typeof rawSortBy !== 'string') {\r\n return this.defaultSortBy\r\n }\r\n\r\n if (!this.allowedSortFields.includes(rawSortBy as keyof T)) {\r\n return this.defaultSortBy\r\n }\r\n\r\n return rawSortBy as keyof T\r\n }\r\n\r\n private parseSortDirection(rawSortDirection: unknown): 'ASC' | 'DESC' {\r\n if (Array.isArray(rawSortDirection)) {\r\n rawSortDirection = rawSortDirection[0]\r\n }\r\n\r\n if (typeof rawSortDirection !== 'string') {\r\n return this.defaultSortDirection\r\n }\r\n\r\n return rawSortDirection.toLowerCase() === 'desc' ? 'DESC' : 'ASC'\r\n }\r\n\r\n private parseInteger(value: unknown): number | null {\r\n if (Array.isArray(value)) {\r\n value = value[0]\r\n }\r\n\r\n if (typeof value !== 'string' || value.trim().length === 0) {\r\n return null\r\n }\r\n\r\n const numberValue = Number(value)\r\n\r\n if (!Number.isFinite(numberValue)) {\r\n return null\r\n }\r\n\r\n return Math.floor(numberValue)\r\n }\r\n}\r\n"],"mappings":"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","names":["BaseController","defaultLimit","maxLimit","defaultOffset","defaultSortBy","defaultSortDirection","allowedSortFields","options","undefined","Set","parseListQuery","request","query","rawQuery","limit","rawLimit","offset","rawOffset","sortBy","rawSortBy","sortDirection","rawSortDirection","parseQuery","parseLimit","parseOffset","parseSortBy","parseSortDirection","parseTypeORMFindManyOptions","trim","length","result","JSON","parse","where","relations","order","select","take","parseInt","skip","Array","isArray","parsed","parseInteger","Math","min","includes","toLowerCase","value","numberValue","Number","isFinite","floor"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/base-class/base.entity.ts
|
|
21
|
+
var base_entity_exports = {};
|
|
22
|
+
__export(base_entity_exports, {
|
|
23
|
+
BaseEntity: () => BaseEntity
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(base_entity_exports);
|
|
26
|
+
var import_typeorm = require("typeorm");
|
|
27
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
28
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
29
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
30
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
31
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
32
|
+
}
|
|
33
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
34
|
+
function _ts_metadata(k, v) {
|
|
35
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
36
|
+
}
|
|
37
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
38
|
+
var BaseEntity = class {
|
|
39
|
+
static {
|
|
40
|
+
__name(this, "BaseEntity");
|
|
41
|
+
}
|
|
42
|
+
id;
|
|
43
|
+
createdAt;
|
|
44
|
+
updatedAt;
|
|
45
|
+
isDisabled;
|
|
46
|
+
};
|
|
47
|
+
_ts_decorate([
|
|
48
|
+
(0, import_typeorm.PrimaryGeneratedColumn)("uuid"),
|
|
49
|
+
_ts_metadata("design:type", String)
|
|
50
|
+
], BaseEntity.prototype, "id", void 0);
|
|
51
|
+
_ts_decorate([
|
|
52
|
+
(0, import_typeorm.CreateDateColumn)({
|
|
53
|
+
type: "datetime",
|
|
54
|
+
precision: 3,
|
|
55
|
+
default: /* @__PURE__ */ __name(() => "UTC_TIMESTAMP(3)", "default")
|
|
56
|
+
}),
|
|
57
|
+
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
58
|
+
], BaseEntity.prototype, "createdAt", void 0);
|
|
59
|
+
_ts_decorate([
|
|
60
|
+
(0, import_typeorm.Column)({
|
|
61
|
+
type: "datetime",
|
|
62
|
+
precision: 3,
|
|
63
|
+
default: null,
|
|
64
|
+
nullable: true
|
|
65
|
+
}),
|
|
66
|
+
_ts_metadata("design:type", Object)
|
|
67
|
+
], BaseEntity.prototype, "updatedAt", void 0);
|
|
68
|
+
_ts_decorate([
|
|
69
|
+
(0, import_typeorm.Column)({
|
|
70
|
+
type: "boolean",
|
|
71
|
+
default: false
|
|
72
|
+
}),
|
|
73
|
+
_ts_metadata("design:type", Boolean)
|
|
74
|
+
], BaseEntity.prototype, "isDisabled", void 0);
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
BaseEntity
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=base.entity.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/base-class/base.entity.ts"],"sourcesContent":["import { Column, CreateDateColumn, PrimaryGeneratedColumn } from 'typeorm'\r\n\r\nexport abstract class BaseEntity {\r\n @PrimaryGeneratedColumn('uuid')\r\n id: string\r\n\r\n @CreateDateColumn({\r\n type: 'datetime',\r\n precision: 3,\r\n default: () => 'UTC_TIMESTAMP(3)',\r\n })\r\n createdAt: Date\r\n\r\n @Column({\r\n type: 'datetime',\r\n precision: 3,\r\n default: null,\r\n nullable: true\r\n })\r\n updatedAt: Date | null\r\n\r\n @Column({\r\n type: 'boolean',\r\n default: false\r\n })\r\n isDisabled: boolean\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qBAAiE;;;;;;;;;;;;AAE1D,IAAeA,aAAf,MAAeA;SAAAA;;;EAElBC;EAOAC;EAQAC;EAMAC;AACJ;;;;;;;IAnBQC,MAAM;IACNC,WAAW;IACXC,SAAS,6BAAM,oBAAN;;;;;;IAKTF,MAAM;IACNC,WAAW;IACXC,SAAS;IACTC,UAAU;;;;;;IAKVH,MAAM;IACNE,SAAS;;;;","names":["BaseEntity","id","createdAt","updatedAt","isDisabled","type","precision","default","nullable"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/base-class/base.entity.ts
|
|
5
|
+
import { Column, CreateDateColumn, PrimaryGeneratedColumn } from "typeorm";
|
|
6
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
7
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
9
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
10
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
11
|
+
}
|
|
12
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
13
|
+
function _ts_metadata(k, v) {
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
15
|
+
}
|
|
16
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
17
|
+
var BaseEntity = class {
|
|
18
|
+
static {
|
|
19
|
+
__name(this, "BaseEntity");
|
|
20
|
+
}
|
|
21
|
+
id;
|
|
22
|
+
createdAt;
|
|
23
|
+
updatedAt;
|
|
24
|
+
isDisabled;
|
|
25
|
+
};
|
|
26
|
+
_ts_decorate([
|
|
27
|
+
PrimaryGeneratedColumn("uuid"),
|
|
28
|
+
_ts_metadata("design:type", String)
|
|
29
|
+
], BaseEntity.prototype, "id", void 0);
|
|
30
|
+
_ts_decorate([
|
|
31
|
+
CreateDateColumn({
|
|
32
|
+
type: "datetime",
|
|
33
|
+
precision: 3,
|
|
34
|
+
default: /* @__PURE__ */ __name(() => "UTC_TIMESTAMP(3)", "default")
|
|
35
|
+
}),
|
|
36
|
+
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
37
|
+
], BaseEntity.prototype, "createdAt", void 0);
|
|
38
|
+
_ts_decorate([
|
|
39
|
+
Column({
|
|
40
|
+
type: "datetime",
|
|
41
|
+
precision: 3,
|
|
42
|
+
default: null,
|
|
43
|
+
nullable: true
|
|
44
|
+
}),
|
|
45
|
+
_ts_metadata("design:type", Object)
|
|
46
|
+
], BaseEntity.prototype, "updatedAt", void 0);
|
|
47
|
+
_ts_decorate([
|
|
48
|
+
Column({
|
|
49
|
+
type: "boolean",
|
|
50
|
+
default: false
|
|
51
|
+
}),
|
|
52
|
+
_ts_metadata("design:type", Boolean)
|
|
53
|
+
], BaseEntity.prototype, "isDisabled", void 0);
|
|
54
|
+
export {
|
|
55
|
+
BaseEntity
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=base.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/base-class/base.entity.ts"],"sourcesContent":["import { Column, CreateDateColumn, PrimaryGeneratedColumn } from 'typeorm'\r\n\r\nexport abstract class BaseEntity {\r\n @PrimaryGeneratedColumn('uuid')\r\n id: string\r\n\r\n @CreateDateColumn({\r\n type: 'datetime',\r\n precision: 3,\r\n default: () => 'UTC_TIMESTAMP(3)',\r\n })\r\n createdAt: Date\r\n\r\n @Column({\r\n type: 'datetime',\r\n precision: 3,\r\n default: null,\r\n nullable: true\r\n })\r\n updatedAt: Date | null\r\n\r\n @Column({\r\n type: 'boolean',\r\n default: false\r\n })\r\n isDisabled: boolean\r\n}\r\n"],"mappings":";;;;AAAA,SAASA,QAAQC,kBAAkBC,8BAA8B;;;;;;;;;;;;AAE1D,IAAeC,aAAf,MAAeA;SAAAA;;;EAElBC;EAOAC;EAQAC;EAMAC;AACJ;;;;;;;IAnBQC,MAAM;IACNC,WAAW;IACXC,SAAS,6BAAM,oBAAN;;;;;;IAKTF,MAAM;IACNC,WAAW;IACXC,SAAS;IACTC,UAAU;;;;;;IAKVH,MAAM;IACNE,SAAS;;;;","names":["Column","CreateDateColumn","PrimaryGeneratedColumn","BaseEntity","id","createdAt","updatedAt","isDisabled","type","precision","default","nullable"]}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/base-class/base.model.ts
|
|
21
|
+
var base_model_exports = {};
|
|
22
|
+
__export(base_model_exports, {
|
|
23
|
+
BaseModel: () => BaseModel
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(base_model_exports);
|
|
26
|
+
var import_typeorm = require("typeorm");
|
|
27
|
+
var BaseModel = class _BaseModel {
|
|
28
|
+
static {
|
|
29
|
+
__name(this, "BaseModel");
|
|
30
|
+
}
|
|
31
|
+
dataSource;
|
|
32
|
+
entityTarget;
|
|
33
|
+
static defaultChunkSize = 500;
|
|
34
|
+
constructor(dataSource, entityTarget) {
|
|
35
|
+
this.dataSource = dataSource;
|
|
36
|
+
this.entityTarget = entityTarget;
|
|
37
|
+
}
|
|
38
|
+
getRepository(manager) {
|
|
39
|
+
return (manager ?? this.dataSource.manager).getRepository(this.entityTarget);
|
|
40
|
+
}
|
|
41
|
+
transaction(handler) {
|
|
42
|
+
return this.dataSource.transaction(handler);
|
|
43
|
+
}
|
|
44
|
+
async list(options, manager) {
|
|
45
|
+
let where = options.where;
|
|
46
|
+
if (typeof options.parsedListQuery.query === "string" && options.parsedListQuery.query.trim().length > 0 && options.searchFields && options.searchFields.length > 0) {
|
|
47
|
+
const search = `%${options.parsedListQuery.query.trim()}%`;
|
|
48
|
+
where = options.searchFields.map((field) => ({
|
|
49
|
+
[field]: (0, import_typeorm.Like)(search)
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
const order = options.parsedListQuery.sortBy ? {
|
|
53
|
+
[options.parsedListQuery.sortBy]: options.parsedListQuery.sortDirection ?? "ASC"
|
|
54
|
+
} : options.defaultOrder;
|
|
55
|
+
const [data, total] = await this.getRepository(manager).findAndCount({
|
|
56
|
+
where,
|
|
57
|
+
take: options.parsedListQuery.limit,
|
|
58
|
+
skip: options.parsedListQuery.offset,
|
|
59
|
+
order,
|
|
60
|
+
relations: options.relations
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
data,
|
|
64
|
+
meta: {
|
|
65
|
+
total,
|
|
66
|
+
limit: options.parsedListQuery.limit,
|
|
67
|
+
offset: options.parsedListQuery.offset,
|
|
68
|
+
hasNext: options.parsedListQuery.offset + data.length < total
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
find(options, manager) {
|
|
73
|
+
return this.getRepository(manager).find(options);
|
|
74
|
+
}
|
|
75
|
+
findAndCount(options, manager) {
|
|
76
|
+
return this.getRepository(manager).findAndCount(options);
|
|
77
|
+
}
|
|
78
|
+
findOne(options, manager) {
|
|
79
|
+
return this.getRepository(manager).findOne(options);
|
|
80
|
+
}
|
|
81
|
+
findOneBy(where, manager) {
|
|
82
|
+
return this.getRepository(manager).findOneBy(where);
|
|
83
|
+
}
|
|
84
|
+
findOneById(id, manager) {
|
|
85
|
+
return this.getRepository(manager).findOne({
|
|
86
|
+
where: {
|
|
87
|
+
id
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
count(options, manager) {
|
|
92
|
+
return this.getRepository(manager).count(options);
|
|
93
|
+
}
|
|
94
|
+
countBy(where, manager) {
|
|
95
|
+
return this.getRepository(manager).countBy(where);
|
|
96
|
+
}
|
|
97
|
+
async exists(where, manager) {
|
|
98
|
+
const total = await this.countBy(where, manager);
|
|
99
|
+
return total > 0;
|
|
100
|
+
}
|
|
101
|
+
create(data, manager) {
|
|
102
|
+
return this.getRepository(manager).create(data);
|
|
103
|
+
}
|
|
104
|
+
save(data, manager) {
|
|
105
|
+
return this.getRepository(manager).save(data);
|
|
106
|
+
}
|
|
107
|
+
async createAndSave(data, manager) {
|
|
108
|
+
const repository = this.getRepository(manager);
|
|
109
|
+
const entity = repository.create(data);
|
|
110
|
+
return repository.save(entity);
|
|
111
|
+
}
|
|
112
|
+
async createBatch(data, options = {}, manager) {
|
|
113
|
+
const chunkSize = this.normalizeChunkSize(options.chunkSize);
|
|
114
|
+
const result = {
|
|
115
|
+
totalRecord: data.length,
|
|
116
|
+
totalAdded: 0,
|
|
117
|
+
failed: []
|
|
118
|
+
};
|
|
119
|
+
for (let index = 0; index < data.length; index += chunkSize) {
|
|
120
|
+
const chunk = data.slice(index, index + chunkSize);
|
|
121
|
+
try {
|
|
122
|
+
const saved = await this.saveBatch(chunk, manager);
|
|
123
|
+
result.totalAdded += saved.length;
|
|
124
|
+
} catch {
|
|
125
|
+
await this.saveBatchOneByOne(chunk, result, manager);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
async update(where, data, manager) {
|
|
131
|
+
const repository = this.getRepository(manager);
|
|
132
|
+
if (!data.updatedAt) data.updatedAt = /* @__PURE__ */ new Date();
|
|
133
|
+
return repository.update(where, data);
|
|
134
|
+
}
|
|
135
|
+
updateById(id, data, manager) {
|
|
136
|
+
const repository = this.getRepository(manager);
|
|
137
|
+
if (!data.updatedAt) data.updatedAt = /* @__PURE__ */ new Date();
|
|
138
|
+
return repository.update(id, data);
|
|
139
|
+
}
|
|
140
|
+
async updateByIds(ids, data, manager) {
|
|
141
|
+
const repository = this.getRepository(manager);
|
|
142
|
+
if (!data.updatedAt) data.updatedAt = /* @__PURE__ */ new Date();
|
|
143
|
+
return repository.update(ids, {
|
|
144
|
+
...data
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
async removeById(id, manager) {
|
|
148
|
+
const repository = this.getRepository(manager);
|
|
149
|
+
const entity = await this.findOneById(id, manager);
|
|
150
|
+
if (!entity) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
await repository.remove(entity);
|
|
154
|
+
return entity;
|
|
155
|
+
}
|
|
156
|
+
async softRemoveById(id, manager) {
|
|
157
|
+
const repository = this.getRepository(manager);
|
|
158
|
+
const entity = await this.findOneById(id, manager);
|
|
159
|
+
if (!entity) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
await repository.softRemove(entity);
|
|
163
|
+
return entity;
|
|
164
|
+
}
|
|
165
|
+
async restoreById(id, manager) {
|
|
166
|
+
const result = await this.getRepository(manager).restore(id);
|
|
167
|
+
return Boolean(result.affected);
|
|
168
|
+
}
|
|
169
|
+
async delete(where, manager) {
|
|
170
|
+
const result = await this.getRepository(manager).delete(where);
|
|
171
|
+
return Boolean(result.affected);
|
|
172
|
+
}
|
|
173
|
+
normalizeChunkSize(chunkSize) {
|
|
174
|
+
if (!chunkSize || chunkSize < 1) return _BaseModel.defaultChunkSize;
|
|
175
|
+
return Math.floor(chunkSize);
|
|
176
|
+
}
|
|
177
|
+
async saveBatch(data, manager) {
|
|
178
|
+
const repo = this.getRepository(manager);
|
|
179
|
+
const objects = repo.create(data);
|
|
180
|
+
return repo.save(objects, {
|
|
181
|
+
chunk: data.length
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
async saveBatchOneByOne(data, result, manager) {
|
|
185
|
+
for (const item of data) {
|
|
186
|
+
try {
|
|
187
|
+
await this.saveBatch([
|
|
188
|
+
item
|
|
189
|
+
], manager);
|
|
190
|
+
result.totalAdded += 1;
|
|
191
|
+
} catch (error) {
|
|
192
|
+
result.failed.push({
|
|
193
|
+
data: item,
|
|
194
|
+
error
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
201
|
+
0 && (module.exports = {
|
|
202
|
+
BaseModel
|
|
203
|
+
});
|
|
204
|
+
//# sourceMappingURL=base.model.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/base-class/base.model.ts"],"sourcesContent":["import {\r\n DataSource,\r\n DeepPartial,\r\n EntityManager,\r\n EntityTarget,\r\n FindManyOptions,\r\n FindOneOptions,\r\n FindOptionsOrder,\r\n FindOptionsRelations,\r\n FindOptionsWhere,\r\n Like,\r\n ObjectLiteral,\r\n QueryDeepPartialEntity,\r\n Repository\r\n} from 'typeorm'\r\nimport type { ParsedListQuery } from './base.controller.js'\r\n\r\nexport type CreateBatchOptions = {\r\n chunkSize?: number\r\n}\r\n\r\nexport type CreateBatchResult<T extends ObjectLiteral> = {\r\n totalRecord: number\r\n totalAdded: number\r\n failed: {\r\n data: DeepPartial<T>\r\n error: unknown\r\n }[]\r\n}\r\n\r\nexport type TransactionHandler<TResult> = (manager: EntityManager) => Promise<TResult>\r\n\r\nexport type BaseModelListOptions<TEntity extends ObjectLiteral> = {\r\n parsedListQuery: ParsedListQuery<TEntity>\r\n searchFields?: (keyof TEntity)[]\r\n relations?: FindOptionsRelations<TEntity>\r\n where?: FindOptionsWhere<TEntity> | FindOptionsWhere<TEntity>[]\r\n defaultOrder?: FindOptionsOrder<TEntity>\r\n}\r\n\r\nexport abstract class BaseModel<TEntity extends ObjectLiteral & { id: string }> {\r\n private static readonly defaultChunkSize = 500\r\n\r\n constructor(\r\n protected readonly dataSource: DataSource,\r\n protected readonly entityTarget: EntityTarget<TEntity>\r\n ) { }\r\n\r\n protected getRepository(manager?: EntityManager): Repository<TEntity> {\r\n return (manager ?? this.dataSource.manager).getRepository(this.entityTarget)\r\n }\r\n\r\n transaction<TResult>(handler: TransactionHandler<TResult>): Promise<TResult> {\r\n return this.dataSource.transaction(handler)\r\n }\r\n\r\n async list(options: BaseModelListOptions<TEntity>, manager?: EntityManager) {\r\n let where = options.where\r\n\r\n if (\r\n typeof options.parsedListQuery.query === 'string' &&\r\n options.parsedListQuery.query.trim().length > 0 &&\r\n options.searchFields &&\r\n options.searchFields.length > 0\r\n ) {\r\n const search = `%${options.parsedListQuery.query.trim()}%`\r\n\r\n where = options.searchFields.map((field) => ({\r\n [field]: Like(search)\r\n })) as FindOptionsWhere<TEntity>[]\r\n }\r\n\r\n const order: FindOptionsOrder<TEntity> | undefined = options.parsedListQuery.sortBy\r\n ? {\r\n [options.parsedListQuery.sortBy]: options.parsedListQuery.sortDirection ?? 'ASC'\r\n } as FindOptionsOrder<TEntity>\r\n : options.defaultOrder\r\n\r\n const [data, total] = await this.getRepository(manager).findAndCount({\r\n where,\r\n take: options.parsedListQuery.limit,\r\n skip: options.parsedListQuery.offset,\r\n order,\r\n relations: options.relations\r\n })\r\n\r\n return {\r\n data,\r\n meta: {\r\n total,\r\n limit: options.parsedListQuery.limit,\r\n offset: options.parsedListQuery.offset,\r\n hasNext: options.parsedListQuery.offset + data.length < total\r\n }\r\n }\r\n }\r\n\r\n find(options?: FindManyOptions<TEntity>, manager?: EntityManager) {\r\n return this.getRepository(manager).find(options)\r\n }\r\n\r\n findAndCount(options?: FindManyOptions<TEntity>, manager?: EntityManager) {\r\n return this.getRepository(manager).findAndCount(options)\r\n }\r\n\r\n findOne(options: FindOneOptions<TEntity>, manager?: EntityManager) {\r\n return this.getRepository(manager).findOne(options)\r\n }\r\n\r\n findOneBy(where: FindOptionsWhere<TEntity>, manager?: EntityManager) {\r\n return this.getRepository(manager).findOneBy(where)\r\n }\r\n\r\n findOneById(id: TEntity['id'], manager?: EntityManager) {\r\n return this.getRepository(manager).findOne({\r\n where: {\r\n id\r\n } as FindOptionsWhere<TEntity>\r\n })\r\n }\r\n\r\n count(options?: FindManyOptions<TEntity>, manager?: EntityManager) {\r\n return this.getRepository(manager).count(options)\r\n }\r\n\r\n countBy(where: FindOptionsWhere<TEntity>, manager?: EntityManager) {\r\n return this.getRepository(manager).countBy(where)\r\n }\r\n\r\n async exists(where: FindOptionsWhere<TEntity>, manager?: EntityManager) {\r\n const total = await this.countBy(where, manager)\r\n\r\n return total > 0\r\n }\r\n\r\n create(data: DeepPartial<TEntity>, manager?: EntityManager) {\r\n return this.getRepository(manager).create(data)\r\n }\r\n\r\n save(data: DeepPartial<TEntity>, manager?: EntityManager) {\r\n return this.getRepository(manager).save(data)\r\n }\r\n\r\n async createAndSave(data: DeepPartial<TEntity>, manager?: EntityManager) {\r\n const repository = this.getRepository(manager)\r\n const entity = repository.create(data)\r\n\r\n return repository.save(entity)\r\n }\r\n\r\n async createBatch(data: DeepPartial<TEntity>[], options: CreateBatchOptions = {}, manager?: EntityManager): Promise<CreateBatchResult<TEntity>> {\r\n const chunkSize = this.normalizeChunkSize(options.chunkSize)\r\n const result: CreateBatchResult<TEntity> = {\r\n totalRecord: data.length,\r\n totalAdded: 0,\r\n failed: []\r\n }\r\n\r\n for (let index = 0; index < data.length; index += chunkSize) {\r\n const chunk = data.slice(index, index + chunkSize)\r\n\r\n try {\r\n const saved = await this.saveBatch(chunk, manager)\r\n result.totalAdded += saved.length\r\n } catch {\r\n await this.saveBatchOneByOne(chunk, result, manager)\r\n }\r\n }\r\n\r\n return result\r\n }\r\n\r\n async update(where: FindOptionsWhere<TEntity> | FindOptionsWhere<TEntity>[], data: DeepPartial<TEntity>, manager?: EntityManager) {\r\n const repository = this.getRepository(manager)\r\n\r\n if (!data.updatedAt)\r\n (data as any).updatedAt = new Date()\r\n\r\n return repository.update(where, data)\r\n }\r\n\r\n updateById(\r\n id: TEntity['id'],\r\n data: DeepPartial<TEntity>,\r\n manager?: EntityManager\r\n ) {\r\n const repository = this.getRepository(manager)\r\n\r\n if (!data.updatedAt)\r\n (data as any).updatedAt = new Date()\r\n\r\n return repository.update(id, data)\r\n }\r\n\r\n async updateByIds(\r\n ids: string[],\r\n data: QueryDeepPartialEntity<TEntity>,\r\n manager?: EntityManager\r\n ) {\r\n const repository = this.getRepository(manager)\r\n\r\n if (!(data as any).updatedAt)\r\n (data as any).updatedAt = new Date()\r\n\r\n return repository.update(ids, { ...data })\r\n }\r\n\r\n async removeById(id: TEntity['id'], manager?: EntityManager) {\r\n const repository = this.getRepository(manager)\r\n\r\n const entity = await this.findOneById(id, manager)\r\n\r\n if (!entity) {\r\n return null\r\n }\r\n\r\n await repository.remove(entity)\r\n\r\n return entity\r\n }\r\n\r\n async softRemoveById(id: TEntity['id'], manager?: EntityManager) {\r\n const repository = this.getRepository(manager)\r\n\r\n const entity = await this.findOneById(id, manager)\r\n\r\n if (!entity) {\r\n return null\r\n }\r\n\r\n await repository.softRemove(entity)\r\n\r\n return entity\r\n }\r\n\r\n async restoreById(id: TEntity['id'], manager?: EntityManager) {\r\n const result = await this.getRepository(manager).restore(id)\r\n\r\n return Boolean(result.affected)\r\n }\r\n\r\n async delete(where: FindOptionsWhere<TEntity>, manager?: EntityManager) {\r\n const result = await this.getRepository(manager).delete(where)\r\n\r\n return Boolean(result.affected)\r\n }\r\n\r\n private normalizeChunkSize(chunkSize?: number) {\r\n if (!chunkSize || chunkSize < 1) return BaseModel.defaultChunkSize\r\n\r\n return Math.floor(chunkSize)\r\n }\r\n\r\n async saveBatch(data: DeepPartial<TEntity>[], manager?: EntityManager) {\r\n const repo = this.getRepository(manager)\r\n const objects = repo.create(data)\r\n\r\n return repo.save(objects, {\r\n chunk: data.length\r\n })\r\n }\r\n\r\n private async saveBatchOneByOne(data: DeepPartial<TEntity>[], result: CreateBatchResult<TEntity>, manager?: EntityManager) {\r\n for (const item of data) {\r\n try {\r\n await this.saveBatch([item], manager)\r\n result.totalAdded += 1\r\n } catch (error) {\r\n result.failed.push({\r\n data: item,\r\n error\r\n })\r\n }\r\n }\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,qBAcO;AA0BA,IAAeA,YAAf,MAAeA,WAAAA;EAxCtB,OAwCsBA;;;;;EAClB,OAAwBC,mBAAmB;EAE3C,YACuBC,YACAC,cACrB;SAFqBD,aAAAA;SACAC,eAAAA;EACnB;EAEMC,cAAcC,SAA8C;AAClE,YAAQA,WAAW,KAAKH,WAAWG,SAASD,cAAc,KAAKD,YAAY;EAC/E;EAEAG,YAAqBC,SAAwD;AACzE,WAAO,KAAKL,WAAWI,YAAYC,OAAAA;EACvC;EAEA,MAAMC,KAAKC,SAAwCJ,SAAyB;AACxE,QAAIK,QAAQD,QAAQC;AAEpB,QACI,OAAOD,QAAQE,gBAAgBC,UAAU,YACzCH,QAAQE,gBAAgBC,MAAMC,KAAI,EAAGC,SAAS,KAC9CL,QAAQM,gBACRN,QAAQM,aAAaD,SAAS,GAChC;AACE,YAAME,SAAS,IAAIP,QAAQE,gBAAgBC,MAAMC,KAAI,CAAA;AAErDH,cAAQD,QAAQM,aAAaE,IAAI,CAACC,WAAW;QACzC,CAACA,KAAAA,OAAQC,qBAAKH,MAAAA;MAClB,EAAA;IACJ;AAEA,UAAMI,QAA+CX,QAAQE,gBAAgBU,SACvE;MACE,CAACZ,QAAQE,gBAAgBU,MAAM,GAAGZ,QAAQE,gBAAgBW,iBAAiB;IAC/E,IACEb,QAAQc;AAEd,UAAM,CAACC,MAAMC,KAAAA,IAAS,MAAM,KAAKrB,cAAcC,OAAAA,EAASqB,aAAa;MACjEhB;MACAiB,MAAMlB,QAAQE,gBAAgBiB;MAC9BC,MAAMpB,QAAQE,gBAAgBmB;MAC9BV;MACAW,WAAWtB,QAAQsB;IACvB,CAAA;AAEA,WAAO;MACHP;MACAQ,MAAM;QACFP;QACAG,OAAOnB,QAAQE,gBAAgBiB;QAC/BE,QAAQrB,QAAQE,gBAAgBmB;QAChCG,SAASxB,QAAQE,gBAAgBmB,SAASN,KAAKV,SAASW;MAC5D;IACJ;EACJ;EAEAS,KAAKzB,SAAoCJ,SAAyB;AAC9D,WAAO,KAAKD,cAAcC,OAAAA,EAAS6B,KAAKzB,OAAAA;EAC5C;EAEAiB,aAAajB,SAAoCJ,SAAyB;AACtE,WAAO,KAAKD,cAAcC,OAAAA,EAASqB,aAAajB,OAAAA;EACpD;EAEA0B,QAAQ1B,SAAkCJ,SAAyB;AAC/D,WAAO,KAAKD,cAAcC,OAAAA,EAAS8B,QAAQ1B,OAAAA;EAC/C;EAEA2B,UAAU1B,OAAkCL,SAAyB;AACjE,WAAO,KAAKD,cAAcC,OAAAA,EAAS+B,UAAU1B,KAAAA;EACjD;EAEA2B,YAAYC,IAAmBjC,SAAyB;AACpD,WAAO,KAAKD,cAAcC,OAAAA,EAAS8B,QAAQ;MACvCzB,OAAO;QACH4B;MACJ;IACJ,CAAA;EACJ;EAEAC,MAAM9B,SAAoCJ,SAAyB;AAC/D,WAAO,KAAKD,cAAcC,OAAAA,EAASkC,MAAM9B,OAAAA;EAC7C;EAEA+B,QAAQ9B,OAAkCL,SAAyB;AAC/D,WAAO,KAAKD,cAAcC,OAAAA,EAASmC,QAAQ9B,KAAAA;EAC/C;EAEA,MAAM+B,OAAO/B,OAAkCL,SAAyB;AACpE,UAAMoB,QAAQ,MAAM,KAAKe,QAAQ9B,OAAOL,OAAAA;AAExC,WAAOoB,QAAQ;EACnB;EAEAiB,OAAOlB,MAA4BnB,SAAyB;AACxD,WAAO,KAAKD,cAAcC,OAAAA,EAASqC,OAAOlB,IAAAA;EAC9C;EAEAmB,KAAKnB,MAA4BnB,SAAyB;AACtD,WAAO,KAAKD,cAAcC,OAAAA,EAASsC,KAAKnB,IAAAA;EAC5C;EAEA,MAAMoB,cAAcpB,MAA4BnB,SAAyB;AACrE,UAAMwC,aAAa,KAAKzC,cAAcC,OAAAA;AACtC,UAAMyC,SAASD,WAAWH,OAAOlB,IAAAA;AAEjC,WAAOqB,WAAWF,KAAKG,MAAAA;EAC3B;EAEA,MAAMC,YAAYvB,MAA8Bf,UAA8B,CAAC,GAAGJ,SAA8D;AAC5I,UAAM2C,YAAY,KAAKC,mBAAmBxC,QAAQuC,SAAS;AAC3D,UAAME,SAAqC;MACvCC,aAAa3B,KAAKV;MAClBsC,YAAY;MACZC,QAAQ,CAAA;IACZ;AAEA,aAASC,QAAQ,GAAGA,QAAQ9B,KAAKV,QAAQwC,SAASN,WAAW;AACzD,YAAMO,QAAQ/B,KAAKgC,MAAMF,OAAOA,QAAQN,SAAAA;AAExC,UAAI;AACA,cAAMS,QAAQ,MAAM,KAAKC,UAAUH,OAAOlD,OAAAA;AAC1C6C,eAAOE,cAAcK,MAAM3C;MAC/B,QAAQ;AACJ,cAAM,KAAK6C,kBAAkBJ,OAAOL,QAAQ7C,OAAAA;MAChD;IACJ;AAEA,WAAO6C;EACX;EAEA,MAAMU,OAAOlD,OAAgEc,MAA4BnB,SAAyB;AAC9H,UAAMwC,aAAa,KAAKzC,cAAcC,OAAAA;AAEtC,QAAI,CAACmB,KAAKqC,UACLrC,MAAaqC,YAAY,oBAAIC,KAAAA;AAElC,WAAOjB,WAAWe,OAAOlD,OAAOc,IAAAA;EACpC;EAEAuC,WACIzB,IACAd,MACAnB,SACF;AACE,UAAMwC,aAAa,KAAKzC,cAAcC,OAAAA;AAEtC,QAAI,CAACmB,KAAKqC,UACLrC,MAAaqC,YAAY,oBAAIC,KAAAA;AAElC,WAAOjB,WAAWe,OAAOtB,IAAId,IAAAA;EACjC;EAEA,MAAMwC,YACFC,KACAzC,MACAnB,SACF;AACE,UAAMwC,aAAa,KAAKzC,cAAcC,OAAAA;AAEtC,QAAI,CAAEmB,KAAaqC,UACdrC,MAAaqC,YAAY,oBAAIC,KAAAA;AAElC,WAAOjB,WAAWe,OAAOK,KAAK;MAAE,GAAGzC;IAAK,CAAA;EAC5C;EAEA,MAAM0C,WAAW5B,IAAmBjC,SAAyB;AACzD,UAAMwC,aAAa,KAAKzC,cAAcC,OAAAA;AAEtC,UAAMyC,SAAS,MAAM,KAAKT,YAAYC,IAAIjC,OAAAA;AAE1C,QAAI,CAACyC,QAAQ;AACT,aAAO;IACX;AAEA,UAAMD,WAAWsB,OAAOrB,MAAAA;AAExB,WAAOA;EACX;EAEA,MAAMsB,eAAe9B,IAAmBjC,SAAyB;AAC7D,UAAMwC,aAAa,KAAKzC,cAAcC,OAAAA;AAEtC,UAAMyC,SAAS,MAAM,KAAKT,YAAYC,IAAIjC,OAAAA;AAE1C,QAAI,CAACyC,QAAQ;AACT,aAAO;IACX;AAEA,UAAMD,WAAWwB,WAAWvB,MAAAA;AAE5B,WAAOA;EACX;EAEA,MAAMwB,YAAYhC,IAAmBjC,SAAyB;AAC1D,UAAM6C,SAAS,MAAM,KAAK9C,cAAcC,OAAAA,EAASkE,QAAQjC,EAAAA;AAEzD,WAAOkC,QAAQtB,OAAOuB,QAAQ;EAClC;EAEA,MAAMC,OAAOhE,OAAkCL,SAAyB;AACpE,UAAM6C,SAAS,MAAM,KAAK9C,cAAcC,OAAAA,EAASqE,OAAOhE,KAAAA;AAExD,WAAO8D,QAAQtB,OAAOuB,QAAQ;EAClC;EAEQxB,mBAAmBD,WAAoB;AAC3C,QAAI,CAACA,aAAaA,YAAY,EAAG,QAAOhD,WAAUC;AAElD,WAAO0E,KAAKC,MAAM5B,SAAAA;EACtB;EAEA,MAAMU,UAAUlC,MAA8BnB,SAAyB;AACnE,UAAMwE,OAAO,KAAKzE,cAAcC,OAAAA;AAChC,UAAMyE,UAAUD,KAAKnC,OAAOlB,IAAAA;AAE5B,WAAOqD,KAAKlC,KAAKmC,SAAS;MACtBvB,OAAO/B,KAAKV;IAChB,CAAA;EACJ;EAEA,MAAc6C,kBAAkBnC,MAA8B0B,QAAoC7C,SAAyB;AACvH,eAAW0E,QAAQvD,MAAM;AACrB,UAAI;AACA,cAAM,KAAKkC,UAAU;UAACqB;WAAO1E,OAAAA;AAC7B6C,eAAOE,cAAc;MACzB,SAAS4B,OAAO;AACZ9B,eAAOG,OAAO4B,KAAK;UACfzD,MAAMuD;UACNC;QACJ,CAAA;MACJ;IACJ;EACJ;AACJ;","names":["BaseModel","defaultChunkSize","dataSource","entityTarget","getRepository","manager","transaction","handler","list","options","where","parsedListQuery","query","trim","length","searchFields","search","map","field","Like","order","sortBy","sortDirection","defaultOrder","data","total","findAndCount","take","limit","skip","offset","relations","meta","hasNext","find","findOne","findOneBy","findOneById","id","count","countBy","exists","create","save","createAndSave","repository","entity","createBatch","chunkSize","normalizeChunkSize","result","totalRecord","totalAdded","failed","index","chunk","slice","saved","saveBatch","saveBatchOneByOne","update","updatedAt","Date","updateById","updateByIds","ids","removeById","remove","softRemoveById","softRemove","restoreById","restore","Boolean","affected","delete","Math","floor","repo","objects","item","error","push"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as typeorm from 'typeorm';
|
|
2
|
+
import { ObjectLiteral, DataSource, EntityTarget, EntityManager, Repository, FindOptionsRelations, FindOptionsWhere, FindOptionsOrder, FindManyOptions, FindOneOptions, DeepPartial, QueryDeepPartialEntity } from 'typeorm';
|
|
3
|
+
import { ParsedListQuery } from './base.controller.cjs';
|
|
4
|
+
import 'express';
|
|
5
|
+
import './base.entity.cjs';
|
|
6
|
+
|
|
7
|
+
type CreateBatchOptions = {
|
|
8
|
+
chunkSize?: number;
|
|
9
|
+
};
|
|
10
|
+
type CreateBatchResult<T extends ObjectLiteral> = {
|
|
11
|
+
totalRecord: number;
|
|
12
|
+
totalAdded: number;
|
|
13
|
+
failed: {
|
|
14
|
+
data: DeepPartial<T>;
|
|
15
|
+
error: unknown;
|
|
16
|
+
}[];
|
|
17
|
+
};
|
|
18
|
+
type TransactionHandler<TResult> = (manager: EntityManager) => Promise<TResult>;
|
|
19
|
+
type BaseModelListOptions<TEntity extends ObjectLiteral> = {
|
|
20
|
+
parsedListQuery: ParsedListQuery<TEntity>;
|
|
21
|
+
searchFields?: (keyof TEntity)[];
|
|
22
|
+
relations?: FindOptionsRelations<TEntity>;
|
|
23
|
+
where?: FindOptionsWhere<TEntity> | FindOptionsWhere<TEntity>[];
|
|
24
|
+
defaultOrder?: FindOptionsOrder<TEntity>;
|
|
25
|
+
};
|
|
26
|
+
declare abstract class BaseModel<TEntity extends ObjectLiteral & {
|
|
27
|
+
id: string;
|
|
28
|
+
}> {
|
|
29
|
+
protected readonly dataSource: DataSource;
|
|
30
|
+
protected readonly entityTarget: EntityTarget<TEntity>;
|
|
31
|
+
private static readonly defaultChunkSize;
|
|
32
|
+
constructor(dataSource: DataSource, entityTarget: EntityTarget<TEntity>);
|
|
33
|
+
protected getRepository(manager?: EntityManager): Repository<TEntity>;
|
|
34
|
+
transaction<TResult>(handler: TransactionHandler<TResult>): Promise<TResult>;
|
|
35
|
+
list(options: BaseModelListOptions<TEntity>, manager?: EntityManager): Promise<{
|
|
36
|
+
data: TEntity[];
|
|
37
|
+
meta: {
|
|
38
|
+
total: number;
|
|
39
|
+
limit: number;
|
|
40
|
+
offset: number;
|
|
41
|
+
hasNext: boolean;
|
|
42
|
+
};
|
|
43
|
+
}>;
|
|
44
|
+
find(options?: FindManyOptions<TEntity>, manager?: EntityManager): Promise<TEntity[]>;
|
|
45
|
+
findAndCount(options?: FindManyOptions<TEntity>, manager?: EntityManager): Promise<[TEntity[], number]>;
|
|
46
|
+
findOne(options: FindOneOptions<TEntity>, manager?: EntityManager): Promise<TEntity | null>;
|
|
47
|
+
findOneBy(where: FindOptionsWhere<TEntity>, manager?: EntityManager): Promise<TEntity | null>;
|
|
48
|
+
findOneById(id: TEntity['id'], manager?: EntityManager): Promise<TEntity | null>;
|
|
49
|
+
count(options?: FindManyOptions<TEntity>, manager?: EntityManager): Promise<number>;
|
|
50
|
+
countBy(where: FindOptionsWhere<TEntity>, manager?: EntityManager): Promise<number>;
|
|
51
|
+
exists(where: FindOptionsWhere<TEntity>, manager?: EntityManager): Promise<boolean>;
|
|
52
|
+
create(data: DeepPartial<TEntity>, manager?: EntityManager): TEntity;
|
|
53
|
+
save(data: DeepPartial<TEntity>, manager?: EntityManager): Promise<DeepPartial<TEntity> & TEntity>;
|
|
54
|
+
createAndSave(data: DeepPartial<TEntity>, manager?: EntityManager): Promise<TEntity>;
|
|
55
|
+
createBatch(data: DeepPartial<TEntity>[], options?: CreateBatchOptions, manager?: EntityManager): Promise<CreateBatchResult<TEntity>>;
|
|
56
|
+
update(where: FindOptionsWhere<TEntity> | FindOptionsWhere<TEntity>[], data: DeepPartial<TEntity>, manager?: EntityManager): Promise<typeorm.UpdateResult>;
|
|
57
|
+
updateById(id: TEntity['id'], data: DeepPartial<TEntity>, manager?: EntityManager): Promise<typeorm.UpdateResult>;
|
|
58
|
+
updateByIds(ids: string[], data: QueryDeepPartialEntity<TEntity>, manager?: EntityManager): Promise<typeorm.UpdateResult>;
|
|
59
|
+
removeById(id: TEntity['id'], manager?: EntityManager): Promise<TEntity | null>;
|
|
60
|
+
softRemoveById(id: TEntity['id'], manager?: EntityManager): Promise<TEntity | null>;
|
|
61
|
+
restoreById(id: TEntity['id'], manager?: EntityManager): Promise<boolean>;
|
|
62
|
+
delete(where: FindOptionsWhere<TEntity>, manager?: EntityManager): Promise<boolean>;
|
|
63
|
+
private normalizeChunkSize;
|
|
64
|
+
saveBatch(data: DeepPartial<TEntity>[], manager?: EntityManager): Promise<TEntity[]>;
|
|
65
|
+
private saveBatchOneByOne;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { BaseModel, type BaseModelListOptions, type CreateBatchOptions, type CreateBatchResult, type TransactionHandler };
|