"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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