From f62505c6a6bb562e35f01b47ea62c8247cdbfe49 Mon Sep 17 00:00:00 2001 From: Masquerade Circus Date: Sun, 6 Dec 2020 20:42:26 -0600 Subject: [PATCH] refactor(register): update register hook. Update node plugin --- .dccache | 2 +- plugins/node.js | 42 ++++++++++++++++++++++++++---------------- register.js | 17 +++++------------ 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/.dccache b/.dccache index 7f38c36..a9e9e19 100644 --- a/.dccache +++ b/.dccache @@ -1 +1 @@ -[{"/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/register.js":"1","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/rollupSource.js":"2","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/dist/valyrian.min.js":"3","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/lib/index.js":"4","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/hooks.js":"5","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/node.js":"6","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/node.sw.tpl.js":"7","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/request.js":"8","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/router.js":"9","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/signals.js":"10","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/store.js":"11","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/sw.js":"12","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/v-model.js":"13","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/directives_test.js":"14","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/hooks_test.js":"15","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/hyperscript_test.js":"16","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/keyed_test.js":"17","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/lifecycle_test.js":"18","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/mount_n_update_test.js":"19","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/node_test.js":"20","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/request_test.js":"21","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/router_test.js":"22","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/signals_test.js":"23","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/store_test.js":"24","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/utils/tree-adapter.js":"25"},[882,1607119100023.176,"26"],[2068,1607120291416.5527,"27"],[4951,1607121934115.4512,"28"],[13063,1607120673640.9028,"29"],[2801,1601561147084.002,"30"],[9672,1607119378753.205,"31"],[4083,1601561152283.9846,"32"],[4175,1601711784571.025,"33"],[6605,1601711802107.2263,"34"],[4083,1601561161489.3032,"35"],[2041,1601561163851.908,"36"],[448,1601561166242.2478,"37"],[3182,1601561182841.262,"38"],[14551,1607030292474.3137,"39"],[5491,1601561187310.7358,"40"],[2790,1602046213316.2332,"41"],[2477,1601561192499.9382,"42"],[3853,1601561256934.404,"43"],[8396,1602046229772.1895,"44"],[6623,1607119389329.592,"45"],[8776,1601711047778.4246,"46"],[9719,1601711813515.5264,"47"],[5720,1601561591586.4749,"48"],[4426,1601561595435.788,"49"],[14845,1602043898530.3389,"50"],"d2f3f5c1211fe7a5bd863ade5a4b0e0d8272784ff8ec9bcc15534cd486f42ca9","0ec7df7c9a6bab0fd6d04c253af13a09b487cba19889d7dc7a0df382f5535f00","05f8fbc05e9e2c371f3feac40047010a62d3dcea864437667f9bdf160887c39d","5c0ea99ac4af5513b9144084d68f4626bf5927f1b4e184368cf10edcab0a44f6","16b6f25485c43e37c210e4bef87353a9a9c0e639c9509770dc63ab49dec3525a","cb1f208a7b5100fcce761a897ade98a6b31a53ba976c3e3966f0e2e1e8b33fb9","9e41c42d425160d207ad8dbe2eddd6c2bf432338665826d07c897e0f2b44a14d","0f4356afca5c145d5a323cd651da7354a490286b68bdd63078750f936d7e0483","0403d6187aa2b372e3031cc6ca26b86366d841928875cb6f271e109869e7231a","8d1fe0d59ee427d044a50a05fef348508a6e3c0470fe1fc027b1414ca488edb9","a950855c17dfc2667d895f978f7374e977e2631344198066f5972e92d0994289","74dd7dfefb006f754a7c5b13d8086b36990b440c16ce5b60b2b661188ac91c6c","ba3588cbe7fe65446cbdc8b9ffed65283c602fef940cb68d5fba025bb1aaad58","7125bc46c5881021937ed7df34b8b4b047443bdc7a621cd8203827240085ca40","ef5804184ff8456f5e366df6bfff69f5a3afee68423593338e4800c79816c9c0","f5ee42c239f8b6306df002d52bd928c5b521db32b0616e5e676e69c34ae80b7c","3e9635114cde575b7d4b68c636752d3919eefa460998dc33f0590d88c9090020","4a1e952b9225b20ac59c16d15fb586602804ff03e05813c1399c206097609c03","dccc69630bab05c149376b89b581dabd10ebfd2015d0b65a8a4ed413b0cf14c5","dacb264f5d142800de5510deeceba1665ac70bfffe32b896427ed5dc5bff9087","5cac321ab5cf8f969d3629db4b4df564485a456fcca0c4a509ce12bb681a798e","5d0626c0127689268963cd71c5caabd84a59d20540344c48f73ae07475a46cdd","b6c8e80c37efde1a28cb7681d7d9b31d6cb10ad25d74691e84b87237b347497b","020812b85ad71a026e6b73f6e7fb0601518d903093e2484605d0271666622efa","9c0dd2ed2e6b14a644c8a2c1b28761b16f7253b182307a3f1b9fb529088b602c"] \ No newline at end of file +[{"/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/register.js":"1","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/rollupSource.js":"2","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/dist/valyrian.min.js":"3","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/lib/index.js":"4","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/hooks.js":"5","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/node.js":"6","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/node.sw.tpl.js":"7","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/request.js":"8","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/router.js":"9","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/signals.js":"10","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/store.js":"11","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/sw.js":"12","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/v-model.js":"13","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/directives_test.js":"14","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/hooks_test.js":"15","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/hyperscript_test.js":"16","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/keyed_test.js":"17","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/lifecycle_test.js":"18","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/mount_n_update_test.js":"19","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/node_test.js":"20","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/request_test.js":"21","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/router_test.js":"22","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/signals_test.js":"23","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/test/store_test.js":"24","/home/masquerade-circus/NodeJs/ownprojects/valyrian.js/plugins/utils/tree-adapter.js":"25"},[688,1607308222699.7341,"26"],[2068,1607120291416.5527,"27"],[4951,1607121934115.4512,"28"],[13063,1607120673640.9028,"29"],[2801,1601561147084.002,"30"],[10093,1607308687058.202,"31"],[4083,1601561152283.9846,"32"],[4175,1601711784571.025,"33"],[6605,1601711802107.2263,"34"],[4083,1601561161489.3032,"35"],[2041,1601561163851.908,"36"],[448,1601561166242.2478,"37"],[3182,1601561182841.262,"38"],[14551,1607240550740.148,"39"],[5491,1601561187310.7358,"40"],[2790,1602046213316.2332,"41"],[2477,1601561192499.9382,"42"],[3853,1601561256934.404,"43"],[8396,1602046229772.1895,"44"],[6623,1607119389329.592,"45"],[8776,1601711047778.4246,"46"],[9719,1601711813515.5264,"47"],[5720,1601561591586.4749,"48"],[4426,1601561595435.788,"49"],[14845,1602043898530.3389,"50"],"31bff5a8431e32a68275fe4e83ed7607a6132a9db824f5fc2aadc622a5934e4b","0ec7df7c9a6bab0fd6d04c253af13a09b487cba19889d7dc7a0df382f5535f00","05f8fbc05e9e2c371f3feac40047010a62d3dcea864437667f9bdf160887c39d","5c0ea99ac4af5513b9144084d68f4626bf5927f1b4e184368cf10edcab0a44f6","16b6f25485c43e37c210e4bef87353a9a9c0e639c9509770dc63ab49dec3525a","a4c0edecd1216917be040457522aa33af0e27400e05d5483bf1235b14d13d117","9e41c42d425160d207ad8dbe2eddd6c2bf432338665826d07c897e0f2b44a14d","0f4356afca5c145d5a323cd651da7354a490286b68bdd63078750f936d7e0483","0403d6187aa2b372e3031cc6ca26b86366d841928875cb6f271e109869e7231a","8d1fe0d59ee427d044a50a05fef348508a6e3c0470fe1fc027b1414ca488edb9","a950855c17dfc2667d895f978f7374e977e2631344198066f5972e92d0994289","74dd7dfefb006f754a7c5b13d8086b36990b440c16ce5b60b2b661188ac91c6c","ba3588cbe7fe65446cbdc8b9ffed65283c602fef940cb68d5fba025bb1aaad58","7125bc46c5881021937ed7df34b8b4b047443bdc7a621cd8203827240085ca40","ef5804184ff8456f5e366df6bfff69f5a3afee68423593338e4800c79816c9c0","f5ee42c239f8b6306df002d52bd928c5b521db32b0616e5e676e69c34ae80b7c","3e9635114cde575b7d4b68c636752d3919eefa460998dc33f0590d88c9090020","4a1e952b9225b20ac59c16d15fb586602804ff03e05813c1399c206097609c03","dccc69630bab05c149376b89b581dabd10ebfd2015d0b65a8a4ed413b0cf14c5","dacb264f5d142800de5510deeceba1665ac70bfffe32b896427ed5dc5bff9087","5cac321ab5cf8f969d3629db4b4df564485a456fcca0c4a509ce12bb681a798e","5d0626c0127689268963cd71c5caabd84a59d20540344c48f73ae07475a46cdd","b6c8e80c37efde1a28cb7681d7d9b31d6cb10ad25d74691e84b87237b347497b","020812b85ad71a026e6b73f6e7fb0601518d903093e2484605d0271666622efa","9c0dd2ed2e6b14a644c8a2c1b28761b16f7253b182307a3f1b9fb529088b602c"] \ No newline at end of file diff --git a/plugins/node.js b/plugins/node.js index e00ae83..9dd6e5b 100644 --- a/plugins/node.js +++ b/plugins/node.js @@ -1,11 +1,9 @@ let fs = require("fs"); let path = require("path"); -let { PurgeCSS } = require("purgecss"); let fetch = require("node-fetch"); let FormData = require("form-data"); let treeAdapter = require("./utils/tree-adapter"); -let requestPlugin = require("./request"); let rollup = require("rollup"); let commonjs = require("@rollup/plugin-commonjs"); @@ -15,6 +13,7 @@ let buble = require("@rollup/plugin-buble"); let json = require("@rollup/plugin-json"); let { terser } = require("rollup-plugin-terser"); let sourcemaps = require("rollup-plugin-sourcemaps"); +let { PurgeCSS } = require("purgecss"); let csso = require("csso"); global.fetch = fetch; @@ -31,18 +30,18 @@ let errorHandler = (resolve, reject) => (err) => { function fileMethodFactory() { let prop = []; - return function(file) { + return function(file, options = {}) { if (!file) { return prop; } let asyncMethod = async () => { let contents = ""; - let useSourceMap = /(development|test)/gi.test(process.env.NODE_ENV || ""); if (typeof file === "string") { let ext = file.split(".").pop(); if (/(js|jsx|mjs|ts|tsx)/.test(ext)) { let inputOptions = { + ...options.inputOptions, input: file, plugins: [ includepaths({ paths: [process.cwd()] }), @@ -59,20 +58,21 @@ function fileMethodFactory() { }), commonjs({ include: ["./node_modules/**", "./**"], - sourceMap: useSourceMap + sourceMap: true }), - terser({ warnings: "verbose" }) + terser({ warnings: "verbose" }), + ...((options.inputOptions || {}).plugins || []) ] }; - if (useSourceMap) { - inputOptions.plugins.push(sourcemaps()); - } + inputOptions.plugins.push(sourcemaps()); let outputOptions = { + compact: true, format: "iife", - sourcemap: useSourceMap, - compact: true + name: "v" + (0 | (Math.random() * 9e6)).toString(36), + ...options.outputOptions, + sourcemap: true }; const bundle = await rollup.rollup(inputOptions); @@ -90,6 +90,7 @@ function fileMethodFactory() { let content = fs.readFileSync(file, "utf8"); let { css, map } = csso.minify(content, { + ...options, filename: file, // will be added to source map as reference to source file sourceMap: true // generate source map }); @@ -156,18 +157,18 @@ inline.uncss = (function() { .join(""); let output = await purgecss.purge({ - content: contents, - css: [{ raw: css }], fontFace: true, keyframes: true, variables: true, defaultExtractor: (content) => content.match(/[A-Za-z0-9-_/:@]*[A-Za-z0-9-_/:@/]+/g) || [], - ...options + ...options, + content: contents, + css: [{ raw: css }] }); prop = csso.minify(output[0].css, { sourceMap: false, - restructure: false + restructure: true }).css; return prop; @@ -306,7 +307,6 @@ icons.options = { }; let plugin = function(v) { - v.usePlugin(requestPlugin); v.inline = inline; v.sw = sw; v.icons = icons; @@ -314,7 +314,17 @@ let plugin = function(v) { v.domToHtml = treeAdapter.domToHtml; v.domToHyperscript = treeAdapter.domToHyperscript; v.htmlToHyperscript = treeAdapter.htmlToHyperscript; + v.hyperscriptToHtml = (...args) => v.mount("div", () => args); }; +plugin.inline = inline; +plugin.sw = sw; +plugin.icons = icons; +plugin.htmlToDom = treeAdapter.htmlToDom; +plugin.domToHtml = treeAdapter.domToHtml; +plugin.domToHyperscript = treeAdapter.domToHyperscript; +plugin.htmlToHyperscript = treeAdapter.htmlToHyperscript; +plugin.hyperscriptToHtml = (...args) => v.mount("div", () => args); + plugin.default = plugin; module.exports = plugin; diff --git a/register.js b/register.js index 39b09a9..52f8160 100644 --- a/register.js +++ b/register.js @@ -1,7 +1,6 @@ const { addHook } = require("pirates"); const { transform } = require("sucrase"); -// Assume .jsx components are using x-engine const jsxOptions = { production: true, transforms: ["imports", "typescript", "jsx"], @@ -9,21 +8,15 @@ const jsxOptions = { jsxFragmentPragma: "v" }; -// Return a function to revert the hook -return addHook( +addHook( (code, filePath) => { - let ext = filePath.split(".").pop(); - - const fileOptions = { + let { code: transformed, sourceMap } = transform(code, { sourceMapOptions: { compiledFilename: filePath }, - filePath - }; - const { code: transformed, sourceMap } = transform(code, { - ...fileOptions, + filePath, ...jsxOptions }); - const mapBase64 = Buffer.from(JSON.stringify(sourceMap)).toString("base64"); - const suffix = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64}`; + let mapBase64 = Buffer.from(JSON.stringify(sourceMap)).toString("base64"); + let suffix = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64}`; return `${transformed}\n${suffix}`; }, { exts: [".js", ".jsx", ".ts", ".tsx", ".mjs"] }