@logtape/graphql-yoga 2.3.0-dev.0 → 2.3.0-dev.815
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/mod.cjs +64 -10
- package/dist/mod.js +64 -10
- package/dist/mod.js.map +1 -1
- package/package.json +4 -4
package/dist/mod.cjs
CHANGED
|
@@ -46,8 +46,10 @@ function getYogaLogger(options = {}) {
|
|
|
46
46
|
const category = normalizeCategory(options.category ?? ["graphql-yoga"]);
|
|
47
47
|
const logger = (0, __logtape_logtape.getLogger)(category);
|
|
48
48
|
const levelsMap = {
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
debug: options.levelsMap?.debug ?? defaultLevelsMap.debug,
|
|
50
|
+
info: options.levelsMap?.info ?? defaultLevelsMap.info,
|
|
51
|
+
warn: options.levelsMap?.warn ?? defaultLevelsMap.warn,
|
|
52
|
+
error: options.levelsMap?.error ?? defaultLevelsMap.error
|
|
51
53
|
};
|
|
52
54
|
return {
|
|
53
55
|
debug: (...args) => logYogaArgs(logger, levelsMap.debug, args),
|
|
@@ -60,18 +62,52 @@ function normalizeCategory(category) {
|
|
|
60
62
|
return typeof category === "string" ? [category] : category;
|
|
61
63
|
}
|
|
62
64
|
function logYogaArgs(logger, level, args) {
|
|
65
|
+
if (args.length < 1) {
|
|
66
|
+
logWithMessage(logger, level, "GraphQL Yoga log");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
63
69
|
const [first, ...rest] = args;
|
|
64
70
|
const properties = rest.length > 0 ? { args: rest } : void 0;
|
|
65
|
-
if (
|
|
66
|
-
else if (first
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
if (first instanceof Error) logError(logger, level, first, properties);
|
|
72
|
+
else if (typeof first === "string") logWithMessage(logger, level, "{message}", {
|
|
73
|
+
message: first,
|
|
74
|
+
...properties
|
|
75
|
+
});
|
|
76
|
+
else if (isPlainRecord(first)) logWithMessage(logger, level, "{*}", mergeRestArgs(first, rest));
|
|
69
77
|
else logWithMessage(logger, level, "{*}", { args });
|
|
70
78
|
}
|
|
79
|
+
function mergeRestArgs(properties, rest) {
|
|
80
|
+
if (rest.length < 1) return properties;
|
|
81
|
+
const restKey = getRestArgsKey(properties);
|
|
82
|
+
return {
|
|
83
|
+
...properties,
|
|
84
|
+
[restKey]: rest
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function getRestArgsKey(properties) {
|
|
88
|
+
for (const key of [
|
|
89
|
+
"args",
|
|
90
|
+
"additionalArgs",
|
|
91
|
+
"restArgs"
|
|
92
|
+
]) if (!Object.hasOwn(properties, key)) return key;
|
|
93
|
+
for (let i = 2;; i++) {
|
|
94
|
+
const key = `additionalArgs${i}`;
|
|
95
|
+
if (!Object.hasOwn(properties, key)) return key;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
71
98
|
function logError(logger, level, error, properties) {
|
|
72
99
|
if (level === "warning" || level === "error" || level === "fatal") {
|
|
73
|
-
|
|
74
|
-
|
|
100
|
+
switch (level) {
|
|
101
|
+
case "warning":
|
|
102
|
+
logger.warning(error, properties);
|
|
103
|
+
break;
|
|
104
|
+
case "error":
|
|
105
|
+
logger.error(error, properties);
|
|
106
|
+
break;
|
|
107
|
+
case "fatal":
|
|
108
|
+
logger.fatal(error, properties);
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
75
111
|
return;
|
|
76
112
|
}
|
|
77
113
|
logWithMessage(logger, level, "{error.message}", {
|
|
@@ -80,8 +116,26 @@ function logError(logger, level, error, properties) {
|
|
|
80
116
|
});
|
|
81
117
|
}
|
|
82
118
|
function logWithMessage(logger, level, message, properties) {
|
|
83
|
-
|
|
84
|
-
|
|
119
|
+
switch (level) {
|
|
120
|
+
case "trace":
|
|
121
|
+
logger.trace(message, properties);
|
|
122
|
+
break;
|
|
123
|
+
case "debug":
|
|
124
|
+
logger.debug(message, properties);
|
|
125
|
+
break;
|
|
126
|
+
case "info":
|
|
127
|
+
logger.info(message, properties);
|
|
128
|
+
break;
|
|
129
|
+
case "warning":
|
|
130
|
+
logger.warning(message, properties);
|
|
131
|
+
break;
|
|
132
|
+
case "error":
|
|
133
|
+
logger.error(message, properties);
|
|
134
|
+
break;
|
|
135
|
+
case "fatal":
|
|
136
|
+
logger.fatal(message, properties);
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
85
139
|
}
|
|
86
140
|
function isPlainRecord(value) {
|
|
87
141
|
if (value == null || typeof value !== "object" || Array.isArray(value)) return false;
|
package/dist/mod.js
CHANGED
|
@@ -45,8 +45,10 @@ function getYogaLogger(options = {}) {
|
|
|
45
45
|
const category = normalizeCategory(options.category ?? ["graphql-yoga"]);
|
|
46
46
|
const logger = getLogger(category);
|
|
47
47
|
const levelsMap = {
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
debug: options.levelsMap?.debug ?? defaultLevelsMap.debug,
|
|
49
|
+
info: options.levelsMap?.info ?? defaultLevelsMap.info,
|
|
50
|
+
warn: options.levelsMap?.warn ?? defaultLevelsMap.warn,
|
|
51
|
+
error: options.levelsMap?.error ?? defaultLevelsMap.error
|
|
50
52
|
};
|
|
51
53
|
return {
|
|
52
54
|
debug: (...args) => logYogaArgs(logger, levelsMap.debug, args),
|
|
@@ -59,18 +61,52 @@ function normalizeCategory(category) {
|
|
|
59
61
|
return typeof category === "string" ? [category] : category;
|
|
60
62
|
}
|
|
61
63
|
function logYogaArgs(logger, level, args) {
|
|
64
|
+
if (args.length < 1) {
|
|
65
|
+
logWithMessage(logger, level, "GraphQL Yoga log");
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
62
68
|
const [first, ...rest] = args;
|
|
63
69
|
const properties = rest.length > 0 ? { args: rest } : void 0;
|
|
64
|
-
if (
|
|
65
|
-
else if (first
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
if (first instanceof Error) logError(logger, level, first, properties);
|
|
71
|
+
else if (typeof first === "string") logWithMessage(logger, level, "{message}", {
|
|
72
|
+
message: first,
|
|
73
|
+
...properties
|
|
74
|
+
});
|
|
75
|
+
else if (isPlainRecord(first)) logWithMessage(logger, level, "{*}", mergeRestArgs(first, rest));
|
|
68
76
|
else logWithMessage(logger, level, "{*}", { args });
|
|
69
77
|
}
|
|
78
|
+
function mergeRestArgs(properties, rest) {
|
|
79
|
+
if (rest.length < 1) return properties;
|
|
80
|
+
const restKey = getRestArgsKey(properties);
|
|
81
|
+
return {
|
|
82
|
+
...properties,
|
|
83
|
+
[restKey]: rest
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function getRestArgsKey(properties) {
|
|
87
|
+
for (const key of [
|
|
88
|
+
"args",
|
|
89
|
+
"additionalArgs",
|
|
90
|
+
"restArgs"
|
|
91
|
+
]) if (!Object.hasOwn(properties, key)) return key;
|
|
92
|
+
for (let i = 2;; i++) {
|
|
93
|
+
const key = `additionalArgs${i}`;
|
|
94
|
+
if (!Object.hasOwn(properties, key)) return key;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
70
97
|
function logError(logger, level, error, properties) {
|
|
71
98
|
if (level === "warning" || level === "error" || level === "fatal") {
|
|
72
|
-
|
|
73
|
-
|
|
99
|
+
switch (level) {
|
|
100
|
+
case "warning":
|
|
101
|
+
logger.warning(error, properties);
|
|
102
|
+
break;
|
|
103
|
+
case "error":
|
|
104
|
+
logger.error(error, properties);
|
|
105
|
+
break;
|
|
106
|
+
case "fatal":
|
|
107
|
+
logger.fatal(error, properties);
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
74
110
|
return;
|
|
75
111
|
}
|
|
76
112
|
logWithMessage(logger, level, "{error.message}", {
|
|
@@ -79,8 +115,26 @@ function logError(logger, level, error, properties) {
|
|
|
79
115
|
});
|
|
80
116
|
}
|
|
81
117
|
function logWithMessage(logger, level, message, properties) {
|
|
82
|
-
|
|
83
|
-
|
|
118
|
+
switch (level) {
|
|
119
|
+
case "trace":
|
|
120
|
+
logger.trace(message, properties);
|
|
121
|
+
break;
|
|
122
|
+
case "debug":
|
|
123
|
+
logger.debug(message, properties);
|
|
124
|
+
break;
|
|
125
|
+
case "info":
|
|
126
|
+
logger.info(message, properties);
|
|
127
|
+
break;
|
|
128
|
+
case "warning":
|
|
129
|
+
logger.warning(message, properties);
|
|
130
|
+
break;
|
|
131
|
+
case "error":
|
|
132
|
+
logger.error(message, properties);
|
|
133
|
+
break;
|
|
134
|
+
case "fatal":
|
|
135
|
+
logger.fatal(message, properties);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
84
138
|
}
|
|
85
139
|
function isPlainRecord(value) {
|
|
86
140
|
if (value == null || typeof value !== "object" || Array.isArray(value)) return false;
|
package/dist/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","names":["defaultLevelsMap: Readonly<Record<YogaLogLevel, LogLevel>>","options: YogaLoggerOptions","category:
|
|
1
|
+
{"version":3,"file":"mod.js","names":["defaultLevelsMap: Readonly<Record<YogaLogLevel, LogLevel>>","options: YogaLoggerOptions","category: readonly string[]","logger: LogTapeLogger","levelsMap: Readonly<Record<YogaLogLevel, LogLevel>>","category: string | readonly string[]","level: LogLevel","args: readonly unknown[]","properties: Record<string, unknown>","rest: readonly unknown[]","error: Error","properties?: Record<string, unknown>","message: string","value: unknown"],"sources":["../src/mod.ts"],"sourcesContent":["import {\n getLogger as getLogTapeLogger,\n type Logger as LogTapeLogger,\n type LogLevel,\n} from \"@logtape/logtape\";\n\nexport type { LogLevel } from \"@logtape/logtape\";\n\n/**\n * GraphQL Yoga log levels.\n * @since 2.3.0\n */\nexport type YogaLogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\n/**\n * A GraphQL Yoga-compatible logger that wraps LogTape.\n * @since 2.3.0\n */\nexport interface YogaLogger {\n /** Log at Yoga's debug level. */\n debug(...args: readonly unknown[]): void;\n\n /** Log at Yoga's info level. */\n info(...args: readonly unknown[]): void;\n\n /** Log at Yoga's warning level. */\n warn(...args: readonly unknown[]): void;\n\n /** Log at Yoga's error level. */\n error(...args: readonly unknown[]): void;\n}\n\n/**\n * Options for configuring the GraphQL Yoga LogTape logger.\n * @since 2.3.0\n */\nexport interface YogaLoggerOptions {\n /**\n * The LogTape category to use for logging.\n * @default [\"graphql-yoga\"]\n */\n readonly category?: string | readonly string[];\n\n /**\n * Mapping between GraphQL Yoga log levels and LogTape log levels.\n *\n * By default, Yoga levels are mapped as follows:\n *\n * - `debug` -> `debug`\n * - `info` -> `info`\n * - `warn` -> `warning`\n * - `error` -> `error`\n */\n readonly levelsMap?: Partial<Readonly<Record<YogaLogLevel, LogLevel>>>;\n}\n\nconst defaultLevelsMap: Readonly<Record<YogaLogLevel, LogLevel>> = {\n debug: \"debug\",\n info: \"info\",\n warn: \"warning\",\n error: \"error\",\n};\n\n/**\n * Creates a GraphQL Yoga-compatible logger that wraps LogTape.\n *\n * @example Basic usage\n * ```typescript\n * import { configure } from \"@logtape/logtape\";\n * import { getYogaLogger } from \"@logtape/graphql-yoga\";\n * import { createYoga } from \"graphql-yoga\";\n *\n * await configure({\n * // ... LogTape configuration\n * });\n *\n * const yoga = createYoga({\n * schema,\n * logging: getYogaLogger(),\n * });\n * ```\n *\n * @example With custom category and level mapping\n * ```typescript\n * const yoga = createYoga({\n * schema,\n * logging: getYogaLogger({\n * category: [\"myapp\", \"graphql\"],\n * levelsMap: { warn: \"error\" },\n * }),\n * });\n * ```\n *\n * @param options Configuration options for the logger.\n * @returns A GraphQL Yoga-compatible logger wrapping LogTape.\n * @since 2.3.0\n */\nexport function getYogaLogger(options: YogaLoggerOptions = {}): YogaLogger {\n const category: readonly string[] = normalizeCategory(\n options.category ?? [\"graphql-yoga\"],\n );\n const logger: LogTapeLogger = getLogTapeLogger(category);\n const levelsMap: Readonly<Record<YogaLogLevel, LogLevel>> = {\n debug: options.levelsMap?.debug ?? defaultLevelsMap.debug,\n info: options.levelsMap?.info ?? defaultLevelsMap.info,\n warn: options.levelsMap?.warn ?? defaultLevelsMap.warn,\n error: options.levelsMap?.error ?? defaultLevelsMap.error,\n };\n\n return {\n debug: (...args) => logYogaArgs(logger, levelsMap.debug, args),\n info: (...args) => logYogaArgs(logger, levelsMap.info, args),\n warn: (...args) => logYogaArgs(logger, levelsMap.warn, args),\n error: (...args) => logYogaArgs(logger, levelsMap.error, args),\n };\n}\n\nfunction normalizeCategory(\n category: string | readonly string[],\n): readonly string[] {\n return typeof category === \"string\" ? [category] : category;\n}\n\nfunction logYogaArgs(\n logger: LogTapeLogger,\n level: LogLevel,\n args: readonly unknown[],\n): void {\n if (args.length < 1) {\n logWithMessage(logger, level, \"GraphQL Yoga log\");\n return;\n }\n\n const [first, ...rest] = args;\n const properties = rest.length > 0 ? { args: rest } : undefined;\n\n if (first instanceof Error) {\n logError(logger, level, first, properties);\n } else if (typeof first === \"string\") {\n logWithMessage(logger, level, \"{message}\", {\n message: first,\n ...properties,\n });\n } else if (isPlainRecord(first)) {\n logWithMessage(logger, level, \"{*}\", mergeRestArgs(first, rest));\n } else {\n logWithMessage(logger, level, \"{*}\", { args });\n }\n}\n\nfunction mergeRestArgs(\n properties: Record<string, unknown>,\n rest: readonly unknown[],\n): Record<string, unknown> {\n if (rest.length < 1) return properties;\n const restKey = getRestArgsKey(properties);\n return { ...properties, [restKey]: rest };\n}\n\nfunction getRestArgsKey(properties: Record<string, unknown>): string {\n for (const key of [\"args\", \"additionalArgs\", \"restArgs\"]) {\n if (!Object.hasOwn(properties, key)) return key;\n }\n\n for (let i = 2;; i++) {\n const key = `additionalArgs${i}`;\n if (!Object.hasOwn(properties, key)) return key;\n }\n}\n\nfunction logError(\n logger: LogTapeLogger,\n level: LogLevel,\n error: Error,\n properties?: Record<string, unknown>,\n): void {\n if (level === \"warning\" || level === \"error\" || level === \"fatal\") {\n switch (level) {\n case \"warning\":\n logger.warning(error, properties);\n break;\n case \"error\":\n logger.error(error, properties);\n break;\n case \"fatal\":\n logger.fatal(error, properties);\n break;\n }\n return;\n }\n\n logWithMessage(logger, level, \"{error.message}\", {\n ...properties,\n error,\n });\n}\n\nfunction logWithMessage(\n logger: LogTapeLogger,\n level: LogLevel,\n message: string,\n properties?: Record<string, unknown>,\n): void {\n switch (level) {\n case \"trace\":\n logger.trace(message, properties);\n break;\n case \"debug\":\n logger.debug(message, properties);\n break;\n case \"info\":\n logger.info(message, properties);\n break;\n case \"warning\":\n logger.warning(message, properties);\n break;\n case \"error\":\n logger.error(message, properties);\n break;\n case \"fatal\":\n logger.fatal(message, properties);\n break;\n }\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (value == null || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n if (value instanceof Error) return false;\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@logtape/graphql-yoga",
|
|
3
|
-
"version": "2.3.0-dev.
|
|
3
|
+
"version": "2.3.0-dev.815+6c913282",
|
|
4
4
|
"description": "GraphQL Yoga adapter for LogTape logging library",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"logging",
|
|
@@ -50,11 +50,11 @@
|
|
|
50
50
|
"dist/"
|
|
51
51
|
],
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"
|
|
53
|
+
"graphql": "^15.2.0 || ^16.0.0",
|
|
54
|
+
"graphql-yoga": "^5.0.0",
|
|
55
|
+
"@logtape/logtape": "^2.3.0-dev.815+6c913282"
|
|
54
56
|
},
|
|
55
57
|
"devDependencies": {
|
|
56
|
-
"@alinea/suite": "^0.6.3",
|
|
57
|
-
"@std/assert": "npm:@jsr/std__assert@^1.0.13",
|
|
58
58
|
"graphql": "^16.14.2",
|
|
59
59
|
"graphql-yoga": "^5.21.2",
|
|
60
60
|
"tsdown": "^0.12.7",
|