"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.onProductCompiled = exports.onProduct = exports.unique_by = exports.file_path_with_ext = exports.MainAssembly = exports.files = exports.forward_slash = exports.productContentOptions = exports.md2html = exports.addAssembly = void 0; const path = require("path"); const fg = require('fast-glob'); const read_1 = require("@plastichub/fs/read"); const write_1 = require("@plastichub/fs/write"); const js_beautify_1 = require("js-beautify"); const osr_cli_commons_1 = require("@plastichub/osr-cli-commons"); const cheerio = require('cheerio'); const mysql = require('mysql2'); const _1 = require("./"); const showdown_1 = require("showdown"); const addAssembly = (item) => `${item}/cad/**/Global*.+(SLDASM)`; exports.addAssembly = addAssembly; const md2html = (content) => { let converter = new showdown_1.Converter({ tables: true }); converter.setOption('literalMidWordUnderscores', 'true'); return converter.makeHtml(content); }; exports.md2html = md2html; const productContentOptions = (product) => { console.log('Create product compile options for ', product); product = '' + product; const product_rel = product.replace('products/', ''); return { debug: false, watch: false, root: '.', env: 'bazar-release', profile: '${root}/.osrl.json', output: '${product}/bazar/raw.html', format: 'html', module: 'plastichub-products', cwd: path.resolve('.'), cache: false, onCompiled: exports.onProduct, onCompileDone: exports.onProductCompiled, variables: { product, product_rel, root: path.resolve('.'), product_relative: '' + product_rel } }; }; exports.productContentOptions = productContentOptions; const forward_slash = (path) => { const isExtendedLengthPath = /^\\\\\?\\/.test(path); const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex if (isExtendedLengthPath || hasNonAscii) { return path; } return path.replace(/\\/g, '/'); }; exports.forward_slash = forward_slash; const files = (dir, glob) => fg.sync(glob, { dot: true, cwd: dir, absolute: true }); exports.files = files; const MainAssembly = (dir) => { const mains = (0, exports.files)(dir, '**/cad/**/*Global*.+(SLDASM)'); return mains[0]; }; exports.MainAssembly = MainAssembly; const file_path_with_ext = (file, ext) => { const parts = path.parse(file); return path.join(parts.dir, parts.name + '.' + ext); }; exports.file_path_with_ext = file_path_with_ext; const unique_by = (arr, key) => { return [...new Map(arr.map(item => [item[key], item])).values()]; }; exports.unique_by = unique_by; const onProduct = (src, dst, content) => { const $ = cheerio.load(content, { xmlMode: true }); $('a').each(function () { $(this).attr("style", "color:#4C74B9"); }); $('table').each(function () { $(this).attr("style", "display:table;width:auto;margin-left:auto;margin-right:auto"); }); return Promise.resolve($.html()); }; exports.onProduct = onProduct; const update = async (dbconfig, description, id) => { return new Promise((resolve, reject) => { const connection = mysql.createConnection(dbconfig); var sql = mysql.format('UPDATE cscart_product_descriptions SET full_description = ? WHERE cscart_product_descriptions.product_id = ?', [description, id]); connection.query(sql, function (err, results) { if (err) { _1.logger.error('SQL Error', err.message); reject(err); } else { resolve(results); } }); }); }; const onProductCompiled = (src, dst, options, content) => { const config = (0, read_1.sync)(path.resolve(options.variables.product + '/config.json'), 'json'); content = (0, js_beautify_1.html_beautify)((0, exports.md2html)(content)); (0, write_1.sync)(path.resolve(options.variables.product + '/bazar/output.html'), content); const cscartId = config.cscartId; if (!cscartId) { _1.logger.error(`Have no cscart id for ${config.slug}`); return; } const osrConfig = (0, osr_cli_commons_1.CONFIG_DEFAULT)(); if (osrConfig.cscart.mysql) { return new Promise((resolve) => { update(osrConfig.cscart.mysql, content, cscartId).then((result) => { _1.logger.debug('updated cscart ' + config.name); resolve(1); }).catch((e) => { _1.logger.error('Error updating CSCart', e); }); }); } else { _1.logger.error('Have no CSCart Mysql config !'); } return Promise.resolve(); }; exports.onProductCompiled = onProductCompiled; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRhc2tzL2xpYnJhcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTRCO0FBRTVCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUUvQiw4Q0FBa0Q7QUFDbEQsZ0RBQW9EO0FBRXBELDZDQUEyQztBQUMzQyxpRUFBd0U7QUFHeEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBRWxDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUUvQix5QkFBMkI7QUFFM0IsdUNBQW9DO0FBRTdCLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksMkJBQTJCLENBQUE7QUFBMUQsUUFBQSxXQUFXLGVBQStDO0FBRWhFLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7SUFDL0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxvQkFBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEQsU0FBUyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFBO0FBSlksUUFBQSxPQUFPLFdBSW5CO0FBRU0sTUFBTSxxQkFBcUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBRTdDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFM0QsT0FBTyxHQUFHLEVBQUUsR0FBSSxPQUFPLENBQUE7SUFFdkIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUMsRUFBRSxDQUFDLENBQUE7SUFFbkQsT0FBTztRQUNILEtBQUssRUFBRSxLQUFL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LENBQUE7S0FDTDtTQUFJO1FBQ0QsU0FBTSxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0tBQ2hEO0lBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDNUIsQ0FBQyxDQUFBO0FBMUJZLFFBQUEsaUJBQWlCLHFCQTBCN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXHJcblxyXG5jb25zdCBmZyA9IHJlcXVpcmUoJ2Zhc3QtZ2xvYicpXHJcblxyXG5pbXBvcnQgeyBzeW5jIGFzIHJlYWQgfSBmcm9tICdAcGxhc3RpY2h1Yi9mcy9yZWFkJ1xyXG5pbXBvcnQgeyBzeW5jIGFzIHdyaXRlIH0gZnJvbSAnQHBsYXN0aWNodWIvZnMvd3JpdGUnXHJcbmltcG9ydCB7IHN5bmMgYXMgZXhpc3RzIH0gZnJvbSAnQHBsYXN0aWNodWIvZnMvZXhpc3RzJ1xyXG5pbXBvcnQgeyBodG1sX2JlYXV0aWZ5IH0gZnJvbSAnanMtYmVhdXRpZnknXHJcbmltcG9ydCB7IENPTkZJR19ERUZBVUxULCBJT1NSQ29uZmlnIH0gZnJvbSAnQHBsYXN0aWNodWIvb3NyLWNsaS1jb21tb25zJ1xyXG5pbXBvcnQgeyAgfSBmcm9tICdAcGxhc3RpY2h1Yi9vc3ItY2xpLWNvbW1vbnMvZnMnXHJcblxyXG5jb25zdCBjaGVlcmlvID0gcmVxdWlyZSgnY2hlZXJpbycpXHJcblxyXG5jb25zdCBteXNxbCA9IHJlcXVpcmUoJ215c3FsMicpXHJcblxyXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLydcclxuXHJcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gJ3Nob3dkb3duJ1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZEFzc2VtYmx5ID0gKGl0ZW0pID0+IGAke2l0ZW19L2NhZC8qKi9HbG9iYWwqLisoU0xEQVNNKWBcclxuXHJcbmV4cG9ydCBjb25zdCBtZDJodG1sID0gKGNvbnRlbnQpID0+IHtcclxuICAgIGxldCBjb252ZXJ0ZXIgPSBuZXcgQ29udmVydGVyKHsgdGFibGVzOiB0cnVlIH0pO1xyXG4gICAgY29udmVydGVyLnNldE9wdGlvbignbGl0ZXJhbE1pZFdvcmRVbmRlcnNjb3JlcycsICd0cnVlJyk7XHJcbiAgICByZXR1cm4gY29udmVydGVyLm1ha2VIdG1sKGNvbnRlbnQpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcHJvZHVjdENvbnRlbnRPcHRpb25zID0gKHByb2R1Y3QpID0+IHtcclxuICAgIFxyXG4gICAgY29uc29sZS5sb2coJ0NyZWF0ZSBwcm9kdWN0IGNvbXBpbGUgb3B0aW9ucyBmb3IgJywgcHJvZHVjdClcclxuXHJcbiAgICBwcm9kdWN0ID0gJycgICsgcHJvZHVjdFxyXG5cclxuICAgIGNvbnN0IHByb2R1Y3RfcmVsID0gcHJvZHVjdC5yZXBsYWNlKCdwcm9kdWN0cy8nLCcnKVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVidWc6IGZhbHNlLFxyXG4gICAgICAgIHdhdGNoOiBmYWxzZSxcclxuICAgICAgICByb290OiAnLicsXHJcbiAgICAgICAgZW52OiAnYmF6YXItcmVsZWFzZScsXHJcbiAgICAgICAgcHJvZmlsZTogJyR7cm9vdH0vLm9zcmwuanNvbicsXHJcbiAgICAgICAgb3V0cHV0OiAnJHtwcm9kdWN0fS9iYXphci9yYXcuaHRtbCcsXHJcbiAgICAgICAgZm9ybWF0OiAnaHRtbCcsXHJcbiAgICAgICAgbW9kdWxlOiAncGxhc3RpY2h1Yi1wcm9kdWN0cycsXHJcbiAgICAgICAgY3dkOiBwYXRoLnJlc29sdmUoJy4nKSxcclxuICAgICAgICBjYWNoZTogZmFsc2UsXHJcbiAgICAgICAgb25Db21waWxlZDogb25Qcm9kdWN0LFxyXG4gICAgICAgIG9uQ29tcGlsZURvbmU6IG9uUHJvZHVjdENvbXBpbGVkLFxyXG4gICAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICBwcm9kdWN0X3JlbCxcclxuICAgICAgICAgICAgcm9vdDogcGF0aC5yZXNvbHZlKCcuJyksXHJcbiAgICAgICAgICAgIHByb2R1Y3RfcmVsYXRpdmU6ICcnICsgcHJvZHVjdF9yZWxcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBmb3J3YXJkX3NsYXNoID0gKHBhdGgpID0+IHtcclxuICAgIGNvbnN0IGlzRXh0ZW5kZWRMZW5ndGhQYXRoID0gL15cXFxcXFxcXFxcP1xcXFwvLnRlc3QocGF0aCk7XHJcbiAgICBjb25zdCBoYXNOb25Bc2NpaSA9IC9bXlxcdTAwMDAtXFx1MDA4MF0rLy50ZXN0KHBhdGgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcclxuXHJcbiAgICBpZiAoaXNFeHRlbmRlZExlbmd0aFBhdGggfHwgaGFzTm9uQXNjaWkpIHtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZmlsZXMgPSAoZGlyLCBnbG9iKSA9PiBmZy5zeW5jKGdsb2IsIHtcclxuICAgIGRvdDogdHJ1ZSxcclxuICAgIGN3ZDogZGlyLFxyXG4gICAgYWJzb2x1dGU6IHRydWVcclxufSk7XHJcblxyXG5leHBvcnQgY29uc3QgTWFpbkFzc2VtYmx5ID0gKGRpcikgPT4ge1xyXG4gICAgY29uc3QgbWFpbnMgPSBmaWxlcyhkaXIsICcqKi9jYWQvKiovKkdsb2JhbCouKyhTTERBU00pJyk7XHJcbiAgICByZXR1cm4gbWFpbnNbMF07XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBmaWxlX3BhdGhfd2l0aF9leHQgPSAoZmlsZSwgZXh0KSA9PiB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGgucGFyc2UoZmlsZSk7XHJcbiAgICByZXR1cm4gcGF0aC5qb2luKHBhcnRzLmRpciwgcGFydHMubmFtZSArICcuJyArIGV4dCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB1bmlxdWVfYnkgPSAoYXJyLCBrZXkpID0+IHtcclxuICAgIHJldHVybiBbLi4ubmV3IE1hcChhcnIubWFwKGl0ZW0gPT4gW2l0ZW1ba2V5XSwgaXRlbV0pKS52YWx1ZXMoKV1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG9uUHJvZHVjdCA9IChzcmMsIGRzdCwgY29udGVudCkgPT4ge1xyXG4gICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChjb250ZW50LCB7XHJcbiAgICAgICAgeG1sTW9kZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnYScpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuYXR0cihcInN0eWxlXCIsIFwiY29sb3I6IzRDNzRCOVwiKTtcclxuICAgIH0pXHJcblxyXG4gICAgJCgndGFibGUnKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLmF0dHIoXCJzdHlsZVwiLCBcImRpc3BsYXk6dGFibGU7d2lkdGg6YXV0bzttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDphdXRvXCIpO1xyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCQuaHRtbCgpKVxyXG59XHJcblxyXG5jb25zdCB1cGRhdGUgPSBhc3luYyAoZGJjb25maWcsIGRlc2NyaXB0aW9uLCBpZCkgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gbXlzcWwuY3JlYXRlQ29ubmVjdGlvbihkYmNvbmZpZyk7XHJcbiAgICAgICAgdmFyIHNxbCA9IG15c3FsLmZvcm1hdCgnVVBEQVRFIGNzY2FydF9wcm9kdWN0X2Rlc2NyaXB0aW9ucyBTRVQgZnVsbF9kZXNjcmlwdGlvbiA9ID8gV0hFUkUgY3NjYXJ0X3Byb2R1Y3RfZGVzY3JpcHRpb25zLnByb2R1Y3RfaWQgPSA/JyxcclxuICAgICAgICAgICAgW2Rlc2NyaXB0aW9uLCBpZF1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbm5lY3Rpb24ucXVlcnkoXHJcbiAgICAgICAgICAgIHNxbCxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcignU1FMIEVycm9yJywgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpXHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBvblByb2R1Y3RDb21waWxlZCA9IChzcmMsIGRzdCwgb3B0aW9ucywgY29udGVudCkgPT4ge1xyXG4gICAgY29uc3QgY29uZmlnOiBhbnkgPSByZWFkKHBhdGgucmVzb2x2ZShvcHRpb25zLnZhcmlhYmxlcy5wcm9kdWN0ICsgJy9jb25maWcuanNvbicpLCAnanNvbicpO1xyXG5cclxuICAgIGNvbnRlbnQgPSBodG1sX2JlYXV0aWZ5KG1kMmh0bWwoY29udGVudCkpXHJcbiAgICB3cml0ZShwYXRoLnJlc29sdmUob3B0aW9ucy52YXJpYWJsZXMucHJvZHVjdCArICcvYmF6YXIvb3V0cHV0Lmh0bWwnKSwgY29udGVudClcclxuXHJcbiAgICBjb25zdCBjc2NhcnRJZCA9IGNvbmZpZy5jc2NhcnRJZFxyXG4gICAgaWYgKCFjc2NhcnRJZCkge1xyXG4gICAgICAgIGxvZ2dlci5lcnJvcihgSGF2ZSBubyBjc2NhcnQgaWQgZm9yICR7Y29uZmlnLnNsdWd9YClcclxuICAgICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IG9zckNvbmZpZyA9IENPTkZJR19ERUZBVUxUKCkgYXMgSU9TUkNvbmZpZyAgICBcclxuXHJcbiAgICBpZiAob3NyQ29uZmlnLmNzY2FydC5teXNxbCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB1cGRhdGUob3NyQ29uZmlnLmNzY2FydC5teXNxbCwgY29udGVudCwgY3NjYXJ0SWQpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCd1cGRhdGVkIGNzY2FydCAnICsgY29uZmlnLm5hbWUpXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKDEpXHJcbiAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHVwZGF0aW5nIENTQ2FydCcsIGUpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGxvZ2dlci5lcnJvcignSGF2ZSBubyBDU0NhcnQgTXlzcWwgY29uZmlnICEnKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXHJcbn1cclxuIl19