From 3047229871aa615696b9b29998d8301381eb67da Mon Sep 17 00:00:00 2001 From: Masquerade Circus Date: Mon, 7 Dec 2020 22:32:35 -0600 Subject: [PATCH] fix(router/node): allow urls ending in slash as a valid route. v.inline.css now only minifies wo map Allow urls ending in slash as a valid route. v.inline.css now only minifies source without creating sourcemap. --- .dccache | 2 +- package.json | 5 ++--- plugins/node.js | 57 ++++++++++++++++++++++++----------------------- plugins/router.js | 2 +- yarn.lock | 31 ++++++++------------------ 5 files changed, 42 insertions(+), 55 deletions(-) diff --git a/.dccache b/.dccache index a9e9e19..49d4857 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"},[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 +[{"/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,1607309093507.3,"28"],[13063,1607120673640.9028,"29"],[2801,1601561147084.002,"30"],[9901,1607401764856.6829,"31"],[4083,1601561152283.9846,"32"],[4175,1601711784571.025,"33"],[6648,1607400123754.5967,"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","97443117b52b9716e65a8c96a5ebfe6eb65aa7d17c9100ae162ffefc2338f7c2","9e41c42d425160d207ad8dbe2eddd6c2bf432338665826d07c897e0f2b44a14d","0f4356afca5c145d5a323cd651da7354a490286b68bdd63078750f936d7e0483","d3f90c822ea7008e80faa710a1926c6f9ddec275c3bbef59ac06b8ae1560d2d9","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/package.json b/package.json index bc93000..aa7fe07 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "server side jsx" ], "engines": { - "node": ">=10.16.0" + "node": ">=11.0.0" }, "scripts": { "dev:source": "cross-env NODE_ENV=development node rollupSource.js", @@ -54,7 +54,7 @@ "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.0", - "csso": "^4.2.0", + "clean-css": "^4.2.3", "favicons": "^6.2.0", "form-data": "^3.0.0", "node-fetch": "^2.6.1", @@ -67,7 +67,6 @@ "rollup-plugin-sourcemaps": "^0.6.3", "rollup-plugin-string": "^3.0.0", "rollup-plugin-terser": "^7.0.2", - "source-map": "^0.7.3", "sucrase": "^3.16.0" }, "devDependencies": { diff --git a/plugins/node.js b/plugins/node.js index 9dd6e5b..8b86a2e 100644 --- a/plugins/node.js +++ b/plugins/node.js @@ -14,7 +14,7 @@ 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"); +let CleanCSS = require("clean-css"); global.fetch = fetch; global.FormData = FormData; @@ -54,19 +54,18 @@ function fileMethodFactory() { jsx: "v", transforms: { asyncAwait: false }, objectAssign: "Object.assign", - target: { chrome: 70, firefox: 60, safari: 10, node: "8.10" } + target: { chrome: 70, firefox: 60, safari: 10 } }), commonjs({ - include: ["./node_modules/**", "./**"], - sourceMap: true + sourceMap: true, + transformMixedEsModules: true }), terser({ warnings: "verbose" }), + sourcemaps(), ...((options.inputOptions || {}).plugins || []) ] }; - inputOptions.plugins.push(sourcemaps()); - let outputOptions = { compact: true, format: "iife", @@ -87,29 +86,24 @@ function fileMethodFactory() { } } } else if (/(css|scss|styl)/.test(ext)) { - 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 - }); - - let suffix = ""; - let inputMap = content.match(/\/\*# sourceMappingURL=(\S+)\s*\*\/\s*$/); - if (inputMap) { - map.applySourceMap(new SourceMapConsumer(inputMap[1]), inputFile); - } - - let mapBase64 = Buffer.from(map.toString()).toString("base64"); - suffix = `/*# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64} */`; + let { styles } = new CleanCSS({ + sourceMap: false, + level: { + 1: { + roundingPrecision: "all=3" + }, + 2: { + restructureRules: true // controls rule restructuring; defaults to false + } + } + }).minify([file]); - contents = { raw: css, map: suffix, file }; + contents = { raw: styles, map: null, file }; } else { - contents = { raw: fs.readFileSync(file, "utf8"), map: "", file }; + contents = { raw: fs.readFileSync(file, "utf8"), map: null, file }; } } else if (typeof file === "object" && "raw" in file) { - contents = { map: "", ...file }; + contents = { map: null, ...file }; } prop.push(contents); @@ -166,10 +160,17 @@ inline.uncss = (function() { css: [{ raw: css }] }); - prop = csso.minify(output[0].css, { + prop = new CleanCSS({ sourceMap: false, - restructure: true - }).css; + level: { + 1: { + roundingPrecision: "all=3" + }, + 2: { + restructureRules: true // controls rule restructuring; defaults to false + } + } + }).minify(output[0].css).styles; return prop; }; diff --git a/plugins/router.js b/plugins/router.js index 81d7239..53b0cd1 100644 --- a/plugins/router.js +++ b/plugins/router.js @@ -150,7 +150,7 @@ let plugin = function(v) { }, async go(path) { let parts = path.split("?", 2); - let urlParts = parts[0]; + let urlParts = parts[0].replace(/\/$/, ""); let queryParts = parts[1]; router.url = path; diff --git a/yarn.lock b/yarn.lock index 8a265ba..92da525 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2095,6 +2095,13 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -2672,26 +2679,11 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-tree@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" - integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -5555,11 +5547,6 @@ mdast-util-toc@^5.0.0: unist-util-is "^4.0.0" unist-util-visit "^2.0.0" -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -8032,12 +8019,12 @@ source-map@^0.5.0, source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3, source-map@~0.7.2: +source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==