lemon-core 4.3.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +127 -2
- package/dist/common/lemon-error.d.ts +34 -0
- package/dist/common/lemon-error.js +52 -0
- package/dist/common/lemon-error.js.map +1 -0
- package/dist/controllers/general-api-controller.d.ts +7 -0
- package/dist/controllers/general-api-controller.js +7 -0
- package/dist/controllers/general-api-controller.js.map +1 -1
- package/dist/cores/api/api-service.js +10 -43
- package/dist/cores/api/api-service.js.map +1 -1
- package/dist/cores/aws/aws-kms-service.d.ts +13 -5
- package/dist/cores/aws/aws-kms-service.js +23 -9
- package/dist/cores/aws/aws-kms-service.js.map +1 -1
- package/dist/cores/aws/aws-s3-service.d.ts +30 -4
- package/dist/cores/aws/aws-s3-service.js +35 -15
- package/dist/cores/aws/aws-s3-service.js.map +1 -1
- package/dist/cores/aws/aws-sns-service.js +59 -9
- package/dist/cores/aws/aws-sns-service.js.map +1 -1
- package/dist/cores/aws/aws-sqs-service.d.ts +1 -1
- package/dist/cores/aws/aws-sqs-service.js +54 -12
- package/dist/cores/aws/aws-sqs-service.js.map +1 -1
- package/dist/cores/cache/cache-service.d.ts +10 -9
- package/dist/cores/cache/cache-service.js +9 -346
- package/dist/cores/cache/cache-service.js.map +1 -1
- package/dist/cores/config/config-service.d.ts +3 -15
- package/dist/cores/config/config-service.js +5 -34
- package/dist/cores/config/config-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-query-service.js +42 -2
- package/dist/cores/dynamo/dynamo-query-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-scan-service.js +42 -2
- package/dist/cores/dynamo/dynamo-scan-service.js.map +1 -1
- package/dist/cores/dynamo/dynamo-service.d.ts +45 -14
- package/dist/cores/dynamo/dynamo-service.js +48 -21
- package/dist/cores/dynamo/dynamo-service.js.map +1 -1
- package/dist/cores/dynamo/tools/expressions.js +32 -22
- package/dist/cores/dynamo/tools/expressions.js.map +1 -1
- package/dist/cores/dynamo/tools/lang.d.ts +30 -0
- package/dist/cores/dynamo/tools/lang.js +75 -0
- package/dist/cores/dynamo/tools/lang.js.map +1 -0
- package/dist/cores/dynamo/tools/query.js +20 -21
- package/dist/cores/dynamo/tools/query.js.map +1 -1
- package/dist/cores/dynamo/tools/scan.js +15 -16
- package/dist/cores/dynamo/tools/scan.js.map +1 -1
- package/dist/cores/dynamo/tools/serializer.js +40 -38
- package/dist/cores/dynamo/tools/serializer.js.map +1 -1
- package/dist/cores/dynamo/tools/utils.d.ts +6 -2
- package/dist/cores/dynamo/tools/utils.js +11 -8
- package/dist/cores/dynamo/tools/utils.js.map +1 -1
- package/dist/cores/elastic/elastic6-query-service.d.ts +1 -104
- package/dist/cores/elastic/elastic6-query-service.js +15 -489
- package/dist/cores/elastic/elastic6-query-service.js.map +1 -1
- package/dist/cores/elastic/elastic6-service.d.ts +1 -482
- package/dist/cores/elastic/elastic6-service.js +15 -1153
- package/dist/cores/elastic/elastic6-service.js.map +1 -1
- package/dist/cores/elastic/index.d.ts +2 -2
- package/dist/cores/elastic/index.js +3 -2
- package/dist/cores/elastic/index.js.map +1 -1
- package/dist/cores/elastic/os2-query-service.d.ts +104 -0
- package/dist/cores/elastic/os2-query-service.js +495 -0
- package/dist/cores/elastic/os2-query-service.js.map +1 -0
- package/dist/cores/elastic/os2-service.d.ts +372 -0
- package/dist/cores/elastic/os2-service.js +943 -0
- package/dist/cores/elastic/os2-service.js.map +1 -0
- package/dist/cores/index.d.ts +6 -1
- package/dist/cores/index.js +9 -2
- package/dist/cores/index.js.map +1 -1
- package/dist/cores/lambda/index.js +2 -1
- package/dist/cores/lambda/index.js.map +1 -1
- package/dist/cores/lambda/lambda-cron-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-cron-handler.js +5 -1
- package/dist/cores/lambda/lambda-cron-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-dynamo-stream-handler.d.ts +5 -4
- package/dist/cores/lambda/lambda-dynamo-stream-handler.js +18 -5
- package/dist/cores/lambda/lambda-dynamo-stream-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-handler.d.ts +22 -2
- package/dist/cores/lambda/lambda-handler.js +85 -23
- package/dist/cores/lambda/lambda-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-sns-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-sns-handler.js +5 -0
- package/dist/cores/lambda/lambda-sns-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-sqs-handler.d.ts +1 -0
- package/dist/cores/lambda/lambda-sqs-handler.js +20 -5
- package/dist/cores/lambda/lambda-sqs-handler.js.map +1 -1
- package/dist/cores/lambda/lambda-web-handler.d.ts +10 -0
- package/dist/cores/lambda/lambda-web-handler.js +107 -41
- package/dist/cores/lambda/lambda-web-handler.js.map +1 -1
- package/dist/cores/protocol/aws-lambda-helper.js +58 -11
- package/dist/cores/protocol/aws-lambda-helper.js.map +1 -1
- package/dist/cores/protocol/index.js +3 -0
- package/dist/cores/protocol/index.js.map +1 -1
- package/dist/cores/protocol/protocol-service.d.ts +26 -5
- package/dist/cores/protocol/protocol-service.js +42 -12
- package/dist/cores/protocol/protocol-service.js.map +1 -1
- package/dist/cores/protocol/protocol-sign.d.ts +72 -0
- package/dist/cores/protocol/protocol-sign.js +194 -0
- package/dist/cores/protocol/protocol-sign.js.map +1 -0
- package/dist/cores/storage/index.d.ts +0 -1
- package/dist/cores/storage/index.js +0 -1
- package/dist/cores/storage/index.js.map +1 -1
- package/dist/cores/storage/model-fields.d.ts +7 -0
- package/dist/cores/storage/model-fields.js +21 -0
- package/dist/cores/storage/model-fields.js.map +1 -0
- package/dist/cores/storage/model-manager.d.ts +3 -2
- package/dist/cores/storage/model-manager.js +7 -3
- package/dist/cores/storage/model-manager.js.map +1 -1
- package/dist/engine/builder.js +20 -2
- package/dist/engine/builder.js.map +1 -1
- package/dist/engine/engine.d.ts +2 -2
- package/dist/engine/engine.js +4 -4
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/utilities.d.ts +11 -12
- package/dist/engine/utilities.js +30 -82
- package/dist/engine/utilities.js.map +1 -1
- package/dist/environ.d.ts +0 -6
- package/dist/environ.js +1 -12
- package/dist/environ.js.map +1 -1
- package/dist/esm/index.mjs +140 -0
- package/dist/esm/testing.mjs +12 -0
- package/dist/extended/abstract-service.d.ts +48 -139
- package/dist/extended/abstract-service.js +46 -382
- package/dist/extended/abstract-service.js.map +1 -1
- package/dist/extended/cores/abstract-controllers.js +7 -7
- package/dist/extended/cores/abstract-controllers.js.map +1 -1
- package/dist/extended/cores/abstract-rest-apis.d.ts +2 -1
- package/dist/extended/cores/abstract-rest-apis.js +2 -1
- package/dist/extended/cores/abstract-rest-apis.js.map +1 -1
- package/dist/extended/cores/abstract-services.d.ts +48 -87
- package/dist/extended/cores/abstract-services.js +105 -244
- package/dist/extended/cores/abstract-services.js.map +1 -1
- package/dist/extended/cores/commons.d.ts +4 -113
- package/dist/extended/cores/commons.js +26 -180
- package/dist/extended/cores/commons.js.map +1 -1
- package/dist/extended/cores/types.d.ts +3 -225
- package/dist/extended/cores/types.js +28 -0
- package/dist/extended/cores/types.js.map +1 -1
- package/dist/helpers/helpers.d.ts +10 -5
- package/dist/helpers/helpers.js +46 -58
- package/dist/helpers/helpers.js.map +1 -1
- package/dist/helpers/types.d.ts +22 -10
- package/dist/index.d.ts +1 -5
- package/dist/index.js +8 -14
- package/dist/index.js.map +1 -1
- package/dist/lib/http-fetch.d.ts +54 -0
- package/dist/lib/http-fetch.js +133 -0
- package/dist/lib/http-fetch.js.map +1 -0
- package/dist/lib/lazy.d.ts +22 -0
- package/dist/lib/lazy.js +54 -0
- package/dist/lib/lazy.js.map +1 -0
- package/dist/lib/perf.d.ts +35 -0
- package/dist/lib/perf.js +52 -0
- package/dist/lib/perf.js.map +1 -0
- package/dist/tools/tools.d.ts +15 -3
- package/dist/tools/tools.js +21 -4
- package/dist/tools/tools.js.map +1 -1
- package/package.json +96 -39
- package/dist/cores/storage/redis-storage-service.d.ts +0 -183
- package/dist/cores/storage/redis-storage-service.js +0 -377
- package/dist/cores/storage/redis-storage-service.js.map +0 -1
- package/dist/generated/field-registry.d.ts +0 -12
- package/dist/generated/field-registry.js +0 -21
- package/dist/generated/field-registry.js.map +0 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchProxyBody = exports.isSuccessStatus = exports.asStatusError = exports.reparseBody = exports.sendRequest = exports.buildHeaders = exports.parseResponseText = exports.asFetchError = exports.toPayload = exports.isJsonBody = exports.DEFAULT_FETCH_TIMEOUT = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* `http-fetch.ts`
|
|
6
|
+
* - internal transport for the http proxy factories (`createSigV4Proxy`, `createHttpWebProxy`, `$X.createHttpSearchProxy`).
|
|
7
|
+
* - uses the Node built-in `fetch`, and keeps the contract of the former `request` based code (v4).
|
|
8
|
+
* - NOTE: internal only. do not export from `lib/index.ts` or any other barrel.
|
|
9
|
+
*
|
|
10
|
+
* @author Steve Jung <steve@lemoncloud.io>
|
|
11
|
+
* @date 2026-10-27 initial version (v5 B2-a: `request` -> `fetch`)
|
|
12
|
+
*
|
|
13
|
+
* @copyright (C) lemoncloud.io 2026 - All Rights Reserved.
|
|
14
|
+
*/
|
|
15
|
+
const test_helper_1 = require("../common/test-helper");
|
|
16
|
+
const lemon_error_1 = require("../common/lemon-error");
|
|
17
|
+
//* v5 B5: default timeout of one request (ms) — under API Gateway 29 s and the 30 s Lambda timeout (SPEC § 6.6).
|
|
18
|
+
exports.DEFAULT_FETCH_TIMEOUT = 25000;
|
|
19
|
+
/** json mode rule of the factories: a string body goes plain, anything else as json */
|
|
20
|
+
const isJsonBody = ($body) => typeof $body !== 'string';
|
|
21
|
+
exports.isJsonBody = isJsonBody;
|
|
22
|
+
/** serialize the body once: `null`/`undefined` → no body, json → `JSON.stringify`, string → as-is */
|
|
23
|
+
const toPayload = ($body, json) => {
|
|
24
|
+
if ($body === null || $body === undefined)
|
|
25
|
+
return undefined;
|
|
26
|
+
return json ? JSON.stringify($body) : `${$body}`;
|
|
27
|
+
};
|
|
28
|
+
exports.toPayload = toPayload;
|
|
29
|
+
/** turn a `fetch` failure into an Error whose message starts with the errno (ex: `ECONNREFUSED ...`) */
|
|
30
|
+
const asFetchError = (e, timeout) => {
|
|
31
|
+
//* v5: `AbortSignal.timeout` rejects with `TimeoutError` (no `cause`) → errno-style `ETIMEDOUT timeout ...`.
|
|
32
|
+
if (e?.name === 'TimeoutError')
|
|
33
|
+
return new Error(`ETIMEDOUT timeout after ${timeout ?? exports.DEFAULT_FETCH_TIMEOUT} ms`);
|
|
34
|
+
const cause = e?.cause;
|
|
35
|
+
return new Error(`${cause?.code ?? 'FETCH_FAILED'} ${cause?.message ?? e?.message}`);
|
|
36
|
+
};
|
|
37
|
+
exports.asFetchError = asFetchError;
|
|
38
|
+
/** parse response text like `request` did: json → try `JSON.parse` on any text (empty → `undefined`), else the text */
|
|
39
|
+
const parseResponseText = (text, json) => {
|
|
40
|
+
if (!json)
|
|
41
|
+
return text;
|
|
42
|
+
if (!text)
|
|
43
|
+
return undefined;
|
|
44
|
+
try {
|
|
45
|
+
return JSON.parse(text);
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
return text;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.parseResponseText = parseResponseText;
|
|
52
|
+
/** build fetch headers: string values, last one wins case-insensitively, json defaults added if absent */
|
|
53
|
+
const buildHeaders = (req) => {
|
|
54
|
+
const headers = new Headers();
|
|
55
|
+
// copy given headers, skipping empty values.
|
|
56
|
+
Object.entries(req.headers ?? {}).forEach(([key, val]) => {
|
|
57
|
+
if (val !== undefined && val !== null)
|
|
58
|
+
headers.set(key, `${val}`);
|
|
59
|
+
});
|
|
60
|
+
// json mode defaults, same as `request`: accept always, content-type only with a body.
|
|
61
|
+
if (req.json && !headers.has('accept'))
|
|
62
|
+
headers.set('accept', 'application/json');
|
|
63
|
+
if (req.json && req.payload !== undefined && !headers.has('content-type'))
|
|
64
|
+
headers.set('content-type', 'application/json');
|
|
65
|
+
return headers;
|
|
66
|
+
};
|
|
67
|
+
exports.buildHeaders = buildHeaders;
|
|
68
|
+
/** send one request with `fetch`, and read the body. network errors (and timeout) are rethrown by `asFetchError()` */
|
|
69
|
+
const sendRequest = async (req) => {
|
|
70
|
+
const method = `${req.method || 'GET'}`.toUpperCase();
|
|
71
|
+
// `fetch` cannot send a body with GET/HEAD (SigV4 also signs an empty body for GET).
|
|
72
|
+
const body = method === 'GET' || method === 'HEAD' ? undefined : req.payload;
|
|
73
|
+
//* v5: every request has a timeout (default 25 s, per-request `timeout`).
|
|
74
|
+
const timeout = req.timeout ?? exports.DEFAULT_FETCH_TIMEOUT;
|
|
75
|
+
try {
|
|
76
|
+
const signal = AbortSignal.timeout(timeout);
|
|
77
|
+
const res = await fetch(req.url, { method, headers: (0, exports.buildHeaders)(req), body, signal });
|
|
78
|
+
const text = await res.text();
|
|
79
|
+
return { statusCode: res.status, statusMessage: res.statusText, body: (0, exports.parseResponseText)(text, req.json) };
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
throw (0, exports.asFetchError)(e, timeout);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
exports.sendRequest = sendRequest;
|
|
86
|
+
/** re-parse a string body that looks like a json object or array (kept from the v4 code) */
|
|
87
|
+
const reparseBody = (body, logger) => {
|
|
88
|
+
try {
|
|
89
|
+
if (body && typeof body == 'string' && body.startsWith('{') && body.endsWith('}'))
|
|
90
|
+
return JSON.parse(body);
|
|
91
|
+
if (body && typeof body == 'string' && body.startsWith('[') && body.endsWith(']'))
|
|
92
|
+
return JSON.parse(body);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
logger?.err?.('!WARN! parse(body) =', e instanceof Error ? e : (0, test_helper_1.GETERR)(e));
|
|
96
|
+
}
|
|
97
|
+
return body;
|
|
98
|
+
};
|
|
99
|
+
exports.reparseBody = reparseBody;
|
|
100
|
+
/** turn a non-success response into the v4 error message (400·404 and other formats) — v5: a `LemonError` with the peer status */
|
|
101
|
+
const asStatusError = (res, logger) => {
|
|
102
|
+
const { statusCode, statusMessage, body } = res;
|
|
103
|
+
const msg = body ? (0, test_helper_1.GETERR)(body) : `${statusMessage || ''}`;
|
|
104
|
+
// 400·404: `<code> <TITLE> - <msg>`, unless the message is already `404 NOT FOUND ...`.
|
|
105
|
+
if (statusCode === 400 || statusCode === 404) {
|
|
106
|
+
const title = `${(statusCode == 404 ? '' : statusMessage) || 'NOT FOUND'}`.toUpperCase();
|
|
107
|
+
return (0, lemon_error_1.asLemonError)(statusCode, msg.startsWith('404 NOT FOUND') ? msg : `${statusCode} ${title} - ${msg}`, title);
|
|
108
|
+
}
|
|
109
|
+
statusMessage && logger?.log?.(`> statusMessage[${statusCode}] =`, statusMessage);
|
|
110
|
+
body && logger?.log?.(`> body[${statusCode}] =`, (0, test_helper_1.GETERR)(body));
|
|
111
|
+
//* v5: the message string is unchanged, the status is typed.
|
|
112
|
+
return (0, lemon_error_1.asLemonError)(statusCode, `${statusCode} ${statusMessage || 'FAILURE'} - ${msg}`, `${statusMessage || 'FAILURE'}`);
|
|
113
|
+
};
|
|
114
|
+
exports.asStatusError = asStatusError;
|
|
115
|
+
/** v5: any 2xx is a success (B5 § 6.6) */
|
|
116
|
+
const isSuccessStatus = (status) => status >= 200 && status < 300;
|
|
117
|
+
exports.isSuccessStatus = isSuccessStatus;
|
|
118
|
+
/** send a request and resolve the body: v5 success on any 2xx (204, or another 2xx with no body → `null`), other status codes reject */
|
|
119
|
+
const fetchProxyBody = async (req, logger) => {
|
|
120
|
+
const res = await (0, exports.sendRequest)(req).catch((e) => {
|
|
121
|
+
logger?.err?.('>>>>> requested! err=', e);
|
|
122
|
+
throw e;
|
|
123
|
+
});
|
|
124
|
+
if (!(0, exports.isSuccessStatus)(res.statusCode))
|
|
125
|
+
throw (0, exports.asStatusError)(res, logger);
|
|
126
|
+
//* v5: a 2xx other than 200·201 with no body (ex: 204) → `null` (200·201 keep the v4 empty-body result).
|
|
127
|
+
const noBody = res.body === undefined || res.body === '';
|
|
128
|
+
if (noBody && res.statusCode !== 200 && res.statusCode !== 201)
|
|
129
|
+
return null;
|
|
130
|
+
return (0, exports.reparseBody)(res.body, logger);
|
|
131
|
+
};
|
|
132
|
+
exports.fetchProxyBody = fetchProxyBody;
|
|
133
|
+
//# sourceMappingURL=http-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-fetch.js","sourceRoot":"","sources":["../../src/lib/http-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `lib/lazy.ts`
|
|
3
|
+
* - (internal) lazy singleton as a `Proxy`: nothing is built until the first trap.
|
|
4
|
+
* - not exported by the `lib` barrel.
|
|
5
|
+
*
|
|
6
|
+
* Why a Proxy (not a getter): the ESM wrapper reads every value export once at load
|
|
7
|
+
* (`export const X = cjs.X`). A getter would build the instance at that moment;
|
|
8
|
+
* reading a Proxy builds nothing.
|
|
9
|
+
*
|
|
10
|
+
* @author Steve Jung <steve@lemoncloud.io>
|
|
11
|
+
* @date 2026-10-27 v5 B2-b (S-25)
|
|
12
|
+
*
|
|
13
|
+
* @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* make a lazy instance: `factory()` runs once, on the first trap, and every trap is then delegated.
|
|
17
|
+
* - traps: `get`, `has`, `ownKeys`, `getOwnPropertyDescriptor`, `getPrototypeOf`, `set`.
|
|
18
|
+
* - `instanceof` works via `getPrototypeOf`.
|
|
19
|
+
*
|
|
20
|
+
* @param factory builds the real instance (called at most once)
|
|
21
|
+
*/
|
|
22
|
+
export declare const lazyInstance: <T extends object>(factory: () => T) => T;
|
package/dist/lib/lazy.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `lib/lazy.ts`
|
|
4
|
+
* - (internal) lazy singleton as a `Proxy`: nothing is built until the first trap.
|
|
5
|
+
* - not exported by the `lib` barrel.
|
|
6
|
+
*
|
|
7
|
+
* Why a Proxy (not a getter): the ESM wrapper reads every value export once at load
|
|
8
|
+
* (`export const X = cjs.X`). A getter would build the instance at that moment;
|
|
9
|
+
* reading a Proxy builds nothing.
|
|
10
|
+
*
|
|
11
|
+
* @author Steve Jung <steve@lemoncloud.io>
|
|
12
|
+
* @date 2026-10-27 v5 B2-b (S-25)
|
|
13
|
+
*
|
|
14
|
+
* @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.lazyInstance = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* make a lazy instance: `factory()` runs once, on the first trap, and every trap is then delegated.
|
|
20
|
+
* - traps: `get`, `has`, `ownKeys`, `getOwnPropertyDescriptor`, `getPrototypeOf`, `set`.
|
|
21
|
+
* - `instanceof` works via `getPrototypeOf`.
|
|
22
|
+
*
|
|
23
|
+
* @param factory builds the real instance (called at most once)
|
|
24
|
+
*/
|
|
25
|
+
const lazyInstance = (factory) => {
|
|
26
|
+
let instance = null;
|
|
27
|
+
// build once, then reuse.
|
|
28
|
+
const real = () => {
|
|
29
|
+
if (instance === null)
|
|
30
|
+
instance = factory();
|
|
31
|
+
return instance;
|
|
32
|
+
};
|
|
33
|
+
// the proxy target is an empty object; the real instance only lives in the closure.
|
|
34
|
+
const target = {};
|
|
35
|
+
return new Proxy(target, {
|
|
36
|
+
// read a property (own field, getter or method) from the real instance.
|
|
37
|
+
get: (_t, prop) => Reflect.get(real(), prop),
|
|
38
|
+
// `prop in proxy`.
|
|
39
|
+
has: (_t, prop) => Reflect.has(real(), prop),
|
|
40
|
+
// `Object.keys(proxy)` and friends.
|
|
41
|
+
ownKeys: () => Reflect.ownKeys(real()),
|
|
42
|
+
// descriptors must be configurable: the empty target does not hold the property (Proxy invariant).
|
|
43
|
+
getOwnPropertyDescriptor: (_t, prop) => {
|
|
44
|
+
const desc = Reflect.getOwnPropertyDescriptor(real(), prop);
|
|
45
|
+
return desc ? { ...desc, configurable: true } : undefined;
|
|
46
|
+
},
|
|
47
|
+
// the real prototype, so `proxy instanceof Class` is true.
|
|
48
|
+
getPrototypeOf: () => Reflect.getPrototypeOf(real()),
|
|
49
|
+
// write a property on the real instance.
|
|
50
|
+
set: (_t, prop, value) => Reflect.set(real(), prop, value),
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
exports.lazyInstance = lazyInstance;
|
|
54
|
+
//# sourceMappingURL=lazy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../src/lib/lazy.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH;;;;;;GAMG;AACI,MAAM,YAAY,GAAG,CAAmB,OAAgB,EAAK,EAAE;IAClE,IAAI,QAAQ,GAAM,IAAI,CAAC;IACvB,0BAA0B;IAC1B,MAAM,IAAI,GAAG,GAAM,EAAE;QACjB,IAAI,QAAQ,KAAK,IAAI;YAAE,QAAQ,GAAG,OAAO,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;IACF,oFAAoF;IACpF,MAAM,MAAM,GAAG,EAAO,CAAC;IACvB,OAAO,IAAI,KAAK,CAAI,MAAM,EAAE;QACxB,wEAAwE;QACxE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC;QAC5C,mBAAmB;QACnB,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC;QAC5C,oCAAoC;QACpC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,mGAAmG;QACnG,wBAAwB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,OAAO,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,CAAC;QACD,2DAA2D;QAC3D,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACpD,yCAAyC;QACzC,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC;KAC7D,CAAC,CAAC;AACP,CAAC,CAAC;AA1BW,QAAA,YAAY,gBA0BvB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `lib/perf.ts`
|
|
3
|
+
* - (internal) performance checkpoint helpers for the `PERF` log lines (v5 B2-c, D40).
|
|
4
|
+
* - not exported by the `lib` barrel.
|
|
5
|
+
* - imports nothing from `engine/`: the caller passes its logger and namespace,
|
|
6
|
+
* so `tools/` and other engine-free files can use it too.
|
|
7
|
+
*
|
|
8
|
+
* line format: `log(ns, '>', label, '<ms> ms')` with one decimal, e.g. `PERF: > lazy-load <package> 12.3 ms`.
|
|
9
|
+
*
|
|
10
|
+
* @author Steve Jung <steve@lemoncloud.io>
|
|
11
|
+
* @date 2026-10-27 v5 B2-c (D40)
|
|
12
|
+
*
|
|
13
|
+
* @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
|
|
14
|
+
*/
|
|
15
|
+
/** a logger like `_inf` or `$engine.inf`. */
|
|
16
|
+
export type PerfLogger = (...args: any[]) => void;
|
|
17
|
+
/**
|
|
18
|
+
* current monotonic time in ms (from `process.hrtime.bigint()`).
|
|
19
|
+
*/
|
|
20
|
+
export declare const nowMs: () => number;
|
|
21
|
+
/**
|
|
22
|
+
* run `fn` and print one line with its elapsed ms; returns the result.
|
|
23
|
+
* - an exception is thrown as is, and no line is printed.
|
|
24
|
+
*
|
|
25
|
+
* @param log logger (e.g. `_inf`)
|
|
26
|
+
* @param ns namespace (e.g. `$U.NS('PERF', 'cyan')`)
|
|
27
|
+
* @param label checkpoint label (no values, no hosts)
|
|
28
|
+
* @param fn the work to measure
|
|
29
|
+
*/
|
|
30
|
+
export declare const measure: <T>(log: PerfLogger, ns: string, label: string, fn: () => T) => T;
|
|
31
|
+
/**
|
|
32
|
+
* the async version of `measure()`: the line is printed after `fn()` resolves.
|
|
33
|
+
* - a rejection is passed through, and no line is printed.
|
|
34
|
+
*/
|
|
35
|
+
export declare const measureAsync: <T>(log: PerfLogger, ns: string, label: string, fn: () => Promise<T>) => Promise<T>;
|
package/dist/lib/perf.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `lib/perf.ts`
|
|
4
|
+
* - (internal) performance checkpoint helpers for the `PERF` log lines (v5 B2-c, D40).
|
|
5
|
+
* - not exported by the `lib` barrel.
|
|
6
|
+
* - imports nothing from `engine/`: the caller passes its logger and namespace,
|
|
7
|
+
* so `tools/` and other engine-free files can use it too.
|
|
8
|
+
*
|
|
9
|
+
* line format: `log(ns, '>', label, '<ms> ms')` with one decimal, e.g. `PERF: > lazy-load <package> 12.3 ms`.
|
|
10
|
+
*
|
|
11
|
+
* @author Steve Jung <steve@lemoncloud.io>
|
|
12
|
+
* @date 2026-10-27 v5 B2-c (D40)
|
|
13
|
+
*
|
|
14
|
+
* @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.measureAsync = exports.measure = exports.nowMs = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* current monotonic time in ms (from `process.hrtime.bigint()`).
|
|
20
|
+
*/
|
|
21
|
+
const nowMs = () => Number(process.hrtime.bigint()) / 1e6;
|
|
22
|
+
exports.nowMs = nowMs;
|
|
23
|
+
// format the elapsed ms with one decimal.
|
|
24
|
+
const asMs = (t0) => `${((0, exports.nowMs)() - t0).toFixed(1)} ms`;
|
|
25
|
+
/**
|
|
26
|
+
* run `fn` and print one line with its elapsed ms; returns the result.
|
|
27
|
+
* - an exception is thrown as is, and no line is printed.
|
|
28
|
+
*
|
|
29
|
+
* @param log logger (e.g. `_inf`)
|
|
30
|
+
* @param ns namespace (e.g. `$U.NS('PERF', 'cyan')`)
|
|
31
|
+
* @param label checkpoint label (no values, no hosts)
|
|
32
|
+
* @param fn the work to measure
|
|
33
|
+
*/
|
|
34
|
+
const measure = (log, ns, label, fn) => {
|
|
35
|
+
const t0 = (0, exports.nowMs)();
|
|
36
|
+
const res = fn();
|
|
37
|
+
log(ns, '>', label, asMs(t0));
|
|
38
|
+
return res;
|
|
39
|
+
};
|
|
40
|
+
exports.measure = measure;
|
|
41
|
+
/**
|
|
42
|
+
* the async version of `measure()`: the line is printed after `fn()` resolves.
|
|
43
|
+
* - a rejection is passed through, and no line is printed.
|
|
44
|
+
*/
|
|
45
|
+
const measureAsync = async (log, ns, label, fn) => {
|
|
46
|
+
const t0 = (0, exports.nowMs)();
|
|
47
|
+
const res = await fn();
|
|
48
|
+
log(ns, '>', label, asMs(t0));
|
|
49
|
+
return res;
|
|
50
|
+
};
|
|
51
|
+
exports.measureAsync = measureAsync;
|
|
52
|
+
//# sourceMappingURL=perf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perf.js","sourceRoot":"","sources":["../../src/lib/perf.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAKH;;GAEG;AACI,MAAM,KAAK,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC;AAA5D,QAAA,KAAK,SAAuD;AAEzE,0CAA0C;AAC1C,MAAM,IAAI,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,GAAG,CAAC,IAAA,aAAK,GAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAEvE;;;;;;;;GAQG;AACI,MAAM,OAAO,GAAG,CAAI,GAAe,EAAE,EAAU,EAAE,KAAa,EAAE,EAAW,EAAK,EAAE;IACrF,MAAM,EAAE,GAAG,IAAA,aAAK,GAAE,CAAC;IACnB,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AALW,QAAA,OAAO,WAKlB;AAEF;;;GAGG;AACI,MAAM,YAAY,GAAG,KAAK,EAAK,GAAe,EAAE,EAAU,EAAE,KAAa,EAAE,EAAoB,EAAc,EAAE;IAClH,MAAM,EAAE,GAAG,IAAA,aAAK,GAAE,CAAC;IACnB,MAAM,GAAG,GAAG,MAAM,EAAE,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB"}
|
package/dist/tools/tools.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { CrendentialForAWS } from '../environ';
|
|
2
|
-
import { RuntimeConfigAwsCredentialIdentityProvider } from '@aws-sdk/types/dist-types/identity/AwsCredentialIdentity';
|
|
3
2
|
import { LemonEngine } from '../engine/types';
|
|
3
|
+
/**
|
|
4
|
+
* type: `AwsCredentialProvider`
|
|
5
|
+
* - the credentials provider (an async function) for the AWS SDK clients.
|
|
6
|
+
* - local structural type (v5 B2-c): no AWS SDK type in the published `.d.ts`.
|
|
7
|
+
* - not exported (no new root name); it shows in `.d.ts` through `AwsConfigParams.credentials`.
|
|
8
|
+
*/
|
|
9
|
+
type AwsCredentialProvider = (props?: Record<string, any>) => Promise<{
|
|
10
|
+
accessKeyId: string;
|
|
11
|
+
secretAccessKey: string;
|
|
12
|
+
sessionToken?: string;
|
|
13
|
+
expiration?: Date;
|
|
14
|
+
}>;
|
|
4
15
|
/**
|
|
5
16
|
* Check if the current environment is AWS Lambda
|
|
6
17
|
* @returns {boolean} - true if running in AWS Lambda environment
|
|
@@ -31,7 +42,7 @@ export interface AwsConfigParams {
|
|
|
31
42
|
/** AWS profile */
|
|
32
43
|
profile?: string;
|
|
33
44
|
/** AWS credentials provider */
|
|
34
|
-
credentials?:
|
|
45
|
+
credentials?: AwsCredentialProvider;
|
|
35
46
|
}
|
|
36
47
|
/**
|
|
37
48
|
* load config for aws sdk
|
|
@@ -48,5 +59,6 @@ export interface AwsConfigParams {
|
|
|
48
59
|
export declare const awsConfig: <T extends AwsConfigParams>($engine: LemonEngine,
|
|
49
60
|
/** params or region */
|
|
50
61
|
params?: T | string | (() => string)) => T & {
|
|
51
|
-
credentials?:
|
|
62
|
+
credentials?: AwsCredentialProvider;
|
|
52
63
|
};
|
|
64
|
+
export {};
|
package/dist/tools/tools.js
CHANGED
|
@@ -23,8 +23,24 @@ exports.awsConfig = exports.asyncCredentials = exports.loadDataYml = exports.loa
|
|
|
23
23
|
*/
|
|
24
24
|
const fs_1 = __importDefault(require("fs"));
|
|
25
25
|
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
26
|
-
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
27
26
|
const test_helper_1 = require("../common/test-helper");
|
|
27
|
+
const perf_1 = require("../lib/perf");
|
|
28
|
+
/**
|
|
29
|
+
* `@aws-sdk/credential-providers`, required on the first use (not at import; v5 B2-c, K6).
|
|
30
|
+
*/
|
|
31
|
+
let $credentialProviders = null;
|
|
32
|
+
// memoized sync loader; prints `PERF > lazy-load ...` only when an engine logger is given (`awsConfig`).
|
|
33
|
+
const loadCredentialProviders = ($engine) => {
|
|
34
|
+
if (!$credentialProviders) {
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
36
|
+
const load = () => require('@aws-sdk/credential-providers');
|
|
37
|
+
$credentialProviders =
|
|
38
|
+
$engine?.inf && $engine?.U
|
|
39
|
+
? (0, perf_1.measure)($engine.inf, $engine.U.NS('PERF', 'cyan'), 'lazy-load @aws-sdk/credential-providers', load)
|
|
40
|
+
: load();
|
|
41
|
+
}
|
|
42
|
+
return $credentialProviders;
|
|
43
|
+
};
|
|
28
44
|
/**
|
|
29
45
|
* Check if the current environment is AWS Lambda
|
|
30
46
|
* @returns {boolean} - true if running in AWS Lambda environment
|
|
@@ -66,7 +82,8 @@ exports.loadDataYml = loadDataYml;
|
|
|
66
82
|
* @returns {Promise<CrendentialForAWS>} - AWS credentials
|
|
67
83
|
*/
|
|
68
84
|
const asyncCredentials = async (profile) => {
|
|
69
|
-
|
|
85
|
+
//* no logger here: `PERF` is printed only when `awsConfig()` loads the package first.
|
|
86
|
+
const provider = loadCredentialProviders().fromIni({ profile });
|
|
70
87
|
const $res = await provider();
|
|
71
88
|
return { ...$res, profile };
|
|
72
89
|
};
|
|
@@ -107,11 +124,11 @@ params) => {
|
|
|
107
124
|
});
|
|
108
125
|
if (typeof $conf.region === 'string' && !$conf.region)
|
|
109
126
|
throw new Error(`.region[${$conf.region}] is invalid (empty) - ${errScope}`);
|
|
110
|
-
//! load the credentials provider(async function).
|
|
127
|
+
//! load the credentials provider(async function); the package is loaded only when a profile is set.
|
|
111
128
|
const credentials = typeof $conf.credentials === 'function'
|
|
112
129
|
? $conf.credentials
|
|
113
130
|
: $conf.profile
|
|
114
|
-
? (
|
|
131
|
+
? loadCredentialProviders($engine).fromIni({ profile: $conf.profile })
|
|
115
132
|
: undefined;
|
|
116
133
|
return (0, test_helper_1.onlyDefined)({ ...$conf, credentials });
|
|
117
134
|
};
|
package/dist/tools/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,4CAAoB;AACpB,sDAA2B;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,58 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lemon-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Lemon Serverless Micro-Service Platform",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/esm/index.mjs",
|
|
11
|
+
"require": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./testing": {
|
|
15
|
+
"types": "./dist/common/test-helper.d.ts",
|
|
16
|
+
"import": "./dist/esm/testing.mjs",
|
|
17
|
+
"require": "./dist/common/test-helper.js",
|
|
18
|
+
"default": "./dist/common/test-helper.js"
|
|
19
|
+
},
|
|
20
|
+
"./dist/environ": {
|
|
21
|
+
"types": "./dist/environ.d.ts",
|
|
22
|
+
"import": "./dist/environ.js",
|
|
23
|
+
"require": "./dist/environ.js",
|
|
24
|
+
"default": "./dist/environ.js"
|
|
25
|
+
},
|
|
26
|
+
"./dist/cores/lambda/lambda-web-handler": {
|
|
27
|
+
"types": "./dist/cores/lambda/lambda-web-handler.d.ts",
|
|
28
|
+
"import": "./dist/cores/lambda/lambda-web-handler.js",
|
|
29
|
+
"require": "./dist/cores/lambda/lambda-web-handler.js",
|
|
30
|
+
"default": "./dist/cores/lambda/lambda-web-handler.js"
|
|
31
|
+
},
|
|
32
|
+
"./dist/extended/cores": {
|
|
33
|
+
"types": "./dist/extended/cores/index.d.ts",
|
|
34
|
+
"import": "./dist/extended/cores/index.js",
|
|
35
|
+
"require": "./dist/extended/cores/index.js",
|
|
36
|
+
"default": "./dist/extended/cores/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./dist/*": {
|
|
39
|
+
"types": "./dist/*.d.ts",
|
|
40
|
+
"import": "./dist/*.js",
|
|
41
|
+
"require": "./dist/*.js",
|
|
42
|
+
"default": "./dist/*.js"
|
|
43
|
+
},
|
|
44
|
+
"./package.json": "./package.json"
|
|
45
|
+
},
|
|
7
46
|
"scripts": {
|
|
8
|
-
"build": "npm run
|
|
47
|
+
"build": "npm run build-ts && node scripts/gen-esm-wrapper.cjs",
|
|
9
48
|
"build-ts": "tsc -v && tsc",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
49
|
+
"!v5": "------- v5 packaging gates -----",
|
|
50
|
+
"esm:smoke": "LS=1 node scripts/esm-smoke.mjs",
|
|
51
|
+
"api:names": "node scripts/api-names.cjs --out -",
|
|
52
|
+
"api:check": "node scripts/api-check.cjs",
|
|
53
|
+
"dup:check": "node scripts/dup-decls.cjs",
|
|
54
|
+
"l1l2:probe": "node scripts/l1l2-probe.cjs",
|
|
14
55
|
"watch-ts": "tsc -w",
|
|
15
|
-
"doc": "npm run doc:html && open dist/docs/index.html",
|
|
16
|
-
"doc:html": "typedoc src/ --exclude **/*.spec.ts --out dist/docs",
|
|
17
|
-
"doc:publish": "npm run doc:html && gh-pages -m \"docs(gh-pages): publish gh-pages via typedoc\" -d dist/docs",
|
|
18
56
|
"lint": "tsc --noEmit && eslint '*/**/*.{js,ts,jsx,tsx}' --fix",
|
|
19
57
|
"format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"",
|
|
20
58
|
"!test": "------- run self-test with vitest -----",
|
|
@@ -22,7 +60,7 @@
|
|
|
22
60
|
"test.lemon": "ENV=lemon npm run test",
|
|
23
61
|
"test:dev": "LS=1 vitest",
|
|
24
62
|
"!test:watch": "---- custom test with profile -----",
|
|
25
|
-
"test:watch": "
|
|
63
|
+
"test:watch": "LS=1 vitest",
|
|
26
64
|
"test:watch.lemon": "ENV=lemon npm run test:watch",
|
|
27
65
|
"!prepare": "------- run self-test with vitest -----",
|
|
28
66
|
"prepare": "npm run build",
|
|
@@ -52,72 +90,91 @@
|
|
|
52
90
|
"license": "MIT",
|
|
53
91
|
"dependencies": {
|
|
54
92
|
"@aws-sdk/client-dynamodb": "^3.971.0",
|
|
55
|
-
"@aws-sdk/client-dynamodb-streams": "^3.971.0",
|
|
56
|
-
"@aws-sdk/client-iam": "^3.971.0",
|
|
57
|
-
"@aws-sdk/client-kms": "^3.971.0",
|
|
58
|
-
"@aws-sdk/client-lambda": "^3.971.0",
|
|
59
|
-
"@aws-sdk/client-s3": "^3.971.0",
|
|
60
|
-
"@aws-sdk/client-sns": "^3.971.0",
|
|
61
|
-
"@aws-sdk/client-sqs": "^3.971.0",
|
|
62
|
-
"@aws-sdk/client-sts": "^3.971.0",
|
|
63
|
-
"@aws-sdk/credential-providers": "^3.971.0",
|
|
64
93
|
"@aws-sdk/lib-dynamodb": "^3.971.0",
|
|
65
|
-
"@
|
|
94
|
+
"@opensearch-project/opensearch": "^3.9.0",
|
|
66
95
|
"@types/aws-lambda": "^8.10.62",
|
|
67
|
-
"@types/ioredis": "^4.28.10",
|
|
68
96
|
"@types/jsonwebtoken": "^8.5.9",
|
|
69
97
|
"async": "^3.2.4",
|
|
70
98
|
"crypto-js": "^4.2.0",
|
|
71
|
-
"ioredis": "^5.2.3",
|
|
72
99
|
"js-yaml": "^4.1.1",
|
|
73
100
|
"jsonwebtoken": "^9.0.3",
|
|
74
|
-
"lemon-model": "^
|
|
75
|
-
"lodash": "^4.17.21",
|
|
76
|
-
"memcached": "^2.2.2",
|
|
101
|
+
"lemon-model": "^5.0.0",
|
|
77
102
|
"mime-types": "^3.0.2",
|
|
78
103
|
"node-cache": "^5.1.2",
|
|
79
104
|
"qs": "^6.15.1",
|
|
80
105
|
"query-string": "^7.1.3",
|
|
81
|
-
"request": "^2.88.2",
|
|
82
106
|
"source-map-support": "^0.5.21",
|
|
83
107
|
"uuid": "^9.0.1"
|
|
84
108
|
},
|
|
85
109
|
"devDependencies": {
|
|
86
|
-
"@aws-sdk/
|
|
87
|
-
"@
|
|
110
|
+
"@aws-sdk/client-iam": "^3.971.0",
|
|
111
|
+
"@aws-sdk/client-kms": "^3.971.0",
|
|
112
|
+
"@aws-sdk/client-lambda": "^3.971.0",
|
|
113
|
+
"@aws-sdk/client-s3": "^3.971.0",
|
|
114
|
+
"@aws-sdk/client-sns": "^3.971.0",
|
|
115
|
+
"@aws-sdk/client-sqs": "^3.971.0",
|
|
116
|
+
"@aws-sdk/client-sts": "^3.971.0",
|
|
117
|
+
"@aws-sdk/credential-providers": "^3.971.0",
|
|
88
118
|
"@types/async": "^3.2.15",
|
|
89
119
|
"@types/crypto-js": "^4.2.2",
|
|
90
120
|
"@types/js-yaml": "^3.12.5",
|
|
91
|
-
"@types/lodash": "^4.17.16",
|
|
92
|
-
"@types/memcached": "^2.2.6",
|
|
93
121
|
"@types/mime-types": "^2.1.0",
|
|
94
122
|
"@types/node": "^24.12.2",
|
|
95
123
|
"@types/qs": "^6.14.0",
|
|
96
|
-
"@types/request": "^2.48.8",
|
|
97
124
|
"@types/supertest": "^2.0.10",
|
|
98
125
|
"@types/uuid": "^8.3.4",
|
|
99
126
|
"@typescript-eslint/eslint-plugin": "^5.15.0",
|
|
100
127
|
"@typescript-eslint/parser": "^5.15.0",
|
|
101
128
|
"@vitest/coverage-v8": "^4.1.4",
|
|
102
|
-
"codecov": "^3.7.2",
|
|
103
129
|
"concurrently": "^5.3.0",
|
|
104
|
-
"dotenv": "^8.2.0",
|
|
105
130
|
"eslint": "^8.23.1",
|
|
106
131
|
"eslint-config-prettier": "^8.5.0",
|
|
107
132
|
"eslint-plugin-prettier": "^4.0.0",
|
|
108
133
|
"faker": "^4.1.0",
|
|
109
|
-
"
|
|
110
|
-
"husky": "^8.0.3",
|
|
111
|
-
"lemon-devkit": "^0.0.11",
|
|
134
|
+
"lemon-devkit": "^0.2.1",
|
|
112
135
|
"lint-staged": "^13.1.0",
|
|
113
136
|
"prettier": "^2.7.1",
|
|
114
|
-
"
|
|
115
|
-
"supertest": "^4.0.2",
|
|
137
|
+
"supertest": "^7.3.1",
|
|
116
138
|
"ts-node": "^8.10.2",
|
|
117
|
-
"typedoc": "^0.28.19",
|
|
118
139
|
"typescript": "^5.9.3",
|
|
119
140
|
"vitest": "^4.1.4"
|
|
120
141
|
},
|
|
142
|
+
"peerDependencies": {
|
|
143
|
+
"@aws-sdk/client-iam": "^3.971.0",
|
|
144
|
+
"@aws-sdk/client-kms": "^3.971.0",
|
|
145
|
+
"@aws-sdk/client-lambda": "^3.971.0",
|
|
146
|
+
"@aws-sdk/client-s3": "^3.971.0",
|
|
147
|
+
"@aws-sdk/client-sns": "^3.971.0",
|
|
148
|
+
"@aws-sdk/client-sqs": "^3.971.0",
|
|
149
|
+
"@aws-sdk/client-sts": "^3.971.0",
|
|
150
|
+
"@aws-sdk/credential-providers": "^3.971.0"
|
|
151
|
+
},
|
|
152
|
+
"peerDependenciesMeta": {
|
|
153
|
+
"@aws-sdk/client-iam": {
|
|
154
|
+
"optional": true
|
|
155
|
+
},
|
|
156
|
+
"@aws-sdk/client-kms": {
|
|
157
|
+
"optional": true
|
|
158
|
+
},
|
|
159
|
+
"@aws-sdk/client-lambda": {
|
|
160
|
+
"optional": true
|
|
161
|
+
},
|
|
162
|
+
"@aws-sdk/client-s3": {
|
|
163
|
+
"optional": true
|
|
164
|
+
},
|
|
165
|
+
"@aws-sdk/client-sns": {
|
|
166
|
+
"optional": true
|
|
167
|
+
},
|
|
168
|
+
"@aws-sdk/client-sqs": {
|
|
169
|
+
"optional": true
|
|
170
|
+
},
|
|
171
|
+
"@aws-sdk/client-sts": {
|
|
172
|
+
"optional": true
|
|
173
|
+
},
|
|
174
|
+
"@aws-sdk/credential-providers": {
|
|
175
|
+
"optional": true
|
|
176
|
+
}
|
|
177
|
+
},
|
|
121
178
|
"private": false,
|
|
122
179
|
"repository": {
|
|
123
180
|
"type": "git",
|