@jaypie/testkit 1.1.34 → 1.1.36
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/index.d.ts +2 -10
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/matchers/toBeMockFunction.matcher.d.ts +2 -10
- package/dist/mock/aws.d.ts +5 -7
- package/dist/mock/core.d.ts +21 -13
- package/dist/mock/datadog.d.ts +4 -4
- package/dist/mock/express.d.ts +14 -14
- package/dist/mock/index.d.ts +129 -88
- package/dist/mock/index.js +636 -9
- package/dist/mock/index.js.map +1 -1
- package/dist/mock/kit.d.ts +2 -0
- package/dist/mock/llm.d.ts +4 -43
- package/dist/mock/logger.d.ts +5 -0
- package/dist/mock/matchers/toBeMockFunction.matcher.d.ts +2 -10
- package/dist/mock/mock/aws.d.ts +5 -7
- package/dist/mock/mock/core.d.ts +21 -13
- package/dist/mock/mock/datadog.d.ts +4 -4
- package/dist/mock/mock/express.d.ts +14 -14
- package/dist/mock/mock/index.d.ts +4 -2
- package/dist/mock/mock/kit.d.ts +2 -0
- package/dist/mock/mock/llm.d.ts +4 -43
- package/dist/mock/mock/logger.d.ts +5 -0
- package/dist/mock/mock/mongoose.d.ts +3 -3
- package/dist/mock/mock/original.d.ts +4 -0
- package/dist/mock/mock/textract.d.ts +2 -2
- package/dist/mock/mock/utils.d.ts +6 -5
- package/dist/mock/mongoose.d.ts +3 -3
- package/dist/mock/original.d.ts +4 -0
- package/dist/mock/textract.d.ts +2 -2
- package/dist/mock/utils.d.ts +6 -5
- package/package.json +7 -3
package/dist/mock/index.js
CHANGED
|
@@ -350,7 +350,7 @@ beforeAll(async () => {
|
|
|
350
350
|
const cloneDeep = createMockWrappedFunction(original$1.cloneDeep, {
|
|
351
351
|
throws: true,
|
|
352
352
|
});
|
|
353
|
-
const envBoolean = createMockReturnedFunction(true);
|
|
353
|
+
const envBoolean$1 = createMockReturnedFunction(true);
|
|
354
354
|
const envsKey = createMockWrappedFunction(original$1.envsKey, `_MOCK_ENVS_KEY_[${TAG$2}]`);
|
|
355
355
|
const errorFromStatusCode = createMockFunction((statusCode, message = `Mock error for status code ${statusCode}`) => {
|
|
356
356
|
try {
|
|
@@ -462,7 +462,7 @@ const jaypieHandler = createMockFunction((handler, options = {}) => {
|
|
|
462
462
|
});
|
|
463
463
|
const sleep = createMockResolvedFunction(true);
|
|
464
464
|
const uuid = createMockWrappedFunction(original$1.uuid, `00000000-0000-0000-0000-000000000000`);
|
|
465
|
-
const ERROR = original$1.ERROR;
|
|
465
|
+
const ERROR$1 = original$1.ERROR;
|
|
466
466
|
const HTTP$1 = original$1.HTTP;
|
|
467
467
|
const JAYPIE = original$1.JAYPIE;
|
|
468
468
|
const PROJECT = original$1.PROJECT;
|
|
@@ -473,7 +473,7 @@ var core = /*#__PURE__*/Object.freeze({
|
|
|
473
473
|
BadGatewayError: BadGatewayError,
|
|
474
474
|
BadRequestError: BadRequestError,
|
|
475
475
|
ConfigurationError: ConfigurationError,
|
|
476
|
-
ERROR: ERROR,
|
|
476
|
+
ERROR: ERROR$1,
|
|
477
477
|
ForbiddenError: ForbiddenError,
|
|
478
478
|
GatewayTimeoutError: GatewayTimeoutError,
|
|
479
479
|
GoneError: GoneError,
|
|
@@ -496,7 +496,7 @@ var core = /*#__PURE__*/Object.freeze({
|
|
|
496
496
|
UnreachableCodeError: UnreachableCodeError,
|
|
497
497
|
VALIDATE: VALIDATE,
|
|
498
498
|
cloneDeep: cloneDeep,
|
|
499
|
-
envBoolean: envBoolean,
|
|
499
|
+
envBoolean: envBoolean$1,
|
|
500
500
|
envsKey: envsKey,
|
|
501
501
|
errorFromStatusCode: errorFromStatusCode,
|
|
502
502
|
force: force,
|
|
@@ -580,7 +580,6 @@ const expressHandler = createMockFunction((handlerOrProps, propsOrHandler) => {
|
|
|
580
580
|
if (!props.setup)
|
|
581
581
|
props.setup = [];
|
|
582
582
|
props.setup = force.array(props.setup);
|
|
583
|
-
// @ts-expect-error TODO: cannot resolve; fix when JaypieHandler moves to TypeScript
|
|
584
583
|
props.setup.unshift((req) => {
|
|
585
584
|
if (!req || typeof req !== "object") {
|
|
586
585
|
throw new BadRequestError$1("req must be an object");
|
|
@@ -635,9 +634,9 @@ const expressHandler = createMockFunction((handlerOrProps, propsOrHandler) => {
|
|
|
635
634
|
// In the mock context, if status is a function we are in a "supertest"
|
|
636
635
|
if (supertestMode && typeof res.status === "function") {
|
|
637
636
|
// In theory jaypieFunction has handled all errors
|
|
638
|
-
const errorStatus = error
|
|
637
|
+
const errorStatus = error?.status || HTTP.CODE.INTERNAL_ERROR;
|
|
639
638
|
let errorResponse;
|
|
640
|
-
if (typeof error
|
|
639
|
+
if (typeof error?.json === "function") {
|
|
641
640
|
errorResponse = error.json();
|
|
642
641
|
}
|
|
643
642
|
else {
|
|
@@ -703,6 +702,15 @@ var express = /*#__PURE__*/Object.freeze({
|
|
|
703
702
|
notImplementedRoute: notImplementedRoute
|
|
704
703
|
});
|
|
705
704
|
|
|
705
|
+
const isProductionEnv = createMockReturnedFunction(false);
|
|
706
|
+
const isNodeTestEnv = createMockReturnedFunction(true);
|
|
707
|
+
|
|
708
|
+
var kit = /*#__PURE__*/Object.freeze({
|
|
709
|
+
__proto__: null,
|
|
710
|
+
isNodeTestEnv: isNodeTestEnv,
|
|
711
|
+
isProductionEnv: isProductionEnv
|
|
712
|
+
});
|
|
713
|
+
|
|
706
714
|
// Mock implementation of lambdaHandler that follows the original implementation pattern
|
|
707
715
|
const lambdaHandler = createMockFunction((handler, props = {}) => {
|
|
708
716
|
// If handler is an object and options is a function, swap them
|
|
@@ -804,6 +812,13 @@ const LlmMessageRole = createMockWrappedObject(original$4.LlmMessageRole, {
|
|
|
804
812
|
const LlmMessageType = createMockWrappedObject(original$4.LlmMessageType, {
|
|
805
813
|
isClass: true,
|
|
806
814
|
});
|
|
815
|
+
// Provider mocks
|
|
816
|
+
const GeminiProvider = createMockWrappedObject(original$4.GeminiProvider, {
|
|
817
|
+
isClass: true,
|
|
818
|
+
});
|
|
819
|
+
const OpenRouterProvider = createMockWrappedObject(original$4.OpenRouterProvider, {
|
|
820
|
+
isClass: true,
|
|
821
|
+
});
|
|
807
822
|
// Tool collections
|
|
808
823
|
const toolkit = new original$4.JaypieToolkit([
|
|
809
824
|
random,
|
|
@@ -815,16 +830,626 @@ const tools = toolkit.tools;
|
|
|
815
830
|
|
|
816
831
|
var llm = /*#__PURE__*/Object.freeze({
|
|
817
832
|
__proto__: null,
|
|
833
|
+
GeminiProvider: GeminiProvider,
|
|
818
834
|
JaypieToolkit: JaypieToolkit,
|
|
819
835
|
LLM: LLM,
|
|
820
836
|
Llm: Llm,
|
|
821
837
|
LlmMessageRole: LlmMessageRole,
|
|
822
838
|
LlmMessageType: LlmMessageType,
|
|
839
|
+
OpenRouterProvider: OpenRouterProvider,
|
|
823
840
|
Toolkit: Toolkit,
|
|
824
841
|
toolkit: toolkit,
|
|
825
842
|
tools: tools
|
|
826
843
|
});
|
|
827
844
|
|
|
845
|
+
const DEFAULT = {
|
|
846
|
+
LEVEL: "debug",
|
|
847
|
+
VAR_LEVEL: "debug",
|
|
848
|
+
};
|
|
849
|
+
const ERROR_PREFIX = "[logger]";
|
|
850
|
+
const ERROR = {
|
|
851
|
+
VAR: {
|
|
852
|
+
EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,
|
|
853
|
+
MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,
|
|
854
|
+
NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,
|
|
855
|
+
UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \`undefined\` message`,
|
|
856
|
+
},
|
|
857
|
+
};
|
|
858
|
+
const FORMAT = {
|
|
859
|
+
JSON: "json",
|
|
860
|
+
TEXT: "text",
|
|
861
|
+
};
|
|
862
|
+
const LEVEL = {
|
|
863
|
+
ALL: "all",
|
|
864
|
+
DEBUG: "debug",
|
|
865
|
+
ERROR: "error",
|
|
866
|
+
FATAL: "fatal",
|
|
867
|
+
INFO: "info",
|
|
868
|
+
SILENT: "silent",
|
|
869
|
+
TRACE: "trace",
|
|
870
|
+
WARN: "warn",
|
|
871
|
+
};
|
|
872
|
+
const LEVEL_VALUES = {
|
|
873
|
+
all: 100,
|
|
874
|
+
debug: 70,
|
|
875
|
+
error: 10,
|
|
876
|
+
fatal: 1,
|
|
877
|
+
info: 50,
|
|
878
|
+
none: 0,
|
|
879
|
+
silent: 0,
|
|
880
|
+
trace: 90,
|
|
881
|
+
warn: 30,
|
|
882
|
+
};
|
|
883
|
+
|
|
884
|
+
function forceString(value, defaultValue = "") {
|
|
885
|
+
if (value === null)
|
|
886
|
+
return "null";
|
|
887
|
+
if (value === undefined)
|
|
888
|
+
return String(defaultValue);
|
|
889
|
+
if (typeof value === "object")
|
|
890
|
+
return JSON.stringify(value);
|
|
891
|
+
return String(value);
|
|
892
|
+
}
|
|
893
|
+
function formatAsJsonString(subject) {
|
|
894
|
+
const SPACES = 0;
|
|
895
|
+
const UNUSED_PARAM = null;
|
|
896
|
+
switch (typeof subject) {
|
|
897
|
+
case "string":
|
|
898
|
+
if (subject === "")
|
|
899
|
+
return `""`;
|
|
900
|
+
try {
|
|
901
|
+
return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);
|
|
902
|
+
}
|
|
903
|
+
catch {
|
|
904
|
+
return subject;
|
|
905
|
+
}
|
|
906
|
+
case "object":
|
|
907
|
+
try {
|
|
908
|
+
if (subject &&
|
|
909
|
+
subject instanceof Object &&
|
|
910
|
+
!Array.isArray(subject) &&
|
|
911
|
+
subject.constructor &&
|
|
912
|
+
subject.constructor !== Object &&
|
|
913
|
+
"toString" in subject &&
|
|
914
|
+
typeof subject.toString === "function") {
|
|
915
|
+
return subject.toString();
|
|
916
|
+
}
|
|
917
|
+
return JSON.stringify(subject, UNUSED_PARAM, SPACES);
|
|
918
|
+
}
|
|
919
|
+
catch (error) {
|
|
920
|
+
if (error instanceof TypeError) {
|
|
921
|
+
const truncatedSubject = Object.keys(subject).reduce((newSubject, key) => {
|
|
922
|
+
const nextSubject = { ...newSubject };
|
|
923
|
+
nextSubject[key] = String(subject[key]);
|
|
924
|
+
return nextSubject;
|
|
925
|
+
}, {});
|
|
926
|
+
return formatAsJsonString(truncatedSubject);
|
|
927
|
+
}
|
|
928
|
+
throw error;
|
|
929
|
+
}
|
|
930
|
+
default:
|
|
931
|
+
return String(subject);
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
function stringify(...params) {
|
|
935
|
+
if (params.length === 0)
|
|
936
|
+
return "";
|
|
937
|
+
if (params.length === 1) {
|
|
938
|
+
return formatAsJsonString(params[0]);
|
|
939
|
+
}
|
|
940
|
+
const formatted = params.map(formatAsJsonString);
|
|
941
|
+
return formatted.join(" ");
|
|
942
|
+
}
|
|
943
|
+
function out(line, { level = "debug" } = {}) {
|
|
944
|
+
let lineStr;
|
|
945
|
+
if (typeof line !== "string") {
|
|
946
|
+
lineStr = stringify(line);
|
|
947
|
+
}
|
|
948
|
+
else {
|
|
949
|
+
lineStr = line;
|
|
950
|
+
}
|
|
951
|
+
let outputFunction;
|
|
952
|
+
switch (level) {
|
|
953
|
+
case LEVEL.INFO:
|
|
954
|
+
outputFunction = console.info;
|
|
955
|
+
break;
|
|
956
|
+
case LEVEL.WARN:
|
|
957
|
+
outputFunction = console.warn;
|
|
958
|
+
break;
|
|
959
|
+
case LEVEL.ERROR:
|
|
960
|
+
case LEVEL.FATAL:
|
|
961
|
+
outputFunction = console.error;
|
|
962
|
+
break;
|
|
963
|
+
case LEVEL.TRACE:
|
|
964
|
+
case LEVEL.DEBUG:
|
|
965
|
+
outputFunction = console.debug;
|
|
966
|
+
break;
|
|
967
|
+
default:
|
|
968
|
+
outputFunction = console.log;
|
|
969
|
+
break;
|
|
970
|
+
}
|
|
971
|
+
try {
|
|
972
|
+
outputFunction(lineStr);
|
|
973
|
+
}
|
|
974
|
+
catch (error) {
|
|
975
|
+
console.warn(error);
|
|
976
|
+
console.log(lineStr);
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
function parse(message) {
|
|
980
|
+
if (typeof message !== "string") {
|
|
981
|
+
return message;
|
|
982
|
+
}
|
|
983
|
+
try {
|
|
984
|
+
return JSON.parse(message);
|
|
985
|
+
}
|
|
986
|
+
catch {
|
|
987
|
+
return message;
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
function parsesTo(message) {
|
|
991
|
+
if (typeof message !== "string") {
|
|
992
|
+
return {
|
|
993
|
+
parses: false,
|
|
994
|
+
message,
|
|
995
|
+
};
|
|
996
|
+
}
|
|
997
|
+
try {
|
|
998
|
+
return {
|
|
999
|
+
parses: true,
|
|
1000
|
+
message: JSON.parse(message),
|
|
1001
|
+
};
|
|
1002
|
+
}
|
|
1003
|
+
catch {
|
|
1004
|
+
return {
|
|
1005
|
+
parses: false,
|
|
1006
|
+
message,
|
|
1007
|
+
};
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
class Logger {
|
|
1012
|
+
constructor({ format = process.env.LOG_FORMAT || DEFAULT.LEVEL, level = process.env.LOG_LEVEL || DEFAULT.LEVEL, tags = {}, varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL, } = {}) {
|
|
1013
|
+
this.options = {
|
|
1014
|
+
format,
|
|
1015
|
+
level,
|
|
1016
|
+
varLevel,
|
|
1017
|
+
};
|
|
1018
|
+
this.tags = {};
|
|
1019
|
+
Object.keys(tags).forEach((key) => {
|
|
1020
|
+
this.tags[key] = forceString(tags[key]);
|
|
1021
|
+
});
|
|
1022
|
+
this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);
|
|
1023
|
+
this.error = this.createLogMethod(LEVEL.ERROR, format, level);
|
|
1024
|
+
this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);
|
|
1025
|
+
this.info = this.createLogMethod(LEVEL.INFO, format, level);
|
|
1026
|
+
this.trace = this.createLogMethod(LEVEL.TRACE, format, level);
|
|
1027
|
+
this.warn = this.createLogMethod(LEVEL.WARN, format, level);
|
|
1028
|
+
const varLevelMethod = this[varLevel];
|
|
1029
|
+
this.var = varLevelMethod?.var || this.debug.var;
|
|
1030
|
+
}
|
|
1031
|
+
createLogMethod(logLevel, format, checkLevel) {
|
|
1032
|
+
const logFn = (...messages) => {
|
|
1033
|
+
if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {
|
|
1034
|
+
if (format === FORMAT.JSON) {
|
|
1035
|
+
const message = stringify(...messages);
|
|
1036
|
+
const parses = parsesTo(message);
|
|
1037
|
+
const json = {
|
|
1038
|
+
log: logLevel,
|
|
1039
|
+
message,
|
|
1040
|
+
...this.tags,
|
|
1041
|
+
};
|
|
1042
|
+
if (parses.parses) {
|
|
1043
|
+
json.data = parses.message;
|
|
1044
|
+
}
|
|
1045
|
+
out(json, { level: logLevel });
|
|
1046
|
+
}
|
|
1047
|
+
else {
|
|
1048
|
+
const message = stringify(...messages);
|
|
1049
|
+
out(message, { level: logLevel });
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
};
|
|
1053
|
+
logFn.var = (messageObject, messageValue) => {
|
|
1054
|
+
if (messageObject === undefined) {
|
|
1055
|
+
this.warn(ERROR.VAR.UNDEFINED_MESSAGE);
|
|
1056
|
+
}
|
|
1057
|
+
let msgObj;
|
|
1058
|
+
if (typeof messageObject !== "object" || messageObject === null) {
|
|
1059
|
+
if (typeof messageObject !== "object") {
|
|
1060
|
+
if (messageValue === undefined)
|
|
1061
|
+
messageValue = "undefined";
|
|
1062
|
+
msgObj = { [String(messageObject)]: messageValue };
|
|
1063
|
+
}
|
|
1064
|
+
else {
|
|
1065
|
+
this.warn(ERROR.VAR.NULL_OBJECT);
|
|
1066
|
+
return logFn(messageObject);
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
else {
|
|
1070
|
+
msgObj = messageObject;
|
|
1071
|
+
}
|
|
1072
|
+
const keys = Object.keys(msgObj);
|
|
1073
|
+
if (keys.length === 0) {
|
|
1074
|
+
this.warn(ERROR.VAR.EMPTY_OBJECT);
|
|
1075
|
+
return logFn(msgObj);
|
|
1076
|
+
}
|
|
1077
|
+
if (keys.length > 1) {
|
|
1078
|
+
this.warn(ERROR.VAR.MULTIPLE_KEYS);
|
|
1079
|
+
return logFn(msgObj);
|
|
1080
|
+
}
|
|
1081
|
+
if (format === FORMAT.JSON) {
|
|
1082
|
+
const messageKey = keys[0];
|
|
1083
|
+
const messageVal = msgObj[messageKey];
|
|
1084
|
+
const json = {
|
|
1085
|
+
data: parse(messageVal),
|
|
1086
|
+
dataType: typeof messageVal,
|
|
1087
|
+
log: logLevel,
|
|
1088
|
+
message: stringify(messageVal),
|
|
1089
|
+
var: messageKey,
|
|
1090
|
+
...this.tags,
|
|
1091
|
+
};
|
|
1092
|
+
if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {
|
|
1093
|
+
out(json, { level: logLevel });
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
else {
|
|
1097
|
+
return logFn(msgObj);
|
|
1098
|
+
}
|
|
1099
|
+
};
|
|
1100
|
+
return logFn;
|
|
1101
|
+
}
|
|
1102
|
+
tag(key, value) {
|
|
1103
|
+
if (value) {
|
|
1104
|
+
this.tags[forceString(key)] = forceString(value);
|
|
1105
|
+
return;
|
|
1106
|
+
}
|
|
1107
|
+
if (Array.isArray(key)) {
|
|
1108
|
+
key.forEach((k) => {
|
|
1109
|
+
this.tags[forceString(k)] = "";
|
|
1110
|
+
});
|
|
1111
|
+
return;
|
|
1112
|
+
}
|
|
1113
|
+
if (key === null) {
|
|
1114
|
+
this.tags.null = "";
|
|
1115
|
+
return;
|
|
1116
|
+
}
|
|
1117
|
+
if (typeof key === "object") {
|
|
1118
|
+
Object.keys(key).forEach((k) => {
|
|
1119
|
+
this.tags[forceString(k)] = forceString(key[k]);
|
|
1120
|
+
});
|
|
1121
|
+
}
|
|
1122
|
+
else {
|
|
1123
|
+
this.tags[forceString(key)] = "";
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
untag(key) {
|
|
1127
|
+
if (Array.isArray(key)) {
|
|
1128
|
+
key.forEach((k) => {
|
|
1129
|
+
delete this.tags[forceString(k)];
|
|
1130
|
+
});
|
|
1131
|
+
return;
|
|
1132
|
+
}
|
|
1133
|
+
if (key === null) {
|
|
1134
|
+
delete this.tags.null;
|
|
1135
|
+
return;
|
|
1136
|
+
}
|
|
1137
|
+
if (typeof key === "object") {
|
|
1138
|
+
Object.keys(key).forEach((k) => {
|
|
1139
|
+
delete this.tags[forceString(k)];
|
|
1140
|
+
});
|
|
1141
|
+
}
|
|
1142
|
+
else {
|
|
1143
|
+
delete this.tags[forceString(key)];
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
with(key, value) {
|
|
1147
|
+
const logger = new Logger(this.options);
|
|
1148
|
+
logger.tag(this.tags);
|
|
1149
|
+
logger.tag(key, value);
|
|
1150
|
+
return logger;
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
function logTags(withTags) {
|
|
1155
|
+
const { PROJECT_COMMIT, PROJECT_ENV, PROJECT_KEY, PROJECT_SERVICE, PROJECT_SPONSOR, PROJECT_VERSION, } = process.env;
|
|
1156
|
+
const tags = {};
|
|
1157
|
+
if (PROJECT_COMMIT) {
|
|
1158
|
+
tags.commit = PROJECT_COMMIT;
|
|
1159
|
+
}
|
|
1160
|
+
if (PROJECT_ENV) {
|
|
1161
|
+
tags.env = PROJECT_ENV;
|
|
1162
|
+
}
|
|
1163
|
+
if (PROJECT_KEY) {
|
|
1164
|
+
tags.project = PROJECT_KEY;
|
|
1165
|
+
}
|
|
1166
|
+
if (PROJECT_SERVICE) {
|
|
1167
|
+
tags.service = PROJECT_SERVICE;
|
|
1168
|
+
}
|
|
1169
|
+
if (PROJECT_SPONSOR) {
|
|
1170
|
+
tags.sponsor = PROJECT_SPONSOR;
|
|
1171
|
+
}
|
|
1172
|
+
if (process.env.npm_package_version || PROJECT_VERSION) {
|
|
1173
|
+
tags.version = (process.env.npm_package_version ||
|
|
1174
|
+
PROJECT_VERSION);
|
|
1175
|
+
}
|
|
1176
|
+
return {
|
|
1177
|
+
...tags,
|
|
1178
|
+
...withTags,
|
|
1179
|
+
};
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
function forceVar(key, value) {
|
|
1183
|
+
if (typeof key === "undefined") {
|
|
1184
|
+
return {};
|
|
1185
|
+
}
|
|
1186
|
+
if (typeof key === "object" && key !== null) {
|
|
1187
|
+
if (Object.keys(key).length === 1) {
|
|
1188
|
+
return key;
|
|
1189
|
+
}
|
|
1190
|
+
else {
|
|
1191
|
+
return { value: key };
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
const keyStr = forceString(key);
|
|
1195
|
+
if (typeof value === "undefined") {
|
|
1196
|
+
return { [keyStr]: "" };
|
|
1197
|
+
}
|
|
1198
|
+
else {
|
|
1199
|
+
return { [keyStr]: value };
|
|
1200
|
+
}
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
function isAxiosResponse(response) {
|
|
1204
|
+
if (typeof response !== "object" || response === null) {
|
|
1205
|
+
return false;
|
|
1206
|
+
}
|
|
1207
|
+
const r = response;
|
|
1208
|
+
return !!(r &&
|
|
1209
|
+
r.config &&
|
|
1210
|
+
r.data &&
|
|
1211
|
+
r.headers &&
|
|
1212
|
+
r.request &&
|
|
1213
|
+
r.status &&
|
|
1214
|
+
r.statusText);
|
|
1215
|
+
}
|
|
1216
|
+
function filterAxiosResponse(response) {
|
|
1217
|
+
if (!isAxiosResponse(response)) {
|
|
1218
|
+
return response;
|
|
1219
|
+
}
|
|
1220
|
+
const r = response;
|
|
1221
|
+
const newResponse = {
|
|
1222
|
+
data: r.data,
|
|
1223
|
+
headers: r.headers,
|
|
1224
|
+
status: r.status,
|
|
1225
|
+
statusText: r.statusText,
|
|
1226
|
+
};
|
|
1227
|
+
if (r.isAxiosError) {
|
|
1228
|
+
newResponse.isAxiosError = r.isAxiosError;
|
|
1229
|
+
}
|
|
1230
|
+
return newResponse;
|
|
1231
|
+
}
|
|
1232
|
+
const axiosResponseVarPipeline = {
|
|
1233
|
+
filter: filterAxiosResponse,
|
|
1234
|
+
key: "response",
|
|
1235
|
+
};
|
|
1236
|
+
function isError(item) {
|
|
1237
|
+
if (typeof item !== "object" || item === null) {
|
|
1238
|
+
return false;
|
|
1239
|
+
}
|
|
1240
|
+
if (item instanceof Error) {
|
|
1241
|
+
return true;
|
|
1242
|
+
}
|
|
1243
|
+
const i = item;
|
|
1244
|
+
if (i.isProjectError) {
|
|
1245
|
+
return true;
|
|
1246
|
+
}
|
|
1247
|
+
return false;
|
|
1248
|
+
}
|
|
1249
|
+
function filterErrorVar(item) {
|
|
1250
|
+
if (!isError(item)) {
|
|
1251
|
+
return item;
|
|
1252
|
+
}
|
|
1253
|
+
const e = item;
|
|
1254
|
+
const newItem = {
|
|
1255
|
+
message: e.message,
|
|
1256
|
+
name: e.name,
|
|
1257
|
+
};
|
|
1258
|
+
if (e.cause) {
|
|
1259
|
+
newItem.cause = e.cause;
|
|
1260
|
+
}
|
|
1261
|
+
if (e.stack) {
|
|
1262
|
+
newItem.stack = e.stack;
|
|
1263
|
+
}
|
|
1264
|
+
if (e.isProjectError) {
|
|
1265
|
+
newItem.isProjectError = e.isProjectError;
|
|
1266
|
+
newItem.title = e.title;
|
|
1267
|
+
newItem.detail = e.detail;
|
|
1268
|
+
newItem.status = e.status;
|
|
1269
|
+
}
|
|
1270
|
+
return newItem;
|
|
1271
|
+
}
|
|
1272
|
+
const errorVarPipeline = {
|
|
1273
|
+
filter: filterErrorVar,
|
|
1274
|
+
key: "error",
|
|
1275
|
+
};
|
|
1276
|
+
const pipelines = [axiosResponseVarPipeline, errorVarPipeline];
|
|
1277
|
+
|
|
1278
|
+
function keyValueToArray(keyValue) {
|
|
1279
|
+
const key = Object.keys(keyValue)[0];
|
|
1280
|
+
return [key, keyValue[key]];
|
|
1281
|
+
}
|
|
1282
|
+
function logVar(key, value) {
|
|
1283
|
+
let [k, v] = keyValueToArray(forceVar(key, value));
|
|
1284
|
+
for (const pipeline of pipelines) {
|
|
1285
|
+
if (k === pipeline.key) {
|
|
1286
|
+
v = pipeline.filter(v);
|
|
1287
|
+
}
|
|
1288
|
+
}
|
|
1289
|
+
return { [k]: v };
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
function envBoolean(key, { defaultValue }) {
|
|
1293
|
+
const value = process.env[key];
|
|
1294
|
+
if (value === undefined)
|
|
1295
|
+
return defaultValue;
|
|
1296
|
+
const lower = value.toLowerCase();
|
|
1297
|
+
return !(lower === "" ||
|
|
1298
|
+
lower === "0" ||
|
|
1299
|
+
lower === "f" ||
|
|
1300
|
+
lower === "false" ||
|
|
1301
|
+
lower === "n" ||
|
|
1302
|
+
lower === "no");
|
|
1303
|
+
}
|
|
1304
|
+
class JaypieLogger {
|
|
1305
|
+
constructor({ level = process.env.LOG_LEVEL, tags = {}, } = {}) {
|
|
1306
|
+
this._params = { level, tags };
|
|
1307
|
+
this._loggers = [];
|
|
1308
|
+
this._tags = {};
|
|
1309
|
+
this._withLoggers = {};
|
|
1310
|
+
this.level = level || DEFAULT.LEVEL;
|
|
1311
|
+
this._tags = { ...logTags(), ...tags };
|
|
1312
|
+
this._logger = new Logger({
|
|
1313
|
+
format: FORMAT.JSON,
|
|
1314
|
+
level: this.level,
|
|
1315
|
+
tags: this._tags,
|
|
1316
|
+
});
|
|
1317
|
+
this._loggers = [this._logger];
|
|
1318
|
+
this.debug = ((...args) => this._logger.debug(...args));
|
|
1319
|
+
this.debug.var = (messageObject, messageValue) => this._logger.debug.var(messageObject, messageValue);
|
|
1320
|
+
this.error = ((...args) => this._logger.error(...args));
|
|
1321
|
+
this.error.var = (messageObject, messageValue) => this._logger.error.var(messageObject, messageValue);
|
|
1322
|
+
this.fatal = ((...args) => this._logger.fatal(...args));
|
|
1323
|
+
this.fatal.var = (messageObject, messageValue) => this._logger.fatal.var(messageObject, messageValue);
|
|
1324
|
+
this.info = ((...args) => this._logger.info(...args));
|
|
1325
|
+
this.info.var = (messageObject, messageValue) => this._logger.info.var(messageObject, messageValue);
|
|
1326
|
+
this.trace = ((...args) => this._logger.trace(...args));
|
|
1327
|
+
this.trace.var = (messageObject, messageValue) => this._logger.trace.var(messageObject, messageValue);
|
|
1328
|
+
this.warn = ((...args) => this._logger.warn(...args));
|
|
1329
|
+
this.warn.var = (messageObject, messageValue) => this._logger.warn.var(messageObject, messageValue);
|
|
1330
|
+
this.var = (messageObject, messageValue) => this._logger.var(logVar(messageObject, messageValue));
|
|
1331
|
+
}
|
|
1332
|
+
init() {
|
|
1333
|
+
for (const logger of this._loggers) {
|
|
1334
|
+
if ("init" in logger && typeof logger.init === "function") {
|
|
1335
|
+
logger.init();
|
|
1336
|
+
}
|
|
1337
|
+
}
|
|
1338
|
+
const level = this._params.level;
|
|
1339
|
+
const tags = this._params.tags;
|
|
1340
|
+
this.level = level || DEFAULT.LEVEL;
|
|
1341
|
+
this._tags = { ...logTags(), ...tags };
|
|
1342
|
+
this._logger = new Logger({
|
|
1343
|
+
format: FORMAT.JSON,
|
|
1344
|
+
level: this.level,
|
|
1345
|
+
tags: this._tags,
|
|
1346
|
+
});
|
|
1347
|
+
this._loggers = [this._logger];
|
|
1348
|
+
this._withLoggers = {};
|
|
1349
|
+
const levels = [
|
|
1350
|
+
"debug",
|
|
1351
|
+
"error",
|
|
1352
|
+
"fatal",
|
|
1353
|
+
"info",
|
|
1354
|
+
"trace",
|
|
1355
|
+
"warn",
|
|
1356
|
+
];
|
|
1357
|
+
levels.forEach((lvl) => {
|
|
1358
|
+
this[lvl] = ((...args) => {
|
|
1359
|
+
this._logger[lvl](...args);
|
|
1360
|
+
});
|
|
1361
|
+
this[lvl].var = (messageObject, messageValue) => {
|
|
1362
|
+
this._logger[lvl].var(messageObject, messageValue);
|
|
1363
|
+
};
|
|
1364
|
+
});
|
|
1365
|
+
}
|
|
1366
|
+
lib({ level, lib, tags = {}, } = {}) {
|
|
1367
|
+
const newTags = Object.assign({}, this._tags, tags);
|
|
1368
|
+
if (lib) {
|
|
1369
|
+
newTags.lib = lib;
|
|
1370
|
+
}
|
|
1371
|
+
const logger = new JaypieLogger({
|
|
1372
|
+
level: (() => {
|
|
1373
|
+
if (level) {
|
|
1374
|
+
return level;
|
|
1375
|
+
}
|
|
1376
|
+
if (process.env.MODULE_LOG_LEVEL) {
|
|
1377
|
+
return process.env.MODULE_LOG_LEVEL;
|
|
1378
|
+
}
|
|
1379
|
+
if (envBoolean("MODULE_LOGGER", { defaultValue: false })) {
|
|
1380
|
+
return process.env.LOG_LEVEL;
|
|
1381
|
+
}
|
|
1382
|
+
return LEVEL.SILENT;
|
|
1383
|
+
})(),
|
|
1384
|
+
tags: newTags,
|
|
1385
|
+
});
|
|
1386
|
+
this._loggers.push(logger._logger);
|
|
1387
|
+
return logger;
|
|
1388
|
+
}
|
|
1389
|
+
tag(tags) {
|
|
1390
|
+
for (const logger of this._loggers) {
|
|
1391
|
+
logger.tag(tags);
|
|
1392
|
+
}
|
|
1393
|
+
Object.assign(this._tags, tags);
|
|
1394
|
+
}
|
|
1395
|
+
untag(key) {
|
|
1396
|
+
for (const logger of this._loggers) {
|
|
1397
|
+
logger.untag(key);
|
|
1398
|
+
}
|
|
1399
|
+
if (Array.isArray(key)) {
|
|
1400
|
+
key.forEach((k) => {
|
|
1401
|
+
delete this._tags[String(k)];
|
|
1402
|
+
});
|
|
1403
|
+
}
|
|
1404
|
+
else if (typeof key === "object" && key !== null) {
|
|
1405
|
+
Object.keys(key).forEach((k) => {
|
|
1406
|
+
delete this._tags[k];
|
|
1407
|
+
});
|
|
1408
|
+
}
|
|
1409
|
+
else {
|
|
1410
|
+
delete this._tags[String(key)];
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
with(key, value) {
|
|
1414
|
+
if (!key || (typeof key !== "object" && value === undefined)) {
|
|
1415
|
+
throw new Error("ConfigurationError: with() requires an object argument or key-value pair");
|
|
1416
|
+
}
|
|
1417
|
+
const loggerKey = JSON.stringify([key, value]);
|
|
1418
|
+
if (Object.keys(this._withLoggers).includes(loggerKey)) {
|
|
1419
|
+
return this._withLoggers[loggerKey];
|
|
1420
|
+
}
|
|
1421
|
+
const logger = new JaypieLogger({
|
|
1422
|
+
level: this.level,
|
|
1423
|
+
tags: { ...this._tags },
|
|
1424
|
+
});
|
|
1425
|
+
logger._logger = this._logger.with(key, value);
|
|
1426
|
+
logger._loggers = [logger._logger];
|
|
1427
|
+
this._withLoggers[loggerKey] = logger;
|
|
1428
|
+
this._loggers.push(logger._logger);
|
|
1429
|
+
return logger;
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
function createLogger$1(tags = {}) {
|
|
1433
|
+
const jaypieLogger = new JaypieLogger({
|
|
1434
|
+
tags,
|
|
1435
|
+
});
|
|
1436
|
+
return jaypieLogger;
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
createLogger$1();
|
|
1440
|
+
|
|
1441
|
+
const mockLog = mockLogFactory();
|
|
1442
|
+
const createLogger = createMockWrappedFunction(createLogger$1, mockLog);
|
|
1443
|
+
|
|
1444
|
+
var logger = /*#__PURE__*/Object.freeze({
|
|
1445
|
+
__proto__: null,
|
|
1446
|
+
FORMAT: FORMAT,
|
|
1447
|
+
LEVEL: LEVEL,
|
|
1448
|
+
Logger: Logger,
|
|
1449
|
+
createLogger: createLogger,
|
|
1450
|
+
default: mockLog
|
|
1451
|
+
});
|
|
1452
|
+
|
|
828
1453
|
// Mongoose mock functions
|
|
829
1454
|
const connect = createMockReturnedFunction(true);
|
|
830
1455
|
const connectFromSecretEnv = createMockReturnedFunction(true);
|
|
@@ -878,7 +1503,7 @@ var textract$1 = /*#__PURE__*/Object.freeze({
|
|
|
878
1503
|
|
|
879
1504
|
// Import all mocks
|
|
880
1505
|
// Export default object with all mocks
|
|
881
|
-
|
|
1506
|
+
const mock = {
|
|
882
1507
|
// AWS module
|
|
883
1508
|
...aws,
|
|
884
1509
|
// Core module
|
|
@@ -887,15 +1512,17 @@ var index = {
|
|
|
887
1512
|
...datadog,
|
|
888
1513
|
// Express module
|
|
889
1514
|
...express,
|
|
1515
|
+
...kit,
|
|
890
1516
|
// Lambda module
|
|
891
1517
|
...lambda,
|
|
892
1518
|
// LLM module
|
|
893
1519
|
...llm,
|
|
1520
|
+
...logger,
|
|
894
1521
|
// Mongoose module (now empty)
|
|
895
1522
|
...mongoose,
|
|
896
1523
|
// Textract module
|
|
897
1524
|
...textract$1,
|
|
898
1525
|
};
|
|
899
1526
|
|
|
900
|
-
export { BadGatewayError, BadRequestError, ConfigurationError, DATADOG, ERROR, EXPRESS, ForbiddenError, GatewayTimeoutError, GoneError, HTTP$1 as HTTP, IllogicalError, InternalError, JAYPIE, JaypieToolkit, LLM, Llm, LlmMessageRole, LlmMessageType, MarkdownPage, MethodNotAllowedError, MultiError, NotFoundError, NotImplementedError, PROJECT, ProjectError, ProjectMultiError, RejectedError, TeapotError, Toolkit, UnauthorizedError, UnavailableError, UnhandledError, UnreachableCodeError, VALIDATE, badRequestRoute, cloneDeep, connect, connectFromSecretEnv, cors,
|
|
1527
|
+
export { BadGatewayError, BadRequestError, ConfigurationError, DATADOG, ERROR$1 as ERROR, EXPRESS, FORMAT, ForbiddenError, GatewayTimeoutError, GeminiProvider, GoneError, HTTP$1 as HTTP, IllogicalError, InternalError, JAYPIE, JaypieToolkit, LEVEL, LLM, Llm, LlmMessageRole, LlmMessageType, Logger, MarkdownPage, MethodNotAllowedError, MultiError, NotFoundError, NotImplementedError, OpenRouterProvider, PROJECT, ProjectError, ProjectMultiError, RejectedError, TeapotError, Toolkit, UnauthorizedError, UnavailableError, UnhandledError, UnreachableCodeError, VALIDATE, badRequestRoute, cloneDeep, connect, connectFromSecretEnv, cors, createLogger, mock as default, disconnect, echoRoute, envBoolean$1 as envBoolean, envsKey, errorFromStatusCode, expressHandler, expressHttpCodeHandler, forbiddenRoute, force, formatError, getEnvSecret, getHeaderFrom, getMessages, getObjectKeyCaseInsensitive, getSecret, getSingletonMessage, getTextractJob, goneRoute, hasDatadogEnv, isClass, isJaypieError, isNodeTestEnv, isProductionEnv, jaypieHandler, lambdaHandler, methodNotAllowedRoute, noContentRoute, notFoundRoute, notImplementedRoute, optional, placeholders, required, resolveValue, safeParseFloat, sendBatchMessages, sendMessage, sendTextractJob, sleep, submitDistribution, submitMetric, submitMetricSet, textractJsonToMarkdown, toolkit, tools, uuid, validate };
|
|
901
1528
|
//# sourceMappingURL=index.js.map
|