aws-service-stack 0.17.243 → 0.17.247
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/dist/_examples/controller/supplier/supplier-controller-api.d.ts +1 -1
- package/dist/_examples/controller/supplier/supplier-controller-api.js +3 -3
- package/dist/_examples/controller/supplier/supplier-controller-api.js.map +1 -1
- package/dist/utils/array.util.d.ts +7 -0
- package/dist/utils/array.util.js +18 -0
- package/dist/utils/array.util.js.map +1 -0
- package/dist/utils/date.util.d.ts +5 -0
- package/dist/utils/date.util.js +34 -0
- package/dist/utils/date.util.js.map +1 -0
- package/dist/utils/http/http-request.d.ts +12 -0
- package/dist/utils/http/http-request.js +115 -0
- package/dist/utils/http/http-request.js.map +1 -0
- package/dist/utils/{http.util.d.ts → http/http.util.d.ts} +1 -1
- package/dist/utils/{http.util.js → http/http.util.js} +8 -20
- package/dist/utils/http/http.util.js.map +1 -0
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/reflection.util.js +1 -1
- package/dist/utils/reflection.util.js.map +1 -1
- package/package.json +1 -1
- package/dist/utils/file-handler.d.ts +0 -7
- package/dist/utils/file-handler.js +0 -117
- package/dist/utils/file-handler.js.map +0 -1
- package/dist/utils/http.util.js.map +0 -1
|
@@ -4,6 +4,6 @@ import { ControllerApi, HttpRequest, List } from "../../../index.js";
|
|
|
4
4
|
import { SAccount } from "src/_examples/model-shared/suppler.model";
|
|
5
5
|
export declare class SupplierControllerApi extends ControllerApi<SAccount, SupplierService> {
|
|
6
6
|
constructor();
|
|
7
|
-
protected processCrudRequest(req: HttpRequest): Promise<any>;
|
|
8
7
|
processCrudRequestPost(request: HttpRequest, response: SAccount | List<SAccount>): Promise<SAccount | List<SAccount>>;
|
|
8
|
+
protected processCrudRequest(req: HttpRequest): Promise<any>;
|
|
9
9
|
}
|
|
@@ -59,6 +59,9 @@ let SupplierControllerApi = class SupplierControllerApi extends core_1.Controlle
|
|
|
59
59
|
// processCrudRequestPost(request: HttpRequest, response: SupplierService | List<SupplierService>): Promise<any> {
|
|
60
60
|
// return Promise.resolve(response);
|
|
61
61
|
// }
|
|
62
|
+
processCrudRequestPost(request, response) {
|
|
63
|
+
return Promise.resolve(response);
|
|
64
|
+
}
|
|
62
65
|
async processCrudRequest(req) {
|
|
63
66
|
log.debug(`_example processCrudRequest: ${JSON.stringify(req.event, null, 2)}`);
|
|
64
67
|
if (req.resourcePath === `GET ${supplier_config_1.path}/list-non-level-one`) {
|
|
@@ -79,9 +82,6 @@ let SupplierControllerApi = class SupplierControllerApi extends core_1.Controlle
|
|
|
79
82
|
log.debug(`_example convert to cognito user: ${username}, email: ${email}`);
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
|
-
processCrudRequestPost(request, response) {
|
|
83
|
-
return Promise.resolve(response);
|
|
84
|
-
}
|
|
85
85
|
};
|
|
86
86
|
exports.SupplierControllerApi = SupplierControllerApi;
|
|
87
87
|
exports.SupplierControllerApi = SupplierControllerApi = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supplier-controller-api.js","sourceRoot":"","sources":["../../../../src/_examples/controller/supplier/supplier-controller-api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAC5C,uDAA0D;AAG1D,wDAAsD;AACtD,
|
|
1
|
+
{"version":3,"file":"supplier-controller-api.js","sourceRoot":"","sources":["../../../../src/_examples/controller/supplier/supplier-controller-api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAA4C;AAC5C,uDAA0D;AAG1D,wDAAsD;AACtD,yCAAkE;AAI3D,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,oBAAwC;IACjF;QACE,MAAM,OAAO,GAAoB,gBAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACtE,KAAK,CAAC,OAAO,EAAE,iCAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,mEAAmE;IACnE,kCAAkC;IAClC,KAAK;IACL,EAAE;IACF,mHAAmH;IACnH,uCAAuC;IACvC,KAAK;IAEL,sBAAsB,CACpB,OAAoB,EACpB,QAAmC;QAEnC,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAES,KAAK,CAAC,kBAAkB,CAAC,GAAgB;QACjD,GAAG,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAEhF,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,sBAAI,qBAAqB,EAAE,CAAC;YAC1D,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,sBAAI,WAAW,EAAE,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,iCAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC;gBACH,8CAA8C;gBAC9C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,sBAAI,qBAAqB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACzE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YACrC,GAAG,CAAC,KAAK,CAAC,qCAAqC,QAAQ,YAAY,KAAK,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAA;AA1CY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,gBAAO,EAAC,uBAAuB,CAAC;;GACpB,qBAAqB,CA0CjC","sourcesContent":["import Container, { Service } from \"typedi\";\nimport { CONFIG_SUPPLIER, path } from \"./supplier-config\";\n\nimport { SupplierService } from \"../../service/supplier/supplier-service-crud.interface\";\nimport \"../../service/supplier/supplier-service-crud\";\nimport { ControllerApi, HttpRequest, List } from \"@chinggis/core\";\nimport { SAccount } from \"src/_examples/model-shared/suppler.model\";\n\n@Service(\"SupplierControllerApi\")\nexport class SupplierControllerApi extends ControllerApi<SAccount, SupplierService> {\n constructor() {\n const service: SupplierService = Container.get(\"SupplierCrudService\");\n super(service, CONFIG_SUPPLIER.toObject());\n }\n\n // processCrudRequestPre(req: HttpRequest): Promise<HttpRequest> {\n // return Promise.resolve(req);\n // }\n //\n // processCrudRequestPost(request: HttpRequest, response: SupplierService | List<SupplierService>): Promise<any> {\n // return Promise.resolve(response);\n // }\n\n processCrudRequestPost(\n request: HttpRequest,\n response: SAccount | List<SAccount>,\n ): Promise<SAccount | List<SAccount>> {\n return Promise.resolve(response);\n }\n\n protected async processCrudRequest(req: HttpRequest): Promise<any> {\n log.debug(`_example processCrudRequest: ${JSON.stringify(req.event, null, 2)}`);\n\n if (req.resourcePath === `GET ${path}/list-non-level-one`) {\n return await this.service.ListNonLevelOne(req.filter);\n }\n if (req.resourcePath === `GET ${path}/find-all`) {\n this.service.setConfig(CONFIG_SUPPLIER.toObject());\n try {\n // return await this.service.findAll();\n return await this.service.search(req.filter);\n } catch (err) {\n log.error(JSON.stringify(err, null, 2));\n }\n }\n\n if (req.resourcePath === `PUT ${path}/convert-to-cognito` && req.isAdmin) {\n const { username, email } = req.body;\n log.debug(`_example convert to cognito user: ${username}, email: ${email}`);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chunkArray = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Splits an array into chunks of a specified size.
|
|
6
|
+
* @param array The array to split.
|
|
7
|
+
* @param chunkSize The size of each chunk.
|
|
8
|
+
* @returns An array of chunks.
|
|
9
|
+
*/
|
|
10
|
+
const chunkArray = (array, chunkSize) => {
|
|
11
|
+
const result = [];
|
|
12
|
+
for (let i = 0; i < array.length; i += chunkSize) {
|
|
13
|
+
result.push(array.slice(i, i + chunkSize));
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
exports.chunkArray = chunkArray;
|
|
18
|
+
//# sourceMappingURL=array.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.util.js","sourceRoot":"","sources":["../../src/utils/array.util.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,UAAU,GAAG,CAAI,KAAU,EAAE,SAAiB,EAAS,EAAE;IACpE,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB","sourcesContent":["/**\n * Splits an array into chunks of a specified size.\n * @param array The array to split.\n * @param chunkSize The size of each chunk.\n * @returns An array of chunks.\n */\nexport const chunkArray = <T>(array: T[], chunkSize: number): T[][] => {\n const result: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n return result;\n};\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Dayjs } from "dayjs";
|
|
2
|
+
export declare function isValidDate(dateStr: string): boolean;
|
|
3
|
+
export declare function isSameYearMonth(date1: string | Date | Dayjs, date2: string | Date | Dayjs): boolean;
|
|
4
|
+
export declare function isCurrentMonth(date: string | Date | Dayjs): boolean;
|
|
5
|
+
export declare function isFutureMonth(date: string): boolean;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isValidDate = isValidDate;
|
|
7
|
+
exports.isSameYearMonth = isSameYearMonth;
|
|
8
|
+
exports.isCurrentMonth = isCurrentMonth;
|
|
9
|
+
exports.isFutureMonth = isFutureMonth;
|
|
10
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
11
|
+
function isValidDate(dateStr) {
|
|
12
|
+
const d = new Date(dateStr);
|
|
13
|
+
return !Number.isNaN(d.getTime());
|
|
14
|
+
}
|
|
15
|
+
function isSameYearMonth(date1, date2) {
|
|
16
|
+
const d1 = (0, dayjs_1.default)(date1);
|
|
17
|
+
const d2 = (0, dayjs_1.default)(date2);
|
|
18
|
+
return d1.isSame(d2, "month") && d1.isSame(d2, "year");
|
|
19
|
+
}
|
|
20
|
+
function isCurrentMonth(date) {
|
|
21
|
+
return isSameYearMonth(date, new Date());
|
|
22
|
+
}
|
|
23
|
+
function isFutureMonth(date) {
|
|
24
|
+
const inputDate = new Date(date);
|
|
25
|
+
const today = new Date();
|
|
26
|
+
// Extract year and month
|
|
27
|
+
const inputYear = inputDate.getFullYear();
|
|
28
|
+
const inputMonth = inputDate.getMonth(); // 0-based (0 = Jan)
|
|
29
|
+
const currentYear = today.getFullYear();
|
|
30
|
+
const currentMonth = today.getMonth();
|
|
31
|
+
// Compare year-month
|
|
32
|
+
return inputYear > currentYear || (inputYear === currentYear && inputMonth > currentMonth);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=date.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.util.js","sourceRoot":"","sources":["../../src/utils/date.util.ts"],"names":[],"mappings":";;;;;AACA,kCAGC;AAED,0CAIC;AAED,wCAEC;AAED,sCAYC;AA5BD,kDAAqC;AACrC,SAAgB,WAAW,CAAC,OAAe;IACzC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,eAAe,CAAC,KAA4B,EAAE,KAA4B;IACxF,MAAM,EAAE,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,cAAc,CAAC,IAA2B;IACxD,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IAEzB,yBAAyB;IACzB,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,oBAAoB;IAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEtC,qBAAqB;IACrB,OAAO,SAAS,GAAG,WAAW,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,UAAU,GAAG,YAAY,CAAC,CAAC;AAC7F,CAAC","sourcesContent":["import dayjs, { Dayjs } from \"dayjs\";\nexport function isValidDate(dateStr: string): boolean {\n const d = new Date(dateStr);\n return !Number.isNaN(d.getTime());\n}\n\nexport function isSameYearMonth(date1: string | Date | Dayjs, date2: string | Date | Dayjs): boolean {\n const d1 = dayjs(date1);\n const d2 = dayjs(date2);\n return d1.isSame(d2, \"month\") && d1.isSame(d2, \"year\");\n}\n\nexport function isCurrentMonth(date: string | Date | Dayjs): boolean {\n return isSameYearMonth(date, new Date());\n}\n\nexport function isFutureMonth(date: string): boolean {\n const inputDate = new Date(date);\n const today = new Date();\n\n // Extract year and month\n const inputYear = inputDate.getFullYear();\n const inputMonth = inputDate.getMonth(); // 0-based (0 = Jan)\n const currentYear = today.getFullYear();\n const currentMonth = today.getMonth();\n\n // Compare year-month\n return inputYear > currentYear || (inputYear === currentYear && inputMonth > currentMonth);\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AxiosResponse } from "axios";
|
|
2
|
+
import { HttpMethod } from "src/model/http.model";
|
|
3
|
+
export interface HttpResponse<T = any> extends AxiosResponse<T> {
|
|
4
|
+
}
|
|
5
|
+
/** Generic HTTP request with automatic chunking for POST/PUT/PATCH if data is iterable*/
|
|
6
|
+
export declare function httpRequest<T = any>(method: HttpMethod, url: string, data?: any, auth?: string, headersCustom?: Record<string, string>): Promise<HttpResponse<T> | HttpResponse<T>[]>;
|
|
7
|
+
/** Convenience functions for common HTTP methods */
|
|
8
|
+
export declare const httpPost: <T = any>(url: string, data?: any, auth?: string, headers?: Record<string, string>) => Promise<HttpResponse<T> | HttpResponse<T>[]>;
|
|
9
|
+
export declare const httpPut: <T = any>(url: string, data?: any, auth?: string, headers?: Record<string, string>) => Promise<HttpResponse<T> | HttpResponse<T>[]>;
|
|
10
|
+
export declare const httpPatch: <T = any>(url: string, data?: any, auth?: string, headers?: Record<string, string>) => Promise<HttpResponse<T> | HttpResponse<T>[]>;
|
|
11
|
+
export declare const httpGet: <T = any>(url: string, auth?: string, headers?: Record<string, string>) => Promise<HttpResponse<T> | HttpResponse<T>[]>;
|
|
12
|
+
export declare const httpDelete: <T = any>(url: string, auth?: string, headers?: Record<string, string>) => Promise<HttpResponse<T> | HttpResponse<T>[]>;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.httpDelete = exports.httpGet = exports.httpPatch = exports.httpPut = exports.httpPost = void 0;
|
|
37
|
+
exports.httpRequest = httpRequest;
|
|
38
|
+
const axios_1 = __importStar(require("axios"));
|
|
39
|
+
const http_model_1 = require("src/model/http.model");
|
|
40
|
+
/** Build Axios headers, merge additional headers if provided */
|
|
41
|
+
function buildHeaders(auth, headers, contentType = "application/json") {
|
|
42
|
+
const resultHeader = new axios_1.AxiosHeaders();
|
|
43
|
+
resultHeader.set("Content-Type", contentType);
|
|
44
|
+
if (auth)
|
|
45
|
+
resultHeader.set("Authorization", auth);
|
|
46
|
+
if (headers) {
|
|
47
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
48
|
+
resultHeader.set(key, value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return resultHeader;
|
|
52
|
+
}
|
|
53
|
+
/** Split an array into smaller chunks */
|
|
54
|
+
function chunkArray(arr, size) {
|
|
55
|
+
const result = [];
|
|
56
|
+
for (let i = 0; i < arr.length; i += size)
|
|
57
|
+
result.push(arr.slice(i, i + size));
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
/** Check if data is iterable (array or similar) */
|
|
61
|
+
function isIterableData(data) {
|
|
62
|
+
return Array.isArray(data);
|
|
63
|
+
}
|
|
64
|
+
/** Generic HTTP request with automatic chunking for POST/PUT/PATCH if data is iterable*/
|
|
65
|
+
async function httpRequest(method, url, data, auth, headersCustom) {
|
|
66
|
+
const headers = buildHeaders(auth, headersCustom);
|
|
67
|
+
const config = {
|
|
68
|
+
method,
|
|
69
|
+
url,
|
|
70
|
+
headers,
|
|
71
|
+
data,
|
|
72
|
+
maxBodyLength: Infinity,
|
|
73
|
+
maxContentLength: Infinity,
|
|
74
|
+
};
|
|
75
|
+
// GET / DELETE → send normally
|
|
76
|
+
if (method === http_model_1.HttpMethod.GET || method === http_model_1.HttpMethod.DELETE) {
|
|
77
|
+
return axios_1.default.request(config);
|
|
78
|
+
}
|
|
79
|
+
// POST / PUT / PATCH → try sending normally first
|
|
80
|
+
try {
|
|
81
|
+
return await axios_1.default.request(config);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
const error = err;
|
|
85
|
+
const status = error.response?.status;
|
|
86
|
+
const msg = error.message.toLowerCase();
|
|
87
|
+
const isTooLarge = status === 413 || msg.includes("payload too large") || msg.includes("request entity too large");
|
|
88
|
+
// If not too large or data is not iterable → rethrow error
|
|
89
|
+
if (!isTooLarge || !isIterableData(data))
|
|
90
|
+
throw err;
|
|
91
|
+
console.warn(`[${method}] Payload too large, automatically sending in chunks`);
|
|
92
|
+
const chunkSize = 500; // internal, not set by a user
|
|
93
|
+
const chunks = chunkArray(data, chunkSize);
|
|
94
|
+
const responses = [];
|
|
95
|
+
for (const [i, chunk] of chunks.entries()) {
|
|
96
|
+
console.debug(`[${method}] Sending chunk ${i + 1}/${chunks.length}`);
|
|
97
|
+
const chunkConfig = { ...config, data: chunk };
|
|
98
|
+
const res = await axios_1.default.request(chunkConfig);
|
|
99
|
+
responses.push(res);
|
|
100
|
+
}
|
|
101
|
+
return responses;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** Convenience functions for common HTTP methods */
|
|
105
|
+
const httpPost = (url, data, auth, headers) => httpRequest(http_model_1.HttpMethod.POST, url, data, auth, headers);
|
|
106
|
+
exports.httpPost = httpPost;
|
|
107
|
+
const httpPut = (url, data, auth, headers) => httpRequest(http_model_1.HttpMethod.PUT, url, data, auth, headers);
|
|
108
|
+
exports.httpPut = httpPut;
|
|
109
|
+
const httpPatch = (url, data, auth, headers) => httpRequest(http_model_1.HttpMethod.PATCH, url, data, auth, headers);
|
|
110
|
+
exports.httpPatch = httpPatch;
|
|
111
|
+
const httpGet = (url, auth, headers) => httpRequest(http_model_1.HttpMethod.GET, url, undefined, auth, headers);
|
|
112
|
+
exports.httpGet = httpGet;
|
|
113
|
+
const httpDelete = (url, auth, headers) => httpRequest(http_model_1.HttpMethod.DELETE, url, undefined, auth, headers);
|
|
114
|
+
exports.httpDelete = httpDelete;
|
|
115
|
+
//# sourceMappingURL=http-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-request.js","sourceRoot":"","sources":["../../../src/utils/http/http-request.ts"],"names":[],"mappings":"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","sourcesContent":["import axios, { AxiosError, AxiosHeaders, AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport { HttpMethod } from \"src/model/http.model\";\n\nexport interface HttpResponse<T = any> extends AxiosResponse<T> {}\n\n/** Build Axios headers, merge additional headers if provided */\nfunction buildHeaders(auth?: string, headers?: Record<string, string>, contentType = \"application/json\"): AxiosHeaders {\n const resultHeader = new AxiosHeaders();\n resultHeader.set(\"Content-Type\", contentType);\n if (auth) resultHeader.set(\"Authorization\", auth);\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n resultHeader.set(key, value);\n }\n }\n\n return resultHeader;\n}\n\n/** Split an array into smaller chunks */\nfunction chunkArray<T>(arr: T[], size: number): T[][] {\n const result: T[][] = [];\n for (let i = 0; i < arr.length; i += size) result.push(arr.slice(i, i + size));\n return result;\n}\n\n/** Check if data is iterable (array or similar) */\nfunction isIterableData(data: any): data is any[] {\n return Array.isArray(data);\n}\n\n/** Generic HTTP request with automatic chunking for POST/PUT/PATCH if data is iterable*/\nexport async function httpRequest<T = any>(\n method: HttpMethod,\n url: string,\n data?: any,\n auth?: string,\n headersCustom?: Record<string, string>,\n): Promise<HttpResponse<T> | HttpResponse<T>[]> {\n const headers = buildHeaders(auth, headersCustom);\n const config: AxiosRequestConfig = {\n method,\n url,\n headers,\n data,\n maxBodyLength: Infinity,\n maxContentLength: Infinity,\n };\n\n // GET / DELETE → send normally\n if (method === HttpMethod.GET || method === HttpMethod.DELETE) {\n return axios.request<T>(config);\n }\n\n // POST / PUT / PATCH → try sending normally first\n try {\n return await axios.request<T>(config);\n } catch (err: any) {\n const error = err as AxiosError;\n const status = error.response?.status;\n const msg = error.message.toLowerCase();\n\n const isTooLarge = status === 413 || msg.includes(\"payload too large\") || msg.includes(\"request entity too large\");\n\n // If not too large or data is not iterable → rethrow error\n if (!isTooLarge || !isIterableData(data)) throw err;\n\n console.warn(`[${method}] Payload too large, automatically sending in chunks`);\n\n const chunkSize = 500; // internal, not set by a user\n const chunks = chunkArray(data, chunkSize);\n const responses: HttpResponse<T>[] = [];\n\n for (const [i, chunk] of chunks.entries()) {\n console.debug(`[${method}] Sending chunk ${i + 1}/${chunks.length}`);\n const chunkConfig: AxiosRequestConfig = { ...config, data: chunk };\n const res = await axios.request<T>(chunkConfig);\n responses.push(res);\n }\n\n return responses;\n }\n}\n\n/** Convenience functions for common HTTP methods */\nexport const httpPost = <T = any>(url: string, data?: any, auth?: string, headers?: Record<string, string>) =>\n httpRequest<T>(HttpMethod.POST, url, data, auth, headers);\n\nexport const httpPut = <T = any>(url: string, data?: any, auth?: string, headers?: Record<string, string>) =>\n httpRequest<T>(HttpMethod.PUT, url, data, auth, headers);\n\nexport const httpPatch = <T = any>(url: string, data?: any, auth?: string, headers?: Record<string, string>) =>\n httpRequest<T>(HttpMethod.PATCH, url, data, auth, headers);\n\nexport const httpGet = <T = any>(url: string, auth?: string, headers?: Record<string, string>) =>\n httpRequest<T>(HttpMethod.GET, url, undefined, auth, headers);\n\nexport const httpDelete = <T = any>(url: string, auth?: string, headers?: Record<string, string>) =>\n httpRequest<T>(HttpMethod.DELETE, url, undefined, auth, headers);\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CognitoUser, EndpointPolicy, Filter, HttpMethod, RequestType, ResponseFields } from "
|
|
1
|
+
import { CognitoUser, EndpointPolicy, Filter, HttpMethod, RequestType, ResponseFields } from "../../index";
|
|
2
2
|
import { APIGatewayProxyEvent } from "aws-lambda";
|
|
3
3
|
export type APIResponse = {
|
|
4
4
|
statusCode: number;
|
|
@@ -4,8 +4,8 @@ exports.parseHttpRequest = exports.createApiResponse = exports.DEFAULT_API_RESPO
|
|
|
4
4
|
exports.parseFilter = parseFilter;
|
|
5
5
|
exports.toRecord = toRecord;
|
|
6
6
|
exports.findMatchedPolicy = findMatchedPolicy;
|
|
7
|
-
const index_1 = require("
|
|
8
|
-
const string_util_1 = require("
|
|
7
|
+
const index_1 = require("../../index");
|
|
8
|
+
const string_util_1 = require("../string.util");
|
|
9
9
|
exports.DEFAULT_API_RESPONSE_OPTIONS = {
|
|
10
10
|
origin: "*",
|
|
11
11
|
contentType: "application/json",
|
|
@@ -69,22 +69,10 @@ const parseHttpRequest = (event, adminGroupNames) => {
|
|
|
69
69
|
headers: { ...event?.headers },
|
|
70
70
|
};
|
|
71
71
|
if (event?.body)
|
|
72
|
-
parsedParams.body = typeof event.body === "string" ?
|
|
72
|
+
parsedParams.body = typeof event.body === "string" ? JSON.parse(event.body) : event.body;
|
|
73
73
|
return parsedParams;
|
|
74
74
|
};
|
|
75
75
|
exports.parseHttpRequest = parseHttpRequest;
|
|
76
|
-
const parseBody = (body) => {
|
|
77
|
-
try {
|
|
78
|
-
return JSON.parse(body);
|
|
79
|
-
}
|
|
80
|
-
catch (_) {
|
|
81
|
-
return body;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
function isValidDate(value) {
|
|
85
|
-
const d = new Date(value);
|
|
86
|
-
return !isNaN(d.getTime());
|
|
87
|
-
}
|
|
88
76
|
function parseFilter(params, searchBy) {
|
|
89
77
|
const result = {};
|
|
90
78
|
if (searchBy && searchBy.length > 0) {
|
|
@@ -128,25 +116,25 @@ function parseFilter(params, searchBy) {
|
|
|
128
116
|
// Check if it's a valid date first (before number parsing)
|
|
129
117
|
if (/^\d{4}-\d{2}-\d{2}/.test(stringValue) || /^\d{4}\.\d{2}\.\d{2}/.test(stringValue)) {
|
|
130
118
|
const date = new Date(stringValue);
|
|
131
|
-
if (!isNaN(date.getTime()))
|
|
119
|
+
if (!Number.isNaN(date.getTime()))
|
|
132
120
|
return date;
|
|
133
121
|
}
|
|
134
122
|
// Check for another date format that might be used in range filters
|
|
135
123
|
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(stringValue)) {
|
|
136
124
|
const date = new Date(stringValue);
|
|
137
|
-
if (!isNaN(date.getTime()))
|
|
125
|
+
if (!Number.isNaN(date.getTime()))
|
|
138
126
|
return date;
|
|
139
127
|
}
|
|
140
128
|
// Check if it's a valid number (including decimals)
|
|
141
|
-
const numberValue = parseFloat(stringValue);
|
|
142
|
-
if (!isNaN(numberValue)) {
|
|
129
|
+
const numberValue = Number.parseFloat(stringValue);
|
|
130
|
+
if (!Number.isNaN(numberValue)) {
|
|
143
131
|
// Handle zero values (both "0" and "0.0" should become 0)
|
|
144
132
|
if (numberValue === 0) {
|
|
145
133
|
return 0;
|
|
146
134
|
}
|
|
147
135
|
// Handle integer values
|
|
148
136
|
if (Number.isInteger(numberValue)) {
|
|
149
|
-
return parseInt(stringValue, 10);
|
|
137
|
+
return Number.parseInt(stringValue, 10);
|
|
150
138
|
}
|
|
151
139
|
return numberValue;
|
|
152
140
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.util.js","sourceRoot":"","sources":["../../../src/utils/http/http.util.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CognitoUser,\n EndpointPolicy,\n Filter,\n HttpMethod,\n RequestType,\n ResponseFields,\n SortOrder,\n toCaseInsensitive,\n} from \"../../index\";\nimport { APIGatewayProxyEvent } from \"aws-lambda\";\nimport { getFirst, normalizeLower, toArray, trimSpecialChar } from \"../string.util\";\n\nexport type APIResponse = {\n statusCode: number;\n headers?: Record<string, string>;\n body: string;\n};\n\nexport type APIResponseOptions = {\n origin?: string;\n contentType: string;\n fields?: ResponseFields;\n};\n\nexport const DEFAULT_API_RESPONSE_OPTIONS: APIResponseOptions = {\n origin: \"*\",\n contentType: \"application/json\",\n};\n\nexport const createApiResponse = (statusCode: number, body: any, options?: APIResponseOptions): APIResponse => {\n const { origin, contentType } = options || DEFAULT_API_RESPONSE_OPTIONS;\n\n return {\n statusCode: statusCode,\n body: JSON.stringify(body),\n headers: {\n \"Access-Control-Allow-Origin\": origin || DEFAULT_API_RESPONSE_OPTIONS.origin,\n \"Content-Type\": contentType || DEFAULT_API_RESPONSE_OPTIONS.contentType,\n },\n };\n};\n\nexport interface HttpRequest<B = any, Q = any, P = any> {\n event: any;\n methode: HttpMethod;\n resourcePath: string;\n body?: B;\n queryStringParameters?: Q;\n filter?: Filter;\n customQueryParameters?: Record<string, string>;\n multiValueQueryStringParameters?: Q;\n pathParameters?: P;\n identity?: CognitoUser;\n headers?: Record<string, string>;\n profileId: string;\n isAdmin: boolean;\n userId: string;\n username: string;\n requestType: RequestType;\n groups?: string[];\n entityId: string;\n}\n\nexport const parseHttpRequest = <T>(event: APIGatewayProxyEvent, adminGroupNames: any): HttpRequest => {\n const identity = event?.requestContext?.authorizer?.claims;\n\n // request user data\n const groupsCognito = toArray(identity?.[\"cognito:groups\"]);\n\n const username = identity?.[\"cognito:username\"] || \"\";\n const userId = identity?.sub || \"\";\n let profileId = identity?.[\"custom:profileId\"] || username;\n\n const adminGroups = new Set(normalizeLower(toArray(adminGroupNames)));\n const groups = normalizeLower(toArray(groupsCognito));\n const isAdmin = groups.some((g) => adminGroups.has(g));\n let requestType: RequestType = RequestType.GUEST;\n\n if (isAdmin) {\n requestType = RequestType.ADMIN;\n profileId = undefined;\n } else if (profileId || userId) requestType = RequestType.USER;\n\n const entityId = event?.pathParameters?.id || \"\";\n const resourcePath = event.httpMethod + \" \" + event?.requestContext?.resourcePath;\n\n const parsedParams: HttpRequest = {\n event: event,\n methode: event.httpMethod as HttpMethod,\n queryStringParameters: event?.queryStringParameters || undefined,\n\n filter: event?.queryStringParameters\n ? parseFilter(\n event?.queryStringParameters as Record<string, any>,\n event.multiValueQueryStringParameters[\"searchBy\"],\n )\n : {},\n\n multiValueQueryStringParameters: event?.multiValueQueryStringParameters || undefined,\n pathParameters: event?.pathParameters || undefined,\n body: undefined,\n identity: identity\n ? {\n ...identity,\n Authorization: event?.headers?.Authorization,\n identityId:\n event && \"x-cognito-identity-id\" in event.headers ? event.headers[\"x-cognito-identity-id\"] : undefined,\n }\n : undefined,\n username,\n userId,\n profileId,\n isAdmin,\n requestType,\n resourcePath,\n entityId,\n groups,\n headers: { ...event?.headers },\n };\n\n if (event?.body) parsedParams.body = typeof event.body === \"string\" ? JSON.parse(event.body) : event.body;\n\n return parsedParams;\n};\n\nexport function parseFilter(params: Record<string, any> | string, searchBy?: string[]): Filter {\n const result: Filter = {};\n\n if (searchBy && searchBy.length > 0) {\n result.searchBy = searchBy;\n }\n\n // If the params is a string (URL query string), parse it first\n let parsedParams: Record<string, any>;\n if (typeof params === \"string\") {\n parsedParams = toRecord(params);\n } else {\n parsedParams = params;\n }\n\n parsedParams.searchKeyword = getFirst(parsedParams.searchKeyword);\n\n const parseParam = (key: string, parseFunc: (value: string) => any) => {\n const value = parsedParams[key];\n if (value !== undefined && value !== null && String(value).trim() !== \"\") {\n result[key] = parseFunc(value);\n }\n };\n\n parseParam(\"page\", (value) => parseInt(value, 10));\n parseParam(\"size\", (value) => parseInt(value, 10));\n parseParam(\"sortBy\", (value) => value);\n parseParam(\"sort\", (value) => value as SortOrder);\n // parseParam(\"searchBy\", (value) => searchBy);\n parseParam(\"searchKeyword\", (value) => toCaseInsensitive(value));\n parseParam(\"lastKey\", (value) => value);\n parseParam(\"indexName\", (value) => value);\n parseParam(\"indexValue\", (value) => value);\n\n const parseRangeValue = (value: any) => {\n // If value is already a number, return it\n if (typeof value === \"number\") {\n return value;\n }\n\n // If the value is already a Date, return it\n if (value instanceof Date) {\n return value;\n }\n\n // Convert to string for parsing\n const stringValue = String(value);\n\n // Check if it's a valid date first (before number parsing)\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(stringValue) || /^\\d{4}\\.\\d{2}\\.\\d{2}/.test(stringValue)) {\n const date = new Date(stringValue);\n if (!Number.isNaN(date.getTime())) return date;\n }\n\n // Check for another date format that might be used in range filters\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(stringValue)) {\n const date = new Date(stringValue);\n if (!Number.isNaN(date.getTime())) return date;\n }\n\n // Check if it's a valid number (including decimals)\n const numberValue = Number.parseFloat(stringValue);\n if (!Number.isNaN(numberValue)) {\n // Handle zero values (both \"0\" and \"0.0\" should become 0)\n if (numberValue === 0) {\n return 0;\n }\n // Handle integer values\n if (Number.isInteger(numberValue)) {\n return Number.parseInt(stringValue, 10);\n }\n return numberValue;\n }\n\n return value;\n };\n\n // Initialize rangeFilters array\n result.rangeFilters = [];\n\n // Auto-detect range filter patterns with min_ and max_ prefixes\n for (const key in parsedParams) {\n const value = parsedParams[key];\n if (value !== undefined && value !== null && String(value).trim() !== \"\") {\n // Check for min_ and max_ patterns\n const minMatch = key.match(/^min_(.+)$/i);\n const maxMatch = key.match(/^max_(.+)$/i);\n\n if (minMatch) {\n const fieldName = minMatch[1]; // Remove .toLowerCase() to preserve case\n // Find existing range filter or create new one\n let rangeFilter = result.rangeFilters!.find((rf) => rf.fieldName === fieldName);\n if (!rangeFilter) {\n rangeFilter = { fieldName };\n result.rangeFilters!.push(rangeFilter);\n }\n rangeFilter.minValue = parseRangeValue(value);\n } else if (maxMatch) {\n const fieldName = maxMatch[1]; // Remove .toLowerCase() to preserve case\n // Find existing range filter or create new one\n let rangeFilter = result.rangeFilters!.find((rf) => rf.fieldName === fieldName);\n if (!rangeFilter) {\n rangeFilter = { fieldName };\n result.rangeFilters!.push(rangeFilter);\n }\n rangeFilter.maxValue = parseRangeValue(value);\n } else if (!(key in result)) {\n result[key] = value;\n }\n }\n }\n\n // Clean up empty rangeFilters array\n if (result.rangeFilters!.length === 0) {\n delete result.rangeFilters;\n }\n\n return result;\n}\n\nfunction smartParse(value: string): any {\n if (value.includes(\"*\")) return value;\n\n // Boolean\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n\n // Integer\n if (/^-?\\d+$/.test(value)) return parseInt(value, 10);\n\n // Float / Double\n if (/^-?\\d*\\.\\d+$/.test(value)) return parseFloat(value);\n\n // ISO Date (YYYY-MM-DD) or Dot Date (YYYY.MM.DD)\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n const date = new Date(value);\n if (!isNaN(date.getTime())) return date;\n }\n if (/^\\d{4}\\.\\d{2}\\.\\d{2}/.test(value)) {\n // Convert to ISO format for Date constructor\n const isoValue = value.replace(/\\./g, \"-\");\n const date = new Date(isoValue);\n if (!isNaN(date.getTime())) return date;\n }\n\n if (typeof value === \"string\" && value.includes(\",\")) {\n const valueList = value.split(\",\");\n for (let i = 1; i < valueList.length; i++) {\n valueList[i] = smartParse(valueList[i]);\n }\n return valueList;\n }\n\n // Default: string\n return value;\n}\n\nexport function toRecord(queryString: string): Record<string, any> {\n const result: Record<string, any> = {};\n const pairs = queryString.split(\"&\");\n\n for (const pair of pairs) {\n const [key, value] = pair.split(\"=\");\n if (key && value !== undefined) {\n result[key] = smartParse(decodeURIComponent(value));\n }\n }\n\n return result;\n}\n\nexport function findMatchedPolicy(methode: HttpMethod, path: string, policies: EndpointPolicy[]): EndpointPolicy {\n if (!methode || !path || !policies.length) {\n return null;\n }\n\n return policies.find((policy) => policy.method === methode && trimSpecialChar(policy.path) === trimSpecialChar(path));\n}\n"]}
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
|
@@ -15,7 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./error.util"), exports);
|
|
18
|
-
__exportStar(require("./http.util"), exports);
|
|
18
|
+
__exportStar(require("./http/http.util"), exports);
|
|
19
|
+
__exportStar(require("./http/http-request"), exports);
|
|
19
20
|
__exportStar(require("./reflection.util"), exports);
|
|
20
21
|
__exportStar(require("./validation.util"), exports);
|
|
21
22
|
__exportStar(require("./auth.util"), exports);
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAiC;AACjC,sDAAoC;AACpC,oDAAkC;AAClC,oDAAkC;AAClC,8CAA4B;AAC5B,6CAA2B;AAC3B,qDAAmC;AACnC,mDAAiC;AACjC,qDAAmC","sourcesContent":["export * from \"./error.util\";\nexport * from \"./http/http.util\";\nexport * from \"./http/http-request\";\nexport * from \"./reflection.util\";\nexport * from \"./validation.util\";\nexport * from \"./auth.util\";\nexport * from \"./env.util\";\nexport * from \"./opensearch.utils\";\nexport * from \"./dynamodb.utils\";\nexport * from \"../function/logger\";\n"]}
|
|
@@ -11,7 +11,7 @@ exports.excludeKeys = excludeKeys;
|
|
|
11
11
|
exports.removeFields = removeFields;
|
|
12
12
|
exports.hasContent = hasContent;
|
|
13
13
|
exports.removeEmptyFields = removeEmptyFields;
|
|
14
|
-
const http_util_1 = require("./http.util");
|
|
14
|
+
const http_util_1 = require("./http/http.util");
|
|
15
15
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
16
16
|
const parseObject = (body) => {
|
|
17
17
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflection.util.js","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseEntity } from \"../model/base.model\";\nimport { DynamoIndexMap } from \"../model/dynamodb.model\";\nimport { Filter } from \"../model/filter.model\";\nimport { toRecord } from \"./http.util\";\nimport dayjs from \"dayjs\";\n\nexport const parseObject = <T>(body: any): T => {\n try {\n if (typeof body === \"string\") {\n const parsed = JSON.parse(body);\n return parsed as T;\n }\n\n if (typeof body === \"object\" && body !== null) {\n return body as T;\n }\n\n throw new Error(\"Invalid body format\");\n } catch (error) {\n throw new Error(`Failed to parse object: ${error.message}`);\n }\n};\n\nexport const hasField = (obj: object, fieldName: string): boolean => {\n return Object.prototype.hasOwnProperty.call(obj, fieldName);\n};\n\nexport const chunkArray = <T>(array: T[], size: number): T[][] => {\n const result: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n result.push(array.slice(i, i + size));\n }\n return result;\n};\n\nexport function isMethodeHasKeyword(methodName: string, keywords: string[]): boolean {\n if (!methodName) return false;\n return keywords.some((keyword) => methodName.toLowerCase().includes(keyword));\n}\n\nexport function handleRangeFilters(filter: Filter): Filter {\n // Use regex to match keys like ageMin, ageMax, tempFrom, etc.\n const rangeFilters: any[] = [];\n const rangeFieldMap: Record<string, { minValue?: any; maxValue?: any }> = {};\n // Suffix mapping\n const minSuffixes = [\"Min\", \"From\", \"Start\"];\n const maxSuffixes = [\"Max\", \"To\", \"End\"];\n const suffixToType: Record<string, \"minValue\" | \"maxValue\"> = {};\n minSuffixes.forEach((s) => (suffixToType[s] = \"minValue\"));\n maxSuffixes.forEach((s) => (suffixToType[s] = \"maxValue\"));\n // Build regex: (field)(Min|Max|From|To|Start|End)\n const suffixPattern = [...minSuffixes, ...maxSuffixes].join(\"|\");\n const regex = new RegExp(`^(.*)(${suffixPattern})$`);\n\n for (const key of Object.keys(filter)) {\n const match = key.match(regex);\n if (match) {\n const fieldName = match[1];\n const suffix = match[2];\n const type = suffixToType[suffix];\n if (!rangeFieldMap[fieldName]) rangeFieldMap[fieldName] = {};\n rangeFieldMap[fieldName][type] = filter[key];\n }\n }\n\n // Remove the original min/max keys from filter and build rangeFilters\n for (const fieldName in rangeFieldMap) {\n const { minValue, maxValue } = rangeFieldMap[fieldName];\n if (minValue !== undefined || maxValue !== undefined) {\n rangeFilters.push({ fieldName, minValue, maxValue });\n for (const suffix of [...minSuffixes, ...maxSuffixes]) {\n delete filter[`${fieldName}${suffix}`];\n }\n }\n }\n\n if (rangeFilters.length > 0) {\n filter.rangeFilters = rangeFilters;\n }\n\n return filter;\n}\n\nexport function parseIndexFilter(filter: Filter | string, indexMap?: DynamoIndexMap): Filter {\n if (!filter) return undefined;\n if (typeof filter === \"string\") {\n filter = toRecord(filter);\n }\n let result: Filter = { ...filter };\n\n result = handleRangeFilters(result);\n\n if (indexMap === undefined || !indexMap || (filter?.indexName && filter?.indexValue)) return result;\n\n let bestMatch: {\n indexName: string;\n rFields: string[];\n fieldSeparator?: string;\n } | null = null;\n\n for (const [indexName, { rFields, fieldSeparator: fieldSeparator }] of indexMap.entries()) {\n const allFieldsPresent = rFields.every((field) => filter.hasOwnProperty(field));\n if (!allFieldsPresent) continue;\n\n if (!bestMatch || rFields.length > bestMatch.rFields.length) {\n bestMatch = { indexName, rFields, fieldSeparator: fieldSeparator };\n }\n }\n\n if (bestMatch) {\n const indexValues = bestMatch.rFields.map((field) => filter[field]);\n result.indexName = bestMatch.indexName;\n result.indexValue = indexValues.join(bestMatch.fieldSeparator ?? \"\");\n\n // rFields-ийг result-аас хасна\n for (const field of bestMatch.rFields) {\n delete result[field];\n }\n }\n\n return result;\n}\n\nexport function excludeKeys(obj: Record<string, any>, keysToExclude: string[]) {\n if (!obj) return obj;\n const result: Record<string, any> = {};\n for (const key in obj) {\n if (!keysToExclude.includes(key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/*\n * remove all fields except the ones in the fieldName array\n * */\nexport const fieldsInclude = (object: any, fieldName: string[]): any => {\n if (typeof object !== \"object\" || object === null) {\n throw new Error(\"Input must be an object\");\n }\n\n // Create a new object with only the specified fields\n return fieldName.reduce(\n (result, field) => {\n if (field in object) {\n result[field] = object[field];\n }\n return result;\n },\n {} as Record<string, any>,\n );\n};\n\nexport const copyField = (object: any, fromFieldName: string, toFieldName: string): any => {\n if (typeof object !== \"object\" || object === null) throw new Error(\"Input must be an object\");\n object[toFieldName] = object[fromFieldName];\n};\n\n/**\n * Removes or keeps specific fields from a list of objects.\n *\n * @param dataList - Array of objects to process\n * @param includes - Optional list of fields to include (whitelist)\n * @param excludes - Optional list of fields to exclude (blacklist)\n * @returns New array of objects with filtered fields\n */\nexport function removeFields<T extends object>(dataList: T[], includes?: string[], excludes?: string[]): Partial<T>[] {\n if (!includes && !excludes) return dataList;\n\n return dataList.map((item) => {\n // If includes are provided, only keep those fields\n if (includes && includes.length > 0) {\n const included: Partial<T> = {};\n for (const key of includes) {\n if (key in item) {\n included[key] = item[key];\n }\n }\n return included;\n }\n\n // If excludes are provided, remove those fields\n if (excludes && excludes.length > 0) {\n const cloned: Partial<T> = { ...item };\n for (const key of excludes) {\n delete cloned[key];\n }\n return cloned;\n }\n\n // If neither includes nor excludes: return the item as is\n return item;\n });\n}\n\nexport const addDates = (entity: Partial<BaseEntity>): Partial<BaseEntity> => {\n if (!entity.createdAt) entity.createdAt = dayjs().toISOString();\n entity.updatedAt = dayjs().toISOString();\n return entity;\n};\n\nexport const addDatesAndId = (entity: Partial<BaseEntity>): Partial<BaseEntity> => {\n if (!entity.id) entity.id = crypto.randomUUID();\n return addDates(entity);\n};\n\n/**\n * Recursively checks if an object contains any meaningful content.\n * - Returns false for null, undefined, empty objects, or empty arrays.\n * - Returns true for primitive values (string, number, boolean, etc.).\n * - Recursively checks arrays and nested objects to determine if at least one value is meaningful.\n *\n * This ensures that objects like { bool: {} } are considered empty,\n * and only objects with actual values (e.g., { bool: { must: [...] } }) are considered meaningful.\n */\nexport function hasContent(obj: any): boolean {\n if (obj == null) return false; // null/undefined\n if (typeof obj !== \"object\") return true; // primitive values are meaningful\n if (Array.isArray(obj)) return obj.some(hasContent);\n\n const values = Object.values(obj);\n if (values.length === 0) return false; // empty object\n\n // recursively check if any value is meaningful\n return values.some(hasContent);\n}\n\n/**\n * Recursively removes all \"empty\" fields from an object.\n *\n * Definition of empty:\n * - null or undefined\n * - empty objects {}\n * - empty arrays []\n *\n * Primitives (number, string, boolean) and non-empty objects/arrays are preserved.\n *\n * Usage:\n * ```ts\n * const input = { a: 1, b: null, c: {}, d: [], e: { f: null, g: { h: [] }, i: 2 }, j: [null, {}, 3] };\n * const cleaned = removeEmptyFields(input);\n * // cleaned => { a: 1, e: { i: 2 }, j: [3] }\n * ```\n *\n * This is especially useful when preparing Elasticsearch/OpenSearch queries:\n * - Removes empty objects like `{ bool: {} }`\n * - Removes empty arrays in filters\n * - Ensures the `body` only contains meaningful fields before sending\n */\nexport function removeEmptyFields(obj: any): any {\n if (obj == null) return undefined; // null or undefined -> remove\n if (typeof obj !== \"object\") return obj; // primitives remain\n\n if (Array.isArray(obj)) {\n const arr = obj\n .map(removeEmptyFields) // recursive\n .filter((v) => v !== undefined); // remove empty elements\n return arr.length > 0 ? arr : undefined;\n }\n\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n const cleaned = removeEmptyFields(value);\n if (cleaned !== undefined) {\n result[key] = cleaned;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"reflection.util.js","sourceRoot":"","sources":["../../src/utils/reflection.util.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseEntity } from \"../model/base.model\";\nimport { DynamoIndexMap } from \"../model/dynamodb.model\";\nimport { Filter } from \"../model/filter.model\";\nimport { toRecord } from \"./http/http.util\";\nimport dayjs from \"dayjs\";\n\nexport const parseObject = <T>(body: any): T => {\n try {\n if (typeof body === \"string\") {\n const parsed = JSON.parse(body);\n return parsed as T;\n }\n\n if (typeof body === \"object\" && body !== null) {\n return body as T;\n }\n\n throw new Error(\"Invalid body format\");\n } catch (error) {\n throw new Error(`Failed to parse object: ${error.message}`);\n }\n};\n\nexport const hasField = (obj: object, fieldName: string): boolean => {\n return Object.prototype.hasOwnProperty.call(obj, fieldName);\n};\n\nexport const chunkArray = <T>(array: T[], size: number): T[][] => {\n const result: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n result.push(array.slice(i, i + size));\n }\n return result;\n};\n\nexport function isMethodeHasKeyword(methodName: string, keywords: string[]): boolean {\n if (!methodName) return false;\n return keywords.some((keyword) => methodName.toLowerCase().includes(keyword));\n}\n\nexport function handleRangeFilters(filter: Filter): Filter {\n // Use regex to match keys like ageMin, ageMax, tempFrom, etc.\n const rangeFilters: any[] = [];\n const rangeFieldMap: Record<string, { minValue?: any; maxValue?: any }> = {};\n // Suffix mapping\n const minSuffixes = [\"Min\", \"From\", \"Start\"];\n const maxSuffixes = [\"Max\", \"To\", \"End\"];\n const suffixToType: Record<string, \"minValue\" | \"maxValue\"> = {};\n minSuffixes.forEach((s) => (suffixToType[s] = \"minValue\"));\n maxSuffixes.forEach((s) => (suffixToType[s] = \"maxValue\"));\n // Build regex: (field)(Min|Max|From|To|Start|End)\n const suffixPattern = [...minSuffixes, ...maxSuffixes].join(\"|\");\n const regex = new RegExp(`^(.*)(${suffixPattern})$`);\n\n for (const key of Object.keys(filter)) {\n const match = key.match(regex);\n if (match) {\n const fieldName = match[1];\n const suffix = match[2];\n const type = suffixToType[suffix];\n if (!rangeFieldMap[fieldName]) rangeFieldMap[fieldName] = {};\n rangeFieldMap[fieldName][type] = filter[key];\n }\n }\n\n // Remove the original min/max keys from filter and build rangeFilters\n for (const fieldName in rangeFieldMap) {\n const { minValue, maxValue } = rangeFieldMap[fieldName];\n if (minValue !== undefined || maxValue !== undefined) {\n rangeFilters.push({ fieldName, minValue, maxValue });\n for (const suffix of [...minSuffixes, ...maxSuffixes]) {\n delete filter[`${fieldName}${suffix}`];\n }\n }\n }\n\n if (rangeFilters.length > 0) {\n filter.rangeFilters = rangeFilters;\n }\n\n return filter;\n}\n\nexport function parseIndexFilter(filter: Filter | string, indexMap?: DynamoIndexMap): Filter {\n if (!filter) return undefined;\n if (typeof filter === \"string\") {\n filter = toRecord(filter);\n }\n let result: Filter = { ...filter };\n\n result = handleRangeFilters(result);\n\n if (indexMap === undefined || !indexMap || (filter?.indexName && filter?.indexValue)) return result;\n\n let bestMatch: {\n indexName: string;\n rFields: string[];\n fieldSeparator?: string;\n } | null = null;\n\n for (const [indexName, { rFields, fieldSeparator: fieldSeparator }] of indexMap.entries()) {\n const allFieldsPresent = rFields.every((field) => filter.hasOwnProperty(field));\n if (!allFieldsPresent) continue;\n\n if (!bestMatch || rFields.length > bestMatch.rFields.length) {\n bestMatch = { indexName, rFields, fieldSeparator: fieldSeparator };\n }\n }\n\n if (bestMatch) {\n const indexValues = bestMatch.rFields.map((field) => filter[field]);\n result.indexName = bestMatch.indexName;\n result.indexValue = indexValues.join(bestMatch.fieldSeparator ?? \"\");\n\n // rFields-ийг result-аас хасна\n for (const field of bestMatch.rFields) {\n delete result[field];\n }\n }\n\n return result;\n}\n\nexport function excludeKeys(obj: Record<string, any>, keysToExclude: string[]) {\n if (!obj) return obj;\n const result: Record<string, any> = {};\n for (const key in obj) {\n if (!keysToExclude.includes(key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/*\n * remove all fields except the ones in the fieldName array\n * */\nexport const fieldsInclude = (object: any, fieldName: string[]): any => {\n if (typeof object !== \"object\" || object === null) {\n throw new Error(\"Input must be an object\");\n }\n\n // Create a new object with only the specified fields\n return fieldName.reduce(\n (result, field) => {\n if (field in object) {\n result[field] = object[field];\n }\n return result;\n },\n {} as Record<string, any>,\n );\n};\n\nexport const copyField = (object: any, fromFieldName: string, toFieldName: string): any => {\n if (typeof object !== \"object\" || object === null) throw new Error(\"Input must be an object\");\n object[toFieldName] = object[fromFieldName];\n};\n\n/**\n * Removes or keeps specific fields from a list of objects.\n *\n * @param dataList - Array of objects to process\n * @param includes - Optional list of fields to include (whitelist)\n * @param excludes - Optional list of fields to exclude (blacklist)\n * @returns New array of objects with filtered fields\n */\nexport function removeFields<T extends object>(dataList: T[], includes?: string[], excludes?: string[]): Partial<T>[] {\n if (!includes && !excludes) return dataList;\n\n return dataList.map((item) => {\n // If includes are provided, only keep those fields\n if (includes && includes.length > 0) {\n const included: Partial<T> = {};\n for (const key of includes) {\n if (key in item) {\n included[key] = item[key];\n }\n }\n return included;\n }\n\n // If excludes are provided, remove those fields\n if (excludes && excludes.length > 0) {\n const cloned: Partial<T> = { ...item };\n for (const key of excludes) {\n delete cloned[key];\n }\n return cloned;\n }\n\n // If neither includes nor excludes: return the item as is\n return item;\n });\n}\n\nexport const addDates = (entity: Partial<BaseEntity>): Partial<BaseEntity> => {\n if (!entity.createdAt) entity.createdAt = dayjs().toISOString();\n entity.updatedAt = dayjs().toISOString();\n return entity;\n};\n\nexport const addDatesAndId = (entity: Partial<BaseEntity>): Partial<BaseEntity> => {\n if (!entity.id) entity.id = crypto.randomUUID();\n return addDates(entity);\n};\n\n/**\n * Recursively checks if an object contains any meaningful content.\n * - Returns false for null, undefined, empty objects, or empty arrays.\n * - Returns true for primitive values (string, number, boolean, etc.).\n * - Recursively checks arrays and nested objects to determine if at least one value is meaningful.\n *\n * This ensures that objects like { bool: {} } are considered empty,\n * and only objects with actual values (e.g., { bool: { must: [...] } }) are considered meaningful.\n */\nexport function hasContent(obj: any): boolean {\n if (obj == null) return false; // null/undefined\n if (typeof obj !== \"object\") return true; // primitive values are meaningful\n if (Array.isArray(obj)) return obj.some(hasContent);\n\n const values = Object.values(obj);\n if (values.length === 0) return false; // empty object\n\n // recursively check if any value is meaningful\n return values.some(hasContent);\n}\n\n/**\n * Recursively removes all \"empty\" fields from an object.\n *\n * Definition of empty:\n * - null or undefined\n * - empty objects {}\n * - empty arrays []\n *\n * Primitives (number, string, boolean) and non-empty objects/arrays are preserved.\n *\n * Usage:\n * ```ts\n * const input = { a: 1, b: null, c: {}, d: [], e: { f: null, g: { h: [] }, i: 2 }, j: [null, {}, 3] };\n * const cleaned = removeEmptyFields(input);\n * // cleaned => { a: 1, e: { i: 2 }, j: [3] }\n * ```\n *\n * This is especially useful when preparing Elasticsearch/OpenSearch queries:\n * - Removes empty objects like `{ bool: {} }`\n * - Removes empty arrays in filters\n * - Ensures the `body` only contains meaningful fields before sending\n */\nexport function removeEmptyFields(obj: any): any {\n if (obj == null) return undefined; // null or undefined -> remove\n if (typeof obj !== \"object\") return obj; // primitives remain\n\n if (Array.isArray(obj)) {\n const arr = obj\n .map(removeEmptyFields) // recursive\n .filter((v) => v !== undefined); // remove empty elements\n return arr.length > 0 ? arr : undefined;\n }\n\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n const cleaned = removeEmptyFields(value);\n if (cleaned !== undefined) {\n result[key] = cleaned;\n }\n }\n\n return Object.keys(result).length > 0 ? result : undefined;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare const readFileLinesAsList: (filePath: string) => Promise<string[]>;
|
|
2
|
-
export declare const writeFileLines: (filePath: string, lines: string[]) => void;
|
|
3
|
-
export declare const createTextFile: <T>(filePath: string, content: Iterable<T>) => void;
|
|
4
|
-
export declare const appendNewLineToFile: (filePath: string, items: string[]) => void;
|
|
5
|
-
export declare const createCsvFile: <T>(filePath: string, content: Iterable<T>) => void;
|
|
6
|
-
export declare function readJSONFile(fileName: string): object;
|
|
7
|
-
export declare function readExcel(filePath: string): Array<Array<string>>;
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.createCsvFile = exports.appendNewLineToFile = exports.createTextFile = exports.writeFileLines = exports.readFileLinesAsList = void 0;
|
|
37
|
-
exports.readJSONFile = readJSONFile;
|
|
38
|
-
exports.readExcel = readExcel;
|
|
39
|
-
const fs = __importStar(require("fs"));
|
|
40
|
-
const path = __importStar(require("path"));
|
|
41
|
-
const readline = __importStar(require("readline"));
|
|
42
|
-
// Function to read a file and return its lines as a list
|
|
43
|
-
const readFileLinesAsList = async (filePath) => {
|
|
44
|
-
const lines = []; // List to store lines
|
|
45
|
-
// Create a Readline interface
|
|
46
|
-
const fileStream = fs.createReadStream(filePath);
|
|
47
|
-
const rl = readline.createInterface({
|
|
48
|
-
input: fileStream,
|
|
49
|
-
crlfDelay: Infinity, // Handles different line-ending styles
|
|
50
|
-
});
|
|
51
|
-
// Process each line
|
|
52
|
-
for await (const line of rl) {
|
|
53
|
-
lines.push(line); // Add the current line to the list
|
|
54
|
-
}
|
|
55
|
-
return lines;
|
|
56
|
-
};
|
|
57
|
-
exports.readFileLinesAsList = readFileLinesAsList;
|
|
58
|
-
// Function to write lines to a file
|
|
59
|
-
const writeFileLines = (filePath, lines) => {
|
|
60
|
-
fs.writeFile(filePath, lines.join("\n"), "utf8", (err) => {
|
|
61
|
-
if (err) {
|
|
62
|
-
console.error("Error writing to the file:", err);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
console.log(`Successfully written: ${lines.length} lines to ${filePath}`);
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
};
|
|
69
|
-
exports.writeFileLines = writeFileLines;
|
|
70
|
-
// Function to create a text file
|
|
71
|
-
const createTextFile = (filePath, content) => {
|
|
72
|
-
try {
|
|
73
|
-
// Resolve the absolute path
|
|
74
|
-
const absolutePath = path.resolve(filePath);
|
|
75
|
-
// Convert Set to Array if necessary, then join elements with a newline
|
|
76
|
-
const data = Array.isArray(content) ? content.join("\n") : Array.from(content).join("\n");
|
|
77
|
-
// Write data to the resolved absolute path
|
|
78
|
-
fs.writeFileSync(absolutePath, data, "utf-8");
|
|
79
|
-
console.log(`Text file successfully created at: ${absolutePath}`);
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
console.error(`Error writing to file at ${filePath}:`, error);
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
exports.createTextFile = createTextFile;
|
|
86
|
-
// Function to append a new line to a file
|
|
87
|
-
const appendNewLineToFile = (filePath, items) => {
|
|
88
|
-
fs.appendFile(filePath, `${items.toString()}\n`, "utf8", (err) => {
|
|
89
|
-
if (err) {
|
|
90
|
-
console.error("Error appending to the file:", err);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
console.log(`Successfully appended: ${items.length} items to ${filePath}`);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
};
|
|
97
|
-
exports.appendNewLineToFile = appendNewLineToFile;
|
|
98
|
-
const createCsvFile = (filePath, content) => {
|
|
99
|
-
const data = Array.from(content); // Convert Iterable to Array
|
|
100
|
-
if (data.length === 0) {
|
|
101
|
-
console.log("No data to write");
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const csvContent = data.join("\n");
|
|
105
|
-
fs.writeFileSync(filePath, csvContent, "utf8");
|
|
106
|
-
console.log(`CSV file has been created at ${filePath}`);
|
|
107
|
-
};
|
|
108
|
-
exports.createCsvFile = createCsvFile;
|
|
109
|
-
function readJSONFile(fileName) {
|
|
110
|
-
const filePath = path.join(__dirname, fileName); // Kombiniere __dirname mit Dateinamen
|
|
111
|
-
const fileContent = fs.readFileSync(filePath, "utf-8"); // Lese Datei synchron
|
|
112
|
-
return JSON.parse(fileContent); // Parse JSON-Inhalt
|
|
113
|
-
}
|
|
114
|
-
function readExcel(filePath) {
|
|
115
|
-
return [];
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=file-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-handler.js","sourceRoot":"","sources":["../../src/utils/file-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as readline from \"readline\";\n\n// Function to read a file and return its lines as a list\nexport const readFileLinesAsList = async (filePath: string): Promise<string[]> => {\n const lines: string[] = []; // List to store lines\n\n // Create a Readline interface\n const fileStream = fs.createReadStream(filePath);\n const rl = readline.createInterface({\n input: fileStream,\n crlfDelay: Infinity, // Handles different line-ending styles\n });\n\n // Process each line\n for await (const line of rl) {\n lines.push(line); // Add the current line to the list\n }\n\n return lines;\n};\n\n// Function to write lines to a file\nexport const writeFileLines = (filePath: string, lines: string[]): void => {\n fs.writeFile(filePath, lines.join(\"\\n\"), \"utf8\", (err) => {\n if (err) {\n console.error(\"Error writing to the file:\", err);\n } else {\n console.log(`Successfully written: ${lines.length} lines to ${filePath}`);\n }\n });\n};\n\n// Function to create a text file\nexport const createTextFile = <T>(filePath: string, content: Iterable<T>): void => {\n try {\n // Resolve the absolute path\n const absolutePath = path.resolve(filePath);\n\n // Convert Set to Array if necessary, then join elements with a newline\n const data = Array.isArray(content) ? content.join(\"\\n\") : Array.from(content).join(\"\\n\");\n\n // Write data to the resolved absolute path\n fs.writeFileSync(absolutePath, data, \"utf-8\");\n\n console.log(`Text file successfully created at: ${absolutePath}`);\n } catch (error) {\n console.error(`Error writing to file at ${filePath}:`, error);\n }\n};\n\n// Function to append a new line to a file\nexport const appendNewLineToFile = (filePath: string, items: string[]): void => {\n fs.appendFile(filePath, `${items.toString()}\\n`, \"utf8\", (err) => {\n if (err) {\n console.error(\"Error appending to the file:\", err);\n } else {\n console.log(`Successfully appended: ${items.length} items to ${filePath}`);\n }\n });\n};\n\nexport const createCsvFile = <T>(filePath: string, content: Iterable<T>): void => {\n const data = Array.from(content); // Convert Iterable to Array\n if (data.length === 0) {\n console.log(\"No data to write\");\n return;\n }\n\n const csvContent = data.join(\"\\n\");\n\n fs.writeFileSync(filePath, csvContent, \"utf8\");\n console.log(`CSV file has been created at ${filePath}`);\n};\n\nexport function readJSONFile(fileName: string): object {\n const filePath = path.join(__dirname, fileName); // Kombiniere __dirname mit Dateinamen\n const fileContent = fs.readFileSync(filePath, \"utf-8\"); // Lese Datei synchron\n return JSON.parse(fileContent); // Parse JSON-Inhalt\n}\n\nexport function readExcel(filePath: string): Array<Array<string>> {\n return [];\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.util.js","sourceRoot":"","sources":["../../src/utils/http.util.ts"],"names":[],"mappings":";;;AA2IA,kCAsHC;AAuCD,4BAYC;AAED,8CAMC;AA5TD,oCASkB;AAElB,+CAAmF;AActE,QAAA,4BAA4B,GAAuB;IAC9D,MAAM,EAAE,GAAG;IACX,WAAW,EAAE,kBAAkB;CAChC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAE,IAAS,EAAE,OAA4B,EAAe,EAAE;IAC5G,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,IAAI,oCAA4B,CAAC;IAExE,OAAO;QACL,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE;YACP,6BAA6B,EAAE,MAAM,IAAI,oCAA4B,CAAC,MAAM;YAC5E,cAAc,EAAE,WAAW,IAAI,oCAA4B,CAAC,WAAW;SACxE;KACF,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,iBAAiB,qBAW5B;AAuBK,MAAM,gBAAgB,GAAG,CAAI,KAA2B,EAAE,eAAoB,EAAe,EAAE;IACpG,MAAM,QAAQ,GAAG,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC;IAE3D,oBAAoB;IACpB,MAAM,aAAa,GAAG,IAAA,qBAAO,EAAC,QAAQ,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IACnC,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC,kBAAkB,CAAC,IAAI,QAAQ,CAAC;IAE3D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAA,4BAAc,EAAC,IAAA,qBAAO,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,IAAA,4BAAc,EAAC,IAAA,qBAAO,EAAC,aAAa,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,WAAW,GAAgB,mBAAW,CAAC,KAAK,CAAC;IAEjD,IAAI,OAAO,EAAE,CAAC;QACZ,WAAW,GAAG,mBAAW,CAAC,KAAK,CAAC;QAChC,SAAS,GAAG,SAAS,CAAC;IACxB,CAAC;SAAM,IAAI,SAAS,IAAI,MAAM;QAAE,WAAW,GAAG,mBAAW,CAAC,IAAI,CAAC;IAE/D,MAAM,QAAQ,GAAG,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC;IACjD,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,GAAG,GAAG,GAAG,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC;IAElF,MAAM,YAAY,GAAgB;QAChC,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK,CAAC,UAAwB;QACvC,qBAAqB,EAAE,KAAK,EAAE,qBAAqB,IAAI,SAAS;QAEhE,MAAM,EAAE,KAAK,EAAE,qBAAqB;YAClC,CAAC,CAAC,WAAW,CACT,KAAK,EAAE,qBAA4C,EACnD,KAAK,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAClD;YACH,CAAC,CAAC,EAAE;QAEN,+BAA+B,EAAE,KAAK,EAAE,+BAA+B,IAAI,SAAS;QACpF,cAAc,EAAE,KAAK,EAAE,cAAc,IAAI,SAAS;QAClD,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,QAAQ;YAChB,CAAC,CAAC;gBACE,GAAG,QAAQ;gBACX,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa;gBAC5C,UAAU,EACR,KAAK,IAAI,uBAAuB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,SAAS;aACzG;YACH,CAAC,CAAC,SAAS;QACb,QAAQ;QACR,MAAM;QACN,SAAS;QACT,OAAO;QACP,WAAW;QACX,YAAY;QACZ,QAAQ;QACR,MAAM;QACN,OAAO,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;KAC/B,CAAC;IAEF,IAAI,KAAK,EAAE,IAAI;QAAE,YAAY,CAAC,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAEzG,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AA5DW,QAAA,gBAAgB,oBA4D3B;AAEF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,WAAW,CAAC,MAAoC,EAAE,QAAmB;IACnF,MAAM,MAAM,GAAW,EAAE,CAAC;IAE1B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,+DAA+D;IAC/D,IAAI,YAAiC,CAAC;IACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,aAAa,GAAG,IAAA,sBAAQ,EAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,SAAiC,EAAE,EAAE;QACpE,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACvC,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAkB,CAAC,CAAC;IAClD,gDAAgD;IAChD,UAAU,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,yBAAiB,EAAC,KAAK,CAAC,CAAC,CAAC;IACjE,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACxC,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC1C,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,eAAe,GAAG,CAAC,KAAU,EAAE,EAAE;QACrC,0CAA0C;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gCAAgC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAElC,2DAA2D;QAC3D,IAAI,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC1C,CAAC;QAED,oEAAoE;QACpE,IAAI,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC1C,CAAC;QAED,oDAAoD;QACpD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACxB,0DAA0D;YAC1D,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,CAAC;YACX,CAAC;YACD,wBAAwB;YACxB,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,OAAO,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,gCAAgC;IAChC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;IAEzB,gEAAgE;IAChE,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzE,mCAAmC;YACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAE1C,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;gBACxE,+CAA+C;gBAC/C,IAAI,WAAW,GAAG,MAAM,CAAC,YAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;gBAChF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,WAAW,GAAG,EAAE,SAAS,EAAE,CAAC;oBAC5B,MAAM,CAAC,YAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzC,CAAC;gBACD,WAAW,CAAC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,QAAQ,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;gBACxE,+CAA+C;gBAC/C,IAAI,WAAW,GAAG,MAAM,CAAC,YAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;gBAChF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,WAAW,GAAG,EAAE,SAAS,EAAE,CAAC;oBAC5B,MAAM,CAAC,YAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzC,CAAC;gBACD,WAAW,CAAC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,MAAM,CAAC,YAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtC,UAAU;IACV,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAEpC,UAAU;IACV,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEtD,iBAAiB;IACjB,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAEzD,iDAAiD;IACjD,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1C,CAAC;IACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kBAAkB;IAClB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,QAAQ,CAAC,WAAmB;IAC1C,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,GAAG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAmB,EAAE,IAAY,EAAE,QAA0B;IAC7F,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,IAAA,6BAAe,EAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAA,6BAAe,EAAC,IAAI,CAAC,CAAC,CAAC;AACxH,CAAC","sourcesContent":["import {\n CognitoUser,\n EndpointPolicy,\n Filter,\n HttpMethod,\n RequestType,\n ResponseFields,\n SortOrder,\n toCaseInsensitive,\n} from \"../index\";\nimport { APIGatewayProxyEvent } from \"aws-lambda\";\nimport { getFirst, normalizeLower, toArray, trimSpecialChar } from \"./string.util\";\n\nexport type APIResponse = {\n statusCode: number;\n headers?: Record<string, string>;\n body: string;\n};\n\nexport type APIResponseOptions = {\n origin?: string;\n contentType: string;\n fields?: ResponseFields;\n};\n\nexport const DEFAULT_API_RESPONSE_OPTIONS: APIResponseOptions = {\n origin: \"*\",\n contentType: \"application/json\",\n};\n\nexport const createApiResponse = (statusCode: number, body: any, options?: APIResponseOptions): APIResponse => {\n const { origin, contentType } = options || DEFAULT_API_RESPONSE_OPTIONS;\n\n return {\n statusCode: statusCode,\n body: JSON.stringify(body),\n headers: {\n \"Access-Control-Allow-Origin\": origin || DEFAULT_API_RESPONSE_OPTIONS.origin,\n \"Content-Type\": contentType || DEFAULT_API_RESPONSE_OPTIONS.contentType,\n },\n };\n};\n\nexport interface HttpRequest<B = any, Q = any, P = any> {\n event: any;\n methode: HttpMethod;\n resourcePath: string;\n body?: B;\n queryStringParameters?: Q;\n filter?: Filter;\n customQueryParameters?: Record<string, string>;\n multiValueQueryStringParameters?: Q;\n pathParameters?: P;\n identity?: CognitoUser;\n headers?: Record<string, string>;\n profileId: string;\n isAdmin: boolean;\n userId: string;\n username: string;\n requestType: RequestType;\n groups?: string[];\n entityId: string;\n}\n\nexport const parseHttpRequest = <T>(event: APIGatewayProxyEvent, adminGroupNames: any): HttpRequest => {\n const identity = event?.requestContext?.authorizer?.claims;\n\n // request user data\n const groupsCognito = toArray(identity?.[\"cognito:groups\"]);\n\n const username = identity?.[\"cognito:username\"] || \"\";\n const userId = identity?.sub || \"\";\n let profileId = identity?.[\"custom:profileId\"] || username;\n\n const adminGroups = new Set(normalizeLower(toArray(adminGroupNames)));\n const groups = normalizeLower(toArray(groupsCognito));\n const isAdmin = groups.some((g) => adminGroups.has(g));\n let requestType: RequestType = RequestType.GUEST;\n\n if (isAdmin) {\n requestType = RequestType.ADMIN;\n profileId = undefined;\n } else if (profileId || userId) requestType = RequestType.USER;\n\n const entityId = event?.pathParameters?.id || \"\";\n const resourcePath = event.httpMethod + \" \" + event?.requestContext?.resourcePath;\n\n const parsedParams: HttpRequest = {\n event: event,\n methode: event.httpMethod as HttpMethod,\n queryStringParameters: event?.queryStringParameters || undefined,\n\n filter: event?.queryStringParameters\n ? parseFilter(\n event?.queryStringParameters as Record<string, any>,\n event.multiValueQueryStringParameters[\"searchBy\"],\n )\n : {},\n\n multiValueQueryStringParameters: event?.multiValueQueryStringParameters || undefined,\n pathParameters: event?.pathParameters || undefined,\n body: undefined,\n identity: identity\n ? {\n ...identity,\n Authorization: event?.headers?.Authorization,\n identityId:\n event && \"x-cognito-identity-id\" in event.headers ? event.headers[\"x-cognito-identity-id\"] : undefined,\n }\n : undefined,\n username,\n userId,\n profileId,\n isAdmin,\n requestType,\n resourcePath,\n entityId,\n groups,\n headers: { ...event?.headers },\n };\n\n if (event?.body) parsedParams.body = typeof event.body === \"string\" ? parseBody(event.body) : event.body;\n\n return parsedParams;\n};\n\nconst parseBody = (body: string) => {\n try {\n return JSON.parse(body);\n } catch (_) {\n return body;\n }\n};\n\nfunction isValidDate(value: string): boolean {\n const d = new Date(value);\n return !isNaN(d.getTime());\n}\n\nexport function parseFilter(params: Record<string, any> | string, searchBy?: string[]): Filter {\n const result: Filter = {};\n\n if (searchBy && searchBy.length > 0) {\n result.searchBy = searchBy;\n }\n\n // If the params is a string (URL query string), parse it first\n let parsedParams: Record<string, any>;\n if (typeof params === \"string\") {\n parsedParams = toRecord(params);\n } else {\n parsedParams = params;\n }\n\n parsedParams.searchKeyword = getFirst(parsedParams.searchKeyword);\n\n const parseParam = (key: string, parseFunc: (value: string) => any) => {\n const value = parsedParams[key];\n if (value !== undefined && value !== null && String(value).trim() !== \"\") {\n result[key] = parseFunc(value);\n }\n };\n\n parseParam(\"page\", (value) => parseInt(value, 10));\n parseParam(\"size\", (value) => parseInt(value, 10));\n parseParam(\"sortBy\", (value) => value);\n parseParam(\"sort\", (value) => value as SortOrder);\n // parseParam(\"searchBy\", (value) => searchBy);\n parseParam(\"searchKeyword\", (value) => toCaseInsensitive(value));\n parseParam(\"lastKey\", (value) => value);\n parseParam(\"indexName\", (value) => value);\n parseParam(\"indexValue\", (value) => value);\n\n const parseRangeValue = (value: any) => {\n // If value is already a number, return it\n if (typeof value === \"number\") {\n return value;\n }\n\n // If the value is already a Date, return it\n if (value instanceof Date) {\n return value;\n }\n\n // Convert to string for parsing\n const stringValue = String(value);\n\n // Check if it's a valid date first (before number parsing)\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(stringValue) || /^\\d{4}\\.\\d{2}\\.\\d{2}/.test(stringValue)) {\n const date = new Date(stringValue);\n if (!isNaN(date.getTime())) return date;\n }\n\n // Check for another date format that might be used in range filters\n if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(stringValue)) {\n const date = new Date(stringValue);\n if (!isNaN(date.getTime())) return date;\n }\n\n // Check if it's a valid number (including decimals)\n const numberValue = parseFloat(stringValue);\n if (!isNaN(numberValue)) {\n // Handle zero values (both \"0\" and \"0.0\" should become 0)\n if (numberValue === 0) {\n return 0;\n }\n // Handle integer values\n if (Number.isInteger(numberValue)) {\n return parseInt(stringValue, 10);\n }\n return numberValue;\n }\n\n return value;\n };\n\n // Initialize rangeFilters array\n result.rangeFilters = [];\n\n // Auto-detect range filter patterns with min_ and max_ prefixes\n for (const key in parsedParams) {\n const value = parsedParams[key];\n if (value !== undefined && value !== null && String(value).trim() !== \"\") {\n // Check for min_ and max_ patterns\n const minMatch = key.match(/^min_(.+)$/i);\n const maxMatch = key.match(/^max_(.+)$/i);\n\n if (minMatch) {\n const fieldName = minMatch[1]; // Remove .toLowerCase() to preserve case\n // Find existing range filter or create new one\n let rangeFilter = result.rangeFilters!.find((rf) => rf.fieldName === fieldName);\n if (!rangeFilter) {\n rangeFilter = { fieldName };\n result.rangeFilters!.push(rangeFilter);\n }\n rangeFilter.minValue = parseRangeValue(value);\n } else if (maxMatch) {\n const fieldName = maxMatch[1]; // Remove .toLowerCase() to preserve case\n // Find existing range filter or create new one\n let rangeFilter = result.rangeFilters!.find((rf) => rf.fieldName === fieldName);\n if (!rangeFilter) {\n rangeFilter = { fieldName };\n result.rangeFilters!.push(rangeFilter);\n }\n rangeFilter.maxValue = parseRangeValue(value);\n } else if (!(key in result)) {\n result[key] = value;\n }\n }\n }\n\n // Clean up empty rangeFilters array\n if (result.rangeFilters!.length === 0) {\n delete result.rangeFilters;\n }\n\n return result;\n}\n\nfunction smartParse(value: string): any {\n if (value.includes(\"*\")) return value;\n\n // Boolean\n if (value === \"true\") return true;\n if (value === \"false\") return false;\n\n // Integer\n if (/^-?\\d+$/.test(value)) return parseInt(value, 10);\n\n // Float / Double\n if (/^-?\\d*\\.\\d+$/.test(value)) return parseFloat(value);\n\n // ISO Date (YYYY-MM-DD) or Dot Date (YYYY.MM.DD)\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n const date = new Date(value);\n if (!isNaN(date.getTime())) return date;\n }\n if (/^\\d{4}\\.\\d{2}\\.\\d{2}/.test(value)) {\n // Convert to ISO format for Date constructor\n const isoValue = value.replace(/\\./g, \"-\");\n const date = new Date(isoValue);\n if (!isNaN(date.getTime())) return date;\n }\n\n if (typeof value === \"string\" && value.includes(\",\")) {\n const valueList = value.split(\",\");\n for (let i = 1; i < valueList.length; i++) {\n valueList[i] = smartParse(valueList[i]);\n }\n return valueList;\n }\n\n // Default: string\n return value;\n}\n\nexport function toRecord(queryString: string): Record<string, any> {\n const result: Record<string, any> = {};\n const pairs = queryString.split(\"&\");\n\n for (const pair of pairs) {\n const [key, value] = pair.split(\"=\");\n if (key && value !== undefined) {\n result[key] = smartParse(decodeURIComponent(value));\n }\n }\n\n return result;\n}\n\nexport function findMatchedPolicy(methode: HttpMethod, path: string, policies: EndpointPolicy[]): EndpointPolicy {\n if (!methode || !path || !policies.length) {\n return null;\n }\n\n return policies.find((policy) => policy.method === methode && trimSpecialChar(policy.path) === trimSpecialChar(path));\n}\n"]}
|