Chore: remove old translation tools, import parser (#39273)

This commit is contained in:
Oliver Eyton-Williams
2020-07-27 14:41:53 +02:00
committed by GitHub
parent bf9837c1da
commit de3492fded
10 changed files with 860 additions and 1667 deletions

View File

@@ -1,7 +1,7 @@
const path = require('path');
const { findIndex } = require('lodash');
const readDirP = require('readdirp-walk');
const { parseMarkdown } = require('@freecodecamp/challenge-md-parser');
const { parseMarkdown } = require('../tools/challenge-md-parser');
const fs = require('fs');
const { dasherize } = require('../utils/slugs');

View File

@@ -1,205 +0,0 @@
const fs = require('fs-extra');
const path = require('path');
const YAML = require('js-yaml');
const readDirP = require('readdirp-walk');
const { parseMarkdown } = require('@freecodecamp/challenge-md-parser');
const { Translate } = require('@google-cloud/translate');
const lang = 'pt';
const langFull = 'portuguese';
const outputDir = path.resolve(__dirname, `./challenges/${langFull}`);
fs.ensureDirSync(outputDir);
readDirP({
root: path.resolve(__dirname, './challenges/english')
}).on('data', translateChallenge);
async function translateChallenge(file) {
const { name, path: filePath, fullPath, stat } = file;
if (stat.isDirectory() || name === '.DS_Store') {
return null;
}
const blockName = getBlockNameFromPath(filePath);
const { fileName: superBlock } = superBlockInfoFromPath(filePath);
const outputFile = `${outputDir}/${superBlock}/${blockName}/${name.replace(
'english',
langFull
)}`;
if (fs.existsSync(outputFile)) {
return null;
}
const challenge = await parseMarkdown(fullPath);
const { title, description, instructions, tests } = challenge;
challenge['videoUrl'] = '';
if (challenge['guideUrl']) {
challenge['guideUrl'] = challenge['guideUrl'].replace('www', langFull);
}
const translatePromises = [
translateText(title),
translateText(description),
translateText(instructions),
...tests.map(
test =>
new Promise(async (resolve, reject) => {
const { testString, text } = test;
const translatedText = await translateText(text).catch(reject);
return resolve({
text: translatedText ? translatedText.join(' ').trim() : '',
testString
});
})
)
];
return Promise.all(translatePromises).then(
([title, description, instructions, ...tests]) => {
const { files = {}, solutions = [], ...challengeMeta } = challenge;
const md = `---
${YAML.dump(
Object.assign(challengeMeta, {
localeTitle: title ? title.join(' ').trim() : ''
}),
{ lineWidth: 10000 }
)}---
## Description
${description}
## Instructions
${instructions}
## Tests
<section id='tests'>
\`\`\`yml
${YAML.dump({ tests }, { lineWidth: 10000 })}
\`\`\`
</section>
## Challenge Seed
<section id='challengeSeed'>
${generateChallengeSeed(files)}
</section>
## Solution
<section id='solution'>
${
solutions.length === 0
? `\`\`\`js
// solution required
\`\`\``
: solutions
.map(
solution => `
\`\`\`js
${solution}
\`\`\`
`
)
.join('\n')
}
</section>
`;
console.log(outputFile);
fs.ensureFileSync(outputFile);
fs.writeFile(outputFile, md);
}
);
}
function generateChallengeSeed(files) {
return Object.keys(files)
.map(key => files[key])
.map(file => {
const { ext, contents = [], head = [], tail = [] } = file;
return `
<div id='${ext}-seed'>
\`\`\`${ext}
${contents}
\`\`\`
</div>
${
head.length
? `
### Before Test
<div id='${ext}-setup'>
\`\`\`${ext}
${head}
\`\`\`
</div>`
: ''
}
${
tail.length
? `
### After Test
<div id='${ext}-teardown'>
\`\`\`js
console.info('after the test');
\`\`\`
</div>`
: ''
}
`;
});
}
const createTranslateText = target => text => {
if (!text) {
return '';
}
const translate = new Translate();
return translate
.translate(text, target)
.then(results => {
let translations = results[0];
translations = Array.isArray(translations)
? translations
: [translations];
return translations;
})
.catch(err => {
console.log(err);
});
};
const translateText = createTranslateText(lang);
function superBlockInfoFromPath(filePath) {
const [maybeSuper] = filePath.split('/');
return superBlockInfo(maybeSuper);
}
function superBlockInfo(fileName) {
const [maybeOrder, ...superBlock] = fileName.split('-');
let order = parseInt(maybeOrder, 10);
if (isNaN(order)) {
return {
order: 0,
name: fileName
};
} else {
return {
order: order,
name: superBlock.join('-'),
fileName
};
}
}
function getBlockNameFromPath(filePath) {
const [, block] = filePath.split('/');
return block;
}

File diff suppressed because it is too large Load Diff

View File

@@ -31,7 +31,6 @@
"@commitlint/cli": "^8.3.5",
"@commitlint/config-conventional": "^7.0.1",
"@commitlint/travis-cli": "^8.3.5",
"@freecodecamp/challenge-md-parser": "^2.0.0",
"@semantic-release/changelog": "^2.0.2",
"@semantic-release/git": "^5.0.0",
"babel-plugin-add-module-exports": "^0.2.1",
@@ -49,12 +48,12 @@
"gulp": "^4.0.2",
"joi": "^13.3.0",
"joi-objectid": "^2.0.0",
"jquery": "^3.4.1",
"jquery": "^3.5.1",
"js-yaml": "^3.12.0",
"jsdom": "^12.2.0",
"lint-staged": "^7.2.0",
"live-server": "^1.2.1",
"lodash": "^4.17.15",
"lodash": "^4.17.19",
"mocha": "5.2.0",
"puppeteer": "^1.19.0",
"readdirp-walk": "^1.7.0",