diff --git a/package-lock.json b/package-lock.json index e73066583..99e329829 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2451,6 +2451,15 @@ "resolve-from": "^5.0.0" }, "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -2467,6 +2476,16 @@ "path-exists": "^4.0.0" } }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -2496,6 +2515,12 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true } } }, @@ -5897,6 +5922,33 @@ "log-driver": "^1.2.7", "minimist": "^1.2.5", "request": "^2.88.2" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + } } }, "crc-32": { @@ -9263,30 +9315,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - } + "argparse": "^2.0.1" } }, "jsbn": { diff --git a/package.json b/package.json index 66a8846ac..1fa23b987 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-you-dont-need-lodash-underscore": "^6.13.0", - "js-yaml": "^3.14.1", + "js-yaml": "^4.1.0", "markdownlint-cli": "^0.39.0", "meteor-sdk": "0.0.21", "mocha": "^10.4.0", diff --git a/tests/i18n/test_i18n_resources.js b/tests/i18n/test_i18n_resources.js index 1cfdf07dd..0be61b048 100644 --- a/tests/i18n/test_i18n_resources.js +++ b/tests/i18n/test_i18n_resources.js @@ -1,3 +1,4 @@ +import * as path from "pathe"; /* * This script will check i18n resources keys * 1. read all available keys from YAML @@ -19,7 +20,7 @@ const IGNOREKEYS = { const fs = require("fs"); const yaml = require("js-yaml"); -const en_yaml = `${__dirname}/../../both/i18n/en.i18n.yml`; +const en_yaml = path.join(__dirname, "../../both/i18n/en.i18n.yml"); let anyErrorExitCodeToShell = 0; let globalErrorCount = 0; let globalWarningCount = 0; @@ -65,16 +66,15 @@ function collectFilesRecursive(dir, extension) { }); return results; } - -// Recursively iterate a JS object build full pathes of keys -function buildFullPathes(obj, stack, separator = ".") { +// Recursively iterate a JS object build full paths of keys +function buildFullPaths(obj, stack, separator = ".") { for (const property in obj) { if (Object.prototype.hasOwnProperty.call(obj, property)) { if (typeof obj[property] == "object") { if (stack) { - buildFullPathes(obj[property], stack + separator + property); + buildFullPaths(obj[property], stack + separator + property); } else { - buildFullPathes(obj[property], property); + buildFullPaths(obj[property], property); } } else { dictKeysFromYaml[stack + separator + property] = 0; // Remember leaf! @@ -83,10 +83,18 @@ function buildFullPathes(obj, stack, separator = ".") { } } +/** + * Checks the usage of i18n keys in code files and compares them with YAML + * files. + * + * @param {string} extension - The file extension to search for. + * @param {RegExp} keyPattern - The regular expression pattern to match i18n + * keys. + */ function checkCodeUsage(extension, keyPattern) { dictKeysFromCode = {}; let localErrorCount = 0; - const files_js = collectFilesRecursive(`${__dirname}/../..`, extension); + const files_js = collectFilesRecursive(path.join(__dirname, ".."), extension); // Find all i18n __ keys used in this file, according to regexp key pattern // provided @@ -127,15 +135,15 @@ function checkCodeUsage(extension, keyPattern) { // Read and parse YAML file to JS object let yaml_doc = undefined; try { - yaml_doc = yaml.safeLoad(fs.readFileSync(en_yaml, "utf8")); + yaml_doc = yaml.load(fs.readFileSync(en_yaml, "utf8")); } catch (e) { console.log(e); anyErrorExitCodeToShell = 10; } -// Recursively walk the YAML JS object, build key pathes like: +// Recursively walk the YAML JS object, build key paths like: // 'Admin.Users.State.column' if (yaml_doc) { - buildFullPathes(yaml_doc, ""); // ==> results in dictKeysFromYaml + buildFullPaths(yaml_doc, ""); // ==> results in dictKeysFromYaml } else { console.log("Error: could not parse YAML"); anyErrorExitCodeToShell = 20;