From 9184e2c7926726b7755426dab2b7ea079de9ffda Mon Sep 17 00:00:00 2001 From: Talon Poole Date: Thu, 11 Feb 2021 20:57:08 +0000 Subject: [PATCH] enable stdio API --body returns just the innerHTML of the body gmi.min.css is created in the script not by Makefile refactor yargs code, better --help menu --- Makefile | 5 +- cli.js | 150 ++++++++++++++++++------------ example/expected.html | 9 +- gmi.css | 3 +- gmi.css.5 | 3 +- gmi.css.5.scd | 1 + gmi.html.js | 77 +++++++-------- gmi.min.css | 1 - package-lock.json | 211 +----------------------------------------- package.json | 2 +- 10 files changed, 138 insertions(+), 324 deletions(-) delete mode 100644 gmi.min.css diff --git a/Makefile b/Makefile index 2495db5..78c5298 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,8 @@ -build: format gmi.min.css gmi-web.1 gmi.css.5 +build: format gmi-web.1 gmi.css.5 gmi-web.1: gmi-web.1.scd scdoc < $< > $@ -gmi.min.css: gmi.css - cat $< | ./node_modules/minify/bin/minify.js --css > $@ - gmi.css.5: gmi.css.5.scd scdoc < $< > $@ diff --git a/cli.js b/cli.js index db9911d..954daac 100755 --- a/cli.js +++ b/cli.js @@ -1,12 +1,43 @@ #!/usr/bin/env node +import { readFileSync } from "fs"; import path from "path"; import fs from "vinyl-fs"; import map from "map-stream"; -import toHTML from "./gmi.html.js"; import yargs from "yargs"; +import CleanCSS from "clean-css"; +import toHTML, { BASE_CSS, html } from "./gmi.html.js"; + +const cli = yargs(process.argv.slice(2)) + .scriptName("gmi-web") + .command("$0 [files..]", "Convert text/gemini to text/html.", (yargs) => yargs + //yargs.positional("files") + ) + .options({ + language: { + alias: "lang", + required: true, + }, + css: { + type: "boolean", + default: true, + }, + }); + +cli.options({ + images: { + type: "boolean", + }, + audio: { + type: "boolean", + }, + video: { + type: "boolean", + }, +}); // TODO: automatically pull these in from gmi.css (also for gmi.css(5)) const GMI_CSS_VARS = [ + "body-width", "foreground", "background", "p-size", @@ -26,65 +57,64 @@ const GMI_CSS_VARS = [ "mono", "serif", "sans-serif", -]; +].map((key) => { + cli.option(key); + return key; +}); -yargs(process.argv.slice(2)) - .scriptName("gmi-web") +const argv = cli + .group(["language", "css"], "Core:") + .group(GMI_CSS_VARS, "CSS Variables:") + .group(["images", "audio", "video"], "Inline Media:") .config() - .command( - "$0 [files..]", - "Convert .gmi to .html. See gmi-web(1) for more details.", - (yargs) => - yargs - .positional("files", { - describe: "The *.gmi files to convert", - }) - .required("files", true) - .option("language", { - alias: "lang", - required: true, - type: "string", - describe: "Set the document meta language tag", - }) - .option("images", { - type: "boolean", - default: false, - describe: "Include images", - }) - .option("audio", { - type: "boolean", - default: false, - describe: "Include audio", - }) - .option("video", { - type: "boolean", - default: false, - describe: "Include video", - }) - .option("css", { - type: "boolean", - default: true, - describe: - "gmi.css is included by default. Use --no-css for the bare minimum + - - - heading 1 diff --git a/gmi.css b/gmi.css index ab16a0d..bae5b37 100644 --- a/gmi.css +++ b/gmi.css @@ -1,4 +1,5 @@ :root { + --body-width: 48rem; --foreground: black; --background: white; --p-size: 1.25rem; @@ -23,7 +24,7 @@ } body { - max-width: 48rem; + max-width: var(--body-width); padding: 0.5rem; margin: 0 auto; } diff --git a/gmi.css.5 b/gmi.css.5 index 5420e9c..ec7c512 100644 --- a/gmi.css.5 +++ b/gmi.css.5 @@ -5,7 +5,7 @@ .nh .ad l .\" Begin generated content: -.TH "gmi.css" "5" "2021-02-10" "1.0.7-rc.1" +.TH "gmi.css" "5" "2021-02-11" "1.0.7-rc.1" .P .SH NAME .P @@ -20,6 +20,7 @@ Ships with a handful of customizable variables. .P .nf .RS 4 +--body-width: 48rem; --foreground: black; --background: white; --p-size: 1\&.25rem; diff --git a/gmi.css.5.scd b/gmi.css.5.scd index dbbdd10..f812407 100644 --- a/gmi.css.5.scd +++ b/gmi.css.5.scd @@ -12,6 +12,7 @@ Ships with a handful of customizable variables. # VARIABLES ``` +--body-width: 48rem; --foreground: black; --background: white; --p-size: 1.25rem; diff --git a/gmi.html.js b/gmi.html.js index 2fe34c3..de1e0f0 100644 --- a/gmi.html.js +++ b/gmi.html.js @@ -1,5 +1,3 @@ -import fs from "fs"; -import path from "path"; import escape from "escape-html"; export const GMI_REGEX = /^((=>\s?(?[^\s]+)(\s(?.+))?)|(?<pre>```\s?(?<alt>.+)?)|(###\s?(?<h3>.+))|(##\s?(?<h2>.+))|(#\s?(?<h1>.+))|(\*\s?(?<li>.+))|(>\s?(?<quote>.+))|(?<text>(.+)?))$/; @@ -20,25 +18,19 @@ export function html(file, options) { charset: "utf-8", }) )}</head> -<body>${body(tokens, options)}</body> +<body> +${body(tokens, options)} +</body> </html> `; } export const BASE_CSS = "p,a,pre,h1,h2,h3,ul,blockquote,img,audio,video{display:block;max-width:100%;margin:0;padding:0;overflow-wrap:anywhere;}"; - -export const GMI_CSS = fs.readFileSync( - // TODO import.meta.resolve is supposed to accomplish this without "path" - path.resolve( - path.dirname(new URL(import.meta.url).pathname), - "./gmi.min.css" - ), - "utf8" -); - export function head(options) { return ` +<meta name="color-scheme" content="dark light"> +<style>${options.css}</style> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta charset="${options.charset}"> <meta language="${options.language}"> @@ -46,10 +38,6 @@ export function head(options) { !options.description ? "" : `<meta name="description" content="${options.description}}">` - }${ - !options.css - ? `<style>${BASE_CSS}</style>` - : `\n<meta name="color-scheme" content="dark light">\n<style>${GMI_CSS}</style>` }${ !options.canonical ? "" @@ -58,6 +46,34 @@ export function head(options) { `; } +export const IMAGE_EXT = /\.(apng|avif|gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp)$/; +export const AUDIO_EXT = /\.(mp3|wav|aac|aacp|mpeg|off|flac)$/; +export const VIDEO_EXT = /\.(mp4|webm)$/; + +function line( + { text, href, title, pre, alt, h1, h2, h3, li, quote }, + { images, audio, video } = {} +) { + if (text) return `<p>${escape(text)}</p>`; + if (href) { + const titleProp = title ? ` title="${title}"` : ""; + if (images && IMAGE_EXT.test(href)) + return `<img src="${href}"${titleProp}/>`; + if (audio && AUDIO_EXT.test(href)) + return `<audio controls src="${href}"${titleProp}></audio>`; + if (video && VIDEO_EXT.test(href)) + return `<video controls src="${href}"${titleProp}/></video>`; + + return `<a href="${href}">${title ? escape(title) : href}</a>`; + } + if (h1) return `<h1>${escape(h1)}</h1>`; + if (h2) return `<h2>${escape(h2)}</h2>`; + if (h3) return `<h3>${escape(h3)}</h3>`; + if (li) return `<li>${escape(li)}</li>`; + if (quote) return `<blockquote>${escape(quote)}</blockquote>`; + return `<p><br></p>`; +} + export function body(tokens, options) { let lines = []; @@ -86,33 +102,6 @@ export function body(tokens, options) { return lines.join("\n"); } -export const IMAGE_EXT = /\.(apng|avif|gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp)$/; -export const AUDIO_EXT = /\.(mp3|wav|aac|aacp|mpeg|off|flac)$/; -export const VIDEO_EXT = /\.(mp4|webm)$/; - -function line( - { text, href, title, pre, alt, h1, h2, h3, li, quote }, - { images, audio, video } = {} -) { - if (text) return `<p>${escape(text)}</p>`; - if (href) { - const titleProp = title ? ` title="${title}"` : ""; - if (images && IMAGE_EXT.test(href)) return `<img src="${href}"${titleProp}/>`; - if (audio && AUDIO_EXT.test(href)) - return `<audio controls src="${href}"${titleProp}></audio>`; - if (video && VIDEO_EXT.test(href)) - return `<video controls src="${href}"${titleProp}/></video>`; - - return `<a href="${href}">${title ? escape(title) : href}</a>`; - } - if (h1) return `<h1>${escape(h1)}</h1>`; - if (h2) return `<h2>${escape(h2)}</h2>`; - if (h3) return `<h3>${escape(h3)}</h3>`; - if (li) return `<li>${escape(li)}</li>`; - if (quote) return `<blockquote>${escape(quote)}</blockquote>`; - return `<p><br></p>`; -} - export const GMI_EXT = /\.gmi$/; export default (options) => (file, cb) => { diff --git a/gmi.min.css b/gmi.min.css deleted file mode 100644 index 720418d..0000000 --- a/gmi.min.css +++ /dev/null @@ -1 +0,0 @@ -:root{--foreground:black;--background:white;--p-size:1.25rem;--p-indent:0rem;--p-line-height:1.5;--a-size:var(--p-size);--pre-size:1rem;--pre-line-height:1;--h1-size:3rem;--h2-size:2.25rem;--h3-size:1.5rem;--heading-line-height:1.25;--ul-size:var(--p-size);--ul-line-height:1.25;--blockquote-size:var(--p-size);--blockquote-line-height:1.25;--mono:Consolas,monaco,monospace;--serif:georgia,times,serif;--sans-serif:-apple-system,BlinkMacSystemFont,"avenir next",avenir,helvetica,"helvetica neue",ubuntu,roboto,noto,"segoe ui",arial,sans-serif}body{max-width:48rem;padding:.5rem;margin:0 auto}a,audio,blockquote,h1,h2,h3,img,p,pre,ul,video{display:block;max-width:100%;margin:0;padding:0;overflow-wrap:anywhere}h1,h2,h3{font-family:var(--sans-serif);line-height:var(--heading-line-height)}p{font-size:var(--p-size);font-family:var(--serif);text-indent:var(--p-indent);line-height:var(--p-line-height)}a::before{font-size:var(--p-size);font-family:var(--mono);content:"⇒";padding-right:.25rem;vertical-align:middle}a{font-size:var(--p-size);font-family:var(--serif);text-decoration:none}pre{font-size:var(--pre-size);font-family:var(--mono);line-height:var(--pre-line-height);padding:1.25rem;overflow-y:auto}h1{font-size:var(--h1-size)}h2{font-size:var(--h2-size)}h3{font-size:var(--h3-size)}ul{font-size:var(--p-size);font-family:var(--serif);line-height:var(--ul-line-height);list-style-type:none}li::before{font-size:var(--p-size);font-family:var(--mono);content:"*";vertical-align:middle;padding-right:.5rem}blockquote{font-size:var(--p-size);font-family:var(--serif);line-height:var(--blockquote-line-height);padding-left:.75rem}pre+blockquote{padding-top:.5rem;padding-bottom:.5rem}a,blockquote,body,h1,h2,h3,html,p,pre::-moz-selection,pre::selection,ul{color:var(--foreground);background-color:var(--background)}blockquote{border-left:.5rem solid var(--foreground)}::-moz-selection,::selection,a:hover,pre{color:var(--background);background-color:var(--foreground)}@media (prefers-color-scheme:dark){a,blockquote,body,h1,h2,h3,html,p,pre::-moz-selection,pre::selection,ul{color:var(--background);background-color:var(--foreground)}blockquote{border-left:.5rem solid var(--background)}::-moz-selection,::selection,a:hover,pre{color:var(--foreground);background-color:var(--background)}} diff --git a/package-lock.json b/package-lock.json index 134808a..c26f70b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,12 +44,6 @@ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -59,21 +53,10 @@ "get-intrinsic": "^1.0.2" } }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.0.1.tgz", + "integrity": "sha512-F1zAGOowUCg8yxT0O4UR+nmbMauf3YwbiUS60CPxpzJU7ulpamGzQomFrJSK4w/HqHtMmQKSHJUNue+dQQYQdg==", "requires": { "source-map": "~0.6.0" } @@ -126,12 +109,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -150,21 +127,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "css-b64-images": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", - "integrity": "sha1-QgBdgyBLK0pdk7axpWRBM7WSegI=", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -173,16 +135,6 @@ "object-keys": "^1.0.12" } }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -322,48 +274,6 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - } - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -472,34 +382,11 @@ "flush-write-stream": "^1.0.2" } }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, "map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=" }, - "minify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/minify/-/minify-6.0.1.tgz", - "integrity": "sha512-JMG5VruvghXZ1VnPCffnpESUzrhNPTT/uNogew9CmPdd3zmohSEt8/HhPxpR7CiXnBYWExW2gGoagZxTy9rnLg==", - "dev": true, - "requires": { - "clean-css": "^4.1.6", - "css-b64-images": "~0.2.5", - "debug": "^4.1.0", - "html-minifier-terser": "^5.1.1", - "terser": "^5.3.2", - "try-to-catch": "^3.0.0" - } - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -508,22 +395,6 @@ "brace-expansion": "^1.1.7" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", @@ -572,26 +443,6 @@ "readable-stream": "^2.0.1" } }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -646,12 +497,6 @@ "util-deprecate": "~1.0.1" } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -702,18 +547,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "stream-shift": { "version": "1.0.1", @@ -746,31 +580,6 @@ "ansi-regex": "^5.0.0" } }, - "terser": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", - "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -806,18 +615,6 @@ "through2": "^2.0.3" } }, - "try-to-catch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.0.tgz", - "integrity": "sha512-eIm6ZXwR35jVF8By/HdbbkcaCDTBI5PpCPkejRKrYp0jyf/DbCCcRhHD7/O9jtFI3ewsqo9WctFEiJTS6i+CQA==", - "dev": true - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true - }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", diff --git a/package.json b/package.json index e6d70ce..69a397a 100644 --- a/package.json +++ b/package.json @@ -28,13 +28,13 @@ "clean": "make clean" }, "dependencies": { + "clean-css": "^5.0.1", "escape-html": "^1.0.3", "map-stream": "0.0.7", "vinyl-fs": "^3.0.3", "yargs": "^16.2.0" }, "devDependencies": { - "minify": "^6.0.1", "prettier": "^2.2.1" }, "repository": {