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,365 @@
|
|
|
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
|
+
|
|
124
|
+
// src/base-class/base.entity.ts
|
|
125
|
+
import { Column, CreateDateColumn, PrimaryGeneratedColumn } from "typeorm";
|
|
126
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
127
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
128
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
129
|
+
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;
|
|
130
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
131
|
+
}
|
|
132
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
133
|
+
function _ts_metadata(k, v) {
|
|
134
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
135
|
+
}
|
|
136
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
137
|
+
var BaseEntity = class {
|
|
138
|
+
static {
|
|
139
|
+
__name(this, "BaseEntity");
|
|
140
|
+
}
|
|
141
|
+
id;
|
|
142
|
+
createdAt;
|
|
143
|
+
updatedAt;
|
|
144
|
+
isDisabled;
|
|
145
|
+
};
|
|
146
|
+
_ts_decorate([
|
|
147
|
+
PrimaryGeneratedColumn("uuid"),
|
|
148
|
+
_ts_metadata("design:type", String)
|
|
149
|
+
], BaseEntity.prototype, "id", void 0);
|
|
150
|
+
_ts_decorate([
|
|
151
|
+
CreateDateColumn({
|
|
152
|
+
type: "datetime",
|
|
153
|
+
precision: 3,
|
|
154
|
+
default: /* @__PURE__ */ __name(() => "UTC_TIMESTAMP(3)", "default")
|
|
155
|
+
}),
|
|
156
|
+
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
157
|
+
], BaseEntity.prototype, "createdAt", void 0);
|
|
158
|
+
_ts_decorate([
|
|
159
|
+
Column({
|
|
160
|
+
type: "datetime",
|
|
161
|
+
precision: 3,
|
|
162
|
+
default: null,
|
|
163
|
+
nullable: true
|
|
164
|
+
}),
|
|
165
|
+
_ts_metadata("design:type", Object)
|
|
166
|
+
], BaseEntity.prototype, "updatedAt", void 0);
|
|
167
|
+
_ts_decorate([
|
|
168
|
+
Column({
|
|
169
|
+
type: "boolean",
|
|
170
|
+
default: false
|
|
171
|
+
}),
|
|
172
|
+
_ts_metadata("design:type", Boolean)
|
|
173
|
+
], BaseEntity.prototype, "isDisabled", void 0);
|
|
174
|
+
|
|
175
|
+
// src/base-class/base.model.ts
|
|
176
|
+
import { Like } from "typeorm";
|
|
177
|
+
var BaseModel = class _BaseModel {
|
|
178
|
+
static {
|
|
179
|
+
__name(this, "BaseModel");
|
|
180
|
+
}
|
|
181
|
+
dataSource;
|
|
182
|
+
entityTarget;
|
|
183
|
+
static defaultChunkSize = 500;
|
|
184
|
+
constructor(dataSource, entityTarget) {
|
|
185
|
+
this.dataSource = dataSource;
|
|
186
|
+
this.entityTarget = entityTarget;
|
|
187
|
+
}
|
|
188
|
+
getRepository(manager) {
|
|
189
|
+
return (manager ?? this.dataSource.manager).getRepository(this.entityTarget);
|
|
190
|
+
}
|
|
191
|
+
transaction(handler) {
|
|
192
|
+
return this.dataSource.transaction(handler);
|
|
193
|
+
}
|
|
194
|
+
async list(options, manager) {
|
|
195
|
+
let where = options.where;
|
|
196
|
+
if (typeof options.parsedListQuery.query === "string" && options.parsedListQuery.query.trim().length > 0 && options.searchFields && options.searchFields.length > 0) {
|
|
197
|
+
const search = `%${options.parsedListQuery.query.trim()}%`;
|
|
198
|
+
where = options.searchFields.map((field) => ({
|
|
199
|
+
[field]: Like(search)
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
const order = options.parsedListQuery.sortBy ? {
|
|
203
|
+
[options.parsedListQuery.sortBy]: options.parsedListQuery.sortDirection ?? "ASC"
|
|
204
|
+
} : options.defaultOrder;
|
|
205
|
+
const [data, total] = await this.getRepository(manager).findAndCount({
|
|
206
|
+
where,
|
|
207
|
+
take: options.parsedListQuery.limit,
|
|
208
|
+
skip: options.parsedListQuery.offset,
|
|
209
|
+
order,
|
|
210
|
+
relations: options.relations
|
|
211
|
+
});
|
|
212
|
+
return {
|
|
213
|
+
data,
|
|
214
|
+
meta: {
|
|
215
|
+
total,
|
|
216
|
+
limit: options.parsedListQuery.limit,
|
|
217
|
+
offset: options.parsedListQuery.offset,
|
|
218
|
+
hasNext: options.parsedListQuery.offset + data.length < total
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
find(options, manager) {
|
|
223
|
+
return this.getRepository(manager).find(options);
|
|
224
|
+
}
|
|
225
|
+
findAndCount(options, manager) {
|
|
226
|
+
return this.getRepository(manager).findAndCount(options);
|
|
227
|
+
}
|
|
228
|
+
findOne(options, manager) {
|
|
229
|
+
return this.getRepository(manager).findOne(options);
|
|
230
|
+
}
|
|
231
|
+
findOneBy(where, manager) {
|
|
232
|
+
return this.getRepository(manager).findOneBy(where);
|
|
233
|
+
}
|
|
234
|
+
findOneById(id, manager) {
|
|
235
|
+
return this.getRepository(manager).findOne({
|
|
236
|
+
where: {
|
|
237
|
+
id
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
count(options, manager) {
|
|
242
|
+
return this.getRepository(manager).count(options);
|
|
243
|
+
}
|
|
244
|
+
countBy(where, manager) {
|
|
245
|
+
return this.getRepository(manager).countBy(where);
|
|
246
|
+
}
|
|
247
|
+
async exists(where, manager) {
|
|
248
|
+
const total = await this.countBy(where, manager);
|
|
249
|
+
return total > 0;
|
|
250
|
+
}
|
|
251
|
+
create(data, manager) {
|
|
252
|
+
return this.getRepository(manager).create(data);
|
|
253
|
+
}
|
|
254
|
+
save(data, manager) {
|
|
255
|
+
return this.getRepository(manager).save(data);
|
|
256
|
+
}
|
|
257
|
+
async createAndSave(data, manager) {
|
|
258
|
+
const repository = this.getRepository(manager);
|
|
259
|
+
const entity = repository.create(data);
|
|
260
|
+
return repository.save(entity);
|
|
261
|
+
}
|
|
262
|
+
async createBatch(data, options = {}, manager) {
|
|
263
|
+
const chunkSize = this.normalizeChunkSize(options.chunkSize);
|
|
264
|
+
const result = {
|
|
265
|
+
totalRecord: data.length,
|
|
266
|
+
totalAdded: 0,
|
|
267
|
+
failed: []
|
|
268
|
+
};
|
|
269
|
+
for (let index = 0; index < data.length; index += chunkSize) {
|
|
270
|
+
const chunk = data.slice(index, index + chunkSize);
|
|
271
|
+
try {
|
|
272
|
+
const saved = await this.saveBatch(chunk, manager);
|
|
273
|
+
result.totalAdded += saved.length;
|
|
274
|
+
} catch {
|
|
275
|
+
await this.saveBatchOneByOne(chunk, result, manager);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return result;
|
|
279
|
+
}
|
|
280
|
+
async update(where, data, manager) {
|
|
281
|
+
const repository = this.getRepository(manager);
|
|
282
|
+
if (!data.updatedAt) data.updatedAt = /* @__PURE__ */ new Date();
|
|
283
|
+
return repository.update(where, data);
|
|
284
|
+
}
|
|
285
|
+
updateById(id, data, manager) {
|
|
286
|
+
const repository = this.getRepository(manager);
|
|
287
|
+
if (!data.updatedAt) data.updatedAt = /* @__PURE__ */ new Date();
|
|
288
|
+
return repository.update(id, data);
|
|
289
|
+
}
|
|
290
|
+
async updateByIds(ids, data, manager) {
|
|
291
|
+
const repository = this.getRepository(manager);
|
|
292
|
+
if (!data.updatedAt) data.updatedAt = /* @__PURE__ */ new Date();
|
|
293
|
+
return repository.update(ids, {
|
|
294
|
+
...data
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
async removeById(id, manager) {
|
|
298
|
+
const repository = this.getRepository(manager);
|
|
299
|
+
const entity = await this.findOneById(id, manager);
|
|
300
|
+
if (!entity) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
await repository.remove(entity);
|
|
304
|
+
return entity;
|
|
305
|
+
}
|
|
306
|
+
async softRemoveById(id, manager) {
|
|
307
|
+
const repository = this.getRepository(manager);
|
|
308
|
+
const entity = await this.findOneById(id, manager);
|
|
309
|
+
if (!entity) {
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
await repository.softRemove(entity);
|
|
313
|
+
return entity;
|
|
314
|
+
}
|
|
315
|
+
async restoreById(id, manager) {
|
|
316
|
+
const result = await this.getRepository(manager).restore(id);
|
|
317
|
+
return Boolean(result.affected);
|
|
318
|
+
}
|
|
319
|
+
async delete(where, manager) {
|
|
320
|
+
const result = await this.getRepository(manager).delete(where);
|
|
321
|
+
return Boolean(result.affected);
|
|
322
|
+
}
|
|
323
|
+
normalizeChunkSize(chunkSize) {
|
|
324
|
+
if (!chunkSize || chunkSize < 1) return _BaseModel.defaultChunkSize;
|
|
325
|
+
return Math.floor(chunkSize);
|
|
326
|
+
}
|
|
327
|
+
async saveBatch(data, manager) {
|
|
328
|
+
const repo = this.getRepository(manager);
|
|
329
|
+
const objects = repo.create(data);
|
|
330
|
+
return repo.save(objects, {
|
|
331
|
+
chunk: data.length
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
async saveBatchOneByOne(data, result, manager) {
|
|
335
|
+
for (const item of data) {
|
|
336
|
+
try {
|
|
337
|
+
await this.saveBatch([
|
|
338
|
+
item
|
|
339
|
+
], manager);
|
|
340
|
+
result.totalAdded += 1;
|
|
341
|
+
} catch (error) {
|
|
342
|
+
result.failed.push({
|
|
343
|
+
data: item,
|
|
344
|
+
error
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
// src/base-class/base.service.ts
|
|
352
|
+
var BaseService = class {
|
|
353
|
+
static {
|
|
354
|
+
__name(this, "BaseService");
|
|
355
|
+
}
|
|
356
|
+
constructor() {
|
|
357
|
+
}
|
|
358
|
+
};
|
|
359
|
+
export {
|
|
360
|
+
BaseController,
|
|
361
|
+
BaseEntity,
|
|
362
|
+
BaseModel,
|
|
363
|
+
BaseService
|
|
364
|
+
};
|
|
365
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/base-class/base.controller.ts","../../src/base-class/base.entity.ts","../../src/base-class/base.model.ts","../../src/base-class/base.service.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","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","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","export class BaseService {\r\n constructor() { }\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","Column","CreateDateColumn","PrimaryGeneratedColumn","BaseEntity","id","createdAt","updatedAt","isDisabled","type","precision","default","nullable","Like","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","BaseService"]}
|