@gennext/lb-infra 0.0.12 → 0.1.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 +63 -89
- package/dist/base/base.helper.d.ts +4 -2
- package/dist/base/base.helper.d.ts.map +1 -1
- package/dist/base/base.helper.js +8 -2
- package/dist/base/base.helper.js.map +1 -1
- package/dist/base/datasources/base.datasource.d.ts +2 -2
- package/dist/base/datasources/base.datasource.d.ts.map +1 -1
- package/dist/base/datasources/base.datasource.js.map +1 -1
- package/dist/base/models/base.model.d.ts +10 -0
- package/dist/base/models/base.model.d.ts.map +1 -1
- package/dist/base/models/base.model.js +10 -3
- package/dist/base/models/base.model.js.map +1 -1
- package/dist/datasources/redis/connector.d.ts +1 -1
- package/dist/datasources/redis/connector.d.ts.map +1 -1
- package/dist/datasources/redis/connector.js +8 -4
- package/dist/datasources/redis/connector.js.map +1 -1
- package/dist/datasources/redis/types.d.ts +1 -1
- package/dist/datasources/redis/types.d.ts.map +1 -1
- package/dist/helpers/logger/application-logger.d.ts +0 -3
- package/dist/helpers/logger/application-logger.d.ts.map +1 -1
- package/dist/helpers/logger/application-logger.js +7 -31
- package/dist/helpers/logger/application-logger.js.map +1 -1
- package/dist/helpers/logger/common/types.d.ts +0 -7
- package/dist/helpers/logger/common/types.d.ts.map +1 -1
- package/dist/helpers/logger/common/types.js +1 -10
- package/dist/helpers/logger/common/types.js.map +1 -1
- package/dist/helpers/logger/config-merger.d.ts +27 -0
- package/dist/helpers/logger/config-merger.d.ts.map +1 -0
- package/dist/helpers/logger/config-merger.js +55 -0
- package/dist/helpers/logger/config-merger.js.map +1 -0
- package/dist/helpers/logger/config.d.ts +9 -11
- package/dist/helpers/logger/config.d.ts.map +1 -1
- package/dist/helpers/logger/config.js +18 -30
- package/dist/helpers/logger/config.js.map +1 -1
- package/dist/helpers/logger/default-logger.d.ts.map +1 -1
- package/dist/helpers/logger/default-logger.js +3 -5
- package/dist/helpers/logger/default-logger.js.map +1 -1
- package/dist/helpers/logger/enhanced-factory.d.ts +3 -3
- package/dist/helpers/logger/enhanced-factory.d.ts.map +1 -1
- package/dist/helpers/logger/enhanced-factory.js +10 -7
- package/dist/helpers/logger/enhanced-factory.js.map +1 -1
- package/dist/helpers/logger/factory.d.ts +1 -37
- package/dist/helpers/logger/factory.d.ts.map +1 -1
- package/dist/helpers/logger/factory.js +11 -86
- package/dist/helpers/logger/factory.js.map +1 -1
- package/dist/helpers/logger/http/access-logger.d.ts +14 -5
- package/dist/helpers/logger/http/access-logger.d.ts.map +1 -1
- package/dist/helpers/logger/http/access-logger.js +186 -157
- package/dist/helpers/logger/http/access-logger.js.map +1 -1
- package/dist/helpers/logger/http/index.d.ts +1 -1
- package/dist/helpers/logger/http/index.d.ts.map +1 -1
- package/dist/helpers/logger/http/index.js +1 -1
- package/dist/helpers/logger/http/index.js.map +1 -1
- package/dist/helpers/logger/http/request-context.d.ts +10 -6
- package/dist/helpers/logger/http/request-context.d.ts.map +1 -1
- package/dist/helpers/logger/http/request-context.js +32 -22
- package/dist/helpers/logger/http/request-context.js.map +1 -1
- package/dist/helpers/logger/http/request-id-manager.d.ts +13 -8
- package/dist/helpers/logger/http/request-id-manager.d.ts.map +1 -1
- package/dist/helpers/logger/http/request-id-manager.js +24 -70
- package/dist/helpers/logger/http/request-id-manager.js.map +1 -1
- package/dist/helpers/logger/http/types.d.ts +3 -3
- package/dist/helpers/logger/http/types.d.ts.map +1 -1
- package/dist/helpers/logger/index.d.ts +4 -3
- package/dist/helpers/logger/index.d.ts.map +1 -1
- package/dist/helpers/logger/index.js +4 -3
- package/dist/helpers/logger/index.js.map +1 -1
- package/dist/helpers/logger/transports/dgram.transport.d.ts +0 -1
- package/dist/helpers/logger/transports/dgram.transport.d.ts.map +1 -1
- package/dist/helpers/logger/transports/dgram.transport.js +2 -2
- package/dist/helpers/logger/transports/dgram.transport.js.map +1 -1
- package/dist/helpers/redis/default.helper.d.ts.map +1 -1
- package/dist/helpers/redis/default.helper.js +19 -17
- package/dist/helpers/redis/default.helper.js.map +1 -1
- package/dist/helpers/redis/index.d.ts.map +1 -1
- package/dist/helpers/redis/index.js.map +1 -1
- package/dist/helpers/redis/redis-cluster.helper.js +2 -2
- package/dist/helpers/redis/redis-cluster.helper.js.map +1 -1
- package/dist/helpers/redis/redis.helper.d.ts +34 -0
- package/dist/helpers/redis/redis.helper.d.ts.map +1 -1
- package/dist/helpers/redis/redis.helper.js +34 -0
- package/dist/helpers/redis/redis.helper.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/utilities/crypto.utility.d.ts +28 -0
- package/dist/utilities/crypto.utility.d.ts.map +1 -1
- package/dist/utilities/crypto.utility.js +28 -0
- package/dist/utilities/crypto.utility.js.map +1 -1
- package/dist/utilities/date.utility.d.ts +57 -0
- package/dist/utilities/date.utility.d.ts.map +1 -1
- package/dist/utilities/date.utility.js +58 -16
- package/dist/utilities/date.utility.js.map +1 -1
- package/dist/utilities/error.utility.d.ts +63 -0
- package/dist/utilities/error.utility.d.ts.map +1 -1
- package/dist/utilities/error.utility.js +82 -4
- package/dist/utilities/error.utility.js.map +1 -1
- package/dist/utilities/lodash.utility.d.ts +1 -0
- package/dist/utilities/lodash.utility.d.ts.map +1 -1
- package/dist/utilities/lodash.utility.js +3 -1
- package/dist/utilities/lodash.utility.js.map +1 -1
- package/dist/utilities/model.utility.d.ts +15 -0
- package/dist/utilities/model.utility.d.ts.map +1 -1
- package/dist/utilities/model.utility.js +15 -2
- package/dist/utilities/model.utility.js.map +1 -1
- package/dist/utilities/module.utility.d.ts +8 -0
- package/dist/utilities/module.utility.d.ts.map +1 -1
- package/dist/utilities/module.utility.js +10 -2
- package/dist/utilities/module.utility.js.map +1 -1
- package/dist/utilities/parse.utility.d.ts +59 -0
- package/dist/utilities/parse.utility.d.ts.map +1 -1
- package/dist/utilities/parse.utility.js +76 -15
- package/dist/utilities/parse.utility.js.map +1 -1
- package/dist/utilities/performance.utility.d.ts +13 -0
- package/dist/utilities/performance.utility.d.ts.map +1 -1
- package/dist/utilities/performance.utility.js +15 -2
- package/dist/utilities/performance.utility.js.map +1 -1
- package/dist/utilities/promise.utility.d.ts +18 -18
- package/dist/utilities/promise.utility.d.ts.map +1 -1
- package/dist/utilities/promise.utility.js +16 -17
- package/dist/utilities/promise.utility.js.map +1 -1
- package/dist/utilities/query.utility.d.ts +24 -3
- package/dist/utilities/query.utility.d.ts.map +1 -1
- package/dist/utilities/query.utility.js +29 -7
- package/dist/utilities/query.utility.js.map +1 -1
- package/dist/utilities/request.utility.d.ts +36 -3
- package/dist/utilities/request.utility.d.ts.map +1 -1
- package/dist/utilities/request.utility.js +38 -8
- package/dist/utilities/request.utility.js.map +1 -1
- package/dist/utilities/url.utility.d.ts +16 -0
- package/dist/utilities/url.utility.d.ts.map +1 -1
- package/dist/utilities/url.utility.js +16 -0
- package/dist/utilities/url.utility.js.map +1 -1
- package/package.json +2 -1
|
@@ -4,11 +4,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.buildBatchUpdateQuery = exports.getValue = exports.getTableDefinition = void 0;
|
|
7
|
-
const
|
|
7
|
+
const logger_1 = require("../helpers/logger");
|
|
8
8
|
const get_1 = __importDefault(require("lodash/get"));
|
|
9
9
|
const pick_1 = __importDefault(require("lodash/pick"));
|
|
10
10
|
const snakeCase_1 = __importDefault(require("lodash/snakeCase"));
|
|
11
11
|
const error_utility_1 = require("./error.utility");
|
|
12
|
+
/**
|
|
13
|
+
* Generates table and column definitions for SQL queries based on LoopBack models
|
|
14
|
+
* @param opts - Configuration with model class and optional alias
|
|
15
|
+
* @returns Object containing table name, alias, and column mapping
|
|
16
|
+
* @example
|
|
17
|
+
* const def = getTableDefinition({ model: User, alias: 'u' });
|
|
18
|
+
* // { table: { name: 'User', alias: 'u', ... }, columns: { id: 'u.id', ... } }
|
|
19
|
+
*/
|
|
12
20
|
const getTableDefinition = (opts) => {
|
|
13
21
|
const { model, alias } = opts;
|
|
14
22
|
const tableAlias = alias ?? model.name.toLowerCase();
|
|
@@ -45,17 +53,27 @@ const getTableDefinition = (opts) => {
|
|
|
45
53
|
};
|
|
46
54
|
};
|
|
47
55
|
exports.getTableDefinition = getTableDefinition;
|
|
48
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Safely formats a value for use in a SQL query string
|
|
58
|
+
* @param value - The value to format
|
|
59
|
+
* @returns Formatted SQL string value
|
|
60
|
+
* @example
|
|
61
|
+
* getValue('O\'Reilly') // "'O''Reilly'"
|
|
62
|
+
* getValue(123) // "123"
|
|
63
|
+
*/
|
|
49
64
|
const getValue = (value) => {
|
|
50
65
|
switch (typeof value) {
|
|
51
|
-
case
|
|
52
|
-
|
|
66
|
+
case 'object': {
|
|
67
|
+
if (value === null) {
|
|
68
|
+
return 'null';
|
|
69
|
+
}
|
|
70
|
+
return `'${JSON.stringify(value).replace(/'/g, "''")}'`;
|
|
53
71
|
}
|
|
54
72
|
case 'number': {
|
|
55
73
|
return value?.toString();
|
|
56
74
|
}
|
|
57
75
|
case 'boolean': {
|
|
58
|
-
return value;
|
|
76
|
+
return value ? 'true' : 'false';
|
|
59
77
|
}
|
|
60
78
|
case 'string': {
|
|
61
79
|
if (value?.toString().trim() === '') {
|
|
@@ -69,12 +87,16 @@ const getValue = (value) => {
|
|
|
69
87
|
}
|
|
70
88
|
};
|
|
71
89
|
exports.getValue = getValue;
|
|
72
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Builds a PostgreSQL-compatible batch update query using WITH and VALUES
|
|
92
|
+
* @param opts - Configuration for batch update
|
|
93
|
+
* @returns SQL UPDATE query string
|
|
94
|
+
*/
|
|
73
95
|
const buildBatchUpdateQuery = (opts) => {
|
|
74
96
|
const { data, tableName, keys, setKeys, whereKeys, whereRaws = [] } = opts;
|
|
75
97
|
const withAlias = 't';
|
|
76
98
|
if (!data.length || !keys.length || !setKeys.length || !whereKeys.length) {
|
|
77
|
-
|
|
99
|
+
logger_1.applicationLogger.error('[batchUpdate] Missing required fields | Data: %d | Keys: %d | Set Keys: %d | Where Keys: %d', data.length, keys.length, setKeys.length, whereKeys.length);
|
|
78
100
|
throw (0, error_utility_1.getError)({
|
|
79
101
|
message: '[batchUpdate] Missing required fields',
|
|
80
102
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.utility.js","sourceRoot":"","sources":["../../src/utilities/query.utility.ts"],"names":[],"mappings":";;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"query.utility.js","sourceRoot":"","sources":["../../src/utilities/query.utility.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,55 @@
|
|
|
1
1
|
import { Request, Response } from '@loopback/rest';
|
|
2
2
|
import multer from 'multer';
|
|
3
|
-
import { IRequestedRemark } from '../common';
|
|
3
|
+
import { IRequestedRemark } from '../common/types';
|
|
4
|
+
/**
|
|
5
|
+
* Parses multipart form data (files) using multer
|
|
6
|
+
* @param opts - Configuration with storage engine, request, and response
|
|
7
|
+
* @returns Promise that resolves to an array of uploaded files
|
|
8
|
+
*/
|
|
4
9
|
export declare const parseMultipartBody: (opts: {
|
|
5
10
|
storage?: multer.StorageEngine;
|
|
6
11
|
request: Request;
|
|
7
12
|
response: Response;
|
|
8
13
|
}) => Promise<any>;
|
|
14
|
+
/**
|
|
15
|
+
* Extracts schema definition for a LoopBack model class
|
|
16
|
+
* @param ctor - The model class constructor
|
|
17
|
+
* @returns Schema object for the model
|
|
18
|
+
*/
|
|
9
19
|
export declare const getSchemaObject: <T extends object>(ctor?: Function & {
|
|
10
20
|
prototype: T;
|
|
11
21
|
}) => import("@loopback/rest").SchemaObject;
|
|
22
|
+
/**
|
|
23
|
+
* Gets the request ID from a LoopBack request object
|
|
24
|
+
* @param opts - Request context
|
|
25
|
+
* @returns Request identifier or 'unknown'
|
|
26
|
+
*/
|
|
12
27
|
export declare const getRequestId: (opts: {
|
|
13
28
|
request: Request;
|
|
14
|
-
}) =>
|
|
29
|
+
}) => string;
|
|
30
|
+
/**
|
|
31
|
+
* Gets the client's forwarded IP address from the request
|
|
32
|
+
* @param opts - Request context
|
|
33
|
+
* @returns IP address string or 'N/A'
|
|
34
|
+
*/
|
|
15
35
|
export declare const getRequestIp: (opts: {
|
|
16
36
|
request: Request;
|
|
17
37
|
}) => string;
|
|
38
|
+
/**
|
|
39
|
+
* Extracts the requested remark from the request metadata
|
|
40
|
+
* @param opts - Request context
|
|
41
|
+
* @returns IRequestedRemark object or undefined
|
|
42
|
+
*/
|
|
18
43
|
export declare const getRequestRemark: (opts: {
|
|
19
44
|
request: Request;
|
|
20
45
|
}) => IRequestedRemark | undefined;
|
|
21
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Generates or validates a unique HTTP request identifier
|
|
48
|
+
* Uses current date prefix combined with UUID
|
|
49
|
+
* @param id - Existing ID to validate (optional)
|
|
50
|
+
* @returns Validated or newly generated request ID
|
|
51
|
+
* @example
|
|
52
|
+
* genHTTPRequestId() // "20240413-..."
|
|
53
|
+
*/
|
|
54
|
+
export declare const genHTTPRequestId: (id?: string) => string;
|
|
22
55
|
//# sourceMappingURL=request.utility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.utility.d.ts","sourceRoot":"","sources":["../../src/utilities/request.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AACtE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"request.utility.d.ts","sourceRoot":"","sources":["../../src/utilities/request.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AACtE,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACpB,iBAeA,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,EAAE,OAAO,QAAQ,GAAG;IAAE,SAAS,EAAE,CAAC,CAAA;CAAE,0CAEnF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,WAEtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,WAEtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,KAAG,gBAAgB,GAAG,SAEhF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,WAW3C,CAAC"}
|
|
@@ -8,7 +8,11 @@ const rest_1 = require("@loopback/rest");
|
|
|
8
8
|
const multer_1 = __importDefault(require("multer"));
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
10
10
|
const lodash_utility_1 = require("./lodash.utility");
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Parses multipart form data (files) using multer
|
|
13
|
+
* @param opts - Configuration with storage engine, request, and response
|
|
14
|
+
* @returns Promise that resolves to an array of uploaded files
|
|
15
|
+
*/
|
|
12
16
|
const parseMultipartBody = (opts) => {
|
|
13
17
|
const { storage: cStorage, request, response } = opts;
|
|
14
18
|
const storage = cStorage ?? multer_1.default.memoryStorage();
|
|
@@ -24,28 +28,54 @@ const parseMultipartBody = (opts) => {
|
|
|
24
28
|
});
|
|
25
29
|
};
|
|
26
30
|
exports.parseMultipartBody = parseMultipartBody;
|
|
27
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Extracts schema definition for a LoopBack model class
|
|
33
|
+
* @param ctor - The model class constructor
|
|
34
|
+
* @returns Schema object for the model
|
|
35
|
+
*/
|
|
28
36
|
const getSchemaObject = (ctor) => {
|
|
29
37
|
return ctor ? (0, rest_1.getModelSchemaRef)(ctor).definitions[ctor.name] : {};
|
|
30
38
|
};
|
|
31
39
|
exports.getSchemaObject = getSchemaObject;
|
|
32
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Gets the request ID from a LoopBack request object
|
|
42
|
+
* @param opts - Request context
|
|
43
|
+
* @returns Request identifier or 'unknown'
|
|
44
|
+
*/
|
|
33
45
|
const getRequestId = (opts) => {
|
|
34
|
-
return (0, lodash_utility_1.get)(opts.request, 'requestId');
|
|
46
|
+
return (0, lodash_utility_1.get)(opts.request, 'requestId') || 'unknown';
|
|
35
47
|
};
|
|
36
48
|
exports.getRequestId = getRequestId;
|
|
37
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Gets the client's forwarded IP address from the request
|
|
51
|
+
* @param opts - Request context
|
|
52
|
+
* @returns IP address string or 'N/A'
|
|
53
|
+
*/
|
|
38
54
|
const getRequestIp = (opts) => {
|
|
39
55
|
return (0, lodash_utility_1.get)(opts.request, 'requestForwardedIp') ?? 'N/A';
|
|
40
56
|
};
|
|
41
57
|
exports.getRequestIp = getRequestIp;
|
|
42
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Extracts the requested remark from the request metadata
|
|
60
|
+
* @param opts - Request context
|
|
61
|
+
* @returns IRequestedRemark object or undefined
|
|
62
|
+
*/
|
|
43
63
|
const getRequestRemark = (opts) => {
|
|
44
64
|
return (0, lodash_utility_1.get)(opts.request, 'requestedRemark');
|
|
45
65
|
};
|
|
46
66
|
exports.getRequestRemark = getRequestRemark;
|
|
47
|
-
|
|
48
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Generates or validates a unique HTTP request identifier
|
|
69
|
+
* Uses current date prefix combined with UUID
|
|
70
|
+
* @param id - Existing ID to validate (optional)
|
|
71
|
+
* @returns Validated or newly generated request ID
|
|
72
|
+
* @example
|
|
73
|
+
* genHTTPRequestId() // "20240413-..."
|
|
74
|
+
*/
|
|
75
|
+
const genHTTPRequestId = (id) => {
|
|
76
|
+
if (id && id !== 'unknown') {
|
|
77
|
+
return id;
|
|
78
|
+
}
|
|
49
79
|
const now = new Date();
|
|
50
80
|
const prefix = now.getFullYear().toString().padStart(4, '0') +
|
|
51
81
|
(now.getMonth() + 1).toString().padStart(2, '0') +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.utility.js","sourceRoot":"","sources":["../../src/utilities/request.utility.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAsE;AACtE,oDAA4B;AAC5B,+BAAoC;AAGpC,qDAAuC;AAEvC
|
|
1
|
+
{"version":3,"file":"request.utility.js","sourceRoot":"","sources":["../../src/utilities/request.utility.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAsE;AACtE,oDAA4B;AAC5B,+BAAoC;AAGpC,qDAAuC;AAEvC;;;;GAIG;AACI,MAAM,kBAAkB,GAAG,CAAC,IAIlC,EAAE,EAAE;IACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACtD,MAAM,OAAO,GAAG,QAAQ,IAAI,gBAAM,CAAC,aAAa,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEnC,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3C,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAnBW,QAAA,kBAAkB,sBAmB7B;AAEF;;;;GAIG;AACI,MAAM,eAAe,GAAG,CAAmB,IAAkC,EAAE,EAAE;IACtF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAA,wBAAiB,EAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpE,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAEF;;;;GAIG;AACI,MAAM,YAAY,GAAG,CAAC,IAA0B,EAAE,EAAE;IACzD,OAAO,IAAA,oBAAG,EAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,SAAS,CAAC;AACrD,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB;AAEF;;;;GAIG;AACI,MAAM,YAAY,GAAG,CAAC,IAA0B,EAAE,EAAE;IACzD,OAAO,IAAA,oBAAG,EAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,IAAI,KAAK,CAAC;AAC1D,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB;AAEF;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,IAA0B,EAAgC,EAAE;IAC3F,OAAO,IAAA,oBAAG,EAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC9C,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B;AAEF;;;;;;;GAOG;AACI,MAAM,gBAAgB,GAAG,CAAC,EAAW,EAAE,EAAE;IAC9C,IAAI,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GACV,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC7C,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAChD,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5C,OAAO,GAAG,MAAM,IAAI,IAAA,SAAM,GAAE,EAAE,CAAC;AACjC,CAAC,CAAC;AAXW,QAAA,gBAAgB,oBAW3B"}
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializes an object into a URL search query string
|
|
3
|
+
* Automatically JSON stringifies non-primitive values
|
|
4
|
+
* @param params - Object containing key-value pairs to serialize
|
|
5
|
+
* @returns Encoded URL query string
|
|
6
|
+
* @example
|
|
7
|
+
* stringify({ id: 1, filter: { name: 'john' } })
|
|
8
|
+
* // "id=1&filter=%7B%22name%22%3A%22john%22%7D"
|
|
9
|
+
*/
|
|
1
10
|
export declare const stringify: (params: Record<string | symbol, any>) => string;
|
|
11
|
+
/**
|
|
12
|
+
* Parses a URL query string into a simple key-value object
|
|
13
|
+
* @param searchString - The raw query string (e.g. from window.location.search)
|
|
14
|
+
* @returns Object with key-value pairs from the query string
|
|
15
|
+
* @example
|
|
16
|
+
* parse('id=1&name=john') // { id: '1', name: 'john' }
|
|
17
|
+
*/
|
|
2
18
|
export declare const parse: (searchString: string) => Record<string, any>;
|
|
3
19
|
//# sourceMappingURL=url.utility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.utility.d.ts","sourceRoot":"","sources":["../../src/utilities/url.utility.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,WAiB7D,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,cAAc,MAAM,wBAQzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"url.utility.d.ts","sourceRoot":"","sources":["../../src/utilities/url.utility.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,WAiB7D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAAI,cAAc,MAAM,wBAQzC,CAAC"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parse = exports.stringify = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Serializes an object into a URL search query string
|
|
6
|
+
* Automatically JSON stringifies non-primitive values
|
|
7
|
+
* @param params - Object containing key-value pairs to serialize
|
|
8
|
+
* @returns Encoded URL query string
|
|
9
|
+
* @example
|
|
10
|
+
* stringify({ id: 1, filter: { name: 'john' } })
|
|
11
|
+
* // "id=1&filter=%7B%22name%22%3A%22john%22%7D"
|
|
12
|
+
*/
|
|
4
13
|
const stringify = (params) => {
|
|
5
14
|
const normalizedParams = {};
|
|
6
15
|
for (const key in params) {
|
|
@@ -20,6 +29,13 @@ const stringify = (params) => {
|
|
|
20
29
|
return rs.toString();
|
|
21
30
|
};
|
|
22
31
|
exports.stringify = stringify;
|
|
32
|
+
/**
|
|
33
|
+
* Parses a URL query string into a simple key-value object
|
|
34
|
+
* @param searchString - The raw query string (e.g. from window.location.search)
|
|
35
|
+
* @returns Object with key-value pairs from the query string
|
|
36
|
+
* @example
|
|
37
|
+
* parse('id=1&name=john') // { id: '1', name: 'john' }
|
|
38
|
+
*/
|
|
23
39
|
const parse = (searchString) => {
|
|
24
40
|
const rs = {};
|
|
25
41
|
const searchParams = new URLSearchParams(searchString);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.utility.js","sourceRoot":"","sources":["../../src/utilities/url.utility.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"url.utility.js","sourceRoot":"","sources":["../../src/utilities/url.utility.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;GAQG;AACI,MAAM,SAAS,GAAG,CAAC,MAAoC,EAAE,EAAE;IAChE,MAAM,gBAAgB,GAAiC,EAAE,CAAC;IAC1D,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,QAAQ,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,gBAAgB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpC,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC,CAAC;AAjBW,QAAA,SAAS,aAiBpB;AAEF;;;;;;GAMG;AACI,MAAM,KAAK,GAAG,CAAC,YAAoB,EAAE,EAAE;IAC5C,MAAM,EAAE,GAAwB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,YAAY,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AARW,QAAA,KAAK,SAQhB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gennext/lb-infra",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@gennext/dev-configs": "^0.0.3",
|
|
6
6
|
"@loopback/authentication": "^12.0.6",
|
|
@@ -118,6 +118,7 @@
|
|
|
118
118
|
"clean": "sh ./scripts/clean.sh",
|
|
119
119
|
"rebuild": "sh ./scripts/rebuild.sh",
|
|
120
120
|
"eslint": "eslint --report-unused-disable-directives .",
|
|
121
|
+
"eslint:fix": "bun eslint --fix",
|
|
121
122
|
"test": "TS_NODE_PROJECT=tsconfig.test.json node --require ts-node/register/transpile-only --require tsconfig-paths/register --test \"tests/**/*.test.ts\"",
|
|
122
123
|
"lint": "bun run eslint && bun run prettier:cli",
|
|
123
124
|
"lint:fix": "bun run eslint --fix && bun run prettier:fix",
|