lemon-core 5.0.2 → 5.0.4
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/cores/api/api-service.js +2 -2
- package/dist/cores/api/api-service.js.map +1 -1
- package/dist/cores/aws/aws-kms-service.d.ts +3 -0
- package/dist/cores/aws/aws-kms-service.js +15 -0
- package/dist/cores/aws/aws-kms-service.js.map +1 -1
- package/dist/cores/aws/aws-s3-service.js +2 -2
- package/dist/cores/aws/aws-s3-service.js.map +1 -1
- package/dist/cores/aws/kms-fetch.d.ts +70 -0
- package/dist/cores/aws/kms-fetch.js +206 -0
- package/dist/cores/aws/kms-fetch.js.map +1 -0
- package/dist/cores/lambda/lambda-web-handler.js +7 -1
- package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
- package/dist/engine/utilities.d.ts +2 -2
- package/dist/engine/utilities.js +6 -39
- package/dist/engine/utilities.js.map +1 -1
- package/dist/helpers/helpers.js +3 -7
- package/dist/helpers/helpers.js.map +1 -1
- package/dist/lib/qs-compat.d.ts +11 -0
- package/dist/lib/qs-compat.js +89 -0
- package/dist/lib/qs-compat.js.map +1 -0
- package/package.json +22 -24
|
@@ -0,0 +1,89 @@
|
|
|
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.qsStringify = exports.qsParse = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* `qs-compat.ts`
|
|
9
|
+
* - internal query-string helper on `qs`, which keeps the observable behavior of `query-string` 7 (v4 ~ 5.0.3).
|
|
10
|
+
* - used by `$U.qs` (`engine/utilities.ts`), `$protocol()`·`createSigV4Proxy()` (`helpers/helpers.ts`) and `createHttpWebProxy()` (`cores/api/api-service.ts`).
|
|
11
|
+
* - NOTE: internal only. do not export from `lib/index.ts` or any other barrel.
|
|
12
|
+
*
|
|
13
|
+
* @author Steve Jung <steve@lemoncloud.io>
|
|
14
|
+
* @date 2026-10-29 initial version (v5 B11: `query-string` -> `qs`)
|
|
15
|
+
*
|
|
16
|
+
* @copyright (C) lemoncloud.io 2026 - All Rights Reserved.
|
|
17
|
+
*/
|
|
18
|
+
const qs_1 = __importDefault(require("qs"));
|
|
19
|
+
//* v5 B11: decode one `%XX` run as UTF-8 bytes — an invalid byte becomes U+FFFD (non-fatal TextDecoder), linear time.
|
|
20
|
+
const UTF8 = new TextDecoder('utf-8'); // fatal: false
|
|
21
|
+
const decodeRun = (run) => UTF8.decode(Buffer.from(run.replace(/%/g, ''), 'hex'));
|
|
22
|
+
//* v5 B11: decoder like `query-string` 7 — `+` as space; on a malformed text each `%XX` run is decoded by `decodeRun()` (`qs` keeps the whole raw text).
|
|
23
|
+
const decodeText = (text) => {
|
|
24
|
+
const str = text.replace(/\+/g, ' ');
|
|
25
|
+
try {
|
|
26
|
+
return decodeURIComponent(str);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
return str.replace(/(?:%[0-9a-f]{2})+/gi, decodeRun);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
//* v5 B11: parse options — flat keys (`a[b]` as is), `null` for a missing `=`, null prototype, no count limits (as `query-string` 7).
|
|
33
|
+
const PARSE_OPTIONS = {
|
|
34
|
+
depth: 0,
|
|
35
|
+
strictNullHandling: true,
|
|
36
|
+
plainObjects: true,
|
|
37
|
+
parameterLimit: Infinity,
|
|
38
|
+
arrayLimit: Infinity,
|
|
39
|
+
decoder: (text) => decodeText(text),
|
|
40
|
+
};
|
|
41
|
+
//* v5 B11: stringify options — `a=1&a=2` arrays, `a` for `null`, keys in the default `.sort()` order, `!'()*` as %XX.
|
|
42
|
+
const STRINGIFY_OPTIONS = {
|
|
43
|
+
arrayFormat: 'repeat',
|
|
44
|
+
strictNullHandling: true,
|
|
45
|
+
sort: (a, b) => (a < b ? -1 : a > b ? 1 : 0),
|
|
46
|
+
format: 'RFC3986',
|
|
47
|
+
};
|
|
48
|
+
//* v5 B11: a value as text like `query-string` 7 did (`String(value)`), so `qs` neither nests an object nor ISO-formats a date.
|
|
49
|
+
const asText = (value) => value === null || value === undefined || typeof value === 'string' ? value : String(value);
|
|
50
|
+
/**
|
|
51
|
+
* parse a query-string (raw values: strings, `null` and arrays of them).
|
|
52
|
+
* - a leading `?`, `#` or `&` is removed, and the result has sorted keys (`query-string` 7 contract).
|
|
53
|
+
*/
|
|
54
|
+
const qsParse = (query) => {
|
|
55
|
+
//* v5 B11: the result object has no prototype (as `query-string` 7).
|
|
56
|
+
const ret = Object.create(null);
|
|
57
|
+
if (typeof query !== 'string')
|
|
58
|
+
return ret;
|
|
59
|
+
//* v5 B11: trim, then drop one leading `?`, `#` or `&`.
|
|
60
|
+
const text = query.trim().replace(/^[?#&]/, '');
|
|
61
|
+
if (!text)
|
|
62
|
+
return ret;
|
|
63
|
+
const parsed = qs_1.default.parse(text, PARSE_OPTIONS);
|
|
64
|
+
//* v5 B11: copy in the sorted key order.
|
|
65
|
+
return Object.keys(parsed)
|
|
66
|
+
.sort()
|
|
67
|
+
.reduce((acc, key) => {
|
|
68
|
+
acc[key] = parsed[key];
|
|
69
|
+
return acc;
|
|
70
|
+
}, ret);
|
|
71
|
+
};
|
|
72
|
+
exports.qsParse = qsParse;
|
|
73
|
+
/**
|
|
74
|
+
* stringify an object as query-string (`undefined` values are skipped).
|
|
75
|
+
*/
|
|
76
|
+
const qsStringify = (object) => {
|
|
77
|
+
//* v5 B11: `null`/`undefined`/empty input -> ''.
|
|
78
|
+
if (!object)
|
|
79
|
+
return '';
|
|
80
|
+
//* v5 B11: scalar values as text (array items too), in a null-prototype copy so a `__proto__` key stays a key.
|
|
81
|
+
const copy = Object.create(null);
|
|
82
|
+
Object.keys(object).forEach(key => {
|
|
83
|
+
const value = object[key];
|
|
84
|
+
copy[key] = Array.isArray(value) ? value.map(asText) : asText(value);
|
|
85
|
+
});
|
|
86
|
+
return qs_1.default.stringify(copy, STRINGIFY_OPTIONS);
|
|
87
|
+
};
|
|
88
|
+
exports.qsStringify = qsStringify;
|
|
89
|
+
//# sourceMappingURL=qs-compat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qs-compat.js","sourceRoot":"","sources":["../../src/lib/qs-compat.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lemon-core",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.4",
|
|
4
4
|
"description": "Lemon Serverless Micro-Service Platform",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -89,9 +89,10 @@
|
|
|
89
89
|
"author": "Steve Jung <steve@lemoncloud.io>",
|
|
90
90
|
"license": "MIT",
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@aws-sdk/client-dynamodb": "^3.
|
|
93
|
-
"@aws-sdk/lib-dynamodb": "^3.
|
|
92
|
+
"@aws-sdk/client-dynamodb": "^3.1159.0",
|
|
93
|
+
"@aws-sdk/lib-dynamodb": "^3.1159.0",
|
|
94
94
|
"@opensearch-project/opensearch": "^3.9.0",
|
|
95
|
+
"@smithy/signature-v4": "^5.3.8",
|
|
95
96
|
"@types/aws-lambda": "^8.10.62",
|
|
96
97
|
"@types/jsonwebtoken": "^8.5.9",
|
|
97
98
|
"async": "^3.2.4",
|
|
@@ -101,20 +102,18 @@
|
|
|
101
102
|
"lemon-model": "^5.0.0",
|
|
102
103
|
"mime-types": "^3.0.2",
|
|
103
104
|
"node-cache": "^5.1.2",
|
|
104
|
-
"qs": "^6.
|
|
105
|
-
"
|
|
106
|
-
"source-map-support": "^0.5.21",
|
|
107
|
-
"uuid": "^9.0.1"
|
|
105
|
+
"qs": "^6.16.2",
|
|
106
|
+
"source-map-support": "^0.5.21"
|
|
108
107
|
},
|
|
109
108
|
"devDependencies": {
|
|
110
|
-
"@aws-sdk/client-iam": "^3.
|
|
111
|
-
"@aws-sdk/client-kms": "^3.
|
|
112
|
-
"@aws-sdk/client-lambda": "^3.
|
|
113
|
-
"@aws-sdk/client-s3": "^3.
|
|
114
|
-
"@aws-sdk/client-sns": "^3.
|
|
115
|
-
"@aws-sdk/client-sqs": "^3.
|
|
116
|
-
"@aws-sdk/client-sts": "^3.
|
|
117
|
-
"@aws-sdk/credential-providers": "^3.
|
|
109
|
+
"@aws-sdk/client-iam": "^3.1159.0",
|
|
110
|
+
"@aws-sdk/client-kms": "^3.1159.0",
|
|
111
|
+
"@aws-sdk/client-lambda": "^3.1159.0",
|
|
112
|
+
"@aws-sdk/client-s3": "^3.1159.0",
|
|
113
|
+
"@aws-sdk/client-sns": "^3.1159.0",
|
|
114
|
+
"@aws-sdk/client-sqs": "^3.1159.0",
|
|
115
|
+
"@aws-sdk/client-sts": "^3.1159.0",
|
|
116
|
+
"@aws-sdk/credential-providers": "^3.1159.0",
|
|
118
117
|
"@types/async": "^3.2.15",
|
|
119
118
|
"@types/crypto-js": "^4.2.2",
|
|
120
119
|
"@types/js-yaml": "^3.12.5",
|
|
@@ -122,7 +121,6 @@
|
|
|
122
121
|
"@types/node": "^24.12.2",
|
|
123
122
|
"@types/qs": "^6.14.0",
|
|
124
123
|
"@types/supertest": "^2.0.10",
|
|
125
|
-
"@types/uuid": "^8.3.4",
|
|
126
124
|
"@typescript-eslint/eslint-plugin": "^5.15.0",
|
|
127
125
|
"@typescript-eslint/parser": "^5.15.0",
|
|
128
126
|
"@vitest/coverage-v8": "^4.1.4",
|
|
@@ -140,14 +138,14 @@
|
|
|
140
138
|
"vitest": "^4.1.4"
|
|
141
139
|
},
|
|
142
140
|
"peerDependencies": {
|
|
143
|
-
"@aws-sdk/client-iam": "^3.
|
|
144
|
-
"@aws-sdk/client-kms": "^3.
|
|
145
|
-
"@aws-sdk/client-lambda": "^3.
|
|
146
|
-
"@aws-sdk/client-s3": "^3.
|
|
147
|
-
"@aws-sdk/client-sns": "^3.
|
|
148
|
-
"@aws-sdk/client-sqs": "^3.
|
|
149
|
-
"@aws-sdk/client-sts": "^3.
|
|
150
|
-
"@aws-sdk/credential-providers": "^3.
|
|
141
|
+
"@aws-sdk/client-iam": "^3.1159.0",
|
|
142
|
+
"@aws-sdk/client-kms": "^3.1159.0",
|
|
143
|
+
"@aws-sdk/client-lambda": "^3.1159.0",
|
|
144
|
+
"@aws-sdk/client-s3": "^3.1159.0",
|
|
145
|
+
"@aws-sdk/client-sns": "^3.1159.0",
|
|
146
|
+
"@aws-sdk/client-sqs": "^3.1159.0",
|
|
147
|
+
"@aws-sdk/client-sts": "^3.1159.0",
|
|
148
|
+
"@aws-sdk/credential-providers": "^3.1159.0"
|
|
151
149
|
},
|
|
152
150
|
"peerDependenciesMeta": {
|
|
153
151
|
"@aws-sdk/client-iam": {
|