mono/packages/discourse/lib/sync/commons.js

174 lines
15 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createContent = exports.option = exports.fromYAML = exports.fromJSON = exports.adjustUrls = exports.images_urls = exports.fileAsBuffer = void 0;
const path = require("path");
const Engine_1 = require("@plastichub/osrl/Engine");
const options_1 = require("@plastichub/osrl/options");
const glob_1 = require("@plastichub/osr-cli-commons/glob");
const fs_1 = require("@plastichub/osr-commons");
const __1 = require("../../");
const exists_1 = require("@plastichub/fs/exists");
const read_1 = require("@plastichub/fs/read");
const write_1 = require("@plastichub/fs/write");
const bluebird_1 = require("bluebird");
const constants_1 = require("../../constants");
const chokidar = require("chokidar");
const cheerio = require('cheerio');
const frontMatter = require('front-matter');
const fileAsBuffer = (path) => (0, read_1.sync)(path, 'buffer') || Buffer.from("-");
exports.fileAsBuffer = fileAsBuffer;
const lib_1 = require("@plastichub/osr-cache/lib");
const osr_cli_commons_1 = require("@plastichub/osr-cli-commons");
const md5 = require("md5");
const markdown_1 = require("../markdown");
const images_urls = (content) => {
const html = (0, markdown_1.toHTML)(content);
const $ = cheerio.load(html, {
xmlMode: true
});
const images = [];
const links = [];
$('img').each(function () {
images.push($(this).attr('src'));
});
return images;
};
exports.images_urls = images_urls;
const adjustUrls = (content, options) => {
let ret = new markdown_1.RMark({
images: (match, capture, arg1, arg2) => `![${capture}](${arg1})`,
//links: (match, capture, arg1, arg2) => `[${capture}](${arg1})`
}).render(content);
return ret;
};
exports.adjustUrls = adjustUrls;
const fromJSON = (content, file, options) => {
};
exports.fromJSON = fromJSON;
const fromYAML = (content, options) => {
if (frontMatter.test(content)) {
const fm = frontMatter(content);
return {
attributes: fm.attributes,
body: fm.body
};
}
else {
return {
attributes: {},
body: content
};
}
};
exports.fromYAML = fromYAML;
// to be changed to osr-defaults
const option = (option, taskOptions, col, _default) => {
// support grunt or yargs
const val = col.option ? col.option : (option) => col[option];
let ret = taskOptions[option] !== undefined ? taskOptions[option] : _default;
if (val(option) !== undefined) {
ret = val(option);
}
return ret;
};
exports.option = option;
const createContent = async (file, _options) => {
const parts = path.parse(file);
const rel = path.relative(_options.root, file);
let output = _options.output;
let outputInfo = (0, glob_1.pathInfo)(_options.output);
const variables = {
root: '.',
cwd: _options.cwd || path.resolve('.'),
..._options.variables
};
if (!outputInfo.FILE_EXT) {
output = path.resolve(`${_options.output}/${path.parse(rel).dir}/${parts.name}.md`);
}
else {
output = path.resolve((0, fs_1.resolve)(output, false, variables));
}
const defaults = {
language: _options.lang,
debug: _options.debug,
profile: _options.profile,
output: output,
plugins: _options.plugins,
env: _options.env || 'library',
cwd: _options.cwd || path.resolve('.'),
source: file,
variables
};
const options = (0, options_1.parse)(defaults, defaults);
const eOptions = {
...options,
root: [
...options.profile.includes,
path.parse(file).dir
],
toHTML: false,
cache: false,
keepOutputType: true,
trimTagRight: false,
trimTagLeft: false,
trimOutputRight: false,
trimOutputLeft: false,
greedy: false
};
const Engine = new Engine_1.Engine(eOptions);
options.source = path.resolve(options.source);
const osr_cache = (0, osr_cli_commons_1.OSR_CACHE)();
const cached = await (0, lib_1.get_cached)(options.source, eOptions, _options.module || constants_1.MODULE_NAME);
if (osr_cache && cached && _options.cache !== false) {
options.debug && __1.logger.info('Compile file serving from cache: ' + options.source);
let md5Src = md5(Buffer.from(cached));
let md5Dst = md5((0, exports.fileAsBuffer)(options.output));
if (!(0, exists_1.sync)(options.output) || md5Src !== md5Dst) {
(0, write_1.sync)(options.output, cached);
}
return cached;
}
options.debug && __1.logger.info('Compile file ' + file, eOptions);
let content = await Engine.render(options.source, options.variables);
if (_options.onCompiled) {
content = await _options.onCompiled(options.source, output, content);
}
if (osr_cache && _options.cache !== false) {
options.debug && __1.logger.info('Write output to cache', output);
await (0, lib_1.set_cached)(options.source, eOptions, _options.module || constants_1.MODULE_NAME, content);
}
let dst = path.resolve((0, fs_1.resolve)(output, false, options.variables));
_options.debug && __1.logger.info('Write output to: ', dst);
(0, write_1.sync)(dst, content);
if (_options.onCompileDone) {
await _options.onCompileDone(options.source, dst, options, content);
}
return content;
};
exports.createContent = createContent;
const watch = async (src, options) => {
src = path.resolve(src);
const watcher = chokidar.watch(`${src}`, {
ignored: /(^|[\/\\])\../,
persistent: true
});
watcher.on('change', async (path) => {
await (0, exports.createContent)(path, options);
});
return watcher;
};
const compileAll = async (files, options) => {
return await bluebird_1.Promise.resolve(files).map((f) => {
return new Promise((resolve) => {
setTimeout(() => {
(0, exports.createContent)(f, options).then(() => resolve(true));
}, 50);
});
}, { concurrency: 1 });
};
const compileAllEx = async (files, options) => {
return await bluebird_1.Promise.resolve(files).map((f) => {
return (0, exports.createContent)(f, options);
}, { concurrency: 1 });
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvc3luYy9jb21tb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE0QjtBQUU1QixvREFBMEQ7QUFDMUQsc0RBQWdEO0FBRWhELDJEQUEyRDtBQUMzRCx1REFBd0Q7QUFDeEQsOEJBQW9FO0FBQ3BFLGtEQUFzRDtBQUN0RCw4Q0FBa0Q7QUFDbEQsZ0RBQW9EO0FBRXBELHVDQUE4QztBQUU5QywrQ0FFd0I7QUFFeEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUNsQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7QUFHcEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUEsV0FBSSxFQUFDLElBQUksRUFBRSxRQUFRLENBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQW5GLFFBQUEsWUFBWSxnQkFBdUU7QUFFaEcsbURBQWtFO0FBQ2xFLGlFQUF1RDtBQUV2RCwyQkFBMEI7QUFFMUIsMENBQTJDO0FBQ3BDLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7SUFFM0MsTUFBTSxJQUFJLEdBQUcsSUFBQSxpQkFBTSxFQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzVCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ3pCLE9BQU8sRUFBRSxJQUFJO0tBQ2hCLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUNqQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7SUFDaEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNWLE1BQU0sQ0FBQyxJQUFJLENB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