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
This commit is contained in:
parent
cce9b22502
commit
9184e2c792
5
Makefile
5
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 < $< > $@
|
||||
|
||||
|
|
150
cli.js
150
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 <style>",
|
||||
}),
|
||||
(argv) => {
|
||||
const styles = GMI_CSS_VARS.reduce((style, key) => {
|
||||
if (argv[key]) {
|
||||
style += `--${key}: ${argv[key]};`;
|
||||
}
|
||||
return style;
|
||||
}, "");
|
||||
fs.src(argv.files)
|
||||
.pipe(
|
||||
map(
|
||||
toHTML({
|
||||
...argv,
|
||||
styles,
|
||||
})
|
||||
)
|
||||
)
|
||||
.pipe(fs.dest((file) => path.dirname(file.path)));
|
||||
}
|
||||
)
|
||||
.showHelpOnFail(true, "Specify --help for available options")
|
||||
.example("$0 --lang en $(find ~/my-capsule -name '*.gmi')")
|
||||
.example("cat ~/my-capsule/index.gmi | $0 --lang en")
|
||||
.epilog("See the gmi-web(1) man page for more information!")
|
||||
.showHelpOnFail(true)
|
||||
.help().argv;
|
||||
|
||||
argv.css = argv.css || BASE_CSS;
|
||||
|
||||
let styles = "";
|
||||
if (argv.css) {
|
||||
styles = GMI_CSS_VARS.reduce((style, key) => {
|
||||
if (argv[key]) {
|
||||
style += `--${key}: ${argv[key]};`;
|
||||
}
|
||||
}, styles);
|
||||
|
||||
argv.css = new CleanCSS().minify(
|
||||
readFileSync(
|
||||
// TODO import.meta.resolve is supposed to accomplish this without "path"
|
||||
path.resolve(
|
||||
path.dirname(new URL(import.meta.url).pathname),
|
||||
"./gmi.css"
|
||||
),
|
||||
"utf8"
|
||||
)
|
||||
).styles;
|
||||
}
|
||||
|
||||
if (!argv.files) {
|
||||
let gemtext
|
||||
try {
|
||||
gemtext = readFileSync(process.stdin.fd)
|
||||
} catch (e) {
|
||||
console.error("Either send a file to this program from stdin")
|
||||
console.error("or provide [files..]\n")
|
||||
console.error("See --help or read gmi-web(1) for usage details.")
|
||||
process.exit(1)
|
||||
}
|
||||
console.log(html({ contents: gemtext }, argv))
|
||||
} else {
|
||||
fs.src(argv.files)
|
||||
.pipe(
|
||||
map(
|
||||
toHTML({
|
||||
...argv,
|
||||
styles,
|
||||
})
|
||||
)
|
||||
)
|
||||
.pipe(fs.dest((file) => path.dirname(file.path)));
|
||||
}
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" style="">
|
||||
<html lang="en" style="undefined">
|
||||
<head>
|
||||
<meta name="color-scheme" content="dark light">
|
||||
<style>:root{--body-width:48rem;--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:var(--body-width);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:0.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:0.5rem}blockquote{font-size:var(--p-size);font-family:var(--serif);line-height:var(--blockquote-line-height);padding-left:0.75rem}pre+blockquote{padding-top:0.5rem;padding-bottom:0.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)}}</style>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
<meta language="en">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="color-scheme" content="dark light">
|
||||
<style>: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)}}
|
||||
</style>
|
||||
<title>heading 1</title>
|
||||
</head>
|
||||
<body>
|
||||
|
|
3
gmi.css
3
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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -12,6 +12,7 @@ Ships with a handful of customizable variables.
|
|||
# VARIABLES
|
||||
|
||||
```
|
||||
--body-width: 48rem;
|
||||
--foreground: black;
|
||||
--background: white;
|
||||
--p-size: 1.25rem;
|
||||
|
|
77
gmi.html.js
77
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?(?<href>[^\s]+)(\s(?<title>.+))?)|(?<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) => {
|
||||
|
|
1
gmi.min.css
vendored
1
gmi.min.css
vendored
|
@ -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)}}
|
211
package-lock.json
generated
211
package-lock.json
generated
|
@ -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",
|
||||
|
|
|
@ -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": {
|
||||
|
|
Loading…
Reference in a new issue