174 lines
15 KiB
JavaScript
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-cli-commons/fs");
|
|
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) => ``,
|
|
//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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
|