UNPKG

@uuv/runner-commons

Version:
240 lines (239 loc) 12.3 kB
"use strict"; /** * Software Name : UUV * * SPDX-License-Identifier: MIT * * This software is distributed under the MIT License, * see the "LICENSE" file for more details * * Authors: NJAKO MOLOM Louis Fredice & SERVICAL Stanley * Software description: Make test writing fast, understandable by any human * understanding English or French. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AutocompletionSuggestion = void 0; exports.runGenerateDoc = runGenerateDoc; const lang_enum_1 = require("./lang-enum"); const fs_1 = __importDefault(require("fs")); const common_1 = require("./common"); const path = __importStar(require("path")); class AutocompletionSuggestion { suggestion; link; } exports.AutocompletionSuggestion = AutocompletionSuggestion; function runGenerateDoc(destDir) { const GENERATED_DIR_DOC = `${destDir}/docs/04-wordings/01-generated-wording-description`; const GENERATED_DIR_DOC_FR = `${destDir}/i18n/fr/docusaurus-plugin-content-docs/current/04-wordings/01-generated-wording-description`; Object.values(lang_enum_1.LANG).forEach((lang, index) => { const indexOfFile = (index + 1).toLocaleString("fr-FR", { minimumIntegerDigits: 2, useGrouping: false, }); const generatedFile = `${GENERATED_DIR_DOC}/${indexOfFile}-${lang}-generated-wording-description.md`; const wordingBaseFile = path.join(__dirname, `../assets/i18n/web/${lang}/${lang}.json`); const wordingEnrichedFile = path.join(__dirname, `../assets/i18n/web/${lang}/${lang}-enriched-wordings.json`); const autocompletionSuggestionFile = path.join(GENERATED_DIR_DOC, `${lang}-autocompletion-suggestion.json`); cleanGeneratedFilesIfExists(generatedFile, lang, indexOfFile); common_1.Common.cleanGeneratedFilesIfExists(autocompletionSuggestionFile); generateWordingFiles(wordingBaseFile, wordingEnrichedFile, generatedFile, lang, indexOfFile, autocompletionSuggestionFile); fs_1.default.copyFileSync(generatedFile, `${GENERATED_DIR_DOC_FR}/${indexOfFile}-${lang}-generated-wording-description.md`); fs_1.default.copyFileSync(autocompletionSuggestionFile, path.join(GENERATED_DIR_DOC_FR, `${lang}-autocompletion-suggestion.json`)); }); function cleanGeneratedFilesIfExists(generatedFile, lang, indexOfFile) { if (fs_1.default.existsSync(generatedFile)) { fs_1.default.rmSync(generatedFile); console.log(`[DEL] ${indexOfFile}-${lang}-generated-wording-description.md deleted successfully`); } } function generateWordingFiles(wordingBaseFile, wordingEnrichedFile, generatedFile, lang, indexOfFile, autocompletionSuggestionFile) { const { wordingFileContent, autocompletionSuggestionContent } = computeWordingFile(wordingBaseFile, wordingEnrichedFile, lang); writeWordingFile(generatedFile, wordingFileContent, lang, indexOfFile); common_1.Common.writeWordingFile(autocompletionSuggestionFile, autocompletionSuggestionContent); } function computeWordingFile(wordingBaseFile, wordingEnrichedFile, lang) { const wordingsBase = fs_1.default.readFileSync(wordingBaseFile, { encoding: "utf8" }); const wordingsEnriched = fs_1.default.readFileSync(wordingEnrichedFile, { encoding: "utf8" }); const wordingEnrichedNormalized = normalizedMdxData(wordingsEnriched); const wordingBaseNormalized = normalizedMdxData(wordingsBase); const wordingsBaseJson = JSON.parse(wordingBaseNormalized); const title = (function () { switch (lang) { case lang_enum_1.LANG.FR.toString(): return ("# Français \n" + ":::caution\n" + "Pensez bien à rajouter `#language: fr` en entête de votre fichier feature.\n" + ":::\n\n"); default: return "# English"; } })(); const autocompletionComponent = `\nimport {UuvWordingAutocomplete} from '@site/src/components/WordingAutocomplete/uuv-wording-autocomplete.js';\n\n<UuvWordingAutocomplete lang={'${lang}'}/>\n`; const rows = [title, autocompletionComponent]; const autocompletionSuggestions = []; const stepTitle = (function () { switch (lang) { case lang_enum_1.LANG.FR.toString(): return ["## Etant donné que", "## Quand", "## Alors"]; case lang_enum_1.LANG.EN.toString(): return ["## Given", "## When", "## Then"]; default: return ["", "", ""]; } })(); const { step: given, autocompletionSuggestions: givenAutocompletionSuggestions } = computeStepDefinition(wordingsBaseJson, "key.given", stepTitle[0], undefined); const { step: when, autocompletionSuggestions: whenAutocompletionSuggestions } = computeStepDefinition(wordingsBaseJson, "key.when", stepTitle[1], undefined); const { step: then, autocompletionSuggestions: thenAutocompletionSuggestions } = computeStepDefinition(wordingsBaseJson, "key.then", stepTitle[2], undefined); rows.push(...given, ...when, ...then); autocompletionSuggestions.push(...givenAutocompletionSuggestions, ...whenAutocompletionSuggestions, ...thenAutocompletionSuggestions); rows.push("## Par rôle"); const dataOrigin = wordingEnrichedNormalized; let dataUpdated = dataOrigin; // console.debug("roles", wordingsEnrichedJson.role) const definedRoles = (0, common_1.getDefinedRoles)(lang); definedRoles.forEach((role) => { rows.push(`### ${role.id}`); // console.debug("dataUpdated", dataUpdated) dataUpdated = dataOrigin .replaceAll("$roleName", role.name) .replaceAll("$roleId", role.id) .replaceAll("$definiteArticle", role.getDefiniteArticle()) .replaceAll("$indefiniteArticle", role.getIndefiniteArticle()) .replaceAll("$namedAdjective", role.namedAdjective()) .replaceAll("$ofDefiniteArticle", role.getOfDefiniteArticle()); const wordingsEnrichedJson = JSON.parse(dataUpdated); const { step: enrichedGiven, autocompletionSuggestions: enrichedGivenAutocompletionSuggestions } = computeStepDefinition(wordingsEnrichedJson.enriched, "key.given", undefined, "####", role); if (enrichedGiven.length > 1) { rows.push(...enrichedGiven); autocompletionSuggestions.push(...enrichedGivenAutocompletionSuggestions); } const { step: enrichedWhen, autocompletionSuggestions: enrichedWhenAutocompletionSuggestions } = computeStepDefinition(wordingsEnrichedJson.enriched, "key.when", undefined, "####", role); if (enrichedWhen.length > 1) { rows.push(...enrichedWhen); autocompletionSuggestions.push(...enrichedWhenAutocompletionSuggestions); } const { step: enrichedThen, autocompletionSuggestions: enrichedThenAutocompletionSuggestions } = computeStepDefinition(wordingsEnrichedJson.enriched, "key.then", undefined, "####", role); if (enrichedThen.length > 1) { rows.push(...enrichedThen); autocompletionSuggestions.push(...enrichedThenAutocompletionSuggestions); } }); return { wordingFileContent: rows.join("\n"), autocompletionSuggestionContent: JSON.stringify(autocompletionSuggestions) }; } /* eslint-disable @typescript-eslint/no-explicit-any */ function computeStepDefinition(wordingsJson, stepKey, stepTitle, level = "###", role) { const step = []; const autocompletionSuggestion = []; if (stepTitle) { step.push(stepTitle); } wordingsJson.forEach((conf) => { if (conf.key.startsWith(stepKey) && shouldGenerate(conf, role)) { const wording = `${level} ${conf.wording}`; step.push(wording); conf.description?.split("\\n").forEach((descriptionLine, index, array) => { if (index === 0) { step.push(`> ${descriptionLine ?? ""}`); } else if (index === array.length - 1) { step.push(` ${descriptionLine ?? ""}\n`); } else { step.push(` ${descriptionLine ?? ""}`); } }); autocompletionSuggestion.push({ suggestion: conf.wording .replaceAll("\\", ""), link: conf.wording .replaceAll("{", "") .replaceAll("}", "") .replaceAll("(", "") .replaceAll(")", "") .replaceAll("'", "") .replaceAll("\\", "") .replaceAll(/\s/g, "-").toLowerCase() }); } }); return { step, autocompletionSuggestions: autocompletionSuggestion }; } function shouldGenerate(wordingsConf, role) { if (role === undefined) { return true; } switch (wordingsConf.section) { case "contains": return role.shouldGenerateContainsSentence; case "click": return role.shouldGenerateClickSentence; case "type": return role.shouldGenerateTypeSentence; case "keyboard": return role.shouldGenerateKeyboardSentence; case "checkable": return role.shouldGenerateCheckedSentence; default: return true; } } function writeWordingFile(generatedFile, data, lang, indexOfFile) { fs_1.default.writeFileSync(generatedFile, data); console.log(`[WRITE] ${indexOfFile}-${lang}-generated-wording-description.md written successfully`); } function normalizedMdxData(data) { return data.replaceAll("{string}", "\\\\{string\\\\}") .replaceAll("{}", "\\\\{\\\\}") .replaceAll("{int}", "\\\\{int\\\\}") .replaceAll("{key}", "\\\\{key\\\\}") .replaceAll("{reverseTab}", "\\\\{reverseTab\\\\}") .replaceAll("{tab}", "\\\\{tab\\\\}") .replaceAll("{down}", "\\\\{down\\\\}") .replaceAll("{right}", "\\\\{right\\\\}") .replaceAll("{left}", "\\\\{left\\\\}") .replaceAll("{up}", "\\\\{up\\\\}"); } }