1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-21 09:38:01 +02:00
joplin/ReactNativeClient/tools/encodeAssets.js

71 lines
1.9 KiB
JavaScript

const utils = require('../../Tools/gulp/utils');
const fs = require('fs-extra');
const md5 = require('md5');
const rootDir = `${__dirname}/..`;
const outputDir = `${rootDir}/pluginAssets`;
const walk = function(dir) {
let results = [];
const list = fs.readdirSync(dir);
list.forEach(function(file) {
file = `${dir}/${file}`;
const stat = fs.statSync(file);
if (stat && stat.isDirectory()) {
results = results.concat(walk(file));
} else {
results.push(file);
}
});
return results;
};
async function encodeFile(sourcePath, destPath) {
const buffer = await fs.readFile(sourcePath);
const hash = md5(buffer.toString('base64'));
const js = `module.exports = \`${buffer.toString('base64')}\`;`;
const outputPath = `${outputDir}/${destPath}.base64.js`;
await fs.mkdirp(utils.dirname(outputPath));
await fs.writeFile(outputPath, js);
const ext = utils.fileExtension(sourcePath).toLowerCase();
let mime = 'application/octet-stream';
if (ext === 'js') mime = 'application/javascript';
if (ext === 'css') mime = 'text/css';
return {
encoding: 'base64',
name: destPath,
encodedName: `${destPath}.base64.js`,
mime: mime,
hash: hash,
};
}
async function main() {
await fs.remove(outputDir);
await fs.mkdirp(outputDir);
const encodedFiles = [];
const sourceAssetDir = `${rootDir}/lib/joplin-renderer/assets`;
const files = walk(sourceAssetDir);
for (const file of files) {
const destFile = file.substr(sourceAssetDir.length + 1);
encodedFiles.push(await encodeFile(file, destFile));
}
const hashes = [];
const indexJs = [];
for (const file of encodedFiles) {
indexJs.push(`'${file.name}': { data: require('./${file.encodedName}'), mime: '${file.mime}', encoding: '${file.encoding}' },`);
hashes.push(file.hash);
}
const hash = md5(hashes.join(''));
await fs.writeFile(`${outputDir}/index.js`, `module.exports = {\nhash:"${hash}", files: {\n${indexJs.join('\n')}\n}\n};`);
}
module.exports = main;