@mrxsys/mrx-core 2.11.1-1-and-275-20251023 → 2.12.0-1-and-288-20251203
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/{chunk-0d0zd2yg.js → chunk-037vwvd4.js} +2 -2
- package/dist/{chunk-jksb9ers.js → chunk-10w8mg8e.js} +1 -1
- package/dist/{chunk-dre2fgj0.js → chunk-2z8amjqt.js} +1 -1
- package/dist/chunk-4t7sy5qt.js +10 -0
- package/dist/chunk-642xajvx.js +59 -0
- package/dist/chunk-6hs00zfd.js +13 -0
- package/dist/chunk-8pw0syzf.js +9 -0
- package/dist/{chunk-eeb7yskp.js → chunk-awphtyzp.js} +4 -4
- package/dist/{chunk-8tffnbpn.js → chunk-ayyrgqyv.js} +1 -1
- package/dist/{chunk-12qzn7jw.js → chunk-dmsev7vs.js} +1 -1
- package/dist/{chunk-gtn1kn0z.js → chunk-hv6g22kf.js} +4 -4
- package/dist/chunk-hwfebx4x.js +11 -0
- package/dist/chunk-j7dyc5ks.js +101 -0
- package/dist/chunk-jz3wd472.js +23 -0
- package/dist/{chunk-afd82epa.js → chunk-kne89z1w.js} +13 -13
- package/dist/{chunk-fs3wm3p4.js → chunk-r7yr9p57.js} +6 -6
- package/dist/{chunk-afyz8rg5.js → chunk-s53cbgkb.js} +28 -18
- package/dist/chunk-txazb0xn.js +27 -0
- package/dist/chunk-y5dtkmnp.js +8 -0
- package/dist/chunk-yrt0ffvf.js +9 -0
- package/dist/chunk-zn2nm5gg.js +9 -0
- package/dist/{chunk-7t524zqh.js → chunk-zv4ta4fb.js} +3 -3
- package/dist/errors/{base-error.d.ts → app-error.d.ts} +2 -1
- package/dist/errors/http-error.d.ts +2 -2
- package/dist/errors/index.d.ts +2 -1
- package/dist/errors/index.js +6 -4
- package/dist/errors/internal-error.d.ts +4 -0
- package/dist/modules/data/data.d.ts +5 -5
- package/dist/modules/data/enums/data-error-keys.d.ts +1 -1
- package/dist/modules/data/enums/index.js +1 -1
- package/dist/modules/data/index.js +3 -3
- package/dist/modules/database/enums/database-error-keys.d.ts +26 -26
- package/dist/modules/database/enums/index.js +1 -1
- package/dist/modules/database/enums/mssql-error-code.d.ts +23 -23
- package/dist/modules/database/index.js +5 -5
- package/dist/modules/database/mssql.d.ts +9 -9
- package/dist/modules/elysia/cache/cache.d.ts +1 -1
- package/dist/modules/elysia/cache/index.js +3 -3
- package/dist/modules/elysia/db-resolver/enums/db-resolver-error-keys.d.ts +1 -1
- package/dist/modules/elysia/db-resolver/enums/index.js +1 -1
- package/dist/modules/elysia/db-resolver/index.js +53 -10
- package/dist/modules/elysia/error/enums/error.keys.d.ts +4 -4
- package/dist/modules/elysia/error/enums/index.js +1 -1
- package/dist/modules/elysia/error/error.d.ts +5 -5
- package/dist/modules/elysia/error/index.js +14 -14
- package/dist/modules/elysia/microservice/enums/index.js +1 -1
- package/dist/modules/elysia/microservice/enums/microservice-success-keys.d.ts +2 -2
- package/dist/modules/elysia/microservice/index.js +1 -1
- package/dist/modules/elysia/rate-limit/enums/index.js +1 -1
- package/dist/modules/elysia/rate-limit/enums/rate-limit-error-keys.d.ts +1 -1
- package/dist/modules/elysia/rate-limit/index.js +7 -6
- package/dist/modules/elysia/rate-limit/rate-limit.d.ts +1 -1
- package/dist/modules/jwt/enums/index.js +2 -2
- package/dist/modules/jwt/enums/jwt-error-keys.d.ts +3 -3
- package/dist/modules/jwt/enums/parse-human-time-to-seconds-error-keys.d.ts +1 -1
- package/dist/modules/jwt/index.js +10 -12
- package/dist/modules/jwt/utils/index.js +3 -3
- package/dist/modules/jwt/utils/parse-human-time-to-seconds.d.ts +1 -1
- package/dist/modules/kv-store/bun-redis/index.js +25 -17
- package/dist/modules/kv-store/enums/index.js +1 -1
- package/dist/modules/kv-store/enums/kv-store-error-keys.d.ts +3 -3
- package/dist/modules/kv-store/ioredis/index.js +17 -17
- package/dist/modules/kv-store/memory/index.js +4 -98
- package/dist/modules/logger/enums/index.js +1 -1
- package/dist/modules/logger/enums/logger-error-keys.d.ts +7 -7
- package/dist/modules/logger/events/logger-events.d.ts +4 -4
- package/dist/modules/logger/index.js +91 -20
- package/dist/modules/logger/logger.d.ts +2 -2
- package/dist/modules/logger/sinks/console-logger.d.ts +1 -1
- package/dist/modules/logger/sinks/file-logger/enums/file-logger-error-keys.d.ts +1 -1
- package/dist/modules/logger/sinks/file-logger/file-logger.d.ts +3 -3
- package/dist/modules/logger/sinks/index.js +10 -11
- package/dist/modules/logger/types/logger-options.d.ts +1 -1
- package/dist/modules/logger/types/logger-sink.d.ts +1 -1
- package/dist/modules/logger/worker-logger.d.ts +1 -0
- package/dist/modules/mailer/enums/index.js +1 -1
- package/dist/modules/mailer/enums/mailer-error-keys.d.ts +3 -3
- package/dist/modules/mailer/index.js +6 -6
- package/dist/modules/mailer/smtp.d.ts +4 -4
- package/dist/modules/repository/index.js +4 -4
- package/dist/modules/repository/repository.d.ts +28 -12
- package/dist/modules/repository/types/filter.d.ts +2 -5
- package/dist/modules/repository/types/global-search.d.ts +12 -0
- package/dist/modules/repository/types/index.d.ts +2 -1
- package/dist/modules/repository/types/{order-by-item.d.ts → order-by.d.ts} +3 -3
- package/dist/modules/repository/types/query-options.d.ts +4 -5
- package/dist/modules/schema-builder/build-adaptive-where-clause-schema.d.ts +17 -0
- package/dist/modules/schema-builder/build-count-schema.d.ts +12 -0
- package/dist/modules/{elysia/crud/utils/create-delete-schema.d.ts → schema-builder/build-delete-schema.d.ts} +3 -3
- package/dist/modules/schema-builder/build-filters-schema.d.ts +12 -0
- package/dist/modules/schema-builder/build-find-schema.d.ts +12 -0
- package/dist/modules/schema-builder/build-global-search-schema.d.ts +12 -0
- package/dist/modules/schema-builder/build-insert-schema.d.ts +3 -0
- package/dist/modules/schema-builder/build-order-by-schema.d.ts +12 -0
- package/dist/modules/schema-builder/build-selected-fields.d.ts +12 -0
- package/dist/modules/schema-builder/build-update-one-schema.d.ts +12 -0
- package/dist/modules/schema-builder/build-update-schema.d.ts +12 -0
- package/dist/modules/schema-builder/clean-schema.d.ts +2 -0
- package/dist/modules/schema-builder/index.d.ts +12 -0
- package/dist/modules/schema-builder/index.js +230 -0
- package/dist/modules/{elysia/crud → schema-builder}/types/count-schema.d.ts +3 -3
- package/dist/modules/schema-builder/types/delete-schema.d.ts +12 -0
- package/dist/modules/schema-builder/types/filter-schema.d.ts +12 -0
- package/dist/modules/schema-builder/types/find-schema.d.ts +16 -0
- package/dist/modules/{elysia/crud/types/q-schema.d.ts → schema-builder/types/global-search-schema.d.ts} +1 -1
- package/dist/modules/schema-builder/types/index.d.ts +12 -0
- package/dist/modules/{elysia/crud → schema-builder}/types/insert-schema.d.ts +1 -1
- package/dist/modules/schema-builder/types/order-by-schema.d.ts +5 -0
- package/dist/modules/{elysia/crud → schema-builder}/types/update-schema.d.ts +4 -4
- package/dist/{shared → modules/schema-builder}/utils/flatten.d.ts +1 -1
- package/dist/modules/schema-builder/utils/index.d.ts +2 -0
- package/dist/modules/schema-builder/utils/index.js +9 -0
- package/dist/modules/singleton-manager/enums/index.js +1 -1
- package/dist/modules/singleton-manager/enums/singleton-manager-error-keys.d.ts +2 -2
- package/dist/modules/singleton-manager/index.js +3 -3
- package/dist/modules/singleton-manager/singleton-manager.d.ts +3 -3
- package/dist/modules/totp/enums/index.js +1 -1
- package/dist/modules/totp/enums/totp-error-keys.d.ts +5 -5
- package/dist/modules/totp/index.js +6 -6
- package/dist/modules/totp/otp-auth-uri.d.ts +1 -1
- package/dist/modules/totp/utils/base32.d.ts +1 -1
- package/dist/modules/totp/utils/generate-secret-bytes.d.ts +1 -1
- package/dist/modules/totp/utils/index.js +5 -5
- package/dist/shared/types/index.d.ts +0 -1
- package/dist/shared/utils/env.d.ts +1 -1
- package/dist/shared/utils/index.d.ts +0 -1
- package/dist/shared/utils/index.js +4 -8
- package/package.json +19 -22
- package/dist/chunk-441xs5k1.js +0 -53
- package/dist/chunk-4v86f7gp.js +0 -59
- package/dist/chunk-6w9ja96e.js +0 -9
- package/dist/chunk-9cgzhc50.js +0 -15
- package/dist/chunk-9d3zvgp6.js +0 -9
- package/dist/chunk-9dzsj7f2.js +0 -23
- package/dist/chunk-9r5anep5.js +0 -11
- package/dist/chunk-p14h6jfs.js +0 -365
- package/dist/chunk-pjv1ekwr.js +0 -284
- package/dist/chunk-rz5p4j3p.js +0 -13
- package/dist/chunk-spnh9dzk.js +0 -10
- package/dist/chunk-w7h898m3.js +0 -14
- package/dist/chunk-xhhj1gvj.js +0 -9
- package/dist/chunk-z0ct35ft.js +0 -8
- package/dist/errors/utils/index.d.ts +0 -1
- package/dist/errors/utils/index.js +0 -16
- package/dist/errors/utils/is-nowarajs-error.ts.d.ts +0 -4
- package/dist/modules/elysia/crud/crud-schema.d.ts +0 -18
- package/dist/modules/elysia/crud/crud.d.ts +0 -38
- package/dist/modules/elysia/crud/enums/crud-success-keys.d.ts +0 -10
- package/dist/modules/elysia/crud/enums/index.d.ts +0 -1
- package/dist/modules/elysia/crud/enums/index.js +0 -7
- package/dist/modules/elysia/crud/index.d.ts +0 -2
- package/dist/modules/elysia/crud/index.js +0 -153
- package/dist/modules/elysia/crud/operations/count.d.ts +0 -258
- package/dist/modules/elysia/crud/operations/delete.d.ts +0 -258
- package/dist/modules/elysia/crud/operations/deleteOne.d.ts +0 -258
- package/dist/modules/elysia/crud/operations/find.d.ts +0 -258
- package/dist/modules/elysia/crud/operations/findOne.d.ts +0 -258
- package/dist/modules/elysia/crud/operations/index.d.ts +0 -8
- package/dist/modules/elysia/crud/operations/index.js +0 -34
- package/dist/modules/elysia/crud/operations/insert.d.ts +0 -258
- package/dist/modules/elysia/crud/operations/update.d.ts +0 -268
- package/dist/modules/elysia/crud/operations/updateOne.d.ts +0 -268
- package/dist/modules/elysia/crud/operations/utils/get-db-injection.d.ts +0 -8
- package/dist/modules/elysia/crud/types/count-response-200-schema.d.ts +0 -5
- package/dist/modules/elysia/crud/types/crud-operation-base.d.ts +0 -4
- package/dist/modules/elysia/crud/types/crud-operation-count.d.ts +0 -14
- package/dist/modules/elysia/crud/types/crud-operation-delete-one.d.ts +0 -14
- package/dist/modules/elysia/crud/types/crud-operation-delete.d.ts +0 -14
- package/dist/modules/elysia/crud/types/crud-operation-find-one.d.ts +0 -14
- package/dist/modules/elysia/crud/types/crud-operation-find.d.ts +0 -14
- package/dist/modules/elysia/crud/types/crud-operation-insert.d.ts +0 -14
- package/dist/modules/elysia/crud/types/crud-operation-update-one.d.ts +0 -16
- package/dist/modules/elysia/crud/types/crud-operation-update.d.ts +0 -14
- package/dist/modules/elysia/crud/types/crud-operations.d.ts +0 -19
- package/dist/modules/elysia/crud/types/crud-options.d.ts +0 -44
- package/dist/modules/elysia/crud/types/crud-schema-models-type.d.ts +0 -12
- package/dist/modules/elysia/crud/types/crud-schema-operations.d.ts +0 -10
- package/dist/modules/elysia/crud/types/crud-schema-options.d.ts +0 -13
- package/dist/modules/elysia/crud/types/delete-schema.d.ts +0 -12
- package/dist/modules/elysia/crud/types/filter-schema.d.ts +0 -9
- package/dist/modules/elysia/crud/types/find-schema.d.ts +0 -16
- package/dist/modules/elysia/crud/types/id-param-schema.d.ts +0 -4
- package/dist/modules/elysia/crud/types/index.d.ts +0 -29
- package/dist/modules/elysia/crud/types/order-schema.d.ts +0 -11
- package/dist/modules/elysia/crud/types/properties-schema.d.ts +0 -9
- package/dist/modules/elysia/crud/types/response-200-schema.d.ts +0 -11
- package/dist/modules/elysia/crud/utils/create-adaptive-where-clause-schema.d.ts +0 -17
- package/dist/modules/elysia/crud/utils/create-count-response-200-schema.d.ts +0 -8
- package/dist/modules/elysia/crud/utils/create-count-schema.d.ts +0 -12
- package/dist/modules/elysia/crud/utils/create-filters-schema.d.ts +0 -14
- package/dist/modules/elysia/crud/utils/create-find-schema.d.ts +0 -12
- package/dist/modules/elysia/crud/utils/create-id-param-schema.d.ts +0 -2
- package/dist/modules/elysia/crud/utils/create-insert-schema.d.ts +0 -8
- package/dist/modules/elysia/crud/utils/create-order-schema.d.ts +0 -12
- package/dist/modules/elysia/crud/utils/create-properties-schema.d.ts +0 -12
- package/dist/modules/elysia/crud/utils/create-q-schema.d.ts +0 -12
- package/dist/modules/elysia/crud/utils/create-response-200-schema.d.ts +0 -3
- package/dist/modules/elysia/crud/utils/create-selected-fields-schema.d.ts +0 -12
- package/dist/modules/elysia/crud/utils/create-update-one-schema.d.ts +0 -3
- package/dist/modules/elysia/crud/utils/create-update-schema.d.ts +0 -3
- package/dist/modules/elysia/crud/utils/index.d.ts +0 -16
- package/dist/modules/elysia/crud/utils/index.js +0 -41
- /package/dist/modules/{elysia/crud → schema-builder}/types/adaptive-where-clause-schema.d.ts +0 -0
- /package/dist/modules/{elysia/crud → schema-builder}/types/index.js +0 -0
- /package/dist/modules/{elysia/crud/types/selected-field-schema.d.ts → schema-builder/types/selected-fields-schema.d.ts} +0 -0
- /package/dist/{shared → modules/schema-builder}/types/tflatten.d.ts +0 -0
- /package/dist/modules/{elysia/crud → schema-builder}/types/update-one-schema.d.ts +0 -0
- /package/dist/modules/{elysia/crud → schema-builder}/utils/is-date-from-elysia-typebox.d.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const JWT_ERROR_KEYS: {
|
|
2
|
-
readonly JWT_EXPIRATION_PASSED: "mrx-core.jwt.error.expiration_passed";
|
|
3
|
-
readonly JWT_SECRET_NOT_FOUND: "mrx-core.jwt.error.secret_not_found";
|
|
4
|
-
readonly JWT_SIGN_ERROR: "mrx-core.jwt.error.sign_error";
|
|
2
|
+
readonly JWT_EXPIRATION_PASSED: "mrx.mrx-core.jwt.error.expiration_passed";
|
|
3
|
+
readonly JWT_SECRET_NOT_FOUND: "mrx.mrx-core.jwt.error.secret_not_found";
|
|
4
|
+
readonly JWT_SIGN_ERROR: "mrx.mrx-core.jwt.error.sign_error";
|
|
5
5
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare const PARSE_HUMAN_TIME_TO_SECONDS_ERROR_KEYS: {
|
|
2
|
-
readonly INVALID_TIME_EXPRESSION: "mrx-core.parse_human_time_to_seconds.error.invalid_time_expression";
|
|
2
|
+
readonly INVALID_TIME_EXPRESSION: "mrx.mrx-core.jwt.parse_human_time_to_seconds.error.invalid_time_expression";
|
|
3
3
|
};
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
JWT_ERROR_KEYS
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-zn2nm5gg.js";
|
|
5
5
|
import {
|
|
6
6
|
parseHumanTimeToSeconds
|
|
7
|
-
} from "../../chunk-
|
|
8
|
-
import"../../chunk-
|
|
7
|
+
} from "../../chunk-awphtyzp.js";
|
|
8
|
+
import"../../chunk-dmsev7vs.js";
|
|
9
9
|
import {
|
|
10
|
-
|
|
11
|
-
} from "../../chunk-
|
|
12
|
-
import"../../chunk-sqts8vyk.js";
|
|
13
|
-
import"../../chunk-9cgzhc50.js";
|
|
10
|
+
InternalError
|
|
11
|
+
} from "../../chunk-jz3wd472.js";
|
|
14
12
|
|
|
15
13
|
// source/modules/jwt/jwt.ts
|
|
16
14
|
import {
|
|
17
15
|
SignJWT,
|
|
18
16
|
jwtVerify
|
|
19
17
|
} from "jose";
|
|
20
|
-
var signJWT = (secret, payload, expiration =
|
|
21
|
-
const exp = expiration instanceof Date ? Math.floor(expiration.getTime() / 1000) : typeof expiration === "number" ? expiration : Math.floor(Date.now() / 1000) + parseHumanTimeToSeconds(expiration);
|
|
18
|
+
var signJWT = (secret, payload, expiration = 60 * 15) => {
|
|
19
|
+
const exp = expiration instanceof Date ? Math.floor(expiration.getTime() / 1000) : typeof expiration === "number" ? Math.floor(Date.now() / 1000) + expiration : Math.floor(Date.now() / 1000) + parseHumanTimeToSeconds(expiration);
|
|
22
20
|
if (exp <= Math.floor(Date.now() / 1000))
|
|
23
|
-
throw new
|
|
21
|
+
throw new InternalError(JWT_ERROR_KEYS.JWT_EXPIRATION_PASSED);
|
|
24
22
|
const finalPayload = {
|
|
25
23
|
iss: "Core-Issuer",
|
|
26
24
|
sub: "",
|
|
@@ -32,10 +30,10 @@ var signJWT = (secret, payload, expiration = Math.floor(Date.now() / 1000) + 60
|
|
|
32
30
|
...payload
|
|
33
31
|
};
|
|
34
32
|
try {
|
|
35
|
-
const jwt = new SignJWT(finalPayload).setProtectedHeader({ alg: "HS256", typ: "JWT" }).setIssuer(finalPayload.iss).setSubject(finalPayload.sub).setAudience(finalPayload.aud).setJti(finalPayload.jti).setNotBefore(finalPayload.nbf).setIssuedAt(finalPayload.iat).setExpirationTime(
|
|
33
|
+
const jwt = new SignJWT(finalPayload).setProtectedHeader({ alg: "HS256", typ: "JWT" }).setIssuer(finalPayload.iss).setSubject(finalPayload.sub).setAudience(finalPayload.aud).setJti(finalPayload.jti).setNotBefore(finalPayload.nbf).setIssuedAt(finalPayload.iat).setExpirationTime(exp).sign(new TextEncoder().encode(secret));
|
|
36
34
|
return jwt;
|
|
37
35
|
} catch (error) {
|
|
38
|
-
throw new
|
|
36
|
+
throw new InternalError(JWT_ERROR_KEYS.JWT_SIGN_ERROR, error);
|
|
39
37
|
}
|
|
40
38
|
};
|
|
41
39
|
var verifyJWT = async (token, secret) => {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
parseHumanTimeToSeconds
|
|
4
|
-
} from "../../../chunk-
|
|
5
|
-
import"../../../chunk-
|
|
6
|
-
import"../../../chunk-
|
|
4
|
+
} from "../../../chunk-awphtyzp.js";
|
|
5
|
+
import"../../../chunk-dmsev7vs.js";
|
|
6
|
+
import"../../../chunk-jz3wd472.js";
|
|
7
7
|
export {
|
|
8
8
|
parseHumanTimeToSeconds
|
|
9
9
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @param timeExpression - A string representing a time period (e.g., "2 hours", "30 minutes ago", "+1 day")
|
|
5
5
|
*
|
|
6
|
-
* @throws ({@link
|
|
6
|
+
* @throws ({@link InternalError}) - If the time expression is invalid or contains an unknown unit
|
|
7
7
|
*
|
|
8
8
|
* @returns The time period in seconds (negative for past times)
|
|
9
9
|
*
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
KV_STORE_ERROR_KEYS
|
|
4
|
-
} from "../../../chunk-
|
|
4
|
+
} from "../../../chunk-8pw0syzf.js";
|
|
5
5
|
import {
|
|
6
|
-
|
|
7
|
-
} from "../../../chunk-
|
|
6
|
+
InternalError
|
|
7
|
+
} from "../../../chunk-jz3wd472.js";
|
|
8
8
|
|
|
9
9
|
// source/modules/kv-store/bun-redis/bun-redis-store.ts
|
|
10
10
|
var {RedisClient } = globalThis.Bun;
|
|
@@ -14,10 +14,18 @@ class BunRedisStore {
|
|
|
14
14
|
this._client = new RedisClient(url, options);
|
|
15
15
|
}
|
|
16
16
|
async connect() {
|
|
17
|
-
|
|
17
|
+
try {
|
|
18
|
+
await this._client.connect();
|
|
19
|
+
} catch (e) {
|
|
20
|
+
throw new InternalError(KV_STORE_ERROR_KEYS.CONNECTION_FAILED, e);
|
|
21
|
+
}
|
|
18
22
|
}
|
|
19
23
|
close() {
|
|
20
|
-
|
|
24
|
+
try {
|
|
25
|
+
this._client.close();
|
|
26
|
+
} catch (e) {
|
|
27
|
+
throw new InternalError(KV_STORE_ERROR_KEYS.CLOSING_CONNECTION_FAILED, e);
|
|
28
|
+
}
|
|
21
29
|
}
|
|
22
30
|
async get(key) {
|
|
23
31
|
const value = await this._client.get(key);
|
|
@@ -37,20 +45,20 @@ class BunRedisStore {
|
|
|
37
45
|
await this._client.set(key, serialized);
|
|
38
46
|
}
|
|
39
47
|
async increment(key, amount) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
try {
|
|
49
|
+
const number = await this._client.incrby(key, amount ?? 1);
|
|
50
|
+
return number;
|
|
51
|
+
} catch (e) {
|
|
52
|
+
throw new InternalError(KV_STORE_ERROR_KEYS.NOT_INTEGER, e);
|
|
53
|
+
}
|
|
46
54
|
}
|
|
47
55
|
async decrement(key, amount) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
try {
|
|
57
|
+
const number = await this._client.decrby(key, amount ?? 1);
|
|
58
|
+
return number;
|
|
59
|
+
} catch (e) {
|
|
60
|
+
throw new InternalError(KV_STORE_ERROR_KEYS.NOT_INTEGER, e);
|
|
61
|
+
}
|
|
54
62
|
}
|
|
55
63
|
async del(key) {
|
|
56
64
|
const res = await this._client.del(key);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const KV_STORE_ERROR_KEYS: {
|
|
2
|
-
readonly CLOSING_CONNECTION_FAILED: "mrx-core.kv-store.error.closing_connection_failed";
|
|
3
|
-
readonly CONNECTION_FAILED: "mrx-core.kv-store.error.connection_failed";
|
|
4
|
-
readonly NOT_INTEGER: "mrx-core.kv-store.error.not_integer";
|
|
2
|
+
readonly CLOSING_CONNECTION_FAILED: "mrx.mrx-core.kv-store.error.closing_connection_failed";
|
|
3
|
+
readonly CONNECTION_FAILED: "mrx.mrx-core.kv-store.error.connection_failed";
|
|
4
|
+
readonly NOT_INTEGER: "mrx.mrx-core.kv-store.error.not_integer";
|
|
5
5
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
KV_STORE_ERROR_KEYS
|
|
4
|
-
} from "../../../chunk-
|
|
4
|
+
} from "../../../chunk-8pw0syzf.js";
|
|
5
5
|
import {
|
|
6
|
-
|
|
7
|
-
} from "../../../chunk-
|
|
6
|
+
InternalError
|
|
7
|
+
} from "../../../chunk-jz3wd472.js";
|
|
8
8
|
|
|
9
9
|
// source/modules/kv-store/ioredis/ioredis-store.ts
|
|
10
10
|
import { Redis } from "ioredis";
|
|
@@ -20,14 +20,14 @@ class IoRedisStore {
|
|
|
20
20
|
try {
|
|
21
21
|
await this._client.connect();
|
|
22
22
|
} catch (e) {
|
|
23
|
-
throw new
|
|
23
|
+
throw new InternalError(KV_STORE_ERROR_KEYS.CONNECTION_FAILED, e);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
async close() {
|
|
27
27
|
try {
|
|
28
28
|
await this._client.quit();
|
|
29
29
|
} catch (e) {
|
|
30
|
-
throw new
|
|
30
|
+
throw new InternalError(KV_STORE_ERROR_KEYS.CLOSING_CONNECTION_FAILED, e);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
async get(key) {
|
|
@@ -48,20 +48,20 @@ class IoRedisStore {
|
|
|
48
48
|
await this._client.set(key, serialized);
|
|
49
49
|
}
|
|
50
50
|
async increment(key, amount = 1) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
try {
|
|
52
|
+
const number = await this._client.incrby(key, amount);
|
|
53
|
+
return number;
|
|
54
|
+
} catch (e) {
|
|
55
|
+
throw new InternalError(KV_STORE_ERROR_KEYS.NOT_INTEGER, e);
|
|
56
|
+
}
|
|
57
57
|
}
|
|
58
58
|
async decrement(key, amount = 1) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
try {
|
|
60
|
+
const number = await this._client.decrby(key, amount);
|
|
61
|
+
return number;
|
|
62
|
+
} catch (e) {
|
|
63
|
+
throw new InternalError(KV_STORE_ERROR_KEYS.NOT_INTEGER, e);
|
|
64
|
+
}
|
|
65
65
|
}
|
|
66
66
|
async del(key) {
|
|
67
67
|
const result = await this._client.del(key);
|
|
@@ -1,103 +1,9 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "../../../chunk-
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
} from "../../../chunk-9cgzhc50.js";
|
|
8
|
-
|
|
9
|
-
// source/modules/kv-store/memory/memory-store.ts
|
|
10
|
-
class MemoryStore {
|
|
11
|
-
_store = new Map;
|
|
12
|
-
_cleanupInterval;
|
|
13
|
-
_cleanupTimer = null;
|
|
14
|
-
constructor(cleanupIntervalMs) {
|
|
15
|
-
this._cleanupInterval = cleanupIntervalMs ?? 300000;
|
|
16
|
-
this._startCleanup();
|
|
17
|
-
}
|
|
18
|
-
get(key) {
|
|
19
|
-
const entry = this._store.get(key);
|
|
20
|
-
if (!entry)
|
|
21
|
-
return null;
|
|
22
|
-
const now = Date.now();
|
|
23
|
-
if (now > entry.expiresAt && entry.expiresAt !== -1) {
|
|
24
|
-
this._store.delete(key);
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
return entry.value;
|
|
28
|
-
}
|
|
29
|
-
set(key, value, ttlSec) {
|
|
30
|
-
const expiresAt = ttlSec ? Date.now() + ttlSec * 1000 : -1;
|
|
31
|
-
this._store.set(key, { value, expiresAt });
|
|
32
|
-
}
|
|
33
|
-
increment(key, amount = 1) {
|
|
34
|
-
const current = this.get(key);
|
|
35
|
-
const entry = this._store.get(key);
|
|
36
|
-
if (current !== null && typeof current !== "number")
|
|
37
|
-
throw new BaseError(KV_STORE_ERROR_KEYS.NOT_INTEGER);
|
|
38
|
-
const currentValue = current ?? 0;
|
|
39
|
-
const newValue = currentValue + amount;
|
|
40
|
-
const expiresAt = entry ? entry.expiresAt : -1;
|
|
41
|
-
this._store.set(key, { value: newValue, expiresAt });
|
|
42
|
-
return newValue;
|
|
43
|
-
}
|
|
44
|
-
decrement(key, amount = 1) {
|
|
45
|
-
const current = this.get(key);
|
|
46
|
-
const entry = this._store.get(key);
|
|
47
|
-
if (current !== null && typeof current !== "number")
|
|
48
|
-
throw new BaseError(KV_STORE_ERROR_KEYS.NOT_INTEGER);
|
|
49
|
-
const currentValue = current ?? 0;
|
|
50
|
-
const newValue = currentValue - amount;
|
|
51
|
-
const expiresAt = entry ? entry.expiresAt : -1;
|
|
52
|
-
this._store.set(key, { value: newValue, expiresAt });
|
|
53
|
-
return newValue;
|
|
54
|
-
}
|
|
55
|
-
del(key) {
|
|
56
|
-
return this._store.delete(key);
|
|
57
|
-
}
|
|
58
|
-
expire(key, ttlSec) {
|
|
59
|
-
const entry = this._store.get(key);
|
|
60
|
-
if (!entry)
|
|
61
|
-
return false;
|
|
62
|
-
entry.expiresAt = Date.now() + ttlSec * 1000;
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
ttl(key) {
|
|
66
|
-
const entry = this._store.get(key);
|
|
67
|
-
if (!entry)
|
|
68
|
-
return -1;
|
|
69
|
-
if (entry.expiresAt === -1)
|
|
70
|
-
return -1;
|
|
71
|
-
const remaining = entry.expiresAt - Date.now();
|
|
72
|
-
return remaining > 0 ? Math.ceil(remaining / 1000) : -1;
|
|
73
|
-
}
|
|
74
|
-
clean() {
|
|
75
|
-
const sizeBefore = this._store.size;
|
|
76
|
-
this._store.clear();
|
|
77
|
-
return sizeBefore;
|
|
78
|
-
}
|
|
79
|
-
_startCleanup() {
|
|
80
|
-
if (this._cleanupTimer)
|
|
81
|
-
return;
|
|
82
|
-
this._cleanupTimer = setInterval(() => {
|
|
83
|
-
this._removeExpiredEntries();
|
|
84
|
-
}, this._cleanupInterval);
|
|
85
|
-
}
|
|
86
|
-
_removeExpiredEntries() {
|
|
87
|
-
const now = Date.now();
|
|
88
|
-
for (const [key, entry] of this._store.entries())
|
|
89
|
-
if (entry.expiresAt !== -1 && now > entry.expiresAt)
|
|
90
|
-
this._store.delete(key);
|
|
91
|
-
}
|
|
92
|
-
destroy() {
|
|
93
|
-
if (this._cleanupTimer) {
|
|
94
|
-
clearInterval(this._cleanupTimer);
|
|
95
|
-
this._cleanupTimer = null;
|
|
96
|
-
}
|
|
97
|
-
this._store.clear();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
3
|
+
MemoryStore
|
|
4
|
+
} from "../../../chunk-j7dyc5ks.js";
|
|
5
|
+
import"../../../chunk-8pw0syzf.js";
|
|
6
|
+
import"../../../chunk-jz3wd472.js";
|
|
100
7
|
export {
|
|
101
8
|
MemoryStore
|
|
102
9
|
};
|
|
103
|
-
export { MemoryStore };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export declare const LOGGER_ERROR_KEYS: {
|
|
2
|
-
readonly BEFORE_EXIT_CLOSE_ERROR: "mrx-core.logger.error.before_exit_close_error";
|
|
3
|
-
readonly BEFORE_EXIT_FLUSH_ERROR: "mrx-core.logger.error.before_exit_flush_error";
|
|
4
|
-
readonly NO_SINKS_PROVIDED: "mrx-core.logger.error.no_sinks_provided";
|
|
5
|
-
readonly REGISTER_SINK_ERROR: "mrx-core.logger.error.register_sink_error";
|
|
6
|
-
readonly SINK_ALREADY_ADDED: "mrx-core.logger.error.sink_already_added";
|
|
7
|
-
readonly SINK_CLOSE_ERROR: "mrx-core.logger.error.sink_close_error";
|
|
8
|
-
readonly SINK_LOG_ERROR: "mrx-core.logger.error.sink_log_error";
|
|
2
|
+
readonly BEFORE_EXIT_CLOSE_ERROR: "mrx.mrx-core.logger.error.before_exit_close_error";
|
|
3
|
+
readonly BEFORE_EXIT_FLUSH_ERROR: "mrx.mrx-core.logger.error.before_exit_flush_error";
|
|
4
|
+
readonly NO_SINKS_PROVIDED: "mrx.mrx-core.logger.error.no_sinks_provided";
|
|
5
|
+
readonly REGISTER_SINK_ERROR: "mrx.mrx-core.logger.error.register_sink_error";
|
|
6
|
+
readonly SINK_ALREADY_ADDED: "mrx.mrx-core.logger.error.sink_already_added";
|
|
7
|
+
readonly SINK_CLOSE_ERROR: "mrx.mrx-core.logger.error.sink_close_error";
|
|
8
|
+
readonly SINK_LOG_ERROR: "mrx.mrx-core.logger.error.sink_log_error";
|
|
9
9
|
};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { InternalError } from '../../../errors/internal-error';
|
|
2
2
|
export interface LoggerEvent {
|
|
3
|
-
onBeforeExitError: [
|
|
3
|
+
onBeforeExitError: [InternalError<{
|
|
4
4
|
error: Error;
|
|
5
5
|
}>];
|
|
6
6
|
registerSinkError: [
|
|
7
|
-
|
|
7
|
+
InternalError<{
|
|
8
8
|
sinkName: string;
|
|
9
9
|
error: Error;
|
|
10
10
|
}>
|
|
11
11
|
];
|
|
12
12
|
sinkError: [
|
|
13
|
-
|
|
13
|
+
InternalError<{
|
|
14
14
|
sinkName: string;
|
|
15
15
|
object?: unknown;
|
|
16
16
|
error: Error;
|
|
@@ -1,13 +1,88 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import"../typed-event-emitter/index.js";
|
|
2
3
|
import {
|
|
3
4
|
LOGGER_ERROR_KEYS
|
|
4
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-6hs00zfd.js";
|
|
5
6
|
import {
|
|
6
7
|
TypedEventEmitter
|
|
7
8
|
} from "../../chunk-mvrxngm7.js";
|
|
8
9
|
import {
|
|
9
|
-
|
|
10
|
-
} from "../../chunk-
|
|
10
|
+
InternalError
|
|
11
|
+
} from "../../chunk-jz3wd472.js";
|
|
12
|
+
|
|
13
|
+
// source/modules/logger/worker-logger.ts
|
|
14
|
+
var workerFunction = () => {
|
|
15
|
+
const sinks = {};
|
|
16
|
+
const self = globalThis;
|
|
17
|
+
const processLogEntry = async (log) => {
|
|
18
|
+
await Promise.all(log.sinkNames.map(async (sinkName) => {
|
|
19
|
+
const sink = sinks[sinkName];
|
|
20
|
+
if (!sink)
|
|
21
|
+
return;
|
|
22
|
+
try {
|
|
23
|
+
await sink.log(log.level, log.timestamp, log.object);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
self.postMessage({
|
|
26
|
+
type: "SINK_LOG_ERROR",
|
|
27
|
+
sinkName,
|
|
28
|
+
error,
|
|
29
|
+
object: log.object
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}));
|
|
33
|
+
};
|
|
34
|
+
self.addEventListener("message", async (event) => {
|
|
35
|
+
switch (event.data.type) {
|
|
36
|
+
case "REGISTER_SINK": {
|
|
37
|
+
const {
|
|
38
|
+
sinkName,
|
|
39
|
+
sinkClassName,
|
|
40
|
+
sinkClassString,
|
|
41
|
+
sinkArgs
|
|
42
|
+
} = event.data;
|
|
43
|
+
try {
|
|
44
|
+
const factory = new Function("sinkArgs", `
|
|
45
|
+
${sinkClassString}
|
|
46
|
+
return new ${sinkClassName}(...sinkArgs);
|
|
47
|
+
`);
|
|
48
|
+
sinks[sinkName] = factory(sinkArgs);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
self.postMessage({
|
|
51
|
+
type: "REGISTER_SINK_ERROR",
|
|
52
|
+
sinkName,
|
|
53
|
+
error
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case "LOG_BATCH": {
|
|
59
|
+
const { logs } = event.data;
|
|
60
|
+
try {
|
|
61
|
+
for (const log of logs)
|
|
62
|
+
await processLogEntry(log);
|
|
63
|
+
} finally {
|
|
64
|
+
self.postMessage({ type: "BATCH_COMPLETE" });
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case "CLOSE": {
|
|
69
|
+
await Promise.all(Object.entries(sinks).map(async ([name, sink]) => {
|
|
70
|
+
try {
|
|
71
|
+
await sink.close?.();
|
|
72
|
+
} catch (error) {
|
|
73
|
+
self.postMessage({
|
|
74
|
+
type: "SINK_CLOSE_ERROR",
|
|
75
|
+
sinkName: name,
|
|
76
|
+
error
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
self.postMessage({ type: "CLOSE_COMPLETE" });
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
};
|
|
11
86
|
|
|
12
87
|
// source/modules/logger/logger.ts
|
|
13
88
|
class Logger extends TypedEventEmitter {
|
|
@@ -51,14 +126,14 @@ class Logger extends TypedEventEmitter {
|
|
|
51
126
|
this._batchTimeout = batchTimeout;
|
|
52
127
|
this._autoEnd = autoEnd;
|
|
53
128
|
this._flushOnBeforeExit = flushOnBeforeExit;
|
|
54
|
-
this._worker = new Worker(new
|
|
129
|
+
this._worker = new Worker(URL.createObjectURL(new Blob([`(${workerFunction.toString()})()`], { type: "application/javascript" })), { type: "module" });
|
|
55
130
|
this._setupWorkerMessages();
|
|
56
131
|
if (this._autoEnd)
|
|
57
132
|
this._setupAutoEnd();
|
|
58
133
|
}
|
|
59
134
|
registerSink(sinkName, sinkConstructor, ...sinkArgs) {
|
|
60
135
|
if (this._sinks[sinkName])
|
|
61
|
-
throw new
|
|
136
|
+
throw new InternalError(LOGGER_ERROR_KEYS.SINK_ALREADY_ADDED);
|
|
62
137
|
this._worker.postMessage({
|
|
63
138
|
type: "REGISTER_SINK",
|
|
64
139
|
sinkName,
|
|
@@ -70,19 +145,19 @@ class Logger extends TypedEventEmitter {
|
|
|
70
145
|
this._sinkKeys.push(sinkName);
|
|
71
146
|
return this;
|
|
72
147
|
}
|
|
73
|
-
error(object, sinkNames) {
|
|
148
|
+
error(object, sinkNames = this._sinkKeys) {
|
|
74
149
|
this._enqueue("ERROR", object, sinkNames);
|
|
75
150
|
}
|
|
76
|
-
warn(object, sinkNames) {
|
|
151
|
+
warn(object, sinkNames = this._sinkKeys) {
|
|
77
152
|
this._enqueue("WARN", object, sinkNames);
|
|
78
153
|
}
|
|
79
|
-
info(object, sinkNames) {
|
|
154
|
+
info(object, sinkNames = this._sinkKeys) {
|
|
80
155
|
this._enqueue("INFO", object, sinkNames);
|
|
81
156
|
}
|
|
82
|
-
debug(object, sinkNames) {
|
|
157
|
+
debug(object, sinkNames = this._sinkKeys) {
|
|
83
158
|
this._enqueue("DEBUG", object, sinkNames);
|
|
84
159
|
}
|
|
85
|
-
log(object, sinkNames =
|
|
160
|
+
log(object, sinkNames = this._sinkKeys) {
|
|
86
161
|
this._enqueue("LOG", object, sinkNames);
|
|
87
162
|
}
|
|
88
163
|
async flush() {
|
|
@@ -105,7 +180,7 @@ class Logger extends TypedEventEmitter {
|
|
|
105
180
|
}
|
|
106
181
|
_enqueue(level, object, sinkNames) {
|
|
107
182
|
if (this._sinkKeys.length === 0)
|
|
108
|
-
throw new
|
|
183
|
+
throw new InternalError(LOGGER_ERROR_KEYS.NO_SINKS_PROVIDED, { level, object });
|
|
109
184
|
if (this._pendingLogs.length >= this._maxPendingLogs)
|
|
110
185
|
return;
|
|
111
186
|
this._pendingLogs.push({
|
|
@@ -168,14 +243,14 @@ class Logger extends TypedEventEmitter {
|
|
|
168
243
|
}
|
|
169
244
|
break;
|
|
170
245
|
case "SINK_LOG_ERROR":
|
|
171
|
-
this.emit("sinkError", new
|
|
246
|
+
this.emit("sinkError", new InternalError(LOGGER_ERROR_KEYS.SINK_LOG_ERROR, event.data));
|
|
172
247
|
this._releaseBatch();
|
|
173
248
|
break;
|
|
174
249
|
case "SINK_CLOSE_ERROR":
|
|
175
|
-
this.emit("sinkError", new
|
|
250
|
+
this.emit("sinkError", new InternalError(LOGGER_ERROR_KEYS.SINK_CLOSE_ERROR, event.data));
|
|
176
251
|
break;
|
|
177
252
|
case "REGISTER_SINK_ERROR":
|
|
178
|
-
this.emit("registerSinkError", new
|
|
253
|
+
this.emit("registerSinkError", new InternalError(LOGGER_ERROR_KEYS.REGISTER_SINK_ERROR, event.data));
|
|
179
254
|
break;
|
|
180
255
|
case "CLOSE_COMPLETE":
|
|
181
256
|
this._worker.terminate();
|
|
@@ -195,15 +270,11 @@ class Logger extends TypedEventEmitter {
|
|
|
195
270
|
_handleBeforeExit = () => {
|
|
196
271
|
if (this._flushOnBeforeExit)
|
|
197
272
|
this.flush().then(() => this.close()).catch((error) => {
|
|
198
|
-
this.emit("onBeforeExitError", new
|
|
199
|
-
error: error instanceof Error ? error : new Error("Unknown error during logger flush on beforeExit")
|
|
200
|
-
}));
|
|
273
|
+
this.emit("onBeforeExitError", new InternalError(LOGGER_ERROR_KEYS.BEFORE_EXIT_FLUSH_ERROR, { error }));
|
|
201
274
|
});
|
|
202
275
|
else
|
|
203
276
|
this.close().catch((error) => {
|
|
204
|
-
this.emit("onBeforeExitError", new
|
|
205
|
-
error: error instanceof Error ? error : new Error("Unknown error during logger close on beforeExit")
|
|
206
|
-
}));
|
|
277
|
+
this.emit("onBeforeExitError", new InternalError(LOGGER_ERROR_KEYS.BEFORE_EXIT_CLOSE_ERROR, { error }));
|
|
207
278
|
});
|
|
208
279
|
};
|
|
209
280
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TypedEventEmitter } from '../../modules/typed-event-emitter
|
|
1
|
+
import { TypedEventEmitter } from '../../modules/typed-event-emitter';
|
|
2
2
|
import type { LoggerEvent } from './events/logger-events';
|
|
3
3
|
import type { LoggerOptions } from './types/logger-options';
|
|
4
4
|
import type { LoggerSink } from './types/logger-sink';
|
|
@@ -104,7 +104,7 @@ export declare class Logger<TSinks extends SinkMap = {}> extends TypedEventEmitt
|
|
|
104
104
|
* Logs a message at the WARN level to the specified sinks.
|
|
105
105
|
*
|
|
106
106
|
* @param object - The log message object
|
|
107
|
-
* @param sinkNames -
|
|
107
|
+
* @param sinkNames - Optional array of sink names to log to; logs to all sinks if omitted
|
|
108
108
|
*/
|
|
109
109
|
warn<SNames extends (keyof TSinks)[] = (keyof TSinks)[]>(object: SinkBodiesIntersection<TSinks, SNames[number]>, sinkNames?: SNames): void;
|
|
110
110
|
/**
|
|
@@ -4,5 +4,5 @@ import type { LoggerSink } from '../../../modules/logger/types/logger-sink';
|
|
|
4
4
|
* ConsoleLoggerSink implements LoggerSink to provide logging functionality to the console.
|
|
5
5
|
*/
|
|
6
6
|
export declare class ConsoleLoggerSink<TLogObject = unknown> implements LoggerSink<TLogObject> {
|
|
7
|
-
log(level: LogLevels, timestamp: number, object: TLogObject):
|
|
7
|
+
log(level: LogLevels, timestamp: number, object: TLogObject): void;
|
|
8
8
|
}
|
|
@@ -12,9 +12,9 @@ export interface FileLoggerConfig {
|
|
|
12
12
|
bufferSize?: number;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* FileLoggerSink implements LoggerSink to provide logging functionality to the file system.
|
|
16
|
-
* Uses a WriteStream for efficient buffered writes (like Pino's sonic-boom).
|
|
17
|
-
*/
|
|
15
|
+
* FileLoggerSink implements LoggerSink to provide logging functionality to the file system.
|
|
16
|
+
* Uses a WriteStream for efficient buffered writes (like Pino's sonic-boom).
|
|
17
|
+
*/
|
|
18
18
|
export declare class FileLoggerSink<TLogObject = unknown> implements LoggerSink<TLogObject> {
|
|
19
19
|
readonly config: FileLoggerConfig;
|
|
20
20
|
private readonly _stream;
|