From a4ffe2de35559eb09bed876c55b13823b2c3faab Mon Sep 17 00:00:00 2001 From: Tomohiko Ozawa Date: Thu, 2 Mar 2023 18:18:44 +0900 Subject: [PATCH] Use loglevel to suppress debug log (#76) --- bin/openapi-merger.js | 12 ++++++++---- package-lock.json | 18 ++++++++++++++++++ package.json | 1 + src/components.js | 3 ++- src/http.js | 9 +++++---- src/merger.js | 7 ++++--- src/ref.js | 5 +++-- src/yaml.js | 3 ++- test/test_merger.js | 3 +++ 9 files changed, 46 insertions(+), 15 deletions(-) mode change 100644 => 100755 bin/openapi-merger.js diff --git a/bin/openapi-merger.js b/bin/openapi-merger.js old mode 100644 new mode 100755 index 7215663..ef1295e --- a/bin/openapi-merger.js +++ b/bin/openapi-merger.js @@ -3,12 +3,15 @@ const program = require("commander"); const main = require("../src/main"); +const log = require("loglevel"); + +log.setLevel("info"); function validate(val, pattern, message) { if (val.match(pattern)) { return val; } - console.error("error: " + message); + log.error("error: " + message); process.exit(1); } @@ -32,7 +35,8 @@ program debug: args.debug, }; if (params.debug) { - console.debug("params: ", params); + log.setLevel("debug"); + log.debug("params: ", params); } try { @@ -40,9 +44,9 @@ program } catch (e) { // show error message if (params.debug) { - console.error(e); + log.error(e); } else { - console.error("Error :" + e.message); + log.error("Error :" + e.message); } process.exit(1); } diff --git a/package-lock.json b/package-lock.json index ec0b9a4..b7dd7cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "glob": "8.1.0", "js-yaml": "4.1.0", "lodash": "4.17.21", + "loglevel": "1.8.1", "mktemp": "1.0.0", "node-fetch": "2.6.9" }, @@ -3024,6 +3025,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, "node_modules/loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -6744,6 +6757,11 @@ "is-unicode-supported": "^0.1.0" } }, + "loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" + }, "loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", diff --git a/package.json b/package.json index 2e19d34..d4f1dde 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "glob": "8.1.0", "js-yaml": "4.1.0", "lodash": "4.17.21", + "loglevel": "1.8.1", "mktemp": "1.0.0", "node-fetch": "2.6.9" }, diff --git a/src/components.js b/src/components.js index daf9e47..e62141d 100644 --- a/src/components.js +++ b/src/components.js @@ -4,6 +4,7 @@ const Path = require("path"); const { readYAML } = require("./yaml"); const { download } = require("./http"); const { sliceObject, parseUrl } = require("./util"); +const log = require("loglevel"); class Component { constructor(type, name, content, url) { @@ -106,7 +107,7 @@ class ComponentNameResolver { for (let i = 0; i < cmps.length; i++) { const resolved = `${name}${i + 1}`; cToName[cmps[i].url] = resolved; - console.warn(`conflicted component name "${name}" resolved to "${resolved}". url=${cmps[i].url}`); + log.warn(`conflicted component name "${name}" resolved to "${resolved}". url=${cmps[i].url}`); } } } diff --git a/src/http.js b/src/http.js index 652bb5d..8566ff6 100644 --- a/src/http.js +++ b/src/http.js @@ -3,6 +3,7 @@ const fetch = require("node-fetch"); const _ = require("lodash"); const { loadYAML } = require("./yaml"); +const log = require("loglevel"); const cache = {}; @@ -16,16 +17,16 @@ async function download(url) { return _.cloneDeep(cache[url]); } - console.info(`fetching: ${url}`); + log.info(`fetching: ${url}`); let res; try { res = await fetch(url); } catch (e) { - console.error(`Failed to fetch: ${url}`); + log.error(`Failed to fetch: ${url}`); return {}; } if (!res.ok) { - console.error(`${res.status} returned: ${url}`); + log.error(`${res.status} returned: ${url}`); return {}; } @@ -36,7 +37,7 @@ async function download(url) { } else if (url.match(/\.json$/)) { doc = JSON.parse(body); } else { - console.warn(`Cannot determine the file type: ${url}`); + log.warn(`Cannot determine the file type: ${url}`); // assume YAML for now doc = loadYAML(body); } diff --git a/src/merger.js b/src/merger.js index dda3d77..933e94b 100644 --- a/src/merger.js +++ b/src/merger.js @@ -17,6 +17,7 @@ const { IncludedArray, } = require("./util"); const { ComponentManager, ComponentNameResolver } = require("./components"); +const log = require("loglevel"); class Merger { static INCLUDE_PATTERN = /^\$include(#\w+?)?(\.\w+?)?$/; @@ -98,7 +99,7 @@ class Merger { * @param jsonPath a JSON path for accessing the target object */ handleRef = async (obj, key, val, file, jsonPath) => { - console.debug(`ref : ${jsonPath} file=${Path.relative(this.baseDir, file)}`); + log.debug(`ref : ${jsonPath} file=${Path.relative(this.baseDir, file)}`); obj[key] = mergeOrOverwrite(obj[key], val); @@ -161,7 +162,7 @@ class Merger { * @returns {Promise<*>} a result object or array */ handleInclude = async (obj, key, val, file, jsonPath) => { - console.debug(`include: ${jsonPath} file=${Path.relative(this.baseDir, file)}`); + log.debug(`include: ${jsonPath} file=${Path.relative(this.baseDir, file)}`); obj[key] = mergeOrOverwrite(obj[key], val); @@ -240,7 +241,7 @@ function processInclude(key, obj, config) { } const clazzConfig = config.include[clazz]; if (!clazzConfig) { - console.warn(`$include classname '${clazz} specified, but no configuration found.`); + log.warn(`$include classname '${clazz} specified, but no configuration found.`); return obj; } obj = filterObject(obj, clazzConfig.filter); diff --git a/src/ref.js b/src/ref.js index 5741c90..7cff446 100644 --- a/src/ref.js +++ b/src/ref.js @@ -1,6 +1,7 @@ +const log = require("loglevel"); + // cf. https://github.com/OAI/OpenAPI-Specification/blob/master/schemas/v3.0/schema.json // https://github.com/OAI/OpenAPI-Specification/tree/master/versions - const FIELD_PATTERN = "([a-zA-Z0-9\\-_]|[^\x01-\x7E\uFF61-\uFF9F])+"; const MAX_JSON_PATH_DEPTH = 100; @@ -69,7 +70,7 @@ function getRefType(path) { return k; } } - console.warn(`could not infer $ref type at "${path}". fallback to include.`); + log.warn(`could not infer $ref type at "${path}". fallback to include.`); if (path.split(".").length > MAX_JSON_PATH_DEPTH) { throw new Error(`JSON path depth exceeds ${MAX_JSON_PATH_DEPTH}, aborting...`); } diff --git a/src/yaml.js b/src/yaml.js index b08c787..784d201 100644 --- a/src/yaml.js +++ b/src/yaml.js @@ -3,6 +3,7 @@ const path = require("path"); const fs = require("fs"); const yaml = require("js-yaml"); +const log = require("loglevel"); function loadYAML(str) { return yaml.load(str); @@ -22,7 +23,7 @@ function writeYAML(doc, filePath) { } fs.writeFileSync(filePath, dump); } else { - console.log(dump); + log.info(dump); } } diff --git a/test/test_merger.js b/test/test_merger.js index e0abf7b..f00fee8 100644 --- a/test/test_merger.js +++ b/test/test_merger.js @@ -4,8 +4,11 @@ const fs = require("fs-extra"); const path = require("path"); const glob = require("glob"); const main = require("../src/main"); +const log = require("loglevel"); const assert = require("chai").assert; +log.setLevel("debug"); + const runMerger = async (name) => { const configFile = path.join("resources", name, "config.yaml"); const params = {